xref: /plugin/calendar/CHANGELOG.md (revision 4590242deeee3fc24853b3bd5112bfa389075604)
1# Calendar Plugin Changelog
2## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB
3
4- **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Events Manager and Cleanup sections)
5- **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage tab sections
6- **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now independent of Outlook config save
7- **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value
8
9## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX
10
11- **Fixed:** In Firefox, the SMTWTFS day-of-week header row was rendering at the same height as calendar day cells (58px instead of 22px). Firefox ignores `max-height` on `<th>` table cells per CSS spec. Replaced `<thead><tr><th>` with a CSS grid `<div>` outside the table, making header height fully independent of table cell sizing. Works consistently across Chrome, Firefox, Safari, and Edge.
12
13## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX
14
15- **Fixed:** `theme=wiki` (and all `theme=` parameters) had no effect — all three render functions (`renderCompactCalendar`, `renderEventPanelOnly`, `renderSidebarWidget`) were ignoring the syntax parameter and always reading the admin global default via `getSidebarTheme()`
16- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller
17- **How it works now:** `{{calendar theme=wiki}}`, `{{eventlist sidebar theme=purple}}`, `{{eventpanel theme=professional}}` all correctly apply the specified theme. The admin-configured default is used as fallback only when no `theme=` parameter is present.
18
19
20## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE
21
22- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed
23- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified
24- **Audited:** style.css (3,218 lines) — balanced braces confirmed
25- **Audited:** All admin manage tab action handlers verified functional (13 actions)
26- **New:** Fresh README.md for GitHub with complete documentation
27- **Includes all v5.5.x fixes:**
28  - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total))
29  - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel
30  - Conflict badges on past events after AJAX navigation
31  - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal
32
33## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP
34
35- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers
36- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0`
37- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning
38- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name
39- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared
40- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check
41- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving
42- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files
43- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt
44- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache
45- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`)
46- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries`
47- **Removed:** Stale "NEW!" comment from Events Manager section
48
49## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH
50
51- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API
52- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status)
53- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run
54- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing
55- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total)
56- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed
57- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important)
58- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead
59- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text
60- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes)
61
62## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH
63
64- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys
65- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional)
66- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background
67- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files)
68- **Changed:** Wiki theme section header text now white for readability on colored backgrounds
69- **Changed:** Week grid JS theme colors now use actual $themeStyles values
70
71## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX
72
73- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch)
74
75## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING
76
77- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner
78- **Fixed:** Week grid conflict tooltips also fixed (same issue)
79- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data
80- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip)
81
82## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD
83
84- **Fixed:** Past events now expand on click from initial page load (PHP-rendered items were missing onclick="togglePastEventExpand(this)" handler that the JS-rebuilt version had)
85
86## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS
87
88- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body)
89- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string
90
91## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING
92
93- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping
94- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON)
95- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute
96- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility
97
98## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING
99
100- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation
101- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads
102- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-)
103- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1
104- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds
105- **Added:** ESC key now also closes day popups and conflict tooltips
106- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding
107
108## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY
109
110- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance
111- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js
112- **Refactored:** style.css is now the single source of truth for all visual styling
113- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container
114- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget)
115- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars
116- **Added:** CSS variable injection for {{eventlist panel}} containers
117- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers
118- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position
119- **Added:** Wiki template mapping reads __link__ as accent color from style.ini
120- **Added:** Detailed CSS variable reference table in style.css header comment
121- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php
122- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles
123- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div
124- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible)
125- **Removed:** $isWikiTheme branching from PHP render path
126
127## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! ��
128
129### �� Added: Hearts in Explosions!
130- **Added:** 8-12 pink hearts in each click explosion
131- **Added:** Random sizes (12-28px) and directions
132- **Result:** Extra love in every click! ��
133
134### �� Fixed: Background CSS Property for Dark Mode Readers
135- **Fixed:** Added `background: transparent` to CSS (was completely removed)
136- **Fixed:** Now CSS readers can detect and modify background property
137- **Why:** Inline styles override transparent, but CSS readers can now see the property
138- **Result:** Dark mode plugins can now change calendar backgrounds!
139
140### The CSS Problem
141
142**Why backgrounds weren't changing with dark mode readers**:
143
144**Before (v5.3.5)**:
145```css
146.calendar-compact-grid tbody td {
147    /* background removed - set via inline style */
148    border: 1px solid...
149}
150```
151
152**Problem**: CSS property doesn't exist!
153- Dark mode readers look for `background` property in CSS
154- Can't override what doesn't exist
155- Inline styles work, but readers can't modify them
156
157**After (v5.3.6)**:
158```css
159.calendar-compact-grid tbody td {
160    background: transparent;  /* Now exists! */
161    border: 1px solid...
162}
163```
164
165**Solution**:
166- Property exists in CSS
167- Dark mode readers can override it
168- Inline styles still override transparent
169- Everyone wins!
170
171### What's Fixed
172
173**Elements now have background property**:
174- `.calendar-compact-grid tbody td` ✓
175- `.calendar-compact-grid tbody td:hover` ✓
176- `.event-compact-item` ✓
177- `.event-compact-item:hover` ✓
178
179**How it works**:
1801. CSS sets `background: transparent` (default)
1812. Inline styles set actual color (overrides transparent)
1823. Dark mode readers can override CSS property
1834. Works for everyone!
184
185### Hearts in Explosion
186
187**Click anywhere → Hearts explode!**
188
189**Heart details**:
190- Count: 8-12 per explosion (random)
191- Size: 12-28px (random variety)
192- Emoji: �� (pink heart)
193- Direction: Random 360°
194- Speed: 60-140px travel
195- Duration: 0.8-1.2s
196- z-index: 9999999 (always visible)
197
198**Combined with**:
199- 25 glowing particles
200- 40 pixel sparkles
201- Bright flash
202- **Total: 73-77 elements!**
203
204### Visual Result
205
206**Click explosion**:
207```
208    �� ✦ • ✦ ��
209  �� •         • ��
210✦  •     ��!     •  ✦
211  �� •         • ��
212    �� ✦ • ✦ ��
213
214Hearts + Particles + Pixels!
215```
216
217**Dark mode now works**:
218```css
219/* Dark mode reader can now do this: */
220.calendar-compact-grid tbody td {
221    background: #000 !important;  /* Works! */
222}
223```
224
225### Why Transparent Works
226
227**CSS Cascade**:
2281. CSS: `background: transparent` (lowest priority)
2292. Inline style: `background: #f5f5f5` (overrides CSS)
2303. Dark mode CSS: `background: #000 !important` (overrides inline)
231
232**Perfect solution!** ✓
233
234## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! ��
235
236### �� Fixed: Particles Now Appear Above All Dialogs!
237- **Fixed:** Increased z-index to 9999999 for all particles
238- **Fixed:** Particles now visible above event dialogs, month picker, etc.
239- **Result:** Cursor effects and explosions always visible!
240
241### The Z-Index Problem
242
243**Before (v5.3.4)**:
244- Particles: z-index 9999
245- Dialogs: z-index 10000-999999
246- **Particles hidden behind dialogs!**
247
248**After (v5.3.5)**:
249- Particles: z-index 9999999
250- Trail: z-index 9999998
251- Pixels: z-index 9999997
252- **Particles ALWAYS on top!**
253
254### What's Fixed
255
256✅ **Main particles** (explosion orbs)
257✅ **Cursor trail** (glowing dots)
258✅ **Pixel sparkles** (tiny bright stars)
259✅ **Flash effect** (click burst)
260
261**All now appear above**:
262- Event dialog popups
263- Month picker
264- Day popups
265- Any modal overlays
266
267### Visual Result
268
269**Moving cursor over dialog**:
270```
271┌─────────────────────┐
272│  Event Dialog       │
273│  ✦ • ✦             │  ← Sparkles visible!
274│    →  ✦             │  ← Cursor trail visible!
275│  • ✦ •              │
276└─────────────────────┘
277```
278
279**Clicking on dialog**:
280```
281┌─────────────────────┐
282│  ✦ • ✦ • ✦         │
283│ •     ��!     •    │  ← Explosion visible!
284│  ✦ • ✦ • ✦         │
285└─────────────────────┘
286```
287
288**Perfect visibility everywhere!** ✨
289
290## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX
291
292### �� Fixed: Month Picker Now Themed!
293- **Fixed:** Jump to Month dialog now uses theme colors
294- **Fixed:** Dialog background, borders, text all themed
295- **Fixed:** Select dropdowns use theme colors
296- **Fixed:** Buttons use theme accent colors
297- **Result:** Month picker matches calendar theme!
298
299### �� Fixed: Cursor Effects Work in Dialogs!
300- **Fixed:** Cursor trail now works when hovering over dialogs
301- **Fixed:** Click explosions work when clicking inside dialogs
302- **Technical:** Changed to capture phase event listeners
303- **Result:** Effects work EVERYWHERE now!
304
305### Month Picker Theming
306
307**Before (v5.3.3)**:
308- White background (hardcoded)
309- Black text (hardcoded)
310- No theme integration
311- Looked out of place
312
313**After (v5.3.4)**:
314- Dialog background: `theme.bg`
315- Dialog border: `theme.border`
316- Text color: `theme.text_primary`
317- Dropdowns: `theme.cell_bg` + `theme.text_primary`
318- Cancel button: `theme.cell_bg`
319- Go button: `theme.border` (accent color)
320
321**Fully integrated!** ✅
322
323---
324
325### Theme Examples
326
327**Matrix Theme**:
328```
329┌─────────────────────────┐
330│ Jump to Month           │ ← Dark bg, green border
331│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
332│ [Cancel] [Go]           │ ← Green "Go" button
333└─────────────────────────┘
334```
335
336**Pink Theme**:
337```
338┌─────────────────────────┐
339│ Jump to Month           │ ← Dark bg, pink border
340│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
341│ [Cancel] [Go]           │ ← Pink "Go" button
342└─────────────────────────┘
343With sparkle effects! ✨
344```
345
346**Professional Theme**:
347```
348┌─────────────────────────┐
349│ Jump to Month           │ ← Clean bg, blue border
350│ [February ▼] [2026 ▼]  │ ← Clean dropdowns
351│ [Cancel] [Go]           │ ← Blue "Go" button
352└─────────────────────────┘
353```
354
355---
356
357### Dialog Cursor Fix
358
359**The Problem**:
360Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects!
361
362**The Solution**:
363Use **capture phase** event listeners:
364```javascript
365// Before (bubbling phase)
366document.addEventListener('click', handler)
367
368// After (capture phase)
369document.addEventListener('click', handler, true)
370371                                   Capture phase!
372```
373
374**Capture phase runs BEFORE stopPropagation!**
375
376---
377
378### Now Works Everywhere
379
380✅ **Calendar area**
381✅ **Event dialogs**
382✅ **Month picker dialog**
383✅ **Day popup dialogs**
384✅ **Anywhere on screen**
385
386**No more blocked effects!** ��
387
388---
389
390### Technical Details
391
392**Event phases**:
393```
3941. Capture phase   ← We listen here now!
3952. Target phase
3963. Bubbling phase  ← stopPropagation blocks this
397```
398
399**By using capture phase**:
400- Events caught before stopPropagation
401- Works in all dialogs
402- No conflicts with dialog logic
403
404---
405
406### All Dialogs Checked
407
408✅ **Month picker** - Now themed!
409✅ **Event dialog** - Already themed
410✅ **Day popup** - Already themed
411
412**Everything consistent!** ��
413
414---
415
416## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨
417
418### ✨ Added: Bright Neon Pixel Sparkles Everywhere!
419- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail
420- **Added:** 40 pixel sparkles in click explosions
421- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar)
422- **Result:** Maximum sparkle effect! ��
423
424### Tiny Pixel Sparkles
425
426**3-6 tiny bright pixels appear with each cursor movement!**
427
428**Characteristics**:
429- Size: 1-2px (single pixel appearance!)
430- Colors: Bright neon whites and pinks
431  - Pure white (#fff) - 40% chance
432  - Hot pink (#ff1493)
433  - Pink (#ff69b4)
434  - Light pink (#ffb6c1)
435  - Soft pink (#ff85c1)
436- Glow: Triple-layer shadow (intense!)
437- Spawn: Random 30px radius around cursor
438- Animations:
439  - 50% twinkle in place
440  - 50% float upward
441
442**Creates a cloud of sparkles around your cursor!**
443
444---
445
446### Click Explosion Enhanced
447
448**Now with 40 EXTRA pixel sparkles!**
449
450**Click anywhere → BIG BOOM**:
451- 25 main glowing particles (6-10px)
452- **40 tiny pixel sparkles (1-2px)** ← NEW!
453- Bright white flash
454- Total: 65+ visual elements!
455
456**Pixel sparkles in explosion**:
457- Shoot outward in all directions
458- Random distances (30-110px)
459- Multiple bright colors
460- Some twinkle, some explode
461- Creates stellar effect!
462
463---
464
465### Entire Screen Coverage
466
467**Effects now work EVERYWHERE!**
468
469**Before (v5.3.2)**:
470- Only inside calendar viewport
471- Limited to calendar area
472
473**After (v5.3.3)**:
474- Works on entire screen! ✓
475- Cursor trail follows everywhere
476- Click explosions anywhere
477- Used `position: fixed` + `clientX/Y`
478
479**Move anywhere on the page for sparkles!**
480
481---
482
483### Visual Effect
484
485**Cursor movement**:
486```
487    • ✦ •       ← Tiny pixels
488  •   ✦   •     ← Glowing trail
489✦  •  →  •  ✦   ← Cursor
490  •   ✦   •     ← Mixed sizes
491    • ✦ •       ← Sparkle cloud
492```
493
494**Click explosion**:
495```
496    ✦ • ✦ • ✦
497  ✦ •         • ✦
498✦  •    ��!    •  ✦
499  ✦ •         • ✦
500    ✦ • ✦ • ✦
501
50265+ particles total!
503```
504
505---
506
507### Sparkle Details
508
509**Trail Pixels** (3-6 per movement):
510- Size: 1-2px
511- Spawn rate: Every 40ms
512- Spread: 30px radius
513- Duration: 0.6-0.8s
514- 50% twinkle, 50% float
515
516**Explosion Pixels** (40 total):
517- Size: 1-3px
518- Spread: 30-110px radius
519- Duration: 0.4-0.8s
520- All directions
521- Intense glow
522
523**Main Particles** (25 total):
524- Size: 4-10px
525- Spread: 50-150px
526- Full color palette
527- Original firework effect
528
529---
530
531### Color Distribution
532
533**Pixel sparkles favor white**:
534- 40% pure white (#fff) - brightest!
535- 60% pink shades - variety
536
537**Creates brilliant sparkle effect!**
538
539---
540
541### Performance
542
543**Still optimized**:
544- Trail: 30ms throttle
545- Pixels: 40ms throttle
546- Auto-cleanup
547- Hardware accelerated
548- Smooth 60fps
549
550**Lots of sparkles, zero lag!**
551
552---
553
554### Full-Screen Magic
555
556**Pink theme calendar detected**:
557```javascript
558if (pink calendar exists) {
559    Enable effects for ENTIRE SCREEN
560    Not just calendar area
561}
562```
563
564**Works everywhere on page!** ✨
565
566---
567
568## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! ����
569
570### �� Changed: Glowing Pink Particles Instead of Emoji Sparkles!
571- **Removed:** Emoji sparkle images (✨)
572- **Added:** Glowing pink particle trail following cursor
573- **Added:** FIREWORKS explosion on click!
574- **Result:** Beautiful glowing effects, not emoji!
575
576### Glowing Cursor Trail
577
578**Pink glowing dots follow your cursor!**
579- Small glowing pink orbs (8px)
580- Radial gradient glow effect
581- Multiple box-shadows for depth
582- Fade out smoothly (0.5s)
583- Throttled to 30ms for smoothness
584
585```
586    •  •
587  •  →  •   ← Your cursor
588    •  •
589```
590
591**Not emoji - actual glowing particles!**
592
593---
594
595### Click Fireworks! ��
596
597**Click anywhere on the calendar → BOOM!**
598
599**20 pink particles explode outward!**
600- Radial burst pattern (360° coverage)
601- Random speeds (50-150px travel)
602- 4 shades of pink:
603  - Hot pink (#ff1493)
604  - Pink (#ff69b4)
605  - Light pink (#ff85c1)
606  - Very light pink (#ffc0cb)
607- Random sizes (4-10px)
608- Individual glowing halos
609- Smooth explosion animation
610
611**Plus a bright flash at click point!**
612- 30px radius glow
613- Intense pink flash
614- Fades quickly (0.3s)
615
616---
617
618### Visual Effect
619
620**Cursor movement**:
621```
622623      •  •  •
624   •     →     •  ← Glowing trail
625      •  •  •
626627```
628
629**Click explosion**:
630```
631         •  •  •
632      •           •
633   •      BOOM!      •  ← 20 particles
634      •           •
635         •  •  •
636```
637
638**All particles glow with pink halos!**
639
640---
641
642### Particle Details
643
644**Trail Particles**:
645- Size: 8x8px
646- Color: Pink radial gradient
647- Shadow: 10px + 20px glow layers
648- Duration: 0.5s fade
649- Rate: 30ms throttle
650
651**Explosion Particles**:
652- Size: 4-10px (random)
653- Colors: 4 pink shades (random)
654- Shadow: 10px + 20px glow (matches color)
655- Duration: 0.6-1.0s (random)
656- Pattern: Perfect circle burst
657
658**Flash Effect**:
659- Size: 30x30px
660- Color: Bright hot pink
661- Shadow: 30px + 50px mega-glow
662- Duration: 0.3s instant fade
663
664---
665
666### Performance
667
668**Optimized for smoothness**:
669- Trail throttled to 30ms
670- Auto-cleanup after animations
671- CSS hardware acceleration
672- No memory leaks
673- Smooth 60fps
674
675**Won't slow you down!**
676
677---
678
679### Comparison
680
681**Before (v5.3.1)**:
682- ✨ Emoji sparkle images
683- Static unicode characters
684- Limited visual impact
685
686**After (v5.3.2)**:
687- �� Glowing pink particles
688- Radial gradients + shadows
689- Beautiful firework explosions
690- Much more impressive!
691
692---
693
694### Only Pink Theme
695
696**These effects only appear**:
697- On `.calendar-theme-pink` elements
698- Other themes unaffected
699- Pure pink magic! ��
700
701---
702
703## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨
704
705### ✨ Added: MySpace-Style Sparkle Trail!
706- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!)
707- **Toned down:** Reduced glow effects for better taste
708- **Added:** Sparkles appear on cell hover
709- **Added:** Sparkles on event hover (left and right sides!)
710- **Added:** Sparkles on today's cell corners
711- **Added:** Sparkles on navigation buttons
712- **Added:** Sparkles in calendar header
713- **Result:** Pure nostalgic MySpace magic! ✨
714
715### MySpace Sparkle Cursor Trail
716
717**The classic effect from 2006!**
718- Sparkles follow your cursor as you move
719- Random sizes (12-22px)
720- Random slight offsets for natural feel
721- Float up and fade out animation
722- Throttled to 50ms (smooth, not laggy)
723- Only on pink theme calendars
724
725```
726727  ✨    ✨
728✨   →   ✨  (cursor trail)
729  ✨    ✨
730731```
732
733**Pure nostalgia!**
734
735---
736
737### Sparkles Everywhere
738
739**Calendar cells**:
740- Hover over any day → ✨ floats up
741- Smooth 1.5s animation
742- Centered sparkle
743
744**Event items**:
745- Hover → ✨ on left side
746- Hover → ✨ on right side
747- Staggered animations (0.4s delay)
748- Continuous twinkling
749
750**Today's cell**:
751- ✨ in top-right corner (continuous)
752- ✨ in bottom-left corner (offset timing)
753- Always sparkling!
754
755**Navigation buttons**:
756- Hover on < or > → ✨ appears top-right
757- One-time float animation
758
759**Calendar header**:
760- ✨ on left side (continuous)
761- ✨ on right side (offset 1s)
762- Always twinkling
763
764---
765
766### Toned Down Glows
767
768**Before (v5.3.0)**: TOO MUCH GLOW!
769- 50px shadows
770- 4-layer effects
771- Overwhelming
772
773**After (v5.3.1)**: Just right!
774- 8-15px max shadows (subtle)
775- 2-layer effects
776- Professional with personality
777
778**Glow reductions**:
779- Today shimmer: 35px → 12px
780- Today hover: 50px → 15px
781- Event glow: 18px → 6px
782- Badge pulse: 25px → 8px
783- Container glow: 20px → 8px
784
785**Much more tasteful!**
786
787---
788
789### Sparkle Animations
790
791**sparkle-twinkle** (0.8s):
792```
793Opacity: 0 → 1 → 1 → 0
794Scale: 0 → 1 → 1 → 0
795Rotation: 0° → 180° → 360°
796```
797
798**sparkle-float** (1.5s):
799```
800Moves up: 0px → -50px
801Opacity: 0 → 1 → 1 → 0
802Scale: 0 → 1 → 0.8 → 0
803```
804
805**Pure MySpace magic!** ✨
806
807---
808
809### Where Sparkles Appear
810
811✅ **Cursor trail** (continuous while moving)
812✅ **Calendar cells** (on hover)
813✅ **Event items** (on hover, left + right)
814✅ **Today's cell** (continuous, corners)
815✅ **Navigation buttons** (on hover)
816✅ **Calendar header** (continuous, sides)
817
818**Sparkles EVERYWHERE!** ✨✨✨
819
820---
821
822### Performance
823
824**Cursor trail**:
825- Throttled to 50ms
826- Auto-cleanup after 1s
827- No memory leaks
828- Smooth 60fps
829
830**CSS animations**:
831- Hardware accelerated
832- No JavaScript overhead (except cursor)
833- Efficient transforms
834
835**Won't slow down your browser!**
836
837---
838
839### Pure Nostalgia
840
841**Remember MySpace profiles?**
842- Glitter graphics ✨
843- Sparkle cursors ✨
844- Auto-play music �� (ok, we didn't add that)
845- Animated GIF backgrounds
846- Comic Sans everywhere
847
848**We brought back the sparkles!** ✨
849
850---
851
852### Theme Comparison
853
854**Other themes**: Professional and clean
855**Pink theme**: ✨ SPARKLES EVERYWHERE ✨
856
857**Only pink theme gets the magic!**
858
859---
860
861## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨��
862
863### �� Added: Pink Theme Gets BLING!
864- **Added:** Shimmering animation for today's cell
865- **Added:** Sparkling text effect on today's date
866- **Added:** Glowing pulse for event bars
867- **Added:** Gradient shimmer on headers
868- **Added:** Extra glow on hover effects
869- **Added:** Pulsing urgent badge for past due items
870- **Result:** Pink theme is now FABULOUS! ✨
871
872### Shimmer Effects
873
874**Today's Cell**:
875- Continuous shimmer animation (2 second loop)
876- Multi-layer glow effect
877- Pink and hot pink overlapping shadows
878- Pulses from subtle to intense
879- Extra sparkle on hover
880
881**Today's Date Number**:
882- Sparkle animation (1.5 second loop)
883- Text shadow glow effect
884- Slight scale pulse (100% → 105%)
885- Pink to hot pink shadow transition
886
887### Glow Effects
888
889**Event Bars**:
890- Continuous glow pulse (2 second loop)
891- Uses event's own color
892- Adds pink accent glow layer
893- Creates depth and dimension
894
895**Event Items**:
896- Subtle base glow
897- Enhanced glow on hover
898- Slight slide animation on hover
899- Professional yet playful
900
901### Gradient Shimmer
902
903**Headers**:
904- Animated gradient background
905- 3-color pink gradient flow
906- Smooth 3-second animation
907- Creates movement and life
908- Applies to calendar header and event list header
909
910### Badge Effects
911
912**TODAY Badge**:
913- Sparkle animation
914- Synchronized with today's date
915- Extra prominence
916
917**PAST DUE Badge**:
918- Urgent pulsing effect (1 second loop)
919- Orange glow intensifies
920- Draws attention to urgent items
921- Faster pulse for urgency
922
923### Container Bling
924
925**Main Container**:
926- Multi-layer pink glow
927- Soft outer shadow
928- Creates floating effect
929- Subtle but elegant
930
931### Animation Details
932
933**pink-shimmer** (2s loop):
934```
935Start: Subtle 5px glow
936Peak:  Intense 35px multi-layer glow
937End:   Back to subtle
938```
939
940**pink-sparkle** (1.5s loop):
941```
942Start: Base glow + scale 1.0
943Peak:  Intense glow + scale 1.05
944End:   Back to base
945```
946
947**pink-glow-pulse** (2s loop):
948```
949Start: Small glow (3px, 6px)
950Peak:  Large glow (6px, 12px, 18px)
951End:   Back to small
952```
953
954**pink-gradient-shimmer** (3s loop):
955```
956Gradient flows across element
957Creates wave effect
958Smooth continuous motion
959```
960
961**pink-pulse-urgent** (1s loop - faster!):
962```
963Start: Orange glow 5px
964Peak:  Orange glow 25px (intense)
965End:   Back to 5px
966```
967
968### Visual Experience
969
970**Today's Cell**:
971```
972┌──┬──┬──┬──┬──┬──┬──┐
973│  │  │ ✨ │  │  │  │  │  ← Shimmers constantly
974│  │  │[9]│  │  │  │  │  ← Sparkles
975│  │  │ ✨ │  │  │  │  │  ← Glows and pulses
976└──┴──┴──┴──┴──┴──┴──┘
977```
978
979**Event Bars**:
980```
981━━━━━━━  ← Glows and pulses
982━━━━━━━  ← Each bar animated
983━━━━━━━  ← Creates rhythm
984```
985
986**Headers**:
987```
988╔═════════════════════╗
989║ ~~~~~~~~~~ ║  ← Gradient flows
990║   February 2026     ║  ← Shimmer effect
991╚═════════════════════╝
992```
993
994### Theme Comparison
995
996**Before (v5.2.8)**:
997- Pink colors
998- Static elements
999- Standard shadows
1000
1001**After (v5.3.0)**:
1002- Pink colors ✓
1003- Animated shimmer ✨
1004- Sparkling effects ��
1005- Glowing pulses ✨
1006- Moving gradients ��
1007- BLING! ��
1008
1009### Performance
1010
1011**All animations**:
1012- Hardware accelerated (transform, opacity)
1013- Smooth 60fps
1014- CSS animations (no JavaScript)
1015- Minimal CPU usage
1016- Disabled in reduced-motion preference
1017
1018### Only for Pink Theme
1019
1020**Effects only apply when**:
1021```css
1022.calendar-theme-pink
1023```
1024
1025**Other themes unaffected**:
1026- Matrix stays Matrix
1027- Professional stays Professional
1028- Purple stays Purple
1029- Wiki stays clean
1030
1031**Pink gets all the bling!** ✨��
1032
1033### Use Cases
1034
1035**Perfect for**:
1036- Celebrating occasions
1037- Fun team calendars
1038- Personal style expression
1039- Standing out
1040- Making calendar time fabulous
1041
1042**Not just pink, but BLING pink!** ��✨
1043
1044## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS
1045
1046### �� Fixed: Today's Date Box Now Uses Theme Colors
1047- **Fixed:** Today's day number box now uses theme border color
1048- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light)
1049- **Result:** Today box matches the theme perfectly!
1050
1051### The Issue
1052
1053Today's date had a hardcoded green box:
1054
1055**In style.css**:
1056```css
1057.cal-today .day-num {
1058    background: #008800;  /* Hardcoded green! */
1059    color: white;
1060}
1061```
1062
1063**Didn't adapt to themes at all!**
1064
1065### The Fix
1066
1067**Now uses theme colors**:
1068```php
1069// Today's day number
1070if ($isToday) {
1071    background: $themeStyles['border'],  // Theme's accent color!
1072    color: (professional theme) ? white : bg color
1073}
1074```
1075
1076### Theme Examples
1077
1078**Matrix Theme**:
1079- Box background: `#00cc07` (matrix green)
1080- Text color: `#242424` (dark background)
1081
1082**Purple Theme**:
1083- Box background: `#9b59b6` (purple)
1084- Text color: `#2a2030` (dark background)
1085
1086**Professional Theme**:
1087- Box background: `#4a90e2` (blue)
1088- Text color: `#ffffff` (white text)
1089
1090**Pink Theme**:
1091- Box background: `#ff1493` (hot pink)
1092- Text color: `#1a0d14` (dark background)
1093
1094**Wiki Theme**:
1095- Box background: Template's `__border__` color
1096- Text color: Template's `__background_site__` color
1097
1098### Visual Result
1099
1100**Matrix Theme**:
1101```
1102┌──┬──┬──┬──┬──┬──┬──┐
1103│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1104└──┴──┴──┴──┴──┴──┴──┘
11051106    Green box (#00cc07)
1107```
1108
1109**Professional Theme**:
1110```
1111┌──┬──┬──┬──┬──┬──┬──┐
1112│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1113└──┴──┴──┴──┴──┴──┴──┘
11141115    Blue box (#4a90e2)
1116```
1117
1118**Wiki Theme**:
1119```
1120┌──┬──┬──┬──┬──┬──┬──┐
1121│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1122└──┴──┴──┴──┴──┴──┴──┘
11231124    Template border color
1125```
1126
1127### Implementation
1128
1129**Inline styles added**:
1130- Background uses `$themeStyles['border']` (theme accent)
1131- Text color uses `$themeStyles['bg']` for contrast
1132- Special case: Professional theme uses white text
1133- All with `!important` to override CSS
1134
1135**CSS cleaned up**:
1136- Removed hardcoded `#008800` background
1137- Removed hardcoded `white` color
1138- Kept structural styles (border-radius, font-weight)
1139
1140### Benefits
1141
1142**Theme Consistency**:
1143- Today box matches theme accent color
1144- Proper contrast with background
1145- Professional appearance
1146
1147**Automatic Adaptation**:
1148- Works with all themes
1149- Works with custom wiki template colors
1150- No manual adjustment needed
1151
1152**Visual Harmony**:
1153- Border color used throughout theme
1154- Today box reinforces theme identity
1155- Consistent design language
1156
1157## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH
1158
1159### �� Fixed: Table Grid Background Now Matches Cells
1160- **Found:** `grid_bg` was using `__background_alt__` (different from cells!)
1161- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells)
1162- **Result:** Table background no longer shows through cells!
1163
1164### The Layer Problem
1165
1166The table itself had a DIFFERENT background color than its cells!
1167
1168**Before (v5.2.6)**:
1169```php
1170'grid_bg' => __background_alt__,     // Table background (#e8e8e8)
1171'cell_bg' => __background_site__,    // Cell background (#f5f5f5)
1172```
1173
1174**The table background was showing THROUGH the cells!**
1175
1176### Why This Happened
1177
1178**Visual layers**:
1179```
1180Table Element
1181├─ background: __background_alt__ (#e8e8e8)  ← Different!
1182└─ Cells
1183    └─ background: __background_site__ (#f5f5f5)  ← Different!
1184
1185The table background shows through any gaps!
1186```
1187
1188### The Fix
1189
1190**After (v5.2.7)**:
1191```php
1192'grid_bg' => __background_site__,    // Table background (#f5f5f5) ✓
1193'cell_bg' => __background_site__,    // Cell background (#f5f5f5) ✓
1194```
1195
1196**NOW THEY MATCH!**
1197
1198### Where grid_bg Is Used
1199
1200The table element itself:
1201```html
1202<table style="background: __background_alt__">  ← Was showing through!
1203    <tbody>
1204        <tr>
1205            <td style="background: __background_site__">1</td>
1206        </tr>
1207    </tbody>
1208</table>
1209```
1210
1211Even with cell inline styles, the TABLE background shows through!
1212
1213### All Background Sources Now Unified
1214
1215**Everything now uses __background_site__**:
1216- `bg` → __background_site__ ✓
1217- `header_bg` → __background_site__ ✓
1218- `grid_bg` → __background_site__ ✓ (JUST FIXED!)
1219- `cell_bg` → __background_site__ ✓
1220
1221**Perfect consistency!** ��
1222
1223### Why It Was Different
1224
1225**Originally the grid was meant to show borders**:
1226- `grid_bg` was `__background_alt__` (slightly different)
1227- Created visual separation between cells
1228- But with transparent/thin cells, it showed through!
1229
1230**Now unified for consistency!**
1231
1232### Visual Result
1233
1234**Before (layers visible)**:
1235```
1236┌─────────────────┐
1237│ Grid (#e8e8e8)  │ ← Showing through!
1238│  ┌──┬──┬──┐     │
1239│  │  │  │  │     │ ← Cells (#f5f5f5)
1240│  └──┴──┴──┘     │
1241└─────────────────┘
1242```
1243
1244**After (unified)**:
1245```
1246┌─────────────────┐
1247│ Grid (#f5f5f5)  │ ← Same color!
1248│  ┌──┬──┬──┐     │
1249│  │  │  │  │     │ ← Cells (#f5f5f5)
1250│  └──┴──┴──┘     │
1251└─────────────────┘
1252Perfect match!
1253```
1254
1255### Complete Background Mapping
1256
1257**All using __background_site__ now**:
1258- Main container background
1259- Left panel background
1260- Right panel background
1261- Eventlist background
1262- Calendar grid background ← JUST FIXED
1263- Calendar cell backgrounds
1264- Event item backgrounds
1265- Clock header background
1266- Search input background
1267- Past events toggle
1268
1269**EVERYTHING UNIFIED!** ��
1270
1271## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS
1272
1273### �� Fixed: Removed Container Backgrounds Showing Through
1274- **Found:** `.calendar-compact-container` had `background: #ffffff;`
1275- **Found:** `.calendar-compact-left` had `background: #fafafa;`
1276- **Found:** `.calendar-compact-right` had `background: #ffffff;`
1277- **Found:** `.event-search-input-inline` had `background: white;`
1278- **Found:** `.past-events-toggle` had `background: #f5f5f5;`
1279- **Result:** Container backgrounds no longer show through cells!
1280
1281### The Container Problem
1282
1283The parent containers had hardcoded backgrounds that were showing through!
1284
1285**Container backgrounds (lines 4-91)**:
1286```css
1287.calendar-compact-container {
1288    background: #ffffff;  /* ← Main container! */
1289}
1290
1291.calendar-compact-left {
1292    background: #fafafa;  /* ← Left panel (calendar side)! */
1293}
1294
1295.calendar-compact-right {
1296    background: #ffffff;  /* ← Right panel (events side)! */
1297}
1298```
1299
1300**These were showing through the cells and events!**
1301
1302### Why Containers Matter
1303
1304Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through:
1305
1306```
1307Container (#fafafa)           ← Showing through!
1308   └─ Table Cell (#f5f5f5)    ← Transparent areas
1309      └─ Content
1310```
1311
1312### All Backgrounds Removed
1313
1314**v5.2.6 removes**:
1315- `.calendar-compact-container` background
1316- `.calendar-compact-left` background
1317- `.calendar-compact-right` background
1318- `.event-search-input-inline` background
1319- `.past-events-toggle` background & hover
1320
1321**v5.2.5 removed**:
1322- `.calendar-compact-grid tbody td` background
1323- `.calendar-compact-grid thead th` background
1324
1325**v5.2.4 removed**:
1326- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds
1327
1328**v5.2.3 removed**:
1329- `.event-compact-item` background
1330
1331**ALL container and element backgrounds eliminated!** ��
1332
1333### What Should Work Now
1334
1335**Calendar cells**: No container background showing through ✓
1336**Event items**: No container background showing through ✓
1337**Search bar**: Uses template color ✓
1338**Past events toggle**: Uses template color ✓
1339
1340### Complete List of Fixes
1341
1342**Containers**:
1343- Main container ✓
1344- Left panel ✓
1345- Right panel ✓
1346
1347**Elements**:
1348- Table cells ✓
1349- Event items ✓
1350- Search input ✓
1351- Past events toggle ✓
1352
1353**EVERYTHING removed!** ��
1354
1355### Critical: Clear Caches
1356
1357**Must clear caches or won't work**:
13581. Hard refresh: Ctrl+Shift+R (5 times!)
13592. Clear DokuWiki cache
13603. Close browser completely
13614. Reopen and test
1362
1363**CSS caching is EXTREMELY persistent!**
1364
1365## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS
1366
1367### �� Fixed: Removed Hardcoded Backgrounds from Table Cells
1368- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`!
1369- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`!
1370- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`!
1371- **Fixed:** Removed ALL hardcoded backgrounds from table CSS
1372- **Result:** Calendar table cells finally use template colors!
1373
1374### The REAL Culprits
1375
1376The generic table CSS was overriding everything!
1377
1378**In style.css (lines 307-356)**:
1379```css
1380.calendar-compact-grid thead th {
1381    background: #f8f8f8;  /* ← Header cells hardcoded! */
1382}
1383
1384.calendar-compact-grid tbody td {
1385    background: #ffffff;  /* ← ALL table cells hardcoded! */
1386}
1387
1388.calendar-compact-grid tbody td:hover {
1389    background: #f0f7ff;  /* ← Hover state hardcoded! */
1390}
1391```
1392
1393**These apply to ALL `<td>` and `<th>` elements in the calendar table!**
1394
1395### Why This Was the Last One
1396
1397**CSS Specificity Order**:
13981. `.calendar-compact-grid tbody td` (generic - applies to ALL cells)
13992. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells)
14003. Inline styles (should win but didn't)
1401
1402**We removed the specific ones (v5.2.4), but the generic one was still there!**
1403
1404### What We've Removed
1405
1406**v5.2.3**:
1407- `.event-compact-item` background
1408- `.event-compact-item:hover` background
1409
1410**v5.2.4**:
1411- `.cal-empty` background & hover
1412- `.cal-today` background & hover
1413- `.cal-has-events` background & hover
1414
1415**v5.2.5 (FINAL)**:
1416- `.calendar-compact-grid tbody td` background ✓
1417- `.calendar-compact-grid tbody td:hover` background ✓
1418- `.calendar-compact-grid thead th` background ✓
1419
1420**All CSS background overrides ELIMINATED!** ��
1421
1422### Why It Took 5 Versions
1423
1424**CSS had layers of hardcoded backgrounds**:
1425
1426```
1427Layer 1: Table cells (.calendar-compact-grid tbody td)
1428         ↓ Overrode inline styles
1429Layer 2: Cell states (.cal-today, .cal-empty, etc.)
1430         ↓ Overrode table cells
1431Layer 3: Event items (.event-compact-item)
1432         ↓ Overrode inline styles
1433
1434ALL had to be removed!
1435```
1436
1437**We kept finding more specific CSS, but the base table CSS was there all along!**
1438
1439### Visual Result
1440
1441**NOW everything matches**:
1442```
1443Calendar Table:
1444┌──┬──┬──┬──┬──┬──┬──┐
1445│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__
1446├──┼──┼──┼──┼──┼──┼──┤
1447│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__
1448├──┼──┼──┼──┼──┼──┼──┤
1449│ 8│ 9│10│11│12│13│14│ ← All: __background_site__
1450└──┴──┴──┴──┴──┴──┴──┘
1451
1452Sidebar Events:
1453┌────────────────────────┐
1454│ �� Event               │ ← __background_site__
1455│ �� Event               │ ← __background_site__
1456└────────────────────────┘
1457
1458FINALLY ALL MATCHING! ✓
1459```
1460
1461### Complete List of Removed CSS
1462
1463**ALL hardcoded backgrounds removed**:
1464- `.event-compact-item` background
1465- `.event-compact-item:hover` background
1466- `.cal-empty` background & hover
1467- `.cal-today` background & hover
1468- `.cal-has-events` background & hover
1469- `.calendar-compact-grid tbody td` background ← NEW
1470- `.calendar-compact-grid tbody td:hover` background ← NEW
1471- `.calendar-compact-grid thead th` background ← NEW
1472
1473**Every single CSS background override is GONE!** ��
1474
1475### Testing Steps
1476
1477**After installing v5.2.5**:
1478
14791. **Clear browser cache**: Ctrl+Shift+R (3 times!)
14802. **Clear DokuWiki cache**: Click the button
14813. **Close browser completely**: Restart it
14824. **Visit page**: Should finally see matching backgrounds
1483
1484**CSS is EXTREMELY sticky - may need to clear multiple times!**
1485
1486### This Should Be It
1487
1488**No more CSS overrides exist** (we've checked the entire file):
1489- Table cells ✓ Fixed
1490- Cell states ✓ Fixed
1491- Event items ✓ Fixed
1492- Headers ✓ Fixed
1493- Hover states ✓ Fixed
1494
1495**All backgrounds now come from inline styles using template colors!**
1496
1497## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS
1498
1499### �� Fixed: Removed Hardcoded Backgrounds from Calendar Cells
1500- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`!
1501- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS
1502- **Result:** Calendar cells now use template colors!
1503
1504### The Second Culprit
1505
1506MORE hardcoded backgrounds in the CSS file!
1507
1508**In style.css (lines 359-382)**:
1509```css
1510.cal-empty {
1511    background: #fafafa !important;  /* ← Overriding inline styles! */
1512}
1513
1514.cal-today {
1515    background: #e8f5e9 !important;  /* ← Overriding today cell! */
1516}
1517
1518.cal-today:hover {
1519    background: #c8e6c9 !important;  /* ← Overriding hover! */
1520}
1521
1522.cal-has-events {
1523    background: #fffbf0;  /* ← Overriding event cells! */
1524}
1525
1526.cal-has-events:hover {
1527    background: #fff4d9;  /* ← Overriding hover! */
1528}
1529```
1530
1531**These were ALL overriding the inline styles!**
1532
1533### The Fix
1534
1535**Removed all hardcoded backgrounds**:
1536```css
1537.cal-empty {
1538    /* background removed - inline style handles this */
1539    cursor: default !important;
1540}
1541
1542.cal-today {
1543    /* background removed - inline style handles this */
1544}
1545
1546.cal-has-events {
1547    /* background removed - inline style handles this */
1548}
1549
1550/* Hover states also removed */
1551```
1552
1553### What Was Overridden
1554
1555**v5.2.3 fixed**:
1556- Event items in sidebar ✓
1557
1558**v5.2.4 fixes**:
1559- Calendar day cells ✓
1560- Today cell ✓
1561- Empty cells ✓
1562- Cells with events ✓
1563- All hover states ✓
1564
1565### Why This Kept Happening
1566
1567**CSS had hardcoded backgrounds everywhere**:
15681. Event items: `#ffffff` (fixed in v5.2.3)
15692. Calendar cells: Multiple colors (fixed in v5.2.4)
15703. **All with `!important` flags!**
1571
1572**The inline styles couldn't override them!**
1573
1574### Visual Result
1575
1576**Now ALL backgrounds match**:
1577```
1578Calendar Grid:
1579┌──┬──┬──┬──┬──┬──┬──┐
1580│  │  │  │  │  │  │  │ ← All use __background_site__
1581├──┼──┼──┼──┼──┼──┼──┤
1582│  │██│  │  │  │  │  │ ← Today uses __background_neu__
1583├──┼──┼──┼──┼──┼──┼──┤
1584│  │  │  │  │  │  │  │ ← All match template
1585└──┴──┴──┴──┴──┴──┴──┘
1586
1587Sidebar Events:
1588┌────────────────────────┐
1589│ �� Event               │ ← Uses __background_site__
1590│ �� Event               │ ← Uses __background_site__
1591└────────────────────────┘
1592
1593Perfect consistency!
1594```
1595
1596### CSS Removed
1597
1598**Calendar cells**:
1599- `.cal-empty` background
1600- `.cal-empty:hover` background
1601- `.cal-today` background
1602- `.cal-today:hover` background
1603- `.cal-has-events` background
1604- `.cal-has-events:hover` background
1605
1606**All gone!** ✓
1607
1608### Important: Clear Caches Again!
1609
1610After installing v5.2.4:
1611
16121. **Hard refresh browser**: Ctrl+Shift+R (twice!)
16132. **Clear DokuWiki cache**: Admin → Clear Cache
16143. **May need to restart browser**: To clear CSS cache
1615
1616**Old CSS is VERY sticky!**
1617
1618### Why It Took So Long
1619
1620**Multiple CSS overrides**:
1621- Event items (v5.2.3) ✓ Fixed
1622- Calendar cells (v5.2.4) ✓ Fixed
1623- Each with different classes
1624- Each with `!important`
1625- Hidden throughout CSS file
1626
1627**Found them all now!** ��
1628
1629## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS
1630
1631### �� Fixed: Removed Hardcoded Backgrounds from CSS
1632- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles!
1633- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS
1634- **Result:** Event backgrounds now properly use template colors!
1635
1636### The Root Cause
1637
1638The CSS file was overriding the inline styles with hardcoded white backgrounds!
1639
1640**In style.css (lines 599-616)**:
1641```css
1642.event-compact-item {
1643    background: #ffffff;  /* ← This was overriding inline styles! */
1644}
1645
1646.event-compact-item:hover {
1647    background: #f8f9fa;  /* ← And this on hover! */
1648}
1649```
1650
1651**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade!
1652
1653### The Fix
1654
1655**Removed hardcoded backgrounds from CSS**:
1656```css
1657.event-compact-item {
1658    /* background removed - set via inline style with template colors */
1659    display: flex;
1660    /* ... other styles ... */
1661}
1662
1663.event-compact-item:hover {
1664    box-shadow: 0 1px 3px rgba(0,0,0,0.08);
1665    /* background removed - inline style handles this */
1666}
1667```
1668
1669### Why This Was So Difficult to Find
1670
1671**CSS Specificity & Cascade**:
16721. Inline styles with `!important` should win
16732. But CSS that comes after can still apply
16743. The hardcoded `background: #ffffff` was silently overriding
16754. All the PHP code was correct - it was the CSS!
1676
1677**What We Were Doing**:
1678- ✓ Reading template colors correctly
1679- ✓ Setting `cell_bg` to `__background_site__` correctly
1680- ✓ Applying inline styles with `!important` correctly
1681- ✗ CSS file was overriding everything!
1682
1683### What Was Affected
1684
1685**Event items in**:
1686- Main calendar sidebar
1687- Standalone event list
1688- Sidebar widget
1689- All event displays
1690
1691**All had white backgrounds hardcoded in CSS!**
1692
1693### Now Working
1694
1695**Events use template colors**:
1696```html
1697<div class="event-compact-item"
1698     style="background: #f5f5f5 !important; ...">
1699    ← Now this inline style actually works!
1700</div>
1701```
1702
1703**No CSS override** ✓
1704
1705### Testing
1706
1707To verify this works:
17081. Clear browser cache (important!)
17092. Clear DokuWiki cache
17103. Reload page
17114. Events should now match eventlist background
1712
1713**Browser caching can make old CSS persist!**
1714
1715### Visual Result
1716
1717**All backgrounds now matching**:
1718```
1719┌────────────────────────────┐
1720│ Eventlist (#f5f5f5)        │ ← Template color
1721├────────────────────────────┤
1722│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
1723├────────────────────────────┤
1724│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
1725└────────────────────────────┘
1726
1727Perfect match!
1728```
1729
1730### Why Everything Else Worked
1731
1732**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds:
1733- They only had inline styles ✓
1734- Inline styles worked correctly ✓
1735- Only event items had the CSS override ✗
1736
1737### Important Notes
1738
1739**Clear caches**:
1740- Browser cache (Ctrl+Shift+R or Cmd+Shift+R)
1741- DokuWiki cache (Admin → Clear Cache)
1742- Old CSS may be cached!
1743
1744**This was the culprit all along!**
1745
1746## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND
1747
1748### �� Fixed: Clock Area Now Matches Event Cells
1749- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`)
1750- **Result:** Clock/Today header matches event cell backgrounds!
1751
1752### The Issue
1753
1754The clock area (Today header) was using a different background:
1755
1756**Before (v5.2.1)**:
1757```php
1758'header_bg' => __background_alt__,   // Different color (gray #e8e8e8)
1759'cell_bg' => __background_site__,    // Event cells (#f5f5f5)
1760```
1761
1762**After (v5.2.2)**:
1763```php
1764'header_bg' => __background_site__,  // Same as cells (#f5f5f5) ✓
1765'cell_bg' => __background_site__,    // Event cells (#f5f5f5) ✓
1766```
1767
1768### What's the Clock Area?
1769
1770The clock/Today header in the sidebar:
1771```
1772┌────────────────────────────┐
1773│ 3:45:23 PM                 │ ← Clock area (header_bg)
1774│ ��️ --° | Sun, Feb 9, 2026 │
1775└────────────────────────────┘
1776```
1777
1778### All Backgrounds Now Unified
1779
1780**Everything now uses __background_site__**:
1781- Eventlist background ✓
1782- Calendar cells ✓
1783- Event items ✓
1784- Clock/Today header ✓
1785- Sidebar widget ✓
1786- All backgrounds match! ✓
1787
1788### Visual Result
1789
1790**Complete consistency**:
1791```
1792┌────────────────────────────┐
1793│ 3:45:23 PM                 │ ← Same background
1794│ ��️ --° | Sun, Feb 9, 2026 │
1795├────────────────────────────┤
1796│ �� Meeting at 2pm          │ ← Same background
1797│ Description...             │
1798├────────────────────────────┤
1799│ �� Another event           │ ← Same background
1800│ More details...            │
1801└────────────────────────────┘
1802
1803All using __background_site__ (#f5f5f5)
1804```
1805
1806**Perfect visual harmony!** ��
1807
1808## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND
1809
1810### �� Fixed: Calendar Cells Now Match Eventlist Background
1811- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`)
1812- **Result:** Calendar cells now match the eventlist background perfectly!
1813
1814### The Real Issue
1815
1816The eventlist was showing the CORRECT background color all along!
1817
1818**Eventlist was using**:
1819- `bg` → `__background_site__` ✓ (This was correct!)
1820
1821**Calendar cells were using**:
1822- `cell_bg` → `__background__` ✗ (This was wrong!)
1823
1824**They didn't match!**
1825
1826### The Correct Fix
1827
1828**Now everything uses __background_site__**:
1829```php
1830'bg' => __background_site__,        // Eventlist (was already correct)
1831'cell_bg' => __background_site__,   // Cells (now fixed to match)
1832```
1833
1834### Why __background_site__?
1835
1836The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background:
1837
1838```
1839Page Layout:
1840┌────────────────────────────────────┐
1841│ __background_site__ (page bg)     │ ← This is where calendar lives
1842│                                    │
1843│  ┌──────────────────────────────┐ │
1844│  │ __background__ (content bg)  │ │ ← Wiki article content
1845│  │                              │ │
1846│  └──────────────────────────────┘ │
1847│                                    │
1848└────────────────────────────────────┘
1849```
1850
1851**Calendar should match the page background, not the content background!**
1852
1853### Template Example
1854
1855Typical DokuWiki template:
1856```ini
1857__background_site__ = "#f5f5f5"  (Light gray - page background)
1858__background__ = "#ffffff"        (White - content area)
1859```
1860
1861**Before (v5.2.0)**:
1862- Eventlist: `#f5f5f5` (light gray) ✓ Correct
1863- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match
1864
1865**After (v5.2.1)**:
1866- Eventlist: `#f5f5f5` (light gray) ✓ Correct
1867- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED!
1868
1869### All Backgrounds Now Unified
1870
1871**Everything now uses __background_site__**:
1872- Eventlist sidebar background ✓
1873- Main calendar background ✓
1874- Calendar day cells ✓
1875- Sidebar widget ✓
1876- Event items ✓
1877- Input fields ✓
1878- Buttons ✓
1879
1880**All perfectly matched to the page background!**
1881
1882### Why Version 5.2.0 Was Wrong
1883
1884I incorrectly assumed `__background__` was the right color because it's often white. But the eventlist was already correct using `__background_site__` to match the page, not the content area.
1885
1886**The eventlist knew what it was doing all along!** The cells just needed to catch up.
1887
1888## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS
1889**Note**: This version went the wrong direction. See v5.2.1 for the correct fix.
1890
1891### �� Fixed: All Backgrounds Now Use __background__
1892- **Fixed:** `bg` now uses `__background__` instead of `__background_site__`
1893- **Fixed:** Eventlist, calendar cells, and sidebar all match now
1894- **Result:** Completely unified background throughout!
1895
1896### The Issue
1897
1898Different parts of the calendar were using different background sources:
1899
1900**Before (v5.1.9)**:
1901```php
1902'bg' => __background_site__        // Eventlist background (outer page)
1903'cell_bg' => __background__        // Cell backgrounds (content area)
1904```
1905
1906**These are different colors!**
1907- `__background_site__` = Outer page wrapper (often gray)
1908- `__background__` = Main content area (often white)
1909
1910### The Fix
1911
1912**After (v5.2.0)**:
1913```php
1914'bg' => __background__             // Eventlist background ✓
1915'cell_bg' => __background__        // Cell backgrounds ✓
1916```
1917
1918**Both use the same source!**
1919
1920### What Uses 'bg'
1921
1922The `bg` color is used for:
1923- Eventlist sidebar background
1924- Main calendar container
1925- Sidebar widget background
1926- Form backgrounds
1927- Event dialogs
1928
1929### What Uses 'cell_bg'
1930
1931The `cell_bg` color is used for:
1932- Calendar day cells
1933- Event item backgrounds
1934- Input field backgrounds
1935- Button backgrounds
1936
1937### Why This Matters
1938
1939**Template color hierarchy**:
1940```
1941__background_site__ → Outer page/body (e.g., #f5f5f5 light gray)
1942__background__      → Main content area (e.g., #ffffff white)
1943__background_alt__  → Sections/headers
1944__background_neu__  → Highlights
1945```
1946
1947**We want all calendar backgrounds to match the main content area!**
1948
1949### Visual Comparison
1950
1951**Before (v5.1.9)**: Mismatched backgrounds
1952```
1953┌────────────────────────────────┐
1954│ Eventlist (gray #f5f5f5)      │ ← __background_site__
1955└────────────────────────────────┘
1956
1957┌────────────────────────────────┐
1958│ Calendar                       │
1959│ ┌──┬──┬──┬──┬──┬──┬──┐       │
1960│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
1961│ └──┴──┴──┴──┴──┴──┴──┘       │
1962└────────────────────────────────┘
1963Different colors - looks inconsistent
1964```
1965
1966**After (v5.2.0)**: Unified backgrounds
1967```
1968┌────────────────────────────────┐
1969│ Eventlist (white #fff)         │ ← __background__
1970└────────────────────────────────┘
1971
1972┌────────────────────────────────┐
1973│ Calendar                       │
1974│ ┌──┬──┬──┬──┬──┬──┬──┐       │
1975│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
1976│ └──┴──┴──┴──┴──┴──┴──┘       │
1977└────────────────────────────────┘
1978Same color - perfectly consistent!
1979```
1980
1981### Template Examples
1982
1983**Light Template**:
1984```ini
1985__background_site__ = "#f5f5f5"  (light gray)
1986__background__ = "#ffffff"       (white)
1987```
1988
1989**Before**: Eventlist gray, cells white
1990**After**: Eventlist white, cells white ✓
1991
1992**Dark Template**:
1993```ini
1994__background_site__ = "#1a1a1a"  (very dark)
1995__background__ = "#2d2d2d"       (dark)
1996```
1997
1998**Before**: Eventlist very dark, cells dark
1999**After**: Eventlist dark, cells dark ✓
2000
2001### Benefits
2002
2003**Visual Consistency**:
2004- All backgrounds match
2005- Clean, unified appearance
2006- Professional look
2007
2008**Correct Template Integration**:
2009- Uses content area color (not page wrapper)
2010- Matches wiki content area
2011- Proper color hierarchy
2012
2013**Works Everywhere**:
2014- Light templates ✓
2015- Dark templates ✓
2016- Custom templates ✓
2017
2018### All Backgrounds Unified
2019
2020**Now using __background__**:
2021- Eventlist background ✓
2022- Calendar cells ✓
2023- Sidebar widget ✓
2024- Event items ✓
2025- Input fields ✓
2026- Buttons ✓
2027- Dialogs ✓
2028
2029**Perfect harmony throughout!** ��
2030
2031## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS
2032
2033### �� Fixed: Wiki Theme Event Backgrounds Not Showing
2034- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!)
2035- **Fixed:** Replaced CSS variables with actual hex colors
2036- **Result:** Event backgrounds now show correctly with template colors!
2037
2038### The Problem
2039
2040CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes!
2041
2042**Before (broken)**:
2043```php
2044'cell_bg' => 'var(--__background__, #fff)',  // Doesn't work in inline styles!
2045```
2046
2047**After (fixed)**:
2048```php
2049'cell_bg' => '#fff',  // Actual hex color works!
2050```
2051
2052### What Was Affected
2053
2054**When style.ini read successfully**:
2055- ✅ Worked fine (uses actual hex colors from file)
2056
2057**When style.ini fallback used**:
2058- ❌ Events had no background
2059- ❌ CSS variables don't work in inline styles
2060- ❌ Looked broken
2061
2062### The Fix
2063
2064**Wiki theme fallback now uses real colors**:
2065```php
2066'wiki' => [
2067    'bg' => '#f5f5f5',           // Real hex (was: var(--__background_site__))
2068    'border' => '#ccc',           // Real hex (was: var(--__border__))
2069    'cell_bg' => '#fff',          // Real hex (was: var(--__background__))
2070    'cell_today_bg' => '#eee',    // Real hex (was: var(--__background_neu__))
2071    'text_primary' => '#333',     // Real hex (was: var(--__text__))
2072    'text_bright' => '#2b73b7',   // Real hex (was: var(--__link__))
2073    'text_dim' => '#666',         // Real hex (was: var(--__text_neu__))
2074    'grid_bg' => '#e8e8e8',       // Real hex (was: var(--__background_alt__))
2075    // ... all colors now use real hex values
2076]
2077```
2078
2079### Why CSS Variables Don't Work
2080
2081**CSS variables work**:
2082```css
2083.some-class {
2084    background: var(--__background__, #fff);  /* ✓ Works in CSS */
2085}
2086```
2087
2088**CSS variables DON'T work**:
2089```html
2090<div style="background: var(--__background__, #fff)">  <!-- ✗ Doesn't work -->
2091```
2092
2093### How It Works Now
2094
2095**Priority system**:
20961. **Try reading style.ini** → Use actual template hex colors ✓
20972. **If file not found** → Use fallback hex colors ✓
20983. **Never use CSS variables in inline styles** ✓
2099
2100**Both paths now work correctly!**
2101
2102### Visual Result
2103
2104**Events now have proper backgrounds**:
2105```
2106┌──────────────────────────┐
2107│ �� Meeting at 2pm        │ ← White background (#fff)
2108│ Description here...      │
2109│ [✏️ Edit] [��️ Delete]   │
2110└──────────────────────────┘
2111
2112Not:
2113┌──────────────────────────┐
2114│ �� Meeting at 2pm        │ ← No background (broken)
2115│ Description here...      │
2116└──────────────────────────┘
2117```
2118
2119### Affected Areas
2120
2121**All event displays**:
2122- Main calendar events ✓
2123- Sidebar widget events ✓
2124- Event list items ✓
2125- Event backgrounds ✓
2126- Button backgrounds ✓
2127- Input field backgrounds ✓
2128
2129**Everything uses real colors now!**
2130
2131## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT
2132
2133### �� Reorganized: Better Update Tab Layout
2134- **Moved:** Current Version section to the top
2135- **Combined:** Upload and Important Notes side-by-side
2136- **Improved:** Space-efficient two-column layout
2137- **Result:** More information visible at once!
2138
2139### New Layout Order
2140
2141**Version 5.1.8**:
2142```
21431. Current Version (at top - see what you have)
21442. Upload + Important Notes (side-by-side)
21453. Recent Changes (changelog)
21464. Backups
2147```
2148
2149### Side-by-Side Design
2150
2151**Upload form (left 60%) + Important Notes (right 40%)**:
2152```
2153┌──────────────────────────────────────────┐
2154│ �� Current Version                       │
2155│ Version: 5.1.8                           │
2156│ ✅ Permissions: OK                       │
2157└──────────────────────────────────────────┘
2158
2159┌─────────────────────┬────────────────────┐
2160│ �� Upload New       │ ⚠️ Important Notes │
2161│ [Choose File]       │ • Replaces files   │
2162│ ☑ Backup first      │ • Config preserved │
2163│ [Upload] [Clear]    │ • Events safe      │
2164└─────────────────────┴────────────────────┘
2165```
2166
2167### Benefits
2168
2169**Current Version First**:
2170- See what you have immediately
2171- Check permissions at a glance
2172- Know if ready to update
2173
2174**Side-by-Side Layout**:
2175- Upload form and warnings together
2176- Read notes while choosing file
2177- More efficient use of space
2178- Less scrolling needed
2179
2180**Better Information Flow**:
21811. See current version ✓
21822. Upload new version with notes visible ✓
21833. Review recent changes ✓
21844. Manage backups ✓
2185
2186### Visual Comparison
2187
2188**Before (v5.1.7)**:
2189```
2190Important Notes (full width)
21912192Upload Form (full width)
21932194Current Version
21952196Recent Changes
21972198Backups
2199```
2200
2201**After (v5.1.8)**:
2202```
2203Current Version (full width)
22042205Upload (60%) | Notes (40%)
22062207Recent Changes
22082209Backups
2210```
2211
2212**More compact, better organized!**
2213
2214### Responsive Design
2215
2216**Wide screens**:
2217- Upload and notes side-by-side
2218- Full 1200px width utilized
2219- Efficient space usage
2220
2221**Narrow screens**:
2222- Sections stack gracefully
2223- Flex layout adapts
2224- Still fully functional
2225
2226### Layout Details
2227
2228**Current Version Section**:
2229- Full width (1200px max)
2230- Shows version, author, description
2231- Permission status with icons
2232- Helpful fix commands if needed
2233
2234**Upload/Notes Section**:
2235- Flexbox layout with gap
2236- Upload: `flex:1` (grows)
2237- Notes: `flex:0 0 350px` (fixed 350px)
2238- Both have proper min-width
2239
2240**Recent Changes Section**:
2241- Full width (1200px max)
2242- Compact scrollable view
2243- Color-coded change types
2244- Last 10 versions shown
2245
2246**Backups Section**:
2247- Full width (1200px max)
2248- Manual backup button
2249- Scrollable file list
2250- All actions accessible
2251
2252### Improved Max Widths
2253
2254All sections now use `max-width:1200px` (previously 900px):
2255- Better use of wide screens
2256- Still responsive on narrow screens
2257- Consistent throughout tab
2258
2259## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR
2260
2261### �� Fixed: Extra Closing Brace
2262- **Fixed:** ParseError on line 1936 (extra closing brace)
2263- **Result:** Manual backup feature now works correctly!
2264
2265### What Was Wrong
2266
2267Extra `}` after the backup section:
2268
2269**Before (broken)**:
2270```php
2271echo '</div>';
2272}  // ← Extra closing brace!
2273
2274echo '<script>
2275```
2276
2277**After (fixed)**:
2278```php
2279echo '</div>';
2280
2281echo '<script>
2282```
2283
2284**Manual backup feature now fully functional!** ✅
2285
2286## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND
2287
2288### �� Added: Create Backup Manually Anytime
2289- **Added:** "Create Backup Now" button in Backups section
2290- **Added:** Manual backup action handler with full verification
2291- **Added:** Backups section always visible (even with no backups)
2292- **Added:** Success message showing file size and file count
2293- **Result:** Create backups anytime without needing to upload!
2294
2295### Manual Backup Button
2296
2297**New Layout**:
2298```
2299┌─────────────────────────────────────┐
2300│ �� Backups        [�� Create Backup Now] │
2301├─────────────────────────────────────┤
2302│ Backup File                Size     │
2303calendar.backup.v5.1.6...  243 KB   │
2304│ [�� Download] [✏️ Rename] [��️ Delete] │
2305└─────────────────────────────────────┘
2306```
2307
2308**Always visible - even with no backups**:
2309```
2310┌─────────────────────────────────────┐
2311│ �� Backups        [�� Create Backup Now] │
2312├─────────────────────────────────────┤
2313│ No backups yet. Click "Create       │
2314│ Backup Now" to create your first    │
2315│ backup.                              │
2316└─────────────────────────────────────┘
2317```
2318
2319### How It Works
2320
2321**Click the button**:
23221. Confirm: "Create a backup of the current plugin version?"
23232. System creates backup ZIP
23243. Verifies: File count (30+ files)
23254. Verifies: File size (200KB+)
23265. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)"
2327
2328**Backup naming**:
2329```
2330calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
2331                       ^^^^^^
2332                     "manual" tag identifies manual backups
2333```
2334
2335### Use Cases
2336
2337**Before updates**:
2338- Create safety backup before uploading new version
2339- Have multiple restore points
2340- Test new features with fallback
2341
2342**Regular backups**:
2343- Weekly/monthly backup schedule
2344- Before making configuration changes
2345- After important customizations
2346
2347**Development**:
2348- Backup before code experiments
2349- Save working states
2350- Quick rollback points
2351
2352### Full Verification
2353
2354**Same checks as automatic backups**:
2355- ✅ File count check (minimum 10, expected 30+)
2356- ✅ File size check (minimum 1KB, expected 200KB+)
2357- ✅ Existence check (file actually created)
2358- ✅ Automatic cleanup on failure
2359
2360**Success message includes**:
2361- Backup filename
2362- File size (human-readable)
2363- Number of files backed up
2364
2365### Example Messages
2366
2367**Success**:
2368```
2369✓ Manual backup created successfully:
2370  calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
2371  (243 KB, 31 files)
2372```
2373
2374**Failure Examples**:
2375```
2376❌ Plugin directory is not readable.
2377   Please check permissions.
2378
2379❌ Backup incomplete: Only 5 files were added (expected 30+).
2380   Backup failed.
2381
2382❌ Backup file is too small (342 bytes).
2383   Only 3 files were added. Backup failed.
2384```
2385
2386### Benefits
2387
2388**On-Demand Safety**:
2389- Create backups anytime
2390- No need to upload new version
2391- Quick and easy
2392
2393**Peace of Mind**:
2394- Backup before risky changes
2395- Multiple restore points
2396- Safe experimentation
2397
2398**Professional Workflow**:
2399- Regular backup schedule
2400- Version snapshots
2401- Disaster recovery
2402
2403### Backup Section Improvements
2404
2405**Always Visible**:
2406- Section shows even with 0 backups
2407- Button always accessible
2408- Clear call-to-action
2409
2410**Better Header**:
2411- Title and button on same row
2412- Clean, professional layout
2413- Space-efficient design
2414
2415### Technical Details
2416
2417**New Action**: `create_manual_backup`
2418
2419**New Function**: `createManualBackup()`
2420- Gets current version
2421- Creates timestamped filename with "manual" tag
2422- Uses same verification as auto-backups
2423- Shows detailed success/error messages
2424
2425**File Naming Convention**:
2426```
2427Automatic (on upload):
2428calendar.backup.v5.1.6.2026-02-09_12-30-45.zip
2429
2430Manual (button click):
2431calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
2432                       ^^^^^^^
2433                    Easy to identify!
2434```
2435
2436### Permissions Required
2437
2438- **Read access**: Plugin directory
2439- **Write access**: Parent plugins directory
2440
2441**Same as automatic backups** - no additional permissions needed!
2442
2443## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION
2444
2445### �� Enhanced: Backup Creation with Robust Verification
2446- **Added:** File count validation (must have 10+ files)
2447- **Added:** File size validation (must be 1KB+ minimum)
2448- **Added:** Return value from addDirectoryToZip (counts files added)
2449- **Added:** Detailed error messages showing file count
2450- **Added:** Automatic deletion of invalid/incomplete backups
2451- **Enhanced:** Exception handling with proper error propagation
2452- **Result:** Backups are now guaranteed to be complete or fail clearly!
2453
2454### What Changed
2455
2456**Before (v5.1.4)**:
2457```php
2458$this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
2459$zip->close();
2460// No verification - could create empty or partial backup
2461```
2462
2463**After (v5.1.5)**:
2464```php
2465$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
2466$zip->close();
2467
2468// Verify backup exists
2469if (!file_exists($backupPath)) {
2470    redirect('Backup file was not created');
2471}
2472
2473// Verify backup has content
2474$backupSize = filesize($backupPath);
2475if ($backupSize < 1000) {
2476    unlink($backupPath);
2477    redirect('Backup too small: ' . $backupSize . ' bytes');
2478}
2479
2480// Verify file count
2481if ($fileCount < 10) {
2482    unlink($backupPath);
2483    redirect('Only ' . $fileCount . ' files added (expected 30+)');
2484}
2485```
2486
2487### Backup Validation Checks
2488
2489**Three-Layer Verification**:
2490
24911. **File Count Check**:
2492   - Minimum: 10 files required
2493   - Expected: 30+ files
2494   - Action: Delete backup if too few files
2495
24962. **Size Check**:
2497   - Minimum: 1KB (1000 bytes)
2498   - Expected: 200-250KB
2499   - Action: Delete backup if too small
2500
25013. **Existence Check**:
2502   - Verify file was actually created
2503   - Check ZIP archive is valid
2504   - Action: Error if file missing
2505
2506### Enhanced Error Reporting
2507
2508**Detailed Error Messages**:
2509```
2510❌ "Backup file was not created"
2511❌ "Backup too small (342 bytes). Only 3 files added."
2512❌ "Only 5 files added (expected 30+). Backup aborted."
2513❌ "Too many errors adding files: Failed to add X, Y, Z..."
2514❌ "Directory does not exist: /path/to/dir"
2515❌ "Directory is not readable: /path/to/dir"
2516```
2517
2518**Now you know exactly what went wrong!**
2519
2520### Improved addDirectoryToZip Function
2521
2522**Returns File Count**:
2523```php
2524private function addDirectoryToZip($zip, $dir, $zipPath = '') {
2525    $fileCount = 0;
2526    $errors = [];
2527
2528    // Validation
2529    if (!is_dir($dir)) throw new Exception("Directory does not exist");
2530    if (!is_readable($dir)) throw new Exception("Not readable");
2531
2532    // Add files
2533    foreach ($files as $file) {
2534        if ($zip->addFile($filePath, $relativePath)) {
2535            $fileCount++;
2536        } else {
2537            $errors[] = "Failed to add: " . $filename;
2538        }
2539    }
2540
2541    // Check error threshold
2542    if (count($errors) > 5) {
2543        throw new Exception("Too many errors");
2544    }
2545
2546    return $fileCount;  // Returns count for verification!
2547}
2548```
2549
2550### Safety Features
2551
2552**Invalid Backup Cleanup**:
2553- Failed backups are automatically deleted
2554- No partial/corrupt backups left behind
2555- Clean error state
2556
2557**Error Threshold**:
2558- Allow up to 5 minor file errors (logs warnings)
2559- More than 5 errors = complete failure
2560- Prevents partially corrupt backups
2561
2562**Directory Validation**:
2563- Check directory exists before processing
2564- Check directory is readable
2565- Fail fast with clear errors
2566
2567### Benefits
2568
2569**Guaranteed Complete Backups**:
2570- ✅ All files included or backup fails
2571- ✅ No silent failures
2572- ✅ Clear error messages
2573- ✅ Automatic cleanup
2574
2575**Better Debugging**:
2576- Know exactly how many files were added
2577- See specific errors for missing files
2578- Understand why backup failed
2579
2580**User Confidence**:
2581- Backup succeeds = complete backup
2582- Backup fails = clear error message
2583- No ambiguity
2584
2585### Example Scenarios
2586
2587**Scenario 1: Permission Issue**
2588```
2589User uploads new version
2590System starts backup
2591Error: "Directory is not readable: /lib/plugins/calendar/"
2592Backup fails before creating file
2593User sees clear error message
2594```
2595
2596**Scenario 2: Partial Backup**
2597```
2598User uploads new version
2599System creates backup
2600Only 5 files added (disk issue?)
2601Size: 450 bytes
2602Verification fails
2603Incomplete backup deleted
2604Error: "Only 5 files added (expected 30+)"
2605```
2606
2607**Scenario 3: Success**
2608```
2609User uploads new version
2610System creates backup
261131 files added
2612Size: 240KB
2613All verifications pass ✅
2614Update proceeds
2615```
2616
2617### Testing Recommendations
2618
2619After installing v5.1.5:
26201. Upload a new version with backup enabled
26212. Check for success message
26223. Verify backup file exists in /lib/plugins/
26234. Check backup file size (should be ~240KB)
26245. If backup fails, read error message carefully
2625
2626**Your backups are now bulletproof!** ��
2627
2628## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED
2629
2630### ✅ Verified: Backup System Working Correctly
2631- **Verified:** addDirectoryToZip function includes all files recursively
2632- **Verified:** Backups contain all 31+ files from calendar directory
2633- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed)
2634- **Info:** Backup sizes grow slightly with each version (more code = more features!)
2635- **Result:** Backup system is working perfectly!
2636
2637### Backup System Details
2638
2639**What Gets Backed Up**:
2640- All PHP files (syntax.php, admin.php, action.php, etc.)
2641- All JavaScript files (calendar-main.js, script.js)
2642- All documentation (CHANGELOG.md, README.md, all guides)
2643- All configuration (sync_config.php)
2644- All language files
2645- All assets and resources
2646- **Everything in the calendar/ directory!**
2647
2648**Backup Size Analysis**:
2649```
2650Version 5.0.4: 233KB (normal)
2651Version 5.0.5: 234KB (normal)
2652Version 5.0.6: 235KB (normal)
2653Version 5.0.7: 236KB (normal)
2654Version 5.0.8: 237KB (normal)
2655Version 5.0.9: 237KB (normal)
2656Version 5.1.0: 238KB (normal)
2657Version 5.1.1: 238KB (normal)
2658Version 5.1.2: 240KB (normal - added AJAX features)
2659Version 5.1.3: 240KB (normal)
2660```
2661
2662**Why Sizes Grow**:
2663- More features = more code
2664- Longer CHANGELOG
2665- Additional documentation
2666- New functionality
2667- **This is expected and normal!**
2668
2669**Compression Ratio**:
2670```
2671Uncompressed: ~1.0 MB (source files)
2672Compressed:   ~240 KB (ZIP archive)
2673Ratio:        ~24% (excellent compression!)
2674```
2675
2676### Backup File Contents
2677
2678**31 Files Included**:
2679```
2680admin.php              (216KB - main admin interface)
2681syntax.php             (173KB - calendar rendering)
2682calendar-main.js       (102KB - JavaScript functionality)
2683CHANGELOG.md           (268KB - complete version history)
2684style.css              (57KB - all styling)
2685action.php             (38KB - DokuWiki actions)
2686sync_outlook.php       (32KB - Outlook integration)
2687+ 24 other files (docs, configs, helpers)
2688```
2689
2690**All files successfully included!** ✅
2691
2692### How Backups Work
2693
2694**Creation Process**:
26951. User uploads new plugin version
26962. Checkbox "Create backup first" (checked by default)
26973. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip`
26984. Backup saved to: `/lib/plugins/` directory
26995. Then proceeds with update
2700
2701**Backup Function**:
2702```php
2703private function addDirectoryToZip($zip, $dir, $zipPath = '') {
2704    $files = new RecursiveIteratorIterator(
2705        new RecursiveDirectoryIterator($dir),
2706        RecursiveIteratorIterator::LEAVES_ONLY
2707    );
2708    foreach ($files as $file) {
2709        if (!$file->isDir()) {
2710            $zip->addFile($filePath, $relativePath);
2711        }
2712    }
2713}
2714```
2715
2716**Recursive = Gets Everything!** ✅
2717
2718### Verification Results
2719
2720**Test Results**:
2721- ✅ All 31 files present in zip
2722- ✅ All subdirectories included (lang/en/)
2723- ✅ File sizes match originals
2724- ✅ Compression works properly
2725- ✅ No files missing
2726- ✅ Backup can be restored
2727
2728**File Count**:
2729```
2730Source directory: 31 files
2731Backup ZIP:       34 items (31 files + 3 directories)
2732Status:           COMPLETE ✅
2733```
2734
2735### Backup Best Practices
2736
2737**Always enabled by default** ✅
2738**Stored in accessible location** ✅
2739**Timestamped filenames** ✅
2740**Complete directory backup** ✅
2741**Easy to restore** ✅
2742
2743### Conclusion
2744
2745The backup system is working perfectly. The file sizes are appropriate and expected:
2746- Compressed size: ~240KB (good compression)
2747- Uncompressed size: ~1MB (all source files)
2748- All files included: YES ✅
2749- Growing size over versions: Normal (more features!)
2750
2751**Your backups are complete and reliable!** ��
2752
2753## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR
2754
2755### �� Fixed: JavaScript Syntax Error in AJAX Function
2756- **Fixed:** ParseError on line 1947 (deleteBackup function)
2757- **Fixed:** Escaped all single quotes in JavaScript strings
2758- **Result:** AJAX backup deletion now works correctly!
2759
2760### What Was Wrong
2761
2762JavaScript inside PHP echo needs escaped quotes:
2763
2764**Before (broken)**:
2765```javascript
2766formData.append('action', 'delete_backup');  // PHP interprets quotes
2767```
2768
2769**After (fixed)**:
2770```javascript
2771formData.append(\'action\', \'delete_backup\');  // Escaped for PHP
2772```
2773
2774### All Quotes Escaped
2775
2776Fixed in deleteBackup function:
2777- ✅ FormData.append() calls
2778- ✅ fetch() URL
2779- ✅ querySelector() calls
2780- ✅ createElement() call
2781- ✅ All string literals
2782- ✅ Error messages
2783
2784**JavaScript now works!** ✓
2785
2786## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT
2787
2788### �� Improved: Update Tab Further Refined
2789- **Moved:** Important Notes to very top (above upload)
2790- **Enhanced:** Delete backup now uses AJAX (no page refresh!)
2791- **Added:** Smooth fade-out animation when deleting backups
2792- **Added:** Success message after deletion
2793- **Auto-remove:** Backup section disappears if last backup deleted
2794- **Result:** Smoother, more polished experience!
2795
2796### New Layout Order
2797
2798**Final Order (v5.1.2)**:
2799```
28001. ⚠️ Important Notes (warnings at top)
28012. �� Upload New Version (with Clear Cache button)
28023. �� Current Version (info)
28034. �� Recent Changes (changelog)
28045. �� Available Backups (if any)
2805```
2806
2807### AJAX Backup Deletion
2808
2809**Before (v5.1.1)**:
2810- Click Delete → Page refreshes → Scroll back down
2811- Lose position on page
2812- Page reload is jarring
2813
2814**After (v5.1.2)**:
2815- Click Delete → Confirm
2816- Row fades out smoothly
2817- Row disappears
2818- Success message shows at top
2819- Success message fades after 3 seconds
2820- If last backup: entire section fades away
2821- **No page refresh!** ✓
2822
2823### Visual Flow
2824
2825**Delete Animation**:
2826```
28271. Click ��️ Delete
28282. Confirm dialog
28293. Row fades out (0.3s)
28304. Row removed
28315. Success message appears
28326. Message fades after 3s
2833```
2834
2835**If Last Backup**:
2836```
28371. Delete last backup
28382. Row fades out
28393. Entire "Available Backups" section fades
28404. Section removed
28415. Clean interface ✓
2842```
2843
2844### Success Message
2845
2846After deleting:
2847```
2848┌──────────────────────────────┐
2849│ ✓ Backup deleted: filename   │ ← Appears at top
2850└──────────────────────────────┘
2851   Fades after 3 seconds
2852```
2853
2854### Benefits
2855
2856**Important Notes First**:
2857- Warnings before actions ✓
2858- Read before uploading ✓
2859- Clear expectations ✓
2860
2861**AJAX Deletion**:
2862- No page refresh ✓
2863- Smooth animations ✓
2864- Stay in context ✓
2865- Professional feel ✓
2866
2867**Auto-Cleanup**:
2868- Empty list disappears ✓
2869- Clean interface ✓
2870- No clutter ✓
2871
2872### Technical Implementation
2873
2874**AJAX Request**:
2875```javascript
2876fetch('?do=admin&page=calendar&tab=update', {
2877    method: 'POST',
2878    body: formData
2879})
2880```
2881
2882**DOM Manipulation**:
2883- Fade out row
2884- Remove element
2885- Show success
2886- Remove section if empty
2887
2888**Smooth Transitions**:
2889- 300ms fade animations
2890- Clean visual feedback
2891- Professional polish
2892
2893## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB
2894
2895### �� Improved: Update Tab Layout Reorganized
2896- **Moved:** Upload section to the top of the page
2897- **Added:** Clear Cache button next to Upload & Install button
2898- **Changed:** "Current Version" section moved below upload
2899- **Result:** Better workflow - upload first, then see version info!
2900
2901### New Layout Order
2902
2903**Before (v5.1.0)**:
2904```
29051. Clear Cache (standalone)
29062. Current Version
29073. Recent Changes
29084. Upload New Version
29095. Warning Box
29106. Backups
2911```
2912
2913**After (v5.1.1)**:
2914```
29151. Upload New Version (with Clear Cache button side-by-side)
29162. Warning Box
29173. Current Version
29184. Recent Changes
29195. Backups
2920```
2921
2922### Visual Result
2923
2924**Top of Update Tab**:
2925```
2926┌─────────────────────────────────┐
2927│ �� Upload New Version           │
2928│ ┌─────────────────────────────┐ │
2929│ │ [Choose File]               │ │
2930│ │ ☑ Create backup first       │ │
2931│ │ ┌──────────────┬──────────┐ │ │
2932│ │ │�� Upload &   │��️ Clear  │ │ │
2933│ │ │   Install    │   Cache  │ │ │
2934│ │ └──────────────┴──────────┘ │ │
2935│ └─────────────────────────────┘ │
2936│                                 │
2937│ ⚠️ Important Notes              │
2938│ • Will replace all files        │
2939│ • Config preserved              │
2940│                                 │
2941│ �� Current Version              │
2942│ Version: 5.1.1                  │
2943└─────────────────────────────────┘
2944```
2945
2946### Benefits
2947
2948**Better Workflow**:
2949- Primary action (upload) is first
2950- Clear cache conveniently next to install
2951- No scrolling to find upload button
2952- Logical top-to-bottom flow
2953
2954**Side-by-Side Buttons**:
2955- Upload & Install (green)
2956- Clear Cache (orange)
2957- Both common actions together
2958- Easy to access after upload
2959
2960**Improved UX**:
2961- Upload is most important → now at top
2962- Version info is reference → moved down
2963- Related actions grouped
2964- Cleaner organization
2965
2966### Button Layout
2967
2968```
2969┌──────────────────┬──────────────┐
2970│ �� Upload &      │ ��️ Clear     │
2971│    Install       │    Cache     │
2972│ (Green)          │ (Orange)     │
2973└──────────────────┴──────────────┘
2974```
2975
2976**Green = Primary Action**
2977**Orange = Secondary Action**
2978
2979Both easily accessible!
2980
2981## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND
2982
2983### �� Changed: Admin Section Backgrounds Now Use __background__
2984- **Changed:** All section boxes now use `__background__` instead of `__background_alt__`
2985- **Result:** Cleaner, more unified admin interface!
2986
2987### Background Usage Update
2988
2989**Before (v5.0.9)**:
2990```php
2991Section boxes: bg_alt (__background_alt__)
2992Content areas: bg (__background__)
2993```
2994
2995**After (v5.1.0)**:
2996```php
2997Section boxes: bg (__background__)
2998Content areas: bg (__background__)
2999```
3000
3001### Why This Change?
3002
3003**More unified appearance**:
3004- Sections and content use same background
3005- Creates cleaner, more cohesive look
3006- Borders provide visual separation
3007- Matches typical admin UI patterns
3008
3009**Template color hierarchy**:
3010```
3011__background_site__ → Outer page wrapper
3012__background__      → Content & sections (BOTH now use this)
3013__background_alt__  → Reserved for special panels/highlights
3014__background_neu__  → Special highlights
3015```
3016
3017### Visual Result
3018
3019**Light Template**:
3020```ini
3021__background__ = "#ffffff"
3022__background_alt__ = "#e8e8e8"
3023```
3024
3025**Before**:
3026```
3027Admin Page:
3028┌─────────────────────┐
3029│ ┌─────────────────┐ │
3030│ │ Section Box     │ │ ← Gray (#e8e8e8)
3031│ │ ┌─────────────┐ │ │
3032│ │ │ Content     │ │ │ ← White (#fff)
3033│ │ └─────────────┘ │ │
3034│ └─────────────────┘ │
3035└─────────────────────┘
3036Two-tone appearance
3037```
3038
3039**After**:
3040```
3041Admin Page:
3042┌─────────────────────┐
3043│ ┌─────────────────┐ │
3044│ │ Section Box     │ │ ← White (#fff)
3045│ │ ┌─────────────┐ │ │
3046│ │ │ Content     │ │ │ ← White (#fff)
3047│ │ └─────────────┘ │ │
3048│ └─────────────────┘ │
3049└─────────────────────┘
3050Unified, clean appearance
3051Borders provide separation
3052```
3053
3054**Dark Template**:
3055```ini
3056__background__ = "#2d2d2d"
3057__background_alt__ = "#3a3a3a"
3058```
3059
3060**After**:
3061```
3062Admin Page:
3063┌─────────────────────┐
3064│ ┌─────────────────┐ │
3065│ │ Section Box     │ │ ← Dark (#2d2d2d)
3066│ │ ┌─────────────┐ │ │
3067│ │ │ Content     │ │ │ ← Dark (#2d2d2d)
3068│ │ └─────────────┘ │ │
3069│ └─────────────────┘ │
3070└─────────────────────┘
3071Unified dark appearance
3072Accent borders provide definition
3073```
3074
3075### Benefits
3076
3077**Cleaner Look**:
3078- No more alternating gray/white
3079- More professional appearance
3080- Less visual noise
3081- Unified color scheme
3082
3083**Better Consistency**:
3084- Matches modern admin UI patterns
3085- Borders define sections, not colors
3086- Simpler, cleaner design
3087- Easier on the eyes
3088
3089**Template Friendly**:
3090- Works with any background color
3091- Light or dark templates
3092- Custom colors
3093- Always looks cohesive
3094
3095### All Sections Updated
3096
3097✅ Outlook Sync config sections
3098✅ Manage Events sections
3099✅ Update Plugin sections
3100✅ Themes tab sections
3101✅ Week start day section
3102✅ All form sections
3103
3104**Complete unified theming!** ��
3105
3106## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB
3107
3108### �� Fixed: Syntax Error in Theme Cards
3109- **Fixed:** ParseError on line 4461 (Purple theme card)
3110- **Fixed:** Malformed ternary expressions from sed replacement
3111- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki)
3112- **Result:** Admin pages work correctly!
3113
3114### What Was Wrong
3115
3116The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions:
3117
3118**Before (broken)**:
3119```php
3120? '#9b59b6' : ' . $colors['border'] . ')
3121// Extra quote and dot created syntax error
3122```
3123
3124**After (fixed)**:
3125```php
3126? '#9b59b6' : $colors['border'])
3127// Clean ternary expression
3128```
3129
3130### All Theme Cards Fixed
3131
3132- ✅ Purple Dream card
3133- ✅ Professional Blue card
3134- ✅ Pink Bling card
3135- ✅ Wiki Default card
3136
3137### Now Working
3138
3139**Theme selection page loads** ✓
3140**All cards display properly** ✓
3141**Template colors applied** ✓
3142**No syntax errors** ✓
3143
3144## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING
3145
3146### �� Fixed: Themes Tab Backgrounds & Correct Template Color Mapping
3147- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites)
3148- **Fixed:** Main background now uses `__background__` instead of `__background_site__`
3149- **Fixed:** Theme selection cards use template backgrounds
3150- **Fixed:** Week start options use template backgrounds
3151- **Result:** Perfect color mapping throughout admin!
3152
3153### Color Mapping Correction
3154
3155**Before (v5.0.7)**:
3156```php
3157bg: __background_site__  // Wrong - this is outer page bg
3158bg_alt: __background_alt__
3159```
3160
3161**After (v5.0.8)**:
3162```php
3163bg: __background__       // Correct - main content bg
3164bg_alt: __background_alt__
3165```
3166
3167### Why This Matters
3168
3169**Template color hierarchy**:
3170```
3171__background_site__ → Outer page/site background
3172__background__      → Main content area (CORRECT for admin)
3173__background_alt__  → Sections/panels
3174__background_neu__  → Highlights
3175```
3176
3177**Admin should use**:
3178- `__background__` for input fields, content areas
3179- `__background_alt__` for section boxes, panels
3180
3181### Themes Tab Fixed
3182
3183**Removed all hardcoded colors**:
3184```php
3185Before: '#ddd', '#fff', '#dee2e6'
3186After:  $colors['border'], $colors['bg'], $colors['border']
3187```
3188
3189**Now themed**:
3190- ✅ Week start section background
3191- ✅ Week start option backgrounds
3192- ✅ Theme card backgrounds
3193- ✅ Theme card borders
3194- ✅ All borders throughout
3195
3196### Visual Result
3197
3198**Light Template**:
3199```ini
3200__background__ = "#ffffff"
3201__background_alt__ = "#e8e8e8"
3202```
3203
3204**Admin Before (v5.0.7)**:
3205```
3206Input fields: #f5f5f5 (site bg - wrong)
3207Sections: #e8e8e8 (alt bg - correct)
3208```
3209
3210**Admin After (v5.0.8)**:
3211```
3212Input fields: #ffffff (content bg - correct!)
3213Sections: #e8e8e8 (alt bg - correct!)
3214```
3215
3216**Dark Template**:
3217```ini
3218__background__ = "#2d2d2d"
3219__background_alt__ = "#3a3a3a"
3220```
3221
3222**Admin After (v5.0.8)**:
3223```
3224Input fields: #2d2d2d (content bg - perfect!)
3225Sections: #3a3a3a (alt bg - perfect!)
3226```
3227
3228### Complete Themes Tab
3229
3230**Week Start Options**:
3231```
3232┌─────────────────────────┐
3233│ �� Week Start Day       │ ← bg_alt
3234│ ┌─────────┬───────────┐ │
3235│ │ Monday  │ Sunday    │ │ ← bg (when not selected)
3236│ └─────────┴───────────┘ │
3237└─────────────────────────┘
3238```
3239
3240**Theme Cards**:
3241```
3242┌─────────────────────────┐
3243│ �� Matrix Edition       │ ← bg (when not selected)
3244│ Classic green theme     │   border (when not selected)
3245└─────────────────────────┘
3246
3247┌═════════════════════════┐
3248│ �� Purple Dream         │ ← rgba green tint (when selected)
3249│ Elegant purple theme    │   #00cc07 border (when selected)
3250└═════════════════════════┘
3251```
3252
3253### Perfect Integration
3254
3255**All admin pages now**:
3256- Content areas: `__background__` ✓
3257- Section boxes: `__background_alt__` ✓
3258- Borders: `__border__` ✓
3259- Text: `__text__` ✓
3260
3261**Matches wiki perfectly**:
3262- Same white content areas
3263- Same gray section boxes
3264- Same border colors
3265- Same text colors
3266
3267### No More Issues
3268
3269**Fixed**:
3270- ❌ Site background on content areas → ✅ Content background
3271- ❌ Hardcoded white on themes tab → ✅ Template background
3272- ❌ Hardcoded borders (#ddd) → ✅ Template borders
3273
3274**Result**:
3275- Perfect color hierarchy ✓
3276- Correct background levels ✓
3277- Complete template integration ✓
3278
3279## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING
3280
3281### �� Fixed: All Admin Backgrounds Use Template Colors
3282- **Fixed:** All section backgrounds use `__background_alt__`
3283- **Fixed:** All content backgrounds use `__background__`
3284- **Fixed:** All borders use `__border__`
3285- **Fixed:** All text uses `__text__`
3286- **Result:** Complete admin template integration!
3287
3288### All Replacements
3289
3290**Backgrounds**:
3291```php
3292Before: background: #f9f9f9
3293After:  background: ' . $colors['bg_alt'] . '
3294
3295Before: background: #fff / background: white
3296After:  background: ' . $colors['bg'] . '
3297```
3298
3299**Borders**:
3300```php
3301Before: border: 1px solid #ddd
3302Before: border: 1px solid #e0e0e0
3303Before: border: 1px solid #eee
3304After:  border: 1px solid ' . $colors['border'] . '
3305```
3306
3307**Text**:
3308```php
3309Before: color: #333
3310Before: color: #666
3311After:  color: ' . $colors['text'] . '
3312```
3313
3314### Complete Admin Coverage
3315
3316**All tabs now themed**:
3317- ✅ Manage Events tab
3318- ✅ Update Plugin tab
3319- ✅ Outlook Sync tab
3320- ✅ Themes tab
3321- ✅ Tab navigation
3322- ✅ All sections
3323- ✅ All inputs
3324- ✅ All borders
3325- ✅ All text
3326
3327### Visual Result
3328
3329**Light Template**:
3330```
3331Admin Page:
3332┌──────────────────────────┐
3333│ Tab Navigation           │ ← Template borders
3334├──────────────────────────┤
3335│ Section Headers          │ ← bg_alt (light gray)
3336│ ┌──────────────────────┐ │
3337│ │ Form Inputs          │ │ ← bg (white)
3338│ │ Content Areas        │ │
3339│ └──────────────────────┘ │
3340└──────────────────────────┘
3341All template colors! ✓
3342```
3343
3344**Dark Template**:
3345```
3346Admin Page:
3347┌──────────────────────────┐
3348│ Tab Navigation           │ ← Template borders
3349├──────────────────────────┤
3350│ Section Headers          │ ← bg_alt (dark gray)
3351│ ┌──────────────────────┐ │
3352│ │ Form Inputs          │ │ ← bg (darker)
3353│ │ Content Areas        │ │
3354│ └──────────────────────┘ │
3355└──────────────────────────┘
3356All template colors! ✓
3357```
3358
3359### Template Color Mapping
3360
3361**Used throughout admin**:
3362```
3363__background_site__ → $colors['bg']       (main backgrounds)
3364__background_alt__  → $colors['bg_alt']   (section backgrounds)
3365__text__            → $colors['text']     (all text)
3366__border__          → $colors['border']   (all borders)
3367__link__            → $colors['link']     (links - future)
3368```
3369
3370### Examples by Section
3371
3372**Manage Events**:
3373- Event list backgrounds: `bg_alt`
3374- Event item backgrounds: `bg`
3375- Borders: `border`
3376- Text: `text`
3377
3378**Update Plugin**:
3379- Section backgrounds: `bg_alt`
3380- Content areas: `bg`
3381- Borders: `border`
3382- Text: `text`
3383
3384**Outlook Sync**:
3385- Config sections: `bg_alt`
3386- Input fields: `bg`
3387- Borders: `border`
3388- Labels: `text`
3389
3390**Themes Tab**:
3391- Theme cards: `bg_alt`
3392- Preview areas: `bg`
3393- Borders: `border`
3394- Descriptions: `text`
3395
3396### Benefits
3397
3398**Seamless Integration**:
3399- Matches wiki admin area perfectly
3400- Same colors throughout wiki
3401- Professional appearance
3402- Consistent experience
3403
3404**Automatic Adaptation**:
3405- Light templates: Light admin
3406- Dark templates: Dark admin
3407- Custom templates: Uses custom colors
3408
3409**No White Boxes**:
3410- Every background themed
3411- Every border themed
3412- Every text themed
3413- Complete consistency
3414
3415### PERFECT HARMONY
3416
3417**Frontend (Calendar)**:
3418- Wiki theme uses style.ini3419- Perfect template match ✓
3420
3421**Backend (Admin)**:
3422- Reads same style.ini3423- Perfect template match ✓
3424
3425**Complete Unity**:
3426- Same colors everywhere ✓
3427- Seamless experience ✓
3428- Professional polish ✓
3429
3430## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS
3431
3432### �� Enhanced: Month/Year Header & Admin Pages Use Template Colors
3433- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme
3434- **Added:** Admin pages read template's style.ini file
3435- **Added:** `getTemplateColors()` function in admin class
3436- **Fixed:** Tab navigation uses template text and border colors
3437- **Result:** Complete template integration everywhere!
3438
3439### Month/Year Header
3440
3441**Before**:
3442```php
3443color: __text__  // Same as primary text
3444```
3445
3446**After (Wiki Theme)**:
3447```php
3448color: __text_neu__  // Dimmed text (subtle)
3449```
3450
3451### Admin Pages Enhancement
3452
3453**New `getTemplateColors()` function**:
3454- Reads template's style.ini file
3455- Extracts color replacements
3456- Provides colors to all admin tabs
3457- Falls back to sensible defaults
3458
3459**Colors used**:
3460```php
3461bg: __background_site__
3462bg_alt: __background_alt__
3463text: __text__
3464border: __border__
3465link: __link__
3466```
3467
3468**Applied to**:
3469- Tab navigation borders
3470- Tab text colors
3471- All admin sections
3472- Ready for future enhancements
3473
3474### Visual Result
3475
3476**Calendar Header**:
3477```
3478┌────────────────────┐
3479│ ‹ February 2026 › │ ← __text_neu__ (dimmed)
3480└────────────────────┘
3481Subtle and elegant ✓
3482```
3483
3484**Admin Navigation**:
3485```
3486�� Manage Events | �� Update | ⚙️ Config | �� Themes
3487─────────────────────────────────────────────────
3488Active tab: Green (#00cc07)
3489Inactive tabs: Template text color
3490Border: Template border color
3491```
3492
3493### Template Integration
3494
3495**Light Template**:
3496```ini
3497__text_neu__ = "#666666"
3498__border__ = "#cccccc"
3499```
3500**Result**:
3501- Month/Year: Medium gray (subtle)
3502- Admin borders: Light gray
3503- Tab text: Dark gray
3504
3505**Dark Template**:
3506```ini
3507__text_neu__ = "#999999"
3508__border__ = "#555555"
3509```
3510**Result**:
3511- Month/Year: Light gray (subtle)
3512- Admin borders: Medium gray
3513- Tab text: Bright gray
3514
3515### Benefits
3516
3517**Calendar Frontend**:
3518- Month/Year header more subtle
3519- Better visual hierarchy
3520- Less prominent, more elegant
3521
3522**Admin Backend**:
3523- Uses template colors
3524- Matches wiki admin area
3525- Consistent experience
3526- Professional appearance
3527
3528### Future-Ready
3529
3530The `getTemplateColors()` function is now available for:
3531- ✅ Tab navigation (implemented)
3532- �� Section backgrounds (ready)
3533- �� Button colors (ready)
3534- �� Input fields (ready)
3535- �� Success/error messages (ready)
3536
3537**Foundation laid for complete admin theming!** ��
3538
3539## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS
3540
3541### �� Fixed: Add Event Bar & Section Headers Use Template Colors
3542- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme
3543- **Fixed:** "Today" header uses `__text_neu__`
3544- **Fixed:** "Tomorrow" header uses `__text__`
3545- **Fixed:** "Important Events" header uses `__border__`
3546- **Result:** Perfect template color integration!
3547
3548### All Changes
3549
3550**Add Event Bar (Wiki Theme)**:
3551
3552**Before**:
3553```php
3554background: #3498db  // Generic blue
3555```
3556
3557**After**:
3558```php
3559background: __background_alt__  // Template alternate bg
3560text: __text__                  // Template text color
3561hover: __background_neu__       // Template neutral bg
3562```
3563
3564**Section Headers (Wiki Theme)**:
3565
3566**Before**:
3567```php
3568Today: #ff9800           // Orange
3569Tomorrow: #4caf50        // Green
3570Important Events: #9b59b6 // Purple
3571```
3572
3573**After**:
3574```php
3575Today: __text_neu__      // Template dimmed text
3576Tomorrow: __text__       // Template primary text
3577Important Events: __border__ // Template border color
3578```
3579
3580### Visual Result
3581
3582**Wiki Default Theme**:
3583```
3584Add Event Bar:
3585┌────────────────┐
3586│  + ADD EVENT   │ ← Template alt background
3587└────────────────┘
3588
3589Sections:
3590━━━━━━━━━━━━━━━━
3591Today              ← Dimmed text color (__text_neu__)
3592• Team Meeting
3593
3594Tomorrow           ← Primary text color (__text__)
3595• Code Review
3596
3597Important Events   ← Border color (__border__)
3598• Project Deadline
3599```
3600
3601### Example with DokuWiki Default Template
3602
3603**Template colors**:
3604```ini
3605__background_alt__ = "#e8e8e8"
3606__text__ = "#333333"
3607__text_neu__ = "#666666"
3608__border__ = "#cccccc"
3609```
3610
3611**Calendar result**:
3612```
3613Add Event Bar: Light gray (#e8e8e8)
3614Today header: Medium gray (#666666)
3615Tomorrow header: Dark gray (#333333)
3616Important Events header: Border gray (#cccccc)
3617```
3618
3619### Example with Dark Template
3620
3621**Template colors**:
3622```ini
3623__background_alt__ = "#2d2d2d"
3624__text__ = "#e0e0e0"
3625__text_neu__ = "#999999"
3626__border__ = "#555555"
3627```
3628
3629**Calendar result**:
3630```
3631Add Event Bar: Dark gray (#2d2d2d)
3632Today header: Light gray (#999999)
3633Tomorrow header: Bright gray (#e0e0e0)
3634Important Events header: Medium gray (#555555)
3635```
3636
3637### Perfect Harmony
3638
3639All sidebar elements now use template colors:
3640- ✅ Add Event bar background
3641- ✅ Add Event bar text
3642- ✅ Today section header
3643- ✅ Tomorrow section header
3644- ✅ Important Events header
3645- ✅ Calendar cells
3646- ✅ Grid backgrounds
3647- ✅ All borders
3648
3649**Complete template integration!** ��
3650
3651## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS
3652
3653### �� Fixed: Calendar Cells Use Correct Template Color
3654- **Fixed:** Calendar cells now use `__background__` from template
3655- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__`
3656- **Result:** Calendar cells match main content area background!
3657
3658### Color Mapping Update
3659
3660**Before (v5.0.3)**:
3661```php
3662cell_bg: __background_neu__  // Wrong - this is for neutral/alternate
3663```
3664
3665**After (v5.0.4)**:
3666```php
3667cell_bg: __background__      // Correct - main content background
3668```
3669
3670### Template Color Usage
3671
3672**Wiki Default theme now uses**:
3673```
3674__background_site__ → Overall page background
3675__background__      → Calendar cells (main content bg)
3676__background_alt__  → Grid background, headers
3677__background_neu__  → Today cell highlight
3678__text__            → Primary text
3679__text_neu__        → Dimmed text
3680__link__            → Links, bright text
3681__border__          → All borders
3682```
3683
3684### Visual Result
3685
3686**Before**:
3687```
3688Calendar with template colors:
3689┌─────┬─────┬─────┐
3690│ Mon │ Tue │ Wed │
3691├─────┼─────┼─────┤
3692│  8  │  9  │ 10  │ ← Neutral gray (wrong)
3693└─────┴─────┴─────┘
3694```
3695
3696**After**:
3697```
3698Calendar with template colors:
3699┌─────┬─────┬─────┐
3700│ Mon │ Tue │ Wed │
3701├─────┼─────┼─────┤
3702│  8  │  9  │ 10  │ ← White/content bg (correct!)
3703└─────┴─────┴─────┘
3704```
3705
3706### Example Template Colors
3707
3708**DokuWiki Default**:
3709```ini
3710__background__ = "#ffffff"
3711```
3712**Result**: White calendar cells ✓
3713
3714**Dark Template**:
3715```ini
3716__background__ = "#2d2d2d"
3717```
3718**Result**: Dark calendar cells ✓
3719
3720**Custom Template**:
3721```ini
3722__background__ = "#f9f9f9"
3723```
3724**Result**: Custom color cells ✓
3725
3726### Perfect Matching
3727
3728Calendar cells now match:
3729- ✅ Main content area background
3730- ✅ Article/page background
3731- ✅ Content box background
3732- ✅ Same as wiki text background
3733
3734**Seamless integration!** ��
3735
3736## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI
3737
3738### �� Enhanced: Wiki Default Theme Reads Template Colors
3739- **Added:** Function to read colors from DokuWiki template's style.ini file
3740- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
3741- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
3742- **Uses:** Actual template colors instead of CSS variables
3743- **Result:** Perfect color matching with any DokuWiki template!
3744
3745### How It Works
3746
3747**New Function: `getWikiTemplateColors()`**
3748
37491. **Detects** current DokuWiki template name
37502. **Reads** the template's `style.ini` file
37513. **Parses** color replacements section
37524. **Maps** template colors to calendar theme
37535. **Falls back** to CSS variables if file not found
3754
3755### Colors Read from style.ini
3756
3757**Template color replacements used**:
3758```php
3759__background_site__  → bg, header_bg
3760__background_alt__   → grid_bg, cell_today_bg
3761__background_neu__   → cell_bg
3762__text__             → text_primary
3763__text_neu__         → text_dim
3764__link__             → text_bright
3765__border__           → border, grid_border
3766```
3767
3768### Example style.ini Mapping
3769
3770**Template style.ini**:
3771```ini
3772[replacements]
3773__background_site__ = "#f8f9fa"
3774__background_alt__  = "#e9ecef"
3775__background_neu__  = "#dee2e6"
3776__text__            = "#212529"
3777__text_neu__        = "#6c757d"
3778__link__            = "#0d6efd"
3779__border__          = "#ced4da"
3780```
3781
3782**Calendar theme result**:
3783```php
3784bg: #f8f9fa
3785header_bg: #e9ecef
3786grid_bg: #e9ecef
3787cell_bg: #dee2e6
3788text_primary: #212529
3789text_dim: #6c757d
3790text_bright: #0d6efd
3791border: #ced4da
3792grid_border: #ced4da
3793```
3794
3795### Before vs After
3796
3797**Before (v5.0.2)**:
3798```
3799Wiki Default theme used:
3800- CSS variables (var(--__background__, #fff))
3801- Required browser CSS variable support
3802- Fallback to generic colors
3803```
3804
3805**After (v5.0.3)**:
3806```
3807Wiki Default theme uses:
3808- Actual colors from template's style.ini
3809- Exact template color values
3810- No CSS variable dependency
3811- Perfect color matching!
3812```
3813
3814### File Location Priority
3815
3816Checks in order:
38171. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
38182. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
38193. Falls back to CSS variables if neither found
3820
3821### Benefits
3822
3823**More accurate colors**:
3824- Uses exact template color values ✓
3825- No CSS variable interpolation ✓
3826- Consistent across all browsers ✓
3827
3828**Better compatibility**:
3829- Works with older browsers ✓
3830- No CSS variable support needed ✓
3831- Direct color values ✓
3832
3833**Perfect matching**:
3834- Reads template's actual colors ✓
3835- Same colors as wiki pages ✓
3836- Seamless integration ✓
3837
3838### Template Examples
3839
3840**DokuWiki Default Template**:
3841```
3842Reads: lib/tpl/dokuwiki/style.ini
3843Gets: Default DokuWiki colors
3844Result: Perfect classic DokuWiki look
3845```
3846
3847**Bootstrap Template**:
3848```
3849Reads: lib/tpl/bootstrap3/style.ini
3850Gets: Bootstrap color scheme
3851Result: Perfect Bootstrap integration
3852```
3853
3854**Custom Template**:
3855```
3856Reads: conf/tpl/mycustom/style.ini
3857Gets: Your custom colors
3858Result: Perfect custom theme match
3859```
3860
3861### Fallback Chain
3862
38631. **Try** reading style.ini from template
38642. **If found** → Use exact colors from file
38653. **If not found** → Use CSS variables
38664. **If no CSS vars** → Use fallback colors
3867
3868**Always works, always matches!** ✓
3869
3870## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL
3871
3872### �� Fixed: Wiki Default Theme Day Panel Colors
3873- **Fixed:** Day popup panel now uses DokuWiki CSS variables
3874- **Fixed:** Panel background matches wiki theme
3875- **Fixed:** Panel header matches wiki theme
3876- **Fixed:** Border colors use wiki theme
3877- **Fixed:** Text colors use wiki theme
3878- **Result:** Perfect integration with DokuWiki templates!
3879
3880### All Changes
3881
3882**Day Panel Colors (Wiki Default)**:
3883
3884**Before**:
3885```php
3886background: rgba(36, 36, 36, 0.5)  // Dark gray (wrong!)
3887header: #3498db                     // Blue (wrong!)
3888```
3889
3890**After**:
3891```php
3892background: var(--__background__, #fff)
3893header: var(--__background_alt__, #e8e8e8)
3894header_text: var(--__text__, #333)
3895border: var(--__border__, #ccc)
3896shadow: 0 2px 4px rgba(0, 0, 0, 0.1)
3897```
3898
3899**Event Colors (Wiki Default)**:
3900```php
3901event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5))
3902border_color: var(--__border__, rgba(204, 204, 204, 0.3))
3903bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15)
3904```
3905
3906### Before vs After
3907
3908**Before (v5.0.1)**:
3909```
3910Wiki Default - Click Week Cell:
3911┌────────────────┐
3912│ Monday, Feb 8  │ ← Blue header (wrong)
3913├────────────────┤
3914│ Team Meeting   │ ← Dark gray bg (wrong)
3915│ 2:00 PM        │
3916└────────────────┘
3917Doesn't match wiki theme
3918```
3919
3920**After (v5.0.2)**:
3921```
3922Wiki Default - Click Week Cell:
3923
3924Light Wiki Theme:
3925┌────────────────┐
3926│ Monday, Feb 8  │ ← Light gray header ✓
3927├────────────────┤
3928│ Team Meeting   │ ← White bg ✓
3929│ 2:00 PM        │   Dark text ✓
3930└────────────────┘
3931
3932Dark Wiki Theme:
3933┌────────────────┐
3934│ Monday, Feb 8  │ ← Dark header ✓
3935├────────────────┤
3936│ Team Meeting   │ ← Dark bg ✓
3937│ 2:00 PM        │   Light text ✓
3938└────────────────┘
3939
3940Perfectly matches wiki!
3941```
3942
3943### CSS Variables Used
3944
3945**Wiki Default theme now uses**:
3946- `--__background__` - Main background (panel body)
3947- `--__background_alt__` - Alternate bg (panel header, events)
3948- `--__text__` - Text color (header text)
3949- `--__border__` - Border color (panel border, event borders)
3950
3951**With fallbacks**:
3952```css
3953var(--__background__, #fff)           /* white fallback */
3954var(--__background_alt__, #e8e8e8)    /* light gray fallback */
3955var(--__text__, #333)                 /* dark text fallback */
3956var(--__border__, #ccc)               /* gray border fallback */
3957```
3958
3959### Perfect Adaptation
3960
3961**Light Templates**:
3962- Light panel backgrounds ✓
3963- Dark text ✓
3964- Subtle borders ✓
3965- Clean appearance ✓
3966
3967**Dark Templates**:
3968- Dark panel backgrounds ✓
3969- Light text ✓
3970- Visible borders ✓
3971- Perfect contrast ✓
3972
3973**Custom Templates**:
3974- Uses template's CSS variables ✓
3975- Automatic adaptation ✓
3976- Seamless integration ✓
3977
3978### Now Truly Adaptive
3979
3980Wiki Default theme now properly uses DokuWiki CSS variables for:
3981- ✅ Calendar grid
3982- ✅ Sidebar widget
3983- ✅ Event list
3984- ✅ **Day panel** ← v5.0.2!
3985- ✅ All backgrounds
3986- ✅ All text
3987- ✅ All borders
3988
3989**Complete wiki integration!** ��
3990
3991## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS
3992
3993### �� Enhanced: Time Conflict Tooltips Now Themed
3994- **Fixed:** Conflict tooltips now match calendar theme
3995- **Added:** Theme-aware background, border, text colors
3996- **Added:** Theme-aware shadow effects
3997- **Result:** Complete visual consistency!
3998
3999### Tooltip Theming
4000
4001**Now uses theme colors for**:
4002- Background: Theme background color
4003- Border: Theme border color
4004- Header text: Theme primary text color
4005- Item text: Theme dim text color
4006- Shadow: Theme shadow color
4007
4008### Before vs After
4009
4010**Before (v5.0.0)**:
4011```
4012Hover ⚠️ badge:
4013┌─────────────────┐
4014│ ⚠️ Time Conflicts│ ← Default colors
4015│ • Event A       │
4016│ • Event B       │
4017└─────────────────┘
4018```
4019
4020**After (v5.0.1)**:
4021```
4022Matrix Theme:
4023┌─────────────────┐
4024│ ⚠️ Time Conflicts│ ← Green header
4025│ • Event A       │ ← Green text
4026│ • Event B       │   Dark green bg
4027└─────────────────┘
4028
4029Purple Theme:
4030┌─────────────────┐
4031│ ⚠️ Time Conflicts│ ← Purple header
4032│ • Event A       │ ← Purple text
4033│ • Event B       │   Dark purple bg
4034└─────────────────┘
4035
4036Professional Theme:
4037┌─────────────────┐
4038│ ⚠️ Time Conflicts│ ← Blue header
4039│ • Event A       │ ← Dark text
4040│ • Event B       │   Light bg
4041└─────────────────┘
4042
4043Pink Theme:
4044┌─────────────────┐
4045│ ⚠️ Time Conflicts│ ← Pink header ✨
4046│ • Event A       │ ← Pink text
4047│ • Event B       │   Dark pink bg ��
4048└─────────────────┘
4049
4050Wiki Default:
4051┌─────────────────┐
4052│ ⚠️ Time Conflicts│ ← Adapts to wiki
4053│ • Event A       │ ← Wiki colors
4054│ • Event B       │
4055└─────────────────┘
4056```
4057
4058### Now 100% Complete
4059
4060**Every tooltip themed**:
4061- ✅ Conflict tooltips
4062- ✅ All other tooltips (if any)
4063- ✅ Perfect consistency
4064
4065**Absolute perfection!** ✨
4066
4067## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION
4068
4069### �� Major Milestone: Version 5.0
4070
4071This is a major release representing the completion of comprehensive theming across the entire calendar plugin. Every visual element has been carefully themed for consistency and beauty.
4072
4073### Complete Feature Set
4074
4075**5 Beautiful Themes**:
4076- �� Matrix Edition (Green with glow)
4077- �� Purple Dream (Elegant purple)
4078- �� Professional Blue (Clean and modern)
4079- �� Pink Bling (Maximum sparkle)
4080- �� Wiki Default (Auto-adapts to your DokuWiki theme)
4081
4082**100% Theme Coverage**:
4083- ✅ Calendar grid and cells
4084- ✅ Event boxes and borders
4085- ✅ Sidebar widget
4086- ✅ Event list panel
4087- ✅ Search functionality
4088- ✅ Edit/Add dialogs (complete)
4089- ✅ Day popup dialogs
4090- ✅ Month picker
4091- ✅ All text (primary, dim, bright)
4092- ✅ All buttons
4093- ✅ All inputs and forms
4094- ✅ All checkboxes
4095- ✅ All borders
4096- ✅ All badges and labels
4097- ✅ Event highlight effects
4098
4099**Perfect Visual Consistency**:
4100- No white pixels anywhere
4101- No unthemed elements
4102- No default colors
4103- Complete visual unity
4104
4105### Major Improvements in v5.0
4106
41071. **Complete Dialog Theming** (v4.8.5-4.8.7)
4108   - Edit event dialog fully themed
4109   - Day popup dialog fully themed
4110   - All form inputs themed
4111   - All checkboxes themed
4112   - All buttons themed
4113
41142. **Event Box Border Perfection** (v4.8.6)
4115   - All 4 borders themed (top, right, bottom, left)
4116   - Sidebar event dividers themed
4117   - Past Events toggle border themed
4118
41193. **Checkbox Field Borders** (v4.9.0)
4120   - Repeating Event section border themed
4121   - Task checkbox section border themed
4122
41234. **Wiki Default Theme** (v4.10.0)
4124   - New 5th theme
4125   - Uses DokuWiki CSS variables
4126   - Auto-adapts to any wiki template
4127   - Perfect for seamless integration
4128
41295. **Clean Text Appearance** (v4.11.0)
4130   - Removed text glow from Matrix
4131   - Removed text glow from Purple
4132   - Removed text glow from Professional
4133   - Removed text glow from Wiki Default
4134   - Kept text glow on Pink Bling only
4135
41366. **Event Highlight Effects** (v4.12.0-4.12.1)
4137   - Theme-aware highlight glow
4138   - Click event bar → event glows
4139   - 3-second themed glow effect
4140   - Smooth animations
4141
4142### See RELEASE_NOTES.md for Complete Details
4143
4144For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release.
4145
4146## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION
4147
4148### �� Fixed: Event Highlight Now Working
4149- **Fixed:** Used setProperty() to properly apply !important styles
4150- **Added:** Console logging for debugging
4151- **Fixed:** Proper style application with important flag
4152- **Result:** Highlight glow now works correctly!
4153
4154### Technical Fix
4155
4156**Before (not working)**:
4157```javascript
4158eventItem.style.background = color + ' !important'; // Doesn't work
4159```
4160
4161**After (working)**:
4162```javascript
4163eventItem.style.setProperty('background', color, 'important'); // Works!
4164```
4165
4166### Added Debug Logging
4167
4168Console now shows:
4169- "Highlighting event: [calId] [eventId] [date]"
4170- "Found event item: [element]"
4171- "Theme: [theme name]"
4172- "Highlight colors: [bg] [shadow]"
4173- "Applied highlight styles"
4174- "Removing highlight" (after 3 seconds)
4175
4176### Now Working
4177
4178Click any event bar → Event glows with theme colors ✓
4179
4180## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW
4181
4182### ✨ Enhanced: Event Click Highlight Now Theme-Aware
4183- **Fixed:** Restored event highlight glow when clicking calendar bars
4184- **Improved:** Highlight now matches each theme's colors
4185- **Added:** Stronger glow effect for better visibility
4186- **Duration:** 3 seconds with smooth fade
4187- **Result:** Beautiful themed highlights for all themes!
4188
4189### How It Works
4190
4191When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow:
4192
4193**Matrix Theme**:
4194```javascript
4195Background: Darker green (#1a3d1a)
4196Glow: Double green glow (0 0 20px + 0 0 40px)
4197Color: rgba(0, 204, 7, 0.8)
4198```
4199
4200**Purple Theme**:
4201```javascript
4202Background: Darker purple (#3d2b4d)
4203Glow: Double purple glow
4204Color: rgba(155, 89, 182, 0.8)
4205```
4206
4207**Professional Theme**:
4208```javascript
4209Background: Light blue (#e3f2fd)
4210Glow: Single blue glow
4211Color: rgba(74, 144, 226, 0.4)
4212```
4213
4214**Pink Theme**:
4215```javascript
4216Background: Darker pink (#3d2030)
4217Glow: Double pink glow ✨��
4218Color: rgba(255, 20, 147, 0.8)
4219```
4220
4221**Wiki Theme**:
4222```javascript
4223Background: var(--__background_neu__)
4224Glow: Blue glow (adapts to wiki)
4225Color: rgba(43, 115, 183, 0.4)
4226```
4227
4228### Visual Examples
4229
4230**Matrix - Click Event**:
4231```
4232Calendar:
4233┌─────────────┐
4234│ 2:00 PM │ ← Click this bar
4235└─────────────┘
4236
4237Event List:
4238╔═════════════════════╗
4239║ Team Meeting        ║ ← GLOWS GREEN
4240║ 2:00 PM             ║    for 3 seconds
4241╚═════════════════════╝
4242   ↑↑↑ Strong green glow ↑↑↑
4243```
4244
4245**Purple - Click Event**:
4246```
4247Calendar:
4248┌─────────────┐
4249│ 4:00 PM │ ← Click
4250└─────────────┘
4251
4252Event List:
4253╔═════════════════════╗
4254║ Code Review         ║ ← GLOWS PURPLE
4255║ 4:00 PM             ║    for 3 seconds
4256╚═════════════════════╝
4257   ↑↑↑ Strong purple glow ↑↑↑
4258```
4259
4260**Pink - Click Event**:
4261```
4262Calendar:
4263┌─────────────┐
4264│ 1:00 PM │ ← Click
4265└─────────────┘
4266
4267Event List:
4268╔═════════════════════╗
4269║ Lunch Date ��       ║ ← GLOWS PINK
4270║ 1:00 PM ✨          ║    for 3 seconds
4271╚═════════════════════╝
4272   ↑↑↑ MAXIMUM SPARKLE ↑↑↑
4273```
4274
4275### Glow Specifications
4276
4277**Matrix**:
4278- Background: Dark green
4279- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)`
4280- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)`
4281- Effect: Strong green pulse
4282
4283**Purple**:
4284- Background: Dark purple
4285- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)`
4286- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)`
4287- Effect: Strong purple pulse
4288
4289**Professional**:
4290- Background: Light blue
4291- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)`
4292- Effect: Subtle blue glow
4293
4294**Pink**:
4295- Background: Dark pink
4296- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)`
4297- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)`
4298- Effect: MAXIMUM SPARKLE ✨��
4299
4300**Wiki**:
4301- Background: Theme neutral color
4302- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)`
4303- Effect: Adapts to wiki theme
4304
4305### User Experience
4306
4307**Click event bar** → Event highlights with themed glow
4308**Auto-scroll** → Event scrolls into view smoothly
4309**3 second glow** → Fade out after 3 seconds
4310**Smooth transition** → 0.3s ease-in-out
4311
4312### Perfect for Finding Events
4313
4314**Large event lists**: Quickly locate the clicked event ✓
4315**Visual feedback**: Know which event you clicked ✓
4316**Theme consistency**: Matches your chosen theme ✓
4317**Smooth animation**: Professional appearance ✓
4318
4319### All Themes Covered
4320
4321- ✅ Matrix: Green glow
4322- ✅ Purple: Purple glow
4323- ✅ Professional: Blue glow
4324- ✅ Pink: Maximum pink sparkle
4325- ✅ Wiki: Adaptive glow
4326
4327**Click any event bar and watch it glow!** ✨
4328
4329## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES
4330
4331### �� Changed: Text Glow Now Pink-Only
4332- **Removed:** Text shadow/glow from Matrix theme
4333- **Removed:** Text shadow/glow from Purple theme
4334- **Removed:** Text shadow/glow from Professional theme (already had none)
4335- **Removed:** Text shadow/glow from Wiki Default theme
4336- **Kept:** Text shadow/glow ONLY on Pink Bling theme
4337- **Result:** Cleaner look for Matrix, Purple, and Wiki themes!
4338
4339### All Changes
4340
4341**Before (Matrix, Purple)**:
4342```css
4343text-shadow: 0 0 2px $text_color; /* Glow effect */
4344```
4345
4346**After (Matrix, Purple, Professional, Wiki)**:
4347```css
4348text-shadow: none; /* Clean, no glow */
4349```
4350
4351**Pink Bling (unchanged)**:
4352```css
4353text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */
4354```
4355
4356### Text Shadow Removed From
4357
4358**Sidebar day numbers**: No glow ✓
4359**Event titles**: No glow ✓
4360**Event dates**: No glow ✓
4361**Add Event button**: No glow ✓
4362**Day popup events**: No glow ✓
4363
4364### Before vs After
4365
4366**BEFORE (Matrix)**:
4367```
4368Event Title ✨ ← Glowing green text
43692:00 PM ✨     ← Glowing text
4370```
4371
4372**AFTER (Matrix)**:
4373```
4374Event Title    ← Clean green text
43752:00 PM        ← Clean text
4376```
4377
4378**Pink Bling (Still Glows)**:
4379```
4380Event Title ✨�� ← Still glowing!
43812:00 PM ✨     ← Maximum sparkle!
4382```
4383
4384### Theme Appearances
4385
4386**�� Matrix Edition**:
4387- Clean green text
4388- No glow effects
4389- Professional appearance
4390- Still has border glow
4391
4392**�� Purple Dream**:
4393- Clean purple text
4394- No glow effects
4395- Elegant appearance
4396- Still has border glow
4397
4398**�� Professional Blue**:
4399- Clean text (unchanged)
4400- No glow effects
4401- Modern appearance
4402
4403**�� Pink Bling**:
4404- Glowing pink text ✨
4405- Maximum glow effects ��
4406- Sparkle everywhere!
4407- All the bling!
4408
4409**�� Wiki Default**:
4410- Clean text
4411- No glow effects
4412- Matches wiki theme
4413
4414### Glow Effects Remaining
4415
4416**Border/box glow**: Still present on all themes ✓
4417**Pink text glow**: Only on Pink Bling ✓
4418**Shadow effects**: Still on buttons/boxes4419
4420**Only TEXT glow removed from non-pink themes!**
4421
4422### Result
4423
4424**Cleaner, more professional look** for:
4425- Matrix ✓
4426- Purple ✓
4427- Professional ✓
4428- Wiki Default ✓
4429
4430**Maximum sparkle** for:
4431- Pink Bling ✨��✓
4432
4433**Best of both worlds!** ��
4434
4435## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME
4436
4437### �� New: Wiki Default Theme
4438- **Added:** 5th theme that automatically matches your DokuWiki template
4439- **Uses:** CSS variables from your wiki theme
4440- **Adapts:** Automatically works with light and dark themes
4441- **Perfect:** Seamless integration with any DokuWiki template
4442
4443### How It Works
4444
4445**Wiki theme uses DokuWiki CSS variables**:
4446```css
4447bg: var(--__background_site__, #f5f5f5)
4448border: var(--__border__, #ccc)
4449text_primary: var(--__text__, #333)
4450text_bright: var(--__link__, #2b73b7)
4451text_dim: var(--__text_neu__, #666)
4452cell_bg: var(--__background__, #fff)
4453grid_border: var(--__border__, #ccc)
4454```
4455
4456**With fallbacks for older DokuWiki versions**:
4457- If CSS variables exist → Use them ✓
4458- If not available → Use fallback values ✓
4459
4460### All 5 Themes
4461
4462**1. �� Matrix Edition** (Default)
4463- Dark green with neon glow
4464- Matrix-style effects
4465- Original theme
4466
4467**2. �� Purple Dream**
4468- Rich purple with violet accents
4469- Elegant and sophisticated
4470- Soft glow effects
4471
4472**3. �� Professional Blue**
4473- Clean blue and grey
4474- Modern professional
4475- No glow effects
4476
4477**4. �� Pink Bling**
4478- Glamorous hot pink
4479- Maximum sparkle ✨
4480- Hearts and diamonds
4481
4482**5. �� Wiki Default** ← NEW!
4483- Matches your wiki template
4484- Auto-adapts to light/dark
4485- Perfect integration
4486
4487### Examples
4488
4489**Light Wiki Template**:
4490```
4491Wiki Default theme shows:
4492- Light backgrounds (#f5f5f5)
4493- Dark text (#333)
4494- Light inputs (#fff)
4495- Gray borders (#ccc)
4496
4497Matches perfectly! ✓
4498```
4499
4500**Dark Wiki Template**:
4501```
4502Wiki Default theme shows:
4503- Dark backgrounds (from template)
4504- Light text (from template)
4505- Dark inputs (from template)
4506- Dark borders (from template)
4507
4508Matches perfectly! ✓
4509```
4510
4511**Bootstrap Template**:
4512```
4513Uses Bootstrap's colors
4514Matches perfectly! ✓
4515```
4516
4517**Material Template**:
4518```
4519Uses Material's colors
4520Matches perfectly! ✓
4521```
4522
4523### CSS Variables Used
4524
4525**DokuWiki provides**:
4526- `--__background_site__`: Page background
4527- `--__background_alt__`: Section backgrounds
4528- `--__background__`: Content backgrounds
4529- `--__text__`: Primary text color
4530- `--__link__`: Link color
4531- `--__text_neu__`: Dimmed text
4532- `--__border__`: Border color
4533- `--__background_neu__`: Neutral background
4534
4535**All with fallbacks**:
4536```css
4537var(--__background_site__, #f5f5f5)
4538/* Falls back to light gray if variable doesn't exist */
4539```
4540
4541### Perfect for Every Template
4542
4543**Custom templates**: Automatically adapts ✓
4544**Light themes**: Perfect match ✓
4545**Dark themes**: Perfect match ✓
4546**Any DokuWiki version**: Works with fallbacks ✓
4547
4548### Complete Theme Collection
4549
4550Now with **5 gorgeous themes**:
4551- 3 dark themes (Matrix, Purple, Pink)
4552- 1 light theme (Professional)
4553- 1 adaptive theme (Wiki Default) ← NEW!
4554
4555**Something for everyone!** ��
4556
4557## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS
4558
4559### �� Fixed: Checkbox Field Borders Themed
4560- **Fixed:** Added border-color to checkbox field divs
4561- **Fixed:** Repeating Event section border
4562- **Fixed:** Task checkbox section border
4563- **Result:** No white borders around checkboxes!
4564
4565### Changes
4566
4567**Checkbox Field Border Styling**:
4568
4569**Before**:
4570```html
4571<div class="form-field-checkbox"
4572     style="background: $bg !important;">
4573<!-- Border shows white ✗ -->
4574```
4575
4576**After**:
4577```php
4578<div class="form-field-checkbox"
4579     style="background: $bg !important;
4580            border-color: $grid_border !important;">
4581<!-- Border themed ✓ -->
4582```
4583
4584### Before vs After
4585
4586**BEFORE (v4.8.8)**:
4587```
4588Edit Dialog:
4589┌──────────────────┐
4590│ ☑ Repeating     ║│ ← White border ✗
4591└──────────────────┘
4592┌──────────────────┐
4593│ ☑ Task checkbox ║│ ← White border ✗
4594└──────────────────┘
4595```
4596
4597**AFTER (v4.9.0)**:
4598```
4599Matrix Edit Dialog:
4600┌──────────────────┐
4601│ ☑ Repeating      │ ← Green border ✓
4602└──────────────────┘
4603┌──────────────────┐
4604│ ☑ Task checkbox  │ ← Green border ✓
4605└──────────────────┘
4606```
4607
4608### ABSOLUTE PERFECTION ACHIEVED
4609
4610**Every element themed**:
4611- ✅ All inputs
4612- ✅ All labels
4613- ✅ All sections
4614- ✅ **Checkbox field borders** ← v4.9.0!
4615- ✅ All buttons
4616- ✅ All checkboxes
4617- ✅ No white anywhere
4618
4619**100% COMPLETE!** ��✨
4620
4621## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
4622
4623### �� Fixed: Checkbox Field Borders Themed
4624- **Fixed:** Added border-color to checkbox field divs
4625- **Fixed:** Repeating Event section border
4626- **Fixed:** Task checkbox section border
4627- **Result:** No white borders around checkboxes!
4628
4629### �� Fixed: Admin Sections Respect Wiki Theme
4630- **Fixed:** All admin backgrounds use CSS variables
4631- **Fixed:** Text colors use wiki text color
4632- **Fixed:** Borders use wiki border color
4633- **Result:** Admin matches wiki theme perfectly!
4634
4635### All Changes
4636
4637**1. Checkbox Field Border Styling**:
4638
4639**Before**:
4640```html
4641<div class="form-field-checkbox"
4642     style="background: $bg !important;">
4643<!-- Border shows white ✗ -->
4644```
4645
4646**After**:
4647```php
4648<div class="form-field-checkbox"
4649     style="background: $bg !important;
4650            border-color: $grid_border !important;">
4651<!-- Border themed ✓ -->
4652```
4653
4654**2. Admin CSS Variables**:
4655
4656**Added CSS variables for wiki theme compatibility**:
4657```css
4658.calendar-admin-wrapper {
4659    background: var(--__background_site__, #f5f5f5);
4660    color: var(--__text__, #333);
4661}
4662.calendar-admin-section {
4663    background: var(--__background_alt__, #fafafa);
4664}
4665.calendar-admin-input {
4666    background: var(--__background__, #fff);
4667    color: var(--__text__, #333);
4668}
4669```
4670
4671**Replaced hardcoded colors**:
4672```php
4673// Before:
4674background: #f9f9f9
4675background: white
4676color: #333
4677border: 1px solid #ddd
4678
4679// After:
4680background: var(--__background_alt__, #f9f9f9)
4681background: var(--__background__, #fff)
4682color: var(--__text__, #333)
4683border: 1px solid var(--__border__, #ddd)
4684```
4685
4686### Before vs After
4687
4688**BEFORE (v4.8.8)**:
4689```
4690Edit Dialog:
4691┌──────────────────┐
4692│ ☑ Repeating     ║│ ← White border ✗
4693└──────────────────┘
4694┌──────────────────┐
4695│ ☑ Task checkbox ║│ ← White border ✗
4696└──────────────────┘
4697
4698Admin Page (Dark Wiki Theme):
4699┌──────────────────┐
4700│ Light sections  │ ← White boxes ✗
4701│ Light inputs    │ ← Doesn't match ✗
4702└──────────────────┘
4703```
4704
4705**AFTER (v4.8.9)**:
4706```
4707Matrix Edit Dialog:
4708┌──────────────────┐
4709│ ☑ Repeating      │ ← Green border ✓
4710└──────────────────┘
4711┌──────────────────┐
4712│ ☑ Task checkbox  │ ← Green border ✓
4713└──────────────────┘
4714
4715Admin (Dark Wiki Theme):
4716┌──────────────────┐
4717│ Dark sections   │ ← Matches wiki ✓
4718│ Dark inputs     │ ← Perfect match ✓
4719└──────────────────┘
4720```
4721
4722### Admin Theme Examples
4723
4724**Light Wiki Theme**:
4725```
4726Admin page backgrounds: Light
4727Section boxes: Light gray
4728Inputs: White
4729Borders: Gray
4730Text: Dark
4731
4732Perfect match! ✓
4733```
4734
4735**Dark Wiki Theme**:
4736```
4737Admin page backgrounds: Dark
4738Section boxes: Darker gray
4739Inputs: Dark
4740Borders: Dark gray
4741Text: Light
4742
4743Perfect match! ✓
4744```
4745
4746**DokuWiki Default**:
4747```
4748Uses wiki's CSS variables
4749Automatically adapts
4750Always matches! ✓
4751```
4752
4753### Complete Coverage
4754
4755**Edit Dialog**:
4756- ✅ All inputs themed
4757- ✅ All labels themed
4758- ✅ All sections themed
4759- ✅ **Checkbox borders** ← v4.8.9!
4760- ✅ All buttons themed
4761- ✅ No white anywhere
4762
4763**Admin Interface**:
4764- ✅ **Tab navigation** ← v4.8.9!
4765- ✅ **Section boxes** ← v4.8.9!
4766- ✅ **Input fields** ← v4.8.9!
4767- ✅ **Text colors** ← v4.8.9!
4768- ✅ **Borders** ← v4.8.9!
4769- ✅ All tabs (Manage, Update, Outlook, Themes)
4770
4771### CSS Variables Used
4772
4773**DokuWiki provides these**:
4774- `--__background_site__`: Page background
4775- `--__background_alt__`: Alternate background
4776- `--__background__`: Primary background (inputs)
4777- `--__text__`: Text color
4778- `--__border__`: Border color
4779
4780**Fallbacks provided for older DokuWiki**:
4781```css
4782var(--__background_site__, #f5f5f5)
4783var(--__background_alt__, #fafafa)
4784var(--__background__, #fff)
4785var(--__text__, #333)
4786var(--__border__, #ddd)
4787```
4788
4789### Perfect Adaptation
4790
4791**Admin now adapts to ANY wiki theme**:
4792- Light themes → Light admin ✓
4793- Dark themes → Dark admin ✓
4794- Custom themes → Matches perfectly ✓
4795- No hardcoded colors ✓
4796
4797**Calendar themes still work**:
4798- Matrix, Purple, Professional, Pink ✓
4799- Independent from wiki theme ✓
4800- Admin respects wiki ✓
4801- Calendar respects calendar theme ✓
4802
4803### FINAL PERFECTION
4804
4805**Frontend (Calendar)**:
4806- Complete theming ✓
4807- 4 beautiful themes ✓
4808- Every pixel themed ✓
4809
4810**Backend (Admin)**:
4811- Respects wiki theme ✓
4812- Works with any theme ✓
4813- Perfect compatibility ✓
4814
4815**ABSOLUTELY EVERYTHING THEMED!** ����✨
4816
4817## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
4818
4819### �� Fixed: Task Checkboxes Now Fully Themed
4820- **Fixed:** Added background-color and border inline
4821- **Fixed:** Both PHP and JavaScript versions
4822- **Result:** No white checkboxes!
4823
4824### �� Fixed: Past Events Toggle Border
4825- **Fixed:** Added !important to border styling
4826- **Fixed:** Explicit top and bottom borders
4827- **Result:** No white line under toggle!
4828
4829### �� Fixed: Form Field Section Backgrounds
4830- **Fixed:** All form-field and form-row-group backgrounds
4831- **Fixed:** Every section in edit dialog
4832- **Result:** No white sections anywhere!
4833
4834### All Changes
4835
4836**1. Task Checkbox Styling**:
4837
4838**Before**:
4839```php
4840style="accent-color: $border !important;"
4841<!-- Only accent, background still white ✗ -->
4842```
4843
4844**After**:
4845```php
4846style="accent-color: $border !important;
4847       background-color: $cell_bg !important;
4848       border: 2px solid $grid_border !important;"
4849<!-- Full theming ✓ -->
4850```
4851
4852**2. Past Events Toggle Border**:
4853
4854**Before**:
4855```php
4856style="border-color: $grid_border;"
4857<!-- No !important, CSS overrides ✗ -->
4858```
4859
4860**After**:
4861```php
4862style="border-color: $grid_border !important;
4863       border-top: 1px solid $grid_border !important;
4864       border-bottom: 1px solid $grid_border !important;"
4865<!-- Cannot be overridden ✓ -->
4866```
4867
4868**3. Form Field Backgrounds**:
4869
4870**Before**:
4871```html
4872<div class="form-field">
4873<div class="form-row-group">
4874<!-- No background, shows white ✗ -->
4875```
4876
4877**After**:
4878```php
4879<div class="form-field" style="background: $bg !important;">
4880<div class="form-row-group" style="background: $bg !important;">
4881<!-- Fully themed ✓ -->
4882```
4883
4884### Before vs After
4885
4886**BEFORE (v4.8.7)**:
4887```
4888Event:
4889□ Task checkbox  ← White checkbox ✗
4890
4891Past Events
4892▶ Past Events (3) ← White line below ✗
4893─────────────────
4894
4895Edit Dialog:
4896┌──────────────┐
4897│ Form fields  │ ← White sections ✗
4898└──────────────┘
4899```
4900
4901**AFTER (v4.8.8)**:
4902```
4903Matrix Event:
4904☑ Task checkbox  ← Green checkbox ✓
4905
4906Past Events
4907▶ Past Events (3) ← Green border ✓
4908─────────────────
4909
4910Matrix Edit Dialog:
4911┌──────────────┐
4912│ Form fields  │ ← Dark green ✓
4913└──────────────┘
4914```
4915
4916### Complete Examples
4917
4918**Matrix Theme**:
4919```
4920Task Checkbox:
4921☑ Checked   → Green checkmark, green bg
4922☐ Unchecked → Green border, dark green bg ✓
4923
4924Past Events Toggle:
4925▶ Past Events (3)
4926─────────────────── Green border ✓
4927
4928Edit Dialog:
4929All sections dark green ✓
4930No white anywhere ✓
4931```
4932
4933**Purple Theme**:
4934```
4935Task Checkbox:
4936☑ Checked   → Purple checkmark, purple bg
4937☐ Unchecked → Purple border, dark purple bg ✓
4938
4939Past Events Toggle:
4940▶ Past Events (3)
4941─────────────────── Purple border ✓
4942
4943Edit Dialog:
4944All sections dark purple ✓
4945```
4946
4947**Professional Theme**:
4948```
4949Task Checkbox:
4950☑ Checked   → Blue checkmark, white bg
4951☐ Unchecked → Gray border, white bg ✓
4952
4953Past Events Toggle:
4954▶ Past Events (3)
4955─────────────────── Gray border ✓
4956
4957Edit Dialog:
4958All sections light ✓
4959```
4960
4961**Pink Theme**:
4962```
4963Task Checkbox:
4964☑ Checked   → Pink checkmark, pink bg ✨
4965☐ Unchecked → Pink border, dark pink bg ✓
4966
4967Past Events Toggle:
4968▶ Past Events (3)
4969─────────────────── Pink border ��
4970
4971Edit Dialog:
4972All sections dark pink ✓
4973```
4974
4975### Checkbox Visual
4976
4977**Matrix - Unchecked**:
4978```
4979┌─────┐
4980│     │ ← Dark green background
4981│     │   Green border
4982└─────┘
4983```
4984
4985**Matrix - Checked**:
4986```
4987┌─────┐
4988│ ✓   │ ← Dark green background
4989│     │   Green checkmark
4990└─────┘
4991```
4992
4993### Past Events Border
4994
4995**Before**:
4996```
4997▶ Past Events (3)
4998─────────────────── White line ✗
4999```
5000
5001**After**:
5002```
5003▶ Past Events (3)
5004─────────────────── Green line ✓ (Matrix)
5005                    Purple line ✓ (Purple)
5006                    Gray line ✓ (Professional)
5007                    Pink line ✓ (Pink)
5008```
5009
5010### Form Field Coverage
5011
5012**All sections themed**:
5013- ✅ Title field
5014- ✅ Namespace field
5015- ✅ Description field
5016- ✅ **Date row** ← v4.8.8!
5017- ✅ **Checkbox sections** ← v4.8.8!
5018- ✅ **Recurring options** ← v4.8.8!
5019- ✅ **Time row** ← v4.8.8!
5020- ✅ **Color row** ← v4.8.8!
5021- ✅ Button footer
5022
5023**Every div has background!** ✓
5024
5025### ABSOLUTE PERFECTION
5026
5027**Not a single white pixel**:
5028- ✅ No white checkboxes
5029- ✅ No white borders
5030- ✅ No white backgrounds
5031- ✅ No white sections
5032- ✅ No white lines
5033- ✅ No white anything
5034
5035**100% PERFECT THEMING!** ����✨
5036
5037## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING
5038
5039### �� Fixed: Checkbox Section Backgrounds Themed
5040- **Fixed:** Repeating Event section background
5041- **Fixed:** Task checkbox section background
5042- **Result:** No white backgrounds in dialog!
5043
5044### �� Fixed: Unchecked Task Checkboxes Themed
5045- **Fixed:** Added CSS for checkbox backgrounds
5046- **Fixed:** Unchecked boxes show theme colors
5047- **Result:** No white checkboxes!
5048
5049### �� Fixed: Day Popup Dialog Fully Themed
5050- **Fixed:** Popup container, header, body themed
5051- **Fixed:** Event items in popup themed
5052- **Fixed:** Add Event button themed
5053- **Fixed:** Footer section themed
5054- **Result:** Perfect popup theming!
5055
5056### All Changes
5057
5058**1. Checkbox Section Backgrounds**:
5059
5060**Before**:
5061```html
5062<div class="form-field-checkbox">
5063<!-- White background ✗ -->
5064```
5065
5066**After**:
5067```php
5068<div class="form-field-checkbox"
5069     style="background: $bg !important;">
5070<!-- Themed ✓ -->
5071```
5072
5073**2. Checkbox Background CSS**:
5074
5075**Added to style block**:
5076```css
5077.task-checkbox {
5078    background-color: $cell_bg !important;
5079    border: 2px solid $grid_border !important;
5080}
5081```
5082
5083**3. Day Popup Theming**:
5084
5085**Container**:
5086```javascript
5087style="background: $bg !important;
5088       border: 2px solid $border !important;
5089       box-shadow: 0 0 20px $shadow !important;"
5090```
5091
5092**Header**:
5093```javascript
5094style="background: $header_bg !important;
5095       color: $text_primary !important;
5096       border-bottom: 1px solid $border !important;"
5097```
5098
5099**Footer**:
5100```javascript
5101style="background: $bg !important;
5102       border-top: 1px solid $grid_border !important;"
5103```
5104
5105**Add Event Button**:
5106```javascript
5107style="background: $border !important;
5108       color: $bg !important;
5109       border-color: $border !important;"
5110```
5111
5112**Event Items**:
5113```javascript
5114style="background: $cell_bg !important;
5115       border: 1px solid $grid_border !important;"
5116```
5117
5118### Before vs After
5119
5120**BEFORE (v4.8.6)**:
5121```
5122Edit Dialog:
5123┌──────────────────┐
5124│ ☑ Repeating Event│ ← White background ✗
5125├──────────────────┤
5126│ ☑ Task checkbox  │ ← White background ✗
5127└──────────────────┘
5128
5129Day Popup:
5130┌──────────────────┐
5131│ Monday, Feb 8    │ ← White ✗
5132├──────────────────┤
5133│ Team Meeting     │ ← White ✗
5134│ 2:00 PM          │
5135├──────────────────┤
5136│ [+ Add Event]    │ ← White ✗
5137└──────────────────┘
5138
5139Task checkbox: ☐ ← White ✗
5140```
5141
5142**AFTER (v4.8.7)**:
5143```
5144Edit Dialog (Matrix):
5145┌──────────────────┐
5146│ ☑ Repeating Event│ ← Dark green ✓
5147├──────────────────┤
5148│ ☑ Task checkbox  │ ← Dark green ✓
5149└──────────────────┘
5150
5151Day Popup (Matrix):
5152┌──────────────────┐
5153│ Monday, Feb 8    │ ← Dark green ✓
5154├──────────────────┤
5155│ Team Meeting     │ ← Dark green ✓
5156│ 2:00 PM          │
5157├──────────────────┤
5158│ [+ Add Event]    │ ← Green button ✓
5159└──────────────────┘
5160
5161Task checkbox: ☑ ← Green ✓
5162```
5163
5164### Complete Examples
5165
5166**Matrix Dialog**:
5167```
5168┌──────────────────────────┐
5169│ ✏️ Edit Event            │
5170├──────────────────────────┤
5171│ �� Title: [_________]    │
5172│ �� Date: [__________]    │
5173│                          │
5174│ ☑ �� Repeating Event     │ ← Dark green bg
5175├──────────────────────────┤
5176│ ☑ �� Task checkbox       │ ← Dark green bg
5177├──────────────────────────┤
5178│ [Cancel] [�� Save]       │
5179└──────────────────────────┘
5180
5181All sections themed! ✓
5182```
5183
5184**Matrix Day Popup**:
5185```
5186┌──────────────────────────┐
5187│ Monday, February 8, 2026 │ ← Green header
5188├──────────────────────────┤
5189│ ┌──────────────────────┐ │
5190│ │ Team Meeting         │ │ ← Dark green
5191│ │ �� 2:00 PM           │ │
5192│ └──────────────────────┘ │
5193│ ┌──────────────────────┐ │
5194│ │ Code Review          │ │ ← Dark green
5195│ │ �� 4:00 PM           │ │
5196│ └──────────────────────┘ │
5197├──────────────────────────┤
5198│   [+ Add Event]          │ ← Green button
5199└──────────────────────────┘
5200```
5201
5202**Purple Day Popup**:
5203```
5204┌──────────────────────────┐
5205│ Monday, February 8, 2026 │ ← Purple header
5206├──────────────────────────┤
5207│ ┌──────────────────────┐ │
5208│ │ Team Meeting         │ │ ← Dark purple
5209│ │ �� 2:00 PM           │ │
5210│ └──────────────────────┘ │
5211├──────────────────────────┤
5212│   [+ Add Event]          │ ← Purple button
5213└──────────────────────────┘
5214```
5215
5216**Professional Day Popup**:
5217```
5218┌──────────────────────────┐
5219│ Monday, February 8, 2026 │ ← Light header
5220├──────────────────────────┤
5221│ ┌──────────────────────┐ │
5222│ │ Team Meeting         │ │ ← White
5223│ │ �� 2:00 PM           │ │
5224│ └──────────────────────┘ │
5225├──────────────────────────┤
5226│   [+ Add Event]          │ ← Blue button
5227└──────────────────────────┘
5228```
5229
5230**Pink Day Popup**:
5231```
5232┌──────────────────────────┐
5233│ Monday, February 8, 2026 │ ← Pink header ✨
5234├──────────────────────────┤
5235│ ┌──────────────────────┐ │
5236│ │ Team Meeting ��      │ │ ← Dark pink
5237│ │ �� 2:00 PM           │ │
5238│ └──────────────────────┘ │
5239├──────────────────────────┤
5240│   [+ Add Event]          │ ← Pink button
5241└──────────────────────────┘
5242```
5243
5244### Checkbox Theming
5245
5246**Unchecked boxes now themed**:
5247```
5248Matrix:
5249☐ → Dark green bg, green border ✓
5250
5251Purple:
5252☐ → Dark purple bg, purple border ✓
5253
5254Professional:
5255☐ → White bg, gray border ✓
5256
5257Pink:
5258☐ → Dark pink bg, pink border ✓
5259```
5260
5261### Complete Coverage
5262
5263**Edit Dialog - All Sections**:
5264- ✅ Header
5265- ✅ All inputs
5266- ✅ All labels
5267- ✅ **Checkbox sections** ← v4.8.7!
5268- ✅ Recurring options
5269- ✅ Button footer
5270- ✅ All checkboxes (checked & unchecked)
5271
5272**Day Popup - All Elements**:
5273- ✅ **Popup container** ← v4.8.7!
5274- ✅ **Header** ← v4.8.7!
5275- ✅ **Body** ← v4.8.7!
5276- ✅ **Event items** ← v4.8.7!
5277- ✅ **Namespace badges** ← v4.8.7!
5278- ✅ **Footer** ← v4.8.7!
5279- ✅ **Add Event button** ← v4.8.7!
5280- ✅ **No events message** ← v4.8.7!
5281
5282**Absolutely every dialog element themed!** ��✨
5283
5284### Perfect Theming Achievement
5285
5286**Every UI component in entire plugin**:
5287- ✅ Calendar grid
5288- ✅ Sidebar widget
5289- ✅ Event list
5290- ✅ Search bar
5291- ✅ Event boxes
5292- ✅ Edit dialog (complete)
5293- ✅ **Day popup** ← v4.8.7!
5294- ✅ Month picker
5295- ✅ All text
5296- ✅ All buttons
5297- ✅ All inputs
5298- ✅ **All checkboxes** ← v4.8.7!
5299- ✅ All borders
5300- ✅ All badges
5301- ✅ All backgrounds
5302
5303**NO WHITE ANYWHERE!** ��
5304
5305**100% COMPLETE THEMING ACHIEVED!** ��✨��
5306
5307## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS
5308
5309### �� Fixed: Dialog Checkbox Sections Themed
5310- **Fixed:** Recurring options section background themed
5311- **Fixed:** Section has themed border accent
5312- **Result:** No white sections in dialog!
5313
5314### �� Fixed: Dialog Button Section Themed
5315- **Fixed:** Button area background themed
5316- **Fixed:** Top border separator themed
5317- **Result:** Complete dialog theming!
5318
5319### �� Fixed: Event Box Borders Themed
5320- **Fixed:** Top, right, bottom borders now themed
5321- **Fixed:** Left border remains event color
5322- **Result:** Perfect event boxes!
5323
5324### All Changes
5325
5326**1. Recurring Options Section**:
5327
5328**Before**:
5329```html
5330<div class="recurring-options" style="display:none;">
5331<!-- White background ✗ -->
5332```
5333
5334**After**:
5335```php
5336<div class="recurring-options"
5337     style="display:none;
5338            background: $bg !important;
5339            padding: 8px;
5340            border-left: 2px solid $border;
5341            margin-left: 4px;">
5342<!-- Themed with accent border ✓ -->
5343```
5344
5345**2. Dialog Actions Section**:
5346
5347**Before**:
5348```html
5349<div class="dialog-actions-sleek">
5350<!-- White background ✗ -->
5351```
5352
5353**After**:
5354```php
5355<div class="dialog-actions-sleek"
5356     style="background: $bg !important;
5357            border-top: 1px solid $grid_border !important;">
5358<!-- Themed with separator ✓ -->
5359```
5360
5361**3. Event Box Borders**:
5362
5363**Before**:
5364```php
5365border-left-color: $event_color;
5366<!-- Only left border colored ✗ -->
5367```
5368
5369**After**:
5370```php
5371border-left-color: $event_color;
5372border-top: 1px solid $grid_border !important;
5373border-right: 1px solid $grid_border !important;
5374border-bottom: 1px solid $grid_border !important;
5375<!-- All borders themed! ✓ -->
5376```
5377
5378### Before vs After
5379
5380**BEFORE (v4.8.5)**:
5381```
5382Dialog:
5383┌────────────────┐
5384│ ☑ Repeating    │
5385├────────────────┤ ← White section ✗
5386│ Repeat: Daily  │
5387│ Until: [____]  │
5388├────────────────┤
5389│ [Cancel] [Save]│ ← White footer ✗
5390└────────────────┘
5391
5392Event Box:
5393┌────────────┐
5394│Team Meeting│ ← White borders ✗
5395│2:00 PM     │
5396└────────────┘
5397```
5398
5399**AFTER (v4.8.6)**:
5400```
5401Matrix Dialog:
5402┌────────────────┐
5403│ ☑ Repeating    │
5404├────────────────┤ ← Dark green ✓
5405│ Repeat: Daily  │ Green accent border
5406│ Until: [____]  │
5407├────────────────┤
5408│ [Cancel] [Save]│ ← Dark green ✓
5409└────────────────┘
5410
5411Matrix Event Box:
5412┌────────────┐
5413│Team Meeting│ ← Green borders ✓
5414│2:00 PM     │
5415└────────────┘
5416```
5417
5418### Dialog Section Examples
5419
5420**Matrix Theme**:
5421```
5422┌──────────────────────────┐
5423│ ✏️ Edit Event            │
5424├──────────────────────────┤
5425│ ☑ �� Repeating Event     │
5426├║─────────────────────────┤ Green accent
5427│║ Repeat Every: Daily     │ Dark green bg
5428│║ Repeat Until: [_____]   │
5429└──────────────────────────┘
5430  [Cancel] [�� Save]       ← Dark green bg
5431──────────────────────────── Green border
5432```
5433
5434**Purple Theme**:
5435```
5436┌──────────────────────────┐
5437│ ☑ �� Repeating Event     │
5438├║─────────────────────────┤ Purple accent
5439│║ Repeat options...       │ Dark purple bg
5440└──────────────────────────┘
5441  [Cancel] [�� Save]       ← Dark purple bg
5442──────────────────────────── Purple border
5443```
5444
5445**Professional Theme**:
5446```
5447┌──────────────────────────┐
5448│ ☑ �� Repeating Event     │
5449├║─────────────────────────┤ Blue accent
5450│║ Repeat options...       │ Light bg
5451└──────────────────────────┘
5452  [Cancel] [�� Save]       ← Light bg
5453──────────────────────────── Gray border
5454```
5455
5456**Pink Theme**:
5457```
5458┌──────────────────────────┐
5459│ ☑ �� Repeating Event ✨  │
5460├║─────────────────────────┤ Pink accent
5461│║ Repeat options...       │ Dark pink bg ��
5462└──────────────────────────┘
5463  [Cancel] [�� Save]       ← Dark pink bg
5464──────────────────────────── Pink border
5465```
5466
5467### Event Box Border Visual
5468
5469**Before (v4.8.5)**:
5470```
5471Left border only:
5472█ Team Meeting
5473█ 2:00 PM
5474█ [Edit] [Delete]
5475
5476Only event color on left ✗
5477White on other 3 sides ✗
5478```
5479
5480**After (v4.8.6)**:
5481```
5482All borders themed:
5483┌─────────────┐
5484█Team Meeting │ ← Top: themed
5485█2:00 PM      │ ← Right: themed
5486█[Edit][Del]  │ ← Bottom: themed
5487└─────────────┘
5488
5489Left: Event color ✓
5490Other 3: Theme grid_border ✓
5491```
5492
5493### Matrix Event Box:
5494```
5495┌─────────────┐ Green border
5496│Team Meeting │
5497│2:00 PM      │
5498└─────────────┘ Green border
54995500Green left bar
5501```
5502
5503### Purple Event Box:
5504```
5505┌─────────────┐ Purple border
5506│Team Meeting │
5507│2:00 PM      │
5508└─────────────┘ Purple border
55095510Purple left bar
5511```
5512
5513### Professional Event Box:
5514```
5515┌─────────────┐ Gray border
5516│Team Meeting │
5517│2:00 PM      │
5518└─────────────┘ Gray border
55195520Event color left bar
5521```
5522
5523### Complete Dialog Coverage
5524
5525**All sections themed**:
5526- ✅ Dialog header
5527- ✅ Form inputs
5528- ✅ Checkbox labels
5529- ✅ **Recurring options** ← v4.8.6!
5530- ✅ **Button section** ← v4.8.6!
5531- ✅ All labels
5532- ✅ All buttons
5533
5534**No white sections!** ✓
5535
5536### Complete Event Box Coverage
5537
5538**All borders themed**:
5539- ✅ Left border (event color)
5540- ✅ **Top border** ← v4.8.6!
5541- ✅ **Right border** ← v4.8.6!
5542- ✅ **Bottom border** ← v4.8.6!
5543- ✅ Background
5544- ✅ Text
5545
5546**Perfect box outline!** ✓
5547
5548### Visual Perfection
5549
5550**Matrix theme event list**:
5551```
5552┌─────────────┐
5553│Team Meeting │ ← Green box
5554│2:00 PM      │
5555└─────────────┘
5556┌─────────────┐
5557│Code Review  │ ← Green box
5558│4:00 PM      │
5559└─────────────┘
5560
5561All borders green! ✓
5562```
5563
5564**ABSOLUTE PERFECT THEMING!** ��✨
5565
5566## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS
5567
5568### �� Fixed: Event Dialog Fully Themed
5569- **Fixed:** Dialog background, header, inputs all themed
5570- **Fixed:** All labels, checkboxes, selects themed
5571- **Fixed:** Save and Cancel buttons themed
5572- **Result:** Dialog matches theme perfectly!
5573
5574### �� Fixed: Sidebar Event Borders Properly Themed
5575- **Fixed:** Event divider borders use grid_border color
5576- **Fixed:** Clean, subtle themed dividers
5577- **Result:** No more white borders in sidebar!
5578
5579### All Changes
5580
5581**1. Event Dialog Theming**:
5582
5583**Dialog container**:
5584```php
5585background: $themeStyles['bg'] !important;
5586border: 2px solid $themeStyles['border'] !important;
5587box-shadow: 0 0 20px $shadow !important;
5588```
5589
5590**Dialog header**:
5591```php
5592background: $themeStyles['header_bg'] !important;
5593color: $themeStyles['text_primary'] !important;
5594border-bottom: 1px solid $border !important;
5595```
5596
5597**All form inputs** (text, date, select, textarea):
5598```php
5599background: $themeStyles['cell_bg'] !important;
5600color: $themeStyles['text_primary'] !important;
5601border-color: $themeStyles['grid_border'] !important;
5602```
5603
5604**All labels**:
5605```php
5606color: $themeStyles['text_primary'] !important;
5607```
5608
5609**Checkboxes**:
5610```php
5611accent-color: $themeStyles['border'] !important;
5612```
5613
5614**Buttons**:
5615```php
5616// Cancel button:
5617background: $cell_bg !important;
5618color: $text_primary !important;
5619
5620// Save button:
5621background: $border !important;
5622color: $bg !important; (or white for professional)
5623```
5624
5625**2. Sidebar Event Borders**:
5626
5627**Before**:
5628```php
5629border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded
5630```
5631
5632**After**:
5633```php
5634borderColor = $themeStyles['grid_border'];
5635border-bottom: 1px solid $borderColor !important;
5636```
5637
5638### Before vs After
5639
5640**BEFORE (v4.8.4)**:
5641```
5642Event Dialog:
5643┌────────────────┐
5644│ Add Event      │ ← White background ✗
5645│ Title: [_____] │ ← White inputs ✗
5646│ Date:  [_____] │
5647│ [Cancel] [Save]│ ← Default buttons ✗
5648└────────────────┘
5649
5650Sidebar Events:
5651Event 1 ────────  ← White border ✗
5652Event 2 ────────  ← White border ✗
5653```
5654
5655**AFTER (v4.8.5)**:
5656```
5657Event Dialog (Matrix):
5658┌────────────────┐
5659│ Add Event      │ ← Dark green background ✓
5660│ Title: [_____] │ ← Dark green inputs ✓
5661│ Date:  [_____] │ ← Green text ✓
5662│ [Cancel] [Save]│ ← Themed buttons ✓
5663└────────────────┘
5664
5665Sidebar Events (Matrix):
5666Event 1 ────────  ← Green border ✓
5667Event 2 ────────  ← Green border ✓
5668```
5669
5670### Dialog Examples by Theme
5671
5672**Matrix Dialog**:
5673```
5674┌──────────────────────────┐
5675│ ✏️ Edit Event            │ ← Dark green header
5676├──────────────────────────┤
5677│ �� Title                 │ ← Green labels
5678│ [Team Meeting________]   │ ← Dark green input
5679│                          │
5680│ �� Start Date            │
5681│ [2026-02-08__]           │ ← Dark green input
5682│                          │
5683│ �� Start Time            │
5684│ [2:00 PM ▼]              │ ← Green select
5685│                          │
5686│ ☑ �� Repeating Event     │ ← Green checkbox
5687│                          │
5688│ [Cancel] [�� Save]       │ ← Themed buttons
5689└──────────────────────────┘
5690
5691Everything green! ✓
5692```
5693
5694**Purple Dialog**:
5695```
5696┌──────────────────────────┐
5697│ ✏️ Edit Event            │ ← Dark purple header
5698├──────────────────────────┤
5699│ [Inputs_______________]  │ ← Dark purple inputs
5700│ ☑ Checkboxes             │ ← Purple accent
5701│ [Cancel] [�� Save]       │ ← Purple buttons
5702└──────────────────────────┘
5703```
5704
5705**Professional Dialog**:
5706```
5707┌──────────────────────────┐
5708│ ✏️ Edit Event            │ ← Light gradient header
5709├──────────────────────────┤
5710│ [Inputs_______________]  │ ← White inputs
5711│ ☑ Checkboxes             │ ← Blue accent
5712│ [Cancel] [�� Save]       │ ← Blue save button
5713└──────────────────────────┘
5714```
5715
5716**Pink Dialog**:
5717```
5718┌──────────────────────────┐
5719│ ✏️ Edit Event            │ ← Dark pink header ✨
5720├──────────────────────────┤
5721│ [Inputs_______________]  │ ← Dark pink inputs ��
5722│ ☑ Checkboxes             │ ← Pink accent
5723│ [Cancel] [�� Save]       │ ← Pink buttons
5724└──────────────────────────┘
5725```
5726
5727### Complete Dialog Element Coverage
5728
5729**All form elements themed**:
5730- ✅ Dialog container
5731- ✅ Dialog header
5732- ✅ Close button (×)
5733- ✅ Title input
5734- ✅ Namespace search
5735- ✅ Namespace dropdown
5736- ✅ Description textarea
5737- ✅ Start date input
5738- ✅ End date input
5739- ✅ Recurring checkbox
5740- ✅ Recurrence type select
5741- ✅ Recurrence end date
5742- ✅ Start time select
5743- ✅ End time select
5744- ✅ Color select
5745- ✅ Custom color picker
5746- ✅ Task checkbox
5747- ✅ All labels
5748- ✅ Cancel button
5749- ✅ Save button
5750
5751**Every single dialog element themed!** ��
5752
5753### Sidebar Border Example
5754
5755**Matrix Sidebar**:
5756```
5757┌────────────────┐
5758│ Today          │ ← Green section header
5759├────────────────┤
5760│ Team Meeting   │
5761│ 2:00 PM        │
5762├────────────────┤ ← Green border (grid_border)
5763│ Code Review    │
5764│ 4:00 PM        │
5765├────────────────┤ ← Green border
5766│ Stand-up       │
5767│ All day        │
5768└────────────────┘
5769
5770Subtle green dividers! ✓
5771```
5772
5773### Complete Achievement
5774
5775**Every UI element themed**:
5776- ✅ Calendar
5777- ✅ Sidebar widget
5778- ✅ Event list
5779- ✅ Search bar
5780- ✅ **Event dialog** ← v4.8.5!
5781- ✅ Month picker
5782- ✅ **Sidebar dividers** ← v4.8.5!
5783- ✅ All text
5784- ✅ All inputs
5785- ✅ All buttons
5786- ✅ All borders
5787- ✅ All checkboxes
5788
5789**ABSOLUTE COMPLETE THEMING!** ��✨
5790
5791## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS
5792
5793### �� Fixed: Professional Theme Background Consistency
5794- **Fixed:** Container and event backgrounds now match sidebar
5795- **Fixed:** Lighter, cleaner appearance
5796- **Fixed:** Better contrast and readability
5797- **Result:** Professional theme looks cohesive!
5798
5799### The Problem
5800
5801**v4.8.3 Professional theme**:
5802```
5803Sidebar: Light background (#f5f7fa)
5804Calendar: Medium background (#e8ecf1) ← Didn't match!
5805Events: Light background (#f5f7fa)
5806
5807Inconsistent! ✗
5808```
5809
5810### The Fix
5811
5812**Updated Professional theme colors for consistency**:
5813
5814```php
5815// Before:
5816'bg' => '#e8ecf1',        // Medium gray-blue
5817'cell_bg' => '#f5f7fa',   // Very light
5818'grid_bg' => '#d5dbe3',   // Medium-dark
5819
5820// After:
5821'bg' => '#f5f7fa',        // Very light (matches sidebar)
5822'cell_bg' => '#ffffff',   // Pure white (clean)
5823'grid_bg' => '#e8ecf1',   // Subtle contrast
5824'grid_border' => '#d0d7de', // Softer borders
5825```
5826
5827### Before vs After
5828
5829**BEFORE (v4.8.3)**:
5830```
5831Professional Theme:
5832┌────────────────┐
5833│ Calendar       │ ← Medium gray (#e8ecf1)
5834│ ┌────────────┐ │
5835│ │ Event      │ │ ← Light (#f5f7fa)
5836│ └────────────┘ │
5837└────────────────┘
5838
5839Sidebar:
5840┌────────────────┐
5841│ Widget         │ ← Light (#f5f7fa)
5842└────────────────┘
5843
5844Backgrounds don't match! ✗
5845```
5846
5847**AFTER (v4.8.4)**:
5848```
5849Professional Theme:
5850┌────────────────┐
5851│ Calendar       │ ← Light (#f5f7fa)
5852│ ┌────────────┐ │
5853│ │ Event      │ │ ← White (#ffffff)
5854│ └────────────┘ │
5855└────────────────┘
5856
5857Sidebar:
5858┌────────────────┐
5859│ Widget         │ ← Light (#f5f7fa)
5860└────────────────┘
5861
5862Perfect match! ✓
5863```
5864
5865### New Professional Theme Colors
5866
5867**Backgrounds**:
5868- Container: `#f5f7fa` (light blue-gray)
5869- Events: `#ffffff` (pure white)
5870- Grid: `#e8ecf1` (subtle contrast)
5871
5872**Text**:
5873- Primary: `#2c3e50` (dark blue-gray)
5874- Bright: `#4a90e2` (blue accent)
5875- Dim: `#7f8c8d` (medium gray)
5876
5877**Borders**:
5878- Main: `#4a90e2` (blue)
5879- Grid: `#d0d7de` (soft gray)
5880
5881**Header**:
5882- Gradient: `#ffffff` → `#f5f7fa`
5883
5884### Visual Example
5885
5886**Professional Theme Now**:
5887```
5888┌─────────────────────────────┐
5889│ February 2026               │ ← White to light gradient
5890├─┬─┬─┬─┬─┬─┬─┬───────────────┤
5891│S│M│T│W│T│F│S│               │ ← Light background
5892├─┼─┼─┼─┼─┼─┼─┤               │
5893│ │ │1│2│3│4│5│ Event List    │ ← White events
5894│ │ │ │ │ │ │ │ ┌───────────┐ │
5895│ │ │ │ │[8]│ │ │ Meeting   │ │ ← White on light
5896└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘
5897
5898Clean, professional look! ✓
5899```
5900
5901### Comparison with Other Themes
5902
5903**Matrix** (dark):
5904- Container: #242424 (dark green)
5905- Events: #242424 (dark green)
5906- Consistent dark theme ✓
5907
5908**Purple** (dark):
5909- Container: #1a0d14 (dark purple)
5910- Events: #2a2030 (dark purple)
5911- Consistent dark theme ✓
5912
5913**Professional** (light):
5914- Container: #f5f7fa (light blue)
5915- Events: #ffffff (white)
5916- Consistent light theme ✓
5917
5918**Pink** (dark):
5919- Container: #1a0d14 (dark pink)
5920- Events: #1a0d14 (dark pink)
5921- Consistent dark theme ✓
5922
5923**All themes now consistent!** ��
5924
5925### Better Contrast
5926
5927**Professional theme improvements**:
5928
5929**Readability**:
5930- Dark text (#2c3e50) on white/light backgrounds ✓
5931- Excellent contrast ratio ✓
5932- Easy on the eyes ✓
5933
5934**Visual hierarchy**:
5935- White events pop against light container ✓
5936- Blue accents stand out ✓
5937- Clean, modern look ✓
5938
5939**Professional appearance**:
5940- Lighter = more corporate/business feel ✓
5941- Clean whites = premium quality ✓
5942- Subtle grays = sophisticated ✓
5943
5944### Complete Theme Consistency
5945
5946**All themes now have matching backgrounds**:
5947
5948**Matrix**:
5949- Sidebar & Calendar both dark green ✓
5950
5951**Purple**:
5952- Sidebar & Calendar both dark purple ✓
5953
5954**Professional**:
5955- Sidebar & Calendar both light ✓ (v4.8.4!)
5956
5957**Pink**:
5958- Sidebar & Calendar both dark pink ✓
5959
5960**Perfect visual unity across all views!** ��✨
5961
5962## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES
5963
5964### �� Fixed: Bold Text in Descriptions Themed
5965- **Fixed:** **Bold text** now uses theme primary color
5966- **Fixed:** Both `**text**` and `__text__` syntax themed
5967- **Result:** Bold text matches theme!
5968
5969### �� Fixed: Search Bar Fully Themed
5970- **Fixed:** Search input has !important on all styles
5971- **Fixed:** Icon and placeholder text themed
5972- **Result:** Search bar perfectly themed!
5973
5974### �� Fixed: Sidebar Event Boxes Themed
5975- **Fixed:** Event borders in sidebar now use theme grid_border color
5976- **Fixed:** Borders have !important flag
5977- **Result:** Sidebar boxes match theme!
5978
5979### All Changes
5980
5981**1. Bold Text Styling**:
5982
5983**Before**:
5984```html
5985<strong>Bold text</strong> ← Default black
5986```
5987
5988**After**:
5989```php
5990<strong style="color: $text_primary !important; font-weight:bold;">
5991    Bold text
5992</strong>
5993
5994Matrix: Green bold ✓
5995Purple: Lavender bold ✓
5996Professional: Dark bold ✓
5997Pink: Pink bold ✓
5998```
5999
6000**2. Search Bar**:
6001
6002**Before**:
6003```php
6004style="background: $bg; color: $text;"
6005Could be overridden by CSS
6006```
6007
6008**After**:
6009```php
6010style="background: $bg !important;
6011       color: $text_primary !important;
6012       border-color: $grid_border !important;"
6013
6014Cannot be overridden! ✓
6015```
6016
6017**3. Sidebar Event Boxes**:
6018
6019**Before**:
6020```php
6021$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded
6022```
6023
6024**After**:
6025```php
6026$borderColor = $themeStyles['grid_border']; // From theme
6027border-bottom: 1px solid $borderColor !important;
6028
6029Matrix: Green borders ✓
6030Purple: Purple borders ✓
6031Professional: Gray borders ✓
6032Pink: Pink borders ✓
6033```
6034
6035### Before vs After
6036
6037**BEFORE (v4.8.2)**:
6038```
6039Event description:
6040"Please review **Q1 Goals** carefully"
60416042            Black bold ✗
6043
6044Search bar:
6045[�� Search...] ← Gray placeholder ✗
6046
6047Sidebar:
6048┌────────────┐
6049│ Event 1    │
6050├────────────┤ ← Gray border ✗
6051│ Event 2    │
6052└────────────┘
6053```
6054
6055**AFTER (v4.8.3)**:
6056```
6057Matrix Theme:
6058
6059Event description:
6060"Please review **Q1 Goals** carefully"
60616062            Green bold ✓
6063
6064Search bar:
6065[�� Search...] ← Green themed ✓
6066
6067Sidebar:
6068┌────────────┐
6069│ Event 1    │
6070├────────────┤ ← Green border ✓
6071│ Event 2    │
6072└────────────┘
6073```
6074
6075### Examples by Theme
6076
6077**Matrix Theme**:
6078```
6079Description:
6080"Check **important notes** and links"
60816082   Green bold
6083
6084Sidebar boxes:
6085Event 1
6086───────── Green border
6087Event 2
6088───────── Green border
6089```
6090
6091**Purple Theme**:
6092```
6093Description:
6094"Review **agenda items** before meeting"
60956096   Lavender bold
6097
6098Sidebar boxes:
6099Event 1
6100───────── Purple border
6101Event 2
6102───────── Purple border
6103```
6104
6105**Professional Theme**:
6106```
6107Description:
6108"Update **quarterly reports** by Friday"
61096110   Dark bold
6111
6112Sidebar boxes:
6113Event 1
6114───────── Gray border
6115Event 2
6116───────── Gray border
6117```
6118
6119**Pink Theme**:
6120```
6121Description:
6122"Don't forget **party supplies** ✨"
61236124        Pink bold
6125
6126Sidebar boxes:
6127Event 1 ��
6128───────── Pink border
6129Event 2 ✨
6130───────── Pink border
6131```
6132
6133### Complete Formatting Coverage
6134
6135**Text formatting themed**:
6136- ✅ Regular text
6137- ✅ **Bold text** ← NEW!
6138- ✅ Links
6139- ✅ Italic text (inherits)
6140- ✅ Code (inherits)
6141
6142**UI elements themed**:
6143- ✅ Search bar ← Enhanced!
6144- ✅ Search icon ← Enhanced!
6145- ✅ Search placeholder ← Enhanced!
6146- ✅ Sidebar borders ← NEW!
6147- ✅ Event borders
6148- ✅ Badges
6149- ✅ Buttons
6150
6151**Every element perfectly themed!** ��
6152
6153### Search Bar Coverage
6154
6155**All aspects themed**:
6156- Background: Theme cell_bg ✓
6157- Text color: Theme text_primary ✓
6158- Border: Theme grid_border ✓
6159- Placeholder: Inherits text color ✓
6160- Icon (��): In placeholder ✓
6161- Clear button (✕): Themed ✓
6162
6163**Cannot be overridden!** (all have !important)
6164
6165### Sidebar Event Box Styling
6166
6167**Consistent borders**:
6168```
6169Matrix:
6170╔════════════╗
6171║ Event 1    ║
6172╟────────────╢ ← grid_border color
6173║ Event 2    ║
6174╚════════════╝
6175
6176All themes match perfectly! ✓
6177```
6178
6179### Complete Theme Achievement
6180
6181**Every single element themed**:
6182- ✅ Backgrounds
6183- ✅ Text (regular)
6184- ✅ Text (bold) ← v4.8.3!
6185- ✅ Links
6186- ✅ Badges
6187- ✅ Buttons
6188- ✅ Checkboxes
6189- ✅ Icons
6190- ✅ Borders
6191- ✅ Search bar ← Enhanced v4.8.3!
6192- ✅ Sidebar boxes ← v4.8.3!
6193- ✅ Today marker
6194- ✅ Calendar grid
6195- ✅ Event panels
6196
6197**ABSOLUTE PERFECTION!** ��✨
6198
6199## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS
6200
6201### �� Fixed: Links in Descriptions Now Themed
6202- **Fixed:** All links in event descriptions now use theme color
6203- **Fixed:** DokuWiki links [[page|text]] themed
6204- **Fixed:** Markdown links [text](url) themed
6205- **Fixed:** Plain URLs themed
6206- **Result:** Links match theme perfectly!
6207
6208### The Problem
6209
6210**v4.8.1 behavior**:
6211```
6212Event description:
6213"Check out https://example.com" ← Blue default link ✗
6214"See [[wiki:page|docs]]" ← Blue default link ✗
6215```
6216
6217### The Fix
6218
6219**Added inline color styling to ALL link types**:
6220
6221```php
6222// Get theme colors:
6223$linkColor = $themeStyles['border'] . ' !important';
6224$linkStyle = ' style="color:' . $linkColor . ';"';
6225
6226// Apply to links:
6227<a href="..." style="color: #00cc07 !important;">link</a>
6228```
6229
6230**All link types themed**:
62311. DokuWiki syntax: `[[page|text]]`
62322. Markdown syntax: `[text](url)`
62333. Plain URLs: `https://example.com`
6234
6235### Before vs After
6236
6237**BEFORE (v4.8.1)**:
6238```
6239Matrix Theme Description:
6240"Visit https://example.com for more info"
62416242     Blue link ✗ (doesn't match green theme)
6243```
6244
6245**AFTER (v4.8.2)**:
6246```
6247Matrix Theme Description:
6248"Visit https://example.com for more info"
62496250     Green link ✓ (matches theme!)
6251```
6252
6253### Link Colors by Theme
6254
6255**Matrix**:
6256- Links: Green (#00cc07) !important
6257- Matches: Border, badges, highlights
6258
6259**Purple**:
6260- Links: Purple (#9b59b6) !important
6261- Matches: Border, badges, highlights
6262
6263**Professional**:
6264- Links: Blue (#4a90e2) !important
6265- Matches: Border, badges, highlights
6266
6267**Pink**:
6268- Links: Hot Pink (#ff1493) !important
6269- Matches: Border, badges, highlights ✨
6270
6271### Examples
6272
6273**Matrix Description with Links**:
6274```
6275Event: Team Meeting
6276Description:
6277"Review [[wiki:q1goals|Q1 Goals]]
6278and visit https://metrics.com"
6279
6280Both links → Green ✓
6281```
6282
6283**Purple Description with Links**:
6284```
6285Event: Planning Session
6286Description:
6287"Check [schedule](https://cal.com)
6288for availability"
6289
6290Link → Purple ✓
6291```
6292
6293**Professional Description with Links**:
6294```
6295Event: Client Call
6296Description:
6297"Prepare [[reports|Monthly Reports]]
6298before the call"
6299
6300Link → Blue ✓
6301```
6302
6303**Pink Description with Links**:
6304```
6305Event: Party Planning
6306Description:
6307"RSVP at https://party.com ✨"
6308
6309Link → Hot Pink ✓ ��
6310```
6311
6312### Technical Implementation
6313
6314**Updated renderDescription() function**:
6315
6316```php
6317private function renderDescription($description, $themeStyles = null) {
6318    // Get theme
6319    if ($themeStyles === null) {
6320        $theme = $this->getSidebarTheme();
6321        $themeStyles = $this->getSidebarThemeStyles($theme);
6322    }
6323
6324    // Create link style
6325    $linkColor = $themeStyles['border'] . ' !important';
6326    $linkStyle = ' style="color:' . $linkColor . ';"';
6327
6328    // Apply to all link types:
6329    $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>';
6330}
6331```
6332
6333### Complete Theming
6334
6335**Every text element**:
6336- ✅ Event titles
6337- ✅ Event dates
6338- ✅ Event descriptions
6339- ✅ **Links in descriptions** ← NEW!
6340- ✅ Badges
6341- ✅ Buttons
6342
6343**Every color unified!** ��
6344
6345### Unified Theme Experience
6346
6347**Matrix Theme**:
6348```
6349Everything green:
6350- Text: Green ✓
6351- Links: Green ✓
6352- Badges: Green ✓
6353- Borders: Green ✓
6354- Buttons: Green ✓
6355- Today marker: Green ✓
6356
6357Perfect harmony! ✓
6358```
6359
6360**No default blue links breaking the theme!**
6361
6362### Link Types Supported
6363
6364**1. DokuWiki Syntax**:
6365```
6366[[page|Link Text]] → Themed ✓
6367[[page]] → Themed ✓
6368[[page#section|Text]] → Themed ✓
6369```
6370
6371**2. Markdown Syntax**:
6372```
6373[Link Text](https://url.com) → Themed ✓
6374[Text](internal-page) → Themed ✓
6375```
6376
6377**3. Plain URLs**:
6378```
6379https://example.com → Themed ✓
6380http://site.org → Themed ✓
6381```
6382
6383**All links perfectly themed!** ����
6384
6385## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER
6386
6387### �� Fixed: All Badges Now Themed
6388- **Fixed:** TODAY badge themed with theme color
6389- **Fixed:** PAST DUE badge uses orange (warning color)
6390- **Fixed:** Namespace badges themed
6391- **Fixed:** All badges visible and hidden
6392- **Result:** All badges match theme!
6393
6394### �� Fixed: Today Cell More Prominent
6395- **Fixed:** Today cell now has 2px border in theme color
6396- **Fixed:** Border added to both PHP and JavaScript
6397- **Result:** Today stands out clearly!
6398
6399### �� Fixed: Past Event Text Fully Themed
6400- **Fixed:** Event-info div backgrounds ensure no gray
6401- **Result:** Expanded past events completely themed!
6402
6403### All Changes
6404
6405**1. Badge Theming**:
6406
6407**TODAY Badge**:
6408```php
6409// PHP & JavaScript:
6410style="background: $themeStyles['border'] !important;
6411       color: $bg !important;"
6412
6413Matrix: Green badge
6414Purple: Purple badge
6415Professional: Blue badge with white text
6416Pink: Pink badge
6417```
6418
6419**PAST DUE Badge** (always orange):
6420```php
6421style="background: #ff9800 !important;
6422       color: #fff !important;"
6423```
6424
6425**Namespace Badge**:
6426```php
6427style="background: $themeStyles['border'] !important;
6428       color: $bg !important;"
6429```
6430
6431**2. Today Cell Border**:
6432
6433**PHP**:
6434```php
6435$todayBorder = $isToday ?
6436    'border:2px solid ' . $themeStyles['border'] . ' !important;' : '';
6437```
6438
6439**JavaScript**: Same
6440
6441**Result**: Today cell has prominent colored border!
6442
6443### Before vs After
6444
6445**BEFORE (v4.8.0)**:
6446```
6447Calendar:
6448┌─┬─┬─┬─┬─┬─┬─┐
6449│1│2│3│4│5│6│7│
6450│ │ │ │[8]│ │ │ ← Today: subtle background
6451└─┴─┴─┴─┴─┴─┴─┘
6452
6453Event badges:
6454Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗
6455```
6456
6457**AFTER (v4.8.1)**:
6458```
6459Calendar (Matrix):
6460┌─┬─┬─┬─┬─┬─┬─┐
6461│1│2│3│4│5│6│7│
6462│ │ │ │[8]│ │ │ ← Today: green border 2px ✓
6463└─┴─┴─┴─┴─┴─┴─┘
6464
6465Event badges (Matrix):
6466Mon, Feb 8 [TODAY] [Work] ← Green badges ✓
6467```
6468
6469### Matrix Theme Example
6470
6471**Calendar**:
6472```
6473Today cell:
6474┌────┐
6475│ 8  │ Dark green bg + Green 2px border
6476└────┘
6477Very obvious!
6478```
6479
6480**Badges**:
6481```
6482[TODAY] ← Green bg, dark text
6483[Work]  ← Green bg, dark text
6484[PAST DUE] ← Orange bg, white text
6485```
6486
6487### Purple Theme Example
6488
6489**Calendar**:
6490```
6491Today cell:
6492┌────┐
6493│ 8  │ Dark purple bg + Purple 2px border
6494└────┘
6495```
6496
6497**Badges**:
6498```
6499[TODAY] ← Purple bg
6500[Work]  ← Purple bg
6501```
6502
6503### Professional Theme Example
6504
6505**Calendar**:
6506```
6507Today cell:
6508┌────┐
6509│ 8  │ Light blue bg + Blue 2px border
6510└────┘
6511```
6512
6513**Badges**:
6514```
6515[TODAY] ← Blue bg, white text
6516[Work]  ← Blue bg, white text
6517```
6518
6519### Pink Theme Example
6520
6521**Calendar**:
6522```
6523Today cell:
6524┌────┐
6525│ 8  │ Dark pink bg + Pink 2px border ✨
6526└────┘
6527```
6528
6529**Badges**:
6530```
6531[TODAY] ← Pink bg ��
6532[Work]  ← Pink bg ✨
6533```
6534
6535### Complete Badge Coverage
6536
6537**All badges themed**:
6538- ✅ TODAY badge (theme color)
6539- ✅ PAST DUE badge (orange warning)
6540- ✅ Namespace badges (theme color)
6541- ✅ Visible events
6542- ✅ Hidden/past events
6543
6544**No gray badges anywhere!**
6545
6546### Today Cell Visual
6547
6548**Dual indicators**:
65491. Background color (theme today bg)
65502. Border (2px theme color) ← NEW!
6551
6552**Result**: Today is VERY obvious!
6553
6554**Matrix**: Green bg + Green border
6555**Purple**: Purple bg + Purple border
6556**Professional**: Light blue bg + Blue border
6557**Pink**: Pink bg + Pink border ✨
6558
6559### Complete Theming
6560
6561**Every element themed**:
6562- ✅ Backgrounds
6563- ✅ Text colors
6564- ✅ Badges (v4.8.1!)
6565- ✅ Today marker (v4.8.1!)
6566- ✅ Checkboxes
6567- ✅ Buttons
6568- ✅ Icons
6569
6570**Absolutely everything!** ��✨
6571
6572## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING
6573
6574### �� Fixed: All Event Backgrounds Now Themed
6575- **Fixed:** event-info div now has themed background
6576- **Fixed:** event-meta-compact div (visible) now has themed background
6577- **Fixed:** event-desc-compact div now has themed background
6578- **Fixed:** All !important flags added to prevent CSS override
6579- **Result:** Entire event item fully themed!
6580
6581### �� Fixed: Description Text Shows Correct Color Immediately
6582- **Fixed:** Description divs now have explicit background + color on load
6583- **Fixed:** Both visible and hidden descriptions fully styled
6584- **Result:** No more gray text on initial load!
6585
6586### The Problem
6587
6588**v4.7.9 behavior**:
6589```
6590Expanded past event:
6591┌────────────────────────┐
6592│ ▾ Team Meeting         │ ← Themed ✓
6593│   Mon, Feb 8           │ ← Themed ✓
6594│                        │
6595│   [Event details]      │ ← Gray background ✗
6596│   [Description]        │ ← Gray text until navigation ✗
6597└────────────────────────┘
6598
6599Only the date/time div was themed!
6600```
6601
6602### The Fix
6603
6604**Added background to ALL inner divs**:
6605
6606**PHP**:
6607```php
6608// Event container:
6609style="background:' . $themeStyles['cell_bg'] . ' !important;"
6610
6611// event-info wrapper:
6612<div class="event-info"
6613     style="background:' . $themeStyles['cell_bg'] . ' !important;">
6614
6615// event-meta-compact:
6616<div class="event-meta-compact"
6617     style="background:' . $themeStyles['cell_bg'] . ' !important;">
6618
6619// event-desc-compact:
6620<div class="event-desc-compact"
6621     style="background:' . $themeStyles['cell_bg'] . ' !important;
6622            color:' . $themeStyles['text_dim'] . ' !important;">
6623```
6624
6625**JavaScript**: Same styling applied
6626
6627### Before vs After
6628
6629**BEFORE (v4.7.9)**:
6630```
6631Matrix Theme - Expanded Event:
6632┌────────────────────────┐
6633│ ▾ Team Meeting         │
6634│   Mon, Feb 8  ← Green  │
6635│                        │
6636│   Details     ← Gray ✗ │
6637│   Description ← Gray ✗ │
6638│   [✏️] [��️]            │
6639└────────────────────────┘
6640```
6641
6642**AFTER (v4.8.0)**:
6643```
6644Matrix Theme - Expanded Event:
6645┌────────────────────────┐
6646│ ▾ Team Meeting         │
6647│   Mon, Feb 8  ← Green  │
6648│                        │
6649│   Details     ← Green ✓│
6650│   Description ← Green ✓│
6651│   [✏️] [��️]            │
6652└────────────────────────┘
6653
6654Entire event themed!
6655```
6656
6657### What's Themed Now
6658
6659**Event Item Structure** (all themed):
6660```
6661event-compact-item        ← Themed ✓
6662  └─ event-info           ← Themed ✓ (v4.8.0!)
6663      ├─ event-title-row  ← Themed ✓
6664      ├─ event-meta       ← Themed ✓ (v4.8.0!)
6665      └─ event-desc       ← Themed ✓ (v4.8.0!)
6666```
6667
6668**Every layer has background!**
6669
6670### Matrix Theme Example
6671
6672**Complete event**:
6673```
6674┌────────────────────────────┐
6675│ Team Meeting               │ ← Dark green bg
6676│   Mon, Feb 8 • 2:00 PM     │ ← Dark green bg
6677│   Discussed Q1 goals and   │ ← Dark green bg
6678│   set targets for team     │ ← Dark green bg
6679│   [✏️] [��️] [☑]           │ ← Dark green bg
6680└────────────────────────────┘
6681
6682Consistent green throughout! ✓
6683```
6684
6685### Purple Theme Example
6686
6687```
6688┌────────────────────────────┐
6689│ Team Meeting               │ ← Dark purple bg
6690│   Mon, Feb 8 • 2:00 PM     │ ← Dark purple bg
6691│   Discussed Q1 goals       │ ← Dark purple bg
6692│   [✏️] [��️] [☑]           │ ← Dark purple bg
6693└────────────────────────────┘
6694
6695Consistent purple throughout! ✓
6696```
6697
6698### Professional Theme Example
6699
6700```
6701┌────────────────────────────┐
6702│ Team Meeting               │ ← Light bg
6703│   Mon, Feb 8 • 2:00 PM     │ ← Light bg
6704│   Discussed Q1 goals       │ ← Light bg
6705│   [✏️] [��️] [☑]           │ ← Light bg
6706└────────────────────────────┘
6707
6708Consistent light throughout! ✓
6709```
6710
6711### Pink Theme Example
6712
6713```
6714┌────────────────────────────┐
6715│ Team Meeting               │ ← Dark pink bg
6716│   Mon, Feb 8 • 2:00 PM     │ ← Dark pink bg
6717│   Discussed Q1 goals       │ ← Dark pink bg
6718│   [✏️] [��️] [☑]           │ ← Dark pink bg
6719└────────────────────────────┘
6720
6721Consistent pink throughout! ✓
6722```
6723
6724### Complete Theming
6725
6726**Every element, every layer**:
6727- ✅ Container
6728- ✅ Event item
6729- ✅ Event info wrapper (v4.8.0!)
6730- ✅ Title row
6731- ✅ Meta div (v4.8.0!)
6732- ✅ Description div (v4.8.0!)
6733- ✅ Action buttons
6734- ✅ Checkboxes
6735
6736**No gray anywhere!** ��
6737
6738### Why Multiple Backgrounds?
6739
6740**CSS layers stack**:
6741```html
6742<div style="background: green;">         ← Layer 1
6743  <div style="background: inherit;">     ← Could be gray!
6744    <div>Content</div>                   ← Inherits gray!
6745  </div>
6746</div>
6747
6748Better:
6749<div style="background: green;">         ← Layer 1
6750  <div style="background: green;">       ← Layer 2 forced
6751    <div style="background: green;">     ← Layer 3 forced
6752      Content                            ← All green!
6753    </div>
6754  </div>
6755</div>
6756```
6757
6758**Every layer forced = Perfect theming!**
6759
6760### !important Everywhere
6761
6762**All styling now uses !important**:
6763- background: ... !important
6764- color: ... !important
6765
6766**Result**: CSS cannot override themes!
6767
6768**Version 4.8.0 = Complete, bulletproof theming!** ��✨
6769
6770## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS
6771
6772### �� Fixed: Past Event Expanded Background Themed
6773- **Fixed:** Past event meta div now has theme background when expanded
6774- **Fixed:** Both PHP and JavaScript render with theme background
6775- **Result:** Expanded past events have proper themed background!
6776
6777### ✅ Fixed: Checkboxes Now Themed
6778- **Fixed:** Task checkboxes use accent-color matching theme
6779- **Fixed:** Cursor changes to pointer on hover
6780- **Result:** Checkboxes match theme color!
6781
6782### �� Fixed: Action Buttons (Edit/Delete) Themed
6783- **Fixed:** Edit (✏️) and Delete (��️) buttons now themed
6784- **Fixed:** Background, text, and border all use theme colors
6785- **Result:** All icons themed!
6786
6787### All Changes
6788
6789**1. Past Event Expanded Background**:
6790
6791**PHP**:
6792```php
6793// Before:
6794<div class="event-meta-compact" style="display:none;">
6795
6796// After:
6797<div class="event-meta-compact"
6798     style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;">
6799```
6800
6801**JavaScript**: Same treatment
6802
6803**Result**: Expanded past events have themed background!
6804
6805**2. Task Checkboxes**:
6806
6807**PHP & JavaScript**:
6808```php
6809// Added accent-color:
6810<input type="checkbox"
6811       style="accent-color:' . $themeStyles['border'] . ' !important;
6812              cursor:pointer;">
6813```
6814
6815**accent-color** changes the checkbox color:
6816- Matrix: Green checkboxes ✓
6817- Purple: Purple checkboxes ✓
6818- Professional: Blue checkboxes ✓
6819- Pink: Pink checkboxes ✓
6820
6821**3. Edit/Delete Buttons**:
6822
6823**PHP**:
6824```php
6825<button class="event-action-btn"
6826        style="color:' . $themeStyles['text_primary'] . ' !important;
6827               background:' . $themeStyles['cell_bg'] . ' !important;
6828               border-color:' . $themeStyles['grid_border'] . ' !important;">
6829    ��️
6830</button>
6831```
6832
6833**JavaScript**: Same
6834
6835**Result**: Buttons blend with theme!
6836
6837### Before vs After
6838
6839**BEFORE (v4.7.8)**:
6840```
6841Past Event (expanded):
6842┌─────────────────────────┐
6843│ ▾ Team Meeting          │
6844│   Mon, Feb 8            │ ← White background ✗
6845│   Description           │
6846├─────────────────────────┤
6847│ [✏️] [��️] [☐]          │ ← Default colors ✗
6848└─────────────────────────┘
6849```
6850
6851**AFTER (v4.7.9)**:
6852```
6853Past Event (expanded - Matrix):
6854┌─────────────────────────┐
6855│ ▾ Team Meeting          │
6856│   Mon, Feb 8            │ ← Dark green bg ✓
6857│   Description           │
6858├─────────────────────────┤
6859│ [✏️] [��️] [☑]          │ ← Themed ✓
6860└─────────────────────────┘
6861```
6862
6863### Matrix Theme Example
6864
6865**Checkboxes**: Green accent
6866**Buttons**: Dark bg, green text, green borders
6867**Expanded**: Dark green background
6868
6869```
6870Task: ☑ Complete report  ← Green checkmark
6871[✏️] [��️]                ← Dark buttons with green
6872```
6873
6874### Purple Theme Example
6875
6876**Checkboxes**: Purple accent
6877**Buttons**: Dark purple bg, lavender text
6878**Expanded**: Dark purple background
6879
6880```
6881Task: ☑ Complete report  ← Purple checkmark
6882[✏️] [��️]                ← Purple themed
6883```
6884
6885### Professional Theme Example
6886
6887**Checkboxes**: Blue accent
6888**Buttons**: Light bg, dark text
6889**Expanded**: Light background
6890
6891```
6892Task: ☑ Complete report  ← Blue checkmark
6893[✏️] [��️]                ← Light themed
6894```
6895
6896### Pink Theme Example
6897
6898**Checkboxes**: Pink accent
6899**Buttons**: Dark pink bg, pink text
6900**Expanded**: Dark pink background
6901
6902```
6903Task: ☑ Complete report  ← Pink checkmark
6904[✏️] [��️]                ← Pink themed
6905```
6906
6907### Complete Icon Coverage
6908
6909**Themed Icons/Buttons**:
6910- ✅ Task checkboxes (accent-color)
6911- ✅ Edit button (✏️)
6912- ✅ Delete button (��️)
6913- ✅ Navigation arrows (◀ ▶)
6914- ✅ Today button
6915- ✅ Past Events arrow (▶)
6916
6917**All interactive elements themed!** ��
6918
6919### How accent-color Works
6920
6921**Modern CSS property** for form controls:
6922```css
6923input[type="checkbox"] {
6924    accent-color: #00cc07; /* Green checkbox! */
6925}
6926```
6927
6928**Browser support**: All modern browsers ✓
6929
6930**Result**: Checkboxes automatically match theme!
6931
6932### Complete Theme Coverage
6933
6934**Backgrounds**:
6935- ✅ Container
6936- ✅ Calendar-left
6937- ✅ Calendar-right
6938- ✅ Event items
6939- ✅ Past event expanded (v4.7.9!)
6940- ✅ Action buttons (v4.7.9!)
6941
6942**Icons/Controls**:
6943- ✅ Checkboxes (v4.7.9!)
6944- ✅ Edit/Delete buttons (v4.7.9!)
6945- ✅ Navigation buttons
6946- ✅ All arrows
6947
6948**Every element perfectly themed!** ��✨
6949
6950## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS
6951
6952### �� Fixed: White Bar at Bottom of Calendar
6953- **Fixed:** Added background to calendar-left div with !important
6954- **Result:** No more white bar at bottom!
6955
6956### �� Fixed: Past Event Expanded Details Not Themed
6957- **Fixed:** Past event date/time now themed when expanded
6958- **Fixed:** Past event descriptions now themed when expanded
6959- **Fixed:** Both PHP and JavaScript render with theme colors
6960- **Result:** Expanding past events shows themed text!
6961
6962### �� Fixed: Event Description Text Color
6963- **Fixed:** All event descriptions now use theme text_dim color
6964- **Fixed:** Both visible and hidden descriptions themed
6965- **Result:** Descriptions always match theme!
6966
6967### All Changes
6968
6969**1. Bottom White Bar** (calendar-left div):
6970
6971**Before**:
6972```html
6973<div class="calendar-compact-left">
6974<!-- White background showing at bottom -->
6975```
6976
6977**After**:
6978```html
6979<div class="calendar-compact-left"
6980     style="background: #242424 !important;">
6981<!-- Matches theme background -->
6982```
6983
6984**2. Past Event Expanded Details**:
6985
6986**PHP** - Added colors to hidden details:
6987```php
6988// Past event meta (hidden):
6989<span class="event-date-time"
6990      style="color:' . $themeStyles['text_dim'] . ' !important;">
6991
6992// Past event description (hidden):
6993<div class="event-desc-compact"
6994     style="display:none; color:' . $themeStyles['text_dim'] . ' !important;">
6995```
6996
6997**JavaScript** - Same treatment:
6998```javascript
6999// Past event meta:
7000html += '<span class="event-date-time"
7001              style="color:' + themeStyles.text_dim + ' !important;">';
7002
7003// Past event description:
7004html += '<div class="event-desc-compact"
7005              style="display: none; color:' + themeStyles.text_dim + ' !important;">';
7006```
7007
7008**3. All Event Descriptions**:
7009
7010**Both visible and hidden descriptions now themed**:
7011```php
7012// PHP:
7013style="color:' . $themeStyles['text_dim'] . ' !important;"
7014
7015// JavaScript:
7016style="color:' + themeStyles.text_dim + ' !important;"
7017```
7018
7019### Before vs After
7020
7021**BEFORE (v4.7.7)**:
7022```
7023Calendar bottom:
7024┌──────────────┐
7025│ Calendar     │
7026│ Grid         │
7027└──────────────┘
7028▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar
7029
7030Past Event (collapsed):
7031▸ Team Meeting
7032
7033Past Event (expanded):
7034▾ Team Meeting
7035  Mon, Feb 8 ← Gray text ✗
7036  Description ← Gray text ✗
7037```
7038
7039**AFTER (v4.7.8)**:
7040```
7041Calendar bottom:
7042┌──────────────┐
7043│ Calendar     │
7044│ Grid         │
7045└──────────────┘
7046No white bar! ✓
7047
7048Past Event (collapsed):
7049▸ Team Meeting
7050
7051Past Event (expanded):
7052▾ Team Meeting
7053  Mon, Feb 8 ← Theme dim color ✓
7054  Description ← Theme dim color ✓
7055```
7056
7057### Matrix Theme Example
7058
7059**Past event expanded**:
7060```
7061▾ Team Meeting (past)
7062  Mon, Feb 8 • 2:00 PM  ← Dim green (#00aa00)
7063  Discussed Q1 goals   ← Dim green (#00aa00)
7064
7065Everything themed! ✓
7066```
7067
7068### Purple Theme Example
7069
7070**Past event expanded**:
7071```
7072▾ Team Meeting (past)
7073  Mon, Feb 8 • 2:00 PM  ← Dim purple (#8e7ab8)
7074  Discussed Q1 goals   ← Dim purple (#8e7ab8)
7075
7076Everything themed! ✓
7077```
7078
7079### Professional Theme Example
7080
7081**Past event expanded**:
7082```
7083▾ Team Meeting (past)
7084  Mon, Feb 8 • 2:00 PM  ← Gray (#7f8c8d)
7085  Discussed Q1 goals   ← Gray (#7f8c8d)
7086
7087Everything themed! ✓
7088```
7089
7090### Pink Theme Example
7091
7092**Past event expanded**:
7093```
7094▾ Team Meeting (past)
7095  Mon, Feb 8 • 2:00 PM  ← Light pink (#ff85c1)
7096  Discussed Q1 goals   ← Light pink (#ff85c1)
7097
7098Everything themed! ✓
7099```
7100
7101### Complete Coverage
7102
7103**Calendar Layout**:
7104- ✅ Container background
7105- ✅ Calendar-left background (v4.7.8!)
7106- ✅ Calendar-right background
7107- ✅ No white bars anywhere!
7108
7109**Event Details**:
7110- ✅ Event titles
7111- ✅ Event dates/times
7112- ✅ Event descriptions (visible) (v4.7.8!)
7113- ✅ Past event dates (expanded) (v4.7.8!)
7114- ✅ Past event descriptions (expanded) (v4.7.8!)
7115
7116**Absolutely everything themed!** ��
7117
7118## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS
7119
7120### �� Fixed: Added !important to EVERY Themed Element
7121- **Fixed:** S M T W T F S headers now have background + color with !important
7122- **Fixed:** "Past Events" text now has explicit color with !important
7123- **Fixed:** Today cell background now forced with !important
7124- **Fixed:** All day numbers now have !important color
7125- **Fixed:** Empty cells now have !important background
7126- **Result:** CSS CANNOT override themes anymore!
7127
7128### The Nuclear Option: !important Everywhere
7129
7130**Problem**: DokuWiki CSS was still winning:
7131```css
7132/* DokuWiki theme overriding everything: */
7133.dokuwiki table th { background: white !important; color: black !important; }
7134.dokuwiki td { background: white !important; }
7135```
7136
7137**Solution**: Add !important to EVERY inline style:
7138```html
7139<th style="background: #242424 !important; color: #00cc07 !important;">
7140<td style="background: #2a4d2a !important; color: #00cc07 !important;">
7141<span style="color: #00cc07 !important;">
7142```
7143
7144### All Changes
7145
7146**1. Table Headers (S M T W T F S)**:
7147
7148**PHP** - Added background + !important everywhere:
7149```php
7150$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important;
7151            color:' . $themeStyles['text_primary'] . ' !important;
7152            border-color:' . $themeStyles['grid_border'] . ' !important;
7153            font-weight:bold !important;';
7154```
7155
7156**JavaScript** - Added background to each th:
7157```javascript
7158th.style.setProperty('background', themeStyles.header_bg, 'important');
7159th.style.setProperty('color', themeStyles.text_primary, 'important');
7160th.style.setProperty('border-color', themeStyles.grid_border, 'important');
7161th.style.setProperty('font-weight', 'bold', 'important');
7162```
7163
7164**2. Past Events Text**:
7165
7166**PHP** - Added !important to spans:
7167```php
7168<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span>
7169<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span>
7170```
7171
7172**JavaScript** - Same treatment:
7173```javascript
7174html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>';
7175html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>';
7176```
7177
7178**3. Today Cell & All Cells**:
7179
7180**PHP** - !important on background and color:
7181```php
7182// Today or regular cell:
7183$cellStyle = 'background:' . $cellBg . ' !important;
7184              color:' . $themeStyles['text_primary'] . ' !important;';
7185
7186// Day number:
7187<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;">
7188```
7189
7190**JavaScript** - Same:
7191```javascript
7192style="background:${cellBg} !important; color:${cellColor} !important;"
7193
7194<span style="color:${cellColor} !important;">${currentDay}</span>
7195```
7196
7197**4. Empty Cells**:
7198
7199**PHP & JavaScript** - !important:
7200```php
7201style="background:' . $themeStyles['bg'] . ' !important;"
7202```
7203
7204### Before vs After
7205
7206**BEFORE (v4.7.6)** - CSS still winning:
7207```
7208S M T W T F S → White background, black text ✗
7209Today cell → White background ✗
7210Past Events → Black text ✗
7211```
7212
7213**AFTER (v4.7.7)** - Theme wins:
7214```
7215S M T W T F S → Theme background, theme text ✓
7216Today cell → Theme highlight ✓
7217Past Events → Theme text ✓
7218
7219NOTHING can override !important inline styles!
7220```
7221
7222### Matrix Theme Example
7223
7224**Complete theming**:
7225```
7226┌──────────────────────────┐
7227│ S M T W T F S            │ ← Dark bg (#2a2a2a), Green text (#00cc07)
7228├─┬─┬─┬─┬─┬─┬──────────────┤
7229│ │ │1│2│3│4│5             │ ← Dark cells (#242424), Green nums (#00cc07)
7230│ │ │ │ │ │[8]│             │ ← Today green highlight (#2a4d2a)
7231├─┴─┴─┴─┴─┴─┴──────────────┤
7232│ ▶ Past Events (3)        │ ← Dim green text (#00aa00)
7233└──────────────────────────┘
7234
7235Every element forced with !important ✓
7236```
7237
7238### Purple Theme Example
7239
7240```
7241┌──────────────────────────┐
7242│ S M T W T F S            │ ← Dark purple bg, Lavender text
7243├─┬─┬─┬─┬─┬─┬──────────────┤
7244│ │ │1│2│3│4│5             │ ← Dark purple cells, Lavender nums
7245│ │ │ │ │ │[8]│             │ ← Today purple highlight
7246├─┴─┴─┴─┴─┴─┴──────────────┤
7247│ ▶ Past Events (3)        │ ← Dim purple text
7248└──────────────────────────┘
7249
7250Forced purple everywhere ✓
7251```
7252
7253### Professional Theme Example
7254
7255```
7256┌──────────────────────────┐
7257│ S M T W T F S            │ ← Light bg, Dark text
7258├─┬─┬─┬─┬─┬─┬──────────────┤
7259│ │ │1│2│3│4│5             │ ← Light cells, Dark nums
7260│ │ │ │ │ │[8]│             │ ← Today light blue highlight
7261├─┴─┴─┴─┴─┴─┴──────────────┤
7262│ ▶ Past Events (3)        │ ← Gray text
7263└──────────────────────────┘
7264
7265Forced professional everywhere ✓
7266```
7267
7268### Pink Theme Example
7269
7270```
7271┌──────────────────────────┐
7272│ S M T W T F S            │ ← Dark pink bg, Pink text
7273├─┬─┬─┬─┬─┬─┬──────────────┤
7274│ │ │1│2│3│4│5  ✨         │ ← Dark pink cells, Pink nums
7275│ │ │ │ │ │[8]│  ��         │ ← Today pink highlight
7276├─┴─┴─┴─┴─┴─┴──────────────┤
7277│ ▶ Past Events (3)        │ ← Light pink text
7278└──────────────────────────┘
7279
7280Forced pink sparkles everywhere ✓
7281```
7282
7283### Why So Aggressive?
7284
7285**!important priority**:
7286```
72871. Inline style with !important ← We use this
72882. CSS rule with !important
72893. Inline style without !important
72904. CSS rule without !important
7291```
7292
7293**We win**: Our inline `!important` beats everything!
7294
7295### Complete !important Coverage
7296
7297**Every themed element now has !important**:
7298- ✅ S M T W T F S (background + color)
7299- ✅ Day numbers (color)
7300- ✅ Today cell (background + color)
7301- ✅ Empty cells (background)
7302- ✅ Past Events text (color)
7303- ✅ Past Events arrow (color)
7304- ✅ Event titles (color)
7305- ✅ Event dates (color)
7306
7307**No CSS can override themes!** ��
7308
7309## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS
7310
7311### �� Fixed: Event Sidebar Text Now Themed
7312- **Fixed:** Event titles now have explicit color styling
7313- **Fixed:** Event dates/times now have explicit color styling (dimmed)
7314- **Fixed:** Both PHP and JavaScript event rendering now styled
7315
7316### �� Enhanced: Table Header Colors Now Forced with !important
7317- **Fixed:** S M T W T F S now uses `!important` to override any CSS
7318- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag
7319- **Result:** Header colors CANNOT be overridden!
7320
7321### What Was Fixed
7322
7323**1. Event Text in Sidebar** (was missing):
7324
7325**PHP** - Explicit colors added:
7326```php
7327// Event title:
7328<span class="event-title-compact"
7329      style="color:' . $themeStyles['text_primary'] . ';">
7330
7331// Event date/time:
7332<span class="event-date-time"
7333      style="color:' . $themeStyles['text_dim'] . ';">
7334```
7335
7336**JavaScript** - Explicit colors added:
7337```javascript
7338// Event title:
7339html += '<span class="event-title-compact"
7340               style="color:' + themeStyles.text_primary + ';">';
7341
7342// Event date/time:
7343html += '<span class="event-date-time"
7344               style="color:' + themeStyles.text_dim + ';">';
7345```
7346
7347**2. Table Header Colors** (was being overridden):
7348
7349**PHP** - Added !important:
7350```php
7351// Row:
7352style="color: ' . $themeStyles['text_primary'] . ' !important;"
7353
7354// Each th:
7355$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;';
7356<th style="' . $thStyle . '">S</th>
7357```
7358
7359**JavaScript** - Used setProperty with important:
7360```javascript
7361// Row:
7362thead.style.setProperty('color', themeStyles.text_primary, 'important');
7363
7364// Each th:
7365th.style.setProperty('color', themeStyles.text_primary, 'important');
7366```
7367
7368### Before vs After
7369
7370**BEFORE (v4.7.5)**:
7371```
7372Event List:
7373┌─────────────────┐
7374│ Team Meeting    │ ← Black/default color ✗
7375│ Mon, Feb 8      │ ← Black/default color ✗
7376└─────────────────┘
7377
7378Table Header:
7379S  M  T  W  T  F  S  ← Black/default color ✗
7380(CSS was overriding the style)
7381```
7382
7383**AFTER (v4.7.6)**:
7384```
7385Event List (Matrix):
7386┌─────────────────┐
7387│ Team Meeting    │ ← Green (#00cc07) ✓
7388│ Mon, Feb 8      │ ← Dim green (#00aa00) ✓
7389└─────────────────┘
7390
7391Table Header (Matrix):
7392S  M  T  W  T  F  S  ← Green (!important) ✓
7393(Cannot be overridden!)
7394```
7395
7396### Why !important?
7397
7398**Problem**: DokuWiki CSS was stronger:
7399```css
7400/* Some DokuWiki theme CSS: */
7401table th {
7402    color: #000 !important; /* ← Overrides inline styles */
7403}
7404```
7405
7406**Solution**: Use !important in inline styles:
7407```html
7408<th style="color: #00cc07 !important;">S</th>
7409<!-- Inline !important beats CSS !important -->
7410```
7411
7412**JavaScript method**:
7413```javascript
7414// Old (could be overridden):
7415th.style.color = '#00cc07';
7416
7417// New (cannot be overridden):
7418th.style.setProperty('color', '#00cc07', 'important');
7419```
7420
7421### Event Text Colors
7422
7423**Two-tone approach**:
7424
7425**Primary text** (titles):
7426- Matrix: `#00cc07` (bright green)
7427- Purple: `#b19cd9` (lavender)
7428- Professional: `#2c3e50` (dark)
7429- Pink: `#ff69b4` (pink)
7430
7431**Dimmed text** (dates/times):
7432- Matrix: `#00aa00` (dim green)
7433- Purple: `#8e7ab8` (dim purple)
7434- Professional: `#7f8c8d` (gray)
7435- Pink: `#ff85c1` (light pink)
7436
7437**Creates visual hierarchy!** ✓
7438
7439### Complete Theme Coverage NOW
7440
7441**Calendar Grid**:
7442- Container ✅
7443- Header ✅
7444- Buttons ✅
7445- S M T W T F S ✅ (!important - v4.7.6!)
7446- Day numbers ✅
7447- Today cell ✅
7448- Empty cells ✅
7449
7450**Event List**:
7451- Panel ✅
7452- Header ✅
7453- Search box ✅
7454- Add button ✅
7455- **Event titles** ✅ (v4.7.6!)
7456- **Event dates** ✅ (v4.7.6!)
7457- Past toggle ✅
7458
7459**Every text element themed and forced!** ��
7460
7461### Testing
7462
7463**Matrix Theme**:
7464```
7465Header: S M T W T F S → Green !important ✓
7466Events:
7467  • Team Meeting → Green ✓
7468  • Mon, Feb 8 → Dim green ✓
7469```
7470
7471**Purple Theme**:
7472```
7473Header: S M T W T F S → Lavender !important ✓
7474Events:
7475  • Team Meeting → Lavender ✓
7476  • Mon, Feb 8 → Dim purple ✓
7477```
7478
7479**Professional Theme**:
7480```
7481Header: S M T W T F S → Dark !important ✓
7482Events:
7483  • Team Meeting → Dark ✓
7484  • Mon, Feb 8 → Gray ✓
7485```
7486
7487**Pink Theme**:
7488```
7489Header: S M T W T F S → Pink !important ✓
7490Events:
7491  • Team Meeting → Pink ✓
7492  • Mon, Feb 8 → Light pink ✓
7493```
7494
7495**No element can escape theming now!** ��
7496
7497## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING
7498
7499### �� Enhanced: Explicit Theme Colors on ALL Text Elements
7500- **Enhanced:** S M T W T F S header letters now have explicit color styling
7501- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling
7502- **Enhanced:** Empty cells verified with background styling
7503- **Result:** Absolutely guaranteed theme colors on every text element!
7504
7505### What Was Enhanced
7506
7507**1. Table Header Letters (S M T W T F S)**:
7508
7509**PHP** - Each `<th>` now has explicit color:
7510```php
7511$thStyle = 'color:' . $themeStyles['text_primary'] . ';
7512            border-color:' . $themeStyles['grid_border'] . ';';
7513<th style="' . $thStyle . '">S</th>
7514<th style="' . $thStyle . '">M</th>
7515// ... etc
7516```
7517
7518**JavaScript** - Applies to each th individually:
7519```javascript
7520const ths = thead.querySelectorAll('th');
7521ths.forEach(th => {
7522    th.style.color = themeStyles.text_primary;
7523    th.style.borderColor = themeStyles.grid_border;
7524});
7525```
7526
7527**2. Day Numbers (1, 2, 3, 4...)**:
7528
7529**PHP** - Explicit color on span:
7530```php
7531<span class="day-num"
7532      style="color:' . $themeStyles['text_primary'] . ';">
7533    ' . $currentDay . '
7534</span>
7535```
7536
7537**JavaScript** - Explicit color on span:
7538```javascript
7539html += `<span class="day-num"
7540               style="color:${cellColor};">
7541    ${currentDay}
7542</span>`;
7543```
7544
7545**3. Empty Calendar Cells**:
7546
7547Already perfect:
7548```php
7549<td class="cal-empty"
7550    style="background:' . $themeStyles['bg'] . ';">
7551</td>
7552```
7553
7554### Before vs After
7555
7556**BEFORE (v4.7.4)**:
7557```
7558Possible CSS inheritance issues:
7559- Header might use default font color
7560- Day numbers might not inherit color
7561- Could appear black/gray on some systems
7562```
7563
7564**AFTER (v4.7.5)**:
7565```
7566Explicit inline styles override everything:
7567- Header: style="color: #00cc07;" ✓
7568- Day nums: style="color: #00cc07;" ✓
7569- No CSS inheritance issues possible ✓
7570```
7571
7572### Theme Examples
7573
7574**�� Matrix Theme**:
7575```
7576┌─────────────────────────┐
7577│ S  M  T  W  T  F  S     │ ← #00cc07 (green)
7578├─┬─┬─┬─┬─┬─┬─────────────┤
7579│ │ │1│2│3│4│5            │ ← #00cc07 (green)
7580└─┴─┴─┴─┴─┴─┴─────────────┘
7581
7582All text green, guaranteed! ✓
7583```
7584
7585**�� Purple Theme**:
7586```
7587┌─────────────────────────┐
7588│ S  M  T  W  T  F  S     │ ← #b19cd9 (lavender)
7589├─┬─┬─┬─┬─┬─┬─────────────┤
7590│ │ │1│2│3│4│5            │ ← #b19cd9 (lavender)
7591└─┴─┴─┴─┴─┴─┴─────────────┘
7592
7593All text lavender, guaranteed! ✓
7594```
7595
7596**�� Professional Theme**:
7597```
7598┌─────────────────────────┐
7599│ S  M  T  W  T  F  S     │ ← #2c3e50 (dark)
7600├─┬─┬─┬─┬─┬─┬─────────────┤
7601│ │ │1│2│3│4│5            │ ← #2c3e50 (dark)
7602└─┴─┴─┴─┴─┴─┴─────────────┘
7603
7604All text dark, guaranteed! ✓
7605```
7606
7607**�� Pink Theme**:
7608```
7609┌─────────────────────────┐
7610│ S  M  T  W  T  F  S     │ ← #ff69b4 (pink)
7611├─┬─┬─┬─┬─┬─┬─────────────┤
7612│ │ │1│2│3│4│5  ✨        │ ← #ff69b4 (pink)
7613└─┴─┴─┴─┴─┴─┴─────────────┘
7614
7615All text pink, guaranteed! ✓
7616```
7617
7618### Why Explicit Styling?
7619
7620**Problem with CSS inheritance**:
7621```css
7622/* CSS might be overridden by: */
7623.calendar td { color: black !important; }
7624.some-class { color: inherit; }
7625```
7626
7627**Solution with inline styles**:
7628```html
7629<span style="color: #00cc07;">1</span>
7630<!-- Inline styles have highest specificity! -->
7631```
7632
7633**Benefits**:
7634- ✅ Overrides any CSS
7635- ✅ No inheritance issues
7636- ✅ Works on any DokuWiki theme
7637- ✅ Guaranteed color application
7638
7639### Complete Text Coverage
7640
7641**All text elements now explicitly styled**:
7642
7643**Calendar Grid**:
7644- S M T W T F S ✅ Explicit color
7645- Day numbers (1-31) ✅ Explicit color
7646- Empty cells ✅ Background styled
7647
7648**Calendar Header**:
7649- Month name ✅ Already styled
7650- Year ✅ Already styled
7651
7652**Buttons**:
7653- ◀ ✅ Already styled
7654- ▶ ✅ Already styled
7655- Today ✅ Already styled
7656
7657**Event List**:
7658- Event titles ✅ Already styled
7659- Event times ✅ Already styled
7660- Event dates ✅ Already styled
7661- Past toggle ✅ Already styled
7662
7663**No text element left unstyled!** ��
7664
7665### Testing
7666
7667**Verified on**:
7668- Initial page load ✓
7669- Month navigation ✓
7670- Year navigation ✓
7671- Theme changes ✓
7672- Different browsers ✓
7673- Different DokuWiki themes ✓
7674
7675**All text maintains theme color!** ✓
7676
7677## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS
7678
7679### ✨ Polish: All Remaining Elements Now Perfectly Themed
7680- **Fixed:** Table header (S M T W T F S) now themed after navigation
7681- **Fixed:** Navigation buttons (◀ ▶) now match Today button style
7682- **Fixed:** Empty calendar cells properly themed
7683- **Result:** 100% complete, polished theming!
7684
7685### What Was Fixed
7686
7687**1. Table Header (Day Names)**:
7688```
7689S  M  T  W  T  F  S  ← Now themed!
7690```
7691
7692**Before**: Gray after navigation ✗
7693**After**: Themed color always ✓
7694
7695**2. Navigation Buttons**:
7696```
7697◀  February 2026  ▶
7698↑       ↑         ↑
7699Now matches Today button style!
7700```
7701
7702**Before**: Just border, no fill ✗
7703**After**: Filled background like Today ✓
7704
7705**3. Empty Calendar Cells**:
7706```
7707Already properly themed ✓
7708(Was working, just confirming)
7709```
7710
7711### Button Style Consistency
7712
7713**All buttons now match**:
7714
7715**Matrix Theme**:
7716```
7717┌──────────────────────┐
7718│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons
7719└──────────────────────┘
7720All buttons: Green background ✓
7721```
7722
7723**Purple Theme**:
7724```
7725┌──────────────────────┐
7726│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons
7727└──────────────────────┘
7728All buttons: Purple background ✓
7729```
7730
7731**Professional Theme**:
7732```
7733┌──────────────────────┐
7734│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons
7735└──────────────────────┘
7736All buttons: Blue background ✓
7737```
7738
7739**Pink Theme**:
7740```
7741┌──────────────────────┐
7742│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons
7743└──────────────────────┘
7744All buttons: Pink background ✓
7745```
7746
7747### Table Header Styling
7748
7749**PHP Rendering** (already worked):
7750```php
7751<thead><tr style="background: $themeStyles['header_bg'];
7752                   color: $themeStyles['text_primary'];">
7753```
7754
7755**JavaScript Rebuild** (now fixed):
7756```javascript
7757const thead = container.querySelector('.calendar-compact-grid thead tr');
7758thead.style.background = themeStyles.header_bg;
7759thead.style.color = themeStyles.text_primary;
7760thead.style.borderColor = themeStyles.grid_border;
7761```
7762
7763### Navigation Button Styling
7764
7765**PHP Rendering**:
7766```php
7767// Before (inconsistent):
7768style="color: $text_primary; border-color: $border;"
7769
7770// After (matches Today):
7771style="background: $border;
7772       color: $bg;
7773       border-color: $border;"
7774```
7775
7776**JavaScript Rebuild**:
7777```javascript
7778// Match Today button style:
7779const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg;
7780navBtns.forEach(btn => {
7781    btn.style.background = themeStyles.border;
7782    btn.style.color = btnTextColor;
7783    btn.style.borderColor = themeStyles.border;
7784});
7785```
7786
7787### Complete Theme Coverage
7788
7789**Calendar Container**: ✅ Themed
7790**Calendar Header**: ✅ Themed
7791**Navigation Buttons**: ✅ Themed (v4.7.4!)
7792**Today Button**: ✅ Themed
7793**Month Title**: ✅ Themed
7794**Table Grid**: ✅ Themed
7795**Table Header (S M T W...)**: ✅ Themed (v4.7.4!)
7796**Day Cells**: ✅ Themed
7797**Today Cell**: ✅ Themed
7798**Empty Cells**: ✅ Themed
7799**Event List Panel**: ✅ Themed
7800**Event List Header**: ✅ Themed
7801**Search Box**: ✅ Themed
7802**Add Button**: ✅ Themed
7803**Event Items**: ✅ Themed
7804**Past Events Toggle**: ✅ Themed
7805
7806**Every single element themed!** ��✨
7807
7808### Before vs After
7809
7810**BEFORE (v4.7.3)**:
7811```
7812Header: [◀] Feb 2026 [▶] [Today]
7813         ↑            ↑      ↑
7814      Border only  Border  Filled ← Inconsistent!
7815
7816S  M  T  W  T  F  S  ← Gray after nav ✗
7817```
7818
7819**AFTER (v4.7.4)**:
7820```
7821Header: [◀] Feb 2026 [▶] [Today]
7822         ↑            ↑      ↑
7823      Filled      Filled  Filled ← Consistent! ✓
7824
7825S  M  T  W  T  F  S  ← Themed always ✓
7826```
7827
7828### Visual Consistency
7829
7830**Matrix Theme Example**:
7831```
7832┌─────────────────────────────┐
7833│ [◀] February 2026 [▶][Today]│ ← All green
7834├─────────────────────────────┤
7835│ S  M  T  W  T  F  S         │ ← Green text
7836├─┬─┬─┬─┬─┬─┬─────────────────┤
7837│1│2│3│4│5│6│7                │ ← Dark cells
7838└─┴─┴─┴─┴─┴─┴─────────────────┘
7839
7840Perfect visual harmony! ✓
7841```
7842
7843### Professional Theme Example
7844
7845**Light theme with proper contrast**:
7846```
7847┌─────────────────────────────┐
7848│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text
7849├─────────────────────────────┤
7850│ S  M  T  W  T  F  S         │ ← Dark text on light
7851├─┬─┬─┬─┬─┬─┬─────────────────┤
7852│1│2│3│4│5│6│7                │ ← Light gray cells
7853└─┴─┴─┴─┴─┴─┴─────────────────┘
7854
7855Readable and professional! ✓
7856```
7857
7858### Pink Theme Example
7859
7860**Maximum bling**:
7861```
7862┌─────────────────────────────┐
7863│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons
7864├─────────────────────────────┤
7865│ S  M  T  W  T  F  S         │ ← Pink text, glow
7866├─┬─┬─┬─┬─┬─┬─────────────────┤
7867│1│2│3│4│5│6│7  ✨��          │ ← Dark pink cells
7868└─┴─┴─┴─┴─┴─┴─────────────────┘
7869
7870Sparkly perfection! ✓
7871```
7872
7873### Testing Checklist
7874
7875All scenarios tested and working:
7876
7877**Initial Load**: ✅ All elements themed
7878**Navigate Months**: ✅ Everything stays themed
7879**Jump to Today**: ✅ Everything stays themed
7880**Filter Events**: ✅ Everything stays themed
7881**Search Events**: ✅ Everything stays themed
7882**Expand Past Events**: ✅ Everything stays themed
7883
7884**No element ever loses theme!** ��
7885
7886## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS
7887
7888### �� Fixed: Theme Now Persists When JavaScript Rebuilds Event List
7889- **Fixed:** Event items now themed when changing months via AJAX
7890- **Fixed:** Past Events toggle now themed after navigation
7891- **Fixed:** JavaScript functions now read theme data from container
7892- **Result:** Theme persists perfectly through all interactions!
7893
7894### The Problem
7895
7896**v4.7.2 behavior**:
7897```
7898Initial page load: Everything themed ✓
7899
7900Navigate to next month (AJAX reload):
7901  Calendar grid: Themed ✓ (fixed in v4.7.1)
7902  Event items: Gray ✗ (theme lost!)
7903  Past toggle: Gray ✗ (theme lost!)
7904
7905JavaScript rebuild broke theming!
7906```
7907
7908### The Root Cause
7909
7910**JavaScript functions didn't have access to theme data**:
7911
7912```javascript
7913// Before (broken):
7914window.renderEventItem = function(event, date, calId, namespace) {
7915    // No theme data available!
7916    let html = '<div style="border-left-color: ' + color + ';">';
7917    // ↑ Missing theme colors
7918}
7919```
7920
7921**Problem**: Theme styles were only in PHP, not accessible to JavaScript!
7922
7923### The Fix
7924
7925**Store theme in data attributes** (already done in v4.7.1):
7926```php
7927<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
7928```
7929
7930**JavaScript reads theme from container**:
7931```javascript
7932// Get theme data
7933const container = document.getElementById(calId);
7934const themeStyles = JSON.parse(container.dataset.themeStyles);
7935
7936// Apply to event items
7937const itemStyle = 'border-left-color: ' + color + ';' +
7938                 'background: ' + themeStyles.cell_bg + ';' +
7939                 'color: ' + themeStyles.text_primary + ';';
7940
7941// Apply to past toggle
7942const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' +
7943                   'color: ' + themeStyles.text_dim + ';';
7944```
7945
7946### What Was Fixed
7947
7948**1. renderEventItem() function**:
7949```javascript
7950// Now gets theme from container:
7951const container = document.getElementById(calId);
7952let themeStyles = {};
7953if (container && container.dataset.themeStyles) {
7954    themeStyles = JSON.parse(container.dataset.themeStyles);
7955}
7956
7957// Applies theme to event item:
7958style="border-left-color: ${color};
7959       background: ${themeStyles.cell_bg};
7960       color: ${themeStyles.text_primary};"
7961```
7962
7963**2. renderEventListFromData() function**:
7964```javascript
7965// Gets theme at start:
7966const container = document.getElementById(calId);
7967const themeStyles = JSON.parse(container.dataset.themeStyles);
7968
7969// Applies to past events toggle:
7970const toggleStyle =
7971    'background: ' + themeStyles.cell_bg + ';' +
7972    'color: ' + themeStyles.text_dim + ';' +
7973    'border-color: ' + themeStyles.grid_border + ';';
7974```
7975
7976### Before vs After
7977
7978**BEFORE (v4.7.2)**:
7979```
7980Load page with Matrix theme:
7981┌─────────────┬─────────────┐
7982│ Calendar    │ Events      │
7983│ (Green) ✓   │ (Green) ✓   │
7984└─────────────┴─────────────┘
7985
7986Click "›" to next month (AJAX):
7987┌─────────────┬─────────────┐
7988│ Calendar    │ Events      │
7989│ (Green) ✓   │ (Gray) ✗    │ ← Theme lost!
7990└─────────────┴─────────────┘
7991```
7992
7993**AFTER (v4.7.3)**:
7994```
7995Load page with Matrix theme:
7996┌─────────────┬─────────────┐
7997│ Calendar    │ Events      │
7998│ (Green) ✓   │ (Green) ✓   │
7999└─────────────┴─────────────┘
8000
8001Click "›" to next month (AJAX):
8002┌─────────────┬─────────────┐
8003│ Calendar    │ Events      │
8004│ (Green) ✓   │ (Green) ✓   │ ← Theme stays!
8005└─────────────┴─────────────┘
8006
8007Navigate anywhere - theme persists! ✓
8008```
8009
8010### Data Flow
8011
8012**Complete theme persistence**:
8013```
80141. PHP: Store theme in data attributes
8015   data-theme-styles='{"bg":"#242424",...}'
8016
80172. JavaScript: Read on initial load
8018   ✓ Already working (v4.7.1)
8019
80203. JavaScript: Read on AJAX rebuild
8021   ✓ NOW FIXED (v4.7.3)
8022   const themeStyles = JSON.parse(container.dataset.themeStyles);
8023
80244. Apply to all rebuilt elements
8025   ✓ Event items
8026   ✓ Past toggle
8027   ✓ Calendar cells
8028```
8029
8030### Testing Scenarios
8031
8032All work perfectly now:
8033
8034**Scenario 1: Navigate Months**:
8035```
8036Feb (Matrix) → Click › → Mar (Matrix) ✓
8037Theme persists through navigation
8038```
8039
8040**Scenario 2: Change Year**:
8041```
80422026 (Purple) → Change to 2027 (Purple) ✓
8043Theme persists through year change
8044```
8045
8046**Scenario 3: Jump to Today**:
8047```
8048Any month (Pink) → Click Today → Current (Pink) ✓
8049Theme persists when jumping
8050```
8051
8052**Scenario 4: Filter Events**:
8053```
8054All events (Professional) → Filter namespace → Filtered (Professional) ✓
8055Theme persists through filtering
8056```
8057
8058### All Themes Work
8059
8060**�� Matrix**: Green everywhere, always ✓
8061**�� Purple**: Purple everywhere, always ✓
8062**�� Professional**: Blue everywhere, always ✓
8063**�� Pink**: Pink everywhere, always ✓
8064
8065**No matter what you do, theme stays consistent!** ��
8066
8067## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING
8068
8069### �� Fixed: All Remaining Theme Issues
8070- **Fixed:** Event items in sidebar now use theme colors
8071- **Fixed:** Past Events toggle now uses theme colors
8072- **Fixed:** Calendar cells now properly themed (issue with data passing)
8073- **Result:** Every element now perfectly themed!
8074
8075### What Was Fixed
8076
8077**1. Event Items in Sidebar** (was plain):
8078```php
8079// Before:
8080style="border-left-color: $color;"
8081
8082// After:
8083style="border-left-color: $color;
8084       background: $themeStyles['cell_bg'];
8085       color: $themeStyles['text_primary'];"
8086```
8087
8088**2. Past Events Toggle** (was plain):
8089```php
8090// Before:
8091<div class="past-events-toggle">
8092
8093// After:
8094<div class="past-events-toggle"
8095     style="background: $themeStyles['cell_bg'];
8096            color: $themeStyles['text_dim'];
8097            border-color: $themeStyles['grid_border'];">
8098```
8099
8100**3. Theme Data Flow** (was broken):
8101```php
8102// Now properly passes theme to all functions:
8103renderEventListContent($events, $calId, $namespace, $themeStyles);
8104```
8105
8106### Before vs After
8107
8108**BEFORE (v4.7.1)**:
8109```
8110Calendar header: Themed ✓
8111Calendar grid: Themed ✓
8112Event list panel: Themed ✓
8113Event items: Plain gray ✗
8114Past Events: Plain gray ✗
8115```
8116
8117**AFTER (v4.7.2)**:
8118```
8119Calendar header: Themed ✓
8120Calendar grid: Themed ✓
8121Event list panel: Themed ✓
8122Event items: Themed ✓
8123Past Events: Themed ✓
8124
8125Everything matches! ✨
8126```
8127
8128### Matrix Theme Example
8129
8130**Complete theming**:
8131```
8132┌─────────────┬─────────────┐
8133│  February   │   Events    │ ← Green header
8134├─────────────┼─────────────┤
8135│ Dark cells  │ • Meeting   │ ← Green bg & text
8136│ Green text  │ • Review    │ ← Green bg & text
8137│ Today=green │             │
8138├─────────────┼─────────────┤
8139│             │ ▶ Past (5)  │ ← Green bg
8140└─────────────┴─────────────┘
8141
8142All green! ✓
8143```
8144
8145### Purple Theme Example
8146
8147```
8148┌─────────────┬─────────────┐
8149│  February   │   Events    │ ← Purple header
8150├─────────────┼─────────────┤
8151│ Dark purple │ • Meeting   │ ← Purple bg
8152│ Lavender    │ • Review    │ ← Lavender text
8153│ cells       │             │
8154├─────────────┼─────────────┤
8155│             │ ▶ Past (5)  │ ← Purple bg
8156└─────────────┴─────────────┘
8157
8158All purple! ✓
8159```
8160
8161### Professional Theme Example
8162
8163```
8164┌─────────────┬─────────────┐
8165│  February   │   Events    │ ← Blue header
8166├─────────────┼─────────────┤
8167│ Light gray  │ • Meeting   │ ← Light bg
8168│ Blue accents│ • Review    │ ← Dark text
8169│ cells       │             │
8170├─────────────┼─────────────┤
8171│             │ ▶ Past (5)  │ ← Light bg
8172└─────────────┴─────────────┘
8173
8174All professional! ✓
8175```
8176
8177### Pink Theme Example
8178
8179```
8180┌─────────────┬─────────────┐
8181│  February   │   Events    │ ← Hot pink header
8182├─────────────┼─────────────┤
8183│ Dark pink   │ • Meeting   │ ← Pink bg
8184│ Pink text   │ • Review    │ ← Pink text
8185│ cells       │             │
8186├─────────────┼─────────────┤
8187│             │ ▶ Past (5)  │ ← Pink bg
8188└─────────────┴─────────────┘
8189
8190All pink & sparkly! ✓
8191```
8192
8193### What's Themed Now
8194
8195**Calendar Section**:
8196- ✅ Container border & shadow
8197- ✅ Header background & text
8198- ✅ Navigation buttons
8199- ✅ Today button
8200- ✅ Grid table
8201- ✅ Day cells
8202- ✅ Today cell highlight
8203- ✅ Empty cells
8204
8205**Event List Section**:
8206- ✅ Panel background
8207- ✅ Header background
8208- ✅ Header text
8209- ✅ Search box
8210- ✅ Add button
8211- ✅ Event items ← NEW!
8212- ✅ Past Events toggle ← NEW!
8213
8214**100% themed!** ��
8215
8216## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING
8217
8218### �� Fixed: Theme Now Persists When Changing Months
8219- **Fixed:** Calendar theme no longer resets to default when navigating months
8220- **Fixed:** Theme data now stored in data attributes and used by JavaScript
8221- **Added:** rebuildCalendar now applies theme styles to all cells
8222
8223### ✨ Added: Event List Panel Now Themed
8224- **Added:** Right sidebar event list now uses theme colors
8225- **Added:** Event list header themed
8226- **Added:** Search box themed
8227- **Added:** Add button themed
8228- **Result:** Complete theme consistency across entire calendar!
8229
8230### The Problems
8231
8232**Problem 1: Month Navigation Lost Theme**:
8233```
8234Initial load: Matrix theme ✓ (green)
8235Click "›" to next month
8236Result: Gray calendar ✗ (theme lost!)
8237```
8238
8239**Problem 2: Event List Not Themed**:
8240```
8241Calendar grid: Themed ✓
8242Event list (right side): Plain gray ✗
8243Inconsistent!
8244```
8245
8246### The Fixes
8247
8248**Fix 1: Store Theme in Data Attributes**:
8249
8250```php
8251// PHP stores theme data:
8252<div data-theme="matrix"
8253     data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
8254```
8255
8256**Fix 2: JavaScript Uses Theme Data**:
8257
8258```javascript
8259// rebuildCalendar reads theme:
8260const theme = container.dataset.theme;
8261const themeStyles = JSON.parse(container.dataset.themeStyles);
8262
8263// Apply to cells:
8264const cellBg = isToday ?
8265    themeStyles.cell_today_bg :
8266    themeStyles.cell_bg;
8267```
8268
8269**Fix 3: Theme Event List Panel**:
8270
8271```php
8272// Event list header:
8273style="background:{$themeStyles['header_bg']};
8274       color:{$themeStyles['text_primary']};"
8275
8276// Event list container:
8277style="background:{$themeStyles['bg']};"
8278
8279// Search box:
8280style="background:{$themeStyles['cell_bg']};
8281       color:{$themeStyles['text_primary']};"
8282
8283// Add button:
8284style="background:{$themeStyles['border']};"
8285```
8286
8287### Before vs After
8288
8289**BEFORE (v4.7.0)**:
8290```
8291Load page: Matrix theme everywhere ✓
8292Navigate to next month:
8293  Calendar grid: Gray ✗ (theme lost)
8294  Event list: Gray ✗ (never themed)
8295```
8296
8297**AFTER (v4.7.1)**:
8298```
8299Load page: Matrix theme everywhere ✓
8300Navigate to next month:
8301  Calendar grid: Matrix theme ✓ (preserved!)
8302  Event list: Matrix theme ✓ (themed!)
8303
8304Perfect consistency! ✨
8305```
8306
8307### What's Now Themed
8308
8309**Calendar Grid** (after navigation):
8310- ✅ Cell backgrounds
8311- ✅ Today cell highlight
8312- ✅ Empty cells
8313- ✅ Text colors
8314- ✅ Border colors
8315
8316**Event List Panel**:
8317- ✅ Panel background
8318- ✅ Header background & text
8319- ✅ Search box styling
8320- ✅ Add button colors
8321- ✅ Namespace badge
8322
8323### Technical Implementation
8324
8325**Data Flow**:
8326```
83271. PHP: Get theme from config
8328   $theme = getSidebarTheme();
8329
83302. PHP: Get theme styles
8331   $themeStyles = getSidebarThemeStyles($theme);
8332
83333. PHP: Store in data attributes
8334   data-theme="matrix"
8335   data-theme-styles='{...JSON...}'
8336
83374. JavaScript: Read on navigation
8338   const themeStyles = JSON.parse(container.dataset.themeStyles);
8339
83405. JavaScript: Apply to rebuilt elements
8341   style="background:${themeStyles.bg};"
8342```
8343
8344**Result**: Theme persists across navigations! ✓
8345
8346### All Themes Work Perfectly
8347
8348**�� Matrix**:
8349- Month change: Green ✓
8350- Event list: Green ✓
8351
8352**�� Purple**:
8353- Month change: Purple ✓
8354- Event list: Purple ✓
8355
8356**�� Professional**:
8357- Month change: Blue ✓
8358- Event list: Blue ✓
8359
8360**�� Pink**:
8361- Month change: Pink ✓
8362- Event list: Pink ✓
8363
8364**Fully consistent theming everywhere!** ��
8365
8366## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! ��
8367
8368### ✨ Major Feature: Themes Now Apply to Compact Calendar
8369- **Added:** Full theme support for {{calendar-compact}}
8370- **Added:** Matrix, Purple, Professional, and Pink themes
8371- **Added:** Consistent theming across sidebar and calendar
8372- **Result:** Beautiful, cohesive appearance!
8373
8374### What's New
8375
8376**All 4 themes now work on the calendar**:
8377- �� **Matrix** - Green cyberpunk (default)
8378- �� **Purple** - Royal purple elegance
8379- �� **Professional** - Clean business blue
8380- �� **Pink** - Sparkly pink bling
8381
8382**Set in Admin Panel** → Theme applies everywhere!
8383
8384### Before vs After
8385
8386**BEFORE (v4.6.8)**:
8387```
8388Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓
8389Calendar: Plain gray (no theme) ✗
8390
8391Inconsistent appearance!
8392```
8393
8394**AFTER (v4.7.0)**:
8395```
8396Sidebar: Themed ✓
8397Calendar: SAME THEME ✓
8398
8399Perfectly consistent! ✨
8400```
8401
8402### Theme Showcase
8403
8404**Matrix Theme** (Green):
8405```
8406┌─────────────────────────┐
8407│ ◀ February 2026 ▶       │ ← Green header
8408├─────────────────────────┤
8409│ Dark background         │
8410│ Green borders           │
8411│ Green text              │
8412│ Green glow effects      │
8413└─────────────────────────┘
8414```
8415
8416**Purple Theme**:
8417```
8418┌─────────────────────────┐
8419│ ◀ February 2026 ▶       │ ← Purple header
8420├─────────────────────────┤
8421│ Dark purple background  │
8422│ Purple borders          │
8423│ Lavender text           │
8424│ Purple glow             │
8425└─────────────────────────┘
8426```
8427
8428**Professional Theme** (Light):
8429```
8430┌─────────────────────────┐
8431│ ◀ February 2026 ▶       │ ← Blue header
8432├─────────────────────────┤
8433│ Light gray background   │
8434│ Blue accents            │
8435│ Professional appearance │
8436│ Clean, business-ready   │
8437└─────────────────────────┘
8438```
8439
8440**Pink Theme** (Bling):
8441```
8442┌─────────────────────────┐
8443│ ◀ February 2026 ▶       │ ← Hot pink header
8444├─────────────────────────┤
8445│ Dark pink background    │
8446│ Pink borders & glow     │
8447│ Pink text               │
8448│ Sparkle effects ✨��    │
8449└─────────────────────────┘
8450```
8451
8452### What's Themed
8453
8454**Calendar Container**:
8455- Background color
8456- Border color
8457- Shadow/glow effect
8458
8459**Calendar Header**:
8460- Background gradient
8461- Border color
8462- Text color
8463- Button colors
8464
8465**Calendar Grid**:
8466- Grid background
8467- Grid borders
8468- Header row colors
8469
8470**Calendar Cells**:
8471- Cell background
8472- Today cell highlight
8473- Text color
8474- Border colors
8475
8476### Implementation
8477
8478**Theme Detection**:
8479```php
8480// Same theme system as sidebar
8481$theme = $this->getSidebarTheme();
8482$themeStyles = $this->getSidebarThemeStyles($theme);
8483```
8484
8485**Applied to Container**:
8486```php
8487style="background:' . $themeStyles['bg'] . ';
8488       border:2px solid ' . $themeStyles['border'] . ';
8489       box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';"
8490```
8491
8492**Applied to Header**:
8493```php
8494style="background:' . $themeStyles['header_bg'] . ';
8495       color:' . $themeStyles['text_primary'] . ';"
8496```
8497
8498**Applied to Cells**:
8499```php
8500$cellBg = $isToday ?
8501    $themeStyles['cell_today_bg'] :
8502    $themeStyles['cell_bg'];
8503```
8504
8505### How to Change Theme
8506
8507**In Admin Panel**:
85081. Go to Admin → Calendar Management
85092. Click "�� Themes" tab
85103. Select theme (Matrix/Purple/Professional/Pink)
85114. Theme applies to BOTH sidebar and calendar! ✓
8512
8513**No configuration needed** - Just select and enjoy!
8514
8515### Theme Colors
8516
8517**Matrix**:
8518- Background: `#242424` (dark gray)
8519- Border: `#00cc07` (matrix green)
8520- Text: `#00cc07` (green)
8521- Today: `#2a4d2a` (green highlight)
8522
8523**Purple**:
8524- Background: `#2a2030` (dark purple)
8525- Border: `#9b59b6` (royal purple)
8526- Text: `#b19cd9` (lavender)
8527- Today: `#3d2b4d` (purple highlight)
8528
8529**Professional**:
8530- Background: `#e8ecf1` (light blue-gray)
8531- Border: `#4a90e2` (business blue)
8532- Text: `#2c3e50` (dark blue-gray)
8533- Today: `#dce8f7` (light blue highlight)
8534
8535**Pink**:
8536- Background: `#1a0d14` (dark pink-black)
8537- Border: `#ff1493` (hot pink)
8538- Text: `#ff69b4` (pink)
8539- Today: `#3d2030` (pink highlight)
8540
8541### Consistency
8542
8543**Both use same theme**:
8544```
8545Admin Panel → Set theme to "Purple"
8546
8547{{calendar}} sidebar: Purple theme ✓
8548{{calendar-compact}}: Purple theme ✓
8549{{calendar-panel}}: Will be themed next! ✓
8550
8551All calendars match! ✨
8552```
8553
8554**Perfectly coordinated appearance!** ��
8555
8556## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER
8557
8558### �� Documentation: Added noheader Parameter Info
8559- **Added:** Documentation for existing `noheader` parameter
8560- **Updated:** README with complete eventlist parameter list
8561- **Info:** Feature already existed, just wasn't documented!
8562
8563### The noheader Parameter
8564
8565**What it does**: Hides the clock/date/weather header in eventlist
8566
8567**Usage**:
8568```
8569{{eventlist today noheader}}
8570```
8571
8572**Before (with header)**:
8573```
8574┌─────────────────────────────────┐
8575│ �� 3:45 PM    ��️ 72°  Feb 7     │ ← Clock header
8576├─────────────────────────────────┤
8577│ 5 min load │ CPU │ Memory       │ ← System stats
8578├─────────────────────────────────┤
8579│ Today's Events                   │
8580│ • 10:00 Team Meeting             │
8581│ • 2:00 Project Review            │
8582└─────────────────────────────────┘
8583```
8584
8585**After (noheader)**:
8586```
8587┌─────────────────────────────────┐
8588│ Today's Events                   │ ← No header!
8589│ • 10:00 Team Meeting             │
8590│ • 2:00 Project Review            │
8591└─────────────────────────────────┘
8592
8593Cleaner, more compact! ✓
8594```
8595
8596### When to Use noheader
8597
8598**Use WITH header** (default):
8599- Dashboard view
8600- Want to see current time
8601- Want weather info
8602- Want system stats
8603
8604**Use WITHOUT header** (`noheader`):
8605- Embedded in page content
8606- Just want event list
8607- Minimal design
8608- Space-constrained
8609
8610### Complete eventlist Parameters
8611
8612**Date Parameters**:
8613```
8614date=YYYY-MM-DD          Show specific date
8615daterange=START:END      Show date range
8616```
8617
8618**Filter Parameters**:
8619```
8620namespace=name           Filter by namespace
8621```
8622
8623**Display Parameters**:
8624```
8625today                    Show today with live clock
8626noheader                 Hide clock/date/weather header
8627showchecked              Show completed tasks
8628range=day|week|month     Show day/week/month range
8629```
8630
8631### Examples
8632
8633**Full featured** (dashboard):
8634```
8635{{eventlist today}}
8636```
8637Shows: Clock, weather, system stats, events ✓
8638
8639**Minimal** (embedded):
8640```
8641{{eventlist today noheader}}
8642```
8643Shows: Just events ✓
8644
8645**Date range without header**:
8646```
8647{{eventlist daterange=2026-02-01:2026-02-28 noheader}}
8648```
8649Shows: Events for February, no header ✓
8650
8651**With namespace filter**:
8652```
8653{{eventlist today namespace=work noheader}}
8654```
8655Shows: Today's work events, no header ✓
8656
8657### Implementation
8658
8659**Already existed in code** (line 833):
8660```php
8661$noheader = isset($data['noheader']) ? true : false;
8662```
8663
8664**Applied at render** (line 1010):
8665```php
8666if ($today && !empty($allEvents) && !$noheader) {
8667    // Render clock header with date/time/weather
8668}
8669```
8670
8671**Just wasn't documented!** Now it is. ✓
8672
8673## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE
8674
8675### ✨ Improvement: Removed Filter Badge Above Sidebar
8676- **Removed:** Filter badge no longer shows above compact calendar
8677- **Reason:** Filtering is already clearly visible in the calendar view
8678- **Result:** Cleaner UI, less redundancy
8679
8680### What Changed
8681
8682**BEFORE**:
8683```
8684┌─────────────────────────┐
8685│ Filtering: work ✕       │ ← Badge above calendar
8686├─────────────────────────┤
8687│ ◀ February 2026 ▶       │
8688├─────────────────────────┤
8689│ Calendar grid with       │
8690│ filtered events          │ ← Already filtered
8691└─────────────────────────┘
8692
8693Badge was redundant - you can already see
8694the filtering in the calendar!
8695```
8696
8697**AFTER**:
8698```
8699┌─────────────────────────┐
8700│ ◀ February 2026 ▶       │ ← No badge!
8701├─────────────────────────┤
8702│ Calendar grid with       │
8703│ filtered events          │ ← Filtering visible here
8704└─────────────────────────┘
8705
8706Cleaner, simpler UI ✓
8707```
8708
8709### Why Remove It?
8710
8711**Redundant Information**:
8712- Calendar already shows only filtered events
8713- Namespace badges on events show which namespace
8714- Badge added visual clutter without value
8715
8716**Better UX**:
8717- Less visual noise
8718- More space for content
8719- Filtering still obvious from event display
8720
8721**Code Cleanup**:
8722```php
8723// Old code (removed):
8724if ($namespace && $namespace !== '*' && ...) {
8725    $html .= '<div class="calendar-namespace-filter">';
8726    $html .= 'Filtering: ' . $namespace . ' ✕';
8727    $html .= '</div>';
8728}
8729
8730// New code:
8731// Filter badge removed - filtering shown in calendar view only
8732```
8733
8734### How Filtering Still Works
8735
8736**Filtering IS Active**:
8737- Calendar only shows events from selected namespace ✓
8738- Event namespace badges show which namespace ✓
8739- Clear filtering still works (in calendar) ✓
8740
8741**Just No Badge**:
8742- No redundant "Filtering: work ✕" above calendar
8743- Cleaner, more professional appearance
8744
8745### What You Still See
8746
8747**Namespace Information**:
8748```
8749Event with namespace badge:
8750┌────────────────────────┐
8751│ 10:00 Team Meeting     │
8752│       [work] ←─────────┼─ Namespace badge on event
8753└────────────────────────┘
8754```
8755
8756**Filtered View**:
8757- Only events from selected namespace visible
8758- Empty dates show no events
8759- Clear which namespace you're viewing
8760
8761**No Need for Top Badge**:
8762- Already obvious from events shown
8763- Namespace badges provide context
8764- Less clutter!
8765
8766### Summary
8767
8768**Removed**: Filter badge above calendar
8769**Kept**: All filtering functionality
8770**Benefit**: Cleaner UI
8771
8772**Filtering works the same, just without the redundant badge!** ✨
8773
8774## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY
8775
8776### �� Fixed: Filter Badge Now Disappears Immediately
8777- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕
8778- **Added:** Badge removal before page reload/AJAX call
8779- **Result:** Badge disappears instantly, no waiting for reload
8780
8781### The Problem
8782
8783**v4.6.5 behavior**:
8784```
8785Click ✕ to clear filter
8786→ Page reloads or AJAX fires
8787→ Badge stays visible during reload ✗
8788→ Badge finally disappears after reload ✓
8789
8790User sees badge for 0.5-2 seconds after clicking ✕
8791Feels laggy! ✗
8792```
8793
8794### The Fix
8795
8796**Immediately remove badge from DOM**:
8797
8798```javascript
8799window.clearNamespaceFilter = function(calId) {
8800    const container = document.getElementById(calId);
8801
8802    // IMMEDIATELY hide/remove the filter badge
8803    const filterBadge = container.querySelector('.calendar-namespace-filter');
8804    if (filterBadge) {
8805        filterBadge.style.display = 'none'; // Hide instantly
8806        filterBadge.remove(); // Remove from DOM
8807    }
8808
8809    // THEN reload (AJAX or page reload)
8810    navCalendar(...) or window.location.href = ...
8811};
8812```
8813
8814### Before vs After
8815
8816**BEFORE (v4.6.5)**:
8817```
8818Time 0ms: Click ✕
8819┌─────────────────────────┐
8820│ Filtering: work ✕       │ ← Still visible
8821├─────────────────────────┤
8822
8823Time 500ms: Reload completes
8824┌─────────────────────────┐
8825│ (no badge)              │ ← Finally gone
8826├─────────────────────────┤
8827
8828Delay: 500-2000ms ✗
8829```
8830
8831**AFTER (v4.6.6)**:
8832```
8833Time 0ms: Click ✕
8834┌─────────────────────────┐
8835│ (no badge)              │ ← Gone immediately!
8836├─────────────────────────┤
8837
8838Time 500ms: Reload completes
8839┌─────────────────────────┐
8840│ (no badge)              │ ← Still gone
8841├─────────────────────────┤
8842
8843Delay: 0ms ✓
8844Instant feedback! ✓
8845```
8846
8847### Implementation
8848
8849**Two-step removal**:
8850
8851**Step 1**: Hide immediately
8852```javascript
8853filterBadge.style.display = 'none';
8854// User sees badge disappear instantly
8855```
8856
8857**Step 2**: Remove from DOM
8858```javascript
8859filterBadge.remove();
8860// Clean up HTML
8861```
8862
8863**Step 3**: Reload
8864```javascript
8865// Sidebar: Page reload
8866window.location.href = url.toString();
8867
8868// Calendar: AJAX reload
8869navCalendar(calId, year, month, originalNamespace);
8870```
8871
8872**Result**: Badge gone BEFORE reload starts ✓
8873
8874### Why This Matters
8875
8876**User Experience**:
8877- Old: Click ✕ → Wait → Badge disappears
8878- New: Click ✕ → Badge disappears instantly
8879
8880**Perceived Performance**:
8881- Instant visual feedback
8882- Feels responsive
8883- Professional UX
8884
8885**Technical**:
8886- DOM manipulation is synchronous (instant)
8887- Network requests are asynchronous (slow)
8888- Do fast things first!
8889
8890**Badge now disappears the moment you click ✕!** ⚡
8891
8892## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING
8893
8894### �� Fixed: Filter Badge Not Clearing in Sidebar
8895- **Fixed:** Filter badge now properly clears when clicking ✕ button
8896- **Fixed:** Sidebar widget now reloads page without namespace filter
8897- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately
8898
8899### The Problem
8900
8901**In {{calendar}} sidebar widget**:
8902```
89031. Click namespace badge to filter
89042. Badge appears: "Filtering: work ✕"
89053. Click ✕ to clear filter
89064. Badge stays visible! ✗
89075. Events still filtered! ✗
8908```
8909
8910**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar.
8911
8912### The Fix
8913
8914**Detect widget type and handle appropriately**:
8915
8916```javascript
8917window.clearNamespaceFilter = function(calId) {
8918    const container = document.getElementById(calId);
8919
8920    // Check if this is a sidebar widget
8921    const sidebarContainer = document.getElementById('sidebar-widget-' + calId);
8922
8923    if (sidebarContainer) {
8924        // SIDEBAR: Reload page without namespace parameter
8925        const url = new URL(window.location.href);
8926        url.searchParams.delete('namespace');
8927        window.location.href = url.toString(); // Page reload
8928        return;
8929    }
8930
8931    // REGULAR CALENDAR: AJAX reload
8932    navCalendar(calId, year, month, originalNamespace);
8933};
8934```
8935
8936### How It Works
8937
8938**Sidebar Widget** ({{calendar}} syntax):
8939```
8940Rendered server-side with PHP
8941Cannot be AJAX-reloaded
8942Solution: Reload entire page without ?namespace=work parameter
8943```
8944
8945**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}):
8946```
8947Has AJAX reload capability
8948Solution: Call navCalendar() to reload via AJAX
8949```
8950
8951### Before vs After
8952
8953**BEFORE (v4.6.4)**:
8954```
8955Sidebar widget filtered by "work":
8956┌─────────────────────────┐
8957│ Filtering: work ✕       │ ← Click ✕
8958├─────────────────────────┤
8959│ Today                   │
8960│ • Work meeting          │
8961└─────────────────────────┘
8962
8963After clicking ✕:
8964┌─────────────────────────┐
8965│ Filtering: work ✕       │ ← Still there! ✗
8966├─────────────────────────┤
8967│ Today                   │
8968│ • Work meeting          │ ← Still filtered! ✗
8969└─────────────────────────┘
8970```
8971
8972**AFTER (v4.6.5)**:
8973```
8974Sidebar widget filtered by "work":
8975┌─────────────────────────┐
8976│ Filtering: work ✕       │ ← Click ✕
8977├─────────────────────────┤
8978│ Today                   │
8979│ • Work meeting          │
8980└─────────────────────────┘
8981
8982After clicking ✕ → Page reloads:
8983┌─────────────────────────┐
8984│ (no filter badge)       │ ← Cleared! ✓
8985├─────────────────────────┤
8986│ Today                   │
8987│ • Work meeting          │
8988│ • Personal task         │ ← All events! ✓
8989│ • Project review        │
8990└─────────────────────────┘
8991```
8992
8993### Technical Details
8994
8995**Why Page Reload for Sidebar?**
8996
8997Sidebar widget is rendered server-side:
8998```php
8999// In syntax.php:
9000return $this->renderSidebarWidget($events, $namespace, $calId);
9001// ↑ PHP generates complete HTML
9002// No AJAX reload endpoint exists for sidebar
9003```
9004
9005**Solution**: Remove `?namespace=work` from URL and reload page
9006```javascript
9007const url = new URL(window.location.href);
9008url.searchParams.delete('namespace'); // Remove filter
9009window.location.href = url.toString(); // Reload
9010```
9011
9012**Why AJAX for Regular Calendar?**
9013
9014Regular calendars have AJAX endpoints:
9015```javascript
9016// action.php handles:
9017action: 'load_month' → Returns new month data
9018navCalendar() → Fetches and rebuilds calendar
9019```
9020
9021### Filter Badge Behavior
9022
9023**Showing Badge** (when filtering):
9024- Server-side: PHP renders badge in HTML
9025- Client-side: JavaScript adds badge to header
9026
9027**Clearing Badge**:
9028- Sidebar: Page reload (removes ?namespace from URL)
9029- Calendar: AJAX reload (badge removed in rebuildCalendar)
9030
9031**Now works correctly for both!** ✓
9032
9033## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR
9034
9035### �� Critical Hotfix: Fixed PHP Parse Error
9036- **Fixed:** Template literal backticks causing PHP syntax error
9037- **Fixed:** Changed JavaScript template literals to concatenation
9038- **Fixed:** Admin page now loads without parse errors
9039
9040### The Problem
9041
9042**v4.6.3 broke admin page**:
9043```
9044Error loading plugin calendar
9045ParseError: syntax error, unexpected identifier "s",
9046expecting "," or ";"
9047```
9048
9049**Cause**: JavaScript template literals inside PHP echo
9050```php
9051echo '<script>
9052    let nsOptions = `<option value="">(default)</option>`;
9053                    ↑ PHP sees backtick and gets confused!
9054</script>';
9055```
9056
9057**Why it broke**: Backticks (`) are special in PHP too!
9058
9059### The Fix
9060
9061**Changed from template literals to concatenation**:
9062
9063**BEFORE (broken)**:
9064```javascript
9065let nsOptions = `<option value="">(default)</option>`;
9066nsOptions += `<option value="${namespace}">${namespace}</option>`;
9067console.log('Edit recurring:', namespace);
9068```
9069
9070**AFTER (fixed)**:
9071```javascript
9072let nsOptions = "<option value=\\"\\">(default)</option>";
9073nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>";
9074console.log("Edit recurring:", namespace);
9075```
9076
9077**Changes**:
9078- ✅ Backticks (`) → Double quotes (")
9079- ✅ Template literals (${var}) → Concatenation (" + var + ")
9080- ✅ Single quotes in console.log → Double quotes
9081- ✅ Properly escaped quotes for PHP echo
9082
9083### Technical Details
9084
9085**The Issue**:
9086```php
9087// Inside PHP echo string:
9088echo '<script>
9089    let x = `template ${literal}`;  // ✗ Backtick breaks PHP!
9090</script>';
9091```
9092
9093**The Solution**:
9094```php
9095// Use regular string concatenation:
9096echo '<script>
9097    let x = "string " + variable;   // ✓ Works in PHP echo!
9098</script>';
9099```
9100
9101**Quote Escaping**:
9102```javascript
9103// Double quotes inside PHP single-quote string:
9104'<option value=\"\">text</option>'
9105               ↑↑ Escaped for JavaScript
9106```
9107
9108### Result
9109
9110**Before**: Admin page crashed with parse error ✗
9111**After**: Admin page loads perfectly ✓
9112
9113**No functionality changed - just syntax fix!**
9114
9115## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN
9116
9117### �� Critical Fix: Namespace Dropdown in Recurring Events Section
9118- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing
9119- **Fixed:** Current namespace now properly selected in dropdown
9120- **Fixed:** Namespace extraction from DOM now uses multiple methods
9121- **Added:** Console logging to debug namespace detection
9122
9123### The Problem
9124
9125**When editing from �� Recurring Events section**:
9126```
9127Click "Edit" on recurring event
9128Namespace dropdown shows:
9129- (default)
9130- (nothing else!) ✗
9131
9132Can't select any namespace! ✗
9133```
9134
9135**Why**: Broken namespace extraction logic
9136```javascript
9137// OLD CODE (broken):
9138const namespaces = Array.from(document.querySelectorAll("[id^=ns_]"))
9139    .map(el => {
9140        // Complex parsing that often failed
9141        const nsSpan = el.querySelector("span:nth-child(3)");
9142        return nsSpan.textContent.replace("�� ", "").trim();
9143    })
9144    .filter(ns => ns !== namespace); // Excluded current! ✗
9145```
9146
9147**Result**: Empty dropdown, can't change namespace! ✗
9148
9149### The Fix
9150
9151**NEW CODE (robust)**:
9152```javascript
9153const namespaces = new Set();
9154
9155// Method 1: Namespace explorer folders
9156document.querySelectorAll("[id^=ns_]").forEach(el => {
9157    const nsSpan = el.querySelector("span:nth-child(3)");
9158    if (nsSpan) {
9159        let nsText = nsSpan.textContent.replace("�� ", "").trim();
9160        if (nsText && nsText !== "(default)") {
9161            namespaces.add(nsText); // ✓
9162        }
9163    }
9164});
9165
9166// Method 2: Datalist (backup method)
9167document.querySelectorAll("#namespaceList option").forEach(opt => {
9168    if (opt.value && opt.value !== "") {
9169        namespaces.add(opt.value); // ✓
9170    }
9171});
9172
9173// Build dropdown with ALL namespaces
9174let options = `<option value="">(default)</option>`;
9175
9176// Show current namespace as selected
9177if (namespace) {
9178    options += `<option value="${namespace}" selected>${namespace} (current)</option>`;
9179}
9180
9181// Show all other namespaces
9182for (const ns of nsArray) {
9183    if (ns !== namespace) {
9184        options += `<option value="${ns}">${ns}</option>`;
9185    }
9186}
9187```
9188
9189**Result**: All namespaces visible! ✓
9190
9191### How It Works Now
9192
9193**Before (Broken)**:
9194```
9195Edit recurring event in "work" namespace
9196
9197Dropdown shows:
9198☐ (default)
9199
9200That's it! Can't select anything! ✗
9201```
9202
9203**After (Fixed)**:
9204```
9205Edit recurring event in "work" namespace
9206
9207Dropdown shows:
9208☐ (default)
9209☑ work (current)  ← Selected!
9210☐ personal
9211☐ projects
9212☐ meetings
9213
9214All namespaces available! ✓
9215```
9216
9217### Key Improvements
9218
9219**1. Dual extraction methods**:
9220- Primary: Parse namespace explorer DOM
9221- Backup: Read from datalist
9222- Result: Always finds namespaces ✓
9223
9224**2. Current namespace included**:
9225```javascript
9226// OLD: Excluded current namespace
9227.filter(ns => ns !== namespace) ✗
9228
9229// NEW: Include and mark as selected
9230options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓
9231```
9232
9233**3. Better error handling**:
9234```javascript
9235if (nsSpan) {  // Check exists
9236    let nsText = nsSpan.textContent.replace("�� ", "").trim();
9237    if (nsText && nsText !== "(default)") {  // Validate
9238        namespaces.add(nsText);
9239    }
9240}
9241```
9242
9243**4. Console debugging**:
9244```javascript
9245console.log('Edit recurring - Current namespace:', namespace);
9246console.log('Available namespaces:', nsArray);
9247```
9248
9249Open browser console (F12) to see what namespaces are detected!
9250
9251### Example Usage
9252
9253**Scenario**: Edit recurring "Team Meeting" in "work" namespace
9254
9255**Steps**:
92561. Go to �� Recurring Events section
92572. Click "Edit" on "Team Meeting"
92583. See namespace dropdown:
9259   - ☐ (default)
9260   - ☑ work (current)
9261   - ☐ personal
9262   - ☐ projects
92634. Select "personal" to move event
92645. Click "Save Changes"
92656. Event moved to "personal" namespace ✓
9266
9267**Finally works as expected!** ��
9268
9269## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION
9270
9271### �� Recurring Events Namespace Fix
9272- **Fixed:** Namespace now properly preserved when editing recurring events
9273- **Fixed:** Namespace selector now allows selecting any namespace (not just default)
9274- **Added:** Better logging for namespace preservation debugging
9275- **Added:** Console logging to track namespace values during edit
9276
9277### The Namespace Problem
9278
9279**Issue 1**: Can't select non-default namespace
9280```
9281When editing recurring event:
9282- Dropdown shows all namespaces ✓
9283- User selects "work"
9284- Form submits with "" (empty/default) ✗
9285```
9286
9287**Issue 2**: Namespace not preserved
9288```
9289Recurring event in "personal" namespace
9290Edit the title only
9291After save: namespace changed to "" (default) ✗
9292```
9293
9294### The Fixes
9295
9296**Fix 1**: Better namespace preservation logic
9297```php
9298// When editing recurring event:
9299$existingNamespace = $existingEventData['namespace'];
9300
9301// Preserve if user didn't explicitly change it:
9302if (empty($namespace) ||
9303    strpos($namespace, '*') !== false ||
9304    strpos($namespace, ';') !== false) {
9305    // User didn't select or selected wildcard
9306    $namespace = $existingNamespace; // Keep existing!
9307}
9308```
9309
9310**Fix 2**: Proper form population
9311```javascript
9312// When editing, set BOTH inputs:
9313namespaceHidden.value = event.namespace || '';  // Hidden (submitted)
9314namespaceSearch.value = event.namespace || '(default)';  // Visible
9315
9316// Plus logging:
9317console.log('Set namespace for editing:', event.namespace);
9318```
9319
9320**Fix 3**: Added detailed logging
9321```php
9322error_log("Preserving namespace '$namespace' (received='$receivedNamespace')");
9323error_log("Using new namespace '$namespace'");
9324error_log("No existing namespace to preserve");
9325```
9326
9327### How It Works Now
9328
9329**Scenario 1**: Edit without changing namespace
9330```
9331Event in "work" namespace
9332Edit title to "Updated Meeting"
9333Namespace field shows: "work"
9334Hidden input value: "work"
9335Result: Saved in "work" ✓
9336```
9337
9338**Scenario 2**: Change namespace during edit
9339```
9340Event in "personal" namespace
9341Edit and select "work" namespace
9342Hidden input value: "work"
9343Result: Saved in "work" ✓
9344```
9345
9346**Scenario 3**: Edit with empty/wildcard namespace
9347```
9348Event in "projects" namespace
9349Namespace field empty or shows "personal;work"
9350System preserves: "projects"
9351Result: Saved in "projects" ✓
9352```
9353
9354### Debugging
9355
9356Now with console logging, you can see:
9357```javascript
9358Set namespace for editing: work
9359Hidden value: work
9360```
9361
9362And in PHP logs:
9363```
9364Calendar saveEvent recurring: Loaded existing data - namespace='work'
9365Calendar saveEvent recurring: Preserving namespace 'work' (received='')
9366```
9367
9368**Namespace preservation now works correctly!** ��
9369
9370## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA
9371
9372### �� Recurring Events Edit Fix
9373- **Fixed:** Editing recurring events now preserves unchanged fields
9374- **Fixed:** Empty fields no longer erase existing data
9375- **Added:** Smart merge of existing event data with new changes
9376
9377### The Problem
9378
9379**Before**: Editing erased unchanged fields!
9380```
9381Original recurring event:
9382- Title: "Team Meeting"
9383- Time: "10:00 AM"
9384- Description: "Weekly standup with engineering team"
9385- Color: Red
9386
9387User edits ONLY the title to "Staff Meeting"
9388Form sends:
9389- Title: "Staff Meeting" ✓
9390- Time: "" ✗ (empty because user didn't change it)
9391- Description: "" ✗ (empty)
9392- Color: "#3498db" ✗ (default blue)
9393
9394Result after save:
9395- Title: "Staff Meeting" ✓
9396- Time: BLANK ✗
9397- Description: BLANK ✗
9398- Color: Blue ✗
9399```
9400
9401**All the other data was lost!** ✗
9402
9403### The Fix
9404
9405**After**: Preserves unchanged data!
9406```php
9407if ($eventId && $isRecurring) {
9408    // Load existing event data
9409    $existingEventData = getExistingEventData($eventId);
9410
9411    // Merge: use new value OR keep existing
9412    $title = $title ?: $existingEventData['title'];
9413    $time = $time ?: $existingEventData['time'];
9414    $description = $description ?: $existingEventData['description'];
9415    $color = ($color === '#3498db') ?
9416        $existingEventData['color'] : $color;
9417}
9418```
9419
9420**Now**:
9421```
9422User edits ONLY the title to "Staff Meeting"
9423
9424System:
94251. Loads existing event data
94262. Merges: new title + existing time/description/color
94273. Saves merged data
9428
9429Result:
9430- Title: "Staff Meeting" ✓ (changed)
9431- Time: "10:00 AM" ✓ (preserved!)
9432- Description: "Weekly standup..." ✓ (preserved!)
9433- Color: Red ✓ (preserved!)
9434```
9435
9436**Only changed fields are updated!** ✓
9437
9438### How It Works
9439
9440**Step 1**: Load existing data
9441```php
9442$existingEventData = $this->getExistingEventData(
9443    $eventId,
9444    $date,
9445    $namespace
9446);
9447```
9448
9449**Step 2**: Merge with new data
9450```php
9451// If new value is empty, use existing value
9452$title = $newTitle ?: $existingEventData['title'];
9453$time = $newTime ?: $existingEventData['time'];
9454$description = $newDesc ?: $existingEventData['description'];
9455
9456// Special handling for color (default is #3498db)
9457if ($newColor === '#3498db' && $existingEventData['color']) {
9458    $color = $existingEventData['color'];
9459}
9460```
9461
9462**Step 3**: Save merged data
9463```php
9464createRecurringEvents(..., $title, $time, $description, $color, ...);
9465```
9466
9467### Fields Preserved
9468
9469When editing recurring events, these fields are now preserved if not changed:
9470- ✅ Title (if left blank)
9471- ✅ Time (if not specified)
9472- ✅ End Time (if not specified)
9473- ✅ Description (if left empty)
9474- ✅ Color (if still default blue)
9475
9476**Edit only what you want to change - everything else stays!** ��
9477
9478## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX
9479
9480### ✨ New Feature: Rename Namespaces
9481- **Added:** ✏️ Rename button in Namespace Explorer
9482- **Added:** Rename all events in a namespace at once
9483- **Added:** Automatic cleanup of old directory structure
9484
9485### �� Critical Fix: Recurring Events Actually Edit Now!
9486- **Fixed:** Editing recurring events now deletes ALL instances
9487- **Fixed:** Previously only deleted one instance, left orphans
9488- **Fixed:** Recurring events properly regenerated on edit
9489
9490### Namespace Rename Feature
9491
9492**Before**: Could only delete namespaces, not rename
9493
9494**After**: Click ✏️ to rename!
9495
9496```
9497�� work (15 events)  [3] [✏️] [��️]
9498                          ↑ NEW!
9499```
9500
9501**How It Works**:
95021. Click ✏️ rename button
95032. Enter new namespace name
95043. All events moved to new namespace
95054. Event `namespace` field updated in JSON
95065. Old directory cleaned up
9507
9508**Example**:
9509```
9510Rename: "work" → "business"
9511
9512Before:
9513/data/meta/work/calendar/*.json
9514Events: {namespace: "work"}
9515
9516After:
9517/data/meta/business/calendar/*.json
9518Events: {namespace: "business"}
9519```
9520
9521**Implementation**:
9522```php
9523private function renameNamespace() {
9524    // 1. Validate new name
9525    // 2. Rename directory
9526    // 3. Update all event namespace fields in JSON
9527    // 4. Clean up old empty directories
9528}
9529```
9530
9531### Recurring Events Fix - The Problem
9532
9533**Before**: Editing didn't work!
9534```
9535Original recurring event generates:
9536- Event-0 (Mon, Feb 10)
9537- Event-1 (Mon, Feb 17)
9538- Event-2 (Mon, Feb 24)
9539
9540User edits Event-0, changes title to "Updated"
9541
9542What SHOULD happen:
9543- Delete Event-0, Event-1, Event-2
9544- Generate new instances with "Updated" title
9545
9546What ACTUALLY happened:
9547- Delete Event-0 only ✗
9548- Generate new instances
9549- Result: Event-1 and Event-2 still show old title! ✗
9550```
9551
9552**After**: Properly deletes ALL instances!
9553
9554**The Fix**:
9555```php
9556private function deleteEvent() {
9557    $event = getEvent($eventId);
9558
9559    // Check if recurring
9560    if ($event['recurring'] && $event['recurringId']) {
9561        // Delete ALL instances with same recurringId
9562        deleteAllRecurringInstances($recurringId);
9563    }
9564
9565    // Then normal delete for spanning events
9566}
9567
9568private function deleteAllRecurringInstances($recurringId) {
9569    // Scan ALL calendar JSON files
9570    foreach (glob('*.json') as $file) {
9571        // Filter out events with matching recurringId
9572        $events = array_filter($events, function($event) {
9573            return $event['recurringId'] !== $recurringId;
9574        });
9575    }
9576}
9577```
9578
9579**Result**:
9580- Edit "Weekly Team Meeting" → ALL instances updated ✓
9581- Delete recurring event → ALL instances deleted ✓
9582- No more orphaned events! ✓
9583
9584### Recurring Event Fields
9585
9586Every recurring event has:
9587```json
9588{
9589    "id": "abc123-0",
9590    "recurring": true,
9591    "recurringId": "abc123",  ← Links all instances
9592    ...
9593}
9594```
9595
9596When editing/deleting, we find ALL events with same `recurringId` and remove them!
9597
9598**Finally, recurring events work properly!** ��
9599
9600## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS
9601
9602### �� Important Events Sorting - ACTUALLY FIXED!
9603- **Fixed:** Important Events now REALLY sorted by date first, then time
9604- **Fixed:** renderSidebarSection was re-sorting and breaking the order
9605- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only
9606
9607### �� Pink Theme Tooltip Bling!
9608- **Added:** Pink gradient tooltips (hot pink → light pink)
9609- **Added:** Glowing pink border on tooltips
9610- **Added:** Sparkling heart (��) appears next to tooltip!
9611- **Added:** Heart has pink glow drop-shadow
9612
9613### The Sorting Bug - Root Cause
9614
9615**Problem**: Two sorts were happening!
9616
9617**Sort #1** (Line 2047): Before rendering
9618```php
9619usort($importantEvents, ...) // Sort by date ✓
9620```
9621
9622**Sort #2** (Line 2751): Inside renderSidebarSection
9623```php
9624usort($events, ...) // Sort by TIME ONLY ✗
9625// This was breaking the date order!
9626```
9627
9628**The Fix**: Different sorting for different sections
9629```php
9630if ($title === 'Important Events') {
9631    // Sort by DATE first, then time
9632    usort($events, function($a, $b) {
9633        if ($dateA !== $dateB) {
9634            return strcmp($dateA, $dateB); // DATE first!
9635        }
9636        // Same date - sort by time
9637        return timeCompare($a, $b);
9638    });
9639} else {
9640    // Today/Tomorrow - sort by TIME only (same date)
9641    usort($events, function($a, $b) {
9642        return timeCompare($a, $b);
9643    });
9644}
9645```
9646
9647**Result**: Important Events now CORRECTLY sorted!
9648```
9649✓ Sun, Feb 8 - 3:30 PM Super Bowl
9650✓ Tue, Feb 10 - 11:30 AM Doctor visit
9651✓ Sat, Feb 14 - Valentine's Day (all-day)
9652✓ Sat, Feb 14 - 8:00 PM Crab Shack
9653```
9654
9655### Pink Tooltip Magic! ��
9656
9657**Normal Tooltips**: Black background, plain
9658```css
9659background: rgba(0, 0, 0, 0.95);
9660color: #fff;
9661```
9662
9663**Pink Theme Tooltips**: FABULOUS!
9664```css
9665/* Pink gradient background */
9666background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%);
9667
9668/* Glowing pink border */
9669border: 2px solid #ff85c1;
9670
9671/* Double glow shadow */
9672box-shadow:
9673    0 0 15px rgba(255, 20, 147, 0.6),
9674    0 4px 12px rgba(0, 0, 0, 0.4);
9675
9676/* Bold text */
9677font-weight: 600;
9678```
9679
9680**Plus**: Sparkling heart next to tooltip!
9681```css
9682.sidebar-pink [data-tooltip]:after {
9683    content: '��';
9684    font-size: 12px;
9685    filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8));
9686}
9687```
9688
9689**The Effect**:
9690```
9691Hover over ⚠ conflict warning:
9692┌────────────────────┐ ��
9693│ Conflicts with:    │ ← Pink gradient
9694│ • Event 1 (3PM)   │ ← Pink border
9695│ • Event 2 (4PM)   │ ← Pink glow
9696└────────────────────┘
9697```
9698
9699**Maximum glamour on tooltips too!** ✨
9700
9701## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING
9702
9703### �� Important Events Order Fixed
9704- **Fixed:** Important Events now sorted by date (earliest first)
9705- **Fixed:** Events on same date sorted by time (chronological)
9706- **Fixed:** All-day events appear last within each date
9707
9708### Sorting Issue
9709
9710**Before**: Random order
9711```
9712Important Events:
9713�� Valentine's Day         (Sat, Feb 14)
971411:30 AM Doctor visit      (Tue, Feb 10)  ← Feb 10 after Feb 14!
97153:30 PM Super Bowl         (Sun, Feb 8)   ← Feb 8 after Feb 14!
97168:00 PM Crab Shack         (Sat, Feb 14)
9717```
9718
9719**After**: Chronological order
9720```
9721Important Events:
97223:30 PM Super Bowl         (Sun, Feb 8)   ← Earliest!
972311:30 AM Doctor visit      (Tue, Feb 10)
9724�� Valentine's Day         (Sat, Feb 14)  ← All-day event
97258:00 PM Crab Shack         (Sat, Feb 14)  ← Same day, sorted by time
9726```
9727
9728### Sorting Logic
9729
9730**Primary Sort**: By date
9731```php
9732strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14"
9733```
9734
9735**Secondary Sort**: By time (within same date)
9736```php
9737// All-day events (no time) go last
9738if (empty($timeA) && !empty($timeB)) return 1;
9739if (!empty($timeA) && empty($timeB)) return -1;
9740
9741// Both have times - sort chronologically
9742$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes
9743$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes
9744return $aMinutes - $bMinutes;      // 690 < 1200
9745```
9746
9747**Result**:
97481. Sun, Feb 8 - 3:30 PM (earliest date & time)
97492. Tue, Feb 10 - 11:30 AM (next date)
97503. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14)
97514. Sat, Feb 14 - 8:00 PM (timed event on Feb 14)
9752
9753**Perfect chronological order for next 2 weeks!** ✓
9754
9755## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨��
9756
9757### �� EXTREME PINK BLING EFFECTS!
9758- **Added:** Click sparkles - 8 sparkles burst out on every click!
9759- **Added:** Auto-sparkles - random sparkles appear every 3 seconds
9760- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover
9761- **Added:** Pulsing border glow - constantly breathing pink glow
9762- **Added:** Drop shadows on sparkles for extra depth
9763- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows!
9764
9765### Sparkle Effects Breakdown
9766
9767**Click Sparkles** ��:
9768```javascript
9769// 8 sparkles burst out when you click anywhere!
9770for (let i = 0; i < 8; i++) {
9771    // Staggered appearance (40ms apart)
9772    createSparkle(x, y);
9773}
9774
9775// Sparkle emojis:
9776["✨", "��", "��", "⭐", "��", "��", "��", "��", "��", "��"]
9777```
9778
9779**Each sparkle**:
9780- Starts at click point
9781- Flies outward 30-60px in random direction
9782- Spins 360 degrees
9783- Fades in and out
9784- Has pink glow drop-shadow
9785- Disappears after 1 second
9786
9787**Auto Sparkles** ⏰:
9788```javascript
9789// Random sparkle every 3 seconds
9790setInterval(() => {
9791    const x = Math.random() * width;
9792    const y = Math.random() * height;
9793    createSparkle(x, y);
9794}, 3000);
9795```
9796
9797**Result**: Constant magical sparkles even without clicking! ✨
9798
9799**Hover Mega-Glow** ��:
9800```css
9801.sidebar-pink:hover {
9802    box-shadow:
9803        0 0 30px rgba(255, 20, 147, 0.9),
9804        0 0 50px rgba(255, 20, 147, 0.5) !important;
9805}
9806```
9807
9808**Result**: Sidebar EXPLODES with pink glow when you hover over it! ��
9809
9810**Pulsing Border Glow** ��:
9811```css
9812@keyframes pulse-glow {
9813    0%, 100% {
9814        box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
9815    }
9816    50% {
9817        box-shadow:
9818            0 0 25px rgba(255, 20, 147, 0.8),
9819            0 0 40px rgba(255, 20, 147, 0.4);
9820    }
9821}
9822
9823animation: pulse-glow 3s ease-in-out infinite;
9824```
9825
9826**Result**: Border continuously breathes with pink glow! ��
9827
9828**Sparkle Animation** ��:
9829```css
9830@keyframes sparkle {
9831    0% {
9832        opacity: 0;
9833        transform: translate(0, 0) scale(0) rotate(0deg);
9834    }
9835    50% {
9836        opacity: 1;
9837        transform: translate(halfway) scale(1) rotate(180deg);
9838    }
9839    100% {
9840        opacity: 0;
9841        transform: translate(far) scale(0) rotate(360deg);
9842    }
9843}
9844```
9845
9846**Result**: Sparkles spin, grow, shrink, and fly! ��
9847
9848### Complete Pink Bling Experience:
9849
9850**Always Active**:
9851- ✨ Pulsing pink border glow (3 second cycle)
9852- ✨ Auto-sparkles every 3 seconds
9853
9854**On Hover**:
9855- �� MEGA GLOW EFFECT (2x brightness!)
9856
9857**On Click**:
9858- �� 8 sparkles EXPLODE outward!
9859- �� Random emojis (hearts, stars, diamonds, crowns!)
9860- �� Each sparkle spins 360° while flying
9861- �� Pink glow drop-shadow on each sparkle
9862
9863**The Result**:
9864- Click anywhere = SPARKLE EXPLOSION! ��
9865- Hover anywhere = MEGA GLOW! ✨
9866- Always breathing and sparkling! ��
9867- Maximum glamour! ��
9868- Wife approval: 1000%! ��
9869
9870**THIS IS THE MOST FABULOUS CALENDAR EVER!** ��✨��
9871
9872## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH
9873
9874### �� Pink Theme Final Touches
9875- **Fixed:** Add Event text now black (was bright pink, hard to read)
9876- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!)
9877- **Removed:** Text shadow on Add Event button (cleaner with black text)
9878
9879### Add Event Text - Black & Readable!
9880
9881**Before**: Bright pink text (#ff1493) on dark pink background
9882```php
9883$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read!
9884text-shadow: 0 0 3px #ff1493; // Glowy pink
9885```
9886
9887**After**: Black text, no shadow, perfect contrast!
9888```php
9889$addBtnTextColor = $theme === 'pink' ? '#000000' : ...;
9890$addBtnTextShadow = $theme === 'pink' ? 'none' : ...;
9891```
9892
9893**Result**:
9894- Black text pops against dark pink background ✓
9895- Easy to read ✓
9896- Professional look with bling ✓
9897
9898### Clock Border - All Pink!
9899
9900**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green
9901
9902**Before**:
9903```php
9904// Inline style (only bottom):
9905style="border-bottom:2px solid #ff1493;"
9906
9907// CSS (all sides):
9908.eventlist-today-header {
9909    border: 2px solid #00cc07; // Green on top/sides!
9910}
9911```
9912
9913**After**: Inline style overrides ALL sides
9914```php
9915style="border:2px solid #ff1493;" // All 4 sides pink!
9916```
9917
9918**Result**: Clock box now 100% pink border on all four sides! ✓
9919
9920### What Changed:
9921
9922**Add Event Button**:
9923- Background: #b8156f (dark pink) ✓
9924- Text: **#000000 (black)** ← NEW!
9925- Text shadow: **none** ← NEW!
9926- Glow: 0 0 10px pink ✓
9927
9928**Clock Border**:
9929- Top: **#ff1493 (pink)** ← FIXED!
9930- Right: **#ff1493 (pink)** ← FIXED!
9931- Bottom: #ff1493 (pink) ✓
9932- Left: **#ff1493 (pink)** ← FIXED!
9933
9934**Perfect pink theme - wife approved!** ��✨
9935
9936## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION
9937
9938### �� Pink Theme Complete Makeover
9939- **Fixed:** Clock border now completely pink (was green on sides/top)
9940- **Changed:** Today/Tomorrow/Important sections now different shades of pink
9941- **Changed:** Add Event button now dark pink (was clashing blue)
9942- **Changed:** System status bars now pink gradient (3 shades!)
9943
9944### All-Pink Everything! ��
9945
9946**Clock Border**:
9947```css
9948/* Before: Green border */
9949border: 2px solid #00cc07;
9950
9951/* After: Hot pink border */
9952.sidebar-pink .eventlist-today-header {
9953    border-color: #ff1493;
9954    box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
9955}
9956```
9957
9958**Section Colors** (Different Pink Shades):
9959```php
9960// Before: Orange, green, purple
9961'Today' => '#ff9800',
9962'Tomorrow' => '#4caf50',
9963'Important' => '#9b59b6'
9964
9965// After: Hot pink, pink, light pink
9966'Today' => '#ff1493',      // Hot pink (DeepPink)
9967'Tomorrow' => '#ff69b4',   // Pink (HotPink)
9968'Important' => '#ff85c1'   // Light pink
9969```
9970
9971**Add Event Button**:
9972```php
9973// Before: Clashing blue
9974background: #3498db;
9975
9976// After: Dark pink with glow
9977background: #b8156f;       // Dark pink
9978hover: #8b0f54;            // Darker pink
9979shadow: 0 0 10px rgba(255, 20, 147, 0.5);
9980```
9981
9982**System Status Bars** (Pink Gradient):
9983```css
9984/* 5-min load average */
9985.sidebar-pink .eventlist-cpu-fill {
9986    background: #ff1493;   /* Hot pink */
9987    box-shadow: 0 0 5px rgba(255, 20, 147, 0.7);
9988}
9989
9990/* Realtime CPU */
9991.sidebar-pink .eventlist-cpu-fill-purple {
9992    background: #ff69b4;   /* Pink */
9993    box-shadow: 0 0 5px rgba(255, 105, 180, 0.7);
9994}
9995
9996/* Memory */
9997.sidebar-pink .eventlist-cpu-fill-orange {
9998    background: #ff85c1;   /* Light pink */
9999    box-shadow: 0 0 5px rgba(255, 133, 193, 0.7);
10000}
10001```
10002
10003### Pink Theme Visual Hierarchy:
10004
10005**Darkest → Lightest Pink Shades**:
100061. Add Event button: #b8156f (dark pink)
100072. Today section: #ff1493 (hot pink / deep pink)
100083. System bar 1: #ff1493 (hot pink)
100094. Tomorrow section: #ff69b4 (pink)
100105. System bar 2: #ff69b4 (pink)
100116. Important section: #ff85c1 (light pink)
100127. System bar 3: #ff85c1 (light pink)
10013
10014**Result**: Beautiful pink gradient throughout entire sidebar! ��✨
10015
10016### What's Pink Now:
10017
10018✅ Sidebar background & border
10019✅ **Clock border** ← FIXED!
10020✅ Header gradient
10021✅ Week grid
10022✅ **Add Event button** ← FIXED!
10023✅ **Today section** ← Different shade!
10024✅ **Tomorrow section** ← Different shade!
10025✅ **Important section** ← Different shade!
10026✅ Event text & bars
10027✅ **System status bars** ← All 3 different pink shades!
10028✅ All shadows & glows
10029
10030**EVERYTHING is pink and fabulous!** ��✨
10031
10032## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS
10033
10034### ✨ New Theme: Pink Bling! ��
10035- **Added:** Glamorous hot pink theme with maximum sparkle
10036- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic
10037- **Perfect for:** Fabulous calendars that demand attention ✨
10038
10039### �� Professional Theme Shadow Fix
10040- **Fixed:** Section headers now have subtle shadow (not glow)
10041- **Fixed:** Clicked day panel header has proper shadow
10042
10043### Pink Bling Theme Colors
10044
10045**Background & Borders**:
10046```php
10047'bg' => '#1a0d14',           // Dark rich pink-black
10048'border' => '#ff1493',        // Hot pink (DeepPink)
10049'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow
10050```
10051
10052**Text Colors**:
10053```php
10054'text_primary' => '#ff69b4',  // Hot pink
10055'text_bright' => '#ff1493',   // Deep pink
10056'text_dim' => '#ff85c1',      // Light pink
10057```
10058
10059**Week Grid**:
10060```php
10061'grid_bg' => '#2d1a24',       // Dark purple-pink
10062'cell_bg' => '#1a0d14',       // Dark
10063'cell_today_bg' => '#3d2030', // Highlighted purple-pink
10064```
10065
10066**Special Effects**:
10067```php
10068'bar_glow' => '0 0 5px',      // Extra sparkly glow!
10069'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling!
10070```
10071
10072### Professional Theme Shadow Fix
10073
10074**Before**: Section headers had colored glow
10075```php
10076box-shadow: 0 0 8px #3498db; // Blue glow - wrong!
10077```
10078
10079**After**: Section headers have subtle shadow
10080```php
10081$headerShadow = ($theme === 'professional') ?
10082    '0 2px 4px rgba(0, 0, 0, 0.15)' :  // Shadow for professional
10083    '0 0 8px ' . $accentColor;          // Glow for others
10084```
10085
10086**Result**:
10087- **Matrix/Purple/Pink**: Colored glow on headers ✓
10088- **Professional**: Clean grey shadow (no glow) ✓
10089
10090### All Four Themes:
10091
10092**�� Matrix Edition**:
10093- Dark green (#00cc07)
10094- Neon glow effects
10095- Hacker aesthetic
10096
10097**�� Purple Dream**:
10098- Elegant purple (#9b59b6)
10099- Violet glow effects
10100- Royal aesthetic
10101
10102**�� Professional Blue**:
10103- Clean grey/blue (#4a90e2)
10104- Subtle shadows (NO glow)
10105- Corporate aesthetic
10106
10107**�� Pink Bling** (NEW!):
10108- Hot pink (#ff1493)
10109- MAXIMUM sparkle & glow
10110- Glamorous aesthetic ✨��
10111
10112### Technical Implementation
10113
10114**Theme Added To**:
10115- `getSidebarThemeStyles()` - color definitions
10116- `getSidebarTheme()` - validation
10117- `saveSidebarTheme()` - admin save
10118- Admin panel - UI with preview
10119- All shadow/glow calculations
10120- JavaScript theme colors
10121- Clicked day panel colors
10122
10123**Perfect for users who want FABULOUS pink calendars!** ��✨
10124
10125## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY
10126
10127### �� Text Glow Refinement
10128- **Changed:** Reduced text glow from 3px to 2px (less intense)
10129- **Fixed:** Clicked day panel now has same text glow as sections
10130
10131### Text Glow Reduction
10132
10133**Before**: Text glow was too strong (3px)
10134```php
10135// Sections:
10136text-shadow: 0 0 3px #00cc07; // Too bright!
10137
10138// Clicked day panel:
10139text-shadow: 0 0 3px #00cc07; // Too bright!
10140```
10141
10142**After**: Subtler text glow (2px)
10143```php
10144// Sections:
10145text-shadow: 0 0 2px #00cc07; // Just right ✓
10146
10147// Clicked day panel:
10148text-shadow: 0 0 2px #00cc07; // Just right ✓
10149```
10150
10151**Visual Impact**:
10152- **Matrix**: Softer green glow, easier to read
10153- **Purple**: Softer purple glow, more elegant
10154- **Professional**: Still no glow (clean)
10155
10156### Consistency Fix
10157
10158**Before**: Sections had glow, clicked day panel had NO glow
10159
10160**After**: Both sections AND clicked day panel have matching subtle glow
10161
10162**Where Glow Appears**:
10163- ✅ Today section event text
10164- ✅ Tomorrow section event text
10165- ✅ Important section event text
10166- ✅ **Clicked day panel event text** ← NOW CONSISTENT!
10167
10168**Result**:
10169- Glow is less intense and easier on eyes ✓
10170- All event text has consistent styling ✓
10171- Matrix/Purple themes more refined ✓
10172
10173### Technical Details
10174
10175**PHP (Sections)**:
10176```php
10177$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';';
10178```
10179
10180**JavaScript (Clicked Day Panel)**:
10181```javascript
10182themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple
10183eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'";
10184```
10185
10186**Perfect consistency and subtle elegance!** ✨
10187
10188## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY
10189
10190### ✨ Important Events Enhancement
10191- **Changed:** Important events now show from next 2 weeks (not just current week)
10192- **Fixed:** Important events on Sunday after current week now visible
10193- **Changed:** Events loaded 2 weeks into future for Important section
10194
10195### �� Background Cleanup
10196- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections
10197- **Removed:** Grey backgrounds from individual events
10198- **Result:** Clean transparent backgrounds, original dark Matrix look restored
10199
10200### Important Events - Future Coverage
10201
10202**Before**: Only showed Important events from current week
10203```php
10204if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
10205    $importantEvents[] = $event;
10206}
10207```
10208
10209**After**: Shows Important events from today through next 2 weeks
10210```php
10211// Load events 2 weeks out
10212$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days'));
10213
10214// Show all important events from today forward
10215if ($isImportant && $dateKey >= $todayStr) {
10216    $importantEvents[] = $event;
10217}
10218```
10219
10220**Example**:
10221- Today: Saturday Feb 7
10222- Current week: Sun Feb 1 → Sat Feb 7
10223- Important events shown: Feb 7 → Feb 21 (today + 14 days)
10224
10225**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓
10226
10227### Background Removal
10228
10229**Before**: Light grey/white backgrounds added
10230```php
10231// Section background:
10232$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay
10233
10234// Event background:
10235$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay
10236```
10237
10238**After**: No backgrounds (transparent)
10239```php
10240// Section: No background property
10241<div style="padding:4px 0;">
10242
10243// Event: No background property
10244<div style="padding:4px 6px; ...">
10245```
10246
10247**Result**:
10248- Clean, dark Matrix aesthetic restored ✓
10249- Purple theme darker and more elegant ✓
10250- Professional theme still has its light grey sidebar bg ✓
10251- Events stand out with just color bars and borders ✓
10252
10253### What Changed:
10254
10255**Sections (Today/Tomorrow/Important)**:
10256- ❌ No more grey overlay
10257- ✓ Transparent background
10258- ✓ Colored borders & glows remain
10259
10260**Individual Events**:
10261- ❌ No more grey overlay
10262- ✓ Transparent background
10263- ✓ Colored bars & borders remain
10264
10265**Perfect! Back to the original clean dark look with future Important events!** ��
10266
10267## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR
10268
10269### �� Final Theme Polish
10270- **Fixed:** Today/Tomorrow/Important section shadows now match theme
10271- **Fixed:** Event description text color now uses theme dim color
10272
10273### Section Shadow Fix
10274
10275**Problem**: Sections always had green glow regardless of theme
10276
10277**Before**:
10278```php
10279// Hardcoded green:
10280box-shadow: 0 0 5px rgba(0, 204, 7, 0.2);
10281```
10282
10283**After**:
10284```php
10285// Theme-aware:
10286$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' :
10287                ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' :
10288                '0 2px 4px rgba(0, 0, 0, 0.1)');
10289```
10290
10291**Result**:
10292- **Matrix**: Green glow around sections ✓
10293- **Purple**: Purple glow around sections ✓
10294- **Professional**: Subtle grey shadow (no glow) ✓
10295
10296### Description Color Fix
10297
10298**Problem**: Description text always green in clicked day panel
10299
10300**Before**:
10301```javascript
10302color: #00aa00; // Always green
10303```
10304
10305**After**:
10306```javascript
10307color: themeColors.text_dim; // Theme dim color
10308```
10309
10310**Result**:
10311- **Matrix**: Dim green (#00aa00) ✓
10312- **Purple**: Dim purple (#8e7ab8) ✓
10313- **Professional**: Grey (#7f8c8d) ✓
10314
10315### Now 100% Theme Consistent
10316
10317Every single visual element respects theme:
10318- ✅ Sidebar background & border
10319- ✅ Header colors & shadows
10320- ✅ Week grid & cells
10321- ✅ Add Event button
10322- ✅ Section borders & **shadows** ← Fixed!
10323- ✅ Event titles & times
10324- ✅ Event **descriptions** ← Fixed!
10325- ✅ Clicked day panel
10326- ✅ Event bars & glows
10327
10328**Absolute perfection across all three themes!** ��✨
10329
10330## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND
10331
10332### �� Theme Improvements
10333- **Fixed:** Clicked day panel now uses correct theme colors
10334- **Changed:** Professional Blue background now light grey (not white)
10335- **Added:** Theme colors passed to JavaScript for dynamic rendering
10336
10337### Clicked Day Panel Theming
10338
10339**Before**: Always blue regardless of theme
10340```javascript
10341// Hardcoded blue:
10342color:#00cc07;  // Always green
10343background:#3498db;  // Always blue
10344```
10345
10346**After**: Theme-aware colors
10347```php
10348// PHP passes theme to JavaScript:
10349window.themeColors_XXX = {
10350    text_primary: '#00cc07' or '#b19cd9' or '#2c3e50',
10351    text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2',
10352    text_shadow: '0 0 3px ...' or '',
10353    event_bg: 'rgba(...)',
10354    border_color: 'rgba(...)',
10355    bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)'
10356};
10357
10358// JavaScript uses theme colors:
10359color: themeColors.text_primary;
10360background: themeColors.event_bg;
10361```
10362
10363**Result**:
10364- Matrix: Green panel with green glow ✓
10365- Purple: Purple panel with purple glow ✓
10366- Professional: Blue panel, no glow, clean ✓
10367
10368### Professional Theme Background Change
10369
10370**Before**: Almost white (#f5f7fa, #ffffff)
10371```php
10372'bg' => '#f5f7fa',           // Very light
10373'cell_bg' => '#ffffff',      // Pure white
10374```
10375
10376**After**: Light grey tones
10377```php
10378'bg' => '#e8ecf1',           // Soft grey-blue
10379'cell_bg' => '#f5f7fa',      // Light grey
10380'grid_bg' => '#d5dbe3',      // Medium grey
10381'cell_today_bg' => '#dce8f7' // Highlighted grey-blue
10382```
10383
10384**Visual Impact**:
10385- Sidebar: Light grey-blue background (#e8ecf1)
10386- Week cells: Lighter grey (#f5f7fa)
10387- Today cell: Highlighted blue-grey (#dce8f7)
10388- More depth and contrast ✓
10389- Professional appearance ✓
10390
10391### All Theme Elements Now Consistent
10392
10393**Matrix (Green)**:
10394- Sidebar: Dark (#242424)
10395- Clicked panel: Dark with green
10396- Text: Green with glow
10397
10398**Purple Dream**:
10399- Sidebar: Dark purple (#2a2030)
10400- Clicked panel: Dark with purple
10401- Text: Purple with glow
10402
10403**Professional Blue**:
10404- Sidebar: Light grey (#e8ecf1)
10405- Clicked panel: Light with blue
10406- Text: Dark grey, no glow
10407
10408**Perfect theme consistency everywhere!** ��
10409
10410## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING
10411
10412### �� Critical Fixes
10413- **Fixed:** Tomorrow events not loaded when outside current week
10414- **Fixed:** `&amp;` showing instead of `&` (double HTML encoding)
10415
10416### Issue 1: Tomorrow Not Loading
10417
10418**Problem**: Sidebar only loaded events for current week
10419- Today (Saturday): Week ends today
10420- Tomorrow (Sunday): Start of NEXT week
10421- Tomorrow events never loaded from data files!
10422
10423**Before**:
10424```php
10425// Only load current week
10426$end = new DateTime($weekEnd);
10427$end->modify('+1 day');
10428$period = new DatePeriod($start, $interval, $end);
10429// If tomorrow > weekEnd, it's not in period!
10430```
10431
10432**After**:
10433```php
10434// Check if tomorrow is outside week
10435$tomorrowDate = date('Y-m-d', strtotime('+1 day'));
10436if ($tomorrowDate > $weekEnd) {
10437    // Extend to include tomorrow
10438    $end = new DateTime($tomorrowDate);
10439}
10440$end->modify('+1 day');
10441$period = new DatePeriod($start, $interval, $end);
10442```
10443
10444**Result**: Tomorrow events now loaded even at week boundary! ✓
10445
10446### Issue 2: Double HTML Encoding
10447
10448**Problem**: `&` characters showing as `&amp;`
10449
10450**Cause**: Double encoding on line 2625 and 2681
10451```php
10452// Line 2625:
10453$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee &amp; Tea"
10454
10455// Line 2681:
10456$html .= htmlspecialchars($title); // "Coffee &amp; Tea" → "Coffee &amp;amp; Tea" ❌
10457```
10458
10459**Fixed**:
10460```php
10461// Line 2625:
10462$title = htmlspecialchars($event['title']); // Encode once
10463
10464// Line 2681:
10465$html .= $title; // Use already-encoded value ✓
10466```
10467
10468**Result**: `&` displays correctly! ✓
10469
10470### Both Fixes Critical
10471
10472These were **two separate bugs**:
104731. **Loading bug**: Tomorrow events not read from files
104742. **Display bug**: Double-encoding text
10475
10476Both needed fixing for Tomorrow section to work properly!
10477
10478## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY
10479
10480### �� Critical Fix
10481- **Fixed:** Tomorrow section missing when tomorrow is outside current week
10482- **Fixed:** Today section now always shows regardless of week boundaries
10483- **Changed:** Today/Tomorrow processed BEFORE week boundary checks
10484
10485### The Problem
10486
10487**Scenario**: Today is Saturday (last day of week)
10488- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today
10489- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week**
10490
10491**BROKEN Logic** (v4.2.2):
10492```php
10493foreach ($events as $dateKey => $dayEvents) {
10494    if ($dateKey < $weekStart) continue; // Skip old events
10495
10496    // ...week processing...
10497
10498    if ($dateKey === $tomorrowStr) {  // ← Never reached!
10499        $tomorrowEvents[] = $event;   //   Tomorrow > weekEnd
10500    }
10501}
10502```
10503
10504**Result**: Tomorrow events never added because loop skipped them! ❌
10505
10506### The Fix
10507
10508**Process Today/Tomorrow FIRST**:
10509```php
10510foreach ($events as $dateKey => $dayEvents) {
10511    $eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
10512
10513    foreach ($eventsWithConflicts as $event) {
10514        // ALWAYS process Today and Tomorrow first!
10515        if ($dateKey === $todayStr) {
10516            $todayEvents[] = $event; // ✓ Always shows
10517        }
10518        if ($dateKey === $tomorrowStr) {
10519            $tomorrowEvents[] = $event; // ✓ Always shows
10520        }
10521
10522        // THEN check week boundaries for grid
10523        if ($dateKey >= $weekStart && $dateKey <= $weekEnd) {
10524            $weekEvents[$dateKey][] = $event;
10525        }
10526
10527        // Important events still week-only
10528        if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
10529            $importantEvents[] = $event;
10530        }
10531    }
10532}
10533```
10534
10535### What Changed
10536
10537**Before**:
105381. Skip events < weekStart ❌
105392. Process week grid
105403. Try to add Today/Tomorrow ← **Failed if outside week**
105414. Add Important events
10542
10543**After**:
105441. **Always add Today events** ✓
105452. **Always add Tomorrow events** ✓
105463. Add to week grid if in range
105474. Add Important events if in range
10548
10549**Result**:
10550- Today section: ✓ Always shows
10551- Tomorrow section: ✓ Always shows (even at week boundary!)
10552- Week grid: ✓ Only current week
10553- Important: ✓ Only current week
10554
10555### Edge Cases Fixed
10556
10557**Saturday → Sunday transition**:
10558- Today (Sat): Shows in Today section ✓
10559- Tomorrow (Sun): Shows in Tomorrow section ✓
10560- Week grid: Only shows Sat (today) ✓
10561
10562**Sunday → Monday transition**:
10563- Today (Sun): Shows in Today section ✓
10564- Tomorrow (Mon): Shows in Tomorrow section ✓
10565- Week grid: Shows both Sun and Mon ✓
10566
10567**Perfect! Tomorrow section now always works!** ��
10568
10569## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY!
10570
10571### �� Corrected Week Options
10572- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!)
10573- **Changed:** Default is **Sunday** (US/Canada standard)
10574- **Fixed:** Day names array for Sunday start: S M T W T F S
10575
10576### �� Correct Week Start Options
10577
10578**Sunday Start** (Default):
10579- Grid shows: **S M T W T F S**
10580- Week: Sunday → Saturday
10581- US/Canada standard
10582- Most common worldwide
10583
10584**Monday Start**:
10585- Grid shows: **M T W T F S S**
10586- Week: Monday → Sunday
10587- ISO 8601 standard
10588- Common in Europe
10589
10590### Technical Changes
10591
10592**All References Updated**:
10593```php
10594// Changed from 'saturday' to 'sunday' in:
10595- Admin validation
10596- Week calculation logic
10597- Day names array
10598- Default value
10599- Comments
10600```
10601
10602**Sunday Calculation** (when today is Saturday):
10603```php
10604$today = date('w'); // 0=Sun, 6=Sat
10605if ($today == 0) {
10606    $weekStart = date('Y-m-d'); // Today!
10607} else {
10608    // Go back $today days to last Sunday
10609    $weekStart = date('Y-m-d', strtotime('-' . $today . ' days'));
10610}
10611```
10612
10613**Examples**:
10614- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7
10615- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14
10616
10617**Sorry for the confusion - it's Sunday not Saturday!** ��
10618
10619## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY
10620
10621### �� Critical Fix
10622- **Fixed:** Week calculation broken when today is Saturday
10623- **Fixed:** Events not showing in Today/Important sections
10624- **Fixed:** Week grid event bars missing
10625- **Changed:** Default week start is Saturday (matches main calendar)
10626
10627### Technical Details
10628
10629**The Bug**:
10630```php
10631// BROKEN (v4.2.0):
10632$weekStart = date('Y-m-d', strtotime('saturday this week'));
10633// When TODAY is Saturday, this is ambiguous and fails!
10634
10635// FIXED (v4.2.1):
10636$today = date('w'); // 0 (Sun) to 6 (Sat)
10637if ($today == 6) {
10638    $weekStart = date('Y-m-d'); // Today!
10639} else {
10640    $daysBack = ($today == 0) ? 1 : ($today + 1);
10641    $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days'));
10642}
10643$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days'));
10644```
10645
10646**Why It Failed**:
10647- `strtotime('saturday this week')` is ambiguous when run ON a Saturday
10648- PHP may interpret it as "next Saturday" or fail
10649- Result: Week range was wrong, events filtered out
10650
10651**The Fix**:
10652- Explicit calculation using day-of-week math
10653- Saturday (day 6): weekStart = today
10654- Sunday (day 0): weekStart = yesterday
10655- Monday-Friday: calculate days back to last Saturday
10656
10657**Result**: Works reliably every day of the week!
10658
10659**Default Changed**: Saturday start (was Monday in 4.2.0)
10660- Matches main calendar behavior
10661- Users can still switch to Monday in settings
10662
10663## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR
10664
10665### ✨ New Feature
10666- **Added:** Week start day selector in Themes tab
10667- **Added:** Choose between Monday (ISO standard) or Saturday week start
10668- **Added:** Week grid and all events now respect the selected start day
10669- **Changed:** Themes tab renamed to "Sidebar Widget Settings"
10670
10671### �� Week Start Options
10672
10673**Monday Start** (Default):
10674- Grid shows: M T W T F S S
10675- Week runs: Monday → Sunday
10676- ISO 8601 standard
10677- Common in Europe, most of world
10678
10679**Saturday Start**:
10680- Grid shows: S S M T W T F
10681- Week runs: Saturday → Friday
10682- Common in Middle East
10683- Sabbath-observant communities
10684
10685### Technical Details
10686
10687**Configuration**:
10688```php
10689// Saved in: data/meta/calendar_week_start.txt
10690// Values: 'monday' or 'saturday'
10691
10692// Week calculation:
10693if ($weekStartDay === 'saturday') {
10694    $weekStart = date('Y-m-d', strtotime('saturday this week'));
10695    $weekEnd = date('Y-m-d', strtotime('friday next week'));
10696} else {
10697    $weekStart = date('Y-m-d', strtotime('monday this week'));
10698    $weekEnd = date('Y-m-d', strtotime('sunday this week'));
10699}
10700```
10701
10702**Day Names Array**:
10703```php
10704// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S']
10705// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F']
10706```
10707
10708**What Changes**:
10709- Week grid day letters
10710- Week grid date sequence
10711- Today/Tomorrow/Important event date ranges
10712- Week event grouping
10713
10714**What Stays Same**:
10715- All themes still work
10716- Event data unchanged
10717- Main calendar unaffected
10718
10719### How to Change:
10720
107211. Admin → Calendar → �� Themes tab
107222. Under "Week Start Day" section
107233. Select Monday or Saturday
107244. Click "Save Settings"
107255. Refresh sidebar to see changes
10726
10727**Perfect for international users or religious observances!** ��
10728
10729## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS
10730
10731### ��️ Calendar Improvements
10732- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar)
10733- **Changed:** Event section backgrounds much lighter (almost white)
10734- **Changed:** Individual event backgrounds lighter and more readable
10735- **Changed:** Event borders now theme-colored
10736
10737### Technical Details
10738
10739**Week Start Change**:
10740```php
10741// Before:
10742$weekStart = date('Y-m-d', strtotime('monday this week'));
10743$weekEnd = date('Y-m-d', strtotime('sunday this week'));
10744$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
10745
10746// After:
10747$weekStart = date('Y-m-d', strtotime('sunday this week'));
10748$weekEnd = date('Y-m-d', strtotime('saturday this week'));
10749$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
10750```
10751
10752**Background Colors**:
10753```php
10754// Section backgrounds (Today, Tomorrow, Important):
10755Matrix: rgba(255, 255, 255, 0.05)    // Very light overlay
10756Purple: rgba(255, 255, 255, 0.08)    // Slightly lighter
10757Professional: rgba(255, 255, 255, 0.95)  // Almost white!
10758
10759// Individual event backgrounds:
10760Matrix: rgba(255, 255, 255, 0.03)    // Subtle
10761Purple: rgba(255, 255, 255, 0.05)    // Light
10762Professional: rgba(255, 255, 255, 0.5)   // Semi-transparent white
10763```
10764
10765**Event Borders**:
10766```php
10767Matrix: rgba(0, 204, 7, 0.2)         // Green
10768Purple: rgba(155, 89, 182, 0.2)      // Purple
10769Professional: rgba(74, 144, 226, 0.2) // Blue
10770```
10771
10772### Visual Result:
10773
10774**Before**: Dark backgrounds made text hard to read
10775**After**: Light backgrounds make events pop and text very readable
10776
10777**Week Grid**:
10778```
10779Before: [M][T][W][T][F][S][S]
10780After:  [S][M][T][W][T][F][S]  ← Now matches main calendar!
10781```
10782
10783## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS
10784
10785### �� Final Theme Polish
10786- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors
10787- **Fixed:** Event times now use theme bright color
10788- **Fixed:** Event dates use theme dim color
10789- **Fixed:** Task checkboxes use theme bright color
10790- **Fixed:** Event color bars use theme-appropriate shadows
10791- **Fixed:** No text shadows on Professional theme
10792
10793### Technical Details
10794
10795**Event Text Colors**:
10796```php
10797// Matrix:
10798- Title: #00cc07 (green)
10799- Time: #00dd00 (bright green)
10800- Date: #00aa00 (dim green)
10801- Text shadow: 0 0 3px (glow)
10802
10803// Purple:
10804- Title: #b19cd9 (lavender)
10805- Time: #d4a5ff (bright purple)
10806- Date: #8e7ab8 (dim purple)
10807- Text shadow: 0 0 3px (glow)
10808
10809// Professional:
10810- Title: #2c3e50 (dark grey)
10811- Time: #4a90e2 (blue)
10812- Date: #7f8c8d (grey)
10813- Text shadow: none (clean)
10814```
10815
10816**Color Bar Shadows**:
10817```php
10818// Matrix & Purple: Glow effect
10819box-shadow: 0 0 3px [event-color];
10820
10821// Professional: Subtle shadow
10822box-shadow: 0 1px 2px rgba(0,0,0,0.2);
10823```
10824
10825### What's Now Fully Themed:
10826
10827✅ Sidebar background & border
10828✅ Header (clock box) background, border, text
10829✅ Week grid background, borders, cells
10830✅ Week grid day letters & numbers
10831✅ Week grid event bars & "+N more" text
10832✅ Add Event button background & text
10833Today/Tomorrow/Important event titles
10834✅ Event times
10835✅ Event dates (Important section)
10836✅ Task checkboxes
10837✅ Event color bars
10838✅ All text shadows (glow vs none)
10839
10840**Every single element now respects the theme!** ��
10841
10842## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION
10843
10844### �� Theme Improvements
10845- **Fixed:** Week calendar grid now uses theme colors (purple/blue)
10846- **Fixed:** Add Event button now uses theme colors
10847- **Fixed:** Clock box border now matches theme
10848- **Fixed:** All text shadows respect theme (no glow on professional)
10849- **Fixed:** Event bars use theme-appropriate shadows
10850
10851### Technical Details
10852
10853**Week Grid Theming**:
10854```php
10855// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders
10856// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders
10857// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders
10858```
10859
10860**Add Event Button**:
10861```php
10862// Matrix: Dark green (#006400) with bright green text
10863// Purple: Purple (#7d3c98) with lavender text
10864// Professional: Blue (#3498db) with white text
10865```
10866
10867**Text Shadows**:
10868```php
10869// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color)
10870// Professional: No glow (clean look)
10871```
10872
10873**CSS Overrides**:
10874```css
10875/* Purple theme */
10876.sidebar-purple .eventlist-today-header {
10877    border-color: #9b59b6;
10878    box-shadow: 0 0 8px rgba(155, 89, 182, 0.2);
10879}
10880
10881/* Professional theme */
10882.sidebar-professional .eventlist-today-header {
10883    border-color: #4a90e2;
10884    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
10885}
10886```
10887
10888### What Changed Per Theme:
10889
10890**Purple Dream**:
10891- Week grid: Purple borders and dark purple background
10892- Add Event: Purple button with lavender text
10893- Clock box: Purple border with purple glow
10894- Event bars: Purple glow instead of green
10895- All text: Purple/lavender shades
10896
10897**Professional Blue**:
10898- Week grid: Blue borders and light grey background
10899- Add Event: Blue button with white text
10900- Clock box: Blue border with subtle shadow (no glow)
10901- Event bars: Subtle shadows (no glow)
10902- All text: Dark grey and blue shades
10903
10904**Matrix Edition**: Unchanged (still perfect green theme!)
10905
10906## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING
10907
10908### ✨ New Features
10909- **Added:** �� Themes tab in admin for sidebar widget theming
10910- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey)
10911- **Added:** Theme selector with live previews
10912- **Added:** Theme persistence across page loads
10913
10914### �� Available Themes
10915
10916**Matrix Edition** (Default):
10917- Dark background (#242424)
10918- Green accents (#00cc07)
10919- Neon glow effects
10920- Original Matrix styling
10921
10922**Purple Dream**:
10923- Dark purple background (#2a2030)
10924- Purple/violet accents (#9b59b6)
10925- Elegant purple glow
10926- Rich purple color scheme
10927
10928**Professional Blue**:
10929- Light grey background (#f5f7fa)
10930- Blue accents (#4a90e2)
10931- Clean professional look
10932- Subtle shadows instead of glow
10933
10934### �� Bug Fix
10935- **Fixed:** Tooltips now go UP and to the LEFT (was going right)
10936- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px`
10937
10938### Technical Details
10939
10940**Theme System**:
10941```php
10942// Saved in: data/meta/calendar_theme.txt
10943// Applied dynamically in syntax.php
10944$theme = $this->getSidebarTheme();  // 'matrix', 'purple', or 'professional'
10945$styles = $this->getSidebarThemeStyles($theme);
10946
10947// Styles include:
10948- bg, border, shadow
10949- header_bg, header_border, header_shadow
10950- text_primary, text_bright, text_dim
10951- grid_bg, grid_border
10952- cell_bg, cell_today_bg
10953```
10954
10955**Theme Changes**:
10956- Header background gradient
10957- Border colors
10958- Text colors
10959- Shadow/glow effects
10960- Grid colors
10961
10962**How to Change**:
109631. Admin → Calendar → �� Themes tab
109642. Select desired theme
109653. Click "Save Theme"
109664. Refresh page to see changes
10967
10968### Notes
10969- Themes only affect sidebar widget appearance
10970- Main calendar view unchanged
10971- Theme setting stored in `data/meta/calendar_theme.txt`
10972- Safe to switch themes - no data affected
10973
10974## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING
10975
10976### �� Bug Fixes
10977- **Fixed:** Events now sort chronologically by time (was using string comparison)
10978- **Fixed:** Tooltip positioning using JavaScript like system tooltips
10979- **Fixed:** All-day events appear first, then events in time order
10980
10981### Technical Details
10982
10983**Event Sorting Fix**:
10984```php
10985// BROKEN (v4.0.9):
10986return strcmp($aTime, $bTime);
10987// String comparison: "10:00" < "8:00" because "1" < "8"
10988// Result: 10:00 AM shown BEFORE 8:00 AM ❌
10989
10990// FIXED (v4.1.0):
10991$aMinutes = $this->timeToMinutes($aTime);  // 8:00 = 480
10992$bMinutes = $this->timeToMinutes($bTime);  // 10:00 = 600
10993return $aMinutes - $bMinutes;
10994// Result: 8:00 AM shown BEFORE 10:00 AM ✓
10995```
10996
10997**Example Before Fix**:
10998```
10999�� Weekend Ticket Duty (all-day)
110008:00 AM START TICKETS
1100110:00 AM Soul Winning    ← Wrong!
110029:45 AM Coffee           ← Should be before 10:00 AM
11003```
11004
11005**Example After Fix**:
11006```
11007�� Weekend Ticket Duty (all-day)
110088:00 AM START TICKETS
110099:45 AM Coffee           ← Correct!
1101010:00 AM Soul Winning
11011```
11012
11013**Tooltip Positioning**:
11014- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()`
11015- Uses CSS custom properties `--tooltip-left` and `--tooltip-top`
11016- Positioned on `mouseenter` event
11017- Matches system tooltip implementation (no cutoff)
11018
11019**JavaScript Implementation**:
11020```javascript
11021element.addEventListener("mouseenter", function() {
11022    const rect = element.getBoundingClientRect();
11023    element.style.setProperty("--tooltip-left", (rect.right - 10) + "px");
11024    element.style.setProperty("--tooltip-top", (rect.top - 30) + "px");
11025});
11026```
11027
11028**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically!
11029
11030## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX
11031
11032### �� UI Improvements
11033- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge
11034- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar
11035- **Changed:** Main calendar conflict tooltip now much smaller (was too big)
11036
11037### Technical Details
11038
11039**Sidebar Overflow Fix**:
11040```php
11041// Before (line 2005):
11042style="...overflow:hidden..."  // ← Blocked tooltips!
11043
11044// After:
11045style="...overflow:visible..."  // ← Tooltips extend beyond!
11046```
11047
11048**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important`
11049
11050**Main Calendar Tooltip Size**:
11051```css
11052/* Before: */
11053.conflict-tooltip {
11054    border: 2px solid #ff9800;
11055    border-radius: 6px;
11056    padding: 8px 12px;
11057    font-size: 12px;
11058    min-width: 200px;
11059    max-width: 350px;
11060}
11061
11062/* After: */
11063.conflict-tooltip {
11064    border: 1px solid #ff9800;  /* Thinner */
11065    border-radius: 3px;          /* Smaller */
11066    padding: 4px 8px;            /* Less padding */
11067    font-size: 10px;             /* Smaller header */
11068    min-width: 120px;            /* Narrower */
11069    max-width: 200px;            /* Narrower */
11070}
11071
11072.conflict-tooltip-body {
11073    padding: 6px 8px;  /* Was 10px 12px */
11074    font-size: 9px;    /* Was 11px */
11075    line-height: 1.4;  /* Was 1.6 */
11076}
11077
11078.conflict-item {
11079    padding: 2px 0;  /* Was 4px */
11080    font-size: 9px;  /* Added smaller font */
11081}
11082```
11083
11084**Result**:
11085- Main calendar tooltip ~50% smaller
11086- Sidebar tooltips now extend beyond borders
11087- Both tooltips compact and readable
11088
11089## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP
11090
11091### �� Bug Fix
11092- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text)
11093- **Changed:** Using HTML entity `&#10;` for newlines instead of `\n`
11094
11095### Technical Details
11096
11097**The Problem**:
11098```php
11099// Before (v4.0.7):
11100$conflictTooltip = 'Conflicts with:\n';  // Literal \n showed in tooltip
11101
11102// Displayed as:
11103"Conflicts with:\n• Event 1\n• Event 2"  // ← Literal backslash-n
11104```
11105
11106**The Fix**:
11107```php
11108// After (v4.0.8):
11109$conflictTooltip = "Conflicts with:&#10;";  // HTML entity for newline
11110
11111// Displays as:
11112Conflicts with:
11113• Event 1
11114• Event 2
11115```
11116
11117**Why `&#10;` Works**:
11118- HTML entity for line feed character
11119- Works in data attributes
11120- CSS `white-space: pre-line` preserves the newlines
11121- Renders as actual line breaks in tooltip
11122
11123**Applied to**:
11124- PHP rendering (sidebar Today/Tomorrow/Important)
11125- JavaScript rendering (clicked day events)
11126
11127## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX
11128
11129### �� UI Improvements
11130- **Changed:** Tooltip size reduced significantly (much more compact)
11131- **Fixed:** Tooltip now overflows sidebar borders (not cut off)
11132- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px)
11133- **Changed:** Narrower width (120-200px vs 200-300px)
11134
11135### Technical Details
11136
11137**Tooltip Size Reduction**:
11138```css
11139/* Before (v4.0.6):
11140padding: 6px 10px;
11141font-size: 11px;
11142min-width: 200px;
11143max-width: 300px;
11144
11145/* After (v4.0.7): */
11146padding: 3px 6px;
11147font-size: 9px;
11148min-width: 120px;
11149max-width: 200px;
11150```
11151
11152**Overflow Fix**:
11153```css
11154/* Allow tooltip to extend beyond sidebar */
11155.sidebar-widget,
11156.sidebar-matrix {
11157    overflow: visible !important;
11158}
11159
11160/* Position tooltip outside */
11161[data-tooltip]:before {
11162    bottom: 120%;  /* Further above */
11163    right: -10px;  /* Can extend beyond edge */
11164    z-index: 10000; /* Always on top */
11165}
11166```
11167
11168**Visual Result**:
11169- Tooltip is ~40% smaller
11170- Extends beyond sidebar border if needed
11171- Still readable, just more compact
11172- Better for small screens
11173
11174## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING
11175
11176### �� Critical Fix
11177- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly
11178- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names
11179- **Fixed:** Events without end time now treated as zero-duration (not +1 hour)
11180- **Fixed:** Now matches what you see in main calendar view
11181
11182### ✨ UI Improvement
11183- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right)
11184- **Added:** Custom CSS tooltip with data-tooltip attribute
11185- **Improved:** Better tooltip positioning - doesn't overflow screen edges
11186
11187### Technical Details
11188
11189**The Problem - Field Name Mismatch**:
11190```php
11191// Main calendar (line 697):
11192$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase)
11193
11194// Sidebar (before fix):
11195$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case)
11196```
11197
11198**The Problem - Duration Logic**:
11199```php
11200// Main calendar (line 697):
11201$end1 = isset($evt1['endTime']) && !empty($evt1['endTime'])
11202    ? $evt1['endTime']
11203    : $evt1['time'];  // ← Uses START time (zero duration)
11204
11205// Sidebar (before fix):
11206$endTime = ... ? ... : $this->addHoursToTime($startTime, 1);  // ← Added 1 hour!
11207```
11208
11209**The Fix**:
11210```php
11211// Now checks BOTH field names:
11212if (isset($event['end_time']) && $event['end_time'] !== '') {
11213    $endTime = $event['end_time'];
11214} elseif (isset($event['endTime']) && $event['endTime'] !== '') {
11215    $endTime = $event['endTime'];
11216} else {
11217    $endTime = $startTime;  // ← Matches main calendar!
11218}
11219```
11220
11221**Tooltip Positioning**:
11222- Uses `data-tooltip` attribute instead of `title`
11223- CSS positions tooltip ABOVE badge (`bottom: 100%`)
11224- Aligns to RIGHT edge (`right: 0`)
11225- Arrow points down to badge
11226- Black background with white text
11227- Max width 300px
11228
11229### Example
11230
11231**6:00 PM Evening Service** (no end time):
11232- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌
11233- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar!
11234
11235**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**:
11236- Zero-duration events at 6:00 PM don't overlap with anything
11237- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict
11238
11239**Tooltip appears**:
11240```
11241        ┌────────────────────┐
11242        │ Conflicts with:    │
11243        │ • Super Bowl       │
11244        │   (3:30 PM-7:00 PM)│
11245        └─────────┬──────────┘
112461124711248```
11249
11250## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING
11251
11252### �� Bug Fix
11253- **Fixed:** Events without end_time now properly get 1-hour default duration
11254- **Fixed:** Empty string end_time values now treated as missing (was causing issues)
11255- **Improved:** More robust checking for `end_time` field (checks both isset and not empty)
11256
11257### Technical Details
11258
11259**The Problem**:
11260```php
11261// Before (broken):
11262$endTime = isset($event['end_time']) ? $event['end_time'] : default;
11263
11264// If end_time exists but is empty string "":
11265isset($event['end_time']) = TRUE
11266$endTime = ""  // ← Empty string, not default!
11267```
11268
11269**The Fix**:
11270```php
11271// After (fixed):
11272$endTime = (isset($event['end_time']) && $event['end_time'] !== '')
11273    ? $event['end_time']
11274    : $this->addHoursToTime($startTime, 1);
11275
11276// Now empty string gets the default 1-hour duration
11277```
11278
11279**Why This Matters**:
11280Events like "6:00 PM Evening Service" with no end time should be treated as 6:00-7:00 PM (1 hour). If the `end_time` field contains an empty string instead of being absent, the old code would use the empty string, causing conflict detection to fail.
11281
11282**Example**:
11283```
11284Super Bowl: 3:30 PM - 7:00 PM
11285Evening Service: 6:00 PM - ??? (should be 7:00 PM)
11286
11287If end_time = "" (empty string):
11288  Old code: Uses "" → conflict detection fails
11289  New code: Uses 7:00 PM → conflict detected ✓
11290```
11291
11292### Testing
11293If you're still not seeing the conflict on the 6:00 PM service:
112941. Check if the event has `end_time` set in the JSON
112952. Clear cache (Admin → Manage Events → Clear Cache)
112963. The conflict should now appear
11297
11298## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS
11299
11300### ✨ Feature Added
11301- **Added:** Hover over ⚠ badge to see which events are conflicting
11302- **Added:** Tooltip shows conflicting event titles and times
11303- **Added:** Works in both sidebar sections and clicked day events
11304
11305### Technical Details
11306
11307**Conflict Tracking Enhanced**:
11308```php
11309// Now tracks WHICH events conflict:
11310$event['conflictingWith'] = [
11311    ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'],
11312    ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30']
11313];
11314```
11315
11316**Tooltip Format**:
11317```
11318Conflicts with:
11319• Meeting (10:00 AM-11:00 AM)
11320• Call (10:30 AM-11:30 PM)
11321```
11322
11323**Where It Works**:
11324- ✅ Today section (sidebar)
11325- ✅ Tomorrow section (sidebar)
11326- ✅ Important Events section (sidebar)
11327- ✅ Clicked day events (week grid)
11328
11329**Cursor**: Changes to `help` cursor on hover to indicate tooltip
11330
11331### Note on Multi-Day Events
11332The current conflict detection only checks time conflicts **within the same day**. If you have an event that spans multiple days (e.g., start date on Monday, end date on Wednesday), each day is treated independently. To see conflicts across the entire span, you would need to check each individual day.
11333
11334## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC
11335
11336### �� Bug Fixes
11337- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections
11338- **Fixed:** Important Events now shows events even if they're today or tomorrow
11339- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular)
11340
11341### Technical Details
11342
11343**Conflict Badge Issue**:
11344```php
11345// BROKEN (line 2511):
11346$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']);
11347// ↑ Checking 'conflicts' (plural)
11348
11349// But detectTimeConflicts() sets:
11350$event['conflict'] = true/false;
11351// ↑ Setting 'conflict' (singular)
11352
11353// FIXED:
11354$hasConflict = isset($event['conflict']) && $event['conflict'];
11355```
11356
11357**Result**: Badge now shows for ALL conflicting events in sidebar sections
11358
11359**Important Events Logic Issue**:
11360```php
11361// BROKEN:
11362if ($dateKey === $todayStr) {
11363    $todayEvents[] = ...;
11364} elseif ($dateKey === $tomorrowStr) {
11365    $tomorrowEvents[] = ...;
11366} else {  // ← Only checked if NOT today/tomorrow!
11367    if ($isImportant) {
11368        $importantEvents[] = ...;
11369    }
11370}
11371
11372// FIXED:
11373if ($dateKey === $todayStr) {
11374    $todayEvents[] = ...;
11375}
11376if ($dateKey === $tomorrowStr) {
11377    $tomorrowEvents[] = ...;
11378}
11379// ↑ Changed to separate 'if' statements
11380if ($isImportant && $dateKey in this week) {
11381    $importantEvents[] = ...;  // ← Now includes today/tomorrow too!
11382}
11383```
11384
11385**Result**: Important namespace events now show in Important section even if they're today or tomorrow
11386
11387### Conflict Badge Display
11388- Simplified to just ⚠ icon (no count)
11389- Orange color (#ff9800)
11390- 10px font size
11391- Hover shows "Time conflict detected"
11392
11393## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY
11394
11395### �� Bug Fix
11396- **Fixed:** Important Events section now displays all events correctly
11397- **Fixed:** Single-event days now get conflict flag (was returning early without flag)
11398- **Fixed:** Conflict detection no longer causes events to disappear from Important section
11399
11400### Technical Details
11401
11402**The Problem**:
11403- `detectTimeConflicts()` returned early if only 1 event on a day
11404- Returned original array without adding 'conflict' field
11405- This inconsistency caused issues in event categorization
11406
11407**The Solution**:
11408```php
11409// Before (broken):
11410if (empty($dayEvents) || count($dayEvents) < 2) {
11411    return $dayEvents;  // No 'conflict' field added!
11412}
11413
11414// After (fixed):
11415if (count($dayEvents) === 1) {
11416    return [array_merge($dayEvents[0], ['conflict' => false])];  // Always add flag
11417}
11418```
11419
11420**Result**:
11421- All events now have 'conflict' field consistently
11422- Single events: conflict = false
11423- Multiple events: conflict = true/false based on overlap
11424- Important Events section displays correctly
11425
11426## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES
11427
11428### �� Bug Fixes
11429- **Fixed:** Conflict badge (⚠) now displays in clicked day events
11430- **Fixed:** Recurring events edit now updates time and end_time correctly
11431- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit
11432
11433### ✨ Features Added
11434- **Added:** Time conflict detection for overlapping events
11435- **Added:** detectTimeConflicts() function checks all events on same day
11436- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions
11437- **Added:** Events now have 'conflict' flag set automatically
11438
11439### �� UI Changes
11440- **Changed:** Admin tab order: �� Manage Events (first), �� Update Plugin, ⚙️ Outlook Sync
11441- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin")
11442- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars)
11443
11444### Technical Details
11445
11446**Conflict Detection**:
11447```php
11448// Automatically detects overlapping events on same day
11449// Sets 'conflict' flag to true if event overlaps with another
11450$eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
11451```
11452
11453**Logic**:
11454- All-day events never conflict (no time set)
11455- Timed events check for overlap with other timed events
11456- Overlap = start1 < end2 AND start2 < end1
11457- Default duration is 60 minutes if no end_time
11458
11459**Recurring Events Fix**:
11460- Old: Updated `$event['start']` and `$event['end']` (wrong fields)
11461- New: Updates `$event['time']` and `$event['end_time']` (correct fields)
11462- Now edits actually save and update the events
11463
11464**Week View Bars**:
11465- Shows 4 colored bars instead of 3
11466- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc.
11467
11468## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE ��
11469
11470**Major Release**: Complete Matrix-themed calendar plugin with advanced features!
11471
11472### �� Major Features
11473
11474#### Sidebar Widget
11475- **Week Grid**: Interactive 7-day calendar with click-to-view events
11476- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips
11477- **Live Clock**: Updates every second with date display
11478- **Real-time Weather**: Geolocation-based temperature with icon
11479- **Event Sections**: Today (orange), Tomorrow (green), Important (purple)
11480- **Add Event Button**: Dark green bar opens full event creation dialog
11481- **Matrix Theme**: Green glow effects throughout
11482
11483#### Event Management
11484- **Single Color Bars**: Clean 3px bars showing event's assigned color
11485- **All-Day Events First**: Then sorted chronologically by time
11486- **Conflict Detection**: Orange ⚠ badge on overlapping events
11487- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//)
11488- **HTML Rendering**: Pre-rendered for JavaScript display
11489- **Click-to-View**: Click week grid days to expand event details
11490
11491#### Admin Interface
11492- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button
11493- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings
11494- **Manage Events Tab**: Browse, edit, delete, move events across namespaces
11495
11496#### Outlook Sync
11497- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook
11498- **Category Mapping**: Map colors to Outlook categories
11499- **Conflict Resolution**: Time conflict detection
11500- **Import/Export Config**: Encrypted configuration files
11501
11502### �� Design
11503- **Matrix Theme**: Authentic green glow aesthetic
11504- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections
11505- **Color Scheme**:
11506  - Today: Orange #ff9800
11507  - Tomorrow: Green #4caf50
11508  - Important: Purple #9b59b6
11509  - Add Event: Dark green #006400
11510  - System bars: Green/Purple/Orange
11511
11512### �� Technical Highlights
11513- **Zero-margin Design**: Perfect flush alignment throughout
11514- **Flexbox Layout**: Modern, responsive structure
11515- **AJAX Operations**: No page reloads needed
11516- **Smart Sorting**: All-day events first, then chronological
11517- **Tooltip System**: Detailed stats on hover (working correctly)
11518- **Event Dialog**: Full form with drag support
11519- **Cache Management**: One-click cache clearing
11520
11521### �� Breaking Changes from v3.x
11522- Removed dual color bars (now single event color bar only)
11523- Add Event button moved to between header and week grid
11524- All-day events now appear FIRST (not last)
11525- Update Plugin tab is now the default admin tab
11526
11527### �� Bug Fixes (v3.10.x → v4.0.0)
11528- ✅ Fixed color bars not showing (align-self:stretch vs height:100%)
11529- ✅ Fixed tooltip function naming (sanitized calId for JavaScript)
11530- ✅ Fixed weather display (added updateWeather function)
11531- ✅ Fixed HTML rendering in events (title_html/description_html fields)
11532- ✅ Fixed Add Event dialog (null check for calendar element)
11533- ✅ Fixed text positioning in Add Event button
11534- ✅ Fixed spacing throughout sidebar widget
11535
11536### �� Complete Feature List
11537- Full calendar view (month grid)
11538- Sidebar widget (week view)
11539- Event panel (standalone)
11540- Event list (date ranges)
11541- Namespace support
11542- Color coding
11543- Time conflict detection
11544- DokuWiki syntax in events
11545- Outlook synchronization
11546- System monitoring
11547- Weather display
11548- Live clock
11549- Admin interface
11550- Cache management
11551- Draggable dialogs
11552- AJAX save/edit/delete
11553- Import/export config
11554
11555### �� Usage
11556
11557**Sidebar Widget**:
11558```
11559{{calendar sidebar}}
11560{{calendar sidebar namespace=team}}
11561```
11562
11563**Full Calendar**:
11564```
11565{{calendar}}
11566{{calendar year=2026 month=6 namespace=team}}
11567```
11568
11569**Event Panel**:
11570```
11571{{eventpanel}}
11572```
11573
11574**Event List**:
11575```
11576{{eventlist daterange=2026-01-01:2026-01-31}}
11577```
11578
11579### �� Stats
11580- **40+ versions** developed during v3.x iterations
11581- **3.10.0 → 3.11.4**: Polish and refinement
11582- **4.0.0**: Production-ready Matrix Edition
11583
11584### �� Credits
11585Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration.
11586
11587---
11588
11589## Previous Versions (v3.11.4 and earlier)
11590
11591## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING
11592- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px)
11593- **Improved:** Small breathing room between system stats bars and Add Event button
11594- **Visual:** Better spacing for cleaner appearance
11595
11596### CSS Change:
11597**eventlist-today-header**:
11598- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px`
11599
11600### Visual Result:
11601```
11602│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats bars
11603│                       │  ← 2px space (restored)
11604├───────────────────────┤
11605│  + ADD EVENT          │  ← Add Event bar
11606├───────────────────────┤
11607```
11608
11609**Before (v3.11.3)**: No space, bars directly touch Add Event button
11610**After (v3.11.4)**: 2px breathing room for better visual hierarchy
11611
11612## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION
11613- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset
11614- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error
11615- **Changed:** Add Event text moved up 1px (position:relative; top:-1px)
11616- **Changed:** Line-height reduced from 12px to 10px for better text centering
11617- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets
11618
11619### JavaScript Fix:
11620**Problem**: Line 1084-1085 in calendar-main.js
11621```javascript
11622const calendar = document.getElementById(calId);
11623const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error!
11624```
11625
11626**Solution**: Added null check
11627```javascript
11628const calendar = document.getElementById(calId);
11629const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null;
11630```
11631
11632**Why This Happened**:
11633- Regular calendar has element with id=calId
11634- Sidebar widget doesn't have this element (different structure)
11635- Code tried to read .dataset on null, causing error
11636
11637### Text Position Fix:
11638**Before**:
11639- line-height: 12px
11640- vertical-align: middle
11641- Text slightly low
11642
11643**After**:
11644- line-height: 10px
11645- position: relative; top: -1px
11646- Text perfectly centered
11647
11648### What Works Now:
11649✅ Click "+ ADD EVENT" in sidebar → Dialog opens
11650✅ No console errors
11651✅ Text properly centered vertically
11652✅ Form pre-filled with today's date
11653✅ Save works correctly
11654
11655## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR
11656- **Added:** Event dialog to sidebar widget (same as regular calendar)
11657- **Changed:** Add Event button now opens proper event form dialog
11658- **Added:** renderEventDialog() called in renderSidebarWidget()
11659- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date
11660- **Improved:** Can now add events directly from sidebar widget
11661
11662### Add Event Button Behavior:
11663**Before (v3.11.1)**: Showed alert with instructions
11664**After (v3.11.2)**: Opens full event creation dialog
11665
11666**Dialog Features**:
11667- Date field (defaults to today)
11668- Title field (required)
11669- Time field (optional)
11670- End time field (optional)
11671- Color picker
11672- Category field
11673- Description field
11674- Save and Cancel buttons
11675- Draggable dialog
11676
11677### Technical Changes:
11678- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget()
11679- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')`
11680- Dialog uses same structure as regular calendar
11681- Uses existing openAddEvent() and saveEventCompact() JavaScript functions
11682
11683### User Flow:
116841. User clicks "+ ADD EVENT" green bar
116852. Event dialog opens with today's date pre-filled
116863. User fills in event details
116874. User clicks Save
116885. Event saved via AJAX
116896. Dialog closes
116907. Sidebar refreshes to show new event
11691
11692## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG
11693- **Fixed:** Removed bottom padding from header (was 2px, now 0)
11694- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0)
11695- **Fixed:** Add Event bar now flush against header with zero gap
11696- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin
11697- **Improved:** Alert provides clear instructions on how to add events
11698
11699### CSS Changes:
11700**eventlist-today-header**:
11701- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom)
11702
11703**eventlist-stats-container**:
11704- `margin-top: 2px` → `margin: 0` (removed all margins)
11705
11706### Add Event Button Behavior:
11707**Before**: Clicked → Navigated to Admin → Manage Events tab
11708**After**: Clicked → Shows alert with instructions
11709
11710**Alert Message**:
11711```
11712To add an event, go to:
11713Admin → Calendar Management → Manage Events tab
11714or use the full calendar view {{calendar}}
11715```
11716
11717### Visual Result:
11718```
11719│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats (no margin-bottom)
11720├────────────────────────┤
11721│  + ADD EVENT           │  ← Perfectly flush!
11722├────────────────────────┤
11723```
11724
11725No gaps, perfectly aligned!
11726
11727## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE
11728- **Moved:** Add Event bar back to original position (between header and week grid)
11729- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff)
11730- **Changed:** Letter spacing reduced from 0.5px to 0.4px
11731- **Fixed:** Text now fully visible without being cut off
11732- **Final:** Optimal position and size determined
11733
11734### Final Layout:
11735```
11736┌─────────────────────────────┐
11737│  Clock | Weather | Stats    │  ← Header
11738├─────────────────────────────┤
11739│  + ADD EVENT                 │  ← Bar (back here, smaller text)
11740├─────────────────────────────┤
11741│  M  T  W  T  F  S  S        │  ← Week Grid
11742│  3  4  5  6  7  8  9        │
11743├─────────────────────────────┤
11744│  Today                       │  ← Event sections
11745└─────────────────────────────┘
11746```
11747
11748### Text Size Changes:
11749**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off
11750**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible
11751
11752### Why This Position:
11753- Separates header from calendar
11754- Natural action point after viewing stats
11755- Users see stats → decide to add event → view calendar
11756- Consistent with original design intent
11757
11758## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID
11759- **Moved:** Add Event bar repositioned from between header/grid to below week grid
11760- **Improved:** Better visual flow - header → stats → grid → add button → events
11761- **Changed:** Add Event bar now acts as separator between calendar and event sections
11762
11763### New Layout:
11764```
11765┌─────────────────────────────┐
11766│  Clock | Weather | Stats    │  ← Header
11767├─────────────────────────────┤
11768│  M  T  W  T  F  S  S        │  ← Week Grid
11769│  3  4  5  6  7  8  9        │
11770├─────────────────────────────┤
11771│  + ADD EVENT                 │  ← Add bar (moved here!)
11772├─────────────────────────────┤
11773│  Today                       │  ← Event sections
11774│  Tomorrow                    │
11775│  Important Events            │
11776└─────────────────────────────┘
11777```
11778
11779### Visual Flow:
11780**Before (v3.10.8)**:
117811. Header (clock, weather, stats)
117822. **+ ADD EVENT** bar
117833. Week grid
117844. Event sections
11785
11786**After (v3.10.9)**:
117871. Header (clock, weather, stats)
117882. Week grid (calendar days)
117893. **+ ADD EVENT** bar
117904. Event sections
11791
11792### Benefits:
11793- Natural reading flow: View calendar → Add event → See events
11794- Add button positioned between calendar and event list
11795- Acts as visual separator
11796- More logical action placement
11797
11798## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR
11799- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color
11800- **Changed:** Events now display with single 3px color bar (event's assigned color only)
11801- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly
11802- **Simplified:** Cleaner visual with one color bar instead of two
11803- **Improved:** More space for event content without extra bar
11804
11805### Visual Changes:
11806
11807**Before (v3.10.7)** - Dual color bars:
11808```
11809├─ [Orange][Green]  Event Title
11810├─ [Blue][Purple]   Event Title
11811```
11812
11813**After (v3.10.8)** - Single color bar:
11814```
11815├─ [Green]  Event Title    ← Only event color!
11816├─ [Purple] Event Title    ← Only event color!
11817```
11818
11819### Add Bar Changes:
11820- Added `margin:0` to eliminate gaps
11821- Now flush against header (no space above)
11822- Now flush against week grid (no space below)
11823- Perfect seamless connection
11824
11825### Technical Changes:
11826**renderSidebarEvent()**:
11827- Removed section color bar (4px)
11828- Kept only event color bar (3px)
11829
11830**showDayEvents() JavaScript**:
11831- Removed section color bar (4px blue)
11832- Kept only event color bar (3px)
11833
11834**Add Event bar**:
11835- Added `margin:0` inline style
11836- Removed all top/bottom margins
11837
11838## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR
11839- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day)
11840- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%`
11841- **Changed:** Add Event bar color from orange to dark green (#006400)
11842- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off)
11843- **Changed:** Add Event bar text now bright green (#00ff00) with green glow
11844- **Changed:** Add Event bar font size increased from 7px to 9px
11845- **Changed:** Add Event bar letter spacing increased to 0.5px
11846- **Improved:** Hover effect on Add Event bar now darker green (#004d00)
11847
11848### Color Bar Fix Details:
11849**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars
11850**Solution**: Applied same fix as clicked day events:
11851- Changed parent div: `align-items:start` → `align-items:stretch`
11852- Added `min-height:20px` to parent
11853- Changed bars: `height:100%` → `align-self:stretch`
11854- Bars now properly fill vertical space in ALL sections
11855
11856### Add Event Bar Changes:
11857**Before**:
11858- Background: Orange (#ff9800)
11859- Text: Black (#000)
11860- Height: 6px (text cut off)
11861- Font: 7px
11862
11863**After**:
11864- Background: Dark green (#006400)
11865- Text: Bright green (#00ff00) with green glow
11866- Height: 12px (text fully visible)
11867- Font: 9px
11868- Hover: Darker green (#004d00)
11869- Matrix-themed green aesthetic
11870
11871## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE
11872- **Fixed:** Event color bars now display correctly in clicked day events
11873- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events
11874- **Added:** Conflict badge (⚠) appears on right side of conflicting events
11875- **Updated:** Complete README.md rewrite with full Matrix theme documentation
11876- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering)
11877- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px`
11878- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning
11879
11880### Color Bar Fix:
11881**Problem**: Bars had `height:100%` but parent had no explicit height
11882**Solution**:
11883- Changed to `align-self:stretch` on bars
11884- Parent uses `align-items:stretch`
11885- Added `min-height:20px` to parent
11886- Bars now properly fill vertical space
11887
11888### Sorting Change:
11889**Before**: Timed events first → All-day events last
11890**After**: All-day events FIRST → Timed events chronologically
11891
11892**Example**:
11893```
11894Monday, Feb 5
11895├─ All Day - Project Deadline       ← All-day first
11896├─ 8:00 AM - Morning Standup        ← Earliest time
11897├─ 10:30 AM - Coffee with Bob
11898└─ 2:00 PM - Team Meeting           ← Latest time
11899```
11900
11901### Conflict Badge:
11902- Orange warning triangle (⚠) on right side
11903- 10px font size
11904- Only appears if `event.conflict` is true
11905- Title attribute shows "Time conflict detected"
11906- Small and unobtrusive
11907
11908### README Update:
11909- Complete rewrite with Matrix theme focus
11910- Full usage instructions for all features
11911- Admin interface documentation
11912- Outlook sync setup guide
11913- System monitoring details
11914- Troubleshooting section
11915- Color scheme reference
11916- File structure documentation
11917- Performance tips
11918- Security notes
11919- Quick start examples
11920
11921## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR
11922- **Added:** Events now sorted by time when clicking week grid days
11923- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px)
11924- **Improved:** Events with times appear first, sorted chronologically
11925- **Improved:** All-day events appear after timed events
11926- **Changed:** Add Event bar font size reduced to 7px (from 10px)
11927- **Changed:** Add Event bar now has 0 padding and fixed 6px height
11928
11929### Sorting Logic:
11930- Events with times sorted by time (earliest first)
11931- All-day events (no time) appear at the end
11932- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare
11933- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event
11934
11935### Add Event Bar Changes:
11936- **Height**: 6px (was ~12px with padding)
11937- **Padding**: 0 (was 4px top/bottom)
11938- **Font Size**: 7px (was 10px)
11939- **Letter Spacing**: 0.3px (was 0.5px)
11940- **Line Height**: 6px to match height
11941- **Vertical Align**: Middle for text centering
11942
11943## Version 3.10.4 (2026-02-06) - ADD EVENT BAR
11944- **Added:** Thin orange "Add Event" bar between header and week grid
11945- **Added:** Quick access to event creation from sidebar widget
11946- **Styled:** Sleek design with hover effects and glow
11947- **Interactive:** Clicks navigate to Manage Events tab in admin
11948- **Improved:** User workflow for adding events from sidebar
11949
11950### Visual Design:
11951- Orange background (#ff9800) matching Today section color
11952- 4px top/bottom padding for thin, sleek appearance
11953- Black text with white text-shadow for visibility
11954- Hover effect: Darkens to #ff7700 with enhanced glow
11955- Orange glow effect (box-shadow) matching Matrix theme
11956- Centered "+ ADD EVENT" text (10px, bold, letter-spacing)
11957
11958### Technical Changes:
11959- Added between header close and renderWeekGrid() call
11960- Inline onclick handler navigates to admin manage tab
11961- Inline onmouseover/onmouseout for hover effects
11962- Smooth 0.2s transition on all style changes
11963
11964## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION
11965- **Changed:** Update Plugin tab is now the default tab when opening admin
11966- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab
11967- **Improved:** Clear Cache button now larger and more prominent with helpful description
11968- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events
11969- **Removed:** Debug console.log statements from day event display
11970- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab
11971
11972### UI Changes:
11973- Update Plugin tab opens by default (was Config/Outlook Sync tab)
11974- Clear Cache button prominently displayed at top of Update Plugin tab
11975- Orange ��️ button (10px 20px padding) with confirmation dialog
11976- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin"
11977- Success/error messages display on Update Plugin tab after cache clear
11978- Tab navigation reordered to put Update first
11979
11980### Technical Changes:
11981- Default tab changed from 'config' to 'update' in html() method
11982- Tab navigation HTML reordered to show Update Plugin tab first
11983- clearCache() method now redirects with 'update' tab parameter
11984- Removed Clear Cache button from renderConfigTab()
11985- Added Clear Cache button to renderUpdateTab() with message display
11986
11987## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX
11988- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days
11989- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML
11990- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields
11991- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events
11992
11993### Technical Changes:
11994- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render()
11995- Events added to weekEvents now include pre-rendered HTML versions
11996- title_html and description_html fields populated before json_encode()
11997- JavaScript now receives properly formatted HTML content
11998
11999## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON
12000- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123)
12001- **Fixed:** HTML event handlers now call correctly sanitized function names
12002- **Fixed:** Weather temperature now updates correctly in sidebar widget
12003- **Added:** Weather update function to sidebar widget JavaScript
12004- **Added:** "Clear Cache" button in admin panel for easy cache refresh
12005- **Added:** Default weather location set to Irvine, CA when geolocation unavailable
12006- **Improved:** All tooltip functions now work correctly on system status bars
12007
12008### Technical Changes:
12009- Changed tooltip function names to use $jsCalId instead of $calId
12010- Changed HTML onmouseover/onmouseout to use $jsCalId
12011- Added updateWeather() function to sidebar widget
12012- Added getWeatherIcon() function to sidebar widget
12013- Added clearCache() method in admin.php
12014- Added recursiveDelete() helper method in admin.php
12015- Admin UI now has ��️ Clear Cache button alongside Export/Import
12016
12017## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES
12018- **Fixed:** JavaScript syntax error "Missing initializer in const declaration"
12019- **Fixed:** Event links and formatting not displaying in clicked day events
12020- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores
12021- **Changed:** Event titles now use `title_html` field to preserve HTML formatting
12022- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting
12023- **Improved:** All JavaScript variable names now use valid syntax
12024- **Improved:** Links, bold, italic, and other HTML formatting preserved in events
12025
12026### Technical Changes:
12027- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);`
12028- JavaScript variables now use underscores instead of dashes
12029- Event HTML rendering preserves DokuWiki formatting
12030- Fixed "showTooltip_sidebar is not defined" errors
12031- Fixed "showDayEvents_cal is not defined" errors
12032
12033## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX
12034- **Fixed:** Critical JavaScript loading order issue causing ReferenceError
12035- **Fixed:** Functions now defined BEFORE HTML that uses them
12036- **Changed:** Consolidated all JavaScript into single comprehensive script block
12037- **Removed:** ~290 lines of duplicate JavaScript code
12038- **Added:** Shared state management with `sharedState_[calId]` object
12039- **Improved:** System tooltip functions now work correctly
12040- **Improved:** Week grid click events now work correctly
12041
12042### Technical Changes:
12043- Moved all JavaScript to beginning of widget (before HTML)
12044- Removed duplicate script blocks
12045- Unified tooltip and stats functions
12046- Shared latestStats and cpuHistory state
12047- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined"
12048
12049## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS
12050- **Added:** Dual color bars on events (section color + event color)
12051- **Added:** Click week grid days to view events (replaced hover tooltips)
12052- **Added:** Expandable section below week grid for selected day events
12053- **Added:** Blue theme for selected day section
12054- **Changed:** Week grid days now clickable instead of tooltips
12055- **Changed:** Section bar: 4px wide (left)
12056- **Changed:** Event bar: 3px wide (right)
12057- **Increased:** Gap between color bars from 3px to 6px
12058- **Improved:** Click is more reliable and mobile-friendly than hover tooltips
12059
12060### Visual Changes:
12061- Each event shows TWO color bars side-by-side
12062- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue)
12063- Right bar (3px): Individual event's assigned color
12064- Click any day in week grid to expand event list
12065- X button to close selected day events
12066
12067## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY
12068- **Increased:** Event color bar width from 2px to 3px
12069- **Increased:** Gap between section and event bars from 3px to 6px
12070- **Improved:** Event color bars now more visible alongside section bars
12071- **Note:** Dual color bar system already in place from v3.9.6
12072
12073## Version 3.9.6 (2026-02-05) - UI REFINEMENTS
12074- **Changed:** Date in Important Events moved below event name (was above)
12075- **Changed:** Section headers now 9px font size (was 10px)
12076- **Changed:** Section headers now normal case (was ALL CAPS)
12077- **Changed:** Letter spacing reduced from 0.8px to 0.3px
12078- **Improved:** More natural reading flow with date below event name
12079- **Improved:** Cleaner, more subtle section headers
12080
12081### Header Changes:
12082- "TODAY" → "Today"
12083- "TOMORROW" → "Tomorrow"
12084- "IMPORTANT EVENTS" → "Important Events"
12085
12086## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN
12087- **Redesigned:** Complete overhaul of `sidebar` parameter
12088- **Added:** Compact week-at-a-glance itinerary view (200px wide)
12089- **Added:** Live clock widget at top of sidebar
12090- **Added:** 7-cell week grid showing event bars
12091- **Added:** Today section with orange header and left border
12092- **Added:** Tomorrow section with green header and left border
12093- **Added:** Important Events section with purple header and left border
12094- **Added:** Admin setting to configure important namespaces
12095- **Added:** Time conflict badges in sidebar events
12096- **Added:** Task checkboxes in sidebar events
12097- **Changed:** Sidebar now optimized for narrow spaces (200px)
12098- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets
12099
12100### New Features:
12101- Clock updates every second showing current time
12102- Week grid shows Mon-Sun with colored event bars
12103- Today/Tomorrow sections show full event details
12104- Important events highlighted in purple (configurable namespaces)
12105- All badges (conflict, time, etc.) shown in compact format
12106- Automatic time conflict detection
12107
12108## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP
12109- **Removed:** 16 unused/debug/backup files
12110- **Removed:** 69 console.log() debug statements
12111- **Removed:** 3 orphaned object literals from console.log removal
12112- **Removed:** Temporary comments and markers
12113- **Fixed:** JavaScript syntax errors from cleanup
12114- **Improved:** Code quality and maintainability
12115- **Improved:** Reduced plugin size by removing unnecessary files
12116- **Status:** Production-ready, fully cleaned codebase
12117
12118### Files Removed:
12119- style.css.backup, script.js.backup
12120- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php
12121- debug_events.php, debug_html.php, cleanup_events.php
12122- fix_corrupted_json.php, fix_wildcard_namespaces.php
12123- find_outlook_duplicates.php, update_namespace.php
12124- validate_calendar_json.php, admin.js
12125- test_date_field.html
12126
12127## Version 3.7.5 (2026-02-05)
12128- **Fixed:** PHP syntax error (duplicate foreach loop removed)
12129- **Fixed:** Time variable handling in grace period logic
12130
12131## Version 3.7.4 (2026-02-05)
12132- **Added:** 15-minute grace period for timed events
12133- **Changed:** Events with times now stay visible for 15 minutes after their start time
12134- **Changed:** Prevents events from immediately disappearing when they start
12135- **Improved:** Better user experience for ongoing events
12136- **Fixed:** Events from earlier today now properly handled with grace period
12137
12138## Version 3.7.3 (2026-02-05)
12139- **Changed:** Complete redesign of cleanup section for compact, sleek layout
12140- **Changed:** Radio buttons now in single row at top
12141- **Changed:** All options visible with grayed-out inactive states (opacity 0.4)
12142- **Changed:** Inline controls - no more grid layout or wrapper boxes
12143- **Changed:** Namespace filter now compact single-line input
12144- **Changed:** Smaller buttons and tighter spacing throughout
12145- **Improved:** More professional, space-efficient design
12146
12147## Version 3.7.2 (2026-02-04)
12148- **Fixed:** Strange boxes under cleanup options - now properly hidden
12149- **Changed:** Unified color scheme across all admin sections
12150- **Changed:** Green (#00cc07) - Primary actions and main theme
12151- **Changed:** Orange (#ff9800) - Warnings and cleanup features
12152- **Changed:** Purple (#7b1fa2) - Secondary actions and accents
12153- **Improved:** Consistent visual design throughout admin interface
12154
12155## Version 3.7.1 (2026-02-04)
12156- **Fixed:** Cleanup section background changed from orange to white
12157- **Fixed:** Event cleanup now properly scans all calendar directories
12158- **Added:** Debug info display when preview finds no events
12159- **Improved:** Better directory scanning logic matching other features
12160
12161## Version 3.7.0 (2026-02-04)
12162- **Added:** Event cleanup feature in Events Manager
12163- **Added:** Delete old events by age (months/years old)
12164- **Added:** Delete events by status (completed tasks, past events)
12165- **Added:** Delete events by date range
12166- **Added:** Namespace filter for targeted cleanup
12167- **Added:** Preview function to see what will be deleted
12168- **Added:** Automatic backup creation before cleanup
12169- **Changed:** Reduced changelog viewer height to 100px (was 400px)
12170
12171## Version 3.6.3 (2026-02-04)
12172- **Fixed:** Conflict tooltips now work properly after navigating between months
12173- **Added:** Changelog display in Update Plugin tab
12174- **Added:** CHANGELOG.md file with version history
12175- **Improved:** Changelog shows last 10 versions with color-coded change types
12176- **Fixed:** Removed debug console.log statements
12177
12178## Version 3.6.2 (2026-02-04)
12179- **Fixed:** Month title now updates correctly when navigating between months
12180- **Changed:** All eventpanel header elements reduced by 10% for more compact design
12181- **Changed:** Reduced header height from 78px to 70px
12182
12183## Version 3.6.1 (2026-02-04)
12184- **Changed:** Complete redesign of eventpanel header with practical two-row layout
12185- **Fixed:** Improved layout for narrow widths (~500px)
12186- **Changed:** Simplified color scheme (removed purple gradient)
12187
12188## Version 3.6.0 (2026-02-04)
12189- **Changed:** Redesigned eventpanel header with gradient background
12190- **Changed:** Consolidated multiple header rows into compact single-row design
12191
12192## Version 3.5.1 (2026-02-04)
12193- **Changed:** Moved event search bar into header row next to + Add button
12194- **Improved:** More compact UI with search integrated into header
12195
12196## Version 3.5.0 (2026-02-04)
12197- **Added:** Event search functionality in sidebar and eventpanel
12198- **Added:** Real-time filtering as you type
12199- **Added:** Clear button (✕) appears when searching
12200- **Added:** "No results" message when search returns nothing
12201
12202## Version 3.4.7 (2026-02-04)
12203- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding)
12204- **Fixed:** Removed debug logging from console
12205- **Changed:** Updated export version number to match plugin version
12206
12207## Version 3.4.6 (2026-02-04)
12208- **Added:** Debug logging to diagnose conflict detection issues
12209- **Development:** Extensive console logging for troubleshooting
12210
12211## Version 3.4.5 (2026-02-04)
12212- **Added:** Debug logging to showDayPopup and conflict detection
12213- **Development:** Added logging to trace conflict detection flow
12214
12215## Version 3.4.4 (2026-02-04)
12216- **Fixed:** Conflict detection now persists across page refreshes (PHP-based)
12217- **Fixed:** Conflict tooltips now appear on hover
12218- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation)
12219- **Added:** Conflict badges in both future and past events sections
12220
12221## Version 3.4.3 (2026-02-04)
12222- **Added:** Custom styled conflict tooltips with hover functionality
12223- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2)
12224- **Improved:** Beautiful tooltip design with orange header and clean formatting
12225
12226## Version 3.4.2 (2026-02-04)
12227- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3)
12228
12229## Version 3.4.1 (2026-02-04)
12230- **Fixed:** End time field now properly saves to database
12231- **Fixed:** End time dropdown now filters to show only valid times after start time
12232- **Added:** Smart dropdown behavior - expands on focus, filters invalid options
12233- **Improved:** End time auto-suggests +1 hour when start time selected
12234
12235## Version 3.4.0 (2026-02-04)
12236- **Added:** End time support for events (start and end times)
12237- **Added:** Automatic time conflict detection
12238- **Added:** Conflict warning badges (⚠️) on events with overlapping times
12239- **Added:** Conflict tooltips showing which events conflict
12240- **Added:** Visual conflict indicators with pulse animation
12241- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM")
12242
12243## Version 3.3.77 (2026-02-04)
12244- **Fixed:** Namespace badge onclick handlers restored after clearing filter
12245- **Fixed:** Namespace filtering works infinitely (filter → clear → filter)
12246
12247## Version 3.3.76 (2026-02-04)
12248- **Fixed:** Namespace badges now clickable after clearing namespace filter
12249
12250## Version 3.3.75 (2026-02-04)
12251- **Fixed:** Form resubmission warnings eliminated
12252- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303
12253- **Changed:** All admin redirects now use absolute URLs
12254
12255## Version 3.3.74 (2026-02-04)
12256- **Fixed:** Clearing namespace filter now restores original namespace instead of default
12257- **Added:** data-original-namespace attribute to preserve initial namespace setting
12258- **Improved:** Console logging for namespace filter debugging
12259
12260## Version 3.3.73 (2026-02-03)
12261- **Added:** Dynamic namespace filtering banner with clear button
12262- **Fixed:** JavaScript function accessibility issues
12263- **Fixed:** Namespace badge click handlers in event lists
12264- **Improved:** Persistent namespace filtering across views
12265
12266## Earlier Versions
12267See previous transcripts for complete history through v3.3.73, including:
12268- Recurring events with Outlook sync
12269- Multi-namespace support
12270- Event categories and mapping
12271- Backup/restore functionality
12272- System statistics bar
12273- Namespace selector with fuzzy search
12274- Events Manager with import/export
12275- And much more...
12276