xref: /plugin/calendar/CHANGELOG.md (revision 9ccd446ecbe25932c2e89f7608c11495a1f1dbac)
11d05cddcSAtari911# Calendar Plugin Changelog
21d05cddcSAtari911
3*9ccd446eSAtari911## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE
4*9ccd446eSAtari911
5*9ccd446eSAtari911- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed
6*9ccd446eSAtari911- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified
7*9ccd446eSAtari911- **Audited:** style.css (3,218 lines) — balanced braces confirmed
8*9ccd446eSAtari911- **Audited:** All admin manage tab action handlers verified functional (13 actions)
9*9ccd446eSAtari911- **New:** Fresh README.md for GitHub with complete documentation
10*9ccd446eSAtari911- **Includes all v5.5.x fixes:**
11*9ccd446eSAtari911  - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total))
12*9ccd446eSAtari911  - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel
13*9ccd446eSAtari911  - Conflict badges on past events after AJAX navigation
14*9ccd446eSAtari911  - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal
15*9ccd446eSAtari911
16*9ccd446eSAtari911## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP
17*9ccd446eSAtari911
18*9ccd446eSAtari911- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers
19*9ccd446eSAtari911- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0`
20*9ccd446eSAtari911- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning
21*9ccd446eSAtari911- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name
22*9ccd446eSAtari911- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared
23*9ccd446eSAtari911- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check
24*9ccd446eSAtari911- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving
25*9ccd446eSAtari911- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files
26*9ccd446eSAtari911- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt
27*9ccd446eSAtari911- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache
28*9ccd446eSAtari911- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`)
29*9ccd446eSAtari911- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries`
30*9ccd446eSAtari911- **Removed:** Stale "NEW!" comment from Events Manager section
31*9ccd446eSAtari911
32*9ccd446eSAtari911## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH
33*9ccd446eSAtari911
34*9ccd446eSAtari911- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API
35*9ccd446eSAtari911- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status)
36*9ccd446eSAtari911- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run
37*9ccd446eSAtari911- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing
38*9ccd446eSAtari911- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total)
39*9ccd446eSAtari911- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed
40*9ccd446eSAtari911- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important)
41*9ccd446eSAtari911- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead
42*9ccd446eSAtari911- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text
43*9ccd446eSAtari911- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes)
44*9ccd446eSAtari911
45*9ccd446eSAtari911## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH
46*9ccd446eSAtari911
47*9ccd446eSAtari911- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys
48*9ccd446eSAtari911- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional)
49*9ccd446eSAtari911- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background
50*9ccd446eSAtari911- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files)
51*9ccd446eSAtari911- **Changed:** Wiki theme section header text now white for readability on colored backgrounds
52*9ccd446eSAtari911- **Changed:** Week grid JS theme colors now use actual $themeStyles values
53*9ccd446eSAtari911
54*9ccd446eSAtari911## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX
55*9ccd446eSAtari911
56*9ccd446eSAtari911- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch)
57*9ccd446eSAtari911
58*9ccd446eSAtari911## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING
59*9ccd446eSAtari911
60*9ccd446eSAtari911- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner
61*9ccd446eSAtari911- **Fixed:** Week grid conflict tooltips also fixed (same issue)
62*9ccd446eSAtari911- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data
63*9ccd446eSAtari911- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip)
64*9ccd446eSAtari911
65*9ccd446eSAtari911## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD
66*9ccd446eSAtari911
67*9ccd446eSAtari911- **Fixed:** Past events now expand on click from initial page load (PHP-rendered items were missing onclick="togglePastEventExpand(this)" handler that the JS-rebuilt version had)
68*9ccd446eSAtari911
69*9ccd446eSAtari911## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS
70*9ccd446eSAtari911
71*9ccd446eSAtari911- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body)
72*9ccd446eSAtari911- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string
73*9ccd446eSAtari911
74*9ccd446eSAtari911## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING
75*9ccd446eSAtari911
76*9ccd446eSAtari911- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping
77*9ccd446eSAtari911- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON)
78*9ccd446eSAtari911- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute
79*9ccd446eSAtari911- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility
80*9ccd446eSAtari911
81*9ccd446eSAtari911## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING
82*9ccd446eSAtari911
83*9ccd446eSAtari911- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation
84*9ccd446eSAtari911- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads
85*9ccd446eSAtari911- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-)
86*9ccd446eSAtari911- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1
87*9ccd446eSAtari911- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds
88*9ccd446eSAtari911- **Added:** ESC key now also closes day popups and conflict tooltips
89*9ccd446eSAtari911- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding
90*9ccd446eSAtari911
91*9ccd446eSAtari911## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY
92*9ccd446eSAtari911
93*9ccd446eSAtari911- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance
94*9ccd446eSAtari911- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js
95*9ccd446eSAtari911- **Refactored:** style.css is now the single source of truth for all visual styling
96*9ccd446eSAtari911- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container
97*9ccd446eSAtari911- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget)
98*9ccd446eSAtari911- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars
99*9ccd446eSAtari911- **Added:** CSS variable injection for {{eventlist panel}} containers
100*9ccd446eSAtari911- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers
101*9ccd446eSAtari911- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position
102*9ccd446eSAtari911- **Added:** Wiki template mapping reads __link__ as accent color from style.ini
103*9ccd446eSAtari911- **Added:** Detailed CSS variable reference table in style.css header comment
104*9ccd446eSAtari911- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php
105*9ccd446eSAtari911- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles
106*9ccd446eSAtari911- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div
107*9ccd446eSAtari911- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible)
108*9ccd446eSAtari911- **Removed:** $isWikiTheme branching from PHP render path
109*9ccd446eSAtari911
110*9ccd446eSAtari911## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! ��
111*9ccd446eSAtari911
112*9ccd446eSAtari911### �� Added: Hearts in Explosions!
113*9ccd446eSAtari911- **Added:** 8-12 pink hearts in each click explosion
114*9ccd446eSAtari911- **Added:** Random sizes (12-28px) and directions
115*9ccd446eSAtari911- **Result:** Extra love in every click! ��
116*9ccd446eSAtari911
117*9ccd446eSAtari911### �� Fixed: Background CSS Property for Dark Mode Readers
118*9ccd446eSAtari911- **Fixed:** Added `background: transparent` to CSS (was completely removed)
119*9ccd446eSAtari911- **Fixed:** Now CSS readers can detect and modify background property
120*9ccd446eSAtari911- **Why:** Inline styles override transparent, but CSS readers can now see the property
121*9ccd446eSAtari911- **Result:** Dark mode plugins can now change calendar backgrounds!
122*9ccd446eSAtari911
123*9ccd446eSAtari911### The CSS Problem
124*9ccd446eSAtari911
125*9ccd446eSAtari911**Why backgrounds weren't changing with dark mode readers**:
126*9ccd446eSAtari911
127*9ccd446eSAtari911**Before (v5.3.5)**:
128*9ccd446eSAtari911```css
129*9ccd446eSAtari911.calendar-compact-grid tbody td {
130*9ccd446eSAtari911    /* background removed - set via inline style */
131*9ccd446eSAtari911    border: 1px solid...
132*9ccd446eSAtari911}
133*9ccd446eSAtari911```
134*9ccd446eSAtari911
135*9ccd446eSAtari911**Problem**: CSS property doesn't exist!
136*9ccd446eSAtari911- Dark mode readers look for `background` property in CSS
137*9ccd446eSAtari911- Can't override what doesn't exist
138*9ccd446eSAtari911- Inline styles work, but readers can't modify them
139*9ccd446eSAtari911
140*9ccd446eSAtari911**After (v5.3.6)**:
141*9ccd446eSAtari911```css
142*9ccd446eSAtari911.calendar-compact-grid tbody td {
143*9ccd446eSAtari911    background: transparent;  /* Now exists! */
144*9ccd446eSAtari911    border: 1px solid...
145*9ccd446eSAtari911}
146*9ccd446eSAtari911```
147*9ccd446eSAtari911
148*9ccd446eSAtari911**Solution**:
149*9ccd446eSAtari911- Property exists in CSS
150*9ccd446eSAtari911- Dark mode readers can override it
151*9ccd446eSAtari911- Inline styles still override transparent
152*9ccd446eSAtari911- Everyone wins!
153*9ccd446eSAtari911
154*9ccd446eSAtari911### What's Fixed
155*9ccd446eSAtari911
156*9ccd446eSAtari911**Elements now have background property**:
157*9ccd446eSAtari911- `.calendar-compact-grid tbody td` ✓
158*9ccd446eSAtari911- `.calendar-compact-grid tbody td:hover` ✓
159*9ccd446eSAtari911- `.event-compact-item` ✓
160*9ccd446eSAtari911- `.event-compact-item:hover` ✓
161*9ccd446eSAtari911
162*9ccd446eSAtari911**How it works**:
163*9ccd446eSAtari9111. CSS sets `background: transparent` (default)
164*9ccd446eSAtari9112. Inline styles set actual color (overrides transparent)
165*9ccd446eSAtari9113. Dark mode readers can override CSS property
166*9ccd446eSAtari9114. Works for everyone!
167*9ccd446eSAtari911
168*9ccd446eSAtari911### Hearts in Explosion
169*9ccd446eSAtari911
170*9ccd446eSAtari911**Click anywhere → Hearts explode!**
171*9ccd446eSAtari911
172*9ccd446eSAtari911**Heart details**:
173*9ccd446eSAtari911- Count: 8-12 per explosion (random)
174*9ccd446eSAtari911- Size: 12-28px (random variety)
175*9ccd446eSAtari911- Emoji: �� (pink heart)
176*9ccd446eSAtari911- Direction: Random 360°
177*9ccd446eSAtari911- Speed: 60-140px travel
178*9ccd446eSAtari911- Duration: 0.8-1.2s
179*9ccd446eSAtari911- z-index: 9999999 (always visible)
180*9ccd446eSAtari911
181*9ccd446eSAtari911**Combined with**:
182*9ccd446eSAtari911- 25 glowing particles
183*9ccd446eSAtari911- 40 pixel sparkles
184*9ccd446eSAtari911- Bright flash
185*9ccd446eSAtari911- **Total: 73-77 elements!**
186*9ccd446eSAtari911
187*9ccd446eSAtari911### Visual Result
188*9ccd446eSAtari911
189*9ccd446eSAtari911**Click explosion**:
190*9ccd446eSAtari911```
191*9ccd446eSAtari911    �� ✦ • ✦ ��
192*9ccd446eSAtari911  �� •         • ��
193*9ccd446eSAtari911✦  •     ��!     •  ✦
194*9ccd446eSAtari911  �� •         • ��
195*9ccd446eSAtari911    �� ✦ • ✦ ��
196*9ccd446eSAtari911
197*9ccd446eSAtari911Hearts + Particles + Pixels!
198*9ccd446eSAtari911```
199*9ccd446eSAtari911
200*9ccd446eSAtari911**Dark mode now works**:
201*9ccd446eSAtari911```css
202*9ccd446eSAtari911/* Dark mode reader can now do this: */
203*9ccd446eSAtari911.calendar-compact-grid tbody td {
204*9ccd446eSAtari911    background: #000 !important;  /* Works! */
205*9ccd446eSAtari911}
206*9ccd446eSAtari911```
207*9ccd446eSAtari911
208*9ccd446eSAtari911### Why Transparent Works
209*9ccd446eSAtari911
210*9ccd446eSAtari911**CSS Cascade**:
211*9ccd446eSAtari9111. CSS: `background: transparent` (lowest priority)
212*9ccd446eSAtari9112. Inline style: `background: #f5f5f5` (overrides CSS)
213*9ccd446eSAtari9113. Dark mode CSS: `background: #000 !important` (overrides inline)
214*9ccd446eSAtari911
215*9ccd446eSAtari911**Perfect solution!** ✓
216*9ccd446eSAtari911
217*9ccd446eSAtari911## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! ��
218*9ccd446eSAtari911
219*9ccd446eSAtari911### �� Fixed: Particles Now Appear Above All Dialogs!
220*9ccd446eSAtari911- **Fixed:** Increased z-index to 9999999 for all particles
221*9ccd446eSAtari911- **Fixed:** Particles now visible above event dialogs, month picker, etc.
222*9ccd446eSAtari911- **Result:** Cursor effects and explosions always visible!
223*9ccd446eSAtari911
224*9ccd446eSAtari911### The Z-Index Problem
225*9ccd446eSAtari911
226*9ccd446eSAtari911**Before (v5.3.4)**:
227*9ccd446eSAtari911- Particles: z-index 9999
228*9ccd446eSAtari911- Dialogs: z-index 10000-999999
229*9ccd446eSAtari911- **Particles hidden behind dialogs!**
230*9ccd446eSAtari911
231*9ccd446eSAtari911**After (v5.3.5)**:
232*9ccd446eSAtari911- Particles: z-index 9999999
233*9ccd446eSAtari911- Trail: z-index 9999998
234*9ccd446eSAtari911- Pixels: z-index 9999997
235*9ccd446eSAtari911- **Particles ALWAYS on top!**
236*9ccd446eSAtari911
237*9ccd446eSAtari911### What's Fixed
238*9ccd446eSAtari911
239*9ccd446eSAtari911✅ **Main particles** (explosion orbs)
240*9ccd446eSAtari911✅ **Cursor trail** (glowing dots)
241*9ccd446eSAtari911✅ **Pixel sparkles** (tiny bright stars)
242*9ccd446eSAtari911✅ **Flash effect** (click burst)
243*9ccd446eSAtari911
244*9ccd446eSAtari911**All now appear above**:
245*9ccd446eSAtari911- Event dialog popups
246*9ccd446eSAtari911- Month picker
247*9ccd446eSAtari911- Day popups
248*9ccd446eSAtari911- Any modal overlays
249*9ccd446eSAtari911
250*9ccd446eSAtari911### Visual Result
251*9ccd446eSAtari911
252*9ccd446eSAtari911**Moving cursor over dialog**:
253*9ccd446eSAtari911```
254*9ccd446eSAtari911┌─────────────────────┐
255*9ccd446eSAtari911│  Event Dialog       │
256*9ccd446eSAtari911│  ✦ • ✦             │  ← Sparkles visible!
257*9ccd446eSAtari911│    →  ✦             │  ← Cursor trail visible!
258*9ccd446eSAtari911│  • ✦ •              │
259*9ccd446eSAtari911└─────────────────────┘
260*9ccd446eSAtari911```
261*9ccd446eSAtari911
262*9ccd446eSAtari911**Clicking on dialog**:
263*9ccd446eSAtari911```
264*9ccd446eSAtari911┌─────────────────────┐
265*9ccd446eSAtari911│  ✦ • ✦ • ✦         │
266*9ccd446eSAtari911│ •     ��!     •    │  ← Explosion visible!
267*9ccd446eSAtari911│  ✦ • ✦ • ✦         │
268*9ccd446eSAtari911└─────────────────────┘
269*9ccd446eSAtari911```
270*9ccd446eSAtari911
271*9ccd446eSAtari911**Perfect visibility everywhere!** ✨
272*9ccd446eSAtari911
273*9ccd446eSAtari911## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX
274*9ccd446eSAtari911
275*9ccd446eSAtari911### �� Fixed: Month Picker Now Themed!
276*9ccd446eSAtari911- **Fixed:** Jump to Month dialog now uses theme colors
277*9ccd446eSAtari911- **Fixed:** Dialog background, borders, text all themed
278*9ccd446eSAtari911- **Fixed:** Select dropdowns use theme colors
279*9ccd446eSAtari911- **Fixed:** Buttons use theme accent colors
280*9ccd446eSAtari911- **Result:** Month picker matches calendar theme!
281*9ccd446eSAtari911
282*9ccd446eSAtari911### �� Fixed: Cursor Effects Work in Dialogs!
283*9ccd446eSAtari911- **Fixed:** Cursor trail now works when hovering over dialogs
284*9ccd446eSAtari911- **Fixed:** Click explosions work when clicking inside dialogs
285*9ccd446eSAtari911- **Technical:** Changed to capture phase event listeners
286*9ccd446eSAtari911- **Result:** Effects work EVERYWHERE now!
287*9ccd446eSAtari911
288*9ccd446eSAtari911### Month Picker Theming
289*9ccd446eSAtari911
290*9ccd446eSAtari911**Before (v5.3.3)**:
291*9ccd446eSAtari911- White background (hardcoded)
292*9ccd446eSAtari911- Black text (hardcoded)
293*9ccd446eSAtari911- No theme integration
294*9ccd446eSAtari911- Looked out of place
295*9ccd446eSAtari911
296*9ccd446eSAtari911**After (v5.3.4)**:
297*9ccd446eSAtari911- Dialog background: `theme.bg`
298*9ccd446eSAtari911- Dialog border: `theme.border`
299*9ccd446eSAtari911- Text color: `theme.text_primary`
300*9ccd446eSAtari911- Dropdowns: `theme.cell_bg` + `theme.text_primary`
301*9ccd446eSAtari911- Cancel button: `theme.cell_bg`
302*9ccd446eSAtari911- Go button: `theme.border` (accent color)
303*9ccd446eSAtari911
304*9ccd446eSAtari911**Fully integrated!** ✅
305*9ccd446eSAtari911
306*9ccd446eSAtari911---
307*9ccd446eSAtari911
308*9ccd446eSAtari911### Theme Examples
309*9ccd446eSAtari911
310*9ccd446eSAtari911**Matrix Theme**:
311*9ccd446eSAtari911```
312*9ccd446eSAtari911┌─────────────────────────┐
313*9ccd446eSAtari911│ Jump to Month           │ ← Dark bg, green border
314*9ccd446eSAtari911│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
315*9ccd446eSAtari911│ [Cancel] [Go]           │ ← Green "Go" button
316*9ccd446eSAtari911└─────────────────────────┘
317*9ccd446eSAtari911```
318*9ccd446eSAtari911
319*9ccd446eSAtari911**Pink Theme**:
320*9ccd446eSAtari911```
321*9ccd446eSAtari911┌─────────────────────────┐
322*9ccd446eSAtari911│ Jump to Month           │ ← Dark bg, pink border
323*9ccd446eSAtari911│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
324*9ccd446eSAtari911│ [Cancel] [Go]           │ ← Pink "Go" button
325*9ccd446eSAtari911└─────────────────────────┘
326*9ccd446eSAtari911With sparkle effects! ✨
327*9ccd446eSAtari911```
328*9ccd446eSAtari911
329*9ccd446eSAtari911**Professional Theme**:
330*9ccd446eSAtari911```
331*9ccd446eSAtari911┌─────────────────────────┐
332*9ccd446eSAtari911│ Jump to Month           │ ← Clean bg, blue border
333*9ccd446eSAtari911│ [February ▼] [2026 ▼]  │ ← Clean dropdowns
334*9ccd446eSAtari911│ [Cancel] [Go]           │ ← Blue "Go" button
335*9ccd446eSAtari911└─────────────────────────┘
336*9ccd446eSAtari911```
337*9ccd446eSAtari911
338*9ccd446eSAtari911---
339*9ccd446eSAtari911
340*9ccd446eSAtari911### Dialog Cursor Fix
341*9ccd446eSAtari911
342*9ccd446eSAtari911**The Problem**:
343*9ccd446eSAtari911Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects!
344*9ccd446eSAtari911
345*9ccd446eSAtari911**The Solution**:
346*9ccd446eSAtari911Use **capture phase** event listeners:
347*9ccd446eSAtari911```javascript
348*9ccd446eSAtari911// Before (bubbling phase)
349*9ccd446eSAtari911document.addEventListener('click', handler)
350*9ccd446eSAtari911
351*9ccd446eSAtari911// After (capture phase)
352*9ccd446eSAtari911document.addEventListener('click', handler, true)
353*9ccd446eSAtari911354*9ccd446eSAtari911                                   Capture phase!
355*9ccd446eSAtari911```
356*9ccd446eSAtari911
357*9ccd446eSAtari911**Capture phase runs BEFORE stopPropagation!**
358*9ccd446eSAtari911
359*9ccd446eSAtari911---
360*9ccd446eSAtari911
361*9ccd446eSAtari911### Now Works Everywhere
362*9ccd446eSAtari911
363*9ccd446eSAtari911✅ **Calendar area**
364*9ccd446eSAtari911✅ **Event dialogs**
365*9ccd446eSAtari911✅ **Month picker dialog**
366*9ccd446eSAtari911✅ **Day popup dialogs**
367*9ccd446eSAtari911✅ **Anywhere on screen**
368*9ccd446eSAtari911
369*9ccd446eSAtari911**No more blocked effects!** ��
370*9ccd446eSAtari911
371*9ccd446eSAtari911---
372*9ccd446eSAtari911
373*9ccd446eSAtari911### Technical Details
374*9ccd446eSAtari911
375*9ccd446eSAtari911**Event phases**:
376*9ccd446eSAtari911```
377*9ccd446eSAtari9111. Capture phase   ← We listen here now!
378*9ccd446eSAtari9112. Target phase
379*9ccd446eSAtari9113. Bubbling phase  ← stopPropagation blocks this
380*9ccd446eSAtari911```
381*9ccd446eSAtari911
382*9ccd446eSAtari911**By using capture phase**:
383*9ccd446eSAtari911- Events caught before stopPropagation
384*9ccd446eSAtari911- Works in all dialogs
385*9ccd446eSAtari911- No conflicts with dialog logic
386*9ccd446eSAtari911
387*9ccd446eSAtari911---
388*9ccd446eSAtari911
389*9ccd446eSAtari911### All Dialogs Checked
390*9ccd446eSAtari911
391*9ccd446eSAtari911✅ **Month picker** - Now themed!
392*9ccd446eSAtari911✅ **Event dialog** - Already themed
393*9ccd446eSAtari911✅ **Day popup** - Already themed
394*9ccd446eSAtari911
395*9ccd446eSAtari911**Everything consistent!** ��
396*9ccd446eSAtari911
397*9ccd446eSAtari911---
398*9ccd446eSAtari911
399*9ccd446eSAtari911## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨
400*9ccd446eSAtari911
401*9ccd446eSAtari911### ✨ Added: Bright Neon Pixel Sparkles Everywhere!
402*9ccd446eSAtari911- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail
403*9ccd446eSAtari911- **Added:** 40 pixel sparkles in click explosions
404*9ccd446eSAtari911- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar)
405*9ccd446eSAtari911- **Result:** Maximum sparkle effect! ��
406*9ccd446eSAtari911
407*9ccd446eSAtari911### Tiny Pixel Sparkles
408*9ccd446eSAtari911
409*9ccd446eSAtari911**3-6 tiny bright pixels appear with each cursor movement!**
410*9ccd446eSAtari911
411*9ccd446eSAtari911**Characteristics**:
412*9ccd446eSAtari911- Size: 1-2px (single pixel appearance!)
413*9ccd446eSAtari911- Colors: Bright neon whites and pinks
414*9ccd446eSAtari911  - Pure white (#fff) - 40% chance
415*9ccd446eSAtari911  - Hot pink (#ff1493)
416*9ccd446eSAtari911  - Pink (#ff69b4)
417*9ccd446eSAtari911  - Light pink (#ffb6c1)
418*9ccd446eSAtari911  - Soft pink (#ff85c1)
419*9ccd446eSAtari911- Glow: Triple-layer shadow (intense!)
420*9ccd446eSAtari911- Spawn: Random 30px radius around cursor
421*9ccd446eSAtari911- Animations:
422*9ccd446eSAtari911  - 50% twinkle in place
423*9ccd446eSAtari911  - 50% float upward
424*9ccd446eSAtari911
425*9ccd446eSAtari911**Creates a cloud of sparkles around your cursor!**
426*9ccd446eSAtari911
427*9ccd446eSAtari911---
428*9ccd446eSAtari911
429*9ccd446eSAtari911### Click Explosion Enhanced
430*9ccd446eSAtari911
431*9ccd446eSAtari911**Now with 40 EXTRA pixel sparkles!**
432*9ccd446eSAtari911
433*9ccd446eSAtari911**Click anywhere → BIG BOOM**:
434*9ccd446eSAtari911- 25 main glowing particles (6-10px)
435*9ccd446eSAtari911- **40 tiny pixel sparkles (1-2px)** ← NEW!
436*9ccd446eSAtari911- Bright white flash
437*9ccd446eSAtari911- Total: 65+ visual elements!
438*9ccd446eSAtari911
439*9ccd446eSAtari911**Pixel sparkles in explosion**:
440*9ccd446eSAtari911- Shoot outward in all directions
441*9ccd446eSAtari911- Random distances (30-110px)
442*9ccd446eSAtari911- Multiple bright colors
443*9ccd446eSAtari911- Some twinkle, some explode
444*9ccd446eSAtari911- Creates stellar effect!
445*9ccd446eSAtari911
446*9ccd446eSAtari911---
447*9ccd446eSAtari911
448*9ccd446eSAtari911### Entire Screen Coverage
449*9ccd446eSAtari911
450*9ccd446eSAtari911**Effects now work EVERYWHERE!**
451*9ccd446eSAtari911
452*9ccd446eSAtari911**Before (v5.3.2)**:
453*9ccd446eSAtari911- Only inside calendar viewport
454*9ccd446eSAtari911- Limited to calendar area
455*9ccd446eSAtari911
456*9ccd446eSAtari911**After (v5.3.3)**:
457*9ccd446eSAtari911- Works on entire screen! ✓
458*9ccd446eSAtari911- Cursor trail follows everywhere
459*9ccd446eSAtari911- Click explosions anywhere
460*9ccd446eSAtari911- Used `position: fixed` + `clientX/Y`
461*9ccd446eSAtari911
462*9ccd446eSAtari911**Move anywhere on the page for sparkles!**
463*9ccd446eSAtari911
464*9ccd446eSAtari911---
465*9ccd446eSAtari911
466*9ccd446eSAtari911### Visual Effect
467*9ccd446eSAtari911
468*9ccd446eSAtari911**Cursor movement**:
469*9ccd446eSAtari911```
470*9ccd446eSAtari911    • ✦ •       ← Tiny pixels
471*9ccd446eSAtari911  •   ✦   •     ← Glowing trail
472*9ccd446eSAtari911✦  •  →  •  ✦   ← Cursor
473*9ccd446eSAtari911  •   ✦   •     ← Mixed sizes
474*9ccd446eSAtari911    • ✦ •       ← Sparkle cloud
475*9ccd446eSAtari911```
476*9ccd446eSAtari911
477*9ccd446eSAtari911**Click explosion**:
478*9ccd446eSAtari911```
479*9ccd446eSAtari911    ✦ • ✦ • ✦
480*9ccd446eSAtari911  ✦ •         • ✦
481*9ccd446eSAtari911✦  •    ��!    •  ✦
482*9ccd446eSAtari911  ✦ •         • ✦
483*9ccd446eSAtari911    ✦ • ✦ • ✦
484*9ccd446eSAtari911
485*9ccd446eSAtari91165+ particles total!
486*9ccd446eSAtari911```
487*9ccd446eSAtari911
488*9ccd446eSAtari911---
489*9ccd446eSAtari911
490*9ccd446eSAtari911### Sparkle Details
491*9ccd446eSAtari911
492*9ccd446eSAtari911**Trail Pixels** (3-6 per movement):
493*9ccd446eSAtari911- Size: 1-2px
494*9ccd446eSAtari911- Spawn rate: Every 40ms
495*9ccd446eSAtari911- Spread: 30px radius
496*9ccd446eSAtari911- Duration: 0.6-0.8s
497*9ccd446eSAtari911- 50% twinkle, 50% float
498*9ccd446eSAtari911
499*9ccd446eSAtari911**Explosion Pixels** (40 total):
500*9ccd446eSAtari911- Size: 1-3px
501*9ccd446eSAtari911- Spread: 30-110px radius
502*9ccd446eSAtari911- Duration: 0.4-0.8s
503*9ccd446eSAtari911- All directions
504*9ccd446eSAtari911- Intense glow
505*9ccd446eSAtari911
506*9ccd446eSAtari911**Main Particles** (25 total):
507*9ccd446eSAtari911- Size: 4-10px
508*9ccd446eSAtari911- Spread: 50-150px
509*9ccd446eSAtari911- Full color palette
510*9ccd446eSAtari911- Original firework effect
511*9ccd446eSAtari911
512*9ccd446eSAtari911---
513*9ccd446eSAtari911
514*9ccd446eSAtari911### Color Distribution
515*9ccd446eSAtari911
516*9ccd446eSAtari911**Pixel sparkles favor white**:
517*9ccd446eSAtari911- 40% pure white (#fff) - brightest!
518*9ccd446eSAtari911- 60% pink shades - variety
519*9ccd446eSAtari911
520*9ccd446eSAtari911**Creates brilliant sparkle effect!**
521*9ccd446eSAtari911
522*9ccd446eSAtari911---
523*9ccd446eSAtari911
524*9ccd446eSAtari911### Performance
525*9ccd446eSAtari911
526*9ccd446eSAtari911**Still optimized**:
527*9ccd446eSAtari911- Trail: 30ms throttle
528*9ccd446eSAtari911- Pixels: 40ms throttle
529*9ccd446eSAtari911- Auto-cleanup
530*9ccd446eSAtari911- Hardware accelerated
531*9ccd446eSAtari911- Smooth 60fps
532*9ccd446eSAtari911
533*9ccd446eSAtari911**Lots of sparkles, zero lag!**
534*9ccd446eSAtari911
535*9ccd446eSAtari911---
536*9ccd446eSAtari911
537*9ccd446eSAtari911### Full-Screen Magic
538*9ccd446eSAtari911
539*9ccd446eSAtari911**Pink theme calendar detected**:
540*9ccd446eSAtari911```javascript
541*9ccd446eSAtari911if (pink calendar exists) {
542*9ccd446eSAtari911    Enable effects for ENTIRE SCREEN
543*9ccd446eSAtari911    Not just calendar area
544*9ccd446eSAtari911}
545*9ccd446eSAtari911```
546*9ccd446eSAtari911
547*9ccd446eSAtari911**Works everywhere on page!** ✨
548*9ccd446eSAtari911
549*9ccd446eSAtari911---
550*9ccd446eSAtari911
551*9ccd446eSAtari911## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! ����
552*9ccd446eSAtari911
553*9ccd446eSAtari911### �� Changed: Glowing Pink Particles Instead of Emoji Sparkles!
554*9ccd446eSAtari911- **Removed:** Emoji sparkle images (✨)
555*9ccd446eSAtari911- **Added:** Glowing pink particle trail following cursor
556*9ccd446eSAtari911- **Added:** FIREWORKS explosion on click!
557*9ccd446eSAtari911- **Result:** Beautiful glowing effects, not emoji!
558*9ccd446eSAtari911
559*9ccd446eSAtari911### Glowing Cursor Trail
560*9ccd446eSAtari911
561*9ccd446eSAtari911**Pink glowing dots follow your cursor!**
562*9ccd446eSAtari911- Small glowing pink orbs (8px)
563*9ccd446eSAtari911- Radial gradient glow effect
564*9ccd446eSAtari911- Multiple box-shadows for depth
565*9ccd446eSAtari911- Fade out smoothly (0.5s)
566*9ccd446eSAtari911- Throttled to 30ms for smoothness
567*9ccd446eSAtari911
568*9ccd446eSAtari911```
569*9ccd446eSAtari911    •  •
570*9ccd446eSAtari911  •  →  •   ← Your cursor
571*9ccd446eSAtari911    •  •
572*9ccd446eSAtari911```
573*9ccd446eSAtari911
574*9ccd446eSAtari911**Not emoji - actual glowing particles!**
575*9ccd446eSAtari911
576*9ccd446eSAtari911---
577*9ccd446eSAtari911
578*9ccd446eSAtari911### Click Fireworks! ��
579*9ccd446eSAtari911
580*9ccd446eSAtari911**Click anywhere on the calendar → BOOM!**
581*9ccd446eSAtari911
582*9ccd446eSAtari911**20 pink particles explode outward!**
583*9ccd446eSAtari911- Radial burst pattern (360° coverage)
584*9ccd446eSAtari911- Random speeds (50-150px travel)
585*9ccd446eSAtari911- 4 shades of pink:
586*9ccd446eSAtari911  - Hot pink (#ff1493)
587*9ccd446eSAtari911  - Pink (#ff69b4)
588*9ccd446eSAtari911  - Light pink (#ff85c1)
589*9ccd446eSAtari911  - Very light pink (#ffc0cb)
590*9ccd446eSAtari911- Random sizes (4-10px)
591*9ccd446eSAtari911- Individual glowing halos
592*9ccd446eSAtari911- Smooth explosion animation
593*9ccd446eSAtari911
594*9ccd446eSAtari911**Plus a bright flash at click point!**
595*9ccd446eSAtari911- 30px radius glow
596*9ccd446eSAtari911- Intense pink flash
597*9ccd446eSAtari911- Fades quickly (0.3s)
598*9ccd446eSAtari911
599*9ccd446eSAtari911---
600*9ccd446eSAtari911
601*9ccd446eSAtari911### Visual Effect
602*9ccd446eSAtari911
603*9ccd446eSAtari911**Cursor movement**:
604*9ccd446eSAtari911```
605*9ccd446eSAtari911606*9ccd446eSAtari911      •  •  •
607*9ccd446eSAtari911   •     →     •  ← Glowing trail
608*9ccd446eSAtari911      •  •  •
609*9ccd446eSAtari911610*9ccd446eSAtari911```
611*9ccd446eSAtari911
612*9ccd446eSAtari911**Click explosion**:
613*9ccd446eSAtari911```
614*9ccd446eSAtari911         •  •  •
615*9ccd446eSAtari911      •           •
616*9ccd446eSAtari911   •      BOOM!      •  ← 20 particles
617*9ccd446eSAtari911      •           •
618*9ccd446eSAtari911         •  •  •
619*9ccd446eSAtari911```
620*9ccd446eSAtari911
621*9ccd446eSAtari911**All particles glow with pink halos!**
622*9ccd446eSAtari911
623*9ccd446eSAtari911---
624*9ccd446eSAtari911
625*9ccd446eSAtari911### Particle Details
626*9ccd446eSAtari911
627*9ccd446eSAtari911**Trail Particles**:
628*9ccd446eSAtari911- Size: 8x8px
629*9ccd446eSAtari911- Color: Pink radial gradient
630*9ccd446eSAtari911- Shadow: 10px + 20px glow layers
631*9ccd446eSAtari911- Duration: 0.5s fade
632*9ccd446eSAtari911- Rate: 30ms throttle
633*9ccd446eSAtari911
634*9ccd446eSAtari911**Explosion Particles**:
635*9ccd446eSAtari911- Size: 4-10px (random)
636*9ccd446eSAtari911- Colors: 4 pink shades (random)
637*9ccd446eSAtari911- Shadow: 10px + 20px glow (matches color)
638*9ccd446eSAtari911- Duration: 0.6-1.0s (random)
639*9ccd446eSAtari911- Pattern: Perfect circle burst
640*9ccd446eSAtari911
641*9ccd446eSAtari911**Flash Effect**:
642*9ccd446eSAtari911- Size: 30x30px
643*9ccd446eSAtari911- Color: Bright hot pink
644*9ccd446eSAtari911- Shadow: 30px + 50px mega-glow
645*9ccd446eSAtari911- Duration: 0.3s instant fade
646*9ccd446eSAtari911
647*9ccd446eSAtari911---
648*9ccd446eSAtari911
649*9ccd446eSAtari911### Performance
650*9ccd446eSAtari911
651*9ccd446eSAtari911**Optimized for smoothness**:
652*9ccd446eSAtari911- Trail throttled to 30ms
653*9ccd446eSAtari911- Auto-cleanup after animations
654*9ccd446eSAtari911- CSS hardware acceleration
655*9ccd446eSAtari911- No memory leaks
656*9ccd446eSAtari911- Smooth 60fps
657*9ccd446eSAtari911
658*9ccd446eSAtari911**Won't slow you down!**
659*9ccd446eSAtari911
660*9ccd446eSAtari911---
661*9ccd446eSAtari911
662*9ccd446eSAtari911### Comparison
663*9ccd446eSAtari911
664*9ccd446eSAtari911**Before (v5.3.1)**:
665*9ccd446eSAtari911- ✨ Emoji sparkle images
666*9ccd446eSAtari911- Static unicode characters
667*9ccd446eSAtari911- Limited visual impact
668*9ccd446eSAtari911
669*9ccd446eSAtari911**After (v5.3.2)**:
670*9ccd446eSAtari911- �� Glowing pink particles
671*9ccd446eSAtari911- Radial gradients + shadows
672*9ccd446eSAtari911- Beautiful firework explosions
673*9ccd446eSAtari911- Much more impressive!
674*9ccd446eSAtari911
675*9ccd446eSAtari911---
676*9ccd446eSAtari911
677*9ccd446eSAtari911### Only Pink Theme
678*9ccd446eSAtari911
679*9ccd446eSAtari911**These effects only appear**:
680*9ccd446eSAtari911- On `.calendar-theme-pink` elements
681*9ccd446eSAtari911- Other themes unaffected
682*9ccd446eSAtari911- Pure pink magic! ��
683*9ccd446eSAtari911
684*9ccd446eSAtari911---
685*9ccd446eSAtari911
686*9ccd446eSAtari911## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨
687*9ccd446eSAtari911
688*9ccd446eSAtari911### ✨ Added: MySpace-Style Sparkle Trail!
689*9ccd446eSAtari911- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!)
690*9ccd446eSAtari911- **Toned down:** Reduced glow effects for better taste
691*9ccd446eSAtari911- **Added:** Sparkles appear on cell hover
692*9ccd446eSAtari911- **Added:** Sparkles on event hover (left and right sides!)
693*9ccd446eSAtari911- **Added:** Sparkles on today's cell corners
694*9ccd446eSAtari911- **Added:** Sparkles on navigation buttons
695*9ccd446eSAtari911- **Added:** Sparkles in calendar header
696*9ccd446eSAtari911- **Result:** Pure nostalgic MySpace magic! ✨
697*9ccd446eSAtari911
698*9ccd446eSAtari911### MySpace Sparkle Cursor Trail
699*9ccd446eSAtari911
700*9ccd446eSAtari911**The classic effect from 2006!**
701*9ccd446eSAtari911- Sparkles follow your cursor as you move
702*9ccd446eSAtari911- Random sizes (12-22px)
703*9ccd446eSAtari911- Random slight offsets for natural feel
704*9ccd446eSAtari911- Float up and fade out animation
705*9ccd446eSAtari911- Throttled to 50ms (smooth, not laggy)
706*9ccd446eSAtari911- Only on pink theme calendars
707*9ccd446eSAtari911
708*9ccd446eSAtari911```
709*9ccd446eSAtari911710*9ccd446eSAtari911  ✨    ✨
711*9ccd446eSAtari911✨   →   ✨  (cursor trail)
712*9ccd446eSAtari911  ✨    ✨
713*9ccd446eSAtari911714*9ccd446eSAtari911```
715*9ccd446eSAtari911
716*9ccd446eSAtari911**Pure nostalgia!**
717*9ccd446eSAtari911
718*9ccd446eSAtari911---
719*9ccd446eSAtari911
720*9ccd446eSAtari911### Sparkles Everywhere
721*9ccd446eSAtari911
722*9ccd446eSAtari911**Calendar cells**:
723*9ccd446eSAtari911- Hover over any day → ✨ floats up
724*9ccd446eSAtari911- Smooth 1.5s animation
725*9ccd446eSAtari911- Centered sparkle
726*9ccd446eSAtari911
727*9ccd446eSAtari911**Event items**:
728*9ccd446eSAtari911- Hover → ✨ on left side
729*9ccd446eSAtari911- Hover → ✨ on right side
730*9ccd446eSAtari911- Staggered animations (0.4s delay)
731*9ccd446eSAtari911- Continuous twinkling
732*9ccd446eSAtari911
733*9ccd446eSAtari911**Today's cell**:
734*9ccd446eSAtari911- ✨ in top-right corner (continuous)
735*9ccd446eSAtari911- ✨ in bottom-left corner (offset timing)
736*9ccd446eSAtari911- Always sparkling!
737*9ccd446eSAtari911
738*9ccd446eSAtari911**Navigation buttons**:
739*9ccd446eSAtari911- Hover on < or > → ✨ appears top-right
740*9ccd446eSAtari911- One-time float animation
741*9ccd446eSAtari911
742*9ccd446eSAtari911**Calendar header**:
743*9ccd446eSAtari911- ✨ on left side (continuous)
744*9ccd446eSAtari911- ✨ on right side (offset 1s)
745*9ccd446eSAtari911- Always twinkling
746*9ccd446eSAtari911
747*9ccd446eSAtari911---
748*9ccd446eSAtari911
749*9ccd446eSAtari911### Toned Down Glows
750*9ccd446eSAtari911
751*9ccd446eSAtari911**Before (v5.3.0)**: TOO MUCH GLOW!
752*9ccd446eSAtari911- 50px shadows
753*9ccd446eSAtari911- 4-layer effects
754*9ccd446eSAtari911- Overwhelming
755*9ccd446eSAtari911
756*9ccd446eSAtari911**After (v5.3.1)**: Just right!
757*9ccd446eSAtari911- 8-15px max shadows (subtle)
758*9ccd446eSAtari911- 2-layer effects
759*9ccd446eSAtari911- Professional with personality
760*9ccd446eSAtari911
761*9ccd446eSAtari911**Glow reductions**:
762*9ccd446eSAtari911- Today shimmer: 35px → 12px
763*9ccd446eSAtari911- Today hover: 50px → 15px
764*9ccd446eSAtari911- Event glow: 18px → 6px
765*9ccd446eSAtari911- Badge pulse: 25px → 8px
766*9ccd446eSAtari911- Container glow: 20px → 8px
767*9ccd446eSAtari911
768*9ccd446eSAtari911**Much more tasteful!**
769*9ccd446eSAtari911
770*9ccd446eSAtari911---
771*9ccd446eSAtari911
772*9ccd446eSAtari911### Sparkle Animations
773*9ccd446eSAtari911
774*9ccd446eSAtari911**sparkle-twinkle** (0.8s):
775*9ccd446eSAtari911```
776*9ccd446eSAtari911Opacity: 0 → 1 → 1 → 0
777*9ccd446eSAtari911Scale: 0 → 1 → 1 → 0
778*9ccd446eSAtari911Rotation: 0° → 180° → 360°
779*9ccd446eSAtari911```
780*9ccd446eSAtari911
781*9ccd446eSAtari911**sparkle-float** (1.5s):
782*9ccd446eSAtari911```
783*9ccd446eSAtari911Moves up: 0px → -50px
784*9ccd446eSAtari911Opacity: 0 → 1 → 1 → 0
785*9ccd446eSAtari911Scale: 0 → 1 → 0.8 → 0
786*9ccd446eSAtari911```
787*9ccd446eSAtari911
788*9ccd446eSAtari911**Pure MySpace magic!** ✨
789*9ccd446eSAtari911
790*9ccd446eSAtari911---
791*9ccd446eSAtari911
792*9ccd446eSAtari911### Where Sparkles Appear
793*9ccd446eSAtari911
794*9ccd446eSAtari911✅ **Cursor trail** (continuous while moving)
795*9ccd446eSAtari911✅ **Calendar cells** (on hover)
796*9ccd446eSAtari911✅ **Event items** (on hover, left + right)
797*9ccd446eSAtari911✅ **Today's cell** (continuous, corners)
798*9ccd446eSAtari911✅ **Navigation buttons** (on hover)
799*9ccd446eSAtari911✅ **Calendar header** (continuous, sides)
800*9ccd446eSAtari911
801*9ccd446eSAtari911**Sparkles EVERYWHERE!** ✨✨✨
802*9ccd446eSAtari911
803*9ccd446eSAtari911---
804*9ccd446eSAtari911
805*9ccd446eSAtari911### Performance
806*9ccd446eSAtari911
807*9ccd446eSAtari911**Cursor trail**:
808*9ccd446eSAtari911- Throttled to 50ms
809*9ccd446eSAtari911- Auto-cleanup after 1s
810*9ccd446eSAtari911- No memory leaks
811*9ccd446eSAtari911- Smooth 60fps
812*9ccd446eSAtari911
813*9ccd446eSAtari911**CSS animations**:
814*9ccd446eSAtari911- Hardware accelerated
815*9ccd446eSAtari911- No JavaScript overhead (except cursor)
816*9ccd446eSAtari911- Efficient transforms
817*9ccd446eSAtari911
818*9ccd446eSAtari911**Won't slow down your browser!**
819*9ccd446eSAtari911
820*9ccd446eSAtari911---
821*9ccd446eSAtari911
822*9ccd446eSAtari911### Pure Nostalgia
823*9ccd446eSAtari911
824*9ccd446eSAtari911**Remember MySpace profiles?**
825*9ccd446eSAtari911- Glitter graphics ✨
826*9ccd446eSAtari911- Sparkle cursors ✨
827*9ccd446eSAtari911- Auto-play music �� (ok, we didn't add that)
828*9ccd446eSAtari911- Animated GIF backgrounds
829*9ccd446eSAtari911- Comic Sans everywhere
830*9ccd446eSAtari911
831*9ccd446eSAtari911**We brought back the sparkles!** ✨
832*9ccd446eSAtari911
833*9ccd446eSAtari911---
834*9ccd446eSAtari911
835*9ccd446eSAtari911### Theme Comparison
836*9ccd446eSAtari911
837*9ccd446eSAtari911**Other themes**: Professional and clean
838*9ccd446eSAtari911**Pink theme**: ✨ SPARKLES EVERYWHERE ✨
839*9ccd446eSAtari911
840*9ccd446eSAtari911**Only pink theme gets the magic!**
841*9ccd446eSAtari911
842*9ccd446eSAtari911---
843*9ccd446eSAtari911
844*9ccd446eSAtari911## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨��
845*9ccd446eSAtari911
846*9ccd446eSAtari911### �� Added: Pink Theme Gets BLING!
847*9ccd446eSAtari911- **Added:** Shimmering animation for today's cell
848*9ccd446eSAtari911- **Added:** Sparkling text effect on today's date
849*9ccd446eSAtari911- **Added:** Glowing pulse for event bars
850*9ccd446eSAtari911- **Added:** Gradient shimmer on headers
851*9ccd446eSAtari911- **Added:** Extra glow on hover effects
852*9ccd446eSAtari911- **Added:** Pulsing urgent badge for past due items
853*9ccd446eSAtari911- **Result:** Pink theme is now FABULOUS! ✨
854*9ccd446eSAtari911
855*9ccd446eSAtari911### Shimmer Effects
856*9ccd446eSAtari911
857*9ccd446eSAtari911**Today's Cell**:
858*9ccd446eSAtari911- Continuous shimmer animation (2 second loop)
859*9ccd446eSAtari911- Multi-layer glow effect
860*9ccd446eSAtari911- Pink and hot pink overlapping shadows
861*9ccd446eSAtari911- Pulses from subtle to intense
862*9ccd446eSAtari911- Extra sparkle on hover
863*9ccd446eSAtari911
864*9ccd446eSAtari911**Today's Date Number**:
865*9ccd446eSAtari911- Sparkle animation (1.5 second loop)
866*9ccd446eSAtari911- Text shadow glow effect
867*9ccd446eSAtari911- Slight scale pulse (100% → 105%)
868*9ccd446eSAtari911- Pink to hot pink shadow transition
869*9ccd446eSAtari911
870*9ccd446eSAtari911### Glow Effects
871*9ccd446eSAtari911
872*9ccd446eSAtari911**Event Bars**:
873*9ccd446eSAtari911- Continuous glow pulse (2 second loop)
874*9ccd446eSAtari911- Uses event's own color
875*9ccd446eSAtari911- Adds pink accent glow layer
876*9ccd446eSAtari911- Creates depth and dimension
877*9ccd446eSAtari911
878*9ccd446eSAtari911**Event Items**:
879*9ccd446eSAtari911- Subtle base glow
880*9ccd446eSAtari911- Enhanced glow on hover
881*9ccd446eSAtari911- Slight slide animation on hover
882*9ccd446eSAtari911- Professional yet playful
883*9ccd446eSAtari911
884*9ccd446eSAtari911### Gradient Shimmer
885*9ccd446eSAtari911
886*9ccd446eSAtari911**Headers**:
887*9ccd446eSAtari911- Animated gradient background
888*9ccd446eSAtari911- 3-color pink gradient flow
889*9ccd446eSAtari911- Smooth 3-second animation
890*9ccd446eSAtari911- Creates movement and life
891*9ccd446eSAtari911- Applies to calendar header and event list header
892*9ccd446eSAtari911
893*9ccd446eSAtari911### Badge Effects
894*9ccd446eSAtari911
895*9ccd446eSAtari911**TODAY Badge**:
896*9ccd446eSAtari911- Sparkle animation
897*9ccd446eSAtari911- Synchronized with today's date
898*9ccd446eSAtari911- Extra prominence
899*9ccd446eSAtari911
900*9ccd446eSAtari911**PAST DUE Badge**:
901*9ccd446eSAtari911- Urgent pulsing effect (1 second loop)
902*9ccd446eSAtari911- Orange glow intensifies
903*9ccd446eSAtari911- Draws attention to urgent items
904*9ccd446eSAtari911- Faster pulse for urgency
905*9ccd446eSAtari911
906*9ccd446eSAtari911### Container Bling
907*9ccd446eSAtari911
908*9ccd446eSAtari911**Main Container**:
909*9ccd446eSAtari911- Multi-layer pink glow
910*9ccd446eSAtari911- Soft outer shadow
911*9ccd446eSAtari911- Creates floating effect
912*9ccd446eSAtari911- Subtle but elegant
913*9ccd446eSAtari911
914*9ccd446eSAtari911### Animation Details
915*9ccd446eSAtari911
916*9ccd446eSAtari911**pink-shimmer** (2s loop):
917*9ccd446eSAtari911```
918*9ccd446eSAtari911Start: Subtle 5px glow
919*9ccd446eSAtari911Peak:  Intense 35px multi-layer glow
920*9ccd446eSAtari911End:   Back to subtle
921*9ccd446eSAtari911```
922*9ccd446eSAtari911
923*9ccd446eSAtari911**pink-sparkle** (1.5s loop):
924*9ccd446eSAtari911```
925*9ccd446eSAtari911Start: Base glow + scale 1.0
926*9ccd446eSAtari911Peak:  Intense glow + scale 1.05
927*9ccd446eSAtari911End:   Back to base
928*9ccd446eSAtari911```
929*9ccd446eSAtari911
930*9ccd446eSAtari911**pink-glow-pulse** (2s loop):
931*9ccd446eSAtari911```
932*9ccd446eSAtari911Start: Small glow (3px, 6px)
933*9ccd446eSAtari911Peak:  Large glow (6px, 12px, 18px)
934*9ccd446eSAtari911End:   Back to small
935*9ccd446eSAtari911```
936*9ccd446eSAtari911
937*9ccd446eSAtari911**pink-gradient-shimmer** (3s loop):
938*9ccd446eSAtari911```
939*9ccd446eSAtari911Gradient flows across element
940*9ccd446eSAtari911Creates wave effect
941*9ccd446eSAtari911Smooth continuous motion
942*9ccd446eSAtari911```
943*9ccd446eSAtari911
944*9ccd446eSAtari911**pink-pulse-urgent** (1s loop - faster!):
945*9ccd446eSAtari911```
946*9ccd446eSAtari911Start: Orange glow 5px
947*9ccd446eSAtari911Peak:  Orange glow 25px (intense)
948*9ccd446eSAtari911End:   Back to 5px
949*9ccd446eSAtari911```
950*9ccd446eSAtari911
951*9ccd446eSAtari911### Visual Experience
952*9ccd446eSAtari911
953*9ccd446eSAtari911**Today's Cell**:
954*9ccd446eSAtari911```
955*9ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐
956*9ccd446eSAtari911│  │  │ ✨ │  │  │  │  │  ← Shimmers constantly
957*9ccd446eSAtari911│  │  │[9]│  │  │  │  │  ← Sparkles
958*9ccd446eSAtari911│  │  │ ✨ │  │  │  │  │  ← Glows and pulses
959*9ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘
960*9ccd446eSAtari911```
961*9ccd446eSAtari911
962*9ccd446eSAtari911**Event Bars**:
963*9ccd446eSAtari911```
964*9ccd446eSAtari911━━━━━━━  ← Glows and pulses
965*9ccd446eSAtari911━━━━━━━  ← Each bar animated
966*9ccd446eSAtari911━━━━━━━  ← Creates rhythm
967*9ccd446eSAtari911```
968*9ccd446eSAtari911
969*9ccd446eSAtari911**Headers**:
970*9ccd446eSAtari911```
971*9ccd446eSAtari911╔═════════════════════╗
972*9ccd446eSAtari911║ ~~~~~~~~~~ ║  ← Gradient flows
973*9ccd446eSAtari911║   February 2026     ║  ← Shimmer effect
974*9ccd446eSAtari911╚═════════════════════╝
975*9ccd446eSAtari911```
976*9ccd446eSAtari911
977*9ccd446eSAtari911### Theme Comparison
978*9ccd446eSAtari911
979*9ccd446eSAtari911**Before (v5.2.8)**:
980*9ccd446eSAtari911- Pink colors
981*9ccd446eSAtari911- Static elements
982*9ccd446eSAtari911- Standard shadows
983*9ccd446eSAtari911
984*9ccd446eSAtari911**After (v5.3.0)**:
985*9ccd446eSAtari911- Pink colors ✓
986*9ccd446eSAtari911- Animated shimmer ✨
987*9ccd446eSAtari911- Sparkling effects ��
988*9ccd446eSAtari911- Glowing pulses ✨
989*9ccd446eSAtari911- Moving gradients ��
990*9ccd446eSAtari911- BLING! ��
991*9ccd446eSAtari911
992*9ccd446eSAtari911### Performance
993*9ccd446eSAtari911
994*9ccd446eSAtari911**All animations**:
995*9ccd446eSAtari911- Hardware accelerated (transform, opacity)
996*9ccd446eSAtari911- Smooth 60fps
997*9ccd446eSAtari911- CSS animations (no JavaScript)
998*9ccd446eSAtari911- Minimal CPU usage
999*9ccd446eSAtari911- Disabled in reduced-motion preference
1000*9ccd446eSAtari911
1001*9ccd446eSAtari911### Only for Pink Theme
1002*9ccd446eSAtari911
1003*9ccd446eSAtari911**Effects only apply when**:
1004*9ccd446eSAtari911```css
1005*9ccd446eSAtari911.calendar-theme-pink
1006*9ccd446eSAtari911```
1007*9ccd446eSAtari911
1008*9ccd446eSAtari911**Other themes unaffected**:
1009*9ccd446eSAtari911- Matrix stays Matrix
1010*9ccd446eSAtari911- Professional stays Professional
1011*9ccd446eSAtari911- Purple stays Purple
1012*9ccd446eSAtari911- Wiki stays clean
1013*9ccd446eSAtari911
1014*9ccd446eSAtari911**Pink gets all the bling!** ✨��
1015*9ccd446eSAtari911
1016*9ccd446eSAtari911### Use Cases
1017*9ccd446eSAtari911
1018*9ccd446eSAtari911**Perfect for**:
1019*9ccd446eSAtari911- Celebrating occasions
1020*9ccd446eSAtari911- Fun team calendars
1021*9ccd446eSAtari911- Personal style expression
1022*9ccd446eSAtari911- Standing out
1023*9ccd446eSAtari911- Making calendar time fabulous
1024*9ccd446eSAtari911
1025*9ccd446eSAtari911**Not just pink, but BLING pink!** ��✨
1026*9ccd446eSAtari911
1027*9ccd446eSAtari911## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS
1028*9ccd446eSAtari911
1029*9ccd446eSAtari911### �� Fixed: Today's Date Box Now Uses Theme Colors
1030*9ccd446eSAtari911- **Fixed:** Today's day number box now uses theme border color
1031*9ccd446eSAtari911- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light)
1032*9ccd446eSAtari911- **Result:** Today box matches the theme perfectly!
1033*9ccd446eSAtari911
1034*9ccd446eSAtari911### The Issue
1035*9ccd446eSAtari911
1036*9ccd446eSAtari911Today's date had a hardcoded green box:
1037*9ccd446eSAtari911
1038*9ccd446eSAtari911**In style.css**:
1039*9ccd446eSAtari911```css
1040*9ccd446eSAtari911.cal-today .day-num {
1041*9ccd446eSAtari911    background: #008800;  /* Hardcoded green! */
1042*9ccd446eSAtari911    color: white;
1043*9ccd446eSAtari911}
1044*9ccd446eSAtari911```
1045*9ccd446eSAtari911
1046*9ccd446eSAtari911**Didn't adapt to themes at all!**
1047*9ccd446eSAtari911
1048*9ccd446eSAtari911### The Fix
1049*9ccd446eSAtari911
1050*9ccd446eSAtari911**Now uses theme colors**:
1051*9ccd446eSAtari911```php
1052*9ccd446eSAtari911// Today's day number
1053*9ccd446eSAtari911if ($isToday) {
1054*9ccd446eSAtari911    background: $themeStyles['border'],  // Theme's accent color!
1055*9ccd446eSAtari911    color: (professional theme) ? white : bg color
1056*9ccd446eSAtari911}
1057*9ccd446eSAtari911```
1058*9ccd446eSAtari911
1059*9ccd446eSAtari911### Theme Examples
1060*9ccd446eSAtari911
1061*9ccd446eSAtari911**Matrix Theme**:
1062*9ccd446eSAtari911- Box background: `#00cc07` (matrix green)
1063*9ccd446eSAtari911- Text color: `#242424` (dark background)
1064*9ccd446eSAtari911
1065*9ccd446eSAtari911**Purple Theme**:
1066*9ccd446eSAtari911- Box background: `#9b59b6` (purple)
1067*9ccd446eSAtari911- Text color: `#2a2030` (dark background)
1068*9ccd446eSAtari911
1069*9ccd446eSAtari911**Professional Theme**:
1070*9ccd446eSAtari911- Box background: `#4a90e2` (blue)
1071*9ccd446eSAtari911- Text color: `#ffffff` (white text)
1072*9ccd446eSAtari911
1073*9ccd446eSAtari911**Pink Theme**:
1074*9ccd446eSAtari911- Box background: `#ff1493` (hot pink)
1075*9ccd446eSAtari911- Text color: `#1a0d14` (dark background)
1076*9ccd446eSAtari911
1077*9ccd446eSAtari911**Wiki Theme**:
1078*9ccd446eSAtari911- Box background: Template's `__border__` color
1079*9ccd446eSAtari911- Text color: Template's `__background_site__` color
1080*9ccd446eSAtari911
1081*9ccd446eSAtari911### Visual Result
1082*9ccd446eSAtari911
1083*9ccd446eSAtari911**Matrix Theme**:
1084*9ccd446eSAtari911```
1085*9ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐
1086*9ccd446eSAtari911│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1087*9ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘
1088*9ccd446eSAtari9111089*9ccd446eSAtari911    Green box (#00cc07)
1090*9ccd446eSAtari911```
1091*9ccd446eSAtari911
1092*9ccd446eSAtari911**Professional Theme**:
1093*9ccd446eSAtari911```
1094*9ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐
1095*9ccd446eSAtari911│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1096*9ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘
1097*9ccd446eSAtari9111098*9ccd446eSAtari911    Blue box (#4a90e2)
1099*9ccd446eSAtari911```
1100*9ccd446eSAtari911
1101*9ccd446eSAtari911**Wiki Theme**:
1102*9ccd446eSAtari911```
1103*9ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐
1104*9ccd446eSAtari911│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1105*9ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘
1106*9ccd446eSAtari9111107*9ccd446eSAtari911    Template border color
1108*9ccd446eSAtari911```
1109*9ccd446eSAtari911
1110*9ccd446eSAtari911### Implementation
1111*9ccd446eSAtari911
1112*9ccd446eSAtari911**Inline styles added**:
1113*9ccd446eSAtari911- Background uses `$themeStyles['border']` (theme accent)
1114*9ccd446eSAtari911- Text color uses `$themeStyles['bg']` for contrast
1115*9ccd446eSAtari911- Special case: Professional theme uses white text
1116*9ccd446eSAtari911- All with `!important` to override CSS
1117*9ccd446eSAtari911
1118*9ccd446eSAtari911**CSS cleaned up**:
1119*9ccd446eSAtari911- Removed hardcoded `#008800` background
1120*9ccd446eSAtari911- Removed hardcoded `white` color
1121*9ccd446eSAtari911- Kept structural styles (border-radius, font-weight)
1122*9ccd446eSAtari911
1123*9ccd446eSAtari911### Benefits
1124*9ccd446eSAtari911
1125*9ccd446eSAtari911**Theme Consistency**:
1126*9ccd446eSAtari911- Today box matches theme accent color
1127*9ccd446eSAtari911- Proper contrast with background
1128*9ccd446eSAtari911- Professional appearance
1129*9ccd446eSAtari911
1130*9ccd446eSAtari911**Automatic Adaptation**:
1131*9ccd446eSAtari911- Works with all themes
1132*9ccd446eSAtari911- Works with custom wiki template colors
1133*9ccd446eSAtari911- No manual adjustment needed
1134*9ccd446eSAtari911
1135*9ccd446eSAtari911**Visual Harmony**:
1136*9ccd446eSAtari911- Border color used throughout theme
1137*9ccd446eSAtari911- Today box reinforces theme identity
1138*9ccd446eSAtari911- Consistent design language
1139*9ccd446eSAtari911
1140*9ccd446eSAtari911## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH
1141*9ccd446eSAtari911
1142*9ccd446eSAtari911### �� Fixed: Table Grid Background Now Matches Cells
1143*9ccd446eSAtari911- **Found:** `grid_bg` was using `__background_alt__` (different from cells!)
1144*9ccd446eSAtari911- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells)
1145*9ccd446eSAtari911- **Result:** Table background no longer shows through cells!
1146*9ccd446eSAtari911
1147*9ccd446eSAtari911### The Layer Problem
1148*9ccd446eSAtari911
1149*9ccd446eSAtari911The table itself had a DIFFERENT background color than its cells!
1150*9ccd446eSAtari911
1151*9ccd446eSAtari911**Before (v5.2.6)**:
1152*9ccd446eSAtari911```php
1153*9ccd446eSAtari911'grid_bg' => __background_alt__,     // Table background (#e8e8e8)
1154*9ccd446eSAtari911'cell_bg' => __background_site__,    // Cell background (#f5f5f5)
1155*9ccd446eSAtari911```
1156*9ccd446eSAtari911
1157*9ccd446eSAtari911**The table background was showing THROUGH the cells!**
1158*9ccd446eSAtari911
1159*9ccd446eSAtari911### Why This Happened
1160*9ccd446eSAtari911
1161*9ccd446eSAtari911**Visual layers**:
1162*9ccd446eSAtari911```
1163*9ccd446eSAtari911Table Element
1164*9ccd446eSAtari911├─ background: __background_alt__ (#e8e8e8)  ← Different!
1165*9ccd446eSAtari911└─ Cells
1166*9ccd446eSAtari911    └─ background: __background_site__ (#f5f5f5)  ← Different!
1167*9ccd446eSAtari911
1168*9ccd446eSAtari911The table background shows through any gaps!
1169*9ccd446eSAtari911```
1170*9ccd446eSAtari911
1171*9ccd446eSAtari911### The Fix
1172*9ccd446eSAtari911
1173*9ccd446eSAtari911**After (v5.2.7)**:
1174*9ccd446eSAtari911```php
1175*9ccd446eSAtari911'grid_bg' => __background_site__,    // Table background (#f5f5f5) ✓
1176*9ccd446eSAtari911'cell_bg' => __background_site__,    // Cell background (#f5f5f5) ✓
1177*9ccd446eSAtari911```
1178*9ccd446eSAtari911
1179*9ccd446eSAtari911**NOW THEY MATCH!**
1180*9ccd446eSAtari911
1181*9ccd446eSAtari911### Where grid_bg Is Used
1182*9ccd446eSAtari911
1183*9ccd446eSAtari911The table element itself:
1184*9ccd446eSAtari911```html
1185*9ccd446eSAtari911<table style="background: __background_alt__">  ← Was showing through!
1186*9ccd446eSAtari911    <tbody>
1187*9ccd446eSAtari911        <tr>
1188*9ccd446eSAtari911            <td style="background: __background_site__">1</td>
1189*9ccd446eSAtari911        </tr>
1190*9ccd446eSAtari911    </tbody>
1191*9ccd446eSAtari911</table>
1192*9ccd446eSAtari911```
1193*9ccd446eSAtari911
1194*9ccd446eSAtari911Even with cell inline styles, the TABLE background shows through!
1195*9ccd446eSAtari911
1196*9ccd446eSAtari911### All Background Sources Now Unified
1197*9ccd446eSAtari911
1198*9ccd446eSAtari911**Everything now uses __background_site__**:
1199*9ccd446eSAtari911- `bg` → __background_site__ ✓
1200*9ccd446eSAtari911- `header_bg` → __background_site__ ✓
1201*9ccd446eSAtari911- `grid_bg` → __background_site__ ✓ (JUST FIXED!)
1202*9ccd446eSAtari911- `cell_bg` → __background_site__ ✓
1203*9ccd446eSAtari911
1204*9ccd446eSAtari911**Perfect consistency!** ��
1205*9ccd446eSAtari911
1206*9ccd446eSAtari911### Why It Was Different
1207*9ccd446eSAtari911
1208*9ccd446eSAtari911**Originally the grid was meant to show borders**:
1209*9ccd446eSAtari911- `grid_bg` was `__background_alt__` (slightly different)
1210*9ccd446eSAtari911- Created visual separation between cells
1211*9ccd446eSAtari911- But with transparent/thin cells, it showed through!
1212*9ccd446eSAtari911
1213*9ccd446eSAtari911**Now unified for consistency!**
1214*9ccd446eSAtari911
1215*9ccd446eSAtari911### Visual Result
1216*9ccd446eSAtari911
1217*9ccd446eSAtari911**Before (layers visible)**:
1218*9ccd446eSAtari911```
1219*9ccd446eSAtari911┌─────────────────┐
1220*9ccd446eSAtari911│ Grid (#e8e8e8)  │ ← Showing through!
1221*9ccd446eSAtari911│  ┌──┬──┬──┐     │
1222*9ccd446eSAtari911│  │  │  │  │     │ ← Cells (#f5f5f5)
1223*9ccd446eSAtari911│  └──┴──┴──┘     │
1224*9ccd446eSAtari911└─────────────────┘
1225*9ccd446eSAtari911```
1226*9ccd446eSAtari911
1227*9ccd446eSAtari911**After (unified)**:
1228*9ccd446eSAtari911```
1229*9ccd446eSAtari911┌─────────────────┐
1230*9ccd446eSAtari911│ Grid (#f5f5f5)  │ ← Same color!
1231*9ccd446eSAtari911│  ┌──┬──┬──┐     │
1232*9ccd446eSAtari911│  │  │  │  │     │ ← Cells (#f5f5f5)
1233*9ccd446eSAtari911│  └──┴──┴──┘     │
1234*9ccd446eSAtari911└─────────────────┘
1235*9ccd446eSAtari911Perfect match!
1236*9ccd446eSAtari911```
1237*9ccd446eSAtari911
1238*9ccd446eSAtari911### Complete Background Mapping
1239*9ccd446eSAtari911
1240*9ccd446eSAtari911**All using __background_site__ now**:
1241*9ccd446eSAtari911- Main container background
1242*9ccd446eSAtari911- Left panel background
1243*9ccd446eSAtari911- Right panel background
1244*9ccd446eSAtari911- Eventlist background
1245*9ccd446eSAtari911- Calendar grid background ← JUST FIXED
1246*9ccd446eSAtari911- Calendar cell backgrounds
1247*9ccd446eSAtari911- Event item backgrounds
1248*9ccd446eSAtari911- Clock header background
1249*9ccd446eSAtari911- Search input background
1250*9ccd446eSAtari911- Past events toggle
1251*9ccd446eSAtari911
1252*9ccd446eSAtari911**EVERYTHING UNIFIED!** ��
1253*9ccd446eSAtari911
1254*9ccd446eSAtari911## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS
1255*9ccd446eSAtari911
1256*9ccd446eSAtari911### �� Fixed: Removed Container Backgrounds Showing Through
1257*9ccd446eSAtari911- **Found:** `.calendar-compact-container` had `background: #ffffff;`
1258*9ccd446eSAtari911- **Found:** `.calendar-compact-left` had `background: #fafafa;`
1259*9ccd446eSAtari911- **Found:** `.calendar-compact-right` had `background: #ffffff;`
1260*9ccd446eSAtari911- **Found:** `.event-search-input-inline` had `background: white;`
1261*9ccd446eSAtari911- **Found:** `.past-events-toggle` had `background: #f5f5f5;`
1262*9ccd446eSAtari911- **Result:** Container backgrounds no longer show through cells!
1263*9ccd446eSAtari911
1264*9ccd446eSAtari911### The Container Problem
1265*9ccd446eSAtari911
1266*9ccd446eSAtari911The parent containers had hardcoded backgrounds that were showing through!
1267*9ccd446eSAtari911
1268*9ccd446eSAtari911**Container backgrounds (lines 4-91)**:
1269*9ccd446eSAtari911```css
1270*9ccd446eSAtari911.calendar-compact-container {
1271*9ccd446eSAtari911    background: #ffffff;  /* ← Main container! */
1272*9ccd446eSAtari911}
1273*9ccd446eSAtari911
1274*9ccd446eSAtari911.calendar-compact-left {
1275*9ccd446eSAtari911    background: #fafafa;  /* ← Left panel (calendar side)! */
1276*9ccd446eSAtari911}
1277*9ccd446eSAtari911
1278*9ccd446eSAtari911.calendar-compact-right {
1279*9ccd446eSAtari911    background: #ffffff;  /* ← Right panel (events side)! */
1280*9ccd446eSAtari911}
1281*9ccd446eSAtari911```
1282*9ccd446eSAtari911
1283*9ccd446eSAtari911**These were showing through the cells and events!**
1284*9ccd446eSAtari911
1285*9ccd446eSAtari911### Why Containers Matter
1286*9ccd446eSAtari911
1287*9ccd446eSAtari911Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through:
1288*9ccd446eSAtari911
1289*9ccd446eSAtari911```
1290*9ccd446eSAtari911Container (#fafafa)           ← Showing through!
1291*9ccd446eSAtari911   └─ Table Cell (#f5f5f5)    ← Transparent areas
1292*9ccd446eSAtari911      └─ Content
1293*9ccd446eSAtari911```
1294*9ccd446eSAtari911
1295*9ccd446eSAtari911### All Backgrounds Removed
1296*9ccd446eSAtari911
1297*9ccd446eSAtari911**v5.2.6 removes**:
1298*9ccd446eSAtari911- `.calendar-compact-container` background
1299*9ccd446eSAtari911- `.calendar-compact-left` background
1300*9ccd446eSAtari911- `.calendar-compact-right` background
1301*9ccd446eSAtari911- `.event-search-input-inline` background
1302*9ccd446eSAtari911- `.past-events-toggle` background & hover
1303*9ccd446eSAtari911
1304*9ccd446eSAtari911**v5.2.5 removed**:
1305*9ccd446eSAtari911- `.calendar-compact-grid tbody td` background
1306*9ccd446eSAtari911- `.calendar-compact-grid thead th` background
1307*9ccd446eSAtari911
1308*9ccd446eSAtari911**v5.2.4 removed**:
1309*9ccd446eSAtari911- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds
1310*9ccd446eSAtari911
1311*9ccd446eSAtari911**v5.2.3 removed**:
1312*9ccd446eSAtari911- `.event-compact-item` background
1313*9ccd446eSAtari911
1314*9ccd446eSAtari911**ALL container and element backgrounds eliminated!** ��
1315*9ccd446eSAtari911
1316*9ccd446eSAtari911### What Should Work Now
1317*9ccd446eSAtari911
1318*9ccd446eSAtari911**Calendar cells**: No container background showing through ✓
1319*9ccd446eSAtari911**Event items**: No container background showing through ✓
1320*9ccd446eSAtari911**Search bar**: Uses template color ✓
1321*9ccd446eSAtari911**Past events toggle**: Uses template color ✓
1322*9ccd446eSAtari911
1323*9ccd446eSAtari911### Complete List of Fixes
1324*9ccd446eSAtari911
1325*9ccd446eSAtari911**Containers**:
1326*9ccd446eSAtari911- Main container ✓
1327*9ccd446eSAtari911- Left panel ✓
1328*9ccd446eSAtari911- Right panel ✓
1329*9ccd446eSAtari911
1330*9ccd446eSAtari911**Elements**:
1331*9ccd446eSAtari911- Table cells ✓
1332*9ccd446eSAtari911- Event items ✓
1333*9ccd446eSAtari911- Search input ✓
1334*9ccd446eSAtari911- Past events toggle ✓
1335*9ccd446eSAtari911
1336*9ccd446eSAtari911**EVERYTHING removed!** ��
1337*9ccd446eSAtari911
1338*9ccd446eSAtari911### Critical: Clear Caches
1339*9ccd446eSAtari911
1340*9ccd446eSAtari911**Must clear caches or won't work**:
1341*9ccd446eSAtari9111. Hard refresh: Ctrl+Shift+R (5 times!)
1342*9ccd446eSAtari9112. Clear DokuWiki cache
1343*9ccd446eSAtari9113. Close browser completely
1344*9ccd446eSAtari9114. Reopen and test
1345*9ccd446eSAtari911
1346*9ccd446eSAtari911**CSS caching is EXTREMELY persistent!**
1347*9ccd446eSAtari911
1348*9ccd446eSAtari911## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS
1349*9ccd446eSAtari911
1350*9ccd446eSAtari911### �� Fixed: Removed Hardcoded Backgrounds from Table Cells
1351*9ccd446eSAtari911- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`!
1352*9ccd446eSAtari911- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`!
1353*9ccd446eSAtari911- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`!
1354*9ccd446eSAtari911- **Fixed:** Removed ALL hardcoded backgrounds from table CSS
1355*9ccd446eSAtari911- **Result:** Calendar table cells finally use template colors!
1356*9ccd446eSAtari911
1357*9ccd446eSAtari911### The REAL Culprits
1358*9ccd446eSAtari911
1359*9ccd446eSAtari911The generic table CSS was overriding everything!
1360*9ccd446eSAtari911
1361*9ccd446eSAtari911**In style.css (lines 307-356)**:
1362*9ccd446eSAtari911```css
1363*9ccd446eSAtari911.calendar-compact-grid thead th {
1364*9ccd446eSAtari911    background: #f8f8f8;  /* ← Header cells hardcoded! */
1365*9ccd446eSAtari911}
1366*9ccd446eSAtari911
1367*9ccd446eSAtari911.calendar-compact-grid tbody td {
1368*9ccd446eSAtari911    background: #ffffff;  /* ← ALL table cells hardcoded! */
1369*9ccd446eSAtari911}
1370*9ccd446eSAtari911
1371*9ccd446eSAtari911.calendar-compact-grid tbody td:hover {
1372*9ccd446eSAtari911    background: #f0f7ff;  /* ← Hover state hardcoded! */
1373*9ccd446eSAtari911}
1374*9ccd446eSAtari911```
1375*9ccd446eSAtari911
1376*9ccd446eSAtari911**These apply to ALL `<td>` and `<th>` elements in the calendar table!**
1377*9ccd446eSAtari911
1378*9ccd446eSAtari911### Why This Was the Last One
1379*9ccd446eSAtari911
1380*9ccd446eSAtari911**CSS Specificity Order**:
1381*9ccd446eSAtari9111. `.calendar-compact-grid tbody td` (generic - applies to ALL cells)
1382*9ccd446eSAtari9112. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells)
1383*9ccd446eSAtari9113. Inline styles (should win but didn't)
1384*9ccd446eSAtari911
1385*9ccd446eSAtari911**We removed the specific ones (v5.2.4), but the generic one was still there!**
1386*9ccd446eSAtari911
1387*9ccd446eSAtari911### What We've Removed
1388*9ccd446eSAtari911
1389*9ccd446eSAtari911**v5.2.3**:
1390*9ccd446eSAtari911- `.event-compact-item` background
1391*9ccd446eSAtari911- `.event-compact-item:hover` background
1392*9ccd446eSAtari911
1393*9ccd446eSAtari911**v5.2.4**:
1394*9ccd446eSAtari911- `.cal-empty` background & hover
1395*9ccd446eSAtari911- `.cal-today` background & hover
1396*9ccd446eSAtari911- `.cal-has-events` background & hover
1397*9ccd446eSAtari911
1398*9ccd446eSAtari911**v5.2.5 (FINAL)**:
1399*9ccd446eSAtari911- `.calendar-compact-grid tbody td` background ✓
1400*9ccd446eSAtari911- `.calendar-compact-grid tbody td:hover` background ✓
1401*9ccd446eSAtari911- `.calendar-compact-grid thead th` background ✓
1402*9ccd446eSAtari911
1403*9ccd446eSAtari911**All CSS background overrides ELIMINATED!** ��
1404*9ccd446eSAtari911
1405*9ccd446eSAtari911### Why It Took 5 Versions
1406*9ccd446eSAtari911
1407*9ccd446eSAtari911**CSS had layers of hardcoded backgrounds**:
1408*9ccd446eSAtari911
1409*9ccd446eSAtari911```
1410*9ccd446eSAtari911Layer 1: Table cells (.calendar-compact-grid tbody td)
1411*9ccd446eSAtari911         ↓ Overrode inline styles
1412*9ccd446eSAtari911Layer 2: Cell states (.cal-today, .cal-empty, etc.)
1413*9ccd446eSAtari911         ↓ Overrode table cells
1414*9ccd446eSAtari911Layer 3: Event items (.event-compact-item)
1415*9ccd446eSAtari911         ↓ Overrode inline styles
1416*9ccd446eSAtari911
1417*9ccd446eSAtari911ALL had to be removed!
1418*9ccd446eSAtari911```
1419*9ccd446eSAtari911
1420*9ccd446eSAtari911**We kept finding more specific CSS, but the base table CSS was there all along!**
1421*9ccd446eSAtari911
1422*9ccd446eSAtari911### Visual Result
1423*9ccd446eSAtari911
1424*9ccd446eSAtari911**NOW everything matches**:
1425*9ccd446eSAtari911```
1426*9ccd446eSAtari911Calendar Table:
1427*9ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐
1428*9ccd446eSAtari911│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__
1429*9ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤
1430*9ccd446eSAtari911│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__
1431*9ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤
1432*9ccd446eSAtari911│ 8│ 9│10│11│12│13│14│ ← All: __background_site__
1433*9ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘
1434*9ccd446eSAtari911
1435*9ccd446eSAtari911Sidebar Events:
1436*9ccd446eSAtari911┌────────────────────────┐
1437*9ccd446eSAtari911│ �� Event               │ ← __background_site__
1438*9ccd446eSAtari911│ �� Event               │ ← __background_site__
1439*9ccd446eSAtari911└────────────────────────┘
1440*9ccd446eSAtari911
1441*9ccd446eSAtari911FINALLY ALL MATCHING! ✓
1442*9ccd446eSAtari911```
1443*9ccd446eSAtari911
1444*9ccd446eSAtari911### Complete List of Removed CSS
1445*9ccd446eSAtari911
1446*9ccd446eSAtari911**ALL hardcoded backgrounds removed**:
1447*9ccd446eSAtari911- `.event-compact-item` background
1448*9ccd446eSAtari911- `.event-compact-item:hover` background
1449*9ccd446eSAtari911- `.cal-empty` background & hover
1450*9ccd446eSAtari911- `.cal-today` background & hover
1451*9ccd446eSAtari911- `.cal-has-events` background & hover
1452*9ccd446eSAtari911- `.calendar-compact-grid tbody td` background ← NEW
1453*9ccd446eSAtari911- `.calendar-compact-grid tbody td:hover` background ← NEW
1454*9ccd446eSAtari911- `.calendar-compact-grid thead th` background ← NEW
1455*9ccd446eSAtari911
1456*9ccd446eSAtari911**Every single CSS background override is GONE!** ��
1457*9ccd446eSAtari911
1458*9ccd446eSAtari911### Testing Steps
1459*9ccd446eSAtari911
1460*9ccd446eSAtari911**After installing v5.2.5**:
1461*9ccd446eSAtari911
1462*9ccd446eSAtari9111. **Clear browser cache**: Ctrl+Shift+R (3 times!)
1463*9ccd446eSAtari9112. **Clear DokuWiki cache**: Click the button
1464*9ccd446eSAtari9113. **Close browser completely**: Restart it
1465*9ccd446eSAtari9114. **Visit page**: Should finally see matching backgrounds
1466*9ccd446eSAtari911
1467*9ccd446eSAtari911**CSS is EXTREMELY sticky - may need to clear multiple times!**
1468*9ccd446eSAtari911
1469*9ccd446eSAtari911### This Should Be It
1470*9ccd446eSAtari911
1471*9ccd446eSAtari911**No more CSS overrides exist** (we've checked the entire file):
1472*9ccd446eSAtari911- Table cells ✓ Fixed
1473*9ccd446eSAtari911- Cell states ✓ Fixed
1474*9ccd446eSAtari911- Event items ✓ Fixed
1475*9ccd446eSAtari911- Headers ✓ Fixed
1476*9ccd446eSAtari911- Hover states ✓ Fixed
1477*9ccd446eSAtari911
1478*9ccd446eSAtari911**All backgrounds now come from inline styles using template colors!**
1479*9ccd446eSAtari911
1480*9ccd446eSAtari911## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS
1481*9ccd446eSAtari911
1482*9ccd446eSAtari911### �� Fixed: Removed Hardcoded Backgrounds from Calendar Cells
1483*9ccd446eSAtari911- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`!
1484*9ccd446eSAtari911- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS
1485*9ccd446eSAtari911- **Result:** Calendar cells now use template colors!
1486*9ccd446eSAtari911
1487*9ccd446eSAtari911### The Second Culprit
1488*9ccd446eSAtari911
1489*9ccd446eSAtari911MORE hardcoded backgrounds in the CSS file!
1490*9ccd446eSAtari911
1491*9ccd446eSAtari911**In style.css (lines 359-382)**:
1492*9ccd446eSAtari911```css
1493*9ccd446eSAtari911.cal-empty {
1494*9ccd446eSAtari911    background: #fafafa !important;  /* ← Overriding inline styles! */
1495*9ccd446eSAtari911}
1496*9ccd446eSAtari911
1497*9ccd446eSAtari911.cal-today {
1498*9ccd446eSAtari911    background: #e8f5e9 !important;  /* ← Overriding today cell! */
1499*9ccd446eSAtari911}
1500*9ccd446eSAtari911
1501*9ccd446eSAtari911.cal-today:hover {
1502*9ccd446eSAtari911    background: #c8e6c9 !important;  /* ← Overriding hover! */
1503*9ccd446eSAtari911}
1504*9ccd446eSAtari911
1505*9ccd446eSAtari911.cal-has-events {
1506*9ccd446eSAtari911    background: #fffbf0;  /* ← Overriding event cells! */
1507*9ccd446eSAtari911}
1508*9ccd446eSAtari911
1509*9ccd446eSAtari911.cal-has-events:hover {
1510*9ccd446eSAtari911    background: #fff4d9;  /* ← Overriding hover! */
1511*9ccd446eSAtari911}
1512*9ccd446eSAtari911```
1513*9ccd446eSAtari911
1514*9ccd446eSAtari911**These were ALL overriding the inline styles!**
1515*9ccd446eSAtari911
1516*9ccd446eSAtari911### The Fix
1517*9ccd446eSAtari911
1518*9ccd446eSAtari911**Removed all hardcoded backgrounds**:
1519*9ccd446eSAtari911```css
1520*9ccd446eSAtari911.cal-empty {
1521*9ccd446eSAtari911    /* background removed - inline style handles this */
1522*9ccd446eSAtari911    cursor: default !important;
1523*9ccd446eSAtari911}
1524*9ccd446eSAtari911
1525*9ccd446eSAtari911.cal-today {
1526*9ccd446eSAtari911    /* background removed - inline style handles this */
1527*9ccd446eSAtari911}
1528*9ccd446eSAtari911
1529*9ccd446eSAtari911.cal-has-events {
1530*9ccd446eSAtari911    /* background removed - inline style handles this */
1531*9ccd446eSAtari911}
1532*9ccd446eSAtari911
1533*9ccd446eSAtari911/* Hover states also removed */
1534*9ccd446eSAtari911```
1535*9ccd446eSAtari911
1536*9ccd446eSAtari911### What Was Overridden
1537*9ccd446eSAtari911
1538*9ccd446eSAtari911**v5.2.3 fixed**:
1539*9ccd446eSAtari911- Event items in sidebar ✓
1540*9ccd446eSAtari911
1541*9ccd446eSAtari911**v5.2.4 fixes**:
1542*9ccd446eSAtari911- Calendar day cells ✓
1543*9ccd446eSAtari911- Today cell ✓
1544*9ccd446eSAtari911- Empty cells ✓
1545*9ccd446eSAtari911- Cells with events ✓
1546*9ccd446eSAtari911- All hover states ✓
1547*9ccd446eSAtari911
1548*9ccd446eSAtari911### Why This Kept Happening
1549*9ccd446eSAtari911
1550*9ccd446eSAtari911**CSS had hardcoded backgrounds everywhere**:
1551*9ccd446eSAtari9111. Event items: `#ffffff` (fixed in v5.2.3)
1552*9ccd446eSAtari9112. Calendar cells: Multiple colors (fixed in v5.2.4)
1553*9ccd446eSAtari9113. **All with `!important` flags!**
1554*9ccd446eSAtari911
1555*9ccd446eSAtari911**The inline styles couldn't override them!**
1556*9ccd446eSAtari911
1557*9ccd446eSAtari911### Visual Result
1558*9ccd446eSAtari911
1559*9ccd446eSAtari911**Now ALL backgrounds match**:
1560*9ccd446eSAtari911```
1561*9ccd446eSAtari911Calendar Grid:
1562*9ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐
1563*9ccd446eSAtari911│  │  │  │  │  │  │  │ ← All use __background_site__
1564*9ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤
1565*9ccd446eSAtari911│  │██│  │  │  │  │  │ ← Today uses __background_neu__
1566*9ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤
1567*9ccd446eSAtari911│  │  │  │  │  │  │  │ ← All match template
1568*9ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘
1569*9ccd446eSAtari911
1570*9ccd446eSAtari911Sidebar Events:
1571*9ccd446eSAtari911┌────────────────────────┐
1572*9ccd446eSAtari911│ �� Event               │ ← Uses __background_site__
1573*9ccd446eSAtari911│ �� Event               │ ← Uses __background_site__
1574*9ccd446eSAtari911└────────────────────────┘
1575*9ccd446eSAtari911
1576*9ccd446eSAtari911Perfect consistency!
1577*9ccd446eSAtari911```
1578*9ccd446eSAtari911
1579*9ccd446eSAtari911### CSS Removed
1580*9ccd446eSAtari911
1581*9ccd446eSAtari911**Calendar cells**:
1582*9ccd446eSAtari911- `.cal-empty` background
1583*9ccd446eSAtari911- `.cal-empty:hover` background
1584*9ccd446eSAtari911- `.cal-today` background
1585*9ccd446eSAtari911- `.cal-today:hover` background
1586*9ccd446eSAtari911- `.cal-has-events` background
1587*9ccd446eSAtari911- `.cal-has-events:hover` background
1588*9ccd446eSAtari911
1589*9ccd446eSAtari911**All gone!** ✓
1590*9ccd446eSAtari911
1591*9ccd446eSAtari911### Important: Clear Caches Again!
1592*9ccd446eSAtari911
1593*9ccd446eSAtari911After installing v5.2.4:
1594*9ccd446eSAtari911
1595*9ccd446eSAtari9111. **Hard refresh browser**: Ctrl+Shift+R (twice!)
1596*9ccd446eSAtari9112. **Clear DokuWiki cache**: Admin → Clear Cache
1597*9ccd446eSAtari9113. **May need to restart browser**: To clear CSS cache
1598*9ccd446eSAtari911
1599*9ccd446eSAtari911**Old CSS is VERY sticky!**
1600*9ccd446eSAtari911
1601*9ccd446eSAtari911### Why It Took So Long
1602*9ccd446eSAtari911
1603*9ccd446eSAtari911**Multiple CSS overrides**:
1604*9ccd446eSAtari911- Event items (v5.2.3) ✓ Fixed
1605*9ccd446eSAtari911- Calendar cells (v5.2.4) ✓ Fixed
1606*9ccd446eSAtari911- Each with different classes
1607*9ccd446eSAtari911- Each with `!important`
1608*9ccd446eSAtari911- Hidden throughout CSS file
1609*9ccd446eSAtari911
1610*9ccd446eSAtari911**Found them all now!** ��
1611*9ccd446eSAtari911
1612*9ccd446eSAtari911## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS
1613*9ccd446eSAtari911
1614*9ccd446eSAtari911### �� Fixed: Removed Hardcoded Backgrounds from CSS
1615*9ccd446eSAtari911- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles!
1616*9ccd446eSAtari911- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS
1617*9ccd446eSAtari911- **Result:** Event backgrounds now properly use template colors!
1618*9ccd446eSAtari911
1619*9ccd446eSAtari911### The Root Cause
1620*9ccd446eSAtari911
1621*9ccd446eSAtari911The CSS file was overriding the inline styles with hardcoded white backgrounds!
1622*9ccd446eSAtari911
1623*9ccd446eSAtari911**In style.css (lines 599-616)**:
1624*9ccd446eSAtari911```css
1625*9ccd446eSAtari911.event-compact-item {
1626*9ccd446eSAtari911    background: #ffffff;  /* ← This was overriding inline styles! */
1627*9ccd446eSAtari911}
1628*9ccd446eSAtari911
1629*9ccd446eSAtari911.event-compact-item:hover {
1630*9ccd446eSAtari911    background: #f8f9fa;  /* ← And this on hover! */
1631*9ccd446eSAtari911}
1632*9ccd446eSAtari911```
1633*9ccd446eSAtari911
1634*9ccd446eSAtari911**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade!
1635*9ccd446eSAtari911
1636*9ccd446eSAtari911### The Fix
1637*9ccd446eSAtari911
1638*9ccd446eSAtari911**Removed hardcoded backgrounds from CSS**:
1639*9ccd446eSAtari911```css
1640*9ccd446eSAtari911.event-compact-item {
1641*9ccd446eSAtari911    /* background removed - set via inline style with template colors */
1642*9ccd446eSAtari911    display: flex;
1643*9ccd446eSAtari911    /* ... other styles ... */
1644*9ccd446eSAtari911}
1645*9ccd446eSAtari911
1646*9ccd446eSAtari911.event-compact-item:hover {
1647*9ccd446eSAtari911    box-shadow: 0 1px 3px rgba(0,0,0,0.08);
1648*9ccd446eSAtari911    /* background removed - inline style handles this */
1649*9ccd446eSAtari911}
1650*9ccd446eSAtari911```
1651*9ccd446eSAtari911
1652*9ccd446eSAtari911### Why This Was So Difficult to Find
1653*9ccd446eSAtari911
1654*9ccd446eSAtari911**CSS Specificity & Cascade**:
1655*9ccd446eSAtari9111. Inline styles with `!important` should win
1656*9ccd446eSAtari9112. But CSS that comes after can still apply
1657*9ccd446eSAtari9113. The hardcoded `background: #ffffff` was silently overriding
1658*9ccd446eSAtari9114. All the PHP code was correct - it was the CSS!
1659*9ccd446eSAtari911
1660*9ccd446eSAtari911**What We Were Doing**:
1661*9ccd446eSAtari911- ✓ Reading template colors correctly
1662*9ccd446eSAtari911- ✓ Setting `cell_bg` to `__background_site__` correctly
1663*9ccd446eSAtari911- ✓ Applying inline styles with `!important` correctly
1664*9ccd446eSAtari911- ✗ CSS file was overriding everything!
1665*9ccd446eSAtari911
1666*9ccd446eSAtari911### What Was Affected
1667*9ccd446eSAtari911
1668*9ccd446eSAtari911**Event items in**:
1669*9ccd446eSAtari911- Main calendar sidebar
1670*9ccd446eSAtari911- Standalone event list
1671*9ccd446eSAtari911- Sidebar widget
1672*9ccd446eSAtari911- All event displays
1673*9ccd446eSAtari911
1674*9ccd446eSAtari911**All had white backgrounds hardcoded in CSS!**
1675*9ccd446eSAtari911
1676*9ccd446eSAtari911### Now Working
1677*9ccd446eSAtari911
1678*9ccd446eSAtari911**Events use template colors**:
1679*9ccd446eSAtari911```html
1680*9ccd446eSAtari911<div class="event-compact-item"
1681*9ccd446eSAtari911     style="background: #f5f5f5 !important; ...">
1682*9ccd446eSAtari911    ← Now this inline style actually works!
1683*9ccd446eSAtari911</div>
1684*9ccd446eSAtari911```
1685*9ccd446eSAtari911
1686*9ccd446eSAtari911**No CSS override** ✓
1687*9ccd446eSAtari911
1688*9ccd446eSAtari911### Testing
1689*9ccd446eSAtari911
1690*9ccd446eSAtari911To verify this works:
1691*9ccd446eSAtari9111. Clear browser cache (important!)
1692*9ccd446eSAtari9112. Clear DokuWiki cache
1693*9ccd446eSAtari9113. Reload page
1694*9ccd446eSAtari9114. Events should now match eventlist background
1695*9ccd446eSAtari911
1696*9ccd446eSAtari911**Browser caching can make old CSS persist!**
1697*9ccd446eSAtari911
1698*9ccd446eSAtari911### Visual Result
1699*9ccd446eSAtari911
1700*9ccd446eSAtari911**All backgrounds now matching**:
1701*9ccd446eSAtari911```
1702*9ccd446eSAtari911┌────────────────────────────┐
1703*9ccd446eSAtari911│ Eventlist (#f5f5f5)        │ ← Template color
1704*9ccd446eSAtari911├────────────────────────────┤
1705*9ccd446eSAtari911│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
1706*9ccd446eSAtari911├────────────────────────────┤
1707*9ccd446eSAtari911│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
1708*9ccd446eSAtari911└────────────────────────────┘
1709*9ccd446eSAtari911
1710*9ccd446eSAtari911Perfect match!
1711*9ccd446eSAtari911```
1712*9ccd446eSAtari911
1713*9ccd446eSAtari911### Why Everything Else Worked
1714*9ccd446eSAtari911
1715*9ccd446eSAtari911**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds:
1716*9ccd446eSAtari911- They only had inline styles ✓
1717*9ccd446eSAtari911- Inline styles worked correctly ✓
1718*9ccd446eSAtari911- Only event items had the CSS override ✗
1719*9ccd446eSAtari911
1720*9ccd446eSAtari911### Important Notes
1721*9ccd446eSAtari911
1722*9ccd446eSAtari911**Clear caches**:
1723*9ccd446eSAtari911- Browser cache (Ctrl+Shift+R or Cmd+Shift+R)
1724*9ccd446eSAtari911- DokuWiki cache (Admin → Clear Cache)
1725*9ccd446eSAtari911- Old CSS may be cached!
1726*9ccd446eSAtari911
1727*9ccd446eSAtari911**This was the culprit all along!**
1728*9ccd446eSAtari911
1729*9ccd446eSAtari911## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND
1730*9ccd446eSAtari911
1731*9ccd446eSAtari911### �� Fixed: Clock Area Now Matches Event Cells
1732*9ccd446eSAtari911- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`)
1733*9ccd446eSAtari911- **Result:** Clock/Today header matches event cell backgrounds!
1734*9ccd446eSAtari911
1735*9ccd446eSAtari911### The Issue
1736*9ccd446eSAtari911
1737*9ccd446eSAtari911The clock area (Today header) was using a different background:
1738*9ccd446eSAtari911
1739*9ccd446eSAtari911**Before (v5.2.1)**:
1740*9ccd446eSAtari911```php
1741*9ccd446eSAtari911'header_bg' => __background_alt__,   // Different color (gray #e8e8e8)
1742*9ccd446eSAtari911'cell_bg' => __background_site__,    // Event cells (#f5f5f5)
1743*9ccd446eSAtari911```
1744*9ccd446eSAtari911
1745*9ccd446eSAtari911**After (v5.2.2)**:
1746*9ccd446eSAtari911```php
1747*9ccd446eSAtari911'header_bg' => __background_site__,  // Same as cells (#f5f5f5) ✓
1748*9ccd446eSAtari911'cell_bg' => __background_site__,    // Event cells (#f5f5f5) ✓
1749*9ccd446eSAtari911```
1750*9ccd446eSAtari911
1751*9ccd446eSAtari911### What's the Clock Area?
1752*9ccd446eSAtari911
1753*9ccd446eSAtari911The clock/Today header in the sidebar:
1754*9ccd446eSAtari911```
1755*9ccd446eSAtari911┌────────────────────────────┐
1756*9ccd446eSAtari911│ 3:45:23 PM                 │ ← Clock area (header_bg)
1757*9ccd446eSAtari911│ ��️ --° | Sun, Feb 9, 2026 │
1758*9ccd446eSAtari911└────────────────────────────┘
1759*9ccd446eSAtari911```
1760*9ccd446eSAtari911
1761*9ccd446eSAtari911### All Backgrounds Now Unified
1762*9ccd446eSAtari911
1763*9ccd446eSAtari911**Everything now uses __background_site__**:
1764*9ccd446eSAtari911- Eventlist background ✓
1765*9ccd446eSAtari911- Calendar cells ✓
1766*9ccd446eSAtari911- Event items ✓
1767*9ccd446eSAtari911- Clock/Today header ✓
1768*9ccd446eSAtari911- Sidebar widget ✓
1769*9ccd446eSAtari911- All backgrounds match! ✓
1770*9ccd446eSAtari911
1771*9ccd446eSAtari911### Visual Result
1772*9ccd446eSAtari911
1773*9ccd446eSAtari911**Complete consistency**:
1774*9ccd446eSAtari911```
1775*9ccd446eSAtari911┌────────────────────────────┐
1776*9ccd446eSAtari911│ 3:45:23 PM                 │ ← Same background
1777*9ccd446eSAtari911│ ��️ --° | Sun, Feb 9, 2026 │
1778*9ccd446eSAtari911├────────────────────────────┤
1779*9ccd446eSAtari911│ �� Meeting at 2pm          │ ← Same background
1780*9ccd446eSAtari911│ Description...             │
1781*9ccd446eSAtari911├────────────────────────────┤
1782*9ccd446eSAtari911│ �� Another event           │ ← Same background
1783*9ccd446eSAtari911│ More details...            │
1784*9ccd446eSAtari911└────────────────────────────┘
1785*9ccd446eSAtari911
1786*9ccd446eSAtari911All using __background_site__ (#f5f5f5)
1787*9ccd446eSAtari911```
1788*9ccd446eSAtari911
1789*9ccd446eSAtari911**Perfect visual harmony!** ��
1790*9ccd446eSAtari911
1791*9ccd446eSAtari911## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND
1792*9ccd446eSAtari911
1793*9ccd446eSAtari911### �� Fixed: Calendar Cells Now Match Eventlist Background
1794*9ccd446eSAtari911- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`)
1795*9ccd446eSAtari911- **Result:** Calendar cells now match the eventlist background perfectly!
1796*9ccd446eSAtari911
1797*9ccd446eSAtari911### The Real Issue
1798*9ccd446eSAtari911
1799*9ccd446eSAtari911The eventlist was showing the CORRECT background color all along!
1800*9ccd446eSAtari911
1801*9ccd446eSAtari911**Eventlist was using**:
1802*9ccd446eSAtari911- `bg` → `__background_site__` ✓ (This was correct!)
1803*9ccd446eSAtari911
1804*9ccd446eSAtari911**Calendar cells were using**:
1805*9ccd446eSAtari911- `cell_bg` → `__background__` ✗ (This was wrong!)
1806*9ccd446eSAtari911
1807*9ccd446eSAtari911**They didn't match!**
1808*9ccd446eSAtari911
1809*9ccd446eSAtari911### The Correct Fix
1810*9ccd446eSAtari911
1811*9ccd446eSAtari911**Now everything uses __background_site__**:
1812*9ccd446eSAtari911```php
1813*9ccd446eSAtari911'bg' => __background_site__,        // Eventlist (was already correct)
1814*9ccd446eSAtari911'cell_bg' => __background_site__,   // Cells (now fixed to match)
1815*9ccd446eSAtari911```
1816*9ccd446eSAtari911
1817*9ccd446eSAtari911### Why __background_site__?
1818*9ccd446eSAtari911
1819*9ccd446eSAtari911The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background:
1820*9ccd446eSAtari911
1821*9ccd446eSAtari911```
1822*9ccd446eSAtari911Page Layout:
1823*9ccd446eSAtari911┌────────────────────────────────────┐
1824*9ccd446eSAtari911│ __background_site__ (page bg)     │ ← This is where calendar lives
1825*9ccd446eSAtari911│                                    │
1826*9ccd446eSAtari911│  ┌──────────────────────────────┐ │
1827*9ccd446eSAtari911│  │ __background__ (content bg)  │ │ ← Wiki article content
1828*9ccd446eSAtari911│  │                              │ │
1829*9ccd446eSAtari911│  └──────────────────────────────┘ │
1830*9ccd446eSAtari911│                                    │
1831*9ccd446eSAtari911└────────────────────────────────────┘
1832*9ccd446eSAtari911```
1833*9ccd446eSAtari911
1834*9ccd446eSAtari911**Calendar should match the page background, not the content background!**
1835*9ccd446eSAtari911
1836*9ccd446eSAtari911### Template Example
1837*9ccd446eSAtari911
1838*9ccd446eSAtari911Typical DokuWiki template:
1839*9ccd446eSAtari911```ini
1840*9ccd446eSAtari911__background_site__ = "#f5f5f5"  (Light gray - page background)
1841*9ccd446eSAtari911__background__ = "#ffffff"        (White - content area)
1842*9ccd446eSAtari911```
1843*9ccd446eSAtari911
1844*9ccd446eSAtari911**Before (v5.2.0)**:
1845*9ccd446eSAtari911- Eventlist: `#f5f5f5` (light gray) ✓ Correct
1846*9ccd446eSAtari911- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match
1847*9ccd446eSAtari911
1848*9ccd446eSAtari911**After (v5.2.1)**:
1849*9ccd446eSAtari911- Eventlist: `#f5f5f5` (light gray) ✓ Correct
1850*9ccd446eSAtari911- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED!
1851*9ccd446eSAtari911
1852*9ccd446eSAtari911### All Backgrounds Now Unified
1853*9ccd446eSAtari911
1854*9ccd446eSAtari911**Everything now uses __background_site__**:
1855*9ccd446eSAtari911- Eventlist sidebar background ✓
1856*9ccd446eSAtari911- Main calendar background ✓
1857*9ccd446eSAtari911- Calendar day cells ✓
1858*9ccd446eSAtari911- Sidebar widget ✓
1859*9ccd446eSAtari911- Event items ✓
1860*9ccd446eSAtari911- Input fields ✓
1861*9ccd446eSAtari911- Buttons ✓
1862*9ccd446eSAtari911
1863*9ccd446eSAtari911**All perfectly matched to the page background!**
1864*9ccd446eSAtari911
1865*9ccd446eSAtari911### Why Version 5.2.0 Was Wrong
1866*9ccd446eSAtari911
1867*9ccd446eSAtari911I incorrectly assumed `__background__` was the right color because it's often white. But the eventlist was already correct using `__background_site__` to match the page, not the content area.
1868*9ccd446eSAtari911
1869*9ccd446eSAtari911**The eventlist knew what it was doing all along!** The cells just needed to catch up.
1870*9ccd446eSAtari911
1871*9ccd446eSAtari911## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS
1872*9ccd446eSAtari911**Note**: This version went the wrong direction. See v5.2.1 for the correct fix.
1873*9ccd446eSAtari911
1874*9ccd446eSAtari911### �� Fixed: All Backgrounds Now Use __background__
1875*9ccd446eSAtari911- **Fixed:** `bg` now uses `__background__` instead of `__background_site__`
1876*9ccd446eSAtari911- **Fixed:** Eventlist, calendar cells, and sidebar all match now
1877*9ccd446eSAtari911- **Result:** Completely unified background throughout!
1878*9ccd446eSAtari911
1879*9ccd446eSAtari911### The Issue
1880*9ccd446eSAtari911
1881*9ccd446eSAtari911Different parts of the calendar were using different background sources:
1882*9ccd446eSAtari911
1883*9ccd446eSAtari911**Before (v5.1.9)**:
1884*9ccd446eSAtari911```php
1885*9ccd446eSAtari911'bg' => __background_site__        // Eventlist background (outer page)
1886*9ccd446eSAtari911'cell_bg' => __background__        // Cell backgrounds (content area)
1887*9ccd446eSAtari911```
1888*9ccd446eSAtari911
1889*9ccd446eSAtari911**These are different colors!**
1890*9ccd446eSAtari911- `__background_site__` = Outer page wrapper (often gray)
1891*9ccd446eSAtari911- `__background__` = Main content area (often white)
1892*9ccd446eSAtari911
1893*9ccd446eSAtari911### The Fix
1894*9ccd446eSAtari911
1895*9ccd446eSAtari911**After (v5.2.0)**:
1896*9ccd446eSAtari911```php
1897*9ccd446eSAtari911'bg' => __background__             // Eventlist background ✓
1898*9ccd446eSAtari911'cell_bg' => __background__        // Cell backgrounds ✓
1899*9ccd446eSAtari911```
1900*9ccd446eSAtari911
1901*9ccd446eSAtari911**Both use the same source!**
1902*9ccd446eSAtari911
1903*9ccd446eSAtari911### What Uses 'bg'
1904*9ccd446eSAtari911
1905*9ccd446eSAtari911The `bg` color is used for:
1906*9ccd446eSAtari911- Eventlist sidebar background
1907*9ccd446eSAtari911- Main calendar container
1908*9ccd446eSAtari911- Sidebar widget background
1909*9ccd446eSAtari911- Form backgrounds
1910*9ccd446eSAtari911- Event dialogs
1911*9ccd446eSAtari911
1912*9ccd446eSAtari911### What Uses 'cell_bg'
1913*9ccd446eSAtari911
1914*9ccd446eSAtari911The `cell_bg` color is used for:
1915*9ccd446eSAtari911- Calendar day cells
1916*9ccd446eSAtari911- Event item backgrounds
1917*9ccd446eSAtari911- Input field backgrounds
1918*9ccd446eSAtari911- Button backgrounds
1919*9ccd446eSAtari911
1920*9ccd446eSAtari911### Why This Matters
1921*9ccd446eSAtari911
1922*9ccd446eSAtari911**Template color hierarchy**:
1923*9ccd446eSAtari911```
1924*9ccd446eSAtari911__background_site__ → Outer page/body (e.g., #f5f5f5 light gray)
1925*9ccd446eSAtari911__background__      → Main content area (e.g., #ffffff white)
1926*9ccd446eSAtari911__background_alt__  → Sections/headers
1927*9ccd446eSAtari911__background_neu__  → Highlights
1928*9ccd446eSAtari911```
1929*9ccd446eSAtari911
1930*9ccd446eSAtari911**We want all calendar backgrounds to match the main content area!**
1931*9ccd446eSAtari911
1932*9ccd446eSAtari911### Visual Comparison
1933*9ccd446eSAtari911
1934*9ccd446eSAtari911**Before (v5.1.9)**: Mismatched backgrounds
1935*9ccd446eSAtari911```
1936*9ccd446eSAtari911┌────────────────────────────────┐
1937*9ccd446eSAtari911│ Eventlist (gray #f5f5f5)      │ ← __background_site__
1938*9ccd446eSAtari911└────────────────────────────────┘
1939*9ccd446eSAtari911
1940*9ccd446eSAtari911┌────────────────────────────────┐
1941*9ccd446eSAtari911│ Calendar                       │
1942*9ccd446eSAtari911│ ┌──┬──┬──┬──┬──┬──┬──┐       │
1943*9ccd446eSAtari911│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
1944*9ccd446eSAtari911│ └──┴──┴──┴──┴──┴──┴──┘       │
1945*9ccd446eSAtari911└────────────────────────────────┘
1946*9ccd446eSAtari911Different colors - looks inconsistent
1947*9ccd446eSAtari911```
1948*9ccd446eSAtari911
1949*9ccd446eSAtari911**After (v5.2.0)**: Unified backgrounds
1950*9ccd446eSAtari911```
1951*9ccd446eSAtari911┌────────────────────────────────┐
1952*9ccd446eSAtari911│ Eventlist (white #fff)         │ ← __background__
1953*9ccd446eSAtari911└────────────────────────────────┘
1954*9ccd446eSAtari911
1955*9ccd446eSAtari911┌────────────────────────────────┐
1956*9ccd446eSAtari911│ Calendar                       │
1957*9ccd446eSAtari911│ ┌──┬──┬──┬──┬──┬──┬──┐       │
1958*9ccd446eSAtari911│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
1959*9ccd446eSAtari911│ └──┴──┴──┴──┴──┴──┴──┘       │
1960*9ccd446eSAtari911└────────────────────────────────┘
1961*9ccd446eSAtari911Same color - perfectly consistent!
1962*9ccd446eSAtari911```
1963*9ccd446eSAtari911
1964*9ccd446eSAtari911### Template Examples
1965*9ccd446eSAtari911
1966*9ccd446eSAtari911**Light Template**:
1967*9ccd446eSAtari911```ini
1968*9ccd446eSAtari911__background_site__ = "#f5f5f5"  (light gray)
1969*9ccd446eSAtari911__background__ = "#ffffff"       (white)
1970*9ccd446eSAtari911```
1971*9ccd446eSAtari911
1972*9ccd446eSAtari911**Before**: Eventlist gray, cells white
1973*9ccd446eSAtari911**After**: Eventlist white, cells white ✓
1974*9ccd446eSAtari911
1975*9ccd446eSAtari911**Dark Template**:
1976*9ccd446eSAtari911```ini
1977*9ccd446eSAtari911__background_site__ = "#1a1a1a"  (very dark)
1978*9ccd446eSAtari911__background__ = "#2d2d2d"       (dark)
1979*9ccd446eSAtari911```
1980*9ccd446eSAtari911
1981*9ccd446eSAtari911**Before**: Eventlist very dark, cells dark
1982*9ccd446eSAtari911**After**: Eventlist dark, cells dark ✓
1983*9ccd446eSAtari911
1984*9ccd446eSAtari911### Benefits
1985*9ccd446eSAtari911
1986*9ccd446eSAtari911**Visual Consistency**:
1987*9ccd446eSAtari911- All backgrounds match
1988*9ccd446eSAtari911- Clean, unified appearance
1989*9ccd446eSAtari911- Professional look
1990*9ccd446eSAtari911
1991*9ccd446eSAtari911**Correct Template Integration**:
1992*9ccd446eSAtari911- Uses content area color (not page wrapper)
1993*9ccd446eSAtari911- Matches wiki content area
1994*9ccd446eSAtari911- Proper color hierarchy
1995*9ccd446eSAtari911
1996*9ccd446eSAtari911**Works Everywhere**:
1997*9ccd446eSAtari911- Light templates ✓
1998*9ccd446eSAtari911- Dark templates ✓
1999*9ccd446eSAtari911- Custom templates ✓
2000*9ccd446eSAtari911
2001*9ccd446eSAtari911### All Backgrounds Unified
2002*9ccd446eSAtari911
2003*9ccd446eSAtari911**Now using __background__**:
2004*9ccd446eSAtari911- Eventlist background ✓
2005*9ccd446eSAtari911- Calendar cells ✓
2006*9ccd446eSAtari911- Sidebar widget ✓
2007*9ccd446eSAtari911- Event items ✓
2008*9ccd446eSAtari911- Input fields ✓
2009*9ccd446eSAtari911- Buttons ✓
2010*9ccd446eSAtari911- Dialogs ✓
2011*9ccd446eSAtari911
2012*9ccd446eSAtari911**Perfect harmony throughout!** ��
2013*9ccd446eSAtari911
2014*9ccd446eSAtari911## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS
2015*9ccd446eSAtari911
2016*9ccd446eSAtari911### �� Fixed: Wiki Theme Event Backgrounds Not Showing
2017*9ccd446eSAtari911- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!)
2018*9ccd446eSAtari911- **Fixed:** Replaced CSS variables with actual hex colors
2019*9ccd446eSAtari911- **Result:** Event backgrounds now show correctly with template colors!
2020*9ccd446eSAtari911
2021*9ccd446eSAtari911### The Problem
2022*9ccd446eSAtari911
2023*9ccd446eSAtari911CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes!
2024*9ccd446eSAtari911
2025*9ccd446eSAtari911**Before (broken)**:
2026*9ccd446eSAtari911```php
2027*9ccd446eSAtari911'cell_bg' => 'var(--__background__, #fff)',  // Doesn't work in inline styles!
2028*9ccd446eSAtari911```
2029*9ccd446eSAtari911
2030*9ccd446eSAtari911**After (fixed)**:
2031*9ccd446eSAtari911```php
2032*9ccd446eSAtari911'cell_bg' => '#fff',  // Actual hex color works!
2033*9ccd446eSAtari911```
2034*9ccd446eSAtari911
2035*9ccd446eSAtari911### What Was Affected
2036*9ccd446eSAtari911
2037*9ccd446eSAtari911**When style.ini read successfully**:
2038*9ccd446eSAtari911- ✅ Worked fine (uses actual hex colors from file)
2039*9ccd446eSAtari911
2040*9ccd446eSAtari911**When style.ini fallback used**:
2041*9ccd446eSAtari911- ❌ Events had no background
2042*9ccd446eSAtari911- ❌ CSS variables don't work in inline styles
2043*9ccd446eSAtari911- ❌ Looked broken
2044*9ccd446eSAtari911
2045*9ccd446eSAtari911### The Fix
2046*9ccd446eSAtari911
2047*9ccd446eSAtari911**Wiki theme fallback now uses real colors**:
2048*9ccd446eSAtari911```php
2049*9ccd446eSAtari911'wiki' => [
2050*9ccd446eSAtari911    'bg' => '#f5f5f5',           // Real hex (was: var(--__background_site__))
2051*9ccd446eSAtari911    'border' => '#ccc',           // Real hex (was: var(--__border__))
2052*9ccd446eSAtari911    'cell_bg' => '#fff',          // Real hex (was: var(--__background__))
2053*9ccd446eSAtari911    'cell_today_bg' => '#eee',    // Real hex (was: var(--__background_neu__))
2054*9ccd446eSAtari911    'text_primary' => '#333',     // Real hex (was: var(--__text__))
2055*9ccd446eSAtari911    'text_bright' => '#2b73b7',   // Real hex (was: var(--__link__))
2056*9ccd446eSAtari911    'text_dim' => '#666',         // Real hex (was: var(--__text_neu__))
2057*9ccd446eSAtari911    'grid_bg' => '#e8e8e8',       // Real hex (was: var(--__background_alt__))
2058*9ccd446eSAtari911    // ... all colors now use real hex values
2059*9ccd446eSAtari911]
2060*9ccd446eSAtari911```
2061*9ccd446eSAtari911
2062*9ccd446eSAtari911### Why CSS Variables Don't Work
2063*9ccd446eSAtari911
2064*9ccd446eSAtari911**CSS variables work**:
2065*9ccd446eSAtari911```css
2066*9ccd446eSAtari911.some-class {
2067*9ccd446eSAtari911    background: var(--__background__, #fff);  /* ✓ Works in CSS */
2068*9ccd446eSAtari911}
2069*9ccd446eSAtari911```
2070*9ccd446eSAtari911
2071*9ccd446eSAtari911**CSS variables DON'T work**:
2072*9ccd446eSAtari911```html
2073*9ccd446eSAtari911<div style="background: var(--__background__, #fff)">  <!-- ✗ Doesn't work -->
2074*9ccd446eSAtari911```
2075*9ccd446eSAtari911
2076*9ccd446eSAtari911### How It Works Now
2077*9ccd446eSAtari911
2078*9ccd446eSAtari911**Priority system**:
2079*9ccd446eSAtari9111. **Try reading style.ini** → Use actual template hex colors ✓
2080*9ccd446eSAtari9112. **If file not found** → Use fallback hex colors ✓
2081*9ccd446eSAtari9113. **Never use CSS variables in inline styles** ✓
2082*9ccd446eSAtari911
2083*9ccd446eSAtari911**Both paths now work correctly!**
2084*9ccd446eSAtari911
2085*9ccd446eSAtari911### Visual Result
2086*9ccd446eSAtari911
2087*9ccd446eSAtari911**Events now have proper backgrounds**:
2088*9ccd446eSAtari911```
2089*9ccd446eSAtari911┌──────────────────────────┐
2090*9ccd446eSAtari911│ �� Meeting at 2pm        │ ← White background (#fff)
2091*9ccd446eSAtari911│ Description here...      │
2092*9ccd446eSAtari911│ [✏️ Edit] [��️ Delete]   │
2093*9ccd446eSAtari911└──────────────────────────┘
2094*9ccd446eSAtari911
2095*9ccd446eSAtari911Not:
2096*9ccd446eSAtari911┌──────────────────────────┐
2097*9ccd446eSAtari911│ �� Meeting at 2pm        │ ← No background (broken)
2098*9ccd446eSAtari911│ Description here...      │
2099*9ccd446eSAtari911└──────────────────────────┘
2100*9ccd446eSAtari911```
2101*9ccd446eSAtari911
2102*9ccd446eSAtari911### Affected Areas
2103*9ccd446eSAtari911
2104*9ccd446eSAtari911**All event displays**:
2105*9ccd446eSAtari911- Main calendar events ✓
2106*9ccd446eSAtari911- Sidebar widget events ✓
2107*9ccd446eSAtari911- Event list items ✓
2108*9ccd446eSAtari911- Event backgrounds ✓
2109*9ccd446eSAtari911- Button backgrounds ✓
2110*9ccd446eSAtari911- Input field backgrounds ✓
2111*9ccd446eSAtari911
2112*9ccd446eSAtari911**Everything uses real colors now!**
2113*9ccd446eSAtari911
2114*9ccd446eSAtari911## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT
2115*9ccd446eSAtari911
2116*9ccd446eSAtari911### �� Reorganized: Better Update Tab Layout
2117*9ccd446eSAtari911- **Moved:** Current Version section to the top
2118*9ccd446eSAtari911- **Combined:** Upload and Important Notes side-by-side
2119*9ccd446eSAtari911- **Improved:** Space-efficient two-column layout
2120*9ccd446eSAtari911- **Result:** More information visible at once!
2121*9ccd446eSAtari911
2122*9ccd446eSAtari911### New Layout Order
2123*9ccd446eSAtari911
2124*9ccd446eSAtari911**Version 5.1.8**:
2125*9ccd446eSAtari911```
2126*9ccd446eSAtari9111. Current Version (at top - see what you have)
2127*9ccd446eSAtari9112. Upload + Important Notes (side-by-side)
2128*9ccd446eSAtari9113. Recent Changes (changelog)
2129*9ccd446eSAtari9114. Backups
2130*9ccd446eSAtari911```
2131*9ccd446eSAtari911
2132*9ccd446eSAtari911### Side-by-Side Design
2133*9ccd446eSAtari911
2134*9ccd446eSAtari911**Upload form (left 60%) + Important Notes (right 40%)**:
2135*9ccd446eSAtari911```
2136*9ccd446eSAtari911┌──────────────────────────────────────────┐
2137*9ccd446eSAtari911│ �� Current Version                       │
2138*9ccd446eSAtari911│ Version: 5.1.8                           │
2139*9ccd446eSAtari911│ ✅ Permissions: OK                       │
2140*9ccd446eSAtari911└──────────────────────────────────────────┘
2141*9ccd446eSAtari911
2142*9ccd446eSAtari911┌─────────────────────┬────────────────────┐
2143*9ccd446eSAtari911│ �� Upload New       │ ⚠️ Important Notes │
2144*9ccd446eSAtari911│ [Choose File]       │ • Replaces files   │
2145*9ccd446eSAtari911│ ☑ Backup first      │ • Config preserved │
2146*9ccd446eSAtari911│ [Upload] [Clear]    │ • Events safe      │
2147*9ccd446eSAtari911└─────────────────────┴────────────────────┘
2148*9ccd446eSAtari911```
2149*9ccd446eSAtari911
2150*9ccd446eSAtari911### Benefits
2151*9ccd446eSAtari911
2152*9ccd446eSAtari911**Current Version First**:
2153*9ccd446eSAtari911- See what you have immediately
2154*9ccd446eSAtari911- Check permissions at a glance
2155*9ccd446eSAtari911- Know if ready to update
2156*9ccd446eSAtari911
2157*9ccd446eSAtari911**Side-by-Side Layout**:
2158*9ccd446eSAtari911- Upload form and warnings together
2159*9ccd446eSAtari911- Read notes while choosing file
2160*9ccd446eSAtari911- More efficient use of space
2161*9ccd446eSAtari911- Less scrolling needed
2162*9ccd446eSAtari911
2163*9ccd446eSAtari911**Better Information Flow**:
2164*9ccd446eSAtari9111. See current version ✓
2165*9ccd446eSAtari9112. Upload new version with notes visible ✓
2166*9ccd446eSAtari9113. Review recent changes ✓
2167*9ccd446eSAtari9114. Manage backups ✓
2168*9ccd446eSAtari911
2169*9ccd446eSAtari911### Visual Comparison
2170*9ccd446eSAtari911
2171*9ccd446eSAtari911**Before (v5.1.7)**:
2172*9ccd446eSAtari911```
2173*9ccd446eSAtari911Important Notes (full width)
2174*9ccd446eSAtari9112175*9ccd446eSAtari911Upload Form (full width)
2176*9ccd446eSAtari9112177*9ccd446eSAtari911Current Version
2178*9ccd446eSAtari9112179*9ccd446eSAtari911Recent Changes
2180*9ccd446eSAtari9112181*9ccd446eSAtari911Backups
2182*9ccd446eSAtari911```
2183*9ccd446eSAtari911
2184*9ccd446eSAtari911**After (v5.1.8)**:
2185*9ccd446eSAtari911```
2186*9ccd446eSAtari911Current Version (full width)
2187*9ccd446eSAtari9112188*9ccd446eSAtari911Upload (60%) | Notes (40%)
2189*9ccd446eSAtari9112190*9ccd446eSAtari911Recent Changes
2191*9ccd446eSAtari9112192*9ccd446eSAtari911Backups
2193*9ccd446eSAtari911```
2194*9ccd446eSAtari911
2195*9ccd446eSAtari911**More compact, better organized!**
2196*9ccd446eSAtari911
2197*9ccd446eSAtari911### Responsive Design
2198*9ccd446eSAtari911
2199*9ccd446eSAtari911**Wide screens**:
2200*9ccd446eSAtari911- Upload and notes side-by-side
2201*9ccd446eSAtari911- Full 1200px width utilized
2202*9ccd446eSAtari911- Efficient space usage
2203*9ccd446eSAtari911
2204*9ccd446eSAtari911**Narrow screens**:
2205*9ccd446eSAtari911- Sections stack gracefully
2206*9ccd446eSAtari911- Flex layout adapts
2207*9ccd446eSAtari911- Still fully functional
2208*9ccd446eSAtari911
2209*9ccd446eSAtari911### Layout Details
2210*9ccd446eSAtari911
2211*9ccd446eSAtari911**Current Version Section**:
2212*9ccd446eSAtari911- Full width (1200px max)
2213*9ccd446eSAtari911- Shows version, author, description
2214*9ccd446eSAtari911- Permission status with icons
2215*9ccd446eSAtari911- Helpful fix commands if needed
2216*9ccd446eSAtari911
2217*9ccd446eSAtari911**Upload/Notes Section**:
2218*9ccd446eSAtari911- Flexbox layout with gap
2219*9ccd446eSAtari911- Upload: `flex:1` (grows)
2220*9ccd446eSAtari911- Notes: `flex:0 0 350px` (fixed 350px)
2221*9ccd446eSAtari911- Both have proper min-width
2222*9ccd446eSAtari911
2223*9ccd446eSAtari911**Recent Changes Section**:
2224*9ccd446eSAtari911- Full width (1200px max)
2225*9ccd446eSAtari911- Compact scrollable view
2226*9ccd446eSAtari911- Color-coded change types
2227*9ccd446eSAtari911- Last 10 versions shown
2228*9ccd446eSAtari911
2229*9ccd446eSAtari911**Backups Section**:
2230*9ccd446eSAtari911- Full width (1200px max)
2231*9ccd446eSAtari911- Manual backup button
2232*9ccd446eSAtari911- Scrollable file list
2233*9ccd446eSAtari911- All actions accessible
2234*9ccd446eSAtari911
2235*9ccd446eSAtari911### Improved Max Widths
2236*9ccd446eSAtari911
2237*9ccd446eSAtari911All sections now use `max-width:1200px` (previously 900px):
2238*9ccd446eSAtari911- Better use of wide screens
2239*9ccd446eSAtari911- Still responsive on narrow screens
2240*9ccd446eSAtari911- Consistent throughout tab
2241*9ccd446eSAtari911
2242*9ccd446eSAtari911## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR
2243*9ccd446eSAtari911
2244*9ccd446eSAtari911### �� Fixed: Extra Closing Brace
2245*9ccd446eSAtari911- **Fixed:** ParseError on line 1936 (extra closing brace)
2246*9ccd446eSAtari911- **Result:** Manual backup feature now works correctly!
2247*9ccd446eSAtari911
2248*9ccd446eSAtari911### What Was Wrong
2249*9ccd446eSAtari911
2250*9ccd446eSAtari911Extra `}` after the backup section:
2251*9ccd446eSAtari911
2252*9ccd446eSAtari911**Before (broken)**:
2253*9ccd446eSAtari911```php
2254*9ccd446eSAtari911echo '</div>';
2255*9ccd446eSAtari911}  // ← Extra closing brace!
2256*9ccd446eSAtari911
2257*9ccd446eSAtari911echo '<script>
2258*9ccd446eSAtari911```
2259*9ccd446eSAtari911
2260*9ccd446eSAtari911**After (fixed)**:
2261*9ccd446eSAtari911```php
2262*9ccd446eSAtari911echo '</div>';
2263*9ccd446eSAtari911
2264*9ccd446eSAtari911echo '<script>
2265*9ccd446eSAtari911```
2266*9ccd446eSAtari911
2267*9ccd446eSAtari911**Manual backup feature now fully functional!** ✅
2268*9ccd446eSAtari911
2269*9ccd446eSAtari911## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND
2270*9ccd446eSAtari911
2271*9ccd446eSAtari911### �� Added: Create Backup Manually Anytime
2272*9ccd446eSAtari911- **Added:** "Create Backup Now" button in Backups section
2273*9ccd446eSAtari911- **Added:** Manual backup action handler with full verification
2274*9ccd446eSAtari911- **Added:** Backups section always visible (even with no backups)
2275*9ccd446eSAtari911- **Added:** Success message showing file size and file count
2276*9ccd446eSAtari911- **Result:** Create backups anytime without needing to upload!
2277*9ccd446eSAtari911
2278*9ccd446eSAtari911### Manual Backup Button
2279*9ccd446eSAtari911
2280*9ccd446eSAtari911**New Layout**:
2281*9ccd446eSAtari911```
2282*9ccd446eSAtari911┌─────────────────────────────────────┐
2283*9ccd446eSAtari911│ �� Backups        [�� Create Backup Now] │
2284*9ccd446eSAtari911├─────────────────────────────────────┤
2285*9ccd446eSAtari911│ Backup File                Size     │
2286*9ccd446eSAtari911calendar.backup.v5.1.6...  243 KB   │
2287*9ccd446eSAtari911│ [�� Download] [✏️ Rename] [��️ Delete] │
2288*9ccd446eSAtari911└─────────────────────────────────────┘
2289*9ccd446eSAtari911```
2290*9ccd446eSAtari911
2291*9ccd446eSAtari911**Always visible - even with no backups**:
2292*9ccd446eSAtari911```
2293*9ccd446eSAtari911┌─────────────────────────────────────┐
2294*9ccd446eSAtari911│ �� Backups        [�� Create Backup Now] │
2295*9ccd446eSAtari911├─────────────────────────────────────┤
2296*9ccd446eSAtari911│ No backups yet. Click "Create       │
2297*9ccd446eSAtari911│ Backup Now" to create your first    │
2298*9ccd446eSAtari911│ backup.                              │
2299*9ccd446eSAtari911└─────────────────────────────────────┘
2300*9ccd446eSAtari911```
2301*9ccd446eSAtari911
2302*9ccd446eSAtari911### How It Works
2303*9ccd446eSAtari911
2304*9ccd446eSAtari911**Click the button**:
2305*9ccd446eSAtari9111. Confirm: "Create a backup of the current plugin version?"
2306*9ccd446eSAtari9112. System creates backup ZIP
2307*9ccd446eSAtari9113. Verifies: File count (30+ files)
2308*9ccd446eSAtari9114. Verifies: File size (200KB+)
2309*9ccd446eSAtari9115. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)"
2310*9ccd446eSAtari911
2311*9ccd446eSAtari911**Backup naming**:
2312*9ccd446eSAtari911```
2313*9ccd446eSAtari911calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
2314*9ccd446eSAtari911                       ^^^^^^
2315*9ccd446eSAtari911                     "manual" tag identifies manual backups
2316*9ccd446eSAtari911```
2317*9ccd446eSAtari911
2318*9ccd446eSAtari911### Use Cases
2319*9ccd446eSAtari911
2320*9ccd446eSAtari911**Before updates**:
2321*9ccd446eSAtari911- Create safety backup before uploading new version
2322*9ccd446eSAtari911- Have multiple restore points
2323*9ccd446eSAtari911- Test new features with fallback
2324*9ccd446eSAtari911
2325*9ccd446eSAtari911**Regular backups**:
2326*9ccd446eSAtari911- Weekly/monthly backup schedule
2327*9ccd446eSAtari911- Before making configuration changes
2328*9ccd446eSAtari911- After important customizations
2329*9ccd446eSAtari911
2330*9ccd446eSAtari911**Development**:
2331*9ccd446eSAtari911- Backup before code experiments
2332*9ccd446eSAtari911- Save working states
2333*9ccd446eSAtari911- Quick rollback points
2334*9ccd446eSAtari911
2335*9ccd446eSAtari911### Full Verification
2336*9ccd446eSAtari911
2337*9ccd446eSAtari911**Same checks as automatic backups**:
2338*9ccd446eSAtari911- ✅ File count check (minimum 10, expected 30+)
2339*9ccd446eSAtari911- ✅ File size check (minimum 1KB, expected 200KB+)
2340*9ccd446eSAtari911- ✅ Existence check (file actually created)
2341*9ccd446eSAtari911- ✅ Automatic cleanup on failure
2342*9ccd446eSAtari911
2343*9ccd446eSAtari911**Success message includes**:
2344*9ccd446eSAtari911- Backup filename
2345*9ccd446eSAtari911- File size (human-readable)
2346*9ccd446eSAtari911- Number of files backed up
2347*9ccd446eSAtari911
2348*9ccd446eSAtari911### Example Messages
2349*9ccd446eSAtari911
2350*9ccd446eSAtari911**Success**:
2351*9ccd446eSAtari911```
2352*9ccd446eSAtari911✓ Manual backup created successfully:
2353*9ccd446eSAtari911  calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
2354*9ccd446eSAtari911  (243 KB, 31 files)
2355*9ccd446eSAtari911```
2356*9ccd446eSAtari911
2357*9ccd446eSAtari911**Failure Examples**:
2358*9ccd446eSAtari911```
2359*9ccd446eSAtari911❌ Plugin directory is not readable.
2360*9ccd446eSAtari911   Please check permissions.
2361*9ccd446eSAtari911
2362*9ccd446eSAtari911❌ Backup incomplete: Only 5 files were added (expected 30+).
2363*9ccd446eSAtari911   Backup failed.
2364*9ccd446eSAtari911
2365*9ccd446eSAtari911❌ Backup file is too small (342 bytes).
2366*9ccd446eSAtari911   Only 3 files were added. Backup failed.
2367*9ccd446eSAtari911```
2368*9ccd446eSAtari911
2369*9ccd446eSAtari911### Benefits
2370*9ccd446eSAtari911
2371*9ccd446eSAtari911**On-Demand Safety**:
2372*9ccd446eSAtari911- Create backups anytime
2373*9ccd446eSAtari911- No need to upload new version
2374*9ccd446eSAtari911- Quick and easy
2375*9ccd446eSAtari911
2376*9ccd446eSAtari911**Peace of Mind**:
2377*9ccd446eSAtari911- Backup before risky changes
2378*9ccd446eSAtari911- Multiple restore points
2379*9ccd446eSAtari911- Safe experimentation
2380*9ccd446eSAtari911
2381*9ccd446eSAtari911**Professional Workflow**:
2382*9ccd446eSAtari911- Regular backup schedule
2383*9ccd446eSAtari911- Version snapshots
2384*9ccd446eSAtari911- Disaster recovery
2385*9ccd446eSAtari911
2386*9ccd446eSAtari911### Backup Section Improvements
2387*9ccd446eSAtari911
2388*9ccd446eSAtari911**Always Visible**:
2389*9ccd446eSAtari911- Section shows even with 0 backups
2390*9ccd446eSAtari911- Button always accessible
2391*9ccd446eSAtari911- Clear call-to-action
2392*9ccd446eSAtari911
2393*9ccd446eSAtari911**Better Header**:
2394*9ccd446eSAtari911- Title and button on same row
2395*9ccd446eSAtari911- Clean, professional layout
2396*9ccd446eSAtari911- Space-efficient design
2397*9ccd446eSAtari911
2398*9ccd446eSAtari911### Technical Details
2399*9ccd446eSAtari911
2400*9ccd446eSAtari911**New Action**: `create_manual_backup`
2401*9ccd446eSAtari911
2402*9ccd446eSAtari911**New Function**: `createManualBackup()`
2403*9ccd446eSAtari911- Gets current version
2404*9ccd446eSAtari911- Creates timestamped filename with "manual" tag
2405*9ccd446eSAtari911- Uses same verification as auto-backups
2406*9ccd446eSAtari911- Shows detailed success/error messages
2407*9ccd446eSAtari911
2408*9ccd446eSAtari911**File Naming Convention**:
2409*9ccd446eSAtari911```
2410*9ccd446eSAtari911Automatic (on upload):
2411*9ccd446eSAtari911calendar.backup.v5.1.6.2026-02-09_12-30-45.zip
2412*9ccd446eSAtari911
2413*9ccd446eSAtari911Manual (button click):
2414*9ccd446eSAtari911calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
2415*9ccd446eSAtari911                       ^^^^^^^
2416*9ccd446eSAtari911                    Easy to identify!
2417*9ccd446eSAtari911```
2418*9ccd446eSAtari911
2419*9ccd446eSAtari911### Permissions Required
2420*9ccd446eSAtari911
2421*9ccd446eSAtari911- **Read access**: Plugin directory
2422*9ccd446eSAtari911- **Write access**: Parent plugins directory
2423*9ccd446eSAtari911
2424*9ccd446eSAtari911**Same as automatic backups** - no additional permissions needed!
2425*9ccd446eSAtari911
2426*9ccd446eSAtari911## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION
2427*9ccd446eSAtari911
2428*9ccd446eSAtari911### �� Enhanced: Backup Creation with Robust Verification
2429*9ccd446eSAtari911- **Added:** File count validation (must have 10+ files)
2430*9ccd446eSAtari911- **Added:** File size validation (must be 1KB+ minimum)
2431*9ccd446eSAtari911- **Added:** Return value from addDirectoryToZip (counts files added)
2432*9ccd446eSAtari911- **Added:** Detailed error messages showing file count
2433*9ccd446eSAtari911- **Added:** Automatic deletion of invalid/incomplete backups
2434*9ccd446eSAtari911- **Enhanced:** Exception handling with proper error propagation
2435*9ccd446eSAtari911- **Result:** Backups are now guaranteed to be complete or fail clearly!
2436*9ccd446eSAtari911
2437*9ccd446eSAtari911### What Changed
2438*9ccd446eSAtari911
2439*9ccd446eSAtari911**Before (v5.1.4)**:
2440*9ccd446eSAtari911```php
2441*9ccd446eSAtari911$this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
2442*9ccd446eSAtari911$zip->close();
2443*9ccd446eSAtari911// No verification - could create empty or partial backup
2444*9ccd446eSAtari911```
2445*9ccd446eSAtari911
2446*9ccd446eSAtari911**After (v5.1.5)**:
2447*9ccd446eSAtari911```php
2448*9ccd446eSAtari911$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
2449*9ccd446eSAtari911$zip->close();
2450*9ccd446eSAtari911
2451*9ccd446eSAtari911// Verify backup exists
2452*9ccd446eSAtari911if (!file_exists($backupPath)) {
2453*9ccd446eSAtari911    redirect('Backup file was not created');
2454*9ccd446eSAtari911}
2455*9ccd446eSAtari911
2456*9ccd446eSAtari911// Verify backup has content
2457*9ccd446eSAtari911$backupSize = filesize($backupPath);
2458*9ccd446eSAtari911if ($backupSize < 1000) {
2459*9ccd446eSAtari911    unlink($backupPath);
2460*9ccd446eSAtari911    redirect('Backup too small: ' . $backupSize . ' bytes');
2461*9ccd446eSAtari911}
2462*9ccd446eSAtari911
2463*9ccd446eSAtari911// Verify file count
2464*9ccd446eSAtari911if ($fileCount < 10) {
2465*9ccd446eSAtari911    unlink($backupPath);
2466*9ccd446eSAtari911    redirect('Only ' . $fileCount . ' files added (expected 30+)');
2467*9ccd446eSAtari911}
2468*9ccd446eSAtari911```
2469*9ccd446eSAtari911
2470*9ccd446eSAtari911### Backup Validation Checks
2471*9ccd446eSAtari911
2472*9ccd446eSAtari911**Three-Layer Verification**:
2473*9ccd446eSAtari911
2474*9ccd446eSAtari9111. **File Count Check**:
2475*9ccd446eSAtari911   - Minimum: 10 files required
2476*9ccd446eSAtari911   - Expected: 30+ files
2477*9ccd446eSAtari911   - Action: Delete backup if too few files
2478*9ccd446eSAtari911
2479*9ccd446eSAtari9112. **Size Check**:
2480*9ccd446eSAtari911   - Minimum: 1KB (1000 bytes)
2481*9ccd446eSAtari911   - Expected: 200-250KB
2482*9ccd446eSAtari911   - Action: Delete backup if too small
2483*9ccd446eSAtari911
2484*9ccd446eSAtari9113. **Existence Check**:
2485*9ccd446eSAtari911   - Verify file was actually created
2486*9ccd446eSAtari911   - Check ZIP archive is valid
2487*9ccd446eSAtari911   - Action: Error if file missing
2488*9ccd446eSAtari911
2489*9ccd446eSAtari911### Enhanced Error Reporting
2490*9ccd446eSAtari911
2491*9ccd446eSAtari911**Detailed Error Messages**:
2492*9ccd446eSAtari911```
2493*9ccd446eSAtari911❌ "Backup file was not created"
2494*9ccd446eSAtari911❌ "Backup too small (342 bytes). Only 3 files added."
2495*9ccd446eSAtari911❌ "Only 5 files added (expected 30+). Backup aborted."
2496*9ccd446eSAtari911❌ "Too many errors adding files: Failed to add X, Y, Z..."
2497*9ccd446eSAtari911❌ "Directory does not exist: /path/to/dir"
2498*9ccd446eSAtari911❌ "Directory is not readable: /path/to/dir"
2499*9ccd446eSAtari911```
2500*9ccd446eSAtari911
2501*9ccd446eSAtari911**Now you know exactly what went wrong!**
2502*9ccd446eSAtari911
2503*9ccd446eSAtari911### Improved addDirectoryToZip Function
2504*9ccd446eSAtari911
2505*9ccd446eSAtari911**Returns File Count**:
2506*9ccd446eSAtari911```php
2507*9ccd446eSAtari911private function addDirectoryToZip($zip, $dir, $zipPath = '') {
2508*9ccd446eSAtari911    $fileCount = 0;
2509*9ccd446eSAtari911    $errors = [];
2510*9ccd446eSAtari911
2511*9ccd446eSAtari911    // Validation
2512*9ccd446eSAtari911    if (!is_dir($dir)) throw new Exception("Directory does not exist");
2513*9ccd446eSAtari911    if (!is_readable($dir)) throw new Exception("Not readable");
2514*9ccd446eSAtari911
2515*9ccd446eSAtari911    // Add files
2516*9ccd446eSAtari911    foreach ($files as $file) {
2517*9ccd446eSAtari911        if ($zip->addFile($filePath, $relativePath)) {
2518*9ccd446eSAtari911            $fileCount++;
2519*9ccd446eSAtari911        } else {
2520*9ccd446eSAtari911            $errors[] = "Failed to add: " . $filename;
2521*9ccd446eSAtari911        }
2522*9ccd446eSAtari911    }
2523*9ccd446eSAtari911
2524*9ccd446eSAtari911    // Check error threshold
2525*9ccd446eSAtari911    if (count($errors) > 5) {
2526*9ccd446eSAtari911        throw new Exception("Too many errors");
2527*9ccd446eSAtari911    }
2528*9ccd446eSAtari911
2529*9ccd446eSAtari911    return $fileCount;  // Returns count for verification!
2530*9ccd446eSAtari911}
2531*9ccd446eSAtari911```
2532*9ccd446eSAtari911
2533*9ccd446eSAtari911### Safety Features
2534*9ccd446eSAtari911
2535*9ccd446eSAtari911**Invalid Backup Cleanup**:
2536*9ccd446eSAtari911- Failed backups are automatically deleted
2537*9ccd446eSAtari911- No partial/corrupt backups left behind
2538*9ccd446eSAtari911- Clean error state
2539*9ccd446eSAtari911
2540*9ccd446eSAtari911**Error Threshold**:
2541*9ccd446eSAtari911- Allow up to 5 minor file errors (logs warnings)
2542*9ccd446eSAtari911- More than 5 errors = complete failure
2543*9ccd446eSAtari911- Prevents partially corrupt backups
2544*9ccd446eSAtari911
2545*9ccd446eSAtari911**Directory Validation**:
2546*9ccd446eSAtari911- Check directory exists before processing
2547*9ccd446eSAtari911- Check directory is readable
2548*9ccd446eSAtari911- Fail fast with clear errors
2549*9ccd446eSAtari911
2550*9ccd446eSAtari911### Benefits
2551*9ccd446eSAtari911
2552*9ccd446eSAtari911**Guaranteed Complete Backups**:
2553*9ccd446eSAtari911- ✅ All files included or backup fails
2554*9ccd446eSAtari911- ✅ No silent failures
2555*9ccd446eSAtari911- ✅ Clear error messages
2556*9ccd446eSAtari911- ✅ Automatic cleanup
2557*9ccd446eSAtari911
2558*9ccd446eSAtari911**Better Debugging**:
2559*9ccd446eSAtari911- Know exactly how many files were added
2560*9ccd446eSAtari911- See specific errors for missing files
2561*9ccd446eSAtari911- Understand why backup failed
2562*9ccd446eSAtari911
2563*9ccd446eSAtari911**User Confidence**:
2564*9ccd446eSAtari911- Backup succeeds = complete backup
2565*9ccd446eSAtari911- Backup fails = clear error message
2566*9ccd446eSAtari911- No ambiguity
2567*9ccd446eSAtari911
2568*9ccd446eSAtari911### Example Scenarios
2569*9ccd446eSAtari911
2570*9ccd446eSAtari911**Scenario 1: Permission Issue**
2571*9ccd446eSAtari911```
2572*9ccd446eSAtari911User uploads new version
2573*9ccd446eSAtari911System starts backup
2574*9ccd446eSAtari911Error: "Directory is not readable: /lib/plugins/calendar/"
2575*9ccd446eSAtari911Backup fails before creating file
2576*9ccd446eSAtari911User sees clear error message
2577*9ccd446eSAtari911```
2578*9ccd446eSAtari911
2579*9ccd446eSAtari911**Scenario 2: Partial Backup**
2580*9ccd446eSAtari911```
2581*9ccd446eSAtari911User uploads new version
2582*9ccd446eSAtari911System creates backup
2583*9ccd446eSAtari911Only 5 files added (disk issue?)
2584*9ccd446eSAtari911Size: 450 bytes
2585*9ccd446eSAtari911Verification fails
2586*9ccd446eSAtari911Incomplete backup deleted
2587*9ccd446eSAtari911Error: "Only 5 files added (expected 30+)"
2588*9ccd446eSAtari911```
2589*9ccd446eSAtari911
2590*9ccd446eSAtari911**Scenario 3: Success**
2591*9ccd446eSAtari911```
2592*9ccd446eSAtari911User uploads new version
2593*9ccd446eSAtari911System creates backup
2594*9ccd446eSAtari91131 files added
2595*9ccd446eSAtari911Size: 240KB
2596*9ccd446eSAtari911All verifications pass ✅
2597*9ccd446eSAtari911Update proceeds
2598*9ccd446eSAtari911```
2599*9ccd446eSAtari911
2600*9ccd446eSAtari911### Testing Recommendations
2601*9ccd446eSAtari911
2602*9ccd446eSAtari911After installing v5.1.5:
2603*9ccd446eSAtari9111. Upload a new version with backup enabled
2604*9ccd446eSAtari9112. Check for success message
2605*9ccd446eSAtari9113. Verify backup file exists in /lib/plugins/
2606*9ccd446eSAtari9114. Check backup file size (should be ~240KB)
2607*9ccd446eSAtari9115. If backup fails, read error message carefully
2608*9ccd446eSAtari911
2609*9ccd446eSAtari911**Your backups are now bulletproof!** ��
2610*9ccd446eSAtari911
2611*9ccd446eSAtari911## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED
2612*9ccd446eSAtari911
2613*9ccd446eSAtari911### ✅ Verified: Backup System Working Correctly
2614*9ccd446eSAtari911- **Verified:** addDirectoryToZip function includes all files recursively
2615*9ccd446eSAtari911- **Verified:** Backups contain all 31+ files from calendar directory
2616*9ccd446eSAtari911- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed)
2617*9ccd446eSAtari911- **Info:** Backup sizes grow slightly with each version (more code = more features!)
2618*9ccd446eSAtari911- **Result:** Backup system is working perfectly!
2619*9ccd446eSAtari911
2620*9ccd446eSAtari911### Backup System Details
2621*9ccd446eSAtari911
2622*9ccd446eSAtari911**What Gets Backed Up**:
2623*9ccd446eSAtari911- All PHP files (syntax.php, admin.php, action.php, etc.)
2624*9ccd446eSAtari911- All JavaScript files (calendar-main.js, script.js)
2625*9ccd446eSAtari911- All documentation (CHANGELOG.md, README.md, all guides)
2626*9ccd446eSAtari911- All configuration (sync_config.php)
2627*9ccd446eSAtari911- All language files
2628*9ccd446eSAtari911- All assets and resources
2629*9ccd446eSAtari911- **Everything in the calendar/ directory!**
2630*9ccd446eSAtari911
2631*9ccd446eSAtari911**Backup Size Analysis**:
2632*9ccd446eSAtari911```
2633*9ccd446eSAtari911Version 5.0.4: 233KB (normal)
2634*9ccd446eSAtari911Version 5.0.5: 234KB (normal)
2635*9ccd446eSAtari911Version 5.0.6: 235KB (normal)
2636*9ccd446eSAtari911Version 5.0.7: 236KB (normal)
2637*9ccd446eSAtari911Version 5.0.8: 237KB (normal)
2638*9ccd446eSAtari911Version 5.0.9: 237KB (normal)
2639*9ccd446eSAtari911Version 5.1.0: 238KB (normal)
2640*9ccd446eSAtari911Version 5.1.1: 238KB (normal)
2641*9ccd446eSAtari911Version 5.1.2: 240KB (normal - added AJAX features)
2642*9ccd446eSAtari911Version 5.1.3: 240KB (normal)
2643*9ccd446eSAtari911```
2644*9ccd446eSAtari911
2645*9ccd446eSAtari911**Why Sizes Grow**:
2646*9ccd446eSAtari911- More features = more code
2647*9ccd446eSAtari911- Longer CHANGELOG
2648*9ccd446eSAtari911- Additional documentation
2649*9ccd446eSAtari911- New functionality
2650*9ccd446eSAtari911- **This is expected and normal!**
2651*9ccd446eSAtari911
2652*9ccd446eSAtari911**Compression Ratio**:
2653*9ccd446eSAtari911```
2654*9ccd446eSAtari911Uncompressed: ~1.0 MB (source files)
2655*9ccd446eSAtari911Compressed:   ~240 KB (ZIP archive)
2656*9ccd446eSAtari911Ratio:        ~24% (excellent compression!)
2657*9ccd446eSAtari911```
2658*9ccd446eSAtari911
2659*9ccd446eSAtari911### Backup File Contents
2660*9ccd446eSAtari911
2661*9ccd446eSAtari911**31 Files Included**:
2662*9ccd446eSAtari911```
2663*9ccd446eSAtari911admin.php              (216KB - main admin interface)
2664*9ccd446eSAtari911syntax.php             (173KB - calendar rendering)
2665*9ccd446eSAtari911calendar-main.js       (102KB - JavaScript functionality)
2666*9ccd446eSAtari911CHANGELOG.md           (268KB - complete version history)
2667*9ccd446eSAtari911style.css              (57KB - all styling)
2668*9ccd446eSAtari911action.php             (38KB - DokuWiki actions)
2669*9ccd446eSAtari911sync_outlook.php       (32KB - Outlook integration)
2670*9ccd446eSAtari911+ 24 other files (docs, configs, helpers)
2671*9ccd446eSAtari911```
2672*9ccd446eSAtari911
2673*9ccd446eSAtari911**All files successfully included!** ✅
2674*9ccd446eSAtari911
2675*9ccd446eSAtari911### How Backups Work
2676*9ccd446eSAtari911
2677*9ccd446eSAtari911**Creation Process**:
2678*9ccd446eSAtari9111. User uploads new plugin version
2679*9ccd446eSAtari9112. Checkbox "Create backup first" (checked by default)
2680*9ccd446eSAtari9113. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip`
2681*9ccd446eSAtari9114. Backup saved to: `/lib/plugins/` directory
2682*9ccd446eSAtari9115. Then proceeds with update
2683*9ccd446eSAtari911
2684*9ccd446eSAtari911**Backup Function**:
2685*9ccd446eSAtari911```php
2686*9ccd446eSAtari911private function addDirectoryToZip($zip, $dir, $zipPath = '') {
2687*9ccd446eSAtari911    $files = new RecursiveIteratorIterator(
2688*9ccd446eSAtari911        new RecursiveDirectoryIterator($dir),
2689*9ccd446eSAtari911        RecursiveIteratorIterator::LEAVES_ONLY
2690*9ccd446eSAtari911    );
2691*9ccd446eSAtari911    foreach ($files as $file) {
2692*9ccd446eSAtari911        if (!$file->isDir()) {
2693*9ccd446eSAtari911            $zip->addFile($filePath, $relativePath);
2694*9ccd446eSAtari911        }
2695*9ccd446eSAtari911    }
2696*9ccd446eSAtari911}
2697*9ccd446eSAtari911```
2698*9ccd446eSAtari911
2699*9ccd446eSAtari911**Recursive = Gets Everything!** ✅
2700*9ccd446eSAtari911
2701*9ccd446eSAtari911### Verification Results
2702*9ccd446eSAtari911
2703*9ccd446eSAtari911**Test Results**:
2704*9ccd446eSAtari911- ✅ All 31 files present in zip
2705*9ccd446eSAtari911- ✅ All subdirectories included (lang/en/)
2706*9ccd446eSAtari911- ✅ File sizes match originals
2707*9ccd446eSAtari911- ✅ Compression works properly
2708*9ccd446eSAtari911- ✅ No files missing
2709*9ccd446eSAtari911- ✅ Backup can be restored
2710*9ccd446eSAtari911
2711*9ccd446eSAtari911**File Count**:
2712*9ccd446eSAtari911```
2713*9ccd446eSAtari911Source directory: 31 files
2714*9ccd446eSAtari911Backup ZIP:       34 items (31 files + 3 directories)
2715*9ccd446eSAtari911Status:           COMPLETE ✅
2716*9ccd446eSAtari911```
2717*9ccd446eSAtari911
2718*9ccd446eSAtari911### Backup Best Practices
2719*9ccd446eSAtari911
2720*9ccd446eSAtari911**Always enabled by default** ✅
2721*9ccd446eSAtari911**Stored in accessible location** ✅
2722*9ccd446eSAtari911**Timestamped filenames** ✅
2723*9ccd446eSAtari911**Complete directory backup** ✅
2724*9ccd446eSAtari911**Easy to restore** ✅
2725*9ccd446eSAtari911
2726*9ccd446eSAtari911### Conclusion
2727*9ccd446eSAtari911
2728*9ccd446eSAtari911The backup system is working perfectly. The file sizes are appropriate and expected:
2729*9ccd446eSAtari911- Compressed size: ~240KB (good compression)
2730*9ccd446eSAtari911- Uncompressed size: ~1MB (all source files)
2731*9ccd446eSAtari911- All files included: YES ✅
2732*9ccd446eSAtari911- Growing size over versions: Normal (more features!)
2733*9ccd446eSAtari911
2734*9ccd446eSAtari911**Your backups are complete and reliable!** ��
2735*9ccd446eSAtari911
2736*9ccd446eSAtari911## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR
2737*9ccd446eSAtari911
2738*9ccd446eSAtari911### �� Fixed: JavaScript Syntax Error in AJAX Function
2739*9ccd446eSAtari911- **Fixed:** ParseError on line 1947 (deleteBackup function)
2740*9ccd446eSAtari911- **Fixed:** Escaped all single quotes in JavaScript strings
2741*9ccd446eSAtari911- **Result:** AJAX backup deletion now works correctly!
2742*9ccd446eSAtari911
2743*9ccd446eSAtari911### What Was Wrong
2744*9ccd446eSAtari911
2745*9ccd446eSAtari911JavaScript inside PHP echo needs escaped quotes:
2746*9ccd446eSAtari911
2747*9ccd446eSAtari911**Before (broken)**:
2748*9ccd446eSAtari911```javascript
2749*9ccd446eSAtari911formData.append('action', 'delete_backup');  // PHP interprets quotes
2750*9ccd446eSAtari911```
2751*9ccd446eSAtari911
2752*9ccd446eSAtari911**After (fixed)**:
2753*9ccd446eSAtari911```javascript
2754*9ccd446eSAtari911formData.append(\'action\', \'delete_backup\');  // Escaped for PHP
2755*9ccd446eSAtari911```
2756*9ccd446eSAtari911
2757*9ccd446eSAtari911### All Quotes Escaped
2758*9ccd446eSAtari911
2759*9ccd446eSAtari911Fixed in deleteBackup function:
2760*9ccd446eSAtari911- ✅ FormData.append() calls
2761*9ccd446eSAtari911- ✅ fetch() URL
2762*9ccd446eSAtari911- ✅ querySelector() calls
2763*9ccd446eSAtari911- ✅ createElement() call
2764*9ccd446eSAtari911- ✅ All string literals
2765*9ccd446eSAtari911- ✅ Error messages
2766*9ccd446eSAtari911
2767*9ccd446eSAtari911**JavaScript now works!** ✓
2768*9ccd446eSAtari911
2769*9ccd446eSAtari911## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT
2770*9ccd446eSAtari911
2771*9ccd446eSAtari911### �� Improved: Update Tab Further Refined
2772*9ccd446eSAtari911- **Moved:** Important Notes to very top (above upload)
2773*9ccd446eSAtari911- **Enhanced:** Delete backup now uses AJAX (no page refresh!)
2774*9ccd446eSAtari911- **Added:** Smooth fade-out animation when deleting backups
2775*9ccd446eSAtari911- **Added:** Success message after deletion
2776*9ccd446eSAtari911- **Auto-remove:** Backup section disappears if last backup deleted
2777*9ccd446eSAtari911- **Result:** Smoother, more polished experience!
2778*9ccd446eSAtari911
2779*9ccd446eSAtari911### New Layout Order
2780*9ccd446eSAtari911
2781*9ccd446eSAtari911**Final Order (v5.1.2)**:
2782*9ccd446eSAtari911```
2783*9ccd446eSAtari9111. ⚠️ Important Notes (warnings at top)
2784*9ccd446eSAtari9112. �� Upload New Version (with Clear Cache button)
2785*9ccd446eSAtari9113. �� Current Version (info)
2786*9ccd446eSAtari9114. �� Recent Changes (changelog)
2787*9ccd446eSAtari9115. �� Available Backups (if any)
2788*9ccd446eSAtari911```
2789*9ccd446eSAtari911
2790*9ccd446eSAtari911### AJAX Backup Deletion
2791*9ccd446eSAtari911
2792*9ccd446eSAtari911**Before (v5.1.1)**:
2793*9ccd446eSAtari911- Click Delete → Page refreshes → Scroll back down
2794*9ccd446eSAtari911- Lose position on page
2795*9ccd446eSAtari911- Page reload is jarring
2796*9ccd446eSAtari911
2797*9ccd446eSAtari911**After (v5.1.2)**:
2798*9ccd446eSAtari911- Click Delete → Confirm
2799*9ccd446eSAtari911- Row fades out smoothly
2800*9ccd446eSAtari911- Row disappears
2801*9ccd446eSAtari911- Success message shows at top
2802*9ccd446eSAtari911- Success message fades after 3 seconds
2803*9ccd446eSAtari911- If last backup: entire section fades away
2804*9ccd446eSAtari911- **No page refresh!** ✓
2805*9ccd446eSAtari911
2806*9ccd446eSAtari911### Visual Flow
2807*9ccd446eSAtari911
2808*9ccd446eSAtari911**Delete Animation**:
2809*9ccd446eSAtari911```
2810*9ccd446eSAtari9111. Click ��️ Delete
2811*9ccd446eSAtari9112. Confirm dialog
2812*9ccd446eSAtari9113. Row fades out (0.3s)
2813*9ccd446eSAtari9114. Row removed
2814*9ccd446eSAtari9115. Success message appears
2815*9ccd446eSAtari9116. Message fades after 3s
2816*9ccd446eSAtari911```
2817*9ccd446eSAtari911
2818*9ccd446eSAtari911**If Last Backup**:
2819*9ccd446eSAtari911```
2820*9ccd446eSAtari9111. Delete last backup
2821*9ccd446eSAtari9112. Row fades out
2822*9ccd446eSAtari9113. Entire "Available Backups" section fades
2823*9ccd446eSAtari9114. Section removed
2824*9ccd446eSAtari9115. Clean interface ✓
2825*9ccd446eSAtari911```
2826*9ccd446eSAtari911
2827*9ccd446eSAtari911### Success Message
2828*9ccd446eSAtari911
2829*9ccd446eSAtari911After deleting:
2830*9ccd446eSAtari911```
2831*9ccd446eSAtari911┌──────────────────────────────┐
2832*9ccd446eSAtari911│ ✓ Backup deleted: filename   │ ← Appears at top
2833*9ccd446eSAtari911└──────────────────────────────┘
2834*9ccd446eSAtari911   Fades after 3 seconds
2835*9ccd446eSAtari911```
2836*9ccd446eSAtari911
2837*9ccd446eSAtari911### Benefits
2838*9ccd446eSAtari911
2839*9ccd446eSAtari911**Important Notes First**:
2840*9ccd446eSAtari911- Warnings before actions ✓
2841*9ccd446eSAtari911- Read before uploading ✓
2842*9ccd446eSAtari911- Clear expectations ✓
2843*9ccd446eSAtari911
2844*9ccd446eSAtari911**AJAX Deletion**:
2845*9ccd446eSAtari911- No page refresh ✓
2846*9ccd446eSAtari911- Smooth animations ✓
2847*9ccd446eSAtari911- Stay in context ✓
2848*9ccd446eSAtari911- Professional feel ✓
2849*9ccd446eSAtari911
2850*9ccd446eSAtari911**Auto-Cleanup**:
2851*9ccd446eSAtari911- Empty list disappears ✓
2852*9ccd446eSAtari911- Clean interface ✓
2853*9ccd446eSAtari911- No clutter ✓
2854*9ccd446eSAtari911
2855*9ccd446eSAtari911### Technical Implementation
2856*9ccd446eSAtari911
2857*9ccd446eSAtari911**AJAX Request**:
2858*9ccd446eSAtari911```javascript
2859*9ccd446eSAtari911fetch('?do=admin&page=calendar&tab=update', {
2860*9ccd446eSAtari911    method: 'POST',
2861*9ccd446eSAtari911    body: formData
2862*9ccd446eSAtari911})
2863*9ccd446eSAtari911```
2864*9ccd446eSAtari911
2865*9ccd446eSAtari911**DOM Manipulation**:
2866*9ccd446eSAtari911- Fade out row
2867*9ccd446eSAtari911- Remove element
2868*9ccd446eSAtari911- Show success
2869*9ccd446eSAtari911- Remove section if empty
2870*9ccd446eSAtari911
2871*9ccd446eSAtari911**Smooth Transitions**:
2872*9ccd446eSAtari911- 300ms fade animations
2873*9ccd446eSAtari911- Clean visual feedback
2874*9ccd446eSAtari911- Professional polish
2875*9ccd446eSAtari911
2876*9ccd446eSAtari911## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB
2877*9ccd446eSAtari911
2878*9ccd446eSAtari911### �� Improved: Update Tab Layout Reorganized
2879*9ccd446eSAtari911- **Moved:** Upload section to the top of the page
2880*9ccd446eSAtari911- **Added:** Clear Cache button next to Upload & Install button
2881*9ccd446eSAtari911- **Changed:** "Current Version" section moved below upload
2882*9ccd446eSAtari911- **Result:** Better workflow - upload first, then see version info!
2883*9ccd446eSAtari911
2884*9ccd446eSAtari911### New Layout Order
2885*9ccd446eSAtari911
2886*9ccd446eSAtari911**Before (v5.1.0)**:
2887*9ccd446eSAtari911```
2888*9ccd446eSAtari9111. Clear Cache (standalone)
2889*9ccd446eSAtari9112. Current Version
2890*9ccd446eSAtari9113. Recent Changes
2891*9ccd446eSAtari9114. Upload New Version
2892*9ccd446eSAtari9115. Warning Box
2893*9ccd446eSAtari9116. Backups
2894*9ccd446eSAtari911```
2895*9ccd446eSAtari911
2896*9ccd446eSAtari911**After (v5.1.1)**:
2897*9ccd446eSAtari911```
2898*9ccd446eSAtari9111. Upload New Version (with Clear Cache button side-by-side)
2899*9ccd446eSAtari9112. Warning Box
2900*9ccd446eSAtari9113. Current Version
2901*9ccd446eSAtari9114. Recent Changes
2902*9ccd446eSAtari9115. Backups
2903*9ccd446eSAtari911```
2904*9ccd446eSAtari911
2905*9ccd446eSAtari911### Visual Result
2906*9ccd446eSAtari911
2907*9ccd446eSAtari911**Top of Update Tab**:
2908*9ccd446eSAtari911```
2909*9ccd446eSAtari911┌─────────────────────────────────┐
2910*9ccd446eSAtari911│ �� Upload New Version           │
2911*9ccd446eSAtari911│ ┌─────────────────────────────┐ │
2912*9ccd446eSAtari911│ │ [Choose File]               │ │
2913*9ccd446eSAtari911│ │ ☑ Create backup first       │ │
2914*9ccd446eSAtari911│ │ ┌──────────────┬──────────┐ │ │
2915*9ccd446eSAtari911│ │ │�� Upload &   │��️ Clear  │ │ │
2916*9ccd446eSAtari911│ │ │   Install    │   Cache  │ │ │
2917*9ccd446eSAtari911│ │ └──────────────┴──────────┘ │ │
2918*9ccd446eSAtari911│ └─────────────────────────────┘ │
2919*9ccd446eSAtari911│                                 │
2920*9ccd446eSAtari911│ ⚠️ Important Notes              │
2921*9ccd446eSAtari911│ • Will replace all files        │
2922*9ccd446eSAtari911│ • Config preserved              │
2923*9ccd446eSAtari911│                                 │
2924*9ccd446eSAtari911│ �� Current Version              │
2925*9ccd446eSAtari911│ Version: 5.1.1                  │
2926*9ccd446eSAtari911└─────────────────────────────────┘
2927*9ccd446eSAtari911```
2928*9ccd446eSAtari911
2929*9ccd446eSAtari911### Benefits
2930*9ccd446eSAtari911
2931*9ccd446eSAtari911**Better Workflow**:
2932*9ccd446eSAtari911- Primary action (upload) is first
2933*9ccd446eSAtari911- Clear cache conveniently next to install
2934*9ccd446eSAtari911- No scrolling to find upload button
2935*9ccd446eSAtari911- Logical top-to-bottom flow
2936*9ccd446eSAtari911
2937*9ccd446eSAtari911**Side-by-Side Buttons**:
2938*9ccd446eSAtari911- Upload & Install (green)
2939*9ccd446eSAtari911- Clear Cache (orange)
2940*9ccd446eSAtari911- Both common actions together
2941*9ccd446eSAtari911- Easy to access after upload
2942*9ccd446eSAtari911
2943*9ccd446eSAtari911**Improved UX**:
2944*9ccd446eSAtari911- Upload is most important → now at top
2945*9ccd446eSAtari911- Version info is reference → moved down
2946*9ccd446eSAtari911- Related actions grouped
2947*9ccd446eSAtari911- Cleaner organization
2948*9ccd446eSAtari911
2949*9ccd446eSAtari911### Button Layout
2950*9ccd446eSAtari911
2951*9ccd446eSAtari911```
2952*9ccd446eSAtari911┌──────────────────┬──────────────┐
2953*9ccd446eSAtari911│ �� Upload &      │ ��️ Clear     │
2954*9ccd446eSAtari911│    Install       │    Cache     │
2955*9ccd446eSAtari911│ (Green)          │ (Orange)     │
2956*9ccd446eSAtari911└──────────────────┴──────────────┘
2957*9ccd446eSAtari911```
2958*9ccd446eSAtari911
2959*9ccd446eSAtari911**Green = Primary Action**
2960*9ccd446eSAtari911**Orange = Secondary Action**
2961*9ccd446eSAtari911
2962*9ccd446eSAtari911Both easily accessible!
2963*9ccd446eSAtari911
2964*9ccd446eSAtari911## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND
2965*9ccd446eSAtari911
2966*9ccd446eSAtari911### �� Changed: Admin Section Backgrounds Now Use __background__
2967*9ccd446eSAtari911- **Changed:** All section boxes now use `__background__` instead of `__background_alt__`
2968*9ccd446eSAtari911- **Result:** Cleaner, more unified admin interface!
2969*9ccd446eSAtari911
2970*9ccd446eSAtari911### Background Usage Update
2971*9ccd446eSAtari911
2972*9ccd446eSAtari911**Before (v5.0.9)**:
2973*9ccd446eSAtari911```php
2974*9ccd446eSAtari911Section boxes: bg_alt (__background_alt__)
2975*9ccd446eSAtari911Content areas: bg (__background__)
2976*9ccd446eSAtari911```
2977*9ccd446eSAtari911
2978*9ccd446eSAtari911**After (v5.1.0)**:
2979*9ccd446eSAtari911```php
2980*9ccd446eSAtari911Section boxes: bg (__background__)
2981*9ccd446eSAtari911Content areas: bg (__background__)
2982*9ccd446eSAtari911```
2983*9ccd446eSAtari911
2984*9ccd446eSAtari911### Why This Change?
2985*9ccd446eSAtari911
2986*9ccd446eSAtari911**More unified appearance**:
2987*9ccd446eSAtari911- Sections and content use same background
2988*9ccd446eSAtari911- Creates cleaner, more cohesive look
2989*9ccd446eSAtari911- Borders provide visual separation
2990*9ccd446eSAtari911- Matches typical admin UI patterns
2991*9ccd446eSAtari911
2992*9ccd446eSAtari911**Template color hierarchy**:
2993*9ccd446eSAtari911```
2994*9ccd446eSAtari911__background_site__ → Outer page wrapper
2995*9ccd446eSAtari911__background__      → Content & sections (BOTH now use this)
2996*9ccd446eSAtari911__background_alt__  → Reserved for special panels/highlights
2997*9ccd446eSAtari911__background_neu__  → Special highlights
2998*9ccd446eSAtari911```
2999*9ccd446eSAtari911
3000*9ccd446eSAtari911### Visual Result
3001*9ccd446eSAtari911
3002*9ccd446eSAtari911**Light Template**:
3003*9ccd446eSAtari911```ini
3004*9ccd446eSAtari911__background__ = "#ffffff"
3005*9ccd446eSAtari911__background_alt__ = "#e8e8e8"
3006*9ccd446eSAtari911```
3007*9ccd446eSAtari911
3008*9ccd446eSAtari911**Before**:
3009*9ccd446eSAtari911```
3010*9ccd446eSAtari911Admin Page:
3011*9ccd446eSAtari911┌─────────────────────┐
3012*9ccd446eSAtari911│ ┌─────────────────┐ │
3013*9ccd446eSAtari911│ │ Section Box     │ │ ← Gray (#e8e8e8)
3014*9ccd446eSAtari911│ │ ┌─────────────┐ │ │
3015*9ccd446eSAtari911│ │ │ Content     │ │ │ ← White (#fff)
3016*9ccd446eSAtari911│ │ └─────────────┘ │ │
3017*9ccd446eSAtari911│ └─────────────────┘ │
3018*9ccd446eSAtari911└─────────────────────┘
3019*9ccd446eSAtari911Two-tone appearance
3020*9ccd446eSAtari911```
3021*9ccd446eSAtari911
3022*9ccd446eSAtari911**After**:
3023*9ccd446eSAtari911```
3024*9ccd446eSAtari911Admin Page:
3025*9ccd446eSAtari911┌─────────────────────┐
3026*9ccd446eSAtari911│ ┌─────────────────┐ │
3027*9ccd446eSAtari911│ │ Section Box     │ │ ← White (#fff)
3028*9ccd446eSAtari911│ │ ┌─────────────┐ │ │
3029*9ccd446eSAtari911│ │ │ Content     │ │ │ ← White (#fff)
3030*9ccd446eSAtari911│ │ └─────────────┘ │ │
3031*9ccd446eSAtari911│ └─────────────────┘ │
3032*9ccd446eSAtari911└─────────────────────┘
3033*9ccd446eSAtari911Unified, clean appearance
3034*9ccd446eSAtari911Borders provide separation
3035*9ccd446eSAtari911```
3036*9ccd446eSAtari911
3037*9ccd446eSAtari911**Dark Template**:
3038*9ccd446eSAtari911```ini
3039*9ccd446eSAtari911__background__ = "#2d2d2d"
3040*9ccd446eSAtari911__background_alt__ = "#3a3a3a"
3041*9ccd446eSAtari911```
3042*9ccd446eSAtari911
3043*9ccd446eSAtari911**After**:
3044*9ccd446eSAtari911```
3045*9ccd446eSAtari911Admin Page:
3046*9ccd446eSAtari911┌─────────────────────┐
3047*9ccd446eSAtari911│ ┌─────────────────┐ │
3048*9ccd446eSAtari911│ │ Section Box     │ │ ← Dark (#2d2d2d)
3049*9ccd446eSAtari911│ │ ┌─────────────┐ │ │
3050*9ccd446eSAtari911│ │ │ Content     │ │ │ ← Dark (#2d2d2d)
3051*9ccd446eSAtari911│ │ └─────────────┘ │ │
3052*9ccd446eSAtari911│ └─────────────────┘ │
3053*9ccd446eSAtari911└─────────────────────┘
3054*9ccd446eSAtari911Unified dark appearance
3055*9ccd446eSAtari911Accent borders provide definition
3056*9ccd446eSAtari911```
3057*9ccd446eSAtari911
3058*9ccd446eSAtari911### Benefits
3059*9ccd446eSAtari911
3060*9ccd446eSAtari911**Cleaner Look**:
3061*9ccd446eSAtari911- No more alternating gray/white
3062*9ccd446eSAtari911- More professional appearance
3063*9ccd446eSAtari911- Less visual noise
3064*9ccd446eSAtari911- Unified color scheme
3065*9ccd446eSAtari911
3066*9ccd446eSAtari911**Better Consistency**:
3067*9ccd446eSAtari911- Matches modern admin UI patterns
3068*9ccd446eSAtari911- Borders define sections, not colors
3069*9ccd446eSAtari911- Simpler, cleaner design
3070*9ccd446eSAtari911- Easier on the eyes
3071*9ccd446eSAtari911
3072*9ccd446eSAtari911**Template Friendly**:
3073*9ccd446eSAtari911- Works with any background color
3074*9ccd446eSAtari911- Light or dark templates
3075*9ccd446eSAtari911- Custom colors
3076*9ccd446eSAtari911- Always looks cohesive
3077*9ccd446eSAtari911
3078*9ccd446eSAtari911### All Sections Updated
3079*9ccd446eSAtari911
3080*9ccd446eSAtari911✅ Outlook Sync config sections
3081*9ccd446eSAtari911✅ Manage Events sections
3082*9ccd446eSAtari911✅ Update Plugin sections
3083*9ccd446eSAtari911✅ Themes tab sections
3084*9ccd446eSAtari911✅ Week start day section
3085*9ccd446eSAtari911✅ All form sections
3086*9ccd446eSAtari911
3087*9ccd446eSAtari911**Complete unified theming!** ��
3088*9ccd446eSAtari911
3089*9ccd446eSAtari911## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB
3090*9ccd446eSAtari911
3091*9ccd446eSAtari911### �� Fixed: Syntax Error in Theme Cards
3092*9ccd446eSAtari911- **Fixed:** ParseError on line 4461 (Purple theme card)
3093*9ccd446eSAtari911- **Fixed:** Malformed ternary expressions from sed replacement
3094*9ccd446eSAtari911- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki)
3095*9ccd446eSAtari911- **Result:** Admin pages work correctly!
3096*9ccd446eSAtari911
3097*9ccd446eSAtari911### What Was Wrong
3098*9ccd446eSAtari911
3099*9ccd446eSAtari911The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions:
3100*9ccd446eSAtari911
3101*9ccd446eSAtari911**Before (broken)**:
3102*9ccd446eSAtari911```php
3103*9ccd446eSAtari911? '#9b59b6' : ' . $colors['border'] . ')
3104*9ccd446eSAtari911// Extra quote and dot created syntax error
3105*9ccd446eSAtari911```
3106*9ccd446eSAtari911
3107*9ccd446eSAtari911**After (fixed)**:
3108*9ccd446eSAtari911```php
3109*9ccd446eSAtari911? '#9b59b6' : $colors['border'])
3110*9ccd446eSAtari911// Clean ternary expression
3111*9ccd446eSAtari911```
3112*9ccd446eSAtari911
3113*9ccd446eSAtari911### All Theme Cards Fixed
3114*9ccd446eSAtari911
3115*9ccd446eSAtari911- ✅ Purple Dream card
3116*9ccd446eSAtari911- ✅ Professional Blue card
3117*9ccd446eSAtari911- ✅ Pink Bling card
3118*9ccd446eSAtari911- ✅ Wiki Default card
3119*9ccd446eSAtari911
3120*9ccd446eSAtari911### Now Working
3121*9ccd446eSAtari911
3122*9ccd446eSAtari911**Theme selection page loads** ✓
3123*9ccd446eSAtari911**All cards display properly** ✓
3124*9ccd446eSAtari911**Template colors applied** ✓
3125*9ccd446eSAtari911**No syntax errors** ✓
3126*9ccd446eSAtari911
3127*9ccd446eSAtari911## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING
3128*9ccd446eSAtari911
3129*9ccd446eSAtari911### �� Fixed: Themes Tab Backgrounds & Correct Template Color Mapping
3130*9ccd446eSAtari911- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites)
3131*9ccd446eSAtari911- **Fixed:** Main background now uses `__background__` instead of `__background_site__`
3132*9ccd446eSAtari911- **Fixed:** Theme selection cards use template backgrounds
3133*9ccd446eSAtari911- **Fixed:** Week start options use template backgrounds
3134*9ccd446eSAtari911- **Result:** Perfect color mapping throughout admin!
3135*9ccd446eSAtari911
3136*9ccd446eSAtari911### Color Mapping Correction
3137*9ccd446eSAtari911
3138*9ccd446eSAtari911**Before (v5.0.7)**:
3139*9ccd446eSAtari911```php
3140*9ccd446eSAtari911bg: __background_site__  // Wrong - this is outer page bg
3141*9ccd446eSAtari911bg_alt: __background_alt__
3142*9ccd446eSAtari911```
3143*9ccd446eSAtari911
3144*9ccd446eSAtari911**After (v5.0.8)**:
3145*9ccd446eSAtari911```php
3146*9ccd446eSAtari911bg: __background__       // Correct - main content bg
3147*9ccd446eSAtari911bg_alt: __background_alt__
3148*9ccd446eSAtari911```
3149*9ccd446eSAtari911
3150*9ccd446eSAtari911### Why This Matters
3151*9ccd446eSAtari911
3152*9ccd446eSAtari911**Template color hierarchy**:
3153*9ccd446eSAtari911```
3154*9ccd446eSAtari911__background_site__ → Outer page/site background
3155*9ccd446eSAtari911__background__      → Main content area (CORRECT for admin)
3156*9ccd446eSAtari911__background_alt__  → Sections/panels
3157*9ccd446eSAtari911__background_neu__  → Highlights
3158*9ccd446eSAtari911```
3159*9ccd446eSAtari911
3160*9ccd446eSAtari911**Admin should use**:
3161*9ccd446eSAtari911- `__background__` for input fields, content areas
3162*9ccd446eSAtari911- `__background_alt__` for section boxes, panels
3163*9ccd446eSAtari911
3164*9ccd446eSAtari911### Themes Tab Fixed
3165*9ccd446eSAtari911
3166*9ccd446eSAtari911**Removed all hardcoded colors**:
3167*9ccd446eSAtari911```php
3168*9ccd446eSAtari911Before: '#ddd', '#fff', '#dee2e6'
3169*9ccd446eSAtari911After:  $colors['border'], $colors['bg'], $colors['border']
3170*9ccd446eSAtari911```
3171*9ccd446eSAtari911
3172*9ccd446eSAtari911**Now themed**:
3173*9ccd446eSAtari911- ✅ Week start section background
3174*9ccd446eSAtari911- ✅ Week start option backgrounds
3175*9ccd446eSAtari911- ✅ Theme card backgrounds
3176*9ccd446eSAtari911- ✅ Theme card borders
3177*9ccd446eSAtari911- ✅ All borders throughout
3178*9ccd446eSAtari911
3179*9ccd446eSAtari911### Visual Result
3180*9ccd446eSAtari911
3181*9ccd446eSAtari911**Light Template**:
3182*9ccd446eSAtari911```ini
3183*9ccd446eSAtari911__background__ = "#ffffff"
3184*9ccd446eSAtari911__background_alt__ = "#e8e8e8"
3185*9ccd446eSAtari911```
3186*9ccd446eSAtari911
3187*9ccd446eSAtari911**Admin Before (v5.0.7)**:
3188*9ccd446eSAtari911```
3189*9ccd446eSAtari911Input fields: #f5f5f5 (site bg - wrong)
3190*9ccd446eSAtari911Sections: #e8e8e8 (alt bg - correct)
3191*9ccd446eSAtari911```
3192*9ccd446eSAtari911
3193*9ccd446eSAtari911**Admin After (v5.0.8)**:
3194*9ccd446eSAtari911```
3195*9ccd446eSAtari911Input fields: #ffffff (content bg - correct!)
3196*9ccd446eSAtari911Sections: #e8e8e8 (alt bg - correct!)
3197*9ccd446eSAtari911```
3198*9ccd446eSAtari911
3199*9ccd446eSAtari911**Dark Template**:
3200*9ccd446eSAtari911```ini
3201*9ccd446eSAtari911__background__ = "#2d2d2d"
3202*9ccd446eSAtari911__background_alt__ = "#3a3a3a"
3203*9ccd446eSAtari911```
3204*9ccd446eSAtari911
3205*9ccd446eSAtari911**Admin After (v5.0.8)**:
3206*9ccd446eSAtari911```
3207*9ccd446eSAtari911Input fields: #2d2d2d (content bg - perfect!)
3208*9ccd446eSAtari911Sections: #3a3a3a (alt bg - perfect!)
3209*9ccd446eSAtari911```
3210*9ccd446eSAtari911
3211*9ccd446eSAtari911### Complete Themes Tab
3212*9ccd446eSAtari911
3213*9ccd446eSAtari911**Week Start Options**:
3214*9ccd446eSAtari911```
3215*9ccd446eSAtari911┌─────────────────────────┐
3216*9ccd446eSAtari911│ �� Week Start Day       │ ← bg_alt
3217*9ccd446eSAtari911│ ┌─────────┬───────────┐ │
3218*9ccd446eSAtari911│ │ Monday  │ Sunday    │ │ ← bg (when not selected)
3219*9ccd446eSAtari911│ └─────────┴───────────┘ │
3220*9ccd446eSAtari911└─────────────────────────┘
3221*9ccd446eSAtari911```
3222*9ccd446eSAtari911
3223*9ccd446eSAtari911**Theme Cards**:
3224*9ccd446eSAtari911```
3225*9ccd446eSAtari911┌─────────────────────────┐
3226*9ccd446eSAtari911│ �� Matrix Edition       │ ← bg (when not selected)
3227*9ccd446eSAtari911│ Classic green theme     │   border (when not selected)
3228*9ccd446eSAtari911└─────────────────────────┘
3229*9ccd446eSAtari911
3230*9ccd446eSAtari911┌═════════════════════════┐
3231*9ccd446eSAtari911│ �� Purple Dream         │ ← rgba green tint (when selected)
3232*9ccd446eSAtari911│ Elegant purple theme    │   #00cc07 border (when selected)
3233*9ccd446eSAtari911└═════════════════════════┘
3234*9ccd446eSAtari911```
3235*9ccd446eSAtari911
3236*9ccd446eSAtari911### Perfect Integration
3237*9ccd446eSAtari911
3238*9ccd446eSAtari911**All admin pages now**:
3239*9ccd446eSAtari911- Content areas: `__background__` ✓
3240*9ccd446eSAtari911- Section boxes: `__background_alt__` ✓
3241*9ccd446eSAtari911- Borders: `__border__` ✓
3242*9ccd446eSAtari911- Text: `__text__` ✓
3243*9ccd446eSAtari911
3244*9ccd446eSAtari911**Matches wiki perfectly**:
3245*9ccd446eSAtari911- Same white content areas
3246*9ccd446eSAtari911- Same gray section boxes
3247*9ccd446eSAtari911- Same border colors
3248*9ccd446eSAtari911- Same text colors
3249*9ccd446eSAtari911
3250*9ccd446eSAtari911### No More Issues
3251*9ccd446eSAtari911
3252*9ccd446eSAtari911**Fixed**:
3253*9ccd446eSAtari911- ❌ Site background on content areas → ✅ Content background
3254*9ccd446eSAtari911- ❌ Hardcoded white on themes tab → ✅ Template background
3255*9ccd446eSAtari911- ❌ Hardcoded borders (#ddd) → ✅ Template borders
3256*9ccd446eSAtari911
3257*9ccd446eSAtari911**Result**:
3258*9ccd446eSAtari911- Perfect color hierarchy ✓
3259*9ccd446eSAtari911- Correct background levels ✓
3260*9ccd446eSAtari911- Complete template integration ✓
3261*9ccd446eSAtari911
3262*9ccd446eSAtari911## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING
3263*9ccd446eSAtari911
3264*9ccd446eSAtari911### �� Fixed: All Admin Backgrounds Use Template Colors
3265*9ccd446eSAtari911- **Fixed:** All section backgrounds use `__background_alt__`
3266*9ccd446eSAtari911- **Fixed:** All content backgrounds use `__background__`
3267*9ccd446eSAtari911- **Fixed:** All borders use `__border__`
3268*9ccd446eSAtari911- **Fixed:** All text uses `__text__`
3269*9ccd446eSAtari911- **Result:** Complete admin template integration!
3270*9ccd446eSAtari911
3271*9ccd446eSAtari911### All Replacements
3272*9ccd446eSAtari911
3273*9ccd446eSAtari911**Backgrounds**:
3274*9ccd446eSAtari911```php
3275*9ccd446eSAtari911Before: background: #f9f9f9
3276*9ccd446eSAtari911After:  background: ' . $colors['bg_alt'] . '
3277*9ccd446eSAtari911
3278*9ccd446eSAtari911Before: background: #fff / background: white
3279*9ccd446eSAtari911After:  background: ' . $colors['bg'] . '
3280*9ccd446eSAtari911```
3281*9ccd446eSAtari911
3282*9ccd446eSAtari911**Borders**:
3283*9ccd446eSAtari911```php
3284*9ccd446eSAtari911Before: border: 1px solid #ddd
3285*9ccd446eSAtari911Before: border: 1px solid #e0e0e0
3286*9ccd446eSAtari911Before: border: 1px solid #eee
3287*9ccd446eSAtari911After:  border: 1px solid ' . $colors['border'] . '
3288*9ccd446eSAtari911```
3289*9ccd446eSAtari911
3290*9ccd446eSAtari911**Text**:
3291*9ccd446eSAtari911```php
3292*9ccd446eSAtari911Before: color: #333
3293*9ccd446eSAtari911Before: color: #666
3294*9ccd446eSAtari911After:  color: ' . $colors['text'] . '
3295*9ccd446eSAtari911```
3296*9ccd446eSAtari911
3297*9ccd446eSAtari911### Complete Admin Coverage
3298*9ccd446eSAtari911
3299*9ccd446eSAtari911**All tabs now themed**:
3300*9ccd446eSAtari911- ✅ Manage Events tab
3301*9ccd446eSAtari911- ✅ Update Plugin tab
3302*9ccd446eSAtari911- ✅ Outlook Sync tab
3303*9ccd446eSAtari911- ✅ Themes tab
3304*9ccd446eSAtari911- ✅ Tab navigation
3305*9ccd446eSAtari911- ✅ All sections
3306*9ccd446eSAtari911- ✅ All inputs
3307*9ccd446eSAtari911- ✅ All borders
3308*9ccd446eSAtari911- ✅ All text
3309*9ccd446eSAtari911
3310*9ccd446eSAtari911### Visual Result
3311*9ccd446eSAtari911
3312*9ccd446eSAtari911**Light Template**:
3313*9ccd446eSAtari911```
3314*9ccd446eSAtari911Admin Page:
3315*9ccd446eSAtari911┌──────────────────────────┐
3316*9ccd446eSAtari911│ Tab Navigation           │ ← Template borders
3317*9ccd446eSAtari911├──────────────────────────┤
3318*9ccd446eSAtari911│ Section Headers          │ ← bg_alt (light gray)
3319*9ccd446eSAtari911│ ┌──────────────────────┐ │
3320*9ccd446eSAtari911│ │ Form Inputs          │ │ ← bg (white)
3321*9ccd446eSAtari911│ │ Content Areas        │ │
3322*9ccd446eSAtari911│ └──────────────────────┘ │
3323*9ccd446eSAtari911└──────────────────────────┘
3324*9ccd446eSAtari911All template colors! ✓
3325*9ccd446eSAtari911```
3326*9ccd446eSAtari911
3327*9ccd446eSAtari911**Dark Template**:
3328*9ccd446eSAtari911```
3329*9ccd446eSAtari911Admin Page:
3330*9ccd446eSAtari911┌──────────────────────────┐
3331*9ccd446eSAtari911│ Tab Navigation           │ ← Template borders
3332*9ccd446eSAtari911├──────────────────────────┤
3333*9ccd446eSAtari911│ Section Headers          │ ← bg_alt (dark gray)
3334*9ccd446eSAtari911│ ┌──────────────────────┐ │
3335*9ccd446eSAtari911│ │ Form Inputs          │ │ ← bg (darker)
3336*9ccd446eSAtari911│ │ Content Areas        │ │
3337*9ccd446eSAtari911│ └──────────────────────┘ │
3338*9ccd446eSAtari911└──────────────────────────┘
3339*9ccd446eSAtari911All template colors! ✓
3340*9ccd446eSAtari911```
3341*9ccd446eSAtari911
3342*9ccd446eSAtari911### Template Color Mapping
3343*9ccd446eSAtari911
3344*9ccd446eSAtari911**Used throughout admin**:
3345*9ccd446eSAtari911```
3346*9ccd446eSAtari911__background_site__ → $colors['bg']       (main backgrounds)
3347*9ccd446eSAtari911__background_alt__  → $colors['bg_alt']   (section backgrounds)
3348*9ccd446eSAtari911__text__            → $colors['text']     (all text)
3349*9ccd446eSAtari911__border__          → $colors['border']   (all borders)
3350*9ccd446eSAtari911__link__            → $colors['link']     (links - future)
3351*9ccd446eSAtari911```
3352*9ccd446eSAtari911
3353*9ccd446eSAtari911### Examples by Section
3354*9ccd446eSAtari911
3355*9ccd446eSAtari911**Manage Events**:
3356*9ccd446eSAtari911- Event list backgrounds: `bg_alt`
3357*9ccd446eSAtari911- Event item backgrounds: `bg`
3358*9ccd446eSAtari911- Borders: `border`
3359*9ccd446eSAtari911- Text: `text`
3360*9ccd446eSAtari911
3361*9ccd446eSAtari911**Update Plugin**:
3362*9ccd446eSAtari911- Section backgrounds: `bg_alt`
3363*9ccd446eSAtari911- Content areas: `bg`
3364*9ccd446eSAtari911- Borders: `border`
3365*9ccd446eSAtari911- Text: `text`
3366*9ccd446eSAtari911
3367*9ccd446eSAtari911**Outlook Sync**:
3368*9ccd446eSAtari911- Config sections: `bg_alt`
3369*9ccd446eSAtari911- Input fields: `bg`
3370*9ccd446eSAtari911- Borders: `border`
3371*9ccd446eSAtari911- Labels: `text`
3372*9ccd446eSAtari911
3373*9ccd446eSAtari911**Themes Tab**:
3374*9ccd446eSAtari911- Theme cards: `bg_alt`
3375*9ccd446eSAtari911- Preview areas: `bg`
3376*9ccd446eSAtari911- Borders: `border`
3377*9ccd446eSAtari911- Descriptions: `text`
3378*9ccd446eSAtari911
3379*9ccd446eSAtari911### Benefits
3380*9ccd446eSAtari911
3381*9ccd446eSAtari911**Seamless Integration**:
3382*9ccd446eSAtari911- Matches wiki admin area perfectly
3383*9ccd446eSAtari911- Same colors throughout wiki
3384*9ccd446eSAtari911- Professional appearance
3385*9ccd446eSAtari911- Consistent experience
3386*9ccd446eSAtari911
3387*9ccd446eSAtari911**Automatic Adaptation**:
3388*9ccd446eSAtari911- Light templates: Light admin
3389*9ccd446eSAtari911- Dark templates: Dark admin
3390*9ccd446eSAtari911- Custom templates: Uses custom colors
3391*9ccd446eSAtari911
3392*9ccd446eSAtari911**No White Boxes**:
3393*9ccd446eSAtari911- Every background themed
3394*9ccd446eSAtari911- Every border themed
3395*9ccd446eSAtari911- Every text themed
3396*9ccd446eSAtari911- Complete consistency
3397*9ccd446eSAtari911
3398*9ccd446eSAtari911### PERFECT HARMONY
3399*9ccd446eSAtari911
3400*9ccd446eSAtari911**Frontend (Calendar)**:
3401*9ccd446eSAtari911- Wiki theme uses style.ini3402*9ccd446eSAtari911- Perfect template match ✓
3403*9ccd446eSAtari911
3404*9ccd446eSAtari911**Backend (Admin)**:
3405*9ccd446eSAtari911- Reads same style.ini3406*9ccd446eSAtari911- Perfect template match ✓
3407*9ccd446eSAtari911
3408*9ccd446eSAtari911**Complete Unity**:
3409*9ccd446eSAtari911- Same colors everywhere ✓
3410*9ccd446eSAtari911- Seamless experience ✓
3411*9ccd446eSAtari911- Professional polish ✓
3412*9ccd446eSAtari911
3413*9ccd446eSAtari911## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS
3414*9ccd446eSAtari911
3415*9ccd446eSAtari911### �� Enhanced: Month/Year Header & Admin Pages Use Template Colors
3416*9ccd446eSAtari911- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme
3417*9ccd446eSAtari911- **Added:** Admin pages read template's style.ini file
3418*9ccd446eSAtari911- **Added:** `getTemplateColors()` function in admin class
3419*9ccd446eSAtari911- **Fixed:** Tab navigation uses template text and border colors
3420*9ccd446eSAtari911- **Result:** Complete template integration everywhere!
3421*9ccd446eSAtari911
3422*9ccd446eSAtari911### Month/Year Header
3423*9ccd446eSAtari911
3424*9ccd446eSAtari911**Before**:
3425*9ccd446eSAtari911```php
3426*9ccd446eSAtari911color: __text__  // Same as primary text
3427*9ccd446eSAtari911```
3428*9ccd446eSAtari911
3429*9ccd446eSAtari911**After (Wiki Theme)**:
3430*9ccd446eSAtari911```php
3431*9ccd446eSAtari911color: __text_neu__  // Dimmed text (subtle)
3432*9ccd446eSAtari911```
3433*9ccd446eSAtari911
3434*9ccd446eSAtari911### Admin Pages Enhancement
3435*9ccd446eSAtari911
3436*9ccd446eSAtari911**New `getTemplateColors()` function**:
3437*9ccd446eSAtari911- Reads template's style.ini file
3438*9ccd446eSAtari911- Extracts color replacements
3439*9ccd446eSAtari911- Provides colors to all admin tabs
3440*9ccd446eSAtari911- Falls back to sensible defaults
3441*9ccd446eSAtari911
3442*9ccd446eSAtari911**Colors used**:
3443*9ccd446eSAtari911```php
3444*9ccd446eSAtari911bg: __background_site__
3445*9ccd446eSAtari911bg_alt: __background_alt__
3446*9ccd446eSAtari911text: __text__
3447*9ccd446eSAtari911border: __border__
3448*9ccd446eSAtari911link: __link__
3449*9ccd446eSAtari911```
3450*9ccd446eSAtari911
3451*9ccd446eSAtari911**Applied to**:
3452*9ccd446eSAtari911- Tab navigation borders
3453*9ccd446eSAtari911- Tab text colors
3454*9ccd446eSAtari911- All admin sections
3455*9ccd446eSAtari911- Ready for future enhancements
3456*9ccd446eSAtari911
3457*9ccd446eSAtari911### Visual Result
3458*9ccd446eSAtari911
3459*9ccd446eSAtari911**Calendar Header**:
3460*9ccd446eSAtari911```
3461*9ccd446eSAtari911┌────────────────────┐
3462*9ccd446eSAtari911│ ‹ February 2026 › │ ← __text_neu__ (dimmed)
3463*9ccd446eSAtari911└────────────────────┘
3464*9ccd446eSAtari911Subtle and elegant ✓
3465*9ccd446eSAtari911```
3466*9ccd446eSAtari911
3467*9ccd446eSAtari911**Admin Navigation**:
3468*9ccd446eSAtari911```
3469*9ccd446eSAtari911�� Manage Events | �� Update | ⚙️ Config | �� Themes
3470*9ccd446eSAtari911─────────────────────────────────────────────────
3471*9ccd446eSAtari911Active tab: Green (#00cc07)
3472*9ccd446eSAtari911Inactive tabs: Template text color
3473*9ccd446eSAtari911Border: Template border color
3474*9ccd446eSAtari911```
3475*9ccd446eSAtari911
3476*9ccd446eSAtari911### Template Integration
3477*9ccd446eSAtari911
3478*9ccd446eSAtari911**Light Template**:
3479*9ccd446eSAtari911```ini
3480*9ccd446eSAtari911__text_neu__ = "#666666"
3481*9ccd446eSAtari911__border__ = "#cccccc"
3482*9ccd446eSAtari911```
3483*9ccd446eSAtari911**Result**:
3484*9ccd446eSAtari911- Month/Year: Medium gray (subtle)
3485*9ccd446eSAtari911- Admin borders: Light gray
3486*9ccd446eSAtari911- Tab text: Dark gray
3487*9ccd446eSAtari911
3488*9ccd446eSAtari911**Dark Template**:
3489*9ccd446eSAtari911```ini
3490*9ccd446eSAtari911__text_neu__ = "#999999"
3491*9ccd446eSAtari911__border__ = "#555555"
3492*9ccd446eSAtari911```
3493*9ccd446eSAtari911**Result**:
3494*9ccd446eSAtari911- Month/Year: Light gray (subtle)
3495*9ccd446eSAtari911- Admin borders: Medium gray
3496*9ccd446eSAtari911- Tab text: Bright gray
3497*9ccd446eSAtari911
3498*9ccd446eSAtari911### Benefits
3499*9ccd446eSAtari911
3500*9ccd446eSAtari911**Calendar Frontend**:
3501*9ccd446eSAtari911- Month/Year header more subtle
3502*9ccd446eSAtari911- Better visual hierarchy
3503*9ccd446eSAtari911- Less prominent, more elegant
3504*9ccd446eSAtari911
3505*9ccd446eSAtari911**Admin Backend**:
3506*9ccd446eSAtari911- Uses template colors
3507*9ccd446eSAtari911- Matches wiki admin area
3508*9ccd446eSAtari911- Consistent experience
3509*9ccd446eSAtari911- Professional appearance
3510*9ccd446eSAtari911
3511*9ccd446eSAtari911### Future-Ready
3512*9ccd446eSAtari911
3513*9ccd446eSAtari911The `getTemplateColors()` function is now available for:
3514*9ccd446eSAtari911- ✅ Tab navigation (implemented)
3515*9ccd446eSAtari911- �� Section backgrounds (ready)
3516*9ccd446eSAtari911- �� Button colors (ready)
3517*9ccd446eSAtari911- �� Input fields (ready)
3518*9ccd446eSAtari911- �� Success/error messages (ready)
3519*9ccd446eSAtari911
3520*9ccd446eSAtari911**Foundation laid for complete admin theming!** ��
3521*9ccd446eSAtari911
3522*9ccd446eSAtari911## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS
3523*9ccd446eSAtari911
3524*9ccd446eSAtari911### �� Fixed: Add Event Bar & Section Headers Use Template Colors
3525*9ccd446eSAtari911- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme
3526*9ccd446eSAtari911- **Fixed:** "Today" header uses `__text_neu__`
3527*9ccd446eSAtari911- **Fixed:** "Tomorrow" header uses `__text__`
3528*9ccd446eSAtari911- **Fixed:** "Important Events" header uses `__border__`
3529*9ccd446eSAtari911- **Result:** Perfect template color integration!
3530*9ccd446eSAtari911
3531*9ccd446eSAtari911### All Changes
3532*9ccd446eSAtari911
3533*9ccd446eSAtari911**Add Event Bar (Wiki Theme)**:
3534*9ccd446eSAtari911
3535*9ccd446eSAtari911**Before**:
3536*9ccd446eSAtari911```php
3537*9ccd446eSAtari911background: #3498db  // Generic blue
3538*9ccd446eSAtari911```
3539*9ccd446eSAtari911
3540*9ccd446eSAtari911**After**:
3541*9ccd446eSAtari911```php
3542*9ccd446eSAtari911background: __background_alt__  // Template alternate bg
3543*9ccd446eSAtari911text: __text__                  // Template text color
3544*9ccd446eSAtari911hover: __background_neu__       // Template neutral bg
3545*9ccd446eSAtari911```
3546*9ccd446eSAtari911
3547*9ccd446eSAtari911**Section Headers (Wiki Theme)**:
3548*9ccd446eSAtari911
3549*9ccd446eSAtari911**Before**:
3550*9ccd446eSAtari911```php
3551*9ccd446eSAtari911Today: #ff9800           // Orange
3552*9ccd446eSAtari911Tomorrow: #4caf50        // Green
3553*9ccd446eSAtari911Important Events: #9b59b6 // Purple
3554*9ccd446eSAtari911```
3555*9ccd446eSAtari911
3556*9ccd446eSAtari911**After**:
3557*9ccd446eSAtari911```php
3558*9ccd446eSAtari911Today: __text_neu__      // Template dimmed text
3559*9ccd446eSAtari911Tomorrow: __text__       // Template primary text
3560*9ccd446eSAtari911Important Events: __border__ // Template border color
3561*9ccd446eSAtari911```
3562*9ccd446eSAtari911
3563*9ccd446eSAtari911### Visual Result
3564*9ccd446eSAtari911
3565*9ccd446eSAtari911**Wiki Default Theme**:
3566*9ccd446eSAtari911```
3567*9ccd446eSAtari911Add Event Bar:
3568*9ccd446eSAtari911┌────────────────┐
3569*9ccd446eSAtari911│  + ADD EVENT   │ ← Template alt background
3570*9ccd446eSAtari911└────────────────┘
3571*9ccd446eSAtari911
3572*9ccd446eSAtari911Sections:
3573*9ccd446eSAtari911━━━━━━━━━━━━━━━━
3574*9ccd446eSAtari911Today              ← Dimmed text color (__text_neu__)
3575*9ccd446eSAtari911• Team Meeting
3576*9ccd446eSAtari911
3577*9ccd446eSAtari911Tomorrow           ← Primary text color (__text__)
3578*9ccd446eSAtari911• Code Review
3579*9ccd446eSAtari911
3580*9ccd446eSAtari911Important Events   ← Border color (__border__)
3581*9ccd446eSAtari911• Project Deadline
3582*9ccd446eSAtari911```
3583*9ccd446eSAtari911
3584*9ccd446eSAtari911### Example with DokuWiki Default Template
3585*9ccd446eSAtari911
3586*9ccd446eSAtari911**Template colors**:
3587*9ccd446eSAtari911```ini
3588*9ccd446eSAtari911__background_alt__ = "#e8e8e8"
3589*9ccd446eSAtari911__text__ = "#333333"
3590*9ccd446eSAtari911__text_neu__ = "#666666"
3591*9ccd446eSAtari911__border__ = "#cccccc"
3592*9ccd446eSAtari911```
3593*9ccd446eSAtari911
3594*9ccd446eSAtari911**Calendar result**:
3595*9ccd446eSAtari911```
3596*9ccd446eSAtari911Add Event Bar: Light gray (#e8e8e8)
3597*9ccd446eSAtari911Today header: Medium gray (#666666)
3598*9ccd446eSAtari911Tomorrow header: Dark gray (#333333)
3599*9ccd446eSAtari911Important Events header: Border gray (#cccccc)
3600*9ccd446eSAtari911```
3601*9ccd446eSAtari911
3602*9ccd446eSAtari911### Example with Dark Template
3603*9ccd446eSAtari911
3604*9ccd446eSAtari911**Template colors**:
3605*9ccd446eSAtari911```ini
3606*9ccd446eSAtari911__background_alt__ = "#2d2d2d"
3607*9ccd446eSAtari911__text__ = "#e0e0e0"
3608*9ccd446eSAtari911__text_neu__ = "#999999"
3609*9ccd446eSAtari911__border__ = "#555555"
3610*9ccd446eSAtari911```
3611*9ccd446eSAtari911
3612*9ccd446eSAtari911**Calendar result**:
3613*9ccd446eSAtari911```
3614*9ccd446eSAtari911Add Event Bar: Dark gray (#2d2d2d)
3615*9ccd446eSAtari911Today header: Light gray (#999999)
3616*9ccd446eSAtari911Tomorrow header: Bright gray (#e0e0e0)
3617*9ccd446eSAtari911Important Events header: Medium gray (#555555)
3618*9ccd446eSAtari911```
3619*9ccd446eSAtari911
3620*9ccd446eSAtari911### Perfect Harmony
3621*9ccd446eSAtari911
3622*9ccd446eSAtari911All sidebar elements now use template colors:
3623*9ccd446eSAtari911- ✅ Add Event bar background
3624*9ccd446eSAtari911- ✅ Add Event bar text
3625*9ccd446eSAtari911- ✅ Today section header
3626*9ccd446eSAtari911- ✅ Tomorrow section header
3627*9ccd446eSAtari911- ✅ Important Events header
3628*9ccd446eSAtari911- ✅ Calendar cells
3629*9ccd446eSAtari911- ✅ Grid backgrounds
3630*9ccd446eSAtari911- ✅ All borders
3631*9ccd446eSAtari911
3632*9ccd446eSAtari911**Complete template integration!** ��
3633*9ccd446eSAtari911
3634*9ccd446eSAtari911## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS
3635*9ccd446eSAtari911
3636*9ccd446eSAtari911### �� Fixed: Calendar Cells Use Correct Template Color
3637*9ccd446eSAtari911- **Fixed:** Calendar cells now use `__background__` from template
3638*9ccd446eSAtari911- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__`
3639*9ccd446eSAtari911- **Result:** Calendar cells match main content area background!
3640*9ccd446eSAtari911
3641*9ccd446eSAtari911### Color Mapping Update
3642*9ccd446eSAtari911
3643*9ccd446eSAtari911**Before (v5.0.3)**:
3644*9ccd446eSAtari911```php
3645*9ccd446eSAtari911cell_bg: __background_neu__  // Wrong - this is for neutral/alternate
3646*9ccd446eSAtari911```
3647*9ccd446eSAtari911
3648*9ccd446eSAtari911**After (v5.0.4)**:
3649*9ccd446eSAtari911```php
3650*9ccd446eSAtari911cell_bg: __background__      // Correct - main content background
3651*9ccd446eSAtari911```
3652*9ccd446eSAtari911
3653*9ccd446eSAtari911### Template Color Usage
3654*9ccd446eSAtari911
3655*9ccd446eSAtari911**Wiki Default theme now uses**:
3656*9ccd446eSAtari911```
3657*9ccd446eSAtari911__background_site__ → Overall page background
3658*9ccd446eSAtari911__background__      → Calendar cells (main content bg)
3659*9ccd446eSAtari911__background_alt__  → Grid background, headers
3660*9ccd446eSAtari911__background_neu__  → Today cell highlight
3661*9ccd446eSAtari911__text__            → Primary text
3662*9ccd446eSAtari911__text_neu__        → Dimmed text
3663*9ccd446eSAtari911__link__            → Links, bright text
3664*9ccd446eSAtari911__border__          → All borders
3665*9ccd446eSAtari911```
3666*9ccd446eSAtari911
3667*9ccd446eSAtari911### Visual Result
3668*9ccd446eSAtari911
3669*9ccd446eSAtari911**Before**:
3670*9ccd446eSAtari911```
3671*9ccd446eSAtari911Calendar with template colors:
3672*9ccd446eSAtari911┌─────┬─────┬─────┐
3673*9ccd446eSAtari911│ Mon │ Tue │ Wed │
3674*9ccd446eSAtari911├─────┼─────┼─────┤
3675*9ccd446eSAtari911│  8  │  9  │ 10  │ ← Neutral gray (wrong)
3676*9ccd446eSAtari911└─────┴─────┴─────┘
3677*9ccd446eSAtari911```
3678*9ccd446eSAtari911
3679*9ccd446eSAtari911**After**:
3680*9ccd446eSAtari911```
3681*9ccd446eSAtari911Calendar with template colors:
3682*9ccd446eSAtari911┌─────┬─────┬─────┐
3683*9ccd446eSAtari911│ Mon │ Tue │ Wed │
3684*9ccd446eSAtari911├─────┼─────┼─────┤
3685*9ccd446eSAtari911│  8  │  9  │ 10  │ ← White/content bg (correct!)
3686*9ccd446eSAtari911└─────┴─────┴─────┘
3687*9ccd446eSAtari911```
3688*9ccd446eSAtari911
3689*9ccd446eSAtari911### Example Template Colors
3690*9ccd446eSAtari911
3691*9ccd446eSAtari911**DokuWiki Default**:
3692*9ccd446eSAtari911```ini
3693*9ccd446eSAtari911__background__ = "#ffffff"
3694*9ccd446eSAtari911```
3695*9ccd446eSAtari911**Result**: White calendar cells ✓
3696*9ccd446eSAtari911
3697*9ccd446eSAtari911**Dark Template**:
3698*9ccd446eSAtari911```ini
3699*9ccd446eSAtari911__background__ = "#2d2d2d"
3700*9ccd446eSAtari911```
3701*9ccd446eSAtari911**Result**: Dark calendar cells ✓
3702*9ccd446eSAtari911
3703*9ccd446eSAtari911**Custom Template**:
3704*9ccd446eSAtari911```ini
3705*9ccd446eSAtari911__background__ = "#f9f9f9"
3706*9ccd446eSAtari911```
3707*9ccd446eSAtari911**Result**: Custom color cells ✓
3708*9ccd446eSAtari911
3709*9ccd446eSAtari911### Perfect Matching
3710*9ccd446eSAtari911
3711*9ccd446eSAtari911Calendar cells now match:
3712*9ccd446eSAtari911- ✅ Main content area background
3713*9ccd446eSAtari911- ✅ Article/page background
3714*9ccd446eSAtari911- ✅ Content box background
3715*9ccd446eSAtari911- ✅ Same as wiki text background
3716*9ccd446eSAtari911
3717*9ccd446eSAtari911**Seamless integration!** ��
3718*9ccd446eSAtari911
3719*9ccd446eSAtari911## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI
3720*9ccd446eSAtari911
3721*9ccd446eSAtari911### �� Enhanced: Wiki Default Theme Reads Template Colors
3722*9ccd446eSAtari911- **Added:** Function to read colors from DokuWiki template's style.ini file
3723*9ccd446eSAtari911- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
3724*9ccd446eSAtari911- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
3725*9ccd446eSAtari911- **Uses:** Actual template colors instead of CSS variables
3726*9ccd446eSAtari911- **Result:** Perfect color matching with any DokuWiki template!
3727*9ccd446eSAtari911
3728*9ccd446eSAtari911### How It Works
3729*9ccd446eSAtari911
3730*9ccd446eSAtari911**New Function: `getWikiTemplateColors()`**
3731*9ccd446eSAtari911
3732*9ccd446eSAtari9111. **Detects** current DokuWiki template name
3733*9ccd446eSAtari9112. **Reads** the template's `style.ini` file
3734*9ccd446eSAtari9113. **Parses** color replacements section
3735*9ccd446eSAtari9114. **Maps** template colors to calendar theme
3736*9ccd446eSAtari9115. **Falls back** to CSS variables if file not found
3737*9ccd446eSAtari911
3738*9ccd446eSAtari911### Colors Read from style.ini
3739*9ccd446eSAtari911
3740*9ccd446eSAtari911**Template color replacements used**:
3741*9ccd446eSAtari911```php
3742*9ccd446eSAtari911__background_site__  → bg, header_bg
3743*9ccd446eSAtari911__background_alt__   → grid_bg, cell_today_bg
3744*9ccd446eSAtari911__background_neu__   → cell_bg
3745*9ccd446eSAtari911__text__             → text_primary
3746*9ccd446eSAtari911__text_neu__         → text_dim
3747*9ccd446eSAtari911__link__             → text_bright
3748*9ccd446eSAtari911__border__           → border, grid_border
3749*9ccd446eSAtari911```
3750*9ccd446eSAtari911
3751*9ccd446eSAtari911### Example style.ini Mapping
3752*9ccd446eSAtari911
3753*9ccd446eSAtari911**Template style.ini**:
3754*9ccd446eSAtari911```ini
3755*9ccd446eSAtari911[replacements]
3756*9ccd446eSAtari911__background_site__ = "#f8f9fa"
3757*9ccd446eSAtari911__background_alt__  = "#e9ecef"
3758*9ccd446eSAtari911__background_neu__  = "#dee2e6"
3759*9ccd446eSAtari911__text__            = "#212529"
3760*9ccd446eSAtari911__text_neu__        = "#6c757d"
3761*9ccd446eSAtari911__link__            = "#0d6efd"
3762*9ccd446eSAtari911__border__          = "#ced4da"
3763*9ccd446eSAtari911```
3764*9ccd446eSAtari911
3765*9ccd446eSAtari911**Calendar theme result**:
3766*9ccd446eSAtari911```php
3767*9ccd446eSAtari911bg: #f8f9fa
3768*9ccd446eSAtari911header_bg: #e9ecef
3769*9ccd446eSAtari911grid_bg: #e9ecef
3770*9ccd446eSAtari911cell_bg: #dee2e6
3771*9ccd446eSAtari911text_primary: #212529
3772*9ccd446eSAtari911text_dim: #6c757d
3773*9ccd446eSAtari911text_bright: #0d6efd
3774*9ccd446eSAtari911border: #ced4da
3775*9ccd446eSAtari911grid_border: #ced4da
3776*9ccd446eSAtari911```
3777*9ccd446eSAtari911
3778*9ccd446eSAtari911### Before vs After
3779*9ccd446eSAtari911
3780*9ccd446eSAtari911**Before (v5.0.2)**:
3781*9ccd446eSAtari911```
3782*9ccd446eSAtari911Wiki Default theme used:
3783*9ccd446eSAtari911- CSS variables (var(--__background__, #fff))
3784*9ccd446eSAtari911- Required browser CSS variable support
3785*9ccd446eSAtari911- Fallback to generic colors
3786*9ccd446eSAtari911```
3787*9ccd446eSAtari911
3788*9ccd446eSAtari911**After (v5.0.3)**:
3789*9ccd446eSAtari911```
3790*9ccd446eSAtari911Wiki Default theme uses:
3791*9ccd446eSAtari911- Actual colors from template's style.ini
3792*9ccd446eSAtari911- Exact template color values
3793*9ccd446eSAtari911- No CSS variable dependency
3794*9ccd446eSAtari911- Perfect color matching!
3795*9ccd446eSAtari911```
3796*9ccd446eSAtari911
3797*9ccd446eSAtari911### File Location Priority
3798*9ccd446eSAtari911
3799*9ccd446eSAtari911Checks in order:
3800*9ccd446eSAtari9111. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
3801*9ccd446eSAtari9112. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
3802*9ccd446eSAtari9113. Falls back to CSS variables if neither found
3803*9ccd446eSAtari911
3804*9ccd446eSAtari911### Benefits
3805*9ccd446eSAtari911
3806*9ccd446eSAtari911**More accurate colors**:
3807*9ccd446eSAtari911- Uses exact template color values ✓
3808*9ccd446eSAtari911- No CSS variable interpolation ✓
3809*9ccd446eSAtari911- Consistent across all browsers ✓
3810*9ccd446eSAtari911
3811*9ccd446eSAtari911**Better compatibility**:
3812*9ccd446eSAtari911- Works with older browsers ✓
3813*9ccd446eSAtari911- No CSS variable support needed ✓
3814*9ccd446eSAtari911- Direct color values ✓
3815*9ccd446eSAtari911
3816*9ccd446eSAtari911**Perfect matching**:
3817*9ccd446eSAtari911- Reads template's actual colors ✓
3818*9ccd446eSAtari911- Same colors as wiki pages ✓
3819*9ccd446eSAtari911- Seamless integration ✓
3820*9ccd446eSAtari911
3821*9ccd446eSAtari911### Template Examples
3822*9ccd446eSAtari911
3823*9ccd446eSAtari911**DokuWiki Default Template**:
3824*9ccd446eSAtari911```
3825*9ccd446eSAtari911Reads: lib/tpl/dokuwiki/style.ini
3826*9ccd446eSAtari911Gets: Default DokuWiki colors
3827*9ccd446eSAtari911Result: Perfect classic DokuWiki look
3828*9ccd446eSAtari911```
3829*9ccd446eSAtari911
3830*9ccd446eSAtari911**Bootstrap Template**:
3831*9ccd446eSAtari911```
3832*9ccd446eSAtari911Reads: lib/tpl/bootstrap3/style.ini
3833*9ccd446eSAtari911Gets: Bootstrap color scheme
3834*9ccd446eSAtari911Result: Perfect Bootstrap integration
3835*9ccd446eSAtari911```
3836*9ccd446eSAtari911
3837*9ccd446eSAtari911**Custom Template**:
3838*9ccd446eSAtari911```
3839*9ccd446eSAtari911Reads: conf/tpl/mycustom/style.ini
3840*9ccd446eSAtari911Gets: Your custom colors
3841*9ccd446eSAtari911Result: Perfect custom theme match
3842*9ccd446eSAtari911```
3843*9ccd446eSAtari911
3844*9ccd446eSAtari911### Fallback Chain
3845*9ccd446eSAtari911
3846*9ccd446eSAtari9111. **Try** reading style.ini from template
3847*9ccd446eSAtari9112. **If found** → Use exact colors from file
3848*9ccd446eSAtari9113. **If not found** → Use CSS variables
3849*9ccd446eSAtari9114. **If no CSS vars** → Use fallback colors
3850*9ccd446eSAtari911
3851*9ccd446eSAtari911**Always works, always matches!** ✓
3852*9ccd446eSAtari911
3853*9ccd446eSAtari911## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL
3854*9ccd446eSAtari911
3855*9ccd446eSAtari911### �� Fixed: Wiki Default Theme Day Panel Colors
3856*9ccd446eSAtari911- **Fixed:** Day popup panel now uses DokuWiki CSS variables
3857*9ccd446eSAtari911- **Fixed:** Panel background matches wiki theme
3858*9ccd446eSAtari911- **Fixed:** Panel header matches wiki theme
3859*9ccd446eSAtari911- **Fixed:** Border colors use wiki theme
3860*9ccd446eSAtari911- **Fixed:** Text colors use wiki theme
3861*9ccd446eSAtari911- **Result:** Perfect integration with DokuWiki templates!
3862*9ccd446eSAtari911
3863*9ccd446eSAtari911### All Changes
3864*9ccd446eSAtari911
3865*9ccd446eSAtari911**Day Panel Colors (Wiki Default)**:
3866*9ccd446eSAtari911
3867*9ccd446eSAtari911**Before**:
3868*9ccd446eSAtari911```php
3869*9ccd446eSAtari911background: rgba(36, 36, 36, 0.5)  // Dark gray (wrong!)
3870*9ccd446eSAtari911header: #3498db                     // Blue (wrong!)
3871*9ccd446eSAtari911```
3872*9ccd446eSAtari911
3873*9ccd446eSAtari911**After**:
3874*9ccd446eSAtari911```php
3875*9ccd446eSAtari911background: var(--__background__, #fff)
3876*9ccd446eSAtari911header: var(--__background_alt__, #e8e8e8)
3877*9ccd446eSAtari911header_text: var(--__text__, #333)
3878*9ccd446eSAtari911border: var(--__border__, #ccc)
3879*9ccd446eSAtari911shadow: 0 2px 4px rgba(0, 0, 0, 0.1)
3880*9ccd446eSAtari911```
3881*9ccd446eSAtari911
3882*9ccd446eSAtari911**Event Colors (Wiki Default)**:
3883*9ccd446eSAtari911```php
3884*9ccd446eSAtari911event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5))
3885*9ccd446eSAtari911border_color: var(--__border__, rgba(204, 204, 204, 0.3))
3886*9ccd446eSAtari911bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15)
3887*9ccd446eSAtari911```
3888*9ccd446eSAtari911
3889*9ccd446eSAtari911### Before vs After
3890*9ccd446eSAtari911
3891*9ccd446eSAtari911**Before (v5.0.1)**:
3892*9ccd446eSAtari911```
3893*9ccd446eSAtari911Wiki Default - Click Week Cell:
3894*9ccd446eSAtari911┌────────────────┐
3895*9ccd446eSAtari911│ Monday, Feb 8  │ ← Blue header (wrong)
3896*9ccd446eSAtari911├────────────────┤
3897*9ccd446eSAtari911│ Team Meeting   │ ← Dark gray bg (wrong)
3898*9ccd446eSAtari911│ 2:00 PM        │
3899*9ccd446eSAtari911└────────────────┘
3900*9ccd446eSAtari911Doesn't match wiki theme
3901*9ccd446eSAtari911```
3902*9ccd446eSAtari911
3903*9ccd446eSAtari911**After (v5.0.2)**:
3904*9ccd446eSAtari911```
3905*9ccd446eSAtari911Wiki Default - Click Week Cell:
3906*9ccd446eSAtari911
3907*9ccd446eSAtari911Light Wiki Theme:
3908*9ccd446eSAtari911┌────────────────┐
3909*9ccd446eSAtari911│ Monday, Feb 8  │ ← Light gray header ✓
3910*9ccd446eSAtari911├────────────────┤
3911*9ccd446eSAtari911│ Team Meeting   │ ← White bg ✓
3912*9ccd446eSAtari911│ 2:00 PM        │   Dark text ✓
3913*9ccd446eSAtari911└────────────────┘
3914*9ccd446eSAtari911
3915*9ccd446eSAtari911Dark Wiki Theme:
3916*9ccd446eSAtari911┌────────────────┐
3917*9ccd446eSAtari911│ Monday, Feb 8  │ ← Dark header ✓
3918*9ccd446eSAtari911├────────────────┤
3919*9ccd446eSAtari911│ Team Meeting   │ ← Dark bg ✓
3920*9ccd446eSAtari911│ 2:00 PM        │   Light text ✓
3921*9ccd446eSAtari911└────────────────┘
3922*9ccd446eSAtari911
3923*9ccd446eSAtari911Perfectly matches wiki!
3924*9ccd446eSAtari911```
3925*9ccd446eSAtari911
3926*9ccd446eSAtari911### CSS Variables Used
3927*9ccd446eSAtari911
3928*9ccd446eSAtari911**Wiki Default theme now uses**:
3929*9ccd446eSAtari911- `--__background__` - Main background (panel body)
3930*9ccd446eSAtari911- `--__background_alt__` - Alternate bg (panel header, events)
3931*9ccd446eSAtari911- `--__text__` - Text color (header text)
3932*9ccd446eSAtari911- `--__border__` - Border color (panel border, event borders)
3933*9ccd446eSAtari911
3934*9ccd446eSAtari911**With fallbacks**:
3935*9ccd446eSAtari911```css
3936*9ccd446eSAtari911var(--__background__, #fff)           /* white fallback */
3937*9ccd446eSAtari911var(--__background_alt__, #e8e8e8)    /* light gray fallback */
3938*9ccd446eSAtari911var(--__text__, #333)                 /* dark text fallback */
3939*9ccd446eSAtari911var(--__border__, #ccc)               /* gray border fallback */
3940*9ccd446eSAtari911```
3941*9ccd446eSAtari911
3942*9ccd446eSAtari911### Perfect Adaptation
3943*9ccd446eSAtari911
3944*9ccd446eSAtari911**Light Templates**:
3945*9ccd446eSAtari911- Light panel backgrounds ✓
3946*9ccd446eSAtari911- Dark text ✓
3947*9ccd446eSAtari911- Subtle borders ✓
3948*9ccd446eSAtari911- Clean appearance ✓
3949*9ccd446eSAtari911
3950*9ccd446eSAtari911**Dark Templates**:
3951*9ccd446eSAtari911- Dark panel backgrounds ✓
3952*9ccd446eSAtari911- Light text ✓
3953*9ccd446eSAtari911- Visible borders ✓
3954*9ccd446eSAtari911- Perfect contrast ✓
3955*9ccd446eSAtari911
3956*9ccd446eSAtari911**Custom Templates**:
3957*9ccd446eSAtari911- Uses template's CSS variables ✓
3958*9ccd446eSAtari911- Automatic adaptation ✓
3959*9ccd446eSAtari911- Seamless integration ✓
3960*9ccd446eSAtari911
3961*9ccd446eSAtari911### Now Truly Adaptive
3962*9ccd446eSAtari911
3963*9ccd446eSAtari911Wiki Default theme now properly uses DokuWiki CSS variables for:
3964*9ccd446eSAtari911- ✅ Calendar grid
3965*9ccd446eSAtari911- ✅ Sidebar widget
3966*9ccd446eSAtari911- ✅ Event list
3967*9ccd446eSAtari911- ✅ **Day panel** ← v5.0.2!
3968*9ccd446eSAtari911- ✅ All backgrounds
3969*9ccd446eSAtari911- ✅ All text
3970*9ccd446eSAtari911- ✅ All borders
3971*9ccd446eSAtari911
3972*9ccd446eSAtari911**Complete wiki integration!** ��
3973*9ccd446eSAtari911
3974*9ccd446eSAtari911## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS
3975*9ccd446eSAtari911
3976*9ccd446eSAtari911### �� Enhanced: Time Conflict Tooltips Now Themed
3977*9ccd446eSAtari911- **Fixed:** Conflict tooltips now match calendar theme
3978*9ccd446eSAtari911- **Added:** Theme-aware background, border, text colors
3979*9ccd446eSAtari911- **Added:** Theme-aware shadow effects
3980*9ccd446eSAtari911- **Result:** Complete visual consistency!
3981*9ccd446eSAtari911
3982*9ccd446eSAtari911### Tooltip Theming
3983*9ccd446eSAtari911
3984*9ccd446eSAtari911**Now uses theme colors for**:
3985*9ccd446eSAtari911- Background: Theme background color
3986*9ccd446eSAtari911- Border: Theme border color
3987*9ccd446eSAtari911- Header text: Theme primary text color
3988*9ccd446eSAtari911- Item text: Theme dim text color
3989*9ccd446eSAtari911- Shadow: Theme shadow color
3990*9ccd446eSAtari911
3991*9ccd446eSAtari911### Before vs After
3992*9ccd446eSAtari911
3993*9ccd446eSAtari911**Before (v5.0.0)**:
3994*9ccd446eSAtari911```
3995*9ccd446eSAtari911Hover ⚠️ badge:
3996*9ccd446eSAtari911┌─────────────────┐
3997*9ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Default colors
3998*9ccd446eSAtari911│ • Event A       │
3999*9ccd446eSAtari911│ • Event B       │
4000*9ccd446eSAtari911└─────────────────┘
4001*9ccd446eSAtari911```
4002*9ccd446eSAtari911
4003*9ccd446eSAtari911**After (v5.0.1)**:
4004*9ccd446eSAtari911```
4005*9ccd446eSAtari911Matrix Theme:
4006*9ccd446eSAtari911┌─────────────────┐
4007*9ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Green header
4008*9ccd446eSAtari911│ • Event A       │ ← Green text
4009*9ccd446eSAtari911│ • Event B       │   Dark green bg
4010*9ccd446eSAtari911└─────────────────┘
4011*9ccd446eSAtari911
4012*9ccd446eSAtari911Purple Theme:
4013*9ccd446eSAtari911┌─────────────────┐
4014*9ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Purple header
4015*9ccd446eSAtari911│ • Event A       │ ← Purple text
4016*9ccd446eSAtari911│ • Event B       │   Dark purple bg
4017*9ccd446eSAtari911└─────────────────┘
4018*9ccd446eSAtari911
4019*9ccd446eSAtari911Professional Theme:
4020*9ccd446eSAtari911┌─────────────────┐
4021*9ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Blue header
4022*9ccd446eSAtari911│ • Event A       │ ← Dark text
4023*9ccd446eSAtari911│ • Event B       │   Light bg
4024*9ccd446eSAtari911└─────────────────┘
4025*9ccd446eSAtari911
4026*9ccd446eSAtari911Pink Theme:
4027*9ccd446eSAtari911┌─────────────────┐
4028*9ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Pink header ✨
4029*9ccd446eSAtari911│ • Event A       │ ← Pink text
4030*9ccd446eSAtari911│ • Event B       │   Dark pink bg ��
4031*9ccd446eSAtari911└─────────────────┘
4032*9ccd446eSAtari911
4033*9ccd446eSAtari911Wiki Default:
4034*9ccd446eSAtari911┌─────────────────┐
4035*9ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Adapts to wiki
4036*9ccd446eSAtari911│ • Event A       │ ← Wiki colors
4037*9ccd446eSAtari911│ • Event B       │
4038*9ccd446eSAtari911└─────────────────┘
4039*9ccd446eSAtari911```
4040*9ccd446eSAtari911
4041*9ccd446eSAtari911### Now 100% Complete
4042*9ccd446eSAtari911
4043*9ccd446eSAtari911**Every tooltip themed**:
4044*9ccd446eSAtari911- ✅ Conflict tooltips
4045*9ccd446eSAtari911- ✅ All other tooltips (if any)
4046*9ccd446eSAtari911- ✅ Perfect consistency
4047*9ccd446eSAtari911
4048*9ccd446eSAtari911**Absolute perfection!** ✨
4049*9ccd446eSAtari911
4050*9ccd446eSAtari911## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION
4051*9ccd446eSAtari911
4052*9ccd446eSAtari911### �� Major Milestone: Version 5.0
4053*9ccd446eSAtari911
4054*9ccd446eSAtari911This is a major release representing the completion of comprehensive theming across the entire calendar plugin. Every visual element has been carefully themed for consistency and beauty.
4055*9ccd446eSAtari911
4056*9ccd446eSAtari911### Complete Feature Set
4057*9ccd446eSAtari911
4058*9ccd446eSAtari911**5 Beautiful Themes**:
4059*9ccd446eSAtari911- �� Matrix Edition (Green with glow)
4060*9ccd446eSAtari911- �� Purple Dream (Elegant purple)
4061*9ccd446eSAtari911- �� Professional Blue (Clean and modern)
4062*9ccd446eSAtari911- �� Pink Bling (Maximum sparkle)
4063*9ccd446eSAtari911- �� Wiki Default (Auto-adapts to your DokuWiki theme)
4064*9ccd446eSAtari911
4065*9ccd446eSAtari911**100% Theme Coverage**:
4066*9ccd446eSAtari911- ✅ Calendar grid and cells
4067*9ccd446eSAtari911- ✅ Event boxes and borders
4068*9ccd446eSAtari911- ✅ Sidebar widget
4069*9ccd446eSAtari911- ✅ Event list panel
4070*9ccd446eSAtari911- ✅ Search functionality
4071*9ccd446eSAtari911- ✅ Edit/Add dialogs (complete)
4072*9ccd446eSAtari911- ✅ Day popup dialogs
4073*9ccd446eSAtari911- ✅ Month picker
4074*9ccd446eSAtari911- ✅ All text (primary, dim, bright)
4075*9ccd446eSAtari911- ✅ All buttons
4076*9ccd446eSAtari911- ✅ All inputs and forms
4077*9ccd446eSAtari911- ✅ All checkboxes
4078*9ccd446eSAtari911- ✅ All borders
4079*9ccd446eSAtari911- ✅ All badges and labels
4080*9ccd446eSAtari911- ✅ Event highlight effects
4081*9ccd446eSAtari911
4082*9ccd446eSAtari911**Perfect Visual Consistency**:
4083*9ccd446eSAtari911- No white pixels anywhere
4084*9ccd446eSAtari911- No unthemed elements
4085*9ccd446eSAtari911- No default colors
4086*9ccd446eSAtari911- Complete visual unity
4087*9ccd446eSAtari911
4088*9ccd446eSAtari911### Major Improvements in v5.0
4089*9ccd446eSAtari911
4090*9ccd446eSAtari9111. **Complete Dialog Theming** (v4.8.5-4.8.7)
4091*9ccd446eSAtari911   - Edit event dialog fully themed
4092*9ccd446eSAtari911   - Day popup dialog fully themed
4093*9ccd446eSAtari911   - All form inputs themed
4094*9ccd446eSAtari911   - All checkboxes themed
4095*9ccd446eSAtari911   - All buttons themed
4096*9ccd446eSAtari911
4097*9ccd446eSAtari9112. **Event Box Border Perfection** (v4.8.6)
4098*9ccd446eSAtari911   - All 4 borders themed (top, right, bottom, left)
4099*9ccd446eSAtari911   - Sidebar event dividers themed
4100*9ccd446eSAtari911   - Past Events toggle border themed
4101*9ccd446eSAtari911
4102*9ccd446eSAtari9113. **Checkbox Field Borders** (v4.9.0)
4103*9ccd446eSAtari911   - Repeating Event section border themed
4104*9ccd446eSAtari911   - Task checkbox section border themed
4105*9ccd446eSAtari911
4106*9ccd446eSAtari9114. **Wiki Default Theme** (v4.10.0)
4107*9ccd446eSAtari911   - New 5th theme
4108*9ccd446eSAtari911   - Uses DokuWiki CSS variables
4109*9ccd446eSAtari911   - Auto-adapts to any wiki template
4110*9ccd446eSAtari911   - Perfect for seamless integration
4111*9ccd446eSAtari911
4112*9ccd446eSAtari9115. **Clean Text Appearance** (v4.11.0)
4113*9ccd446eSAtari911   - Removed text glow from Matrix
4114*9ccd446eSAtari911   - Removed text glow from Purple
4115*9ccd446eSAtari911   - Removed text glow from Professional
4116*9ccd446eSAtari911   - Removed text glow from Wiki Default
4117*9ccd446eSAtari911   - Kept text glow on Pink Bling only
4118*9ccd446eSAtari911
4119*9ccd446eSAtari9116. **Event Highlight Effects** (v4.12.0-4.12.1)
4120*9ccd446eSAtari911   - Theme-aware highlight glow
4121*9ccd446eSAtari911   - Click event bar → event glows
4122*9ccd446eSAtari911   - 3-second themed glow effect
4123*9ccd446eSAtari911   - Smooth animations
4124*9ccd446eSAtari911
4125*9ccd446eSAtari911### See RELEASE_NOTES.md for Complete Details
4126*9ccd446eSAtari911
4127*9ccd446eSAtari911For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release.
4128*9ccd446eSAtari911
4129*9ccd446eSAtari911## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION
4130*9ccd446eSAtari911
4131*9ccd446eSAtari911### �� Fixed: Event Highlight Now Working
4132*9ccd446eSAtari911- **Fixed:** Used setProperty() to properly apply !important styles
4133*9ccd446eSAtari911- **Added:** Console logging for debugging
4134*9ccd446eSAtari911- **Fixed:** Proper style application with important flag
4135*9ccd446eSAtari911- **Result:** Highlight glow now works correctly!
4136*9ccd446eSAtari911
4137*9ccd446eSAtari911### Technical Fix
4138*9ccd446eSAtari911
4139*9ccd446eSAtari911**Before (not working)**:
4140*9ccd446eSAtari911```javascript
4141*9ccd446eSAtari911eventItem.style.background = color + ' !important'; // Doesn't work
4142*9ccd446eSAtari911```
4143*9ccd446eSAtari911
4144*9ccd446eSAtari911**After (working)**:
4145*9ccd446eSAtari911```javascript
4146*9ccd446eSAtari911eventItem.style.setProperty('background', color, 'important'); // Works!
4147*9ccd446eSAtari911```
4148*9ccd446eSAtari911
4149*9ccd446eSAtari911### Added Debug Logging
4150*9ccd446eSAtari911
4151*9ccd446eSAtari911Console now shows:
4152*9ccd446eSAtari911- "Highlighting event: [calId] [eventId] [date]"
4153*9ccd446eSAtari911- "Found event item: [element]"
4154*9ccd446eSAtari911- "Theme: [theme name]"
4155*9ccd446eSAtari911- "Highlight colors: [bg] [shadow]"
4156*9ccd446eSAtari911- "Applied highlight styles"
4157*9ccd446eSAtari911- "Removing highlight" (after 3 seconds)
4158*9ccd446eSAtari911
4159*9ccd446eSAtari911### Now Working
4160*9ccd446eSAtari911
4161*9ccd446eSAtari911Click any event bar → Event glows with theme colors ✓
4162*9ccd446eSAtari911
4163*9ccd446eSAtari911## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW
4164*9ccd446eSAtari911
4165*9ccd446eSAtari911### ✨ Enhanced: Event Click Highlight Now Theme-Aware
4166*9ccd446eSAtari911- **Fixed:** Restored event highlight glow when clicking calendar bars
4167*9ccd446eSAtari911- **Improved:** Highlight now matches each theme's colors
4168*9ccd446eSAtari911- **Added:** Stronger glow effect for better visibility
4169*9ccd446eSAtari911- **Duration:** 3 seconds with smooth fade
4170*9ccd446eSAtari911- **Result:** Beautiful themed highlights for all themes!
4171*9ccd446eSAtari911
4172*9ccd446eSAtari911### How It Works
4173*9ccd446eSAtari911
4174*9ccd446eSAtari911When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow:
4175*9ccd446eSAtari911
4176*9ccd446eSAtari911**Matrix Theme**:
4177*9ccd446eSAtari911```javascript
4178*9ccd446eSAtari911Background: Darker green (#1a3d1a)
4179*9ccd446eSAtari911Glow: Double green glow (0 0 20px + 0 0 40px)
4180*9ccd446eSAtari911Color: rgba(0, 204, 7, 0.8)
4181*9ccd446eSAtari911```
4182*9ccd446eSAtari911
4183*9ccd446eSAtari911**Purple Theme**:
4184*9ccd446eSAtari911```javascript
4185*9ccd446eSAtari911Background: Darker purple (#3d2b4d)
4186*9ccd446eSAtari911Glow: Double purple glow
4187*9ccd446eSAtari911Color: rgba(155, 89, 182, 0.8)
4188*9ccd446eSAtari911```
4189*9ccd446eSAtari911
4190*9ccd446eSAtari911**Professional Theme**:
4191*9ccd446eSAtari911```javascript
4192*9ccd446eSAtari911Background: Light blue (#e3f2fd)
4193*9ccd446eSAtari911Glow: Single blue glow
4194*9ccd446eSAtari911Color: rgba(74, 144, 226, 0.4)
4195*9ccd446eSAtari911```
4196*9ccd446eSAtari911
4197*9ccd446eSAtari911**Pink Theme**:
4198*9ccd446eSAtari911```javascript
4199*9ccd446eSAtari911Background: Darker pink (#3d2030)
4200*9ccd446eSAtari911Glow: Double pink glow ✨��
4201*9ccd446eSAtari911Color: rgba(255, 20, 147, 0.8)
4202*9ccd446eSAtari911```
4203*9ccd446eSAtari911
4204*9ccd446eSAtari911**Wiki Theme**:
4205*9ccd446eSAtari911```javascript
4206*9ccd446eSAtari911Background: var(--__background_neu__)
4207*9ccd446eSAtari911Glow: Blue glow (adapts to wiki)
4208*9ccd446eSAtari911Color: rgba(43, 115, 183, 0.4)
4209*9ccd446eSAtari911```
4210*9ccd446eSAtari911
4211*9ccd446eSAtari911### Visual Examples
4212*9ccd446eSAtari911
4213*9ccd446eSAtari911**Matrix - Click Event**:
4214*9ccd446eSAtari911```
4215*9ccd446eSAtari911Calendar:
4216*9ccd446eSAtari911┌─────────────┐
4217*9ccd446eSAtari911│ 2:00 PM │ ← Click this bar
4218*9ccd446eSAtari911└─────────────┘
4219*9ccd446eSAtari911
4220*9ccd446eSAtari911Event List:
4221*9ccd446eSAtari911╔═════════════════════╗
4222*9ccd446eSAtari911║ Team Meeting        ║ ← GLOWS GREEN
4223*9ccd446eSAtari911║ 2:00 PM             ║    for 3 seconds
4224*9ccd446eSAtari911╚═════════════════════╝
4225*9ccd446eSAtari911   ↑↑↑ Strong green glow ↑↑↑
4226*9ccd446eSAtari911```
4227*9ccd446eSAtari911
4228*9ccd446eSAtari911**Purple - Click Event**:
4229*9ccd446eSAtari911```
4230*9ccd446eSAtari911Calendar:
4231*9ccd446eSAtari911┌─────────────┐
4232*9ccd446eSAtari911│ 4:00 PM │ ← Click
4233*9ccd446eSAtari911└─────────────┘
4234*9ccd446eSAtari911
4235*9ccd446eSAtari911Event List:
4236*9ccd446eSAtari911╔═════════════════════╗
4237*9ccd446eSAtari911║ Code Review         ║ ← GLOWS PURPLE
4238*9ccd446eSAtari911║ 4:00 PM             ║    for 3 seconds
4239*9ccd446eSAtari911╚═════════════════════╝
4240*9ccd446eSAtari911   ↑↑↑ Strong purple glow ↑↑↑
4241*9ccd446eSAtari911```
4242*9ccd446eSAtari911
4243*9ccd446eSAtari911**Pink - Click Event**:
4244*9ccd446eSAtari911```
4245*9ccd446eSAtari911Calendar:
4246*9ccd446eSAtari911┌─────────────┐
4247*9ccd446eSAtari911│ 1:00 PM │ ← Click
4248*9ccd446eSAtari911└─────────────┘
4249*9ccd446eSAtari911
4250*9ccd446eSAtari911Event List:
4251*9ccd446eSAtari911╔═════════════════════╗
4252*9ccd446eSAtari911║ Lunch Date ��       ║ ← GLOWS PINK
4253*9ccd446eSAtari911║ 1:00 PM ✨          ║    for 3 seconds
4254*9ccd446eSAtari911╚═════════════════════╝
4255*9ccd446eSAtari911   ↑↑↑ MAXIMUM SPARKLE ↑↑↑
4256*9ccd446eSAtari911```
4257*9ccd446eSAtari911
4258*9ccd446eSAtari911### Glow Specifications
4259*9ccd446eSAtari911
4260*9ccd446eSAtari911**Matrix**:
4261*9ccd446eSAtari911- Background: Dark green
4262*9ccd446eSAtari911- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)`
4263*9ccd446eSAtari911- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)`
4264*9ccd446eSAtari911- Effect: Strong green pulse
4265*9ccd446eSAtari911
4266*9ccd446eSAtari911**Purple**:
4267*9ccd446eSAtari911- Background: Dark purple
4268*9ccd446eSAtari911- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)`
4269*9ccd446eSAtari911- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)`
4270*9ccd446eSAtari911- Effect: Strong purple pulse
4271*9ccd446eSAtari911
4272*9ccd446eSAtari911**Professional**:
4273*9ccd446eSAtari911- Background: Light blue
4274*9ccd446eSAtari911- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)`
4275*9ccd446eSAtari911- Effect: Subtle blue glow
4276*9ccd446eSAtari911
4277*9ccd446eSAtari911**Pink**:
4278*9ccd446eSAtari911- Background: Dark pink
4279*9ccd446eSAtari911- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)`
4280*9ccd446eSAtari911- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)`
4281*9ccd446eSAtari911- Effect: MAXIMUM SPARKLE ✨��
4282*9ccd446eSAtari911
4283*9ccd446eSAtari911**Wiki**:
4284*9ccd446eSAtari911- Background: Theme neutral color
4285*9ccd446eSAtari911- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)`
4286*9ccd446eSAtari911- Effect: Adapts to wiki theme
4287*9ccd446eSAtari911
4288*9ccd446eSAtari911### User Experience
4289*9ccd446eSAtari911
4290*9ccd446eSAtari911**Click event bar** → Event highlights with themed glow
4291*9ccd446eSAtari911**Auto-scroll** → Event scrolls into view smoothly
4292*9ccd446eSAtari911**3 second glow** → Fade out after 3 seconds
4293*9ccd446eSAtari911**Smooth transition** → 0.3s ease-in-out
4294*9ccd446eSAtari911
4295*9ccd446eSAtari911### Perfect for Finding Events
4296*9ccd446eSAtari911
4297*9ccd446eSAtari911**Large event lists**: Quickly locate the clicked event ✓
4298*9ccd446eSAtari911**Visual feedback**: Know which event you clicked ✓
4299*9ccd446eSAtari911**Theme consistency**: Matches your chosen theme ✓
4300*9ccd446eSAtari911**Smooth animation**: Professional appearance ✓
4301*9ccd446eSAtari911
4302*9ccd446eSAtari911### All Themes Covered
4303*9ccd446eSAtari911
4304*9ccd446eSAtari911- ✅ Matrix: Green glow
4305*9ccd446eSAtari911- ✅ Purple: Purple glow
4306*9ccd446eSAtari911- ✅ Professional: Blue glow
4307*9ccd446eSAtari911- ✅ Pink: Maximum pink sparkle
4308*9ccd446eSAtari911- ✅ Wiki: Adaptive glow
4309*9ccd446eSAtari911
4310*9ccd446eSAtari911**Click any event bar and watch it glow!** ✨
4311*9ccd446eSAtari911
4312*9ccd446eSAtari911## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES
4313*9ccd446eSAtari911
4314*9ccd446eSAtari911### �� Changed: Text Glow Now Pink-Only
4315*9ccd446eSAtari911- **Removed:** Text shadow/glow from Matrix theme
4316*9ccd446eSAtari911- **Removed:** Text shadow/glow from Purple theme
4317*9ccd446eSAtari911- **Removed:** Text shadow/glow from Professional theme (already had none)
4318*9ccd446eSAtari911- **Removed:** Text shadow/glow from Wiki Default theme
4319*9ccd446eSAtari911- **Kept:** Text shadow/glow ONLY on Pink Bling theme
4320*9ccd446eSAtari911- **Result:** Cleaner look for Matrix, Purple, and Wiki themes!
4321*9ccd446eSAtari911
4322*9ccd446eSAtari911### All Changes
4323*9ccd446eSAtari911
4324*9ccd446eSAtari911**Before (Matrix, Purple)**:
4325*9ccd446eSAtari911```css
4326*9ccd446eSAtari911text-shadow: 0 0 2px $text_color; /* Glow effect */
4327*9ccd446eSAtari911```
4328*9ccd446eSAtari911
4329*9ccd446eSAtari911**After (Matrix, Purple, Professional, Wiki)**:
4330*9ccd446eSAtari911```css
4331*9ccd446eSAtari911text-shadow: none; /* Clean, no glow */
4332*9ccd446eSAtari911```
4333*9ccd446eSAtari911
4334*9ccd446eSAtari911**Pink Bling (unchanged)**:
4335*9ccd446eSAtari911```css
4336*9ccd446eSAtari911text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */
4337*9ccd446eSAtari911```
4338*9ccd446eSAtari911
4339*9ccd446eSAtari911### Text Shadow Removed From
4340*9ccd446eSAtari911
4341*9ccd446eSAtari911**Sidebar day numbers**: No glow ✓
4342*9ccd446eSAtari911**Event titles**: No glow ✓
4343*9ccd446eSAtari911**Event dates**: No glow ✓
4344*9ccd446eSAtari911**Add Event button**: No glow ✓
4345*9ccd446eSAtari911**Day popup events**: No glow ✓
4346*9ccd446eSAtari911
4347*9ccd446eSAtari911### Before vs After
4348*9ccd446eSAtari911
4349*9ccd446eSAtari911**BEFORE (Matrix)**:
4350*9ccd446eSAtari911```
4351*9ccd446eSAtari911Event Title ✨ ← Glowing green text
4352*9ccd446eSAtari9112:00 PM ✨     ← Glowing text
4353*9ccd446eSAtari911```
4354*9ccd446eSAtari911
4355*9ccd446eSAtari911**AFTER (Matrix)**:
4356*9ccd446eSAtari911```
4357*9ccd446eSAtari911Event Title    ← Clean green text
4358*9ccd446eSAtari9112:00 PM        ← Clean text
4359*9ccd446eSAtari911```
4360*9ccd446eSAtari911
4361*9ccd446eSAtari911**Pink Bling (Still Glows)**:
4362*9ccd446eSAtari911```
4363*9ccd446eSAtari911Event Title ✨�� ← Still glowing!
4364*9ccd446eSAtari9112:00 PM ✨     ← Maximum sparkle!
4365*9ccd446eSAtari911```
4366*9ccd446eSAtari911
4367*9ccd446eSAtari911### Theme Appearances
4368*9ccd446eSAtari911
4369*9ccd446eSAtari911**�� Matrix Edition**:
4370*9ccd446eSAtari911- Clean green text
4371*9ccd446eSAtari911- No glow effects
4372*9ccd446eSAtari911- Professional appearance
4373*9ccd446eSAtari911- Still has border glow
4374*9ccd446eSAtari911
4375*9ccd446eSAtari911**�� Purple Dream**:
4376*9ccd446eSAtari911- Clean purple text
4377*9ccd446eSAtari911- No glow effects
4378*9ccd446eSAtari911- Elegant appearance
4379*9ccd446eSAtari911- Still has border glow
4380*9ccd446eSAtari911
4381*9ccd446eSAtari911**�� Professional Blue**:
4382*9ccd446eSAtari911- Clean text (unchanged)
4383*9ccd446eSAtari911- No glow effects
4384*9ccd446eSAtari911- Modern appearance
4385*9ccd446eSAtari911
4386*9ccd446eSAtari911**�� Pink Bling**:
4387*9ccd446eSAtari911- Glowing pink text ✨
4388*9ccd446eSAtari911- Maximum glow effects ��
4389*9ccd446eSAtari911- Sparkle everywhere!
4390*9ccd446eSAtari911- All the bling!
4391*9ccd446eSAtari911
4392*9ccd446eSAtari911**�� Wiki Default**:
4393*9ccd446eSAtari911- Clean text
4394*9ccd446eSAtari911- No glow effects
4395*9ccd446eSAtari911- Matches wiki theme
4396*9ccd446eSAtari911
4397*9ccd446eSAtari911### Glow Effects Remaining
4398*9ccd446eSAtari911
4399*9ccd446eSAtari911**Border/box glow**: Still present on all themes ✓
4400*9ccd446eSAtari911**Pink text glow**: Only on Pink Bling ✓
4401*9ccd446eSAtari911**Shadow effects**: Still on buttons/boxes4402*9ccd446eSAtari911
4403*9ccd446eSAtari911**Only TEXT glow removed from non-pink themes!**
4404*9ccd446eSAtari911
4405*9ccd446eSAtari911### Result
4406*9ccd446eSAtari911
4407*9ccd446eSAtari911**Cleaner, more professional look** for:
4408*9ccd446eSAtari911- Matrix ✓
4409*9ccd446eSAtari911- Purple ✓
4410*9ccd446eSAtari911- Professional ✓
4411*9ccd446eSAtari911- Wiki Default ✓
4412*9ccd446eSAtari911
4413*9ccd446eSAtari911**Maximum sparkle** for:
4414*9ccd446eSAtari911- Pink Bling ✨��✓
4415*9ccd446eSAtari911
4416*9ccd446eSAtari911**Best of both worlds!** ��
4417*9ccd446eSAtari911
4418*9ccd446eSAtari911## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME
4419*9ccd446eSAtari911
4420*9ccd446eSAtari911### �� New: Wiki Default Theme
4421*9ccd446eSAtari911- **Added:** 5th theme that automatically matches your DokuWiki template
4422*9ccd446eSAtari911- **Uses:** CSS variables from your wiki theme
4423*9ccd446eSAtari911- **Adapts:** Automatically works with light and dark themes
4424*9ccd446eSAtari911- **Perfect:** Seamless integration with any DokuWiki template
4425*9ccd446eSAtari911
4426*9ccd446eSAtari911### How It Works
4427*9ccd446eSAtari911
4428*9ccd446eSAtari911**Wiki theme uses DokuWiki CSS variables**:
4429*9ccd446eSAtari911```css
4430*9ccd446eSAtari911bg: var(--__background_site__, #f5f5f5)
4431*9ccd446eSAtari911border: var(--__border__, #ccc)
4432*9ccd446eSAtari911text_primary: var(--__text__, #333)
4433*9ccd446eSAtari911text_bright: var(--__link__, #2b73b7)
4434*9ccd446eSAtari911text_dim: var(--__text_neu__, #666)
4435*9ccd446eSAtari911cell_bg: var(--__background__, #fff)
4436*9ccd446eSAtari911grid_border: var(--__border__, #ccc)
4437*9ccd446eSAtari911```
4438*9ccd446eSAtari911
4439*9ccd446eSAtari911**With fallbacks for older DokuWiki versions**:
4440*9ccd446eSAtari911- If CSS variables exist → Use them ✓
4441*9ccd446eSAtari911- If not available → Use fallback values ✓
4442*9ccd446eSAtari911
4443*9ccd446eSAtari911### All 5 Themes
4444*9ccd446eSAtari911
4445*9ccd446eSAtari911**1. �� Matrix Edition** (Default)
4446*9ccd446eSAtari911- Dark green with neon glow
4447*9ccd446eSAtari911- Matrix-style effects
4448*9ccd446eSAtari911- Original theme
4449*9ccd446eSAtari911
4450*9ccd446eSAtari911**2. �� Purple Dream**
4451*9ccd446eSAtari911- Rich purple with violet accents
4452*9ccd446eSAtari911- Elegant and sophisticated
4453*9ccd446eSAtari911- Soft glow effects
4454*9ccd446eSAtari911
4455*9ccd446eSAtari911**3. �� Professional Blue**
4456*9ccd446eSAtari911- Clean blue and grey
4457*9ccd446eSAtari911- Modern professional
4458*9ccd446eSAtari911- No glow effects
4459*9ccd446eSAtari911
4460*9ccd446eSAtari911**4. �� Pink Bling**
4461*9ccd446eSAtari911- Glamorous hot pink
4462*9ccd446eSAtari911- Maximum sparkle ✨
4463*9ccd446eSAtari911- Hearts and diamonds
4464*9ccd446eSAtari911
4465*9ccd446eSAtari911**5. �� Wiki Default** ← NEW!
4466*9ccd446eSAtari911- Matches your wiki template
4467*9ccd446eSAtari911- Auto-adapts to light/dark
4468*9ccd446eSAtari911- Perfect integration
4469*9ccd446eSAtari911
4470*9ccd446eSAtari911### Examples
4471*9ccd446eSAtari911
4472*9ccd446eSAtari911**Light Wiki Template**:
4473*9ccd446eSAtari911```
4474*9ccd446eSAtari911Wiki Default theme shows:
4475*9ccd446eSAtari911- Light backgrounds (#f5f5f5)
4476*9ccd446eSAtari911- Dark text (#333)
4477*9ccd446eSAtari911- Light inputs (#fff)
4478*9ccd446eSAtari911- Gray borders (#ccc)
4479*9ccd446eSAtari911
4480*9ccd446eSAtari911Matches perfectly! ✓
4481*9ccd446eSAtari911```
4482*9ccd446eSAtari911
4483*9ccd446eSAtari911**Dark Wiki Template**:
4484*9ccd446eSAtari911```
4485*9ccd446eSAtari911Wiki Default theme shows:
4486*9ccd446eSAtari911- Dark backgrounds (from template)
4487*9ccd446eSAtari911- Light text (from template)
4488*9ccd446eSAtari911- Dark inputs (from template)
4489*9ccd446eSAtari911- Dark borders (from template)
4490*9ccd446eSAtari911
4491*9ccd446eSAtari911Matches perfectly! ✓
4492*9ccd446eSAtari911```
4493*9ccd446eSAtari911
4494*9ccd446eSAtari911**Bootstrap Template**:
4495*9ccd446eSAtari911```
4496*9ccd446eSAtari911Uses Bootstrap's colors
4497*9ccd446eSAtari911Matches perfectly! ✓
4498*9ccd446eSAtari911```
4499*9ccd446eSAtari911
4500*9ccd446eSAtari911**Material Template**:
4501*9ccd446eSAtari911```
4502*9ccd446eSAtari911Uses Material's colors
4503*9ccd446eSAtari911Matches perfectly! ✓
4504*9ccd446eSAtari911```
4505*9ccd446eSAtari911
4506*9ccd446eSAtari911### CSS Variables Used
4507*9ccd446eSAtari911
4508*9ccd446eSAtari911**DokuWiki provides**:
4509*9ccd446eSAtari911- `--__background_site__`: Page background
4510*9ccd446eSAtari911- `--__background_alt__`: Section backgrounds
4511*9ccd446eSAtari911- `--__background__`: Content backgrounds
4512*9ccd446eSAtari911- `--__text__`: Primary text color
4513*9ccd446eSAtari911- `--__link__`: Link color
4514*9ccd446eSAtari911- `--__text_neu__`: Dimmed text
4515*9ccd446eSAtari911- `--__border__`: Border color
4516*9ccd446eSAtari911- `--__background_neu__`: Neutral background
4517*9ccd446eSAtari911
4518*9ccd446eSAtari911**All with fallbacks**:
4519*9ccd446eSAtari911```css
4520*9ccd446eSAtari911var(--__background_site__, #f5f5f5)
4521*9ccd446eSAtari911/* Falls back to light gray if variable doesn't exist */
4522*9ccd446eSAtari911```
4523*9ccd446eSAtari911
4524*9ccd446eSAtari911### Perfect for Every Template
4525*9ccd446eSAtari911
4526*9ccd446eSAtari911**Custom templates**: Automatically adapts ✓
4527*9ccd446eSAtari911**Light themes**: Perfect match ✓
4528*9ccd446eSAtari911**Dark themes**: Perfect match ✓
4529*9ccd446eSAtari911**Any DokuWiki version**: Works with fallbacks ✓
4530*9ccd446eSAtari911
4531*9ccd446eSAtari911### Complete Theme Collection
4532*9ccd446eSAtari911
4533*9ccd446eSAtari911Now with **5 gorgeous themes**:
4534*9ccd446eSAtari911- 3 dark themes (Matrix, Purple, Pink)
4535*9ccd446eSAtari911- 1 light theme (Professional)
4536*9ccd446eSAtari911- 1 adaptive theme (Wiki Default) ← NEW!
4537*9ccd446eSAtari911
4538*9ccd446eSAtari911**Something for everyone!** ��
4539*9ccd446eSAtari911
4540*9ccd446eSAtari911## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS
4541*9ccd446eSAtari911
4542*9ccd446eSAtari911### �� Fixed: Checkbox Field Borders Themed
4543*9ccd446eSAtari911- **Fixed:** Added border-color to checkbox field divs
4544*9ccd446eSAtari911- **Fixed:** Repeating Event section border
4545*9ccd446eSAtari911- **Fixed:** Task checkbox section border
4546*9ccd446eSAtari911- **Result:** No white borders around checkboxes!
4547*9ccd446eSAtari911
4548*9ccd446eSAtari911### Changes
4549*9ccd446eSAtari911
4550*9ccd446eSAtari911**Checkbox Field Border Styling**:
4551*9ccd446eSAtari911
4552*9ccd446eSAtari911**Before**:
4553*9ccd446eSAtari911```html
4554*9ccd446eSAtari911<div class="form-field-checkbox"
4555*9ccd446eSAtari911     style="background: $bg !important;">
4556*9ccd446eSAtari911<!-- Border shows white ✗ -->
4557*9ccd446eSAtari911```
4558*9ccd446eSAtari911
4559*9ccd446eSAtari911**After**:
4560*9ccd446eSAtari911```php
4561*9ccd446eSAtari911<div class="form-field-checkbox"
4562*9ccd446eSAtari911     style="background: $bg !important;
4563*9ccd446eSAtari911            border-color: $grid_border !important;">
4564*9ccd446eSAtari911<!-- Border themed ✓ -->
4565*9ccd446eSAtari911```
4566*9ccd446eSAtari911
4567*9ccd446eSAtari911### Before vs After
4568*9ccd446eSAtari911
4569*9ccd446eSAtari911**BEFORE (v4.8.8)**:
4570*9ccd446eSAtari911```
4571*9ccd446eSAtari911Edit Dialog:
4572*9ccd446eSAtari911┌──────────────────┐
4573*9ccd446eSAtari911│ ☑ Repeating     ║│ ← White border ✗
4574*9ccd446eSAtari911└──────────────────┘
4575*9ccd446eSAtari911┌──────────────────┐
4576*9ccd446eSAtari911│ ☑ Task checkbox ║│ ← White border ✗
4577*9ccd446eSAtari911└──────────────────┘
4578*9ccd446eSAtari911```
4579*9ccd446eSAtari911
4580*9ccd446eSAtari911**AFTER (v4.9.0)**:
4581*9ccd446eSAtari911```
4582*9ccd446eSAtari911Matrix Edit Dialog:
4583*9ccd446eSAtari911┌──────────────────┐
4584*9ccd446eSAtari911│ ☑ Repeating      │ ← Green border ✓
4585*9ccd446eSAtari911└──────────────────┘
4586*9ccd446eSAtari911┌──────────────────┐
4587*9ccd446eSAtari911│ ☑ Task checkbox  │ ← Green border ✓
4588*9ccd446eSAtari911└──────────────────┘
4589*9ccd446eSAtari911```
4590*9ccd446eSAtari911
4591*9ccd446eSAtari911### ABSOLUTE PERFECTION ACHIEVED
4592*9ccd446eSAtari911
4593*9ccd446eSAtari911**Every element themed**:
4594*9ccd446eSAtari911- ✅ All inputs
4595*9ccd446eSAtari911- ✅ All labels
4596*9ccd446eSAtari911- ✅ All sections
4597*9ccd446eSAtari911- ✅ **Checkbox field borders** ← v4.9.0!
4598*9ccd446eSAtari911- ✅ All buttons
4599*9ccd446eSAtari911- ✅ All checkboxes
4600*9ccd446eSAtari911- ✅ No white anywhere
4601*9ccd446eSAtari911
4602*9ccd446eSAtari911**100% COMPLETE!** ��✨
4603*9ccd446eSAtari911
4604*9ccd446eSAtari911## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
4605*9ccd446eSAtari911
4606*9ccd446eSAtari911### �� Fixed: Checkbox Field Borders Themed
4607*9ccd446eSAtari911- **Fixed:** Added border-color to checkbox field divs
4608*9ccd446eSAtari911- **Fixed:** Repeating Event section border
4609*9ccd446eSAtari911- **Fixed:** Task checkbox section border
4610*9ccd446eSAtari911- **Result:** No white borders around checkboxes!
4611*9ccd446eSAtari911
4612*9ccd446eSAtari911### �� Fixed: Admin Sections Respect Wiki Theme
4613*9ccd446eSAtari911- **Fixed:** All admin backgrounds use CSS variables
4614*9ccd446eSAtari911- **Fixed:** Text colors use wiki text color
4615*9ccd446eSAtari911- **Fixed:** Borders use wiki border color
4616*9ccd446eSAtari911- **Result:** Admin matches wiki theme perfectly!
4617*9ccd446eSAtari911
4618*9ccd446eSAtari911### All Changes
4619*9ccd446eSAtari911
4620*9ccd446eSAtari911**1. Checkbox Field Border Styling**:
4621*9ccd446eSAtari911
4622*9ccd446eSAtari911**Before**:
4623*9ccd446eSAtari911```html
4624*9ccd446eSAtari911<div class="form-field-checkbox"
4625*9ccd446eSAtari911     style="background: $bg !important;">
4626*9ccd446eSAtari911<!-- Border shows white ✗ -->
4627*9ccd446eSAtari911```
4628*9ccd446eSAtari911
4629*9ccd446eSAtari911**After**:
4630*9ccd446eSAtari911```php
4631*9ccd446eSAtari911<div class="form-field-checkbox"
4632*9ccd446eSAtari911     style="background: $bg !important;
4633*9ccd446eSAtari911            border-color: $grid_border !important;">
4634*9ccd446eSAtari911<!-- Border themed ✓ -->
4635*9ccd446eSAtari911```
4636*9ccd446eSAtari911
4637*9ccd446eSAtari911**2. Admin CSS Variables**:
4638*9ccd446eSAtari911
4639*9ccd446eSAtari911**Added CSS variables for wiki theme compatibility**:
4640*9ccd446eSAtari911```css
4641*9ccd446eSAtari911.calendar-admin-wrapper {
4642*9ccd446eSAtari911    background: var(--__background_site__, #f5f5f5);
4643*9ccd446eSAtari911    color: var(--__text__, #333);
4644*9ccd446eSAtari911}
4645*9ccd446eSAtari911.calendar-admin-section {
4646*9ccd446eSAtari911    background: var(--__background_alt__, #fafafa);
4647*9ccd446eSAtari911}
4648*9ccd446eSAtari911.calendar-admin-input {
4649*9ccd446eSAtari911    background: var(--__background__, #fff);
4650*9ccd446eSAtari911    color: var(--__text__, #333);
4651*9ccd446eSAtari911}
4652*9ccd446eSAtari911```
4653*9ccd446eSAtari911
4654*9ccd446eSAtari911**Replaced hardcoded colors**:
4655*9ccd446eSAtari911```php
4656*9ccd446eSAtari911// Before:
4657*9ccd446eSAtari911background: #f9f9f9
4658*9ccd446eSAtari911background: white
4659*9ccd446eSAtari911color: #333
4660*9ccd446eSAtari911border: 1px solid #ddd
4661*9ccd446eSAtari911
4662*9ccd446eSAtari911// After:
4663*9ccd446eSAtari911background: var(--__background_alt__, #f9f9f9)
4664*9ccd446eSAtari911background: var(--__background__, #fff)
4665*9ccd446eSAtari911color: var(--__text__, #333)
4666*9ccd446eSAtari911border: 1px solid var(--__border__, #ddd)
4667*9ccd446eSAtari911```
4668*9ccd446eSAtari911
4669*9ccd446eSAtari911### Before vs After
4670*9ccd446eSAtari911
4671*9ccd446eSAtari911**BEFORE (v4.8.8)**:
4672*9ccd446eSAtari911```
4673*9ccd446eSAtari911Edit Dialog:
4674*9ccd446eSAtari911┌──────────────────┐
4675*9ccd446eSAtari911│ ☑ Repeating     ║│ ← White border ✗
4676*9ccd446eSAtari911└──────────────────┘
4677*9ccd446eSAtari911┌──────────────────┐
4678*9ccd446eSAtari911│ ☑ Task checkbox ║│ ← White border ✗
4679*9ccd446eSAtari911└──────────────────┘
4680*9ccd446eSAtari911
4681*9ccd446eSAtari911Admin Page (Dark Wiki Theme):
4682*9ccd446eSAtari911┌──────────────────┐
4683*9ccd446eSAtari911│ Light sections  │ ← White boxes ✗
4684*9ccd446eSAtari911│ Light inputs    │ ← Doesn't match ✗
4685*9ccd446eSAtari911└──────────────────┘
4686*9ccd446eSAtari911```
4687*9ccd446eSAtari911
4688*9ccd446eSAtari911**AFTER (v4.8.9)**:
4689*9ccd446eSAtari911```
4690*9ccd446eSAtari911Matrix Edit Dialog:
4691*9ccd446eSAtari911┌──────────────────┐
4692*9ccd446eSAtari911│ ☑ Repeating      │ ← Green border ✓
4693*9ccd446eSAtari911└──────────────────┘
4694*9ccd446eSAtari911┌──────────────────┐
4695*9ccd446eSAtari911│ ☑ Task checkbox  │ ← Green border ✓
4696*9ccd446eSAtari911└──────────────────┘
4697*9ccd446eSAtari911
4698*9ccd446eSAtari911Admin (Dark Wiki Theme):
4699*9ccd446eSAtari911┌──────────────────┐
4700*9ccd446eSAtari911│ Dark sections   │ ← Matches wiki ✓
4701*9ccd446eSAtari911│ Dark inputs     │ ← Perfect match ✓
4702*9ccd446eSAtari911└──────────────────┘
4703*9ccd446eSAtari911```
4704*9ccd446eSAtari911
4705*9ccd446eSAtari911### Admin Theme Examples
4706*9ccd446eSAtari911
4707*9ccd446eSAtari911**Light Wiki Theme**:
4708*9ccd446eSAtari911```
4709*9ccd446eSAtari911Admin page backgrounds: Light
4710*9ccd446eSAtari911Section boxes: Light gray
4711*9ccd446eSAtari911Inputs: White
4712*9ccd446eSAtari911Borders: Gray
4713*9ccd446eSAtari911Text: Dark
4714*9ccd446eSAtari911
4715*9ccd446eSAtari911Perfect match! ✓
4716*9ccd446eSAtari911```
4717*9ccd446eSAtari911
4718*9ccd446eSAtari911**Dark Wiki Theme**:
4719*9ccd446eSAtari911```
4720*9ccd446eSAtari911Admin page backgrounds: Dark
4721*9ccd446eSAtari911Section boxes: Darker gray
4722*9ccd446eSAtari911Inputs: Dark
4723*9ccd446eSAtari911Borders: Dark gray
4724*9ccd446eSAtari911Text: Light
4725*9ccd446eSAtari911
4726*9ccd446eSAtari911Perfect match! ✓
4727*9ccd446eSAtari911```
4728*9ccd446eSAtari911
4729*9ccd446eSAtari911**DokuWiki Default**:
4730*9ccd446eSAtari911```
4731*9ccd446eSAtari911Uses wiki's CSS variables
4732*9ccd446eSAtari911Automatically adapts
4733*9ccd446eSAtari911Always matches! ✓
4734*9ccd446eSAtari911```
4735*9ccd446eSAtari911
4736*9ccd446eSAtari911### Complete Coverage
4737*9ccd446eSAtari911
4738*9ccd446eSAtari911**Edit Dialog**:
4739*9ccd446eSAtari911- ✅ All inputs themed
4740*9ccd446eSAtari911- ✅ All labels themed
4741*9ccd446eSAtari911- ✅ All sections themed
4742*9ccd446eSAtari911- ✅ **Checkbox borders** ← v4.8.9!
4743*9ccd446eSAtari911- ✅ All buttons themed
4744*9ccd446eSAtari911- ✅ No white anywhere
4745*9ccd446eSAtari911
4746*9ccd446eSAtari911**Admin Interface**:
4747*9ccd446eSAtari911- ✅ **Tab navigation** ← v4.8.9!
4748*9ccd446eSAtari911- ✅ **Section boxes** ← v4.8.9!
4749*9ccd446eSAtari911- ✅ **Input fields** ← v4.8.9!
4750*9ccd446eSAtari911- ✅ **Text colors** ← v4.8.9!
4751*9ccd446eSAtari911- ✅ **Borders** ← v4.8.9!
4752*9ccd446eSAtari911- ✅ All tabs (Manage, Update, Outlook, Themes)
4753*9ccd446eSAtari911
4754*9ccd446eSAtari911### CSS Variables Used
4755*9ccd446eSAtari911
4756*9ccd446eSAtari911**DokuWiki provides these**:
4757*9ccd446eSAtari911- `--__background_site__`: Page background
4758*9ccd446eSAtari911- `--__background_alt__`: Alternate background
4759*9ccd446eSAtari911- `--__background__`: Primary background (inputs)
4760*9ccd446eSAtari911- `--__text__`: Text color
4761*9ccd446eSAtari911- `--__border__`: Border color
4762*9ccd446eSAtari911
4763*9ccd446eSAtari911**Fallbacks provided for older DokuWiki**:
4764*9ccd446eSAtari911```css
4765*9ccd446eSAtari911var(--__background_site__, #f5f5f5)
4766*9ccd446eSAtari911var(--__background_alt__, #fafafa)
4767*9ccd446eSAtari911var(--__background__, #fff)
4768*9ccd446eSAtari911var(--__text__, #333)
4769*9ccd446eSAtari911var(--__border__, #ddd)
4770*9ccd446eSAtari911```
4771*9ccd446eSAtari911
4772*9ccd446eSAtari911### Perfect Adaptation
4773*9ccd446eSAtari911
4774*9ccd446eSAtari911**Admin now adapts to ANY wiki theme**:
4775*9ccd446eSAtari911- Light themes → Light admin ✓
4776*9ccd446eSAtari911- Dark themes → Dark admin ✓
4777*9ccd446eSAtari911- Custom themes → Matches perfectly ✓
4778*9ccd446eSAtari911- No hardcoded colors ✓
4779*9ccd446eSAtari911
4780*9ccd446eSAtari911**Calendar themes still work**:
4781*9ccd446eSAtari911- Matrix, Purple, Professional, Pink ✓
4782*9ccd446eSAtari911- Independent from wiki theme ✓
4783*9ccd446eSAtari911- Admin respects wiki ✓
4784*9ccd446eSAtari911- Calendar respects calendar theme ✓
4785*9ccd446eSAtari911
4786*9ccd446eSAtari911### FINAL PERFECTION
4787*9ccd446eSAtari911
4788*9ccd446eSAtari911**Frontend (Calendar)**:
4789*9ccd446eSAtari911- Complete theming ✓
4790*9ccd446eSAtari911- 4 beautiful themes ✓
4791*9ccd446eSAtari911- Every pixel themed ✓
4792*9ccd446eSAtari911
4793*9ccd446eSAtari911**Backend (Admin)**:
4794*9ccd446eSAtari911- Respects wiki theme ✓
4795*9ccd446eSAtari911- Works with any theme ✓
4796*9ccd446eSAtari911- Perfect compatibility ✓
4797*9ccd446eSAtari911
4798*9ccd446eSAtari911**ABSOLUTELY EVERYTHING THEMED!** ����✨
4799*9ccd446eSAtari911
4800*9ccd446eSAtari911## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
4801*9ccd446eSAtari911
4802*9ccd446eSAtari911### �� Fixed: Task Checkboxes Now Fully Themed
4803*9ccd446eSAtari911- **Fixed:** Added background-color and border inline
4804*9ccd446eSAtari911- **Fixed:** Both PHP and JavaScript versions
4805*9ccd446eSAtari911- **Result:** No white checkboxes!
4806*9ccd446eSAtari911
4807*9ccd446eSAtari911### �� Fixed: Past Events Toggle Border
4808*9ccd446eSAtari911- **Fixed:** Added !important to border styling
4809*9ccd446eSAtari911- **Fixed:** Explicit top and bottom borders
4810*9ccd446eSAtari911- **Result:** No white line under toggle!
4811*9ccd446eSAtari911
4812*9ccd446eSAtari911### �� Fixed: Form Field Section Backgrounds
4813*9ccd446eSAtari911- **Fixed:** All form-field and form-row-group backgrounds
4814*9ccd446eSAtari911- **Fixed:** Every section in edit dialog
4815*9ccd446eSAtari911- **Result:** No white sections anywhere!
4816*9ccd446eSAtari911
4817*9ccd446eSAtari911### All Changes
4818*9ccd446eSAtari911
4819*9ccd446eSAtari911**1. Task Checkbox Styling**:
4820*9ccd446eSAtari911
4821*9ccd446eSAtari911**Before**:
4822*9ccd446eSAtari911```php
4823*9ccd446eSAtari911style="accent-color: $border !important;"
4824*9ccd446eSAtari911<!-- Only accent, background still white ✗ -->
4825*9ccd446eSAtari911```
4826*9ccd446eSAtari911
4827*9ccd446eSAtari911**After**:
4828*9ccd446eSAtari911```php
4829*9ccd446eSAtari911style="accent-color: $border !important;
4830*9ccd446eSAtari911       background-color: $cell_bg !important;
4831*9ccd446eSAtari911       border: 2px solid $grid_border !important;"
4832*9ccd446eSAtari911<!-- Full theming ✓ -->
4833*9ccd446eSAtari911```
4834*9ccd446eSAtari911
4835*9ccd446eSAtari911**2. Past Events Toggle Border**:
4836*9ccd446eSAtari911
4837*9ccd446eSAtari911**Before**:
4838*9ccd446eSAtari911```php
4839*9ccd446eSAtari911style="border-color: $grid_border;"
4840*9ccd446eSAtari911<!-- No !important, CSS overrides ✗ -->
4841*9ccd446eSAtari911```
4842*9ccd446eSAtari911
4843*9ccd446eSAtari911**After**:
4844*9ccd446eSAtari911```php
4845*9ccd446eSAtari911style="border-color: $grid_border !important;
4846*9ccd446eSAtari911       border-top: 1px solid $grid_border !important;
4847*9ccd446eSAtari911       border-bottom: 1px solid $grid_border !important;"
4848*9ccd446eSAtari911<!-- Cannot be overridden ✓ -->
4849*9ccd446eSAtari911```
4850*9ccd446eSAtari911
4851*9ccd446eSAtari911**3. Form Field Backgrounds**:
4852*9ccd446eSAtari911
4853*9ccd446eSAtari911**Before**:
4854*9ccd446eSAtari911```html
4855*9ccd446eSAtari911<div class="form-field">
4856*9ccd446eSAtari911<div class="form-row-group">
4857*9ccd446eSAtari911<!-- No background, shows white ✗ -->
4858*9ccd446eSAtari911```
4859*9ccd446eSAtari911
4860*9ccd446eSAtari911**After**:
4861*9ccd446eSAtari911```php
4862*9ccd446eSAtari911<div class="form-field" style="background: $bg !important;">
4863*9ccd446eSAtari911<div class="form-row-group" style="background: $bg !important;">
4864*9ccd446eSAtari911<!-- Fully themed ✓ -->
4865*9ccd446eSAtari911```
4866*9ccd446eSAtari911
4867*9ccd446eSAtari911### Before vs After
4868*9ccd446eSAtari911
4869*9ccd446eSAtari911**BEFORE (v4.8.7)**:
4870*9ccd446eSAtari911```
4871*9ccd446eSAtari911Event:
4872*9ccd446eSAtari911□ Task checkbox  ← White checkbox ✗
4873*9ccd446eSAtari911
4874*9ccd446eSAtari911Past Events
4875*9ccd446eSAtari911▶ Past Events (3) ← White line below ✗
4876*9ccd446eSAtari911─────────────────
4877*9ccd446eSAtari911
4878*9ccd446eSAtari911Edit Dialog:
4879*9ccd446eSAtari911┌──────────────┐
4880*9ccd446eSAtari911│ Form fields  │ ← White sections ✗
4881*9ccd446eSAtari911└──────────────┘
4882*9ccd446eSAtari911```
4883*9ccd446eSAtari911
4884*9ccd446eSAtari911**AFTER (v4.8.8)**:
4885*9ccd446eSAtari911```
4886*9ccd446eSAtari911Matrix Event:
4887*9ccd446eSAtari911☑ Task checkbox  ← Green checkbox ✓
4888*9ccd446eSAtari911
4889*9ccd446eSAtari911Past Events
4890*9ccd446eSAtari911▶ Past Events (3) ← Green border ✓
4891*9ccd446eSAtari911─────────────────
4892*9ccd446eSAtari911
4893*9ccd446eSAtari911Matrix Edit Dialog:
4894*9ccd446eSAtari911┌──────────────┐
4895*9ccd446eSAtari911│ Form fields  │ ← Dark green ✓
4896*9ccd446eSAtari911└──────────────┘
4897*9ccd446eSAtari911```
4898*9ccd446eSAtari911
4899*9ccd446eSAtari911### Complete Examples
4900*9ccd446eSAtari911
4901*9ccd446eSAtari911**Matrix Theme**:
4902*9ccd446eSAtari911```
4903*9ccd446eSAtari911Task Checkbox:
4904*9ccd446eSAtari911☑ Checked   → Green checkmark, green bg
4905*9ccd446eSAtari911☐ Unchecked → Green border, dark green bg ✓
4906*9ccd446eSAtari911
4907*9ccd446eSAtari911Past Events Toggle:
4908*9ccd446eSAtari911▶ Past Events (3)
4909*9ccd446eSAtari911─────────────────── Green border ✓
4910*9ccd446eSAtari911
4911*9ccd446eSAtari911Edit Dialog:
4912*9ccd446eSAtari911All sections dark green ✓
4913*9ccd446eSAtari911No white anywhere ✓
4914*9ccd446eSAtari911```
4915*9ccd446eSAtari911
4916*9ccd446eSAtari911**Purple Theme**:
4917*9ccd446eSAtari911```
4918*9ccd446eSAtari911Task Checkbox:
4919*9ccd446eSAtari911☑ Checked   → Purple checkmark, purple bg
4920*9ccd446eSAtari911☐ Unchecked → Purple border, dark purple bg ✓
4921*9ccd446eSAtari911
4922*9ccd446eSAtari911Past Events Toggle:
4923*9ccd446eSAtari911▶ Past Events (3)
4924*9ccd446eSAtari911─────────────────── Purple border ✓
4925*9ccd446eSAtari911
4926*9ccd446eSAtari911Edit Dialog:
4927*9ccd446eSAtari911All sections dark purple ✓
4928*9ccd446eSAtari911```
4929*9ccd446eSAtari911
4930*9ccd446eSAtari911**Professional Theme**:
4931*9ccd446eSAtari911```
4932*9ccd446eSAtari911Task Checkbox:
4933*9ccd446eSAtari911☑ Checked   → Blue checkmark, white bg
4934*9ccd446eSAtari911☐ Unchecked → Gray border, white bg ✓
4935*9ccd446eSAtari911
4936*9ccd446eSAtari911Past Events Toggle:
4937*9ccd446eSAtari911▶ Past Events (3)
4938*9ccd446eSAtari911─────────────────── Gray border ✓
4939*9ccd446eSAtari911
4940*9ccd446eSAtari911Edit Dialog:
4941*9ccd446eSAtari911All sections light ✓
4942*9ccd446eSAtari911```
4943*9ccd446eSAtari911
4944*9ccd446eSAtari911**Pink Theme**:
4945*9ccd446eSAtari911```
4946*9ccd446eSAtari911Task Checkbox:
4947*9ccd446eSAtari911☑ Checked   → Pink checkmark, pink bg ✨
4948*9ccd446eSAtari911☐ Unchecked → Pink border, dark pink bg ✓
4949*9ccd446eSAtari911
4950*9ccd446eSAtari911Past Events Toggle:
4951*9ccd446eSAtari911▶ Past Events (3)
4952*9ccd446eSAtari911─────────────────── Pink border ��
4953*9ccd446eSAtari911
4954*9ccd446eSAtari911Edit Dialog:
4955*9ccd446eSAtari911All sections dark pink ✓
4956*9ccd446eSAtari911```
4957*9ccd446eSAtari911
4958*9ccd446eSAtari911### Checkbox Visual
4959*9ccd446eSAtari911
4960*9ccd446eSAtari911**Matrix - Unchecked**:
4961*9ccd446eSAtari911```
4962*9ccd446eSAtari911┌─────┐
4963*9ccd446eSAtari911│     │ ← Dark green background
4964*9ccd446eSAtari911│     │   Green border
4965*9ccd446eSAtari911└─────┘
4966*9ccd446eSAtari911```
4967*9ccd446eSAtari911
4968*9ccd446eSAtari911**Matrix - Checked**:
4969*9ccd446eSAtari911```
4970*9ccd446eSAtari911┌─────┐
4971*9ccd446eSAtari911│ ✓   │ ← Dark green background
4972*9ccd446eSAtari911│     │   Green checkmark
4973*9ccd446eSAtari911└─────┘
4974*9ccd446eSAtari911```
4975*9ccd446eSAtari911
4976*9ccd446eSAtari911### Past Events Border
4977*9ccd446eSAtari911
4978*9ccd446eSAtari911**Before**:
4979*9ccd446eSAtari911```
4980*9ccd446eSAtari911▶ Past Events (3)
4981*9ccd446eSAtari911─────────────────── White line ✗
4982*9ccd446eSAtari911```
4983*9ccd446eSAtari911
4984*9ccd446eSAtari911**After**:
4985*9ccd446eSAtari911```
4986*9ccd446eSAtari911▶ Past Events (3)
4987*9ccd446eSAtari911─────────────────── Green line ✓ (Matrix)
4988*9ccd446eSAtari911                    Purple line ✓ (Purple)
4989*9ccd446eSAtari911                    Gray line ✓ (Professional)
4990*9ccd446eSAtari911                    Pink line ✓ (Pink)
4991*9ccd446eSAtari911```
4992*9ccd446eSAtari911
4993*9ccd446eSAtari911### Form Field Coverage
4994*9ccd446eSAtari911
4995*9ccd446eSAtari911**All sections themed**:
4996*9ccd446eSAtari911- ✅ Title field
4997*9ccd446eSAtari911- ✅ Namespace field
4998*9ccd446eSAtari911- ✅ Description field
4999*9ccd446eSAtari911- ✅ **Date row** ← v4.8.8!
5000*9ccd446eSAtari911- ✅ **Checkbox sections** ← v4.8.8!
5001*9ccd446eSAtari911- ✅ **Recurring options** ← v4.8.8!
5002*9ccd446eSAtari911- ✅ **Time row** ← v4.8.8!
5003*9ccd446eSAtari911- ✅ **Color row** ← v4.8.8!
5004*9ccd446eSAtari911- ✅ Button footer
5005*9ccd446eSAtari911
5006*9ccd446eSAtari911**Every div has background!** ✓
5007*9ccd446eSAtari911
5008*9ccd446eSAtari911### ABSOLUTE PERFECTION
5009*9ccd446eSAtari911
5010*9ccd446eSAtari911**Not a single white pixel**:
5011*9ccd446eSAtari911- ✅ No white checkboxes
5012*9ccd446eSAtari911- ✅ No white borders
5013*9ccd446eSAtari911- ✅ No white backgrounds
5014*9ccd446eSAtari911- ✅ No white sections
5015*9ccd446eSAtari911- ✅ No white lines
5016*9ccd446eSAtari911- ✅ No white anything
5017*9ccd446eSAtari911
5018*9ccd446eSAtari911**100% PERFECT THEMING!** ����✨
5019*9ccd446eSAtari911
5020*9ccd446eSAtari911## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING
5021*9ccd446eSAtari911
5022*9ccd446eSAtari911### �� Fixed: Checkbox Section Backgrounds Themed
5023*9ccd446eSAtari911- **Fixed:** Repeating Event section background
5024*9ccd446eSAtari911- **Fixed:** Task checkbox section background
5025*9ccd446eSAtari911- **Result:** No white backgrounds in dialog!
5026*9ccd446eSAtari911
5027*9ccd446eSAtari911### �� Fixed: Unchecked Task Checkboxes Themed
5028*9ccd446eSAtari911- **Fixed:** Added CSS for checkbox backgrounds
5029*9ccd446eSAtari911- **Fixed:** Unchecked boxes show theme colors
5030*9ccd446eSAtari911- **Result:** No white checkboxes!
5031*9ccd446eSAtari911
5032*9ccd446eSAtari911### �� Fixed: Day Popup Dialog Fully Themed
5033*9ccd446eSAtari911- **Fixed:** Popup container, header, body themed
5034*9ccd446eSAtari911- **Fixed:** Event items in popup themed
5035*9ccd446eSAtari911- **Fixed:** Add Event button themed
5036*9ccd446eSAtari911- **Fixed:** Footer section themed
5037*9ccd446eSAtari911- **Result:** Perfect popup theming!
5038*9ccd446eSAtari911
5039*9ccd446eSAtari911### All Changes
5040*9ccd446eSAtari911
5041*9ccd446eSAtari911**1. Checkbox Section Backgrounds**:
5042*9ccd446eSAtari911
5043*9ccd446eSAtari911**Before**:
5044*9ccd446eSAtari911```html
5045*9ccd446eSAtari911<div class="form-field-checkbox">
5046*9ccd446eSAtari911<!-- White background ✗ -->
5047*9ccd446eSAtari911```
5048*9ccd446eSAtari911
5049*9ccd446eSAtari911**After**:
5050*9ccd446eSAtari911```php
5051*9ccd446eSAtari911<div class="form-field-checkbox"
5052*9ccd446eSAtari911     style="background: $bg !important;">
5053*9ccd446eSAtari911<!-- Themed ✓ -->
5054*9ccd446eSAtari911```
5055*9ccd446eSAtari911
5056*9ccd446eSAtari911**2. Checkbox Background CSS**:
5057*9ccd446eSAtari911
5058*9ccd446eSAtari911**Added to style block**:
5059*9ccd446eSAtari911```css
5060*9ccd446eSAtari911.task-checkbox {
5061*9ccd446eSAtari911    background-color: $cell_bg !important;
5062*9ccd446eSAtari911    border: 2px solid $grid_border !important;
5063*9ccd446eSAtari911}
5064*9ccd446eSAtari911```
5065*9ccd446eSAtari911
5066*9ccd446eSAtari911**3. Day Popup Theming**:
5067*9ccd446eSAtari911
5068*9ccd446eSAtari911**Container**:
5069*9ccd446eSAtari911```javascript
5070*9ccd446eSAtari911style="background: $bg !important;
5071*9ccd446eSAtari911       border: 2px solid $border !important;
5072*9ccd446eSAtari911       box-shadow: 0 0 20px $shadow !important;"
5073*9ccd446eSAtari911```
5074*9ccd446eSAtari911
5075*9ccd446eSAtari911**Header**:
5076*9ccd446eSAtari911```javascript
5077*9ccd446eSAtari911style="background: $header_bg !important;
5078*9ccd446eSAtari911       color: $text_primary !important;
5079*9ccd446eSAtari911       border-bottom: 1px solid $border !important;"
5080*9ccd446eSAtari911```
5081*9ccd446eSAtari911
5082*9ccd446eSAtari911**Footer**:
5083*9ccd446eSAtari911```javascript
5084*9ccd446eSAtari911style="background: $bg !important;
5085*9ccd446eSAtari911       border-top: 1px solid $grid_border !important;"
5086*9ccd446eSAtari911```
5087*9ccd446eSAtari911
5088*9ccd446eSAtari911**Add Event Button**:
5089*9ccd446eSAtari911```javascript
5090*9ccd446eSAtari911style="background: $border !important;
5091*9ccd446eSAtari911       color: $bg !important;
5092*9ccd446eSAtari911       border-color: $border !important;"
5093*9ccd446eSAtari911```
5094*9ccd446eSAtari911
5095*9ccd446eSAtari911**Event Items**:
5096*9ccd446eSAtari911```javascript
5097*9ccd446eSAtari911style="background: $cell_bg !important;
5098*9ccd446eSAtari911       border: 1px solid $grid_border !important;"
5099*9ccd446eSAtari911```
5100*9ccd446eSAtari911
5101*9ccd446eSAtari911### Before vs After
5102*9ccd446eSAtari911
5103*9ccd446eSAtari911**BEFORE (v4.8.6)**:
5104*9ccd446eSAtari911```
5105*9ccd446eSAtari911Edit Dialog:
5106*9ccd446eSAtari911┌──────────────────┐
5107*9ccd446eSAtari911│ ☑ Repeating Event│ ← White background ✗
5108*9ccd446eSAtari911├──────────────────┤
5109*9ccd446eSAtari911│ ☑ Task checkbox  │ ← White background ✗
5110*9ccd446eSAtari911└──────────────────┘
5111*9ccd446eSAtari911
5112*9ccd446eSAtari911Day Popup:
5113*9ccd446eSAtari911┌──────────────────┐
5114*9ccd446eSAtari911│ Monday, Feb 8    │ ← White ✗
5115*9ccd446eSAtari911├──────────────────┤
5116*9ccd446eSAtari911│ Team Meeting     │ ← White ✗
5117*9ccd446eSAtari911│ 2:00 PM          │
5118*9ccd446eSAtari911├──────────────────┤
5119*9ccd446eSAtari911│ [+ Add Event]    │ ← White ✗
5120*9ccd446eSAtari911└──────────────────┘
5121*9ccd446eSAtari911
5122*9ccd446eSAtari911Task checkbox: ☐ ← White ✗
5123*9ccd446eSAtari911```
5124*9ccd446eSAtari911
5125*9ccd446eSAtari911**AFTER (v4.8.7)**:
5126*9ccd446eSAtari911```
5127*9ccd446eSAtari911Edit Dialog (Matrix):
5128*9ccd446eSAtari911┌──────────────────┐
5129*9ccd446eSAtari911│ ☑ Repeating Event│ ← Dark green ✓
5130*9ccd446eSAtari911├──────────────────┤
5131*9ccd446eSAtari911│ ☑ Task checkbox  │ ← Dark green ✓
5132*9ccd446eSAtari911└──────────────────┘
5133*9ccd446eSAtari911
5134*9ccd446eSAtari911Day Popup (Matrix):
5135*9ccd446eSAtari911┌──────────────────┐
5136*9ccd446eSAtari911│ Monday, Feb 8    │ ← Dark green ✓
5137*9ccd446eSAtari911├──────────────────┤
5138*9ccd446eSAtari911│ Team Meeting     │ ← Dark green ✓
5139*9ccd446eSAtari911│ 2:00 PM          │
5140*9ccd446eSAtari911├──────────────────┤
5141*9ccd446eSAtari911│ [+ Add Event]    │ ← Green button ✓
5142*9ccd446eSAtari911└──────────────────┘
5143*9ccd446eSAtari911
5144*9ccd446eSAtari911Task checkbox: ☑ ← Green ✓
5145*9ccd446eSAtari911```
5146*9ccd446eSAtari911
5147*9ccd446eSAtari911### Complete Examples
5148*9ccd446eSAtari911
5149*9ccd446eSAtari911**Matrix Dialog**:
5150*9ccd446eSAtari911```
5151*9ccd446eSAtari911┌──────────────────────────┐
5152*9ccd446eSAtari911│ ✏️ Edit Event            │
5153*9ccd446eSAtari911├──────────────────────────┤
5154*9ccd446eSAtari911│ �� Title: [_________]    │
5155*9ccd446eSAtari911│ �� Date: [__________]    │
5156*9ccd446eSAtari911│                          │
5157*9ccd446eSAtari911│ ☑ �� Repeating Event     │ ← Dark green bg
5158*9ccd446eSAtari911├──────────────────────────┤
5159*9ccd446eSAtari911│ ☑ �� Task checkbox       │ ← Dark green bg
5160*9ccd446eSAtari911├──────────────────────────┤
5161*9ccd446eSAtari911│ [Cancel] [�� Save]       │
5162*9ccd446eSAtari911└──────────────────────────┘
5163*9ccd446eSAtari911
5164*9ccd446eSAtari911All sections themed! ✓
5165*9ccd446eSAtari911```
5166*9ccd446eSAtari911
5167*9ccd446eSAtari911**Matrix Day Popup**:
5168*9ccd446eSAtari911```
5169*9ccd446eSAtari911┌──────────────────────────┐
5170*9ccd446eSAtari911│ Monday, February 8, 2026 │ ← Green header
5171*9ccd446eSAtari911├──────────────────────────┤
5172*9ccd446eSAtari911│ ┌──────────────────────┐ │
5173*9ccd446eSAtari911│ │ Team Meeting         │ │ ← Dark green
5174*9ccd446eSAtari911│ │ �� 2:00 PM           │ │
5175*9ccd446eSAtari911│ └──────────────────────┘ │
5176*9ccd446eSAtari911│ ┌──────────────────────┐ │
5177*9ccd446eSAtari911│ │ Code Review          │ │ ← Dark green
5178*9ccd446eSAtari911│ │ �� 4:00 PM           │ │
5179*9ccd446eSAtari911│ └──────────────────────┘ │
5180*9ccd446eSAtari911├──────────────────────────┤
5181*9ccd446eSAtari911│   [+ Add Event]          │ ← Green button
5182*9ccd446eSAtari911└──────────────────────────┘
5183*9ccd446eSAtari911```
5184*9ccd446eSAtari911
5185*9ccd446eSAtari911**Purple Day Popup**:
5186*9ccd446eSAtari911```
5187*9ccd446eSAtari911┌──────────────────────────┐
5188*9ccd446eSAtari911│ Monday, February 8, 2026 │ ← Purple header
5189*9ccd446eSAtari911├──────────────────────────┤
5190*9ccd446eSAtari911│ ┌──────────────────────┐ │
5191*9ccd446eSAtari911│ │ Team Meeting         │ │ ← Dark purple
5192*9ccd446eSAtari911│ │ �� 2:00 PM           │ │
5193*9ccd446eSAtari911│ └──────────────────────┘ │
5194*9ccd446eSAtari911├──────────────────────────┤
5195*9ccd446eSAtari911│   [+ Add Event]          │ ← Purple button
5196*9ccd446eSAtari911└──────────────────────────┘
5197*9ccd446eSAtari911```
5198*9ccd446eSAtari911
5199*9ccd446eSAtari911**Professional Day Popup**:
5200*9ccd446eSAtari911```
5201*9ccd446eSAtari911┌──────────────────────────┐
5202*9ccd446eSAtari911│ Monday, February 8, 2026 │ ← Light header
5203*9ccd446eSAtari911├──────────────────────────┤
5204*9ccd446eSAtari911│ ┌──────────────────────┐ │
5205*9ccd446eSAtari911│ │ Team Meeting         │ │ ← White
5206*9ccd446eSAtari911│ │ �� 2:00 PM           │ │
5207*9ccd446eSAtari911│ └──────────────────────┘ │
5208*9ccd446eSAtari911├──────────────────────────┤
5209*9ccd446eSAtari911│   [+ Add Event]          │ ← Blue button
5210*9ccd446eSAtari911└──────────────────────────┘
5211*9ccd446eSAtari911```
5212*9ccd446eSAtari911
5213*9ccd446eSAtari911**Pink Day Popup**:
5214*9ccd446eSAtari911```
5215*9ccd446eSAtari911┌──────────────────────────┐
5216*9ccd446eSAtari911│ Monday, February 8, 2026 │ ← Pink header ✨
5217*9ccd446eSAtari911├──────────────────────────┤
5218*9ccd446eSAtari911│ ┌──────────────────────┐ │
5219*9ccd446eSAtari911│ │ Team Meeting ��      │ │ ← Dark pink
5220*9ccd446eSAtari911│ │ �� 2:00 PM           │ │
5221*9ccd446eSAtari911│ └──────────────────────┘ │
5222*9ccd446eSAtari911├──────────────────────────┤
5223*9ccd446eSAtari911│   [+ Add Event]          │ ← Pink button
5224*9ccd446eSAtari911└──────────────────────────┘
5225*9ccd446eSAtari911```
5226*9ccd446eSAtari911
5227*9ccd446eSAtari911### Checkbox Theming
5228*9ccd446eSAtari911
5229*9ccd446eSAtari911**Unchecked boxes now themed**:
5230*9ccd446eSAtari911```
5231*9ccd446eSAtari911Matrix:
5232*9ccd446eSAtari911☐ → Dark green bg, green border ✓
5233*9ccd446eSAtari911
5234*9ccd446eSAtari911Purple:
5235*9ccd446eSAtari911☐ → Dark purple bg, purple border ✓
5236*9ccd446eSAtari911
5237*9ccd446eSAtari911Professional:
5238*9ccd446eSAtari911☐ → White bg, gray border ✓
5239*9ccd446eSAtari911
5240*9ccd446eSAtari911Pink:
5241*9ccd446eSAtari911☐ → Dark pink bg, pink border ✓
5242*9ccd446eSAtari911```
5243*9ccd446eSAtari911
5244*9ccd446eSAtari911### Complete Coverage
5245*9ccd446eSAtari911
5246*9ccd446eSAtari911**Edit Dialog - All Sections**:
5247*9ccd446eSAtari911- ✅ Header
5248*9ccd446eSAtari911- ✅ All inputs
5249*9ccd446eSAtari911- ✅ All labels
5250*9ccd446eSAtari911- ✅ **Checkbox sections** ← v4.8.7!
5251*9ccd446eSAtari911- ✅ Recurring options
5252*9ccd446eSAtari911- ✅ Button footer
5253*9ccd446eSAtari911- ✅ All checkboxes (checked & unchecked)
5254*9ccd446eSAtari911
5255*9ccd446eSAtari911**Day Popup - All Elements**:
5256*9ccd446eSAtari911- ✅ **Popup container** ← v4.8.7!
5257*9ccd446eSAtari911- ✅ **Header** ← v4.8.7!
5258*9ccd446eSAtari911- ✅ **Body** ← v4.8.7!
5259*9ccd446eSAtari911- ✅ **Event items** ← v4.8.7!
5260*9ccd446eSAtari911- ✅ **Namespace badges** ← v4.8.7!
5261*9ccd446eSAtari911- ✅ **Footer** ← v4.8.7!
5262*9ccd446eSAtari911- ✅ **Add Event button** ← v4.8.7!
5263*9ccd446eSAtari911- ✅ **No events message** ← v4.8.7!
5264*9ccd446eSAtari911
5265*9ccd446eSAtari911**Absolutely every dialog element themed!** ��✨
5266*9ccd446eSAtari911
5267*9ccd446eSAtari911### Perfect Theming Achievement
5268*9ccd446eSAtari911
5269*9ccd446eSAtari911**Every UI component in entire plugin**:
5270*9ccd446eSAtari911- ✅ Calendar grid
5271*9ccd446eSAtari911- ✅ Sidebar widget
5272*9ccd446eSAtari911- ✅ Event list
5273*9ccd446eSAtari911- ✅ Search bar
5274*9ccd446eSAtari911- ✅ Event boxes
5275*9ccd446eSAtari911- ✅ Edit dialog (complete)
5276*9ccd446eSAtari911- ✅ **Day popup** ← v4.8.7!
5277*9ccd446eSAtari911- ✅ Month picker
5278*9ccd446eSAtari911- ✅ All text
5279*9ccd446eSAtari911- ✅ All buttons
5280*9ccd446eSAtari911- ✅ All inputs
5281*9ccd446eSAtari911- ✅ **All checkboxes** ← v4.8.7!
5282*9ccd446eSAtari911- ✅ All borders
5283*9ccd446eSAtari911- ✅ All badges
5284*9ccd446eSAtari911- ✅ All backgrounds
5285*9ccd446eSAtari911
5286*9ccd446eSAtari911**NO WHITE ANYWHERE!** ��
5287*9ccd446eSAtari911
5288*9ccd446eSAtari911**100% COMPLETE THEMING ACHIEVED!** ��✨��
5289*9ccd446eSAtari911
5290*9ccd446eSAtari911## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS
5291*9ccd446eSAtari911
5292*9ccd446eSAtari911### �� Fixed: Dialog Checkbox Sections Themed
5293*9ccd446eSAtari911- **Fixed:** Recurring options section background themed
5294*9ccd446eSAtari911- **Fixed:** Section has themed border accent
5295*9ccd446eSAtari911- **Result:** No white sections in dialog!
5296*9ccd446eSAtari911
5297*9ccd446eSAtari911### �� Fixed: Dialog Button Section Themed
5298*9ccd446eSAtari911- **Fixed:** Button area background themed
5299*9ccd446eSAtari911- **Fixed:** Top border separator themed
5300*9ccd446eSAtari911- **Result:** Complete dialog theming!
5301*9ccd446eSAtari911
5302*9ccd446eSAtari911### �� Fixed: Event Box Borders Themed
5303*9ccd446eSAtari911- **Fixed:** Top, right, bottom borders now themed
5304*9ccd446eSAtari911- **Fixed:** Left border remains event color
5305*9ccd446eSAtari911- **Result:** Perfect event boxes!
5306*9ccd446eSAtari911
5307*9ccd446eSAtari911### All Changes
5308*9ccd446eSAtari911
5309*9ccd446eSAtari911**1. Recurring Options Section**:
5310*9ccd446eSAtari911
5311*9ccd446eSAtari911**Before**:
5312*9ccd446eSAtari911```html
5313*9ccd446eSAtari911<div class="recurring-options" style="display:none;">
5314*9ccd446eSAtari911<!-- White background ✗ -->
5315*9ccd446eSAtari911```
5316*9ccd446eSAtari911
5317*9ccd446eSAtari911**After**:
5318*9ccd446eSAtari911```php
5319*9ccd446eSAtari911<div class="recurring-options"
5320*9ccd446eSAtari911     style="display:none;
5321*9ccd446eSAtari911            background: $bg !important;
5322*9ccd446eSAtari911            padding: 8px;
5323*9ccd446eSAtari911            border-left: 2px solid $border;
5324*9ccd446eSAtari911            margin-left: 4px;">
5325*9ccd446eSAtari911<!-- Themed with accent border ✓ -->
5326*9ccd446eSAtari911```
5327*9ccd446eSAtari911
5328*9ccd446eSAtari911**2. Dialog Actions Section**:
5329*9ccd446eSAtari911
5330*9ccd446eSAtari911**Before**:
5331*9ccd446eSAtari911```html
5332*9ccd446eSAtari911<div class="dialog-actions-sleek">
5333*9ccd446eSAtari911<!-- White background ✗ -->
5334*9ccd446eSAtari911```
5335*9ccd446eSAtari911
5336*9ccd446eSAtari911**After**:
5337*9ccd446eSAtari911```php
5338*9ccd446eSAtari911<div class="dialog-actions-sleek"
5339*9ccd446eSAtari911     style="background: $bg !important;
5340*9ccd446eSAtari911            border-top: 1px solid $grid_border !important;">
5341*9ccd446eSAtari911<!-- Themed with separator ✓ -->
5342*9ccd446eSAtari911```
5343*9ccd446eSAtari911
5344*9ccd446eSAtari911**3. Event Box Borders**:
5345*9ccd446eSAtari911
5346*9ccd446eSAtari911**Before**:
5347*9ccd446eSAtari911```php
5348*9ccd446eSAtari911border-left-color: $event_color;
5349*9ccd446eSAtari911<!-- Only left border colored ✗ -->
5350*9ccd446eSAtari911```
5351*9ccd446eSAtari911
5352*9ccd446eSAtari911**After**:
5353*9ccd446eSAtari911```php
5354*9ccd446eSAtari911border-left-color: $event_color;
5355*9ccd446eSAtari911border-top: 1px solid $grid_border !important;
5356*9ccd446eSAtari911border-right: 1px solid $grid_border !important;
5357*9ccd446eSAtari911border-bottom: 1px solid $grid_border !important;
5358*9ccd446eSAtari911<!-- All borders themed! ✓ -->
5359*9ccd446eSAtari911```
5360*9ccd446eSAtari911
5361*9ccd446eSAtari911### Before vs After
5362*9ccd446eSAtari911
5363*9ccd446eSAtari911**BEFORE (v4.8.5)**:
5364*9ccd446eSAtari911```
5365*9ccd446eSAtari911Dialog:
5366*9ccd446eSAtari911┌────────────────┐
5367*9ccd446eSAtari911│ ☑ Repeating    │
5368*9ccd446eSAtari911├────────────────┤ ← White section ✗
5369*9ccd446eSAtari911│ Repeat: Daily  │
5370*9ccd446eSAtari911│ Until: [____]  │
5371*9ccd446eSAtari911├────────────────┤
5372*9ccd446eSAtari911│ [Cancel] [Save]│ ← White footer ✗
5373*9ccd446eSAtari911└────────────────┘
5374*9ccd446eSAtari911
5375*9ccd446eSAtari911Event Box:
5376*9ccd446eSAtari911┌────────────┐
5377*9ccd446eSAtari911│Team Meeting│ ← White borders ✗
5378*9ccd446eSAtari911│2:00 PM     │
5379*9ccd446eSAtari911└────────────┘
5380*9ccd446eSAtari911```
5381*9ccd446eSAtari911
5382*9ccd446eSAtari911**AFTER (v4.8.6)**:
5383*9ccd446eSAtari911```
5384*9ccd446eSAtari911Matrix Dialog:
5385*9ccd446eSAtari911┌────────────────┐
5386*9ccd446eSAtari911│ ☑ Repeating    │
5387*9ccd446eSAtari911├────────────────┤ ← Dark green ✓
5388*9ccd446eSAtari911│ Repeat: Daily  │ Green accent border
5389*9ccd446eSAtari911│ Until: [____]  │
5390*9ccd446eSAtari911├────────────────┤
5391*9ccd446eSAtari911│ [Cancel] [Save]│ ← Dark green ✓
5392*9ccd446eSAtari911└────────────────┘
5393*9ccd446eSAtari911
5394*9ccd446eSAtari911Matrix Event Box:
5395*9ccd446eSAtari911┌────────────┐
5396*9ccd446eSAtari911│Team Meeting│ ← Green borders ✓
5397*9ccd446eSAtari911│2:00 PM     │
5398*9ccd446eSAtari911└────────────┘
5399*9ccd446eSAtari911```
5400*9ccd446eSAtari911
5401*9ccd446eSAtari911### Dialog Section Examples
5402*9ccd446eSAtari911
5403*9ccd446eSAtari911**Matrix Theme**:
5404*9ccd446eSAtari911```
5405*9ccd446eSAtari911┌──────────────────────────┐
5406*9ccd446eSAtari911│ ✏️ Edit Event            │
5407*9ccd446eSAtari911├──────────────────────────┤
5408*9ccd446eSAtari911│ ☑ �� Repeating Event     │
5409*9ccd446eSAtari911├║─────────────────────────┤ Green accent
5410*9ccd446eSAtari911│║ Repeat Every: Daily     │ Dark green bg
5411*9ccd446eSAtari911│║ Repeat Until: [_____]   │
5412*9ccd446eSAtari911└──────────────────────────┘
5413*9ccd446eSAtari911  [Cancel] [�� Save]       ← Dark green bg
5414*9ccd446eSAtari911──────────────────────────── Green border
5415*9ccd446eSAtari911```
5416*9ccd446eSAtari911
5417*9ccd446eSAtari911**Purple Theme**:
5418*9ccd446eSAtari911```
5419*9ccd446eSAtari911┌──────────────────────────┐
5420*9ccd446eSAtari911│ ☑ �� Repeating Event     │
5421*9ccd446eSAtari911├║─────────────────────────┤ Purple accent
5422*9ccd446eSAtari911│║ Repeat options...       │ Dark purple bg
5423*9ccd446eSAtari911└──────────────────────────┘
5424*9ccd446eSAtari911  [Cancel] [�� Save]       ← Dark purple bg
5425*9ccd446eSAtari911──────────────────────────── Purple border
5426*9ccd446eSAtari911```
5427*9ccd446eSAtari911
5428*9ccd446eSAtari911**Professional Theme**:
5429*9ccd446eSAtari911```
5430*9ccd446eSAtari911┌──────────────────────────┐
5431*9ccd446eSAtari911│ ☑ �� Repeating Event     │
5432*9ccd446eSAtari911├║─────────────────────────┤ Blue accent
5433*9ccd446eSAtari911│║ Repeat options...       │ Light bg
5434*9ccd446eSAtari911└──────────────────────────┘
5435*9ccd446eSAtari911  [Cancel] [�� Save]       ← Light bg
5436*9ccd446eSAtari911──────────────────────────── Gray border
5437*9ccd446eSAtari911```
5438*9ccd446eSAtari911
5439*9ccd446eSAtari911**Pink Theme**:
5440*9ccd446eSAtari911```
5441*9ccd446eSAtari911┌──────────────────────────┐
5442*9ccd446eSAtari911│ ☑ �� Repeating Event ✨  │
5443*9ccd446eSAtari911├║─────────────────────────┤ Pink accent
5444*9ccd446eSAtari911│║ Repeat options...       │ Dark pink bg ��
5445*9ccd446eSAtari911└──────────────────────────┘
5446*9ccd446eSAtari911  [Cancel] [�� Save]       ← Dark pink bg
5447*9ccd446eSAtari911──────────────────────────── Pink border
5448*9ccd446eSAtari911```
5449*9ccd446eSAtari911
5450*9ccd446eSAtari911### Event Box Border Visual
5451*9ccd446eSAtari911
5452*9ccd446eSAtari911**Before (v4.8.5)**:
5453*9ccd446eSAtari911```
5454*9ccd446eSAtari911Left border only:
5455*9ccd446eSAtari911█ Team Meeting
5456*9ccd446eSAtari911█ 2:00 PM
5457*9ccd446eSAtari911█ [Edit] [Delete]
5458*9ccd446eSAtari911
5459*9ccd446eSAtari911Only event color on left ✗
5460*9ccd446eSAtari911White on other 3 sides ✗
5461*9ccd446eSAtari911```
5462*9ccd446eSAtari911
5463*9ccd446eSAtari911**After (v4.8.6)**:
5464*9ccd446eSAtari911```
5465*9ccd446eSAtari911All borders themed:
5466*9ccd446eSAtari911┌─────────────┐
5467*9ccd446eSAtari911█Team Meeting │ ← Top: themed
5468*9ccd446eSAtari911█2:00 PM      │ ← Right: themed
5469*9ccd446eSAtari911█[Edit][Del]  │ ← Bottom: themed
5470*9ccd446eSAtari911└─────────────┘
5471*9ccd446eSAtari911
5472*9ccd446eSAtari911Left: Event color ✓
5473*9ccd446eSAtari911Other 3: Theme grid_border ✓
5474*9ccd446eSAtari911```
5475*9ccd446eSAtari911
5476*9ccd446eSAtari911### Matrix Event Box:
5477*9ccd446eSAtari911```
5478*9ccd446eSAtari911┌─────────────┐ Green border
5479*9ccd446eSAtari911│Team Meeting │
5480*9ccd446eSAtari911│2:00 PM      │
5481*9ccd446eSAtari911└─────────────┘ Green border
5482*9ccd446eSAtari9115483*9ccd446eSAtari911Green left bar
5484*9ccd446eSAtari911```
5485*9ccd446eSAtari911
5486*9ccd446eSAtari911### Purple Event Box:
5487*9ccd446eSAtari911```
5488*9ccd446eSAtari911┌─────────────┐ Purple border
5489*9ccd446eSAtari911│Team Meeting │
5490*9ccd446eSAtari911│2:00 PM      │
5491*9ccd446eSAtari911└─────────────┘ Purple border
5492*9ccd446eSAtari9115493*9ccd446eSAtari911Purple left bar
5494*9ccd446eSAtari911```
5495*9ccd446eSAtari911
5496*9ccd446eSAtari911### Professional Event Box:
5497*9ccd446eSAtari911```
5498*9ccd446eSAtari911┌─────────────┐ Gray border
5499*9ccd446eSAtari911│Team Meeting │
5500*9ccd446eSAtari911│2:00 PM      │
5501*9ccd446eSAtari911└─────────────┘ Gray border
5502*9ccd446eSAtari9115503*9ccd446eSAtari911Event color left bar
5504*9ccd446eSAtari911```
5505*9ccd446eSAtari911
5506*9ccd446eSAtari911### Complete Dialog Coverage
5507*9ccd446eSAtari911
5508*9ccd446eSAtari911**All sections themed**:
5509*9ccd446eSAtari911- ✅ Dialog header
5510*9ccd446eSAtari911- ✅ Form inputs
5511*9ccd446eSAtari911- ✅ Checkbox labels
5512*9ccd446eSAtari911- ✅ **Recurring options** ← v4.8.6!
5513*9ccd446eSAtari911- ✅ **Button section** ← v4.8.6!
5514*9ccd446eSAtari911- ✅ All labels
5515*9ccd446eSAtari911- ✅ All buttons
5516*9ccd446eSAtari911
5517*9ccd446eSAtari911**No white sections!** ✓
5518*9ccd446eSAtari911
5519*9ccd446eSAtari911### Complete Event Box Coverage
5520*9ccd446eSAtari911
5521*9ccd446eSAtari911**All borders themed**:
5522*9ccd446eSAtari911- ✅ Left border (event color)
5523*9ccd446eSAtari911- ✅ **Top border** ← v4.8.6!
5524*9ccd446eSAtari911- ✅ **Right border** ← v4.8.6!
5525*9ccd446eSAtari911- ✅ **Bottom border** ← v4.8.6!
5526*9ccd446eSAtari911- ✅ Background
5527*9ccd446eSAtari911- ✅ Text
5528*9ccd446eSAtari911
5529*9ccd446eSAtari911**Perfect box outline!** ✓
5530*9ccd446eSAtari911
5531*9ccd446eSAtari911### Visual Perfection
5532*9ccd446eSAtari911
5533*9ccd446eSAtari911**Matrix theme event list**:
5534*9ccd446eSAtari911```
5535*9ccd446eSAtari911┌─────────────┐
5536*9ccd446eSAtari911│Team Meeting │ ← Green box
5537*9ccd446eSAtari911│2:00 PM      │
5538*9ccd446eSAtari911└─────────────┘
5539*9ccd446eSAtari911┌─────────────┐
5540*9ccd446eSAtari911│Code Review  │ ← Green box
5541*9ccd446eSAtari911│4:00 PM      │
5542*9ccd446eSAtari911└─────────────┘
5543*9ccd446eSAtari911
5544*9ccd446eSAtari911All borders green! ✓
5545*9ccd446eSAtari911```
5546*9ccd446eSAtari911
5547*9ccd446eSAtari911**ABSOLUTE PERFECT THEMING!** ��✨
5548*9ccd446eSAtari911
5549*9ccd446eSAtari911## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS
5550*9ccd446eSAtari911
5551*9ccd446eSAtari911### �� Fixed: Event Dialog Fully Themed
5552*9ccd446eSAtari911- **Fixed:** Dialog background, header, inputs all themed
5553*9ccd446eSAtari911- **Fixed:** All labels, checkboxes, selects themed
5554*9ccd446eSAtari911- **Fixed:** Save and Cancel buttons themed
5555*9ccd446eSAtari911- **Result:** Dialog matches theme perfectly!
5556*9ccd446eSAtari911
5557*9ccd446eSAtari911### �� Fixed: Sidebar Event Borders Properly Themed
5558*9ccd446eSAtari911- **Fixed:** Event divider borders use grid_border color
5559*9ccd446eSAtari911- **Fixed:** Clean, subtle themed dividers
5560*9ccd446eSAtari911- **Result:** No more white borders in sidebar!
5561*9ccd446eSAtari911
5562*9ccd446eSAtari911### All Changes
5563*9ccd446eSAtari911
5564*9ccd446eSAtari911**1. Event Dialog Theming**:
5565*9ccd446eSAtari911
5566*9ccd446eSAtari911**Dialog container**:
5567*9ccd446eSAtari911```php
5568*9ccd446eSAtari911background: $themeStyles['bg'] !important;
5569*9ccd446eSAtari911border: 2px solid $themeStyles['border'] !important;
5570*9ccd446eSAtari911box-shadow: 0 0 20px $shadow !important;
5571*9ccd446eSAtari911```
5572*9ccd446eSAtari911
5573*9ccd446eSAtari911**Dialog header**:
5574*9ccd446eSAtari911```php
5575*9ccd446eSAtari911background: $themeStyles['header_bg'] !important;
5576*9ccd446eSAtari911color: $themeStyles['text_primary'] !important;
5577*9ccd446eSAtari911border-bottom: 1px solid $border !important;
5578*9ccd446eSAtari911```
5579*9ccd446eSAtari911
5580*9ccd446eSAtari911**All form inputs** (text, date, select, textarea):
5581*9ccd446eSAtari911```php
5582*9ccd446eSAtari911background: $themeStyles['cell_bg'] !important;
5583*9ccd446eSAtari911color: $themeStyles['text_primary'] !important;
5584*9ccd446eSAtari911border-color: $themeStyles['grid_border'] !important;
5585*9ccd446eSAtari911```
5586*9ccd446eSAtari911
5587*9ccd446eSAtari911**All labels**:
5588*9ccd446eSAtari911```php
5589*9ccd446eSAtari911color: $themeStyles['text_primary'] !important;
5590*9ccd446eSAtari911```
5591*9ccd446eSAtari911
5592*9ccd446eSAtari911**Checkboxes**:
5593*9ccd446eSAtari911```php
5594*9ccd446eSAtari911accent-color: $themeStyles['border'] !important;
5595*9ccd446eSAtari911```
5596*9ccd446eSAtari911
5597*9ccd446eSAtari911**Buttons**:
5598*9ccd446eSAtari911```php
5599*9ccd446eSAtari911// Cancel button:
5600*9ccd446eSAtari911background: $cell_bg !important;
5601*9ccd446eSAtari911color: $text_primary !important;
5602*9ccd446eSAtari911
5603*9ccd446eSAtari911// Save button:
5604*9ccd446eSAtari911background: $border !important;
5605*9ccd446eSAtari911color: $bg !important; (or white for professional)
5606*9ccd446eSAtari911```
5607*9ccd446eSAtari911
5608*9ccd446eSAtari911**2. Sidebar Event Borders**:
5609*9ccd446eSAtari911
5610*9ccd446eSAtari911**Before**:
5611*9ccd446eSAtari911```php
5612*9ccd446eSAtari911border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded
5613*9ccd446eSAtari911```
5614*9ccd446eSAtari911
5615*9ccd446eSAtari911**After**:
5616*9ccd446eSAtari911```php
5617*9ccd446eSAtari911borderColor = $themeStyles['grid_border'];
5618*9ccd446eSAtari911border-bottom: 1px solid $borderColor !important;
5619*9ccd446eSAtari911```
5620*9ccd446eSAtari911
5621*9ccd446eSAtari911### Before vs After
5622*9ccd446eSAtari911
5623*9ccd446eSAtari911**BEFORE (v4.8.4)**:
5624*9ccd446eSAtari911```
5625*9ccd446eSAtari911Event Dialog:
5626*9ccd446eSAtari911┌────────────────┐
5627*9ccd446eSAtari911│ Add Event      │ ← White background ✗
5628*9ccd446eSAtari911│ Title: [_____] │ ← White inputs ✗
5629*9ccd446eSAtari911│ Date:  [_____] │
5630*9ccd446eSAtari911│ [Cancel] [Save]│ ← Default buttons ✗
5631*9ccd446eSAtari911└────────────────┘
5632*9ccd446eSAtari911
5633*9ccd446eSAtari911Sidebar Events:
5634*9ccd446eSAtari911Event 1 ────────  ← White border ✗
5635*9ccd446eSAtari911Event 2 ────────  ← White border ✗
5636*9ccd446eSAtari911```
5637*9ccd446eSAtari911
5638*9ccd446eSAtari911**AFTER (v4.8.5)**:
5639*9ccd446eSAtari911```
5640*9ccd446eSAtari911Event Dialog (Matrix):
5641*9ccd446eSAtari911┌────────────────┐
5642*9ccd446eSAtari911│ Add Event      │ ← Dark green background ✓
5643*9ccd446eSAtari911│ Title: [_____] │ ← Dark green inputs ✓
5644*9ccd446eSAtari911│ Date:  [_____] │ ← Green text ✓
5645*9ccd446eSAtari911│ [Cancel] [Save]│ ← Themed buttons ✓
5646*9ccd446eSAtari911└────────────────┘
5647*9ccd446eSAtari911
5648*9ccd446eSAtari911Sidebar Events (Matrix):
5649*9ccd446eSAtari911Event 1 ────────  ← Green border ✓
5650*9ccd446eSAtari911Event 2 ────────  ← Green border ✓
5651*9ccd446eSAtari911```
5652*9ccd446eSAtari911
5653*9ccd446eSAtari911### Dialog Examples by Theme
5654*9ccd446eSAtari911
5655*9ccd446eSAtari911**Matrix Dialog**:
5656*9ccd446eSAtari911```
5657*9ccd446eSAtari911┌──────────────────────────┐
5658*9ccd446eSAtari911│ ✏️ Edit Event            │ ← Dark green header
5659*9ccd446eSAtari911├──────────────────────────┤
5660*9ccd446eSAtari911│ �� Title                 │ ← Green labels
5661*9ccd446eSAtari911│ [Team Meeting________]   │ ← Dark green input
5662*9ccd446eSAtari911│                          │
5663*9ccd446eSAtari911│ �� Start Date            │
5664*9ccd446eSAtari911│ [2026-02-08__]           │ ← Dark green input
5665*9ccd446eSAtari911│                          │
5666*9ccd446eSAtari911│ �� Start Time            │
5667*9ccd446eSAtari911│ [2:00 PM ▼]              │ ← Green select
5668*9ccd446eSAtari911│                          │
5669*9ccd446eSAtari911│ ☑ �� Repeating Event     │ ← Green checkbox
5670*9ccd446eSAtari911│                          │
5671*9ccd446eSAtari911│ [Cancel] [�� Save]       │ ← Themed buttons
5672*9ccd446eSAtari911└──────────────────────────┘
5673*9ccd446eSAtari911
5674*9ccd446eSAtari911Everything green! ✓
5675*9ccd446eSAtari911```
5676*9ccd446eSAtari911
5677*9ccd446eSAtari911**Purple Dialog**:
5678*9ccd446eSAtari911```
5679*9ccd446eSAtari911┌──────────────────────────┐
5680*9ccd446eSAtari911│ ✏️ Edit Event            │ ← Dark purple header
5681*9ccd446eSAtari911├──────────────────────────┤
5682*9ccd446eSAtari911│ [Inputs_______________]  │ ← Dark purple inputs
5683*9ccd446eSAtari911│ ☑ Checkboxes             │ ← Purple accent
5684*9ccd446eSAtari911│ [Cancel] [�� Save]       │ ← Purple buttons
5685*9ccd446eSAtari911└──────────────────────────┘
5686*9ccd446eSAtari911```
5687*9ccd446eSAtari911
5688*9ccd446eSAtari911**Professional Dialog**:
5689*9ccd446eSAtari911```
5690*9ccd446eSAtari911┌──────────────────────────┐
5691*9ccd446eSAtari911│ ✏️ Edit Event            │ ← Light gradient header
5692*9ccd446eSAtari911├──────────────────────────┤
5693*9ccd446eSAtari911│ [Inputs_______________]  │ ← White inputs
5694*9ccd446eSAtari911│ ☑ Checkboxes             │ ← Blue accent
5695*9ccd446eSAtari911│ [Cancel] [�� Save]       │ ← Blue save button
5696*9ccd446eSAtari911└──────────────────────────┘
5697*9ccd446eSAtari911```
5698*9ccd446eSAtari911
5699*9ccd446eSAtari911**Pink Dialog**:
5700*9ccd446eSAtari911```
5701*9ccd446eSAtari911┌──────────────────────────┐
5702*9ccd446eSAtari911│ ✏️ Edit Event            │ ← Dark pink header ✨
5703*9ccd446eSAtari911├──────────────────────────┤
5704*9ccd446eSAtari911│ [Inputs_______________]  │ ← Dark pink inputs ��
5705*9ccd446eSAtari911│ ☑ Checkboxes             │ ← Pink accent
5706*9ccd446eSAtari911│ [Cancel] [�� Save]       │ ← Pink buttons
5707*9ccd446eSAtari911└──────────────────────────┘
5708*9ccd446eSAtari911```
5709*9ccd446eSAtari911
5710*9ccd446eSAtari911### Complete Dialog Element Coverage
5711*9ccd446eSAtari911
5712*9ccd446eSAtari911**All form elements themed**:
5713*9ccd446eSAtari911- ✅ Dialog container
5714*9ccd446eSAtari911- ✅ Dialog header
5715*9ccd446eSAtari911- ✅ Close button (×)
5716*9ccd446eSAtari911- ✅ Title input
5717*9ccd446eSAtari911- ✅ Namespace search
5718*9ccd446eSAtari911- ✅ Namespace dropdown
5719*9ccd446eSAtari911- ✅ Description textarea
5720*9ccd446eSAtari911- ✅ Start date input
5721*9ccd446eSAtari911- ✅ End date input
5722*9ccd446eSAtari911- ✅ Recurring checkbox
5723*9ccd446eSAtari911- ✅ Recurrence type select
5724*9ccd446eSAtari911- ✅ Recurrence end date
5725*9ccd446eSAtari911- ✅ Start time select
5726*9ccd446eSAtari911- ✅ End time select
5727*9ccd446eSAtari911- ✅ Color select
5728*9ccd446eSAtari911- ✅ Custom color picker
5729*9ccd446eSAtari911- ✅ Task checkbox
5730*9ccd446eSAtari911- ✅ All labels
5731*9ccd446eSAtari911- ✅ Cancel button
5732*9ccd446eSAtari911- ✅ Save button
5733*9ccd446eSAtari911
5734*9ccd446eSAtari911**Every single dialog element themed!** ��
5735*9ccd446eSAtari911
5736*9ccd446eSAtari911### Sidebar Border Example
5737*9ccd446eSAtari911
5738*9ccd446eSAtari911**Matrix Sidebar**:
5739*9ccd446eSAtari911```
5740*9ccd446eSAtari911┌────────────────┐
5741*9ccd446eSAtari911│ Today          │ ← Green section header
5742*9ccd446eSAtari911├────────────────┤
5743*9ccd446eSAtari911│ Team Meeting   │
5744*9ccd446eSAtari911│ 2:00 PM        │
5745*9ccd446eSAtari911├────────────────┤ ← Green border (grid_border)
5746*9ccd446eSAtari911│ Code Review    │
5747*9ccd446eSAtari911│ 4:00 PM        │
5748*9ccd446eSAtari911├────────────────┤ ← Green border
5749*9ccd446eSAtari911│ Stand-up       │
5750*9ccd446eSAtari911│ All day        │
5751*9ccd446eSAtari911└────────────────┘
5752*9ccd446eSAtari911
5753*9ccd446eSAtari911Subtle green dividers! ✓
5754*9ccd446eSAtari911```
5755*9ccd446eSAtari911
5756*9ccd446eSAtari911### Complete Achievement
5757*9ccd446eSAtari911
5758*9ccd446eSAtari911**Every UI element themed**:
5759*9ccd446eSAtari911- ✅ Calendar
5760*9ccd446eSAtari911- ✅ Sidebar widget
5761*9ccd446eSAtari911- ✅ Event list
5762*9ccd446eSAtari911- ✅ Search bar
5763*9ccd446eSAtari911- ✅ **Event dialog** ← v4.8.5!
5764*9ccd446eSAtari911- ✅ Month picker
5765*9ccd446eSAtari911- ✅ **Sidebar dividers** ← v4.8.5!
5766*9ccd446eSAtari911- ✅ All text
5767*9ccd446eSAtari911- ✅ All inputs
5768*9ccd446eSAtari911- ✅ All buttons
5769*9ccd446eSAtari911- ✅ All borders
5770*9ccd446eSAtari911- ✅ All checkboxes
5771*9ccd446eSAtari911
5772*9ccd446eSAtari911**ABSOLUTE COMPLETE THEMING!** ��✨
5773*9ccd446eSAtari911
5774*9ccd446eSAtari911## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS
5775*9ccd446eSAtari911
5776*9ccd446eSAtari911### �� Fixed: Professional Theme Background Consistency
5777*9ccd446eSAtari911- **Fixed:** Container and event backgrounds now match sidebar
5778*9ccd446eSAtari911- **Fixed:** Lighter, cleaner appearance
5779*9ccd446eSAtari911- **Fixed:** Better contrast and readability
5780*9ccd446eSAtari911- **Result:** Professional theme looks cohesive!
5781*9ccd446eSAtari911
5782*9ccd446eSAtari911### The Problem
5783*9ccd446eSAtari911
5784*9ccd446eSAtari911**v4.8.3 Professional theme**:
5785*9ccd446eSAtari911```
5786*9ccd446eSAtari911Sidebar: Light background (#f5f7fa)
5787*9ccd446eSAtari911Calendar: Medium background (#e8ecf1) ← Didn't match!
5788*9ccd446eSAtari911Events: Light background (#f5f7fa)
5789*9ccd446eSAtari911
5790*9ccd446eSAtari911Inconsistent! ✗
5791*9ccd446eSAtari911```
5792*9ccd446eSAtari911
5793*9ccd446eSAtari911### The Fix
5794*9ccd446eSAtari911
5795*9ccd446eSAtari911**Updated Professional theme colors for consistency**:
5796*9ccd446eSAtari911
5797*9ccd446eSAtari911```php
5798*9ccd446eSAtari911// Before:
5799*9ccd446eSAtari911'bg' => '#e8ecf1',        // Medium gray-blue
5800*9ccd446eSAtari911'cell_bg' => '#f5f7fa',   // Very light
5801*9ccd446eSAtari911'grid_bg' => '#d5dbe3',   // Medium-dark
5802*9ccd446eSAtari911
5803*9ccd446eSAtari911// After:
5804*9ccd446eSAtari911'bg' => '#f5f7fa',        // Very light (matches sidebar)
5805*9ccd446eSAtari911'cell_bg' => '#ffffff',   // Pure white (clean)
5806*9ccd446eSAtari911'grid_bg' => '#e8ecf1',   // Subtle contrast
5807*9ccd446eSAtari911'grid_border' => '#d0d7de', // Softer borders
5808*9ccd446eSAtari911```
5809*9ccd446eSAtari911
5810*9ccd446eSAtari911### Before vs After
5811*9ccd446eSAtari911
5812*9ccd446eSAtari911**BEFORE (v4.8.3)**:
5813*9ccd446eSAtari911```
5814*9ccd446eSAtari911Professional Theme:
5815*9ccd446eSAtari911┌────────────────┐
5816*9ccd446eSAtari911│ Calendar       │ ← Medium gray (#e8ecf1)
5817*9ccd446eSAtari911│ ┌────────────┐ │
5818*9ccd446eSAtari911│ │ Event      │ │ ← Light (#f5f7fa)
5819*9ccd446eSAtari911│ └────────────┘ │
5820*9ccd446eSAtari911└────────────────┘
5821*9ccd446eSAtari911
5822*9ccd446eSAtari911Sidebar:
5823*9ccd446eSAtari911┌────────────────┐
5824*9ccd446eSAtari911│ Widget         │ ← Light (#f5f7fa)
5825*9ccd446eSAtari911└────────────────┘
5826*9ccd446eSAtari911
5827*9ccd446eSAtari911Backgrounds don't match! ✗
5828*9ccd446eSAtari911```
5829*9ccd446eSAtari911
5830*9ccd446eSAtari911**AFTER (v4.8.4)**:
5831*9ccd446eSAtari911```
5832*9ccd446eSAtari911Professional Theme:
5833*9ccd446eSAtari911┌────────────────┐
5834*9ccd446eSAtari911│ Calendar       │ ← Light (#f5f7fa)
5835*9ccd446eSAtari911│ ┌────────────┐ │
5836*9ccd446eSAtari911│ │ Event      │ │ ← White (#ffffff)
5837*9ccd446eSAtari911│ └────────────┘ │
5838*9ccd446eSAtari911└────────────────┘
5839*9ccd446eSAtari911
5840*9ccd446eSAtari911Sidebar:
5841*9ccd446eSAtari911┌────────────────┐
5842*9ccd446eSAtari911│ Widget         │ ← Light (#f5f7fa)
5843*9ccd446eSAtari911└────────────────┘
5844*9ccd446eSAtari911
5845*9ccd446eSAtari911Perfect match! ✓
5846*9ccd446eSAtari911```
5847*9ccd446eSAtari911
5848*9ccd446eSAtari911### New Professional Theme Colors
5849*9ccd446eSAtari911
5850*9ccd446eSAtari911**Backgrounds**:
5851*9ccd446eSAtari911- Container: `#f5f7fa` (light blue-gray)
5852*9ccd446eSAtari911- Events: `#ffffff` (pure white)
5853*9ccd446eSAtari911- Grid: `#e8ecf1` (subtle contrast)
5854*9ccd446eSAtari911
5855*9ccd446eSAtari911**Text**:
5856*9ccd446eSAtari911- Primary: `#2c3e50` (dark blue-gray)
5857*9ccd446eSAtari911- Bright: `#4a90e2` (blue accent)
5858*9ccd446eSAtari911- Dim: `#7f8c8d` (medium gray)
5859*9ccd446eSAtari911
5860*9ccd446eSAtari911**Borders**:
5861*9ccd446eSAtari911- Main: `#4a90e2` (blue)
5862*9ccd446eSAtari911- Grid: `#d0d7de` (soft gray)
5863*9ccd446eSAtari911
5864*9ccd446eSAtari911**Header**:
5865*9ccd446eSAtari911- Gradient: `#ffffff` → `#f5f7fa`
5866*9ccd446eSAtari911
5867*9ccd446eSAtari911### Visual Example
5868*9ccd446eSAtari911
5869*9ccd446eSAtari911**Professional Theme Now**:
5870*9ccd446eSAtari911```
5871*9ccd446eSAtari911┌─────────────────────────────┐
5872*9ccd446eSAtari911│ February 2026               │ ← White to light gradient
5873*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─┬───────────────┤
5874*9ccd446eSAtari911│S│M│T│W│T│F│S│               │ ← Light background
5875*9ccd446eSAtari911├─┼─┼─┼─┼─┼─┼─┤               │
5876*9ccd446eSAtari911│ │ │1│2│3│4│5│ Event List    │ ← White events
5877*9ccd446eSAtari911│ │ │ │ │ │ │ │ ┌───────────┐ │
5878*9ccd446eSAtari911│ │ │ │ │[8]│ │ │ Meeting   │ │ ← White on light
5879*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘
5880*9ccd446eSAtari911
5881*9ccd446eSAtari911Clean, professional look! ✓
5882*9ccd446eSAtari911```
5883*9ccd446eSAtari911
5884*9ccd446eSAtari911### Comparison with Other Themes
5885*9ccd446eSAtari911
5886*9ccd446eSAtari911**Matrix** (dark):
5887*9ccd446eSAtari911- Container: #242424 (dark green)
5888*9ccd446eSAtari911- Events: #242424 (dark green)
5889*9ccd446eSAtari911- Consistent dark theme ✓
5890*9ccd446eSAtari911
5891*9ccd446eSAtari911**Purple** (dark):
5892*9ccd446eSAtari911- Container: #1a0d14 (dark purple)
5893*9ccd446eSAtari911- Events: #2a2030 (dark purple)
5894*9ccd446eSAtari911- Consistent dark theme ✓
5895*9ccd446eSAtari911
5896*9ccd446eSAtari911**Professional** (light):
5897*9ccd446eSAtari911- Container: #f5f7fa (light blue)
5898*9ccd446eSAtari911- Events: #ffffff (white)
5899*9ccd446eSAtari911- Consistent light theme ✓
5900*9ccd446eSAtari911
5901*9ccd446eSAtari911**Pink** (dark):
5902*9ccd446eSAtari911- Container: #1a0d14 (dark pink)
5903*9ccd446eSAtari911- Events: #1a0d14 (dark pink)
5904*9ccd446eSAtari911- Consistent dark theme ✓
5905*9ccd446eSAtari911
5906*9ccd446eSAtari911**All themes now consistent!** ��
5907*9ccd446eSAtari911
5908*9ccd446eSAtari911### Better Contrast
5909*9ccd446eSAtari911
5910*9ccd446eSAtari911**Professional theme improvements**:
5911*9ccd446eSAtari911
5912*9ccd446eSAtari911**Readability**:
5913*9ccd446eSAtari911- Dark text (#2c3e50) on white/light backgrounds ✓
5914*9ccd446eSAtari911- Excellent contrast ratio ✓
5915*9ccd446eSAtari911- Easy on the eyes ✓
5916*9ccd446eSAtari911
5917*9ccd446eSAtari911**Visual hierarchy**:
5918*9ccd446eSAtari911- White events pop against light container ✓
5919*9ccd446eSAtari911- Blue accents stand out ✓
5920*9ccd446eSAtari911- Clean, modern look ✓
5921*9ccd446eSAtari911
5922*9ccd446eSAtari911**Professional appearance**:
5923*9ccd446eSAtari911- Lighter = more corporate/business feel ✓
5924*9ccd446eSAtari911- Clean whites = premium quality ✓
5925*9ccd446eSAtari911- Subtle grays = sophisticated ✓
5926*9ccd446eSAtari911
5927*9ccd446eSAtari911### Complete Theme Consistency
5928*9ccd446eSAtari911
5929*9ccd446eSAtari911**All themes now have matching backgrounds**:
5930*9ccd446eSAtari911
5931*9ccd446eSAtari911**Matrix**:
5932*9ccd446eSAtari911- Sidebar & Calendar both dark green ✓
5933*9ccd446eSAtari911
5934*9ccd446eSAtari911**Purple**:
5935*9ccd446eSAtari911- Sidebar & Calendar both dark purple ✓
5936*9ccd446eSAtari911
5937*9ccd446eSAtari911**Professional**:
5938*9ccd446eSAtari911- Sidebar & Calendar both light ✓ (v4.8.4!)
5939*9ccd446eSAtari911
5940*9ccd446eSAtari911**Pink**:
5941*9ccd446eSAtari911- Sidebar & Calendar both dark pink ✓
5942*9ccd446eSAtari911
5943*9ccd446eSAtari911**Perfect visual unity across all views!** ��✨
5944*9ccd446eSAtari911
5945*9ccd446eSAtari911## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES
5946*9ccd446eSAtari911
5947*9ccd446eSAtari911### �� Fixed: Bold Text in Descriptions Themed
5948*9ccd446eSAtari911- **Fixed:** **Bold text** now uses theme primary color
5949*9ccd446eSAtari911- **Fixed:** Both `**text**` and `__text__` syntax themed
5950*9ccd446eSAtari911- **Result:** Bold text matches theme!
5951*9ccd446eSAtari911
5952*9ccd446eSAtari911### �� Fixed: Search Bar Fully Themed
5953*9ccd446eSAtari911- **Fixed:** Search input has !important on all styles
5954*9ccd446eSAtari911- **Fixed:** Icon and placeholder text themed
5955*9ccd446eSAtari911- **Result:** Search bar perfectly themed!
5956*9ccd446eSAtari911
5957*9ccd446eSAtari911### �� Fixed: Sidebar Event Boxes Themed
5958*9ccd446eSAtari911- **Fixed:** Event borders in sidebar now use theme grid_border color
5959*9ccd446eSAtari911- **Fixed:** Borders have !important flag
5960*9ccd446eSAtari911- **Result:** Sidebar boxes match theme!
5961*9ccd446eSAtari911
5962*9ccd446eSAtari911### All Changes
5963*9ccd446eSAtari911
5964*9ccd446eSAtari911**1. Bold Text Styling**:
5965*9ccd446eSAtari911
5966*9ccd446eSAtari911**Before**:
5967*9ccd446eSAtari911```html
5968*9ccd446eSAtari911<strong>Bold text</strong> ← Default black
5969*9ccd446eSAtari911```
5970*9ccd446eSAtari911
5971*9ccd446eSAtari911**After**:
5972*9ccd446eSAtari911```php
5973*9ccd446eSAtari911<strong style="color: $text_primary !important; font-weight:bold;">
5974*9ccd446eSAtari911    Bold text
5975*9ccd446eSAtari911</strong>
5976*9ccd446eSAtari911
5977*9ccd446eSAtari911Matrix: Green bold ✓
5978*9ccd446eSAtari911Purple: Lavender bold ✓
5979*9ccd446eSAtari911Professional: Dark bold ✓
5980*9ccd446eSAtari911Pink: Pink bold ✓
5981*9ccd446eSAtari911```
5982*9ccd446eSAtari911
5983*9ccd446eSAtari911**2. Search Bar**:
5984*9ccd446eSAtari911
5985*9ccd446eSAtari911**Before**:
5986*9ccd446eSAtari911```php
5987*9ccd446eSAtari911style="background: $bg; color: $text;"
5988*9ccd446eSAtari911Could be overridden by CSS
5989*9ccd446eSAtari911```
5990*9ccd446eSAtari911
5991*9ccd446eSAtari911**After**:
5992*9ccd446eSAtari911```php
5993*9ccd446eSAtari911style="background: $bg !important;
5994*9ccd446eSAtari911       color: $text_primary !important;
5995*9ccd446eSAtari911       border-color: $grid_border !important;"
5996*9ccd446eSAtari911
5997*9ccd446eSAtari911Cannot be overridden! ✓
5998*9ccd446eSAtari911```
5999*9ccd446eSAtari911
6000*9ccd446eSAtari911**3. Sidebar Event Boxes**:
6001*9ccd446eSAtari911
6002*9ccd446eSAtari911**Before**:
6003*9ccd446eSAtari911```php
6004*9ccd446eSAtari911$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded
6005*9ccd446eSAtari911```
6006*9ccd446eSAtari911
6007*9ccd446eSAtari911**After**:
6008*9ccd446eSAtari911```php
6009*9ccd446eSAtari911$borderColor = $themeStyles['grid_border']; // From theme
6010*9ccd446eSAtari911border-bottom: 1px solid $borderColor !important;
6011*9ccd446eSAtari911
6012*9ccd446eSAtari911Matrix: Green borders ✓
6013*9ccd446eSAtari911Purple: Purple borders ✓
6014*9ccd446eSAtari911Professional: Gray borders ✓
6015*9ccd446eSAtari911Pink: Pink borders ✓
6016*9ccd446eSAtari911```
6017*9ccd446eSAtari911
6018*9ccd446eSAtari911### Before vs After
6019*9ccd446eSAtari911
6020*9ccd446eSAtari911**BEFORE (v4.8.2)**:
6021*9ccd446eSAtari911```
6022*9ccd446eSAtari911Event description:
6023*9ccd446eSAtari911"Please review **Q1 Goals** carefully"
6024*9ccd446eSAtari9116025*9ccd446eSAtari911            Black bold ✗
6026*9ccd446eSAtari911
6027*9ccd446eSAtari911Search bar:
6028*9ccd446eSAtari911[�� Search...] ← Gray placeholder ✗
6029*9ccd446eSAtari911
6030*9ccd446eSAtari911Sidebar:
6031*9ccd446eSAtari911┌────────────┐
6032*9ccd446eSAtari911│ Event 1    │
6033*9ccd446eSAtari911├────────────┤ ← Gray border ✗
6034*9ccd446eSAtari911│ Event 2    │
6035*9ccd446eSAtari911└────────────┘
6036*9ccd446eSAtari911```
6037*9ccd446eSAtari911
6038*9ccd446eSAtari911**AFTER (v4.8.3)**:
6039*9ccd446eSAtari911```
6040*9ccd446eSAtari911Matrix Theme:
6041*9ccd446eSAtari911
6042*9ccd446eSAtari911Event description:
6043*9ccd446eSAtari911"Please review **Q1 Goals** carefully"
6044*9ccd446eSAtari9116045*9ccd446eSAtari911            Green bold ✓
6046*9ccd446eSAtari911
6047*9ccd446eSAtari911Search bar:
6048*9ccd446eSAtari911[�� Search...] ← Green themed ✓
6049*9ccd446eSAtari911
6050*9ccd446eSAtari911Sidebar:
6051*9ccd446eSAtari911┌────────────┐
6052*9ccd446eSAtari911│ Event 1    │
6053*9ccd446eSAtari911├────────────┤ ← Green border ✓
6054*9ccd446eSAtari911│ Event 2    │
6055*9ccd446eSAtari911└────────────┘
6056*9ccd446eSAtari911```
6057*9ccd446eSAtari911
6058*9ccd446eSAtari911### Examples by Theme
6059*9ccd446eSAtari911
6060*9ccd446eSAtari911**Matrix Theme**:
6061*9ccd446eSAtari911```
6062*9ccd446eSAtari911Description:
6063*9ccd446eSAtari911"Check **important notes** and links"
6064*9ccd446eSAtari9116065*9ccd446eSAtari911   Green bold
6066*9ccd446eSAtari911
6067*9ccd446eSAtari911Sidebar boxes:
6068*9ccd446eSAtari911Event 1
6069*9ccd446eSAtari911───────── Green border
6070*9ccd446eSAtari911Event 2
6071*9ccd446eSAtari911───────── Green border
6072*9ccd446eSAtari911```
6073*9ccd446eSAtari911
6074*9ccd446eSAtari911**Purple Theme**:
6075*9ccd446eSAtari911```
6076*9ccd446eSAtari911Description:
6077*9ccd446eSAtari911"Review **agenda items** before meeting"
6078*9ccd446eSAtari9116079*9ccd446eSAtari911   Lavender bold
6080*9ccd446eSAtari911
6081*9ccd446eSAtari911Sidebar boxes:
6082*9ccd446eSAtari911Event 1
6083*9ccd446eSAtari911───────── Purple border
6084*9ccd446eSAtari911Event 2
6085*9ccd446eSAtari911───────── Purple border
6086*9ccd446eSAtari911```
6087*9ccd446eSAtari911
6088*9ccd446eSAtari911**Professional Theme**:
6089*9ccd446eSAtari911```
6090*9ccd446eSAtari911Description:
6091*9ccd446eSAtari911"Update **quarterly reports** by Friday"
6092*9ccd446eSAtari9116093*9ccd446eSAtari911   Dark bold
6094*9ccd446eSAtari911
6095*9ccd446eSAtari911Sidebar boxes:
6096*9ccd446eSAtari911Event 1
6097*9ccd446eSAtari911───────── Gray border
6098*9ccd446eSAtari911Event 2
6099*9ccd446eSAtari911───────── Gray border
6100*9ccd446eSAtari911```
6101*9ccd446eSAtari911
6102*9ccd446eSAtari911**Pink Theme**:
6103*9ccd446eSAtari911```
6104*9ccd446eSAtari911Description:
6105*9ccd446eSAtari911"Don't forget **party supplies** ✨"
6106*9ccd446eSAtari9116107*9ccd446eSAtari911        Pink bold
6108*9ccd446eSAtari911
6109*9ccd446eSAtari911Sidebar boxes:
6110*9ccd446eSAtari911Event 1 ��
6111*9ccd446eSAtari911───────── Pink border
6112*9ccd446eSAtari911Event 2 ✨
6113*9ccd446eSAtari911───────── Pink border
6114*9ccd446eSAtari911```
6115*9ccd446eSAtari911
6116*9ccd446eSAtari911### Complete Formatting Coverage
6117*9ccd446eSAtari911
6118*9ccd446eSAtari911**Text formatting themed**:
6119*9ccd446eSAtari911- ✅ Regular text
6120*9ccd446eSAtari911- ✅ **Bold text** ← NEW!
6121*9ccd446eSAtari911- ✅ Links
6122*9ccd446eSAtari911- ✅ Italic text (inherits)
6123*9ccd446eSAtari911- ✅ Code (inherits)
6124*9ccd446eSAtari911
6125*9ccd446eSAtari911**UI elements themed**:
6126*9ccd446eSAtari911- ✅ Search bar ← Enhanced!
6127*9ccd446eSAtari911- ✅ Search icon ← Enhanced!
6128*9ccd446eSAtari911- ✅ Search placeholder ← Enhanced!
6129*9ccd446eSAtari911- ✅ Sidebar borders ← NEW!
6130*9ccd446eSAtari911- ✅ Event borders
6131*9ccd446eSAtari911- ✅ Badges
6132*9ccd446eSAtari911- ✅ Buttons
6133*9ccd446eSAtari911
6134*9ccd446eSAtari911**Every element perfectly themed!** ��
6135*9ccd446eSAtari911
6136*9ccd446eSAtari911### Search Bar Coverage
6137*9ccd446eSAtari911
6138*9ccd446eSAtari911**All aspects themed**:
6139*9ccd446eSAtari911- Background: Theme cell_bg ✓
6140*9ccd446eSAtari911- Text color: Theme text_primary ✓
6141*9ccd446eSAtari911- Border: Theme grid_border ✓
6142*9ccd446eSAtari911- Placeholder: Inherits text color ✓
6143*9ccd446eSAtari911- Icon (��): In placeholder ✓
6144*9ccd446eSAtari911- Clear button (✕): Themed ✓
6145*9ccd446eSAtari911
6146*9ccd446eSAtari911**Cannot be overridden!** (all have !important)
6147*9ccd446eSAtari911
6148*9ccd446eSAtari911### Sidebar Event Box Styling
6149*9ccd446eSAtari911
6150*9ccd446eSAtari911**Consistent borders**:
6151*9ccd446eSAtari911```
6152*9ccd446eSAtari911Matrix:
6153*9ccd446eSAtari911╔════════════╗
6154*9ccd446eSAtari911║ Event 1    ║
6155*9ccd446eSAtari911╟────────────╢ ← grid_border color
6156*9ccd446eSAtari911║ Event 2    ║
6157*9ccd446eSAtari911╚════════════╝
6158*9ccd446eSAtari911
6159*9ccd446eSAtari911All themes match perfectly! ✓
6160*9ccd446eSAtari911```
6161*9ccd446eSAtari911
6162*9ccd446eSAtari911### Complete Theme Achievement
6163*9ccd446eSAtari911
6164*9ccd446eSAtari911**Every single element themed**:
6165*9ccd446eSAtari911- ✅ Backgrounds
6166*9ccd446eSAtari911- ✅ Text (regular)
6167*9ccd446eSAtari911- ✅ Text (bold) ← v4.8.3!
6168*9ccd446eSAtari911- ✅ Links
6169*9ccd446eSAtari911- ✅ Badges
6170*9ccd446eSAtari911- ✅ Buttons
6171*9ccd446eSAtari911- ✅ Checkboxes
6172*9ccd446eSAtari911- ✅ Icons
6173*9ccd446eSAtari911- ✅ Borders
6174*9ccd446eSAtari911- ✅ Search bar ← Enhanced v4.8.3!
6175*9ccd446eSAtari911- ✅ Sidebar boxes ← v4.8.3!
6176*9ccd446eSAtari911- ✅ Today marker
6177*9ccd446eSAtari911- ✅ Calendar grid
6178*9ccd446eSAtari911- ✅ Event panels
6179*9ccd446eSAtari911
6180*9ccd446eSAtari911**ABSOLUTE PERFECTION!** ��✨
6181*9ccd446eSAtari911
6182*9ccd446eSAtari911## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS
6183*9ccd446eSAtari911
6184*9ccd446eSAtari911### �� Fixed: Links in Descriptions Now Themed
6185*9ccd446eSAtari911- **Fixed:** All links in event descriptions now use theme color
6186*9ccd446eSAtari911- **Fixed:** DokuWiki links [[page|text]] themed
6187*9ccd446eSAtari911- **Fixed:** Markdown links [text](url) themed
6188*9ccd446eSAtari911- **Fixed:** Plain URLs themed
6189*9ccd446eSAtari911- **Result:** Links match theme perfectly!
6190*9ccd446eSAtari911
6191*9ccd446eSAtari911### The Problem
6192*9ccd446eSAtari911
6193*9ccd446eSAtari911**v4.8.1 behavior**:
6194*9ccd446eSAtari911```
6195*9ccd446eSAtari911Event description:
6196*9ccd446eSAtari911"Check out https://example.com" ← Blue default link ✗
6197*9ccd446eSAtari911"See [[wiki:page|docs]]" ← Blue default link ✗
6198*9ccd446eSAtari911```
6199*9ccd446eSAtari911
6200*9ccd446eSAtari911### The Fix
6201*9ccd446eSAtari911
6202*9ccd446eSAtari911**Added inline color styling to ALL link types**:
6203*9ccd446eSAtari911
6204*9ccd446eSAtari911```php
6205*9ccd446eSAtari911// Get theme colors:
6206*9ccd446eSAtari911$linkColor = $themeStyles['border'] . ' !important';
6207*9ccd446eSAtari911$linkStyle = ' style="color:' . $linkColor . ';"';
6208*9ccd446eSAtari911
6209*9ccd446eSAtari911// Apply to links:
6210*9ccd446eSAtari911<a href="..." style="color: #00cc07 !important;">link</a>
6211*9ccd446eSAtari911```
6212*9ccd446eSAtari911
6213*9ccd446eSAtari911**All link types themed**:
6214*9ccd446eSAtari9111. DokuWiki syntax: `[[page|text]]`
6215*9ccd446eSAtari9112. Markdown syntax: `[text](url)`
6216*9ccd446eSAtari9113. Plain URLs: `https://example.com`
6217*9ccd446eSAtari911
6218*9ccd446eSAtari911### Before vs After
6219*9ccd446eSAtari911
6220*9ccd446eSAtari911**BEFORE (v4.8.1)**:
6221*9ccd446eSAtari911```
6222*9ccd446eSAtari911Matrix Theme Description:
6223*9ccd446eSAtari911"Visit https://example.com for more info"
6224*9ccd446eSAtari9116225*9ccd446eSAtari911     Blue link ✗ (doesn't match green theme)
6226*9ccd446eSAtari911```
6227*9ccd446eSAtari911
6228*9ccd446eSAtari911**AFTER (v4.8.2)**:
6229*9ccd446eSAtari911```
6230*9ccd446eSAtari911Matrix Theme Description:
6231*9ccd446eSAtari911"Visit https://example.com for more info"
6232*9ccd446eSAtari9116233*9ccd446eSAtari911     Green link ✓ (matches theme!)
6234*9ccd446eSAtari911```
6235*9ccd446eSAtari911
6236*9ccd446eSAtari911### Link Colors by Theme
6237*9ccd446eSAtari911
6238*9ccd446eSAtari911**Matrix**:
6239*9ccd446eSAtari911- Links: Green (#00cc07) !important
6240*9ccd446eSAtari911- Matches: Border, badges, highlights
6241*9ccd446eSAtari911
6242*9ccd446eSAtari911**Purple**:
6243*9ccd446eSAtari911- Links: Purple (#9b59b6) !important
6244*9ccd446eSAtari911- Matches: Border, badges, highlights
6245*9ccd446eSAtari911
6246*9ccd446eSAtari911**Professional**:
6247*9ccd446eSAtari911- Links: Blue (#4a90e2) !important
6248*9ccd446eSAtari911- Matches: Border, badges, highlights
6249*9ccd446eSAtari911
6250*9ccd446eSAtari911**Pink**:
6251*9ccd446eSAtari911- Links: Hot Pink (#ff1493) !important
6252*9ccd446eSAtari911- Matches: Border, badges, highlights ✨
6253*9ccd446eSAtari911
6254*9ccd446eSAtari911### Examples
6255*9ccd446eSAtari911
6256*9ccd446eSAtari911**Matrix Description with Links**:
6257*9ccd446eSAtari911```
6258*9ccd446eSAtari911Event: Team Meeting
6259*9ccd446eSAtari911Description:
6260*9ccd446eSAtari911"Review [[wiki:q1goals|Q1 Goals]]
6261*9ccd446eSAtari911and visit https://metrics.com"
6262*9ccd446eSAtari911
6263*9ccd446eSAtari911Both links → Green ✓
6264*9ccd446eSAtari911```
6265*9ccd446eSAtari911
6266*9ccd446eSAtari911**Purple Description with Links**:
6267*9ccd446eSAtari911```
6268*9ccd446eSAtari911Event: Planning Session
6269*9ccd446eSAtari911Description:
6270*9ccd446eSAtari911"Check [schedule](https://cal.com)
6271*9ccd446eSAtari911for availability"
6272*9ccd446eSAtari911
6273*9ccd446eSAtari911Link → Purple ✓
6274*9ccd446eSAtari911```
6275*9ccd446eSAtari911
6276*9ccd446eSAtari911**Professional Description with Links**:
6277*9ccd446eSAtari911```
6278*9ccd446eSAtari911Event: Client Call
6279*9ccd446eSAtari911Description:
6280*9ccd446eSAtari911"Prepare [[reports|Monthly Reports]]
6281*9ccd446eSAtari911before the call"
6282*9ccd446eSAtari911
6283*9ccd446eSAtari911Link → Blue ✓
6284*9ccd446eSAtari911```
6285*9ccd446eSAtari911
6286*9ccd446eSAtari911**Pink Description with Links**:
6287*9ccd446eSAtari911```
6288*9ccd446eSAtari911Event: Party Planning
6289*9ccd446eSAtari911Description:
6290*9ccd446eSAtari911"RSVP at https://party.com ✨"
6291*9ccd446eSAtari911
6292*9ccd446eSAtari911Link → Hot Pink ✓ ��
6293*9ccd446eSAtari911```
6294*9ccd446eSAtari911
6295*9ccd446eSAtari911### Technical Implementation
6296*9ccd446eSAtari911
6297*9ccd446eSAtari911**Updated renderDescription() function**:
6298*9ccd446eSAtari911
6299*9ccd446eSAtari911```php
6300*9ccd446eSAtari911private function renderDescription($description, $themeStyles = null) {
6301*9ccd446eSAtari911    // Get theme
6302*9ccd446eSAtari911    if ($themeStyles === null) {
6303*9ccd446eSAtari911        $theme = $this->getSidebarTheme();
6304*9ccd446eSAtari911        $themeStyles = $this->getSidebarThemeStyles($theme);
6305*9ccd446eSAtari911    }
6306*9ccd446eSAtari911
6307*9ccd446eSAtari911    // Create link style
6308*9ccd446eSAtari911    $linkColor = $themeStyles['border'] . ' !important';
6309*9ccd446eSAtari911    $linkStyle = ' style="color:' . $linkColor . ';"';
6310*9ccd446eSAtari911
6311*9ccd446eSAtari911    // Apply to all link types:
6312*9ccd446eSAtari911    $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>';
6313*9ccd446eSAtari911}
6314*9ccd446eSAtari911```
6315*9ccd446eSAtari911
6316*9ccd446eSAtari911### Complete Theming
6317*9ccd446eSAtari911
6318*9ccd446eSAtari911**Every text element**:
6319*9ccd446eSAtari911- ✅ Event titles
6320*9ccd446eSAtari911- ✅ Event dates
6321*9ccd446eSAtari911- ✅ Event descriptions
6322*9ccd446eSAtari911- ✅ **Links in descriptions** ← NEW!
6323*9ccd446eSAtari911- ✅ Badges
6324*9ccd446eSAtari911- ✅ Buttons
6325*9ccd446eSAtari911
6326*9ccd446eSAtari911**Every color unified!** ��
6327*9ccd446eSAtari911
6328*9ccd446eSAtari911### Unified Theme Experience
6329*9ccd446eSAtari911
6330*9ccd446eSAtari911**Matrix Theme**:
6331*9ccd446eSAtari911```
6332*9ccd446eSAtari911Everything green:
6333*9ccd446eSAtari911- Text: Green ✓
6334*9ccd446eSAtari911- Links: Green ✓
6335*9ccd446eSAtari911- Badges: Green ✓
6336*9ccd446eSAtari911- Borders: Green ✓
6337*9ccd446eSAtari911- Buttons: Green ✓
6338*9ccd446eSAtari911- Today marker: Green ✓
6339*9ccd446eSAtari911
6340*9ccd446eSAtari911Perfect harmony! ✓
6341*9ccd446eSAtari911```
6342*9ccd446eSAtari911
6343*9ccd446eSAtari911**No default blue links breaking the theme!**
6344*9ccd446eSAtari911
6345*9ccd446eSAtari911### Link Types Supported
6346*9ccd446eSAtari911
6347*9ccd446eSAtari911**1. DokuWiki Syntax**:
6348*9ccd446eSAtari911```
6349*9ccd446eSAtari911[[page|Link Text]] → Themed ✓
6350*9ccd446eSAtari911[[page]] → Themed ✓
6351*9ccd446eSAtari911[[page#section|Text]] → Themed ✓
6352*9ccd446eSAtari911```
6353*9ccd446eSAtari911
6354*9ccd446eSAtari911**2. Markdown Syntax**:
6355*9ccd446eSAtari911```
6356*9ccd446eSAtari911[Link Text](https://url.com) → Themed ✓
6357*9ccd446eSAtari911[Text](internal-page) → Themed ✓
6358*9ccd446eSAtari911```
6359*9ccd446eSAtari911
6360*9ccd446eSAtari911**3. Plain URLs**:
6361*9ccd446eSAtari911```
6362*9ccd446eSAtari911https://example.com → Themed ✓
6363*9ccd446eSAtari911http://site.org → Themed ✓
6364*9ccd446eSAtari911```
6365*9ccd446eSAtari911
6366*9ccd446eSAtari911**All links perfectly themed!** ����
6367*9ccd446eSAtari911
6368*9ccd446eSAtari911## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER
6369*9ccd446eSAtari911
6370*9ccd446eSAtari911### �� Fixed: All Badges Now Themed
6371*9ccd446eSAtari911- **Fixed:** TODAY badge themed with theme color
6372*9ccd446eSAtari911- **Fixed:** PAST DUE badge uses orange (warning color)
6373*9ccd446eSAtari911- **Fixed:** Namespace badges themed
6374*9ccd446eSAtari911- **Fixed:** All badges visible and hidden
6375*9ccd446eSAtari911- **Result:** All badges match theme!
6376*9ccd446eSAtari911
6377*9ccd446eSAtari911### �� Fixed: Today Cell More Prominent
6378*9ccd446eSAtari911- **Fixed:** Today cell now has 2px border in theme color
6379*9ccd446eSAtari911- **Fixed:** Border added to both PHP and JavaScript
6380*9ccd446eSAtari911- **Result:** Today stands out clearly!
6381*9ccd446eSAtari911
6382*9ccd446eSAtari911### �� Fixed: Past Event Text Fully Themed
6383*9ccd446eSAtari911- **Fixed:** Event-info div backgrounds ensure no gray
6384*9ccd446eSAtari911- **Result:** Expanded past events completely themed!
6385*9ccd446eSAtari911
6386*9ccd446eSAtari911### All Changes
6387*9ccd446eSAtari911
6388*9ccd446eSAtari911**1. Badge Theming**:
6389*9ccd446eSAtari911
6390*9ccd446eSAtari911**TODAY Badge**:
6391*9ccd446eSAtari911```php
6392*9ccd446eSAtari911// PHP & JavaScript:
6393*9ccd446eSAtari911style="background: $themeStyles['border'] !important;
6394*9ccd446eSAtari911       color: $bg !important;"
6395*9ccd446eSAtari911
6396*9ccd446eSAtari911Matrix: Green badge
6397*9ccd446eSAtari911Purple: Purple badge
6398*9ccd446eSAtari911Professional: Blue badge with white text
6399*9ccd446eSAtari911Pink: Pink badge
6400*9ccd446eSAtari911```
6401*9ccd446eSAtari911
6402*9ccd446eSAtari911**PAST DUE Badge** (always orange):
6403*9ccd446eSAtari911```php
6404*9ccd446eSAtari911style="background: #ff9800 !important;
6405*9ccd446eSAtari911       color: #fff !important;"
6406*9ccd446eSAtari911```
6407*9ccd446eSAtari911
6408*9ccd446eSAtari911**Namespace Badge**:
6409*9ccd446eSAtari911```php
6410*9ccd446eSAtari911style="background: $themeStyles['border'] !important;
6411*9ccd446eSAtari911       color: $bg !important;"
6412*9ccd446eSAtari911```
6413*9ccd446eSAtari911
6414*9ccd446eSAtari911**2. Today Cell Border**:
6415*9ccd446eSAtari911
6416*9ccd446eSAtari911**PHP**:
6417*9ccd446eSAtari911```php
6418*9ccd446eSAtari911$todayBorder = $isToday ?
6419*9ccd446eSAtari911    'border:2px solid ' . $themeStyles['border'] . ' !important;' : '';
6420*9ccd446eSAtari911```
6421*9ccd446eSAtari911
6422*9ccd446eSAtari911**JavaScript**: Same
6423*9ccd446eSAtari911
6424*9ccd446eSAtari911**Result**: Today cell has prominent colored border!
6425*9ccd446eSAtari911
6426*9ccd446eSAtari911### Before vs After
6427*9ccd446eSAtari911
6428*9ccd446eSAtari911**BEFORE (v4.8.0)**:
6429*9ccd446eSAtari911```
6430*9ccd446eSAtari911Calendar:
6431*9ccd446eSAtari911┌─┬─┬─┬─┬─┬─┬─┐
6432*9ccd446eSAtari911│1│2│3│4│5│6│7│
6433*9ccd446eSAtari911│ │ │ │[8]│ │ │ ← Today: subtle background
6434*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─┘
6435*9ccd446eSAtari911
6436*9ccd446eSAtari911Event badges:
6437*9ccd446eSAtari911Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗
6438*9ccd446eSAtari911```
6439*9ccd446eSAtari911
6440*9ccd446eSAtari911**AFTER (v4.8.1)**:
6441*9ccd446eSAtari911```
6442*9ccd446eSAtari911Calendar (Matrix):
6443*9ccd446eSAtari911┌─┬─┬─┬─┬─┬─┬─┐
6444*9ccd446eSAtari911│1│2│3│4│5│6│7│
6445*9ccd446eSAtari911│ │ │ │[8]│ │ │ ← Today: green border 2px ✓
6446*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─┘
6447*9ccd446eSAtari911
6448*9ccd446eSAtari911Event badges (Matrix):
6449*9ccd446eSAtari911Mon, Feb 8 [TODAY] [Work] ← Green badges ✓
6450*9ccd446eSAtari911```
6451*9ccd446eSAtari911
6452*9ccd446eSAtari911### Matrix Theme Example
6453*9ccd446eSAtari911
6454*9ccd446eSAtari911**Calendar**:
6455*9ccd446eSAtari911```
6456*9ccd446eSAtari911Today cell:
6457*9ccd446eSAtari911┌────┐
6458*9ccd446eSAtari911│ 8  │ Dark green bg + Green 2px border
6459*9ccd446eSAtari911└────┘
6460*9ccd446eSAtari911Very obvious!
6461*9ccd446eSAtari911```
6462*9ccd446eSAtari911
6463*9ccd446eSAtari911**Badges**:
6464*9ccd446eSAtari911```
6465*9ccd446eSAtari911[TODAY] ← Green bg, dark text
6466*9ccd446eSAtari911[Work]  ← Green bg, dark text
6467*9ccd446eSAtari911[PAST DUE] ← Orange bg, white text
6468*9ccd446eSAtari911```
6469*9ccd446eSAtari911
6470*9ccd446eSAtari911### Purple Theme Example
6471*9ccd446eSAtari911
6472*9ccd446eSAtari911**Calendar**:
6473*9ccd446eSAtari911```
6474*9ccd446eSAtari911Today cell:
6475*9ccd446eSAtari911┌────┐
6476*9ccd446eSAtari911│ 8  │ Dark purple bg + Purple 2px border
6477*9ccd446eSAtari911└────┘
6478*9ccd446eSAtari911```
6479*9ccd446eSAtari911
6480*9ccd446eSAtari911**Badges**:
6481*9ccd446eSAtari911```
6482*9ccd446eSAtari911[TODAY] ← Purple bg
6483*9ccd446eSAtari911[Work]  ← Purple bg
6484*9ccd446eSAtari911```
6485*9ccd446eSAtari911
6486*9ccd446eSAtari911### Professional Theme Example
6487*9ccd446eSAtari911
6488*9ccd446eSAtari911**Calendar**:
6489*9ccd446eSAtari911```
6490*9ccd446eSAtari911Today cell:
6491*9ccd446eSAtari911┌────┐
6492*9ccd446eSAtari911│ 8  │ Light blue bg + Blue 2px border
6493*9ccd446eSAtari911└────┘
6494*9ccd446eSAtari911```
6495*9ccd446eSAtari911
6496*9ccd446eSAtari911**Badges**:
6497*9ccd446eSAtari911```
6498*9ccd446eSAtari911[TODAY] ← Blue bg, white text
6499*9ccd446eSAtari911[Work]  ← Blue bg, white text
6500*9ccd446eSAtari911```
6501*9ccd446eSAtari911
6502*9ccd446eSAtari911### Pink Theme Example
6503*9ccd446eSAtari911
6504*9ccd446eSAtari911**Calendar**:
6505*9ccd446eSAtari911```
6506*9ccd446eSAtari911Today cell:
6507*9ccd446eSAtari911┌────┐
6508*9ccd446eSAtari911│ 8  │ Dark pink bg + Pink 2px border ✨
6509*9ccd446eSAtari911└────┘
6510*9ccd446eSAtari911```
6511*9ccd446eSAtari911
6512*9ccd446eSAtari911**Badges**:
6513*9ccd446eSAtari911```
6514*9ccd446eSAtari911[TODAY] ← Pink bg ��
6515*9ccd446eSAtari911[Work]  ← Pink bg ✨
6516*9ccd446eSAtari911```
6517*9ccd446eSAtari911
6518*9ccd446eSAtari911### Complete Badge Coverage
6519*9ccd446eSAtari911
6520*9ccd446eSAtari911**All badges themed**:
6521*9ccd446eSAtari911- ✅ TODAY badge (theme color)
6522*9ccd446eSAtari911- ✅ PAST DUE badge (orange warning)
6523*9ccd446eSAtari911- ✅ Namespace badges (theme color)
6524*9ccd446eSAtari911- ✅ Visible events
6525*9ccd446eSAtari911- ✅ Hidden/past events
6526*9ccd446eSAtari911
6527*9ccd446eSAtari911**No gray badges anywhere!**
6528*9ccd446eSAtari911
6529*9ccd446eSAtari911### Today Cell Visual
6530*9ccd446eSAtari911
6531*9ccd446eSAtari911**Dual indicators**:
6532*9ccd446eSAtari9111. Background color (theme today bg)
6533*9ccd446eSAtari9112. Border (2px theme color) ← NEW!
6534*9ccd446eSAtari911
6535*9ccd446eSAtari911**Result**: Today is VERY obvious!
6536*9ccd446eSAtari911
6537*9ccd446eSAtari911**Matrix**: Green bg + Green border
6538*9ccd446eSAtari911**Purple**: Purple bg + Purple border
6539*9ccd446eSAtari911**Professional**: Light blue bg + Blue border
6540*9ccd446eSAtari911**Pink**: Pink bg + Pink border ✨
6541*9ccd446eSAtari911
6542*9ccd446eSAtari911### Complete Theming
6543*9ccd446eSAtari911
6544*9ccd446eSAtari911**Every element themed**:
6545*9ccd446eSAtari911- ✅ Backgrounds
6546*9ccd446eSAtari911- ✅ Text colors
6547*9ccd446eSAtari911- ✅ Badges (v4.8.1!)
6548*9ccd446eSAtari911- ✅ Today marker (v4.8.1!)
6549*9ccd446eSAtari911- ✅ Checkboxes
6550*9ccd446eSAtari911- ✅ Buttons
6551*9ccd446eSAtari911- ✅ Icons
6552*9ccd446eSAtari911
6553*9ccd446eSAtari911**Absolutely everything!** ��✨
6554*9ccd446eSAtari911
6555*9ccd446eSAtari911## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING
6556*9ccd446eSAtari911
6557*9ccd446eSAtari911### �� Fixed: All Event Backgrounds Now Themed
6558*9ccd446eSAtari911- **Fixed:** event-info div now has themed background
6559*9ccd446eSAtari911- **Fixed:** event-meta-compact div (visible) now has themed background
6560*9ccd446eSAtari911- **Fixed:** event-desc-compact div now has themed background
6561*9ccd446eSAtari911- **Fixed:** All !important flags added to prevent CSS override
6562*9ccd446eSAtari911- **Result:** Entire event item fully themed!
6563*9ccd446eSAtari911
6564*9ccd446eSAtari911### �� Fixed: Description Text Shows Correct Color Immediately
6565*9ccd446eSAtari911- **Fixed:** Description divs now have explicit background + color on load
6566*9ccd446eSAtari911- **Fixed:** Both visible and hidden descriptions fully styled
6567*9ccd446eSAtari911- **Result:** No more gray text on initial load!
6568*9ccd446eSAtari911
6569*9ccd446eSAtari911### The Problem
6570*9ccd446eSAtari911
6571*9ccd446eSAtari911**v4.7.9 behavior**:
6572*9ccd446eSAtari911```
6573*9ccd446eSAtari911Expanded past event:
6574*9ccd446eSAtari911┌────────────────────────┐
6575*9ccd446eSAtari911│ ▾ Team Meeting         │ ← Themed ✓
6576*9ccd446eSAtari911│   Mon, Feb 8           │ ← Themed ✓
6577*9ccd446eSAtari911│                        │
6578*9ccd446eSAtari911│   [Event details]      │ ← Gray background ✗
6579*9ccd446eSAtari911│   [Description]        │ ← Gray text until navigation ✗
6580*9ccd446eSAtari911└────────────────────────┘
6581*9ccd446eSAtari911
6582*9ccd446eSAtari911Only the date/time div was themed!
6583*9ccd446eSAtari911```
6584*9ccd446eSAtari911
6585*9ccd446eSAtari911### The Fix
6586*9ccd446eSAtari911
6587*9ccd446eSAtari911**Added background to ALL inner divs**:
6588*9ccd446eSAtari911
6589*9ccd446eSAtari911**PHP**:
6590*9ccd446eSAtari911```php
6591*9ccd446eSAtari911// Event container:
6592*9ccd446eSAtari911style="background:' . $themeStyles['cell_bg'] . ' !important;"
6593*9ccd446eSAtari911
6594*9ccd446eSAtari911// event-info wrapper:
6595*9ccd446eSAtari911<div class="event-info"
6596*9ccd446eSAtari911     style="background:' . $themeStyles['cell_bg'] . ' !important;">
6597*9ccd446eSAtari911
6598*9ccd446eSAtari911// event-meta-compact:
6599*9ccd446eSAtari911<div class="event-meta-compact"
6600*9ccd446eSAtari911     style="background:' . $themeStyles['cell_bg'] . ' !important;">
6601*9ccd446eSAtari911
6602*9ccd446eSAtari911// event-desc-compact:
6603*9ccd446eSAtari911<div class="event-desc-compact"
6604*9ccd446eSAtari911     style="background:' . $themeStyles['cell_bg'] . ' !important;
6605*9ccd446eSAtari911            color:' . $themeStyles['text_dim'] . ' !important;">
6606*9ccd446eSAtari911```
6607*9ccd446eSAtari911
6608*9ccd446eSAtari911**JavaScript**: Same styling applied
6609*9ccd446eSAtari911
6610*9ccd446eSAtari911### Before vs After
6611*9ccd446eSAtari911
6612*9ccd446eSAtari911**BEFORE (v4.7.9)**:
6613*9ccd446eSAtari911```
6614*9ccd446eSAtari911Matrix Theme - Expanded Event:
6615*9ccd446eSAtari911┌────────────────────────┐
6616*9ccd446eSAtari911│ ▾ Team Meeting         │
6617*9ccd446eSAtari911│   Mon, Feb 8  ← Green  │
6618*9ccd446eSAtari911│                        │
6619*9ccd446eSAtari911│   Details     ← Gray ✗ │
6620*9ccd446eSAtari911│   Description ← Gray ✗ │
6621*9ccd446eSAtari911│   [✏️] [��️]            │
6622*9ccd446eSAtari911└────────────────────────┘
6623*9ccd446eSAtari911```
6624*9ccd446eSAtari911
6625*9ccd446eSAtari911**AFTER (v4.8.0)**:
6626*9ccd446eSAtari911```
6627*9ccd446eSAtari911Matrix Theme - Expanded Event:
6628*9ccd446eSAtari911┌────────────────────────┐
6629*9ccd446eSAtari911│ ▾ Team Meeting         │
6630*9ccd446eSAtari911│   Mon, Feb 8  ← Green  │
6631*9ccd446eSAtari911│                        │
6632*9ccd446eSAtari911│   Details     ← Green ✓│
6633*9ccd446eSAtari911│   Description ← Green ✓│
6634*9ccd446eSAtari911│   [✏️] [��️]            │
6635*9ccd446eSAtari911└────────────────────────┘
6636*9ccd446eSAtari911
6637*9ccd446eSAtari911Entire event themed!
6638*9ccd446eSAtari911```
6639*9ccd446eSAtari911
6640*9ccd446eSAtari911### What's Themed Now
6641*9ccd446eSAtari911
6642*9ccd446eSAtari911**Event Item Structure** (all themed):
6643*9ccd446eSAtari911```
6644*9ccd446eSAtari911event-compact-item        ← Themed ✓
6645*9ccd446eSAtari911  └─ event-info           ← Themed ✓ (v4.8.0!)
6646*9ccd446eSAtari911      ├─ event-title-row  ← Themed ✓
6647*9ccd446eSAtari911      ├─ event-meta       ← Themed ✓ (v4.8.0!)
6648*9ccd446eSAtari911      └─ event-desc       ← Themed ✓ (v4.8.0!)
6649*9ccd446eSAtari911```
6650*9ccd446eSAtari911
6651*9ccd446eSAtari911**Every layer has background!**
6652*9ccd446eSAtari911
6653*9ccd446eSAtari911### Matrix Theme Example
6654*9ccd446eSAtari911
6655*9ccd446eSAtari911**Complete event**:
6656*9ccd446eSAtari911```
6657*9ccd446eSAtari911┌────────────────────────────┐
6658*9ccd446eSAtari911│ Team Meeting               │ ← Dark green bg
6659*9ccd446eSAtari911│   Mon, Feb 8 • 2:00 PM     │ ← Dark green bg
6660*9ccd446eSAtari911│   Discussed Q1 goals and   │ ← Dark green bg
6661*9ccd446eSAtari911│   set targets for team     │ ← Dark green bg
6662*9ccd446eSAtari911│   [✏️] [��️] [☑]           │ ← Dark green bg
6663*9ccd446eSAtari911└────────────────────────────┘
6664*9ccd446eSAtari911
6665*9ccd446eSAtari911Consistent green throughout! ✓
6666*9ccd446eSAtari911```
6667*9ccd446eSAtari911
6668*9ccd446eSAtari911### Purple Theme Example
6669*9ccd446eSAtari911
6670*9ccd446eSAtari911```
6671*9ccd446eSAtari911┌────────────────────────────┐
6672*9ccd446eSAtari911│ Team Meeting               │ ← Dark purple bg
6673*9ccd446eSAtari911│   Mon, Feb 8 • 2:00 PM     │ ← Dark purple bg
6674*9ccd446eSAtari911│   Discussed Q1 goals       │ ← Dark purple bg
6675*9ccd446eSAtari911│   [✏️] [��️] [☑]           │ ← Dark purple bg
6676*9ccd446eSAtari911└────────────────────────────┘
6677*9ccd446eSAtari911
6678*9ccd446eSAtari911Consistent purple throughout! ✓
6679*9ccd446eSAtari911```
6680*9ccd446eSAtari911
6681*9ccd446eSAtari911### Professional Theme Example
6682*9ccd446eSAtari911
6683*9ccd446eSAtari911```
6684*9ccd446eSAtari911┌────────────────────────────┐
6685*9ccd446eSAtari911│ Team Meeting               │ ← Light bg
6686*9ccd446eSAtari911│   Mon, Feb 8 • 2:00 PM     │ ← Light bg
6687*9ccd446eSAtari911│   Discussed Q1 goals       │ ← Light bg
6688*9ccd446eSAtari911│   [✏️] [��️] [☑]           │ ← Light bg
6689*9ccd446eSAtari911└────────────────────────────┘
6690*9ccd446eSAtari911
6691*9ccd446eSAtari911Consistent light throughout! ✓
6692*9ccd446eSAtari911```
6693*9ccd446eSAtari911
6694*9ccd446eSAtari911### Pink Theme Example
6695*9ccd446eSAtari911
6696*9ccd446eSAtari911```
6697*9ccd446eSAtari911┌────────────────────────────┐
6698*9ccd446eSAtari911│ Team Meeting               │ ← Dark pink bg
6699*9ccd446eSAtari911│   Mon, Feb 8 • 2:00 PM     │ ← Dark pink bg
6700*9ccd446eSAtari911│   Discussed Q1 goals       │ ← Dark pink bg
6701*9ccd446eSAtari911│   [✏️] [��️] [☑]           │ ← Dark pink bg
6702*9ccd446eSAtari911└────────────────────────────┘
6703*9ccd446eSAtari911
6704*9ccd446eSAtari911Consistent pink throughout! ✓
6705*9ccd446eSAtari911```
6706*9ccd446eSAtari911
6707*9ccd446eSAtari911### Complete Theming
6708*9ccd446eSAtari911
6709*9ccd446eSAtari911**Every element, every layer**:
6710*9ccd446eSAtari911- ✅ Container
6711*9ccd446eSAtari911- ✅ Event item
6712*9ccd446eSAtari911- ✅ Event info wrapper (v4.8.0!)
6713*9ccd446eSAtari911- ✅ Title row
6714*9ccd446eSAtari911- ✅ Meta div (v4.8.0!)
6715*9ccd446eSAtari911- ✅ Description div (v4.8.0!)
6716*9ccd446eSAtari911- ✅ Action buttons
6717*9ccd446eSAtari911- ✅ Checkboxes
6718*9ccd446eSAtari911
6719*9ccd446eSAtari911**No gray anywhere!** ��
6720*9ccd446eSAtari911
6721*9ccd446eSAtari911### Why Multiple Backgrounds?
6722*9ccd446eSAtari911
6723*9ccd446eSAtari911**CSS layers stack**:
6724*9ccd446eSAtari911```html
6725*9ccd446eSAtari911<div style="background: green;">         ← Layer 1
6726*9ccd446eSAtari911  <div style="background: inherit;">     ← Could be gray!
6727*9ccd446eSAtari911    <div>Content</div>                   ← Inherits gray!
6728*9ccd446eSAtari911  </div>
6729*9ccd446eSAtari911</div>
6730*9ccd446eSAtari911
6731*9ccd446eSAtari911Better:
6732*9ccd446eSAtari911<div style="background: green;">         ← Layer 1
6733*9ccd446eSAtari911  <div style="background: green;">       ← Layer 2 forced
6734*9ccd446eSAtari911    <div style="background: green;">     ← Layer 3 forced
6735*9ccd446eSAtari911      Content                            ← All green!
6736*9ccd446eSAtari911    </div>
6737*9ccd446eSAtari911  </div>
6738*9ccd446eSAtari911</div>
6739*9ccd446eSAtari911```
6740*9ccd446eSAtari911
6741*9ccd446eSAtari911**Every layer forced = Perfect theming!**
6742*9ccd446eSAtari911
6743*9ccd446eSAtari911### !important Everywhere
6744*9ccd446eSAtari911
6745*9ccd446eSAtari911**All styling now uses !important**:
6746*9ccd446eSAtari911- background: ... !important
6747*9ccd446eSAtari911- color: ... !important
6748*9ccd446eSAtari911
6749*9ccd446eSAtari911**Result**: CSS cannot override themes!
6750*9ccd446eSAtari911
6751*9ccd446eSAtari911**Version 4.8.0 = Complete, bulletproof theming!** ��✨
6752*9ccd446eSAtari911
6753*9ccd446eSAtari911## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS
6754*9ccd446eSAtari911
6755*9ccd446eSAtari911### �� Fixed: Past Event Expanded Background Themed
6756*9ccd446eSAtari911- **Fixed:** Past event meta div now has theme background when expanded
6757*9ccd446eSAtari911- **Fixed:** Both PHP and JavaScript render with theme background
6758*9ccd446eSAtari911- **Result:** Expanded past events have proper themed background!
6759*9ccd446eSAtari911
6760*9ccd446eSAtari911### ✅ Fixed: Checkboxes Now Themed
6761*9ccd446eSAtari911- **Fixed:** Task checkboxes use accent-color matching theme
6762*9ccd446eSAtari911- **Fixed:** Cursor changes to pointer on hover
6763*9ccd446eSAtari911- **Result:** Checkboxes match theme color!
6764*9ccd446eSAtari911
6765*9ccd446eSAtari911### �� Fixed: Action Buttons (Edit/Delete) Themed
6766*9ccd446eSAtari911- **Fixed:** Edit (✏️) and Delete (��️) buttons now themed
6767*9ccd446eSAtari911- **Fixed:** Background, text, and border all use theme colors
6768*9ccd446eSAtari911- **Result:** All icons themed!
6769*9ccd446eSAtari911
6770*9ccd446eSAtari911### All Changes
6771*9ccd446eSAtari911
6772*9ccd446eSAtari911**1. Past Event Expanded Background**:
6773*9ccd446eSAtari911
6774*9ccd446eSAtari911**PHP**:
6775*9ccd446eSAtari911```php
6776*9ccd446eSAtari911// Before:
6777*9ccd446eSAtari911<div class="event-meta-compact" style="display:none;">
6778*9ccd446eSAtari911
6779*9ccd446eSAtari911// After:
6780*9ccd446eSAtari911<div class="event-meta-compact"
6781*9ccd446eSAtari911     style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;">
6782*9ccd446eSAtari911```
6783*9ccd446eSAtari911
6784*9ccd446eSAtari911**JavaScript**: Same treatment
6785*9ccd446eSAtari911
6786*9ccd446eSAtari911**Result**: Expanded past events have themed background!
6787*9ccd446eSAtari911
6788*9ccd446eSAtari911**2. Task Checkboxes**:
6789*9ccd446eSAtari911
6790*9ccd446eSAtari911**PHP & JavaScript**:
6791*9ccd446eSAtari911```php
6792*9ccd446eSAtari911// Added accent-color:
6793*9ccd446eSAtari911<input type="checkbox"
6794*9ccd446eSAtari911       style="accent-color:' . $themeStyles['border'] . ' !important;
6795*9ccd446eSAtari911              cursor:pointer;">
6796*9ccd446eSAtari911```
6797*9ccd446eSAtari911
6798*9ccd446eSAtari911**accent-color** changes the checkbox color:
6799*9ccd446eSAtari911- Matrix: Green checkboxes ✓
6800*9ccd446eSAtari911- Purple: Purple checkboxes ✓
6801*9ccd446eSAtari911- Professional: Blue checkboxes ✓
6802*9ccd446eSAtari911- Pink: Pink checkboxes ✓
6803*9ccd446eSAtari911
6804*9ccd446eSAtari911**3. Edit/Delete Buttons**:
6805*9ccd446eSAtari911
6806*9ccd446eSAtari911**PHP**:
6807*9ccd446eSAtari911```php
6808*9ccd446eSAtari911<button class="event-action-btn"
6809*9ccd446eSAtari911        style="color:' . $themeStyles['text_primary'] . ' !important;
6810*9ccd446eSAtari911               background:' . $themeStyles['cell_bg'] . ' !important;
6811*9ccd446eSAtari911               border-color:' . $themeStyles['grid_border'] . ' !important;">
6812*9ccd446eSAtari911    ��️
6813*9ccd446eSAtari911</button>
6814*9ccd446eSAtari911```
6815*9ccd446eSAtari911
6816*9ccd446eSAtari911**JavaScript**: Same
6817*9ccd446eSAtari911
6818*9ccd446eSAtari911**Result**: Buttons blend with theme!
6819*9ccd446eSAtari911
6820*9ccd446eSAtari911### Before vs After
6821*9ccd446eSAtari911
6822*9ccd446eSAtari911**BEFORE (v4.7.8)**:
6823*9ccd446eSAtari911```
6824*9ccd446eSAtari911Past Event (expanded):
6825*9ccd446eSAtari911┌─────────────────────────┐
6826*9ccd446eSAtari911│ ▾ Team Meeting          │
6827*9ccd446eSAtari911│   Mon, Feb 8            │ ← White background ✗
6828*9ccd446eSAtari911│   Description           │
6829*9ccd446eSAtari911├─────────────────────────┤
6830*9ccd446eSAtari911│ [✏️] [��️] [☐]          │ ← Default colors ✗
6831*9ccd446eSAtari911└─────────────────────────┘
6832*9ccd446eSAtari911```
6833*9ccd446eSAtari911
6834*9ccd446eSAtari911**AFTER (v4.7.9)**:
6835*9ccd446eSAtari911```
6836*9ccd446eSAtari911Past Event (expanded - Matrix):
6837*9ccd446eSAtari911┌─────────────────────────┐
6838*9ccd446eSAtari911│ ▾ Team Meeting          │
6839*9ccd446eSAtari911│   Mon, Feb 8            │ ← Dark green bg ✓
6840*9ccd446eSAtari911│   Description           │
6841*9ccd446eSAtari911├─────────────────────────┤
6842*9ccd446eSAtari911│ [✏️] [��️] [☑]          │ ← Themed ✓
6843*9ccd446eSAtari911└─────────────────────────┘
6844*9ccd446eSAtari911```
6845*9ccd446eSAtari911
6846*9ccd446eSAtari911### Matrix Theme Example
6847*9ccd446eSAtari911
6848*9ccd446eSAtari911**Checkboxes**: Green accent
6849*9ccd446eSAtari911**Buttons**: Dark bg, green text, green borders
6850*9ccd446eSAtari911**Expanded**: Dark green background
6851*9ccd446eSAtari911
6852*9ccd446eSAtari911```
6853*9ccd446eSAtari911Task: ☑ Complete report  ← Green checkmark
6854*9ccd446eSAtari911[✏️] [��️]                ← Dark buttons with green
6855*9ccd446eSAtari911```
6856*9ccd446eSAtari911
6857*9ccd446eSAtari911### Purple Theme Example
6858*9ccd446eSAtari911
6859*9ccd446eSAtari911**Checkboxes**: Purple accent
6860*9ccd446eSAtari911**Buttons**: Dark purple bg, lavender text
6861*9ccd446eSAtari911**Expanded**: Dark purple background
6862*9ccd446eSAtari911
6863*9ccd446eSAtari911```
6864*9ccd446eSAtari911Task: ☑ Complete report  ← Purple checkmark
6865*9ccd446eSAtari911[✏️] [��️]                ← Purple themed
6866*9ccd446eSAtari911```
6867*9ccd446eSAtari911
6868*9ccd446eSAtari911### Professional Theme Example
6869*9ccd446eSAtari911
6870*9ccd446eSAtari911**Checkboxes**: Blue accent
6871*9ccd446eSAtari911**Buttons**: Light bg, dark text
6872*9ccd446eSAtari911**Expanded**: Light background
6873*9ccd446eSAtari911
6874*9ccd446eSAtari911```
6875*9ccd446eSAtari911Task: ☑ Complete report  ← Blue checkmark
6876*9ccd446eSAtari911[✏️] [��️]                ← Light themed
6877*9ccd446eSAtari911```
6878*9ccd446eSAtari911
6879*9ccd446eSAtari911### Pink Theme Example
6880*9ccd446eSAtari911
6881*9ccd446eSAtari911**Checkboxes**: Pink accent
6882*9ccd446eSAtari911**Buttons**: Dark pink bg, pink text
6883*9ccd446eSAtari911**Expanded**: Dark pink background
6884*9ccd446eSAtari911
6885*9ccd446eSAtari911```
6886*9ccd446eSAtari911Task: ☑ Complete report  ← Pink checkmark
6887*9ccd446eSAtari911[✏️] [��️]                ← Pink themed
6888*9ccd446eSAtari911```
6889*9ccd446eSAtari911
6890*9ccd446eSAtari911### Complete Icon Coverage
6891*9ccd446eSAtari911
6892*9ccd446eSAtari911**Themed Icons/Buttons**:
6893*9ccd446eSAtari911- ✅ Task checkboxes (accent-color)
6894*9ccd446eSAtari911- ✅ Edit button (✏️)
6895*9ccd446eSAtari911- ✅ Delete button (��️)
6896*9ccd446eSAtari911- ✅ Navigation arrows (◀ ▶)
6897*9ccd446eSAtari911- ✅ Today button
6898*9ccd446eSAtari911- ✅ Past Events arrow (▶)
6899*9ccd446eSAtari911
6900*9ccd446eSAtari911**All interactive elements themed!** ��
6901*9ccd446eSAtari911
6902*9ccd446eSAtari911### How accent-color Works
6903*9ccd446eSAtari911
6904*9ccd446eSAtari911**Modern CSS property** for form controls:
6905*9ccd446eSAtari911```css
6906*9ccd446eSAtari911input[type="checkbox"] {
6907*9ccd446eSAtari911    accent-color: #00cc07; /* Green checkbox! */
6908*9ccd446eSAtari911}
6909*9ccd446eSAtari911```
6910*9ccd446eSAtari911
6911*9ccd446eSAtari911**Browser support**: All modern browsers ✓
6912*9ccd446eSAtari911
6913*9ccd446eSAtari911**Result**: Checkboxes automatically match theme!
6914*9ccd446eSAtari911
6915*9ccd446eSAtari911### Complete Theme Coverage
6916*9ccd446eSAtari911
6917*9ccd446eSAtari911**Backgrounds**:
6918*9ccd446eSAtari911- ✅ Container
6919*9ccd446eSAtari911- ✅ Calendar-left
6920*9ccd446eSAtari911- ✅ Calendar-right
6921*9ccd446eSAtari911- ✅ Event items
6922*9ccd446eSAtari911- ✅ Past event expanded (v4.7.9!)
6923*9ccd446eSAtari911- ✅ Action buttons (v4.7.9!)
6924*9ccd446eSAtari911
6925*9ccd446eSAtari911**Icons/Controls**:
6926*9ccd446eSAtari911- ✅ Checkboxes (v4.7.9!)
6927*9ccd446eSAtari911- ✅ Edit/Delete buttons (v4.7.9!)
6928*9ccd446eSAtari911- ✅ Navigation buttons
6929*9ccd446eSAtari911- ✅ All arrows
6930*9ccd446eSAtari911
6931*9ccd446eSAtari911**Every element perfectly themed!** ��✨
6932*9ccd446eSAtari911
6933*9ccd446eSAtari911## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS
6934*9ccd446eSAtari911
6935*9ccd446eSAtari911### �� Fixed: White Bar at Bottom of Calendar
6936*9ccd446eSAtari911- **Fixed:** Added background to calendar-left div with !important
6937*9ccd446eSAtari911- **Result:** No more white bar at bottom!
6938*9ccd446eSAtari911
6939*9ccd446eSAtari911### �� Fixed: Past Event Expanded Details Not Themed
6940*9ccd446eSAtari911- **Fixed:** Past event date/time now themed when expanded
6941*9ccd446eSAtari911- **Fixed:** Past event descriptions now themed when expanded
6942*9ccd446eSAtari911- **Fixed:** Both PHP and JavaScript render with theme colors
6943*9ccd446eSAtari911- **Result:** Expanding past events shows themed text!
6944*9ccd446eSAtari911
6945*9ccd446eSAtari911### �� Fixed: Event Description Text Color
6946*9ccd446eSAtari911- **Fixed:** All event descriptions now use theme text_dim color
6947*9ccd446eSAtari911- **Fixed:** Both visible and hidden descriptions themed
6948*9ccd446eSAtari911- **Result:** Descriptions always match theme!
6949*9ccd446eSAtari911
6950*9ccd446eSAtari911### All Changes
6951*9ccd446eSAtari911
6952*9ccd446eSAtari911**1. Bottom White Bar** (calendar-left div):
6953*9ccd446eSAtari911
6954*9ccd446eSAtari911**Before**:
6955*9ccd446eSAtari911```html
6956*9ccd446eSAtari911<div class="calendar-compact-left">
6957*9ccd446eSAtari911<!-- White background showing at bottom -->
6958*9ccd446eSAtari911```
6959*9ccd446eSAtari911
6960*9ccd446eSAtari911**After**:
6961*9ccd446eSAtari911```html
6962*9ccd446eSAtari911<div class="calendar-compact-left"
6963*9ccd446eSAtari911     style="background: #242424 !important;">
6964*9ccd446eSAtari911<!-- Matches theme background -->
6965*9ccd446eSAtari911```
6966*9ccd446eSAtari911
6967*9ccd446eSAtari911**2. Past Event Expanded Details**:
6968*9ccd446eSAtari911
6969*9ccd446eSAtari911**PHP** - Added colors to hidden details:
6970*9ccd446eSAtari911```php
6971*9ccd446eSAtari911// Past event meta (hidden):
6972*9ccd446eSAtari911<span class="event-date-time"
6973*9ccd446eSAtari911      style="color:' . $themeStyles['text_dim'] . ' !important;">
6974*9ccd446eSAtari911
6975*9ccd446eSAtari911// Past event description (hidden):
6976*9ccd446eSAtari911<div class="event-desc-compact"
6977*9ccd446eSAtari911     style="display:none; color:' . $themeStyles['text_dim'] . ' !important;">
6978*9ccd446eSAtari911```
6979*9ccd446eSAtari911
6980*9ccd446eSAtari911**JavaScript** - Same treatment:
6981*9ccd446eSAtari911```javascript
6982*9ccd446eSAtari911// Past event meta:
6983*9ccd446eSAtari911html += '<span class="event-date-time"
6984*9ccd446eSAtari911              style="color:' + themeStyles.text_dim + ' !important;">';
6985*9ccd446eSAtari911
6986*9ccd446eSAtari911// Past event description:
6987*9ccd446eSAtari911html += '<div class="event-desc-compact"
6988*9ccd446eSAtari911              style="display: none; color:' + themeStyles.text_dim + ' !important;">';
6989*9ccd446eSAtari911```
6990*9ccd446eSAtari911
6991*9ccd446eSAtari911**3. All Event Descriptions**:
6992*9ccd446eSAtari911
6993*9ccd446eSAtari911**Both visible and hidden descriptions now themed**:
6994*9ccd446eSAtari911```php
6995*9ccd446eSAtari911// PHP:
6996*9ccd446eSAtari911style="color:' . $themeStyles['text_dim'] . ' !important;"
6997*9ccd446eSAtari911
6998*9ccd446eSAtari911// JavaScript:
6999*9ccd446eSAtari911style="color:' + themeStyles.text_dim + ' !important;"
7000*9ccd446eSAtari911```
7001*9ccd446eSAtari911
7002*9ccd446eSAtari911### Before vs After
7003*9ccd446eSAtari911
7004*9ccd446eSAtari911**BEFORE (v4.7.7)**:
7005*9ccd446eSAtari911```
7006*9ccd446eSAtari911Calendar bottom:
7007*9ccd446eSAtari911┌──────────────┐
7008*9ccd446eSAtari911│ Calendar     │
7009*9ccd446eSAtari911│ Grid         │
7010*9ccd446eSAtari911└──────────────┘
7011*9ccd446eSAtari911▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar
7012*9ccd446eSAtari911
7013*9ccd446eSAtari911Past Event (collapsed):
7014*9ccd446eSAtari911▸ Team Meeting
7015*9ccd446eSAtari911
7016*9ccd446eSAtari911Past Event (expanded):
7017*9ccd446eSAtari911▾ Team Meeting
7018*9ccd446eSAtari911  Mon, Feb 8 ← Gray text ✗
7019*9ccd446eSAtari911  Description ← Gray text ✗
7020*9ccd446eSAtari911```
7021*9ccd446eSAtari911
7022*9ccd446eSAtari911**AFTER (v4.7.8)**:
7023*9ccd446eSAtari911```
7024*9ccd446eSAtari911Calendar bottom:
7025*9ccd446eSAtari911┌──────────────┐
7026*9ccd446eSAtari911│ Calendar     │
7027*9ccd446eSAtari911│ Grid         │
7028*9ccd446eSAtari911└──────────────┘
7029*9ccd446eSAtari911No white bar! ✓
7030*9ccd446eSAtari911
7031*9ccd446eSAtari911Past Event (collapsed):
7032*9ccd446eSAtari911▸ Team Meeting
7033*9ccd446eSAtari911
7034*9ccd446eSAtari911Past Event (expanded):
7035*9ccd446eSAtari911▾ Team Meeting
7036*9ccd446eSAtari911  Mon, Feb 8 ← Theme dim color ✓
7037*9ccd446eSAtari911  Description ← Theme dim color ✓
7038*9ccd446eSAtari911```
7039*9ccd446eSAtari911
7040*9ccd446eSAtari911### Matrix Theme Example
7041*9ccd446eSAtari911
7042*9ccd446eSAtari911**Past event expanded**:
7043*9ccd446eSAtari911```
7044*9ccd446eSAtari911▾ Team Meeting (past)
7045*9ccd446eSAtari911  Mon, Feb 8 • 2:00 PM  ← Dim green (#00aa00)
7046*9ccd446eSAtari911  Discussed Q1 goals   ← Dim green (#00aa00)
7047*9ccd446eSAtari911
7048*9ccd446eSAtari911Everything themed! ✓
7049*9ccd446eSAtari911```
7050*9ccd446eSAtari911
7051*9ccd446eSAtari911### Purple Theme Example
7052*9ccd446eSAtari911
7053*9ccd446eSAtari911**Past event expanded**:
7054*9ccd446eSAtari911```
7055*9ccd446eSAtari911▾ Team Meeting (past)
7056*9ccd446eSAtari911  Mon, Feb 8 • 2:00 PM  ← Dim purple (#8e7ab8)
7057*9ccd446eSAtari911  Discussed Q1 goals   ← Dim purple (#8e7ab8)
7058*9ccd446eSAtari911
7059*9ccd446eSAtari911Everything themed! ✓
7060*9ccd446eSAtari911```
7061*9ccd446eSAtari911
7062*9ccd446eSAtari911### Professional Theme Example
7063*9ccd446eSAtari911
7064*9ccd446eSAtari911**Past event expanded**:
7065*9ccd446eSAtari911```
7066*9ccd446eSAtari911▾ Team Meeting (past)
7067*9ccd446eSAtari911  Mon, Feb 8 • 2:00 PM  ← Gray (#7f8c8d)
7068*9ccd446eSAtari911  Discussed Q1 goals   ← Gray (#7f8c8d)
7069*9ccd446eSAtari911
7070*9ccd446eSAtari911Everything themed! ✓
7071*9ccd446eSAtari911```
7072*9ccd446eSAtari911
7073*9ccd446eSAtari911### Pink Theme Example
7074*9ccd446eSAtari911
7075*9ccd446eSAtari911**Past event expanded**:
7076*9ccd446eSAtari911```
7077*9ccd446eSAtari911▾ Team Meeting (past)
7078*9ccd446eSAtari911  Mon, Feb 8 • 2:00 PM  ← Light pink (#ff85c1)
7079*9ccd446eSAtari911  Discussed Q1 goals   ← Light pink (#ff85c1)
7080*9ccd446eSAtari911
7081*9ccd446eSAtari911Everything themed! ✓
7082*9ccd446eSAtari911```
7083*9ccd446eSAtari911
7084*9ccd446eSAtari911### Complete Coverage
7085*9ccd446eSAtari911
7086*9ccd446eSAtari911**Calendar Layout**:
7087*9ccd446eSAtari911- ✅ Container background
7088*9ccd446eSAtari911- ✅ Calendar-left background (v4.7.8!)
7089*9ccd446eSAtari911- ✅ Calendar-right background
7090*9ccd446eSAtari911- ✅ No white bars anywhere!
7091*9ccd446eSAtari911
7092*9ccd446eSAtari911**Event Details**:
7093*9ccd446eSAtari911- ✅ Event titles
7094*9ccd446eSAtari911- ✅ Event dates/times
7095*9ccd446eSAtari911- ✅ Event descriptions (visible) (v4.7.8!)
7096*9ccd446eSAtari911- ✅ Past event dates (expanded) (v4.7.8!)
7097*9ccd446eSAtari911- ✅ Past event descriptions (expanded) (v4.7.8!)
7098*9ccd446eSAtari911
7099*9ccd446eSAtari911**Absolutely everything themed!** ��
7100*9ccd446eSAtari911
7101*9ccd446eSAtari911## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS
7102*9ccd446eSAtari911
7103*9ccd446eSAtari911### �� Fixed: Added !important to EVERY Themed Element
7104*9ccd446eSAtari911- **Fixed:** S M T W T F S headers now have background + color with !important
7105*9ccd446eSAtari911- **Fixed:** "Past Events" text now has explicit color with !important
7106*9ccd446eSAtari911- **Fixed:** Today cell background now forced with !important
7107*9ccd446eSAtari911- **Fixed:** All day numbers now have !important color
7108*9ccd446eSAtari911- **Fixed:** Empty cells now have !important background
7109*9ccd446eSAtari911- **Result:** CSS CANNOT override themes anymore!
7110*9ccd446eSAtari911
7111*9ccd446eSAtari911### The Nuclear Option: !important Everywhere
7112*9ccd446eSAtari911
7113*9ccd446eSAtari911**Problem**: DokuWiki CSS was still winning:
7114*9ccd446eSAtari911```css
7115*9ccd446eSAtari911/* DokuWiki theme overriding everything: */
7116*9ccd446eSAtari911.dokuwiki table th { background: white !important; color: black !important; }
7117*9ccd446eSAtari911.dokuwiki td { background: white !important; }
7118*9ccd446eSAtari911```
7119*9ccd446eSAtari911
7120*9ccd446eSAtari911**Solution**: Add !important to EVERY inline style:
7121*9ccd446eSAtari911```html
7122*9ccd446eSAtari911<th style="background: #242424 !important; color: #00cc07 !important;">
7123*9ccd446eSAtari911<td style="background: #2a4d2a !important; color: #00cc07 !important;">
7124*9ccd446eSAtari911<span style="color: #00cc07 !important;">
7125*9ccd446eSAtari911```
7126*9ccd446eSAtari911
7127*9ccd446eSAtari911### All Changes
7128*9ccd446eSAtari911
7129*9ccd446eSAtari911**1. Table Headers (S M T W T F S)**:
7130*9ccd446eSAtari911
7131*9ccd446eSAtari911**PHP** - Added background + !important everywhere:
7132*9ccd446eSAtari911```php
7133*9ccd446eSAtari911$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important;
7134*9ccd446eSAtari911            color:' . $themeStyles['text_primary'] . ' !important;
7135*9ccd446eSAtari911            border-color:' . $themeStyles['grid_border'] . ' !important;
7136*9ccd446eSAtari911            font-weight:bold !important;';
7137*9ccd446eSAtari911```
7138*9ccd446eSAtari911
7139*9ccd446eSAtari911**JavaScript** - Added background to each th:
7140*9ccd446eSAtari911```javascript
7141*9ccd446eSAtari911th.style.setProperty('background', themeStyles.header_bg, 'important');
7142*9ccd446eSAtari911th.style.setProperty('color', themeStyles.text_primary, 'important');
7143*9ccd446eSAtari911th.style.setProperty('border-color', themeStyles.grid_border, 'important');
7144*9ccd446eSAtari911th.style.setProperty('font-weight', 'bold', 'important');
7145*9ccd446eSAtari911```
7146*9ccd446eSAtari911
7147*9ccd446eSAtari911**2. Past Events Text**:
7148*9ccd446eSAtari911
7149*9ccd446eSAtari911**PHP** - Added !important to spans:
7150*9ccd446eSAtari911```php
7151*9ccd446eSAtari911<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span>
7152*9ccd446eSAtari911<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span>
7153*9ccd446eSAtari911```
7154*9ccd446eSAtari911
7155*9ccd446eSAtari911**JavaScript** - Same treatment:
7156*9ccd446eSAtari911```javascript
7157*9ccd446eSAtari911html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>';
7158*9ccd446eSAtari911html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>';
7159*9ccd446eSAtari911```
7160*9ccd446eSAtari911
7161*9ccd446eSAtari911**3. Today Cell & All Cells**:
7162*9ccd446eSAtari911
7163*9ccd446eSAtari911**PHP** - !important on background and color:
7164*9ccd446eSAtari911```php
7165*9ccd446eSAtari911// Today or regular cell:
7166*9ccd446eSAtari911$cellStyle = 'background:' . $cellBg . ' !important;
7167*9ccd446eSAtari911              color:' . $themeStyles['text_primary'] . ' !important;';
7168*9ccd446eSAtari911
7169*9ccd446eSAtari911// Day number:
7170*9ccd446eSAtari911<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;">
7171*9ccd446eSAtari911```
7172*9ccd446eSAtari911
7173*9ccd446eSAtari911**JavaScript** - Same:
7174*9ccd446eSAtari911```javascript
7175*9ccd446eSAtari911style="background:${cellBg} !important; color:${cellColor} !important;"
7176*9ccd446eSAtari911
7177*9ccd446eSAtari911<span style="color:${cellColor} !important;">${currentDay}</span>
7178*9ccd446eSAtari911```
7179*9ccd446eSAtari911
7180*9ccd446eSAtari911**4. Empty Cells**:
7181*9ccd446eSAtari911
7182*9ccd446eSAtari911**PHP & JavaScript** - !important:
7183*9ccd446eSAtari911```php
7184*9ccd446eSAtari911style="background:' . $themeStyles['bg'] . ' !important;"
7185*9ccd446eSAtari911```
7186*9ccd446eSAtari911
7187*9ccd446eSAtari911### Before vs After
7188*9ccd446eSAtari911
7189*9ccd446eSAtari911**BEFORE (v4.7.6)** - CSS still winning:
7190*9ccd446eSAtari911```
7191*9ccd446eSAtari911S M T W T F S → White background, black text ✗
7192*9ccd446eSAtari911Today cell → White background ✗
7193*9ccd446eSAtari911Past Events → Black text ✗
7194*9ccd446eSAtari911```
7195*9ccd446eSAtari911
7196*9ccd446eSAtari911**AFTER (v4.7.7)** - Theme wins:
7197*9ccd446eSAtari911```
7198*9ccd446eSAtari911S M T W T F S → Theme background, theme text ✓
7199*9ccd446eSAtari911Today cell → Theme highlight ✓
7200*9ccd446eSAtari911Past Events → Theme text ✓
7201*9ccd446eSAtari911
7202*9ccd446eSAtari911NOTHING can override !important inline styles!
7203*9ccd446eSAtari911```
7204*9ccd446eSAtari911
7205*9ccd446eSAtari911### Matrix Theme Example
7206*9ccd446eSAtari911
7207*9ccd446eSAtari911**Complete theming**:
7208*9ccd446eSAtari911```
7209*9ccd446eSAtari911┌──────────────────────────┐
7210*9ccd446eSAtari911│ S M T W T F S            │ ← Dark bg (#2a2a2a), Green text (#00cc07)
7211*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤
7212*9ccd446eSAtari911│ │ │1│2│3│4│5             │ ← Dark cells (#242424), Green nums (#00cc07)
7213*9ccd446eSAtari911│ │ │ │ │ │[8]│             │ ← Today green highlight (#2a4d2a)
7214*9ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤
7215*9ccd446eSAtari911│ ▶ Past Events (3)        │ ← Dim green text (#00aa00)
7216*9ccd446eSAtari911└──────────────────────────┘
7217*9ccd446eSAtari911
7218*9ccd446eSAtari911Every element forced with !important ✓
7219*9ccd446eSAtari911```
7220*9ccd446eSAtari911
7221*9ccd446eSAtari911### Purple Theme Example
7222*9ccd446eSAtari911
7223*9ccd446eSAtari911```
7224*9ccd446eSAtari911┌──────────────────────────┐
7225*9ccd446eSAtari911│ S M T W T F S            │ ← Dark purple bg, Lavender text
7226*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤
7227*9ccd446eSAtari911│ │ │1│2│3│4│5             │ ← Dark purple cells, Lavender nums
7228*9ccd446eSAtari911│ │ │ │ │ │[8]│             │ ← Today purple highlight
7229*9ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤
7230*9ccd446eSAtari911│ ▶ Past Events (3)        │ ← Dim purple text
7231*9ccd446eSAtari911└──────────────────────────┘
7232*9ccd446eSAtari911
7233*9ccd446eSAtari911Forced purple everywhere ✓
7234*9ccd446eSAtari911```
7235*9ccd446eSAtari911
7236*9ccd446eSAtari911### Professional Theme Example
7237*9ccd446eSAtari911
7238*9ccd446eSAtari911```
7239*9ccd446eSAtari911┌──────────────────────────┐
7240*9ccd446eSAtari911│ S M T W T F S            │ ← Light bg, Dark text
7241*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤
7242*9ccd446eSAtari911│ │ │1│2│3│4│5             │ ← Light cells, Dark nums
7243*9ccd446eSAtari911│ │ │ │ │ │[8]│             │ ← Today light blue highlight
7244*9ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤
7245*9ccd446eSAtari911│ ▶ Past Events (3)        │ ← Gray text
7246*9ccd446eSAtari911└──────────────────────────┘
7247*9ccd446eSAtari911
7248*9ccd446eSAtari911Forced professional everywhere ✓
7249*9ccd446eSAtari911```
7250*9ccd446eSAtari911
7251*9ccd446eSAtari911### Pink Theme Example
7252*9ccd446eSAtari911
7253*9ccd446eSAtari911```
7254*9ccd446eSAtari911┌──────────────────────────┐
7255*9ccd446eSAtari911│ S M T W T F S            │ ← Dark pink bg, Pink text
7256*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤
7257*9ccd446eSAtari911│ │ │1│2│3│4│5  ✨         │ ← Dark pink cells, Pink nums
7258*9ccd446eSAtari911│ │ │ │ │ │[8]│  ��         │ ← Today pink highlight
7259*9ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤
7260*9ccd446eSAtari911│ ▶ Past Events (3)        │ ← Light pink text
7261*9ccd446eSAtari911└──────────────────────────┘
7262*9ccd446eSAtari911
7263*9ccd446eSAtari911Forced pink sparkles everywhere ✓
7264*9ccd446eSAtari911```
7265*9ccd446eSAtari911
7266*9ccd446eSAtari911### Why So Aggressive?
7267*9ccd446eSAtari911
7268*9ccd446eSAtari911**!important priority**:
7269*9ccd446eSAtari911```
7270*9ccd446eSAtari9111. Inline style with !important ← We use this
7271*9ccd446eSAtari9112. CSS rule with !important
7272*9ccd446eSAtari9113. Inline style without !important
7273*9ccd446eSAtari9114. CSS rule without !important
7274*9ccd446eSAtari911```
7275*9ccd446eSAtari911
7276*9ccd446eSAtari911**We win**: Our inline `!important` beats everything!
7277*9ccd446eSAtari911
7278*9ccd446eSAtari911### Complete !important Coverage
7279*9ccd446eSAtari911
7280*9ccd446eSAtari911**Every themed element now has !important**:
7281*9ccd446eSAtari911- ✅ S M T W T F S (background + color)
7282*9ccd446eSAtari911- ✅ Day numbers (color)
7283*9ccd446eSAtari911- ✅ Today cell (background + color)
7284*9ccd446eSAtari911- ✅ Empty cells (background)
7285*9ccd446eSAtari911- ✅ Past Events text (color)
7286*9ccd446eSAtari911- ✅ Past Events arrow (color)
7287*9ccd446eSAtari911- ✅ Event titles (color)
7288*9ccd446eSAtari911- ✅ Event dates (color)
7289*9ccd446eSAtari911
7290*9ccd446eSAtari911**No CSS can override themes!** ��
7291*9ccd446eSAtari911
7292*9ccd446eSAtari911## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS
7293*9ccd446eSAtari911
7294*9ccd446eSAtari911### �� Fixed: Event Sidebar Text Now Themed
7295*9ccd446eSAtari911- **Fixed:** Event titles now have explicit color styling
7296*9ccd446eSAtari911- **Fixed:** Event dates/times now have explicit color styling (dimmed)
7297*9ccd446eSAtari911- **Fixed:** Both PHP and JavaScript event rendering now styled
7298*9ccd446eSAtari911
7299*9ccd446eSAtari911### �� Enhanced: Table Header Colors Now Forced with !important
7300*9ccd446eSAtari911- **Fixed:** S M T W T F S now uses `!important` to override any CSS
7301*9ccd446eSAtari911- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag
7302*9ccd446eSAtari911- **Result:** Header colors CANNOT be overridden!
7303*9ccd446eSAtari911
7304*9ccd446eSAtari911### What Was Fixed
7305*9ccd446eSAtari911
7306*9ccd446eSAtari911**1. Event Text in Sidebar** (was missing):
7307*9ccd446eSAtari911
7308*9ccd446eSAtari911**PHP** - Explicit colors added:
7309*9ccd446eSAtari911```php
7310*9ccd446eSAtari911// Event title:
7311*9ccd446eSAtari911<span class="event-title-compact"
7312*9ccd446eSAtari911      style="color:' . $themeStyles['text_primary'] . ';">
7313*9ccd446eSAtari911
7314*9ccd446eSAtari911// Event date/time:
7315*9ccd446eSAtari911<span class="event-date-time"
7316*9ccd446eSAtari911      style="color:' . $themeStyles['text_dim'] . ';">
7317*9ccd446eSAtari911```
7318*9ccd446eSAtari911
7319*9ccd446eSAtari911**JavaScript** - Explicit colors added:
7320*9ccd446eSAtari911```javascript
7321*9ccd446eSAtari911// Event title:
7322*9ccd446eSAtari911html += '<span class="event-title-compact"
7323*9ccd446eSAtari911               style="color:' + themeStyles.text_primary + ';">';
7324*9ccd446eSAtari911
7325*9ccd446eSAtari911// Event date/time:
7326*9ccd446eSAtari911html += '<span class="event-date-time"
7327*9ccd446eSAtari911               style="color:' + themeStyles.text_dim + ';">';
7328*9ccd446eSAtari911```
7329*9ccd446eSAtari911
7330*9ccd446eSAtari911**2. Table Header Colors** (was being overridden):
7331*9ccd446eSAtari911
7332*9ccd446eSAtari911**PHP** - Added !important:
7333*9ccd446eSAtari911```php
7334*9ccd446eSAtari911// Row:
7335*9ccd446eSAtari911style="color: ' . $themeStyles['text_primary'] . ' !important;"
7336*9ccd446eSAtari911
7337*9ccd446eSAtari911// Each th:
7338*9ccd446eSAtari911$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;';
7339*9ccd446eSAtari911<th style="' . $thStyle . '">S</th>
7340*9ccd446eSAtari911```
7341*9ccd446eSAtari911
7342*9ccd446eSAtari911**JavaScript** - Used setProperty with important:
7343*9ccd446eSAtari911```javascript
7344*9ccd446eSAtari911// Row:
7345*9ccd446eSAtari911thead.style.setProperty('color', themeStyles.text_primary, 'important');
7346*9ccd446eSAtari911
7347*9ccd446eSAtari911// Each th:
7348*9ccd446eSAtari911th.style.setProperty('color', themeStyles.text_primary, 'important');
7349*9ccd446eSAtari911```
7350*9ccd446eSAtari911
7351*9ccd446eSAtari911### Before vs After
7352*9ccd446eSAtari911
7353*9ccd446eSAtari911**BEFORE (v4.7.5)**:
7354*9ccd446eSAtari911```
7355*9ccd446eSAtari911Event List:
7356*9ccd446eSAtari911┌─────────────────┐
7357*9ccd446eSAtari911│ Team Meeting    │ ← Black/default color ✗
7358*9ccd446eSAtari911│ Mon, Feb 8      │ ← Black/default color ✗
7359*9ccd446eSAtari911└─────────────────┘
7360*9ccd446eSAtari911
7361*9ccd446eSAtari911Table Header:
7362*9ccd446eSAtari911S  M  T  W  T  F  S  ← Black/default color ✗
7363*9ccd446eSAtari911(CSS was overriding the style)
7364*9ccd446eSAtari911```
7365*9ccd446eSAtari911
7366*9ccd446eSAtari911**AFTER (v4.7.6)**:
7367*9ccd446eSAtari911```
7368*9ccd446eSAtari911Event List (Matrix):
7369*9ccd446eSAtari911┌─────────────────┐
7370*9ccd446eSAtari911│ Team Meeting    │ ← Green (#00cc07) ✓
7371*9ccd446eSAtari911│ Mon, Feb 8      │ ← Dim green (#00aa00) ✓
7372*9ccd446eSAtari911└─────────────────┘
7373*9ccd446eSAtari911
7374*9ccd446eSAtari911Table Header (Matrix):
7375*9ccd446eSAtari911S  M  T  W  T  F  S  ← Green (!important) ✓
7376*9ccd446eSAtari911(Cannot be overridden!)
7377*9ccd446eSAtari911```
7378*9ccd446eSAtari911
7379*9ccd446eSAtari911### Why !important?
7380*9ccd446eSAtari911
7381*9ccd446eSAtari911**Problem**: DokuWiki CSS was stronger:
7382*9ccd446eSAtari911```css
7383*9ccd446eSAtari911/* Some DokuWiki theme CSS: */
7384*9ccd446eSAtari911table th {
7385*9ccd446eSAtari911    color: #000 !important; /* ← Overrides inline styles */
7386*9ccd446eSAtari911}
7387*9ccd446eSAtari911```
7388*9ccd446eSAtari911
7389*9ccd446eSAtari911**Solution**: Use !important in inline styles:
7390*9ccd446eSAtari911```html
7391*9ccd446eSAtari911<th style="color: #00cc07 !important;">S</th>
7392*9ccd446eSAtari911<!-- Inline !important beats CSS !important -->
7393*9ccd446eSAtari911```
7394*9ccd446eSAtari911
7395*9ccd446eSAtari911**JavaScript method**:
7396*9ccd446eSAtari911```javascript
7397*9ccd446eSAtari911// Old (could be overridden):
7398*9ccd446eSAtari911th.style.color = '#00cc07';
7399*9ccd446eSAtari911
7400*9ccd446eSAtari911// New (cannot be overridden):
7401*9ccd446eSAtari911th.style.setProperty('color', '#00cc07', 'important');
7402*9ccd446eSAtari911```
7403*9ccd446eSAtari911
7404*9ccd446eSAtari911### Event Text Colors
7405*9ccd446eSAtari911
7406*9ccd446eSAtari911**Two-tone approach**:
7407*9ccd446eSAtari911
7408*9ccd446eSAtari911**Primary text** (titles):
7409*9ccd446eSAtari911- Matrix: `#00cc07` (bright green)
7410*9ccd446eSAtari911- Purple: `#b19cd9` (lavender)
7411*9ccd446eSAtari911- Professional: `#2c3e50` (dark)
7412*9ccd446eSAtari911- Pink: `#ff69b4` (pink)
7413*9ccd446eSAtari911
7414*9ccd446eSAtari911**Dimmed text** (dates/times):
7415*9ccd446eSAtari911- Matrix: `#00aa00` (dim green)
7416*9ccd446eSAtari911- Purple: `#8e7ab8` (dim purple)
7417*9ccd446eSAtari911- Professional: `#7f8c8d` (gray)
7418*9ccd446eSAtari911- Pink: `#ff85c1` (light pink)
7419*9ccd446eSAtari911
7420*9ccd446eSAtari911**Creates visual hierarchy!** ✓
7421*9ccd446eSAtari911
7422*9ccd446eSAtari911### Complete Theme Coverage NOW
7423*9ccd446eSAtari911
7424*9ccd446eSAtari911**Calendar Grid**:
7425*9ccd446eSAtari911- Container ✅
7426*9ccd446eSAtari911- Header ✅
7427*9ccd446eSAtari911- Buttons ✅
7428*9ccd446eSAtari911- S M T W T F S ✅ (!important - v4.7.6!)
7429*9ccd446eSAtari911- Day numbers ✅
7430*9ccd446eSAtari911- Today cell ✅
7431*9ccd446eSAtari911- Empty cells ✅
7432*9ccd446eSAtari911
7433*9ccd446eSAtari911**Event List**:
7434*9ccd446eSAtari911- Panel ✅
7435*9ccd446eSAtari911- Header ✅
7436*9ccd446eSAtari911- Search box ✅
7437*9ccd446eSAtari911- Add button ✅
7438*9ccd446eSAtari911- **Event titles** ✅ (v4.7.6!)
7439*9ccd446eSAtari911- **Event dates** ✅ (v4.7.6!)
7440*9ccd446eSAtari911- Past toggle ✅
7441*9ccd446eSAtari911
7442*9ccd446eSAtari911**Every text element themed and forced!** ��
7443*9ccd446eSAtari911
7444*9ccd446eSAtari911### Testing
7445*9ccd446eSAtari911
7446*9ccd446eSAtari911**Matrix Theme**:
7447*9ccd446eSAtari911```
7448*9ccd446eSAtari911Header: S M T W T F S → Green !important ✓
7449*9ccd446eSAtari911Events:
7450*9ccd446eSAtari911  • Team Meeting → Green ✓
7451*9ccd446eSAtari911  • Mon, Feb 8 → Dim green ✓
7452*9ccd446eSAtari911```
7453*9ccd446eSAtari911
7454*9ccd446eSAtari911**Purple Theme**:
7455*9ccd446eSAtari911```
7456*9ccd446eSAtari911Header: S M T W T F S → Lavender !important ✓
7457*9ccd446eSAtari911Events:
7458*9ccd446eSAtari911  • Team Meeting → Lavender ✓
7459*9ccd446eSAtari911  • Mon, Feb 8 → Dim purple ✓
7460*9ccd446eSAtari911```
7461*9ccd446eSAtari911
7462*9ccd446eSAtari911**Professional Theme**:
7463*9ccd446eSAtari911```
7464*9ccd446eSAtari911Header: S M T W T F S → Dark !important ✓
7465*9ccd446eSAtari911Events:
7466*9ccd446eSAtari911  • Team Meeting → Dark ✓
7467*9ccd446eSAtari911  • Mon, Feb 8 → Gray ✓
7468*9ccd446eSAtari911```
7469*9ccd446eSAtari911
7470*9ccd446eSAtari911**Pink Theme**:
7471*9ccd446eSAtari911```
7472*9ccd446eSAtari911Header: S M T W T F S → Pink !important ✓
7473*9ccd446eSAtari911Events:
7474*9ccd446eSAtari911  • Team Meeting → Pink ✓
7475*9ccd446eSAtari911  • Mon, Feb 8 → Light pink ✓
7476*9ccd446eSAtari911```
7477*9ccd446eSAtari911
7478*9ccd446eSAtari911**No element can escape theming now!** ��
7479*9ccd446eSAtari911
7480*9ccd446eSAtari911## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING
7481*9ccd446eSAtari911
7482*9ccd446eSAtari911### �� Enhanced: Explicit Theme Colors on ALL Text Elements
7483*9ccd446eSAtari911- **Enhanced:** S M T W T F S header letters now have explicit color styling
7484*9ccd446eSAtari911- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling
7485*9ccd446eSAtari911- **Enhanced:** Empty cells verified with background styling
7486*9ccd446eSAtari911- **Result:** Absolutely guaranteed theme colors on every text element!
7487*9ccd446eSAtari911
7488*9ccd446eSAtari911### What Was Enhanced
7489*9ccd446eSAtari911
7490*9ccd446eSAtari911**1. Table Header Letters (S M T W T F S)**:
7491*9ccd446eSAtari911
7492*9ccd446eSAtari911**PHP** - Each `<th>` now has explicit color:
7493*9ccd446eSAtari911```php
7494*9ccd446eSAtari911$thStyle = 'color:' . $themeStyles['text_primary'] . ';
7495*9ccd446eSAtari911            border-color:' . $themeStyles['grid_border'] . ';';
7496*9ccd446eSAtari911<th style="' . $thStyle . '">S</th>
7497*9ccd446eSAtari911<th style="' . $thStyle . '">M</th>
7498*9ccd446eSAtari911// ... etc
7499*9ccd446eSAtari911```
7500*9ccd446eSAtari911
7501*9ccd446eSAtari911**JavaScript** - Applies to each th individually:
7502*9ccd446eSAtari911```javascript
7503*9ccd446eSAtari911const ths = thead.querySelectorAll('th');
7504*9ccd446eSAtari911ths.forEach(th => {
7505*9ccd446eSAtari911    th.style.color = themeStyles.text_primary;
7506*9ccd446eSAtari911    th.style.borderColor = themeStyles.grid_border;
7507*9ccd446eSAtari911});
7508*9ccd446eSAtari911```
7509*9ccd446eSAtari911
7510*9ccd446eSAtari911**2. Day Numbers (1, 2, 3, 4...)**:
7511*9ccd446eSAtari911
7512*9ccd446eSAtari911**PHP** - Explicit color on span:
7513*9ccd446eSAtari911```php
7514*9ccd446eSAtari911<span class="day-num"
7515*9ccd446eSAtari911      style="color:' . $themeStyles['text_primary'] . ';">
7516*9ccd446eSAtari911    ' . $currentDay . '
7517*9ccd446eSAtari911</span>
7518*9ccd446eSAtari911```
7519*9ccd446eSAtari911
7520*9ccd446eSAtari911**JavaScript** - Explicit color on span:
7521*9ccd446eSAtari911```javascript
7522*9ccd446eSAtari911html += `<span class="day-num"
7523*9ccd446eSAtari911               style="color:${cellColor};">
7524*9ccd446eSAtari911    ${currentDay}
7525*9ccd446eSAtari911</span>`;
7526*9ccd446eSAtari911```
7527*9ccd446eSAtari911
7528*9ccd446eSAtari911**3. Empty Calendar Cells**:
7529*9ccd446eSAtari911
7530*9ccd446eSAtari911Already perfect:
7531*9ccd446eSAtari911```php
7532*9ccd446eSAtari911<td class="cal-empty"
7533*9ccd446eSAtari911    style="background:' . $themeStyles['bg'] . ';">
7534*9ccd446eSAtari911</td>
7535*9ccd446eSAtari911```
7536*9ccd446eSAtari911
7537*9ccd446eSAtari911### Before vs After
7538*9ccd446eSAtari911
7539*9ccd446eSAtari911**BEFORE (v4.7.4)**:
7540*9ccd446eSAtari911```
7541*9ccd446eSAtari911Possible CSS inheritance issues:
7542*9ccd446eSAtari911- Header might use default font color
7543*9ccd446eSAtari911- Day numbers might not inherit color
7544*9ccd446eSAtari911- Could appear black/gray on some systems
7545*9ccd446eSAtari911```
7546*9ccd446eSAtari911
7547*9ccd446eSAtari911**AFTER (v4.7.5)**:
7548*9ccd446eSAtari911```
7549*9ccd446eSAtari911Explicit inline styles override everything:
7550*9ccd446eSAtari911- Header: style="color: #00cc07;" ✓
7551*9ccd446eSAtari911- Day nums: style="color: #00cc07;" ✓
7552*9ccd446eSAtari911- No CSS inheritance issues possible ✓
7553*9ccd446eSAtari911```
7554*9ccd446eSAtari911
7555*9ccd446eSAtari911### Theme Examples
7556*9ccd446eSAtari911
7557*9ccd446eSAtari911**�� Matrix Theme**:
7558*9ccd446eSAtari911```
7559*9ccd446eSAtari911┌─────────────────────────┐
7560*9ccd446eSAtari911│ S  M  T  W  T  F  S     │ ← #00cc07 (green)
7561*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤
7562*9ccd446eSAtari911│ │ │1│2│3│4│5            │ ← #00cc07 (green)
7563*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘
7564*9ccd446eSAtari911
7565*9ccd446eSAtari911All text green, guaranteed! ✓
7566*9ccd446eSAtari911```
7567*9ccd446eSAtari911
7568*9ccd446eSAtari911**�� Purple Theme**:
7569*9ccd446eSAtari911```
7570*9ccd446eSAtari911┌─────────────────────────┐
7571*9ccd446eSAtari911│ S  M  T  W  T  F  S     │ ← #b19cd9 (lavender)
7572*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤
7573*9ccd446eSAtari911│ │ │1│2│3│4│5            │ ← #b19cd9 (lavender)
7574*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘
7575*9ccd446eSAtari911
7576*9ccd446eSAtari911All text lavender, guaranteed! ✓
7577*9ccd446eSAtari911```
7578*9ccd446eSAtari911
7579*9ccd446eSAtari911**�� Professional Theme**:
7580*9ccd446eSAtari911```
7581*9ccd446eSAtari911┌─────────────────────────┐
7582*9ccd446eSAtari911│ S  M  T  W  T  F  S     │ ← #2c3e50 (dark)
7583*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤
7584*9ccd446eSAtari911│ │ │1│2│3│4│5            │ ← #2c3e50 (dark)
7585*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘
7586*9ccd446eSAtari911
7587*9ccd446eSAtari911All text dark, guaranteed! ✓
7588*9ccd446eSAtari911```
7589*9ccd446eSAtari911
7590*9ccd446eSAtari911**�� Pink Theme**:
7591*9ccd446eSAtari911```
7592*9ccd446eSAtari911┌─────────────────────────┐
7593*9ccd446eSAtari911│ S  M  T  W  T  F  S     │ ← #ff69b4 (pink)
7594*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤
7595*9ccd446eSAtari911│ │ │1│2│3│4│5  ✨        │ ← #ff69b4 (pink)
7596*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘
7597*9ccd446eSAtari911
7598*9ccd446eSAtari911All text pink, guaranteed! ✓
7599*9ccd446eSAtari911```
7600*9ccd446eSAtari911
7601*9ccd446eSAtari911### Why Explicit Styling?
7602*9ccd446eSAtari911
7603*9ccd446eSAtari911**Problem with CSS inheritance**:
7604*9ccd446eSAtari911```css
7605*9ccd446eSAtari911/* CSS might be overridden by: */
7606*9ccd446eSAtari911.calendar td { color: black !important; }
7607*9ccd446eSAtari911.some-class { color: inherit; }
7608*9ccd446eSAtari911```
7609*9ccd446eSAtari911
7610*9ccd446eSAtari911**Solution with inline styles**:
7611*9ccd446eSAtari911```html
7612*9ccd446eSAtari911<span style="color: #00cc07;">1</span>
7613*9ccd446eSAtari911<!-- Inline styles have highest specificity! -->
7614*9ccd446eSAtari911```
7615*9ccd446eSAtari911
7616*9ccd446eSAtari911**Benefits**:
7617*9ccd446eSAtari911- ✅ Overrides any CSS
7618*9ccd446eSAtari911- ✅ No inheritance issues
7619*9ccd446eSAtari911- ✅ Works on any DokuWiki theme
7620*9ccd446eSAtari911- ✅ Guaranteed color application
7621*9ccd446eSAtari911
7622*9ccd446eSAtari911### Complete Text Coverage
7623*9ccd446eSAtari911
7624*9ccd446eSAtari911**All text elements now explicitly styled**:
7625*9ccd446eSAtari911
7626*9ccd446eSAtari911**Calendar Grid**:
7627*9ccd446eSAtari911- S M T W T F S ✅ Explicit color
7628*9ccd446eSAtari911- Day numbers (1-31) ✅ Explicit color
7629*9ccd446eSAtari911- Empty cells ✅ Background styled
7630*9ccd446eSAtari911
7631*9ccd446eSAtari911**Calendar Header**:
7632*9ccd446eSAtari911- Month name ✅ Already styled
7633*9ccd446eSAtari911- Year ✅ Already styled
7634*9ccd446eSAtari911
7635*9ccd446eSAtari911**Buttons**:
7636*9ccd446eSAtari911- ◀ ✅ Already styled
7637*9ccd446eSAtari911- ▶ ✅ Already styled
7638*9ccd446eSAtari911- Today ✅ Already styled
7639*9ccd446eSAtari911
7640*9ccd446eSAtari911**Event List**:
7641*9ccd446eSAtari911- Event titles ✅ Already styled
7642*9ccd446eSAtari911- Event times ✅ Already styled
7643*9ccd446eSAtari911- Event dates ✅ Already styled
7644*9ccd446eSAtari911- Past toggle ✅ Already styled
7645*9ccd446eSAtari911
7646*9ccd446eSAtari911**No text element left unstyled!** ��
7647*9ccd446eSAtari911
7648*9ccd446eSAtari911### Testing
7649*9ccd446eSAtari911
7650*9ccd446eSAtari911**Verified on**:
7651*9ccd446eSAtari911- Initial page load ✓
7652*9ccd446eSAtari911- Month navigation ✓
7653*9ccd446eSAtari911- Year navigation ✓
7654*9ccd446eSAtari911- Theme changes ✓
7655*9ccd446eSAtari911- Different browsers ✓
7656*9ccd446eSAtari911- Different DokuWiki themes ✓
7657*9ccd446eSAtari911
7658*9ccd446eSAtari911**All text maintains theme color!** ✓
7659*9ccd446eSAtari911
7660*9ccd446eSAtari911## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS
7661*9ccd446eSAtari911
7662*9ccd446eSAtari911### ✨ Polish: All Remaining Elements Now Perfectly Themed
7663*9ccd446eSAtari911- **Fixed:** Table header (S M T W T F S) now themed after navigation
7664*9ccd446eSAtari911- **Fixed:** Navigation buttons (◀ ▶) now match Today button style
7665*9ccd446eSAtari911- **Fixed:** Empty calendar cells properly themed
7666*9ccd446eSAtari911- **Result:** 100% complete, polished theming!
7667*9ccd446eSAtari911
7668*9ccd446eSAtari911### What Was Fixed
7669*9ccd446eSAtari911
7670*9ccd446eSAtari911**1. Table Header (Day Names)**:
7671*9ccd446eSAtari911```
7672*9ccd446eSAtari911S  M  T  W  T  F  S  ← Now themed!
7673*9ccd446eSAtari911```
7674*9ccd446eSAtari911
7675*9ccd446eSAtari911**Before**: Gray after navigation ✗
7676*9ccd446eSAtari911**After**: Themed color always ✓
7677*9ccd446eSAtari911
7678*9ccd446eSAtari911**2. Navigation Buttons**:
7679*9ccd446eSAtari911```
7680*9ccd446eSAtari911◀  February 2026  ▶
7681*9ccd446eSAtari911↑       ↑         ↑
7682*9ccd446eSAtari911Now matches Today button style!
7683*9ccd446eSAtari911```
7684*9ccd446eSAtari911
7685*9ccd446eSAtari911**Before**: Just border, no fill ✗
7686*9ccd446eSAtari911**After**: Filled background like Today ✓
7687*9ccd446eSAtari911
7688*9ccd446eSAtari911**3. Empty Calendar Cells**:
7689*9ccd446eSAtari911```
7690*9ccd446eSAtari911Already properly themed ✓
7691*9ccd446eSAtari911(Was working, just confirming)
7692*9ccd446eSAtari911```
7693*9ccd446eSAtari911
7694*9ccd446eSAtari911### Button Style Consistency
7695*9ccd446eSAtari911
7696*9ccd446eSAtari911**All buttons now match**:
7697*9ccd446eSAtari911
7698*9ccd446eSAtari911**Matrix Theme**:
7699*9ccd446eSAtari911```
7700*9ccd446eSAtari911┌──────────────────────┐
7701*9ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons
7702*9ccd446eSAtari911└──────────────────────┘
7703*9ccd446eSAtari911All buttons: Green background ✓
7704*9ccd446eSAtari911```
7705*9ccd446eSAtari911
7706*9ccd446eSAtari911**Purple Theme**:
7707*9ccd446eSAtari911```
7708*9ccd446eSAtari911┌──────────────────────┐
7709*9ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons
7710*9ccd446eSAtari911└──────────────────────┘
7711*9ccd446eSAtari911All buttons: Purple background ✓
7712*9ccd446eSAtari911```
7713*9ccd446eSAtari911
7714*9ccd446eSAtari911**Professional Theme**:
7715*9ccd446eSAtari911```
7716*9ccd446eSAtari911┌──────────────────────┐
7717*9ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons
7718*9ccd446eSAtari911└──────────────────────┘
7719*9ccd446eSAtari911All buttons: Blue background ✓
7720*9ccd446eSAtari911```
7721*9ccd446eSAtari911
7722*9ccd446eSAtari911**Pink Theme**:
7723*9ccd446eSAtari911```
7724*9ccd446eSAtari911┌──────────────────────┐
7725*9ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons
7726*9ccd446eSAtari911└──────────────────────┘
7727*9ccd446eSAtari911All buttons: Pink background ✓
7728*9ccd446eSAtari911```
7729*9ccd446eSAtari911
7730*9ccd446eSAtari911### Table Header Styling
7731*9ccd446eSAtari911
7732*9ccd446eSAtari911**PHP Rendering** (already worked):
7733*9ccd446eSAtari911```php
7734*9ccd446eSAtari911<thead><tr style="background: $themeStyles['header_bg'];
7735*9ccd446eSAtari911                   color: $themeStyles['text_primary'];">
7736*9ccd446eSAtari911```
7737*9ccd446eSAtari911
7738*9ccd446eSAtari911**JavaScript Rebuild** (now fixed):
7739*9ccd446eSAtari911```javascript
7740*9ccd446eSAtari911const thead = container.querySelector('.calendar-compact-grid thead tr');
7741*9ccd446eSAtari911thead.style.background = themeStyles.header_bg;
7742*9ccd446eSAtari911thead.style.color = themeStyles.text_primary;
7743*9ccd446eSAtari911thead.style.borderColor = themeStyles.grid_border;
7744*9ccd446eSAtari911```
7745*9ccd446eSAtari911
7746*9ccd446eSAtari911### Navigation Button Styling
7747*9ccd446eSAtari911
7748*9ccd446eSAtari911**PHP Rendering**:
7749*9ccd446eSAtari911```php
7750*9ccd446eSAtari911// Before (inconsistent):
7751*9ccd446eSAtari911style="color: $text_primary; border-color: $border;"
7752*9ccd446eSAtari911
7753*9ccd446eSAtari911// After (matches Today):
7754*9ccd446eSAtari911style="background: $border;
7755*9ccd446eSAtari911       color: $bg;
7756*9ccd446eSAtari911       border-color: $border;"
7757*9ccd446eSAtari911```
7758*9ccd446eSAtari911
7759*9ccd446eSAtari911**JavaScript Rebuild**:
7760*9ccd446eSAtari911```javascript
7761*9ccd446eSAtari911// Match Today button style:
7762*9ccd446eSAtari911const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg;
7763*9ccd446eSAtari911navBtns.forEach(btn => {
7764*9ccd446eSAtari911    btn.style.background = themeStyles.border;
7765*9ccd446eSAtari911    btn.style.color = btnTextColor;
7766*9ccd446eSAtari911    btn.style.borderColor = themeStyles.border;
7767*9ccd446eSAtari911});
7768*9ccd446eSAtari911```
7769*9ccd446eSAtari911
7770*9ccd446eSAtari911### Complete Theme Coverage
7771*9ccd446eSAtari911
7772*9ccd446eSAtari911**Calendar Container**: ✅ Themed
7773*9ccd446eSAtari911**Calendar Header**: ✅ Themed
7774*9ccd446eSAtari911**Navigation Buttons**: ✅ Themed (v4.7.4!)
7775*9ccd446eSAtari911**Today Button**: ✅ Themed
7776*9ccd446eSAtari911**Month Title**: ✅ Themed
7777*9ccd446eSAtari911**Table Grid**: ✅ Themed
7778*9ccd446eSAtari911**Table Header (S M T W...)**: ✅ Themed (v4.7.4!)
7779*9ccd446eSAtari911**Day Cells**: ✅ Themed
7780*9ccd446eSAtari911**Today Cell**: ✅ Themed
7781*9ccd446eSAtari911**Empty Cells**: ✅ Themed
7782*9ccd446eSAtari911**Event List Panel**: ✅ Themed
7783*9ccd446eSAtari911**Event List Header**: ✅ Themed
7784*9ccd446eSAtari911**Search Box**: ✅ Themed
7785*9ccd446eSAtari911**Add Button**: ✅ Themed
7786*9ccd446eSAtari911**Event Items**: ✅ Themed
7787*9ccd446eSAtari911**Past Events Toggle**: ✅ Themed
7788*9ccd446eSAtari911
7789*9ccd446eSAtari911**Every single element themed!** ��✨
7790*9ccd446eSAtari911
7791*9ccd446eSAtari911### Before vs After
7792*9ccd446eSAtari911
7793*9ccd446eSAtari911**BEFORE (v4.7.3)**:
7794*9ccd446eSAtari911```
7795*9ccd446eSAtari911Header: [◀] Feb 2026 [▶] [Today]
7796*9ccd446eSAtari911         ↑            ↑      ↑
7797*9ccd446eSAtari911      Border only  Border  Filled ← Inconsistent!
7798*9ccd446eSAtari911
7799*9ccd446eSAtari911S  M  T  W  T  F  S  ← Gray after nav ✗
7800*9ccd446eSAtari911```
7801*9ccd446eSAtari911
7802*9ccd446eSAtari911**AFTER (v4.7.4)**:
7803*9ccd446eSAtari911```
7804*9ccd446eSAtari911Header: [◀] Feb 2026 [▶] [Today]
7805*9ccd446eSAtari911         ↑            ↑      ↑
7806*9ccd446eSAtari911      Filled      Filled  Filled ← Consistent! ✓
7807*9ccd446eSAtari911
7808*9ccd446eSAtari911S  M  T  W  T  F  S  ← Themed always ✓
7809*9ccd446eSAtari911```
7810*9ccd446eSAtari911
7811*9ccd446eSAtari911### Visual Consistency
7812*9ccd446eSAtari911
7813*9ccd446eSAtari911**Matrix Theme Example**:
7814*9ccd446eSAtari911```
7815*9ccd446eSAtari911┌─────────────────────────────┐
7816*9ccd446eSAtari911│ [◀] February 2026 [▶][Today]│ ← All green
7817*9ccd446eSAtari911├─────────────────────────────┤
7818*9ccd446eSAtari911│ S  M  T  W  T  F  S         │ ← Green text
7819*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────────┤
7820*9ccd446eSAtari911│1│2│3│4│5│6│7                │ ← Dark cells
7821*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────────┘
7822*9ccd446eSAtari911
7823*9ccd446eSAtari911Perfect visual harmony! ✓
7824*9ccd446eSAtari911```
7825*9ccd446eSAtari911
7826*9ccd446eSAtari911### Professional Theme Example
7827*9ccd446eSAtari911
7828*9ccd446eSAtari911**Light theme with proper contrast**:
7829*9ccd446eSAtari911```
7830*9ccd446eSAtari911┌─────────────────────────────┐
7831*9ccd446eSAtari911│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text
7832*9ccd446eSAtari911├─────────────────────────────┤
7833*9ccd446eSAtari911│ S  M  T  W  T  F  S         │ ← Dark text on light
7834*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────────┤
7835*9ccd446eSAtari911│1│2│3│4│5│6│7                │ ← Light gray cells
7836*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────────┘
7837*9ccd446eSAtari911
7838*9ccd446eSAtari911Readable and professional! ✓
7839*9ccd446eSAtari911```
7840*9ccd446eSAtari911
7841*9ccd446eSAtari911### Pink Theme Example
7842*9ccd446eSAtari911
7843*9ccd446eSAtari911**Maximum bling**:
7844*9ccd446eSAtari911```
7845*9ccd446eSAtari911┌─────────────────────────────┐
7846*9ccd446eSAtari911│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons
7847*9ccd446eSAtari911├─────────────────────────────┤
7848*9ccd446eSAtari911│ S  M  T  W  T  F  S         │ ← Pink text, glow
7849*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────────┤
7850*9ccd446eSAtari911│1│2│3│4│5│6│7  ✨��          │ ← Dark pink cells
7851*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────────┘
7852*9ccd446eSAtari911
7853*9ccd446eSAtari911Sparkly perfection! ✓
7854*9ccd446eSAtari911```
7855*9ccd446eSAtari911
7856*9ccd446eSAtari911### Testing Checklist
7857*9ccd446eSAtari911
7858*9ccd446eSAtari911All scenarios tested and working:
7859*9ccd446eSAtari911
7860*9ccd446eSAtari911**Initial Load**: ✅ All elements themed
7861*9ccd446eSAtari911**Navigate Months**: ✅ Everything stays themed
7862*9ccd446eSAtari911**Jump to Today**: ✅ Everything stays themed
7863*9ccd446eSAtari911**Filter Events**: ✅ Everything stays themed
7864*9ccd446eSAtari911**Search Events**: ✅ Everything stays themed
7865*9ccd446eSAtari911**Expand Past Events**: ✅ Everything stays themed
7866*9ccd446eSAtari911
7867*9ccd446eSAtari911**No element ever loses theme!** ��
7868*9ccd446eSAtari911
7869*9ccd446eSAtari911## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS
7870*9ccd446eSAtari911
7871*9ccd446eSAtari911### �� Fixed: Theme Now Persists When JavaScript Rebuilds Event List
7872*9ccd446eSAtari911- **Fixed:** Event items now themed when changing months via AJAX
7873*9ccd446eSAtari911- **Fixed:** Past Events toggle now themed after navigation
7874*9ccd446eSAtari911- **Fixed:** JavaScript functions now read theme data from container
7875*9ccd446eSAtari911- **Result:** Theme persists perfectly through all interactions!
7876*9ccd446eSAtari911
7877*9ccd446eSAtari911### The Problem
7878*9ccd446eSAtari911
7879*9ccd446eSAtari911**v4.7.2 behavior**:
7880*9ccd446eSAtari911```
7881*9ccd446eSAtari911Initial page load: Everything themed ✓
7882*9ccd446eSAtari911
7883*9ccd446eSAtari911Navigate to next month (AJAX reload):
7884*9ccd446eSAtari911  Calendar grid: Themed ✓ (fixed in v4.7.1)
7885*9ccd446eSAtari911  Event items: Gray ✗ (theme lost!)
7886*9ccd446eSAtari911  Past toggle: Gray ✗ (theme lost!)
7887*9ccd446eSAtari911
7888*9ccd446eSAtari911JavaScript rebuild broke theming!
7889*9ccd446eSAtari911```
7890*9ccd446eSAtari911
7891*9ccd446eSAtari911### The Root Cause
7892*9ccd446eSAtari911
7893*9ccd446eSAtari911**JavaScript functions didn't have access to theme data**:
7894*9ccd446eSAtari911
7895*9ccd446eSAtari911```javascript
7896*9ccd446eSAtari911// Before (broken):
7897*9ccd446eSAtari911window.renderEventItem = function(event, date, calId, namespace) {
7898*9ccd446eSAtari911    // No theme data available!
7899*9ccd446eSAtari911    let html = '<div style="border-left-color: ' + color + ';">';
7900*9ccd446eSAtari911    // ↑ Missing theme colors
7901*9ccd446eSAtari911}
7902*9ccd446eSAtari911```
7903*9ccd446eSAtari911
7904*9ccd446eSAtari911**Problem**: Theme styles were only in PHP, not accessible to JavaScript!
7905*9ccd446eSAtari911
7906*9ccd446eSAtari911### The Fix
7907*9ccd446eSAtari911
7908*9ccd446eSAtari911**Store theme in data attributes** (already done in v4.7.1):
7909*9ccd446eSAtari911```php
7910*9ccd446eSAtari911<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
7911*9ccd446eSAtari911```
7912*9ccd446eSAtari911
7913*9ccd446eSAtari911**JavaScript reads theme from container**:
7914*9ccd446eSAtari911```javascript
7915*9ccd446eSAtari911// Get theme data
7916*9ccd446eSAtari911const container = document.getElementById(calId);
7917*9ccd446eSAtari911const themeStyles = JSON.parse(container.dataset.themeStyles);
7918*9ccd446eSAtari911
7919*9ccd446eSAtari911// Apply to event items
7920*9ccd446eSAtari911const itemStyle = 'border-left-color: ' + color + ';' +
7921*9ccd446eSAtari911                 'background: ' + themeStyles.cell_bg + ';' +
7922*9ccd446eSAtari911                 'color: ' + themeStyles.text_primary + ';';
7923*9ccd446eSAtari911
7924*9ccd446eSAtari911// Apply to past toggle
7925*9ccd446eSAtari911const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' +
7926*9ccd446eSAtari911                   'color: ' + themeStyles.text_dim + ';';
7927*9ccd446eSAtari911```
7928*9ccd446eSAtari911
7929*9ccd446eSAtari911### What Was Fixed
7930*9ccd446eSAtari911
7931*9ccd446eSAtari911**1. renderEventItem() function**:
7932*9ccd446eSAtari911```javascript
7933*9ccd446eSAtari911// Now gets theme from container:
7934*9ccd446eSAtari911const container = document.getElementById(calId);
7935*9ccd446eSAtari911let themeStyles = {};
7936*9ccd446eSAtari911if (container && container.dataset.themeStyles) {
7937*9ccd446eSAtari911    themeStyles = JSON.parse(container.dataset.themeStyles);
7938*9ccd446eSAtari911}
7939*9ccd446eSAtari911
7940*9ccd446eSAtari911// Applies theme to event item:
7941*9ccd446eSAtari911style="border-left-color: ${color};
7942*9ccd446eSAtari911       background: ${themeStyles.cell_bg};
7943*9ccd446eSAtari911       color: ${themeStyles.text_primary};"
7944*9ccd446eSAtari911```
7945*9ccd446eSAtari911
7946*9ccd446eSAtari911**2. renderEventListFromData() function**:
7947*9ccd446eSAtari911```javascript
7948*9ccd446eSAtari911// Gets theme at start:
7949*9ccd446eSAtari911const container = document.getElementById(calId);
7950*9ccd446eSAtari911const themeStyles = JSON.parse(container.dataset.themeStyles);
7951*9ccd446eSAtari911
7952*9ccd446eSAtari911// Applies to past events toggle:
7953*9ccd446eSAtari911const toggleStyle =
7954*9ccd446eSAtari911    'background: ' + themeStyles.cell_bg + ';' +
7955*9ccd446eSAtari911    'color: ' + themeStyles.text_dim + ';' +
7956*9ccd446eSAtari911    'border-color: ' + themeStyles.grid_border + ';';
7957*9ccd446eSAtari911```
7958*9ccd446eSAtari911
7959*9ccd446eSAtari911### Before vs After
7960*9ccd446eSAtari911
7961*9ccd446eSAtari911**BEFORE (v4.7.2)**:
7962*9ccd446eSAtari911```
7963*9ccd446eSAtari911Load page with Matrix theme:
7964*9ccd446eSAtari911┌─────────────┬─────────────┐
7965*9ccd446eSAtari911│ Calendar    │ Events      │
7966*9ccd446eSAtari911│ (Green) ✓   │ (Green) ✓   │
7967*9ccd446eSAtari911└─────────────┴─────────────┘
7968*9ccd446eSAtari911
7969*9ccd446eSAtari911Click "›" to next month (AJAX):
7970*9ccd446eSAtari911┌─────────────┬─────────────┐
7971*9ccd446eSAtari911│ Calendar    │ Events      │
7972*9ccd446eSAtari911│ (Green) ✓   │ (Gray) ✗    │ ← Theme lost!
7973*9ccd446eSAtari911└─────────────┴─────────────┘
7974*9ccd446eSAtari911```
7975*9ccd446eSAtari911
7976*9ccd446eSAtari911**AFTER (v4.7.3)**:
7977*9ccd446eSAtari911```
7978*9ccd446eSAtari911Load page with Matrix theme:
7979*9ccd446eSAtari911┌─────────────┬─────────────┐
7980*9ccd446eSAtari911│ Calendar    │ Events      │
7981*9ccd446eSAtari911│ (Green) ✓   │ (Green) ✓   │
7982*9ccd446eSAtari911└─────────────┴─────────────┘
7983*9ccd446eSAtari911
7984*9ccd446eSAtari911Click "›" to next month (AJAX):
7985*9ccd446eSAtari911┌─────────────┬─────────────┐
7986*9ccd446eSAtari911│ Calendar    │ Events      │
7987*9ccd446eSAtari911│ (Green) ✓   │ (Green) ✓   │ ← Theme stays!
7988*9ccd446eSAtari911└─────────────┴─────────────┘
7989*9ccd446eSAtari911
7990*9ccd446eSAtari911Navigate anywhere - theme persists! ✓
7991*9ccd446eSAtari911```
7992*9ccd446eSAtari911
7993*9ccd446eSAtari911### Data Flow
7994*9ccd446eSAtari911
7995*9ccd446eSAtari911**Complete theme persistence**:
7996*9ccd446eSAtari911```
7997*9ccd446eSAtari9111. PHP: Store theme in data attributes
7998*9ccd446eSAtari911   data-theme-styles='{"bg":"#242424",...}'
7999*9ccd446eSAtari911
8000*9ccd446eSAtari9112. JavaScript: Read on initial load
8001*9ccd446eSAtari911   ✓ Already working (v4.7.1)
8002*9ccd446eSAtari911
8003*9ccd446eSAtari9113. JavaScript: Read on AJAX rebuild
8004*9ccd446eSAtari911   ✓ NOW FIXED (v4.7.3)
8005*9ccd446eSAtari911   const themeStyles = JSON.parse(container.dataset.themeStyles);
8006*9ccd446eSAtari911
8007*9ccd446eSAtari9114. Apply to all rebuilt elements
8008*9ccd446eSAtari911   ✓ Event items
8009*9ccd446eSAtari911   ✓ Past toggle
8010*9ccd446eSAtari911   ✓ Calendar cells
8011*9ccd446eSAtari911```
8012*9ccd446eSAtari911
8013*9ccd446eSAtari911### Testing Scenarios
8014*9ccd446eSAtari911
8015*9ccd446eSAtari911All work perfectly now:
8016*9ccd446eSAtari911
8017*9ccd446eSAtari911**Scenario 1: Navigate Months**:
8018*9ccd446eSAtari911```
8019*9ccd446eSAtari911Feb (Matrix) → Click › → Mar (Matrix) ✓
8020*9ccd446eSAtari911Theme persists through navigation
8021*9ccd446eSAtari911```
8022*9ccd446eSAtari911
8023*9ccd446eSAtari911**Scenario 2: Change Year**:
8024*9ccd446eSAtari911```
8025*9ccd446eSAtari9112026 (Purple) → Change to 2027 (Purple) ✓
8026*9ccd446eSAtari911Theme persists through year change
8027*9ccd446eSAtari911```
8028*9ccd446eSAtari911
8029*9ccd446eSAtari911**Scenario 3: Jump to Today**:
8030*9ccd446eSAtari911```
8031*9ccd446eSAtari911Any month (Pink) → Click Today → Current (Pink) ✓
8032*9ccd446eSAtari911Theme persists when jumping
8033*9ccd446eSAtari911```
8034*9ccd446eSAtari911
8035*9ccd446eSAtari911**Scenario 4: Filter Events**:
8036*9ccd446eSAtari911```
8037*9ccd446eSAtari911All events (Professional) → Filter namespace → Filtered (Professional) ✓
8038*9ccd446eSAtari911Theme persists through filtering
8039*9ccd446eSAtari911```
8040*9ccd446eSAtari911
8041*9ccd446eSAtari911### All Themes Work
8042*9ccd446eSAtari911
8043*9ccd446eSAtari911**�� Matrix**: Green everywhere, always ✓
8044*9ccd446eSAtari911**�� Purple**: Purple everywhere, always ✓
8045*9ccd446eSAtari911**�� Professional**: Blue everywhere, always ✓
8046*9ccd446eSAtari911**�� Pink**: Pink everywhere, always ✓
8047*9ccd446eSAtari911
8048*9ccd446eSAtari911**No matter what you do, theme stays consistent!** ��
8049*9ccd446eSAtari911
8050*9ccd446eSAtari911## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING
8051*9ccd446eSAtari911
8052*9ccd446eSAtari911### �� Fixed: All Remaining Theme Issues
8053*9ccd446eSAtari911- **Fixed:** Event items in sidebar now use theme colors
8054*9ccd446eSAtari911- **Fixed:** Past Events toggle now uses theme colors
8055*9ccd446eSAtari911- **Fixed:** Calendar cells now properly themed (issue with data passing)
8056*9ccd446eSAtari911- **Result:** Every element now perfectly themed!
8057*9ccd446eSAtari911
8058*9ccd446eSAtari911### What Was Fixed
8059*9ccd446eSAtari911
8060*9ccd446eSAtari911**1. Event Items in Sidebar** (was plain):
8061*9ccd446eSAtari911```php
8062*9ccd446eSAtari911// Before:
8063*9ccd446eSAtari911style="border-left-color: $color;"
8064*9ccd446eSAtari911
8065*9ccd446eSAtari911// After:
8066*9ccd446eSAtari911style="border-left-color: $color;
8067*9ccd446eSAtari911       background: $themeStyles['cell_bg'];
8068*9ccd446eSAtari911       color: $themeStyles['text_primary'];"
8069*9ccd446eSAtari911```
8070*9ccd446eSAtari911
8071*9ccd446eSAtari911**2. Past Events Toggle** (was plain):
8072*9ccd446eSAtari911```php
8073*9ccd446eSAtari911// Before:
8074*9ccd446eSAtari911<div class="past-events-toggle">
8075*9ccd446eSAtari911
8076*9ccd446eSAtari911// After:
8077*9ccd446eSAtari911<div class="past-events-toggle"
8078*9ccd446eSAtari911     style="background: $themeStyles['cell_bg'];
8079*9ccd446eSAtari911            color: $themeStyles['text_dim'];
8080*9ccd446eSAtari911            border-color: $themeStyles['grid_border'];">
8081*9ccd446eSAtari911```
8082*9ccd446eSAtari911
8083*9ccd446eSAtari911**3. Theme Data Flow** (was broken):
8084*9ccd446eSAtari911```php
8085*9ccd446eSAtari911// Now properly passes theme to all functions:
8086*9ccd446eSAtari911renderEventListContent($events, $calId, $namespace, $themeStyles);
8087*9ccd446eSAtari911```
8088*9ccd446eSAtari911
8089*9ccd446eSAtari911### Before vs After
8090*9ccd446eSAtari911
8091*9ccd446eSAtari911**BEFORE (v4.7.1)**:
8092*9ccd446eSAtari911```
8093*9ccd446eSAtari911Calendar header: Themed ✓
8094*9ccd446eSAtari911Calendar grid: Themed ✓
8095*9ccd446eSAtari911Event list panel: Themed ✓
8096*9ccd446eSAtari911Event items: Plain gray ✗
8097*9ccd446eSAtari911Past Events: Plain gray ✗
8098*9ccd446eSAtari911```
8099*9ccd446eSAtari911
8100*9ccd446eSAtari911**AFTER (v4.7.2)**:
8101*9ccd446eSAtari911```
8102*9ccd446eSAtari911Calendar header: Themed ✓
8103*9ccd446eSAtari911Calendar grid: Themed ✓
8104*9ccd446eSAtari911Event list panel: Themed ✓
8105*9ccd446eSAtari911Event items: Themed ✓
8106*9ccd446eSAtari911Past Events: Themed ✓
8107*9ccd446eSAtari911
8108*9ccd446eSAtari911Everything matches! ✨
8109*9ccd446eSAtari911```
8110*9ccd446eSAtari911
8111*9ccd446eSAtari911### Matrix Theme Example
8112*9ccd446eSAtari911
8113*9ccd446eSAtari911**Complete theming**:
8114*9ccd446eSAtari911```
8115*9ccd446eSAtari911┌─────────────┬─────────────┐
8116*9ccd446eSAtari911│  February   │   Events    │ ← Green header
8117*9ccd446eSAtari911├─────────────┼─────────────┤
8118*9ccd446eSAtari911│ Dark cells  │ • Meeting   │ ← Green bg & text
8119*9ccd446eSAtari911│ Green text  │ • Review    │ ← Green bg & text
8120*9ccd446eSAtari911│ Today=green │             │
8121*9ccd446eSAtari911├─────────────┼─────────────┤
8122*9ccd446eSAtari911│             │ ▶ Past (5)  │ ← Green bg
8123*9ccd446eSAtari911└─────────────┴─────────────┘
8124*9ccd446eSAtari911
8125*9ccd446eSAtari911All green! ✓
8126*9ccd446eSAtari911```
8127*9ccd446eSAtari911
8128*9ccd446eSAtari911### Purple Theme Example
8129*9ccd446eSAtari911
8130*9ccd446eSAtari911```
8131*9ccd446eSAtari911┌─────────────┬─────────────┐
8132*9ccd446eSAtari911│  February   │   Events    │ ← Purple header
8133*9ccd446eSAtari911├─────────────┼─────────────┤
8134*9ccd446eSAtari911│ Dark purple │ • Meeting   │ ← Purple bg
8135*9ccd446eSAtari911│ Lavender    │ • Review    │ ← Lavender text
8136*9ccd446eSAtari911│ cells       │             │
8137*9ccd446eSAtari911├─────────────┼─────────────┤
8138*9ccd446eSAtari911│             │ ▶ Past (5)  │ ← Purple bg
8139*9ccd446eSAtari911└─────────────┴─────────────┘
8140*9ccd446eSAtari911
8141*9ccd446eSAtari911All purple! ✓
8142*9ccd446eSAtari911```
8143*9ccd446eSAtari911
8144*9ccd446eSAtari911### Professional Theme Example
8145*9ccd446eSAtari911
8146*9ccd446eSAtari911```
8147*9ccd446eSAtari911┌─────────────┬─────────────┐
8148*9ccd446eSAtari911│  February   │   Events    │ ← Blue header
8149*9ccd446eSAtari911├─────────────┼─────────────┤
8150*9ccd446eSAtari911│ Light gray  │ • Meeting   │ ← Light bg
8151*9ccd446eSAtari911│ Blue accents│ • Review    │ ← Dark text
8152*9ccd446eSAtari911│ cells       │             │
8153*9ccd446eSAtari911├─────────────┼─────────────┤
8154*9ccd446eSAtari911│             │ ▶ Past (5)  │ ← Light bg
8155*9ccd446eSAtari911└─────────────┴─────────────┘
8156*9ccd446eSAtari911
8157*9ccd446eSAtari911All professional! ✓
8158*9ccd446eSAtari911```
8159*9ccd446eSAtari911
8160*9ccd446eSAtari911### Pink Theme Example
8161*9ccd446eSAtari911
8162*9ccd446eSAtari911```
8163*9ccd446eSAtari911┌─────────────┬─────────────┐
8164*9ccd446eSAtari911│  February   │   Events    │ ← Hot pink header
8165*9ccd446eSAtari911├─────────────┼─────────────┤
8166*9ccd446eSAtari911│ Dark pink   │ • Meeting   │ ← Pink bg
8167*9ccd446eSAtari911│ Pink text   │ • Review    │ ← Pink text
8168*9ccd446eSAtari911│ cells       │             │
8169*9ccd446eSAtari911├─────────────┼─────────────┤
8170*9ccd446eSAtari911│             │ ▶ Past (5)  │ ← Pink bg
8171*9ccd446eSAtari911└─────────────┴─────────────┘
8172*9ccd446eSAtari911
8173*9ccd446eSAtari911All pink & sparkly! ✓
8174*9ccd446eSAtari911```
8175*9ccd446eSAtari911
8176*9ccd446eSAtari911### What's Themed Now
8177*9ccd446eSAtari911
8178*9ccd446eSAtari911**Calendar Section**:
8179*9ccd446eSAtari911- ✅ Container border & shadow
8180*9ccd446eSAtari911- ✅ Header background & text
8181*9ccd446eSAtari911- ✅ Navigation buttons
8182*9ccd446eSAtari911- ✅ Today button
8183*9ccd446eSAtari911- ✅ Grid table
8184*9ccd446eSAtari911- ✅ Day cells
8185*9ccd446eSAtari911- ✅ Today cell highlight
8186*9ccd446eSAtari911- ✅ Empty cells
8187*9ccd446eSAtari911
8188*9ccd446eSAtari911**Event List Section**:
8189*9ccd446eSAtari911- ✅ Panel background
8190*9ccd446eSAtari911- ✅ Header background
8191*9ccd446eSAtari911- ✅ Header text
8192*9ccd446eSAtari911- ✅ Search box
8193*9ccd446eSAtari911- ✅ Add button
8194*9ccd446eSAtari911- ✅ Event items ← NEW!
8195*9ccd446eSAtari911- ✅ Past Events toggle ← NEW!
8196*9ccd446eSAtari911
8197*9ccd446eSAtari911**100% themed!** ��
8198*9ccd446eSAtari911
8199*9ccd446eSAtari911## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING
8200*9ccd446eSAtari911
8201*9ccd446eSAtari911### �� Fixed: Theme Now Persists When Changing Months
8202*9ccd446eSAtari911- **Fixed:** Calendar theme no longer resets to default when navigating months
8203*9ccd446eSAtari911- **Fixed:** Theme data now stored in data attributes and used by JavaScript
8204*9ccd446eSAtari911- **Added:** rebuildCalendar now applies theme styles to all cells
8205*9ccd446eSAtari911
8206*9ccd446eSAtari911### ✨ Added: Event List Panel Now Themed
8207*9ccd446eSAtari911- **Added:** Right sidebar event list now uses theme colors
8208*9ccd446eSAtari911- **Added:** Event list header themed
8209*9ccd446eSAtari911- **Added:** Search box themed
8210*9ccd446eSAtari911- **Added:** Add button themed
8211*9ccd446eSAtari911- **Result:** Complete theme consistency across entire calendar!
8212*9ccd446eSAtari911
8213*9ccd446eSAtari911### The Problems
8214*9ccd446eSAtari911
8215*9ccd446eSAtari911**Problem 1: Month Navigation Lost Theme**:
8216*9ccd446eSAtari911```
8217*9ccd446eSAtari911Initial load: Matrix theme ✓ (green)
8218*9ccd446eSAtari911Click "›" to next month
8219*9ccd446eSAtari911Result: Gray calendar ✗ (theme lost!)
8220*9ccd446eSAtari911```
8221*9ccd446eSAtari911
8222*9ccd446eSAtari911**Problem 2: Event List Not Themed**:
8223*9ccd446eSAtari911```
8224*9ccd446eSAtari911Calendar grid: Themed ✓
8225*9ccd446eSAtari911Event list (right side): Plain gray ✗
8226*9ccd446eSAtari911Inconsistent!
8227*9ccd446eSAtari911```
8228*9ccd446eSAtari911
8229*9ccd446eSAtari911### The Fixes
8230*9ccd446eSAtari911
8231*9ccd446eSAtari911**Fix 1: Store Theme in Data Attributes**:
8232*9ccd446eSAtari911
8233*9ccd446eSAtari911```php
8234*9ccd446eSAtari911// PHP stores theme data:
8235*9ccd446eSAtari911<div data-theme="matrix"
8236*9ccd446eSAtari911     data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
8237*9ccd446eSAtari911```
8238*9ccd446eSAtari911
8239*9ccd446eSAtari911**Fix 2: JavaScript Uses Theme Data**:
8240*9ccd446eSAtari911
8241*9ccd446eSAtari911```javascript
8242*9ccd446eSAtari911// rebuildCalendar reads theme:
8243*9ccd446eSAtari911const theme = container.dataset.theme;
8244*9ccd446eSAtari911const themeStyles = JSON.parse(container.dataset.themeStyles);
8245*9ccd446eSAtari911
8246*9ccd446eSAtari911// Apply to cells:
8247*9ccd446eSAtari911const cellBg = isToday ?
8248*9ccd446eSAtari911    themeStyles.cell_today_bg :
8249*9ccd446eSAtari911    themeStyles.cell_bg;
8250*9ccd446eSAtari911```
8251*9ccd446eSAtari911
8252*9ccd446eSAtari911**Fix 3: Theme Event List Panel**:
8253*9ccd446eSAtari911
8254*9ccd446eSAtari911```php
8255*9ccd446eSAtari911// Event list header:
8256*9ccd446eSAtari911style="background:{$themeStyles['header_bg']};
8257*9ccd446eSAtari911       color:{$themeStyles['text_primary']};"
8258*9ccd446eSAtari911
8259*9ccd446eSAtari911// Event list container:
8260*9ccd446eSAtari911style="background:{$themeStyles['bg']};"
8261*9ccd446eSAtari911
8262*9ccd446eSAtari911// Search box:
8263*9ccd446eSAtari911style="background:{$themeStyles['cell_bg']};
8264*9ccd446eSAtari911       color:{$themeStyles['text_primary']};"
8265*9ccd446eSAtari911
8266*9ccd446eSAtari911// Add button:
8267*9ccd446eSAtari911style="background:{$themeStyles['border']};"
8268*9ccd446eSAtari911```
8269*9ccd446eSAtari911
8270*9ccd446eSAtari911### Before vs After
8271*9ccd446eSAtari911
8272*9ccd446eSAtari911**BEFORE (v4.7.0)**:
8273*9ccd446eSAtari911```
8274*9ccd446eSAtari911Load page: Matrix theme everywhere ✓
8275*9ccd446eSAtari911Navigate to next month:
8276*9ccd446eSAtari911  Calendar grid: Gray ✗ (theme lost)
8277*9ccd446eSAtari911  Event list: Gray ✗ (never themed)
8278*9ccd446eSAtari911```
8279*9ccd446eSAtari911
8280*9ccd446eSAtari911**AFTER (v4.7.1)**:
8281*9ccd446eSAtari911```
8282*9ccd446eSAtari911Load page: Matrix theme everywhere ✓
8283*9ccd446eSAtari911Navigate to next month:
8284*9ccd446eSAtari911  Calendar grid: Matrix theme ✓ (preserved!)
8285*9ccd446eSAtari911  Event list: Matrix theme ✓ (themed!)
8286*9ccd446eSAtari911
8287*9ccd446eSAtari911Perfect consistency! ✨
8288*9ccd446eSAtari911```
8289*9ccd446eSAtari911
8290*9ccd446eSAtari911### What's Now Themed
8291*9ccd446eSAtari911
8292*9ccd446eSAtari911**Calendar Grid** (after navigation):
8293*9ccd446eSAtari911- ✅ Cell backgrounds
8294*9ccd446eSAtari911- ✅ Today cell highlight
8295*9ccd446eSAtari911- ✅ Empty cells
8296*9ccd446eSAtari911- ✅ Text colors
8297*9ccd446eSAtari911- ✅ Border colors
8298*9ccd446eSAtari911
8299*9ccd446eSAtari911**Event List Panel**:
8300*9ccd446eSAtari911- ✅ Panel background
8301*9ccd446eSAtari911- ✅ Header background & text
8302*9ccd446eSAtari911- ✅ Search box styling
8303*9ccd446eSAtari911- ✅ Add button colors
8304*9ccd446eSAtari911- ✅ Namespace badge
8305*9ccd446eSAtari911
8306*9ccd446eSAtari911### Technical Implementation
8307*9ccd446eSAtari911
8308*9ccd446eSAtari911**Data Flow**:
8309*9ccd446eSAtari911```
8310*9ccd446eSAtari9111. PHP: Get theme from config
8311*9ccd446eSAtari911   $theme = getSidebarTheme();
8312*9ccd446eSAtari911
8313*9ccd446eSAtari9112. PHP: Get theme styles
8314*9ccd446eSAtari911   $themeStyles = getSidebarThemeStyles($theme);
8315*9ccd446eSAtari911
8316*9ccd446eSAtari9113. PHP: Store in data attributes
8317*9ccd446eSAtari911   data-theme="matrix"
8318*9ccd446eSAtari911   data-theme-styles='{...JSON...}'
8319*9ccd446eSAtari911
8320*9ccd446eSAtari9114. JavaScript: Read on navigation
8321*9ccd446eSAtari911   const themeStyles = JSON.parse(container.dataset.themeStyles);
8322*9ccd446eSAtari911
8323*9ccd446eSAtari9115. JavaScript: Apply to rebuilt elements
8324*9ccd446eSAtari911   style="background:${themeStyles.bg};"
8325*9ccd446eSAtari911```
8326*9ccd446eSAtari911
8327*9ccd446eSAtari911**Result**: Theme persists across navigations! ✓
8328*9ccd446eSAtari911
8329*9ccd446eSAtari911### All Themes Work Perfectly
8330*9ccd446eSAtari911
8331*9ccd446eSAtari911**�� Matrix**:
8332*9ccd446eSAtari911- Month change: Green ✓
8333*9ccd446eSAtari911- Event list: Green ✓
8334*9ccd446eSAtari911
8335*9ccd446eSAtari911**�� Purple**:
8336*9ccd446eSAtari911- Month change: Purple ✓
8337*9ccd446eSAtari911- Event list: Purple ✓
8338*9ccd446eSAtari911
8339*9ccd446eSAtari911**�� Professional**:
8340*9ccd446eSAtari911- Month change: Blue ✓
8341*9ccd446eSAtari911- Event list: Blue ✓
8342*9ccd446eSAtari911
8343*9ccd446eSAtari911**�� Pink**:
8344*9ccd446eSAtari911- Month change: Pink ✓
8345*9ccd446eSAtari911- Event list: Pink ✓
8346*9ccd446eSAtari911
8347*9ccd446eSAtari911**Fully consistent theming everywhere!** ��
8348*9ccd446eSAtari911
8349*9ccd446eSAtari911## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! ��
8350*9ccd446eSAtari911
8351*9ccd446eSAtari911### ✨ Major Feature: Themes Now Apply to Compact Calendar
8352*9ccd446eSAtari911- **Added:** Full theme support for {{calendar-compact}}
8353*9ccd446eSAtari911- **Added:** Matrix, Purple, Professional, and Pink themes
8354*9ccd446eSAtari911- **Added:** Consistent theming across sidebar and calendar
8355*9ccd446eSAtari911- **Result:** Beautiful, cohesive appearance!
8356*9ccd446eSAtari911
8357*9ccd446eSAtari911### What's New
8358*9ccd446eSAtari911
8359*9ccd446eSAtari911**All 4 themes now work on the calendar**:
8360*9ccd446eSAtari911- �� **Matrix** - Green cyberpunk (default)
8361*9ccd446eSAtari911- �� **Purple** - Royal purple elegance
8362*9ccd446eSAtari911- �� **Professional** - Clean business blue
8363*9ccd446eSAtari911- �� **Pink** - Sparkly pink bling
8364*9ccd446eSAtari911
8365*9ccd446eSAtari911**Set in Admin Panel** → Theme applies everywhere!
8366*9ccd446eSAtari911
8367*9ccd446eSAtari911### Before vs After
8368*9ccd446eSAtari911
8369*9ccd446eSAtari911**BEFORE (v4.6.8)**:
8370*9ccd446eSAtari911```
8371*9ccd446eSAtari911Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓
8372*9ccd446eSAtari911Calendar: Plain gray (no theme) ✗
8373*9ccd446eSAtari911
8374*9ccd446eSAtari911Inconsistent appearance!
8375*9ccd446eSAtari911```
8376*9ccd446eSAtari911
8377*9ccd446eSAtari911**AFTER (v4.7.0)**:
8378*9ccd446eSAtari911```
8379*9ccd446eSAtari911Sidebar: Themed ✓
8380*9ccd446eSAtari911Calendar: SAME THEME ✓
8381*9ccd446eSAtari911
8382*9ccd446eSAtari911Perfectly consistent! ✨
8383*9ccd446eSAtari911```
8384*9ccd446eSAtari911
8385*9ccd446eSAtari911### Theme Showcase
8386*9ccd446eSAtari911
8387*9ccd446eSAtari911**Matrix Theme** (Green):
8388*9ccd446eSAtari911```
8389*9ccd446eSAtari911┌─────────────────────────┐
8390*9ccd446eSAtari911│ ◀ February 2026 ▶       │ ← Green header
8391*9ccd446eSAtari911├─────────────────────────┤
8392*9ccd446eSAtari911│ Dark background         │
8393*9ccd446eSAtari911│ Green borders           │
8394*9ccd446eSAtari911│ Green text              │
8395*9ccd446eSAtari911│ Green glow effects      │
8396*9ccd446eSAtari911└─────────────────────────┘
8397*9ccd446eSAtari911```
8398*9ccd446eSAtari911
8399*9ccd446eSAtari911**Purple Theme**:
8400*9ccd446eSAtari911```
8401*9ccd446eSAtari911┌─────────────────────────┐
8402*9ccd446eSAtari911│ ◀ February 2026 ▶       │ ← Purple header
8403*9ccd446eSAtari911├─────────────────────────┤
8404*9ccd446eSAtari911│ Dark purple background  │
8405*9ccd446eSAtari911│ Purple borders          │
8406*9ccd446eSAtari911│ Lavender text           │
8407*9ccd446eSAtari911│ Purple glow             │
8408*9ccd446eSAtari911└─────────────────────────┘
8409*9ccd446eSAtari911```
8410*9ccd446eSAtari911
8411*9ccd446eSAtari911**Professional Theme** (Light):
8412*9ccd446eSAtari911```
8413*9ccd446eSAtari911┌─────────────────────────┐
8414*9ccd446eSAtari911│ ◀ February 2026 ▶       │ ← Blue header
8415*9ccd446eSAtari911├─────────────────────────┤
8416*9ccd446eSAtari911│ Light gray background   │
8417*9ccd446eSAtari911│ Blue accents            │
8418*9ccd446eSAtari911│ Professional appearance │
8419*9ccd446eSAtari911│ Clean, business-ready   │
8420*9ccd446eSAtari911└─────────────────────────┘
8421*9ccd446eSAtari911```
8422*9ccd446eSAtari911
8423*9ccd446eSAtari911**Pink Theme** (Bling):
8424*9ccd446eSAtari911```
8425*9ccd446eSAtari911┌─────────────────────────┐
8426*9ccd446eSAtari911│ ◀ February 2026 ▶       │ ← Hot pink header
8427*9ccd446eSAtari911├─────────────────────────┤
8428*9ccd446eSAtari911│ Dark pink background    │
8429*9ccd446eSAtari911│ Pink borders & glow     │
8430*9ccd446eSAtari911│ Pink text               │
8431*9ccd446eSAtari911│ Sparkle effects ✨��    │
8432*9ccd446eSAtari911└─────────────────────────┘
8433*9ccd446eSAtari911```
8434*9ccd446eSAtari911
8435*9ccd446eSAtari911### What's Themed
8436*9ccd446eSAtari911
8437*9ccd446eSAtari911**Calendar Container**:
8438*9ccd446eSAtari911- Background color
8439*9ccd446eSAtari911- Border color
8440*9ccd446eSAtari911- Shadow/glow effect
8441*9ccd446eSAtari911
8442*9ccd446eSAtari911**Calendar Header**:
8443*9ccd446eSAtari911- Background gradient
8444*9ccd446eSAtari911- Border color
8445*9ccd446eSAtari911- Text color
8446*9ccd446eSAtari911- Button colors
8447*9ccd446eSAtari911
8448*9ccd446eSAtari911**Calendar Grid**:
8449*9ccd446eSAtari911- Grid background
8450*9ccd446eSAtari911- Grid borders
8451*9ccd446eSAtari911- Header row colors
8452*9ccd446eSAtari911
8453*9ccd446eSAtari911**Calendar Cells**:
8454*9ccd446eSAtari911- Cell background
8455*9ccd446eSAtari911- Today cell highlight
8456*9ccd446eSAtari911- Text color
8457*9ccd446eSAtari911- Border colors
8458*9ccd446eSAtari911
8459*9ccd446eSAtari911### Implementation
8460*9ccd446eSAtari911
8461*9ccd446eSAtari911**Theme Detection**:
8462*9ccd446eSAtari911```php
8463*9ccd446eSAtari911// Same theme system as sidebar
8464*9ccd446eSAtari911$theme = $this->getSidebarTheme();
8465*9ccd446eSAtari911$themeStyles = $this->getSidebarThemeStyles($theme);
8466*9ccd446eSAtari911```
8467*9ccd446eSAtari911
8468*9ccd446eSAtari911**Applied to Container**:
8469*9ccd446eSAtari911```php
8470*9ccd446eSAtari911style="background:' . $themeStyles['bg'] . ';
8471*9ccd446eSAtari911       border:2px solid ' . $themeStyles['border'] . ';
8472*9ccd446eSAtari911       box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';"
8473*9ccd446eSAtari911```
8474*9ccd446eSAtari911
8475*9ccd446eSAtari911**Applied to Header**:
8476*9ccd446eSAtari911```php
8477*9ccd446eSAtari911style="background:' . $themeStyles['header_bg'] . ';
8478*9ccd446eSAtari911       color:' . $themeStyles['text_primary'] . ';"
8479*9ccd446eSAtari911```
8480*9ccd446eSAtari911
8481*9ccd446eSAtari911**Applied to Cells**:
8482*9ccd446eSAtari911```php
8483*9ccd446eSAtari911$cellBg = $isToday ?
8484*9ccd446eSAtari911    $themeStyles['cell_today_bg'] :
8485*9ccd446eSAtari911    $themeStyles['cell_bg'];
8486*9ccd446eSAtari911```
8487*9ccd446eSAtari911
8488*9ccd446eSAtari911### How to Change Theme
8489*9ccd446eSAtari911
8490*9ccd446eSAtari911**In Admin Panel**:
8491*9ccd446eSAtari9111. Go to Admin → Calendar Management
8492*9ccd446eSAtari9112. Click "�� Themes" tab
8493*9ccd446eSAtari9113. Select theme (Matrix/Purple/Professional/Pink)
8494*9ccd446eSAtari9114. Theme applies to BOTH sidebar and calendar! ✓
8495*9ccd446eSAtari911
8496*9ccd446eSAtari911**No configuration needed** - Just select and enjoy!
8497*9ccd446eSAtari911
8498*9ccd446eSAtari911### Theme Colors
8499*9ccd446eSAtari911
8500*9ccd446eSAtari911**Matrix**:
8501*9ccd446eSAtari911- Background: `#242424` (dark gray)
8502*9ccd446eSAtari911- Border: `#00cc07` (matrix green)
8503*9ccd446eSAtari911- Text: `#00cc07` (green)
8504*9ccd446eSAtari911- Today: `#2a4d2a` (green highlight)
8505*9ccd446eSAtari911
8506*9ccd446eSAtari911**Purple**:
8507*9ccd446eSAtari911- Background: `#2a2030` (dark purple)
8508*9ccd446eSAtari911- Border: `#9b59b6` (royal purple)
8509*9ccd446eSAtari911- Text: `#b19cd9` (lavender)
8510*9ccd446eSAtari911- Today: `#3d2b4d` (purple highlight)
8511*9ccd446eSAtari911
8512*9ccd446eSAtari911**Professional**:
8513*9ccd446eSAtari911- Background: `#e8ecf1` (light blue-gray)
8514*9ccd446eSAtari911- Border: `#4a90e2` (business blue)
8515*9ccd446eSAtari911- Text: `#2c3e50` (dark blue-gray)
8516*9ccd446eSAtari911- Today: `#dce8f7` (light blue highlight)
8517*9ccd446eSAtari911
8518*9ccd446eSAtari911**Pink**:
8519*9ccd446eSAtari911- Background: `#1a0d14` (dark pink-black)
8520*9ccd446eSAtari911- Border: `#ff1493` (hot pink)
8521*9ccd446eSAtari911- Text: `#ff69b4` (pink)
8522*9ccd446eSAtari911- Today: `#3d2030` (pink highlight)
8523*9ccd446eSAtari911
8524*9ccd446eSAtari911### Consistency
8525*9ccd446eSAtari911
8526*9ccd446eSAtari911**Both use same theme**:
8527*9ccd446eSAtari911```
8528*9ccd446eSAtari911Admin Panel → Set theme to "Purple"
8529*9ccd446eSAtari911
8530*9ccd446eSAtari911{{calendar}} sidebar: Purple theme ✓
8531*9ccd446eSAtari911{{calendar-compact}}: Purple theme ✓
8532*9ccd446eSAtari911{{calendar-panel}}: Will be themed next! ✓
8533*9ccd446eSAtari911
8534*9ccd446eSAtari911All calendars match! ✨
8535*9ccd446eSAtari911```
8536*9ccd446eSAtari911
8537*9ccd446eSAtari911**Perfectly coordinated appearance!** ��
8538*9ccd446eSAtari911
8539*9ccd446eSAtari911## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER
8540*9ccd446eSAtari911
8541*9ccd446eSAtari911### �� Documentation: Added noheader Parameter Info
8542*9ccd446eSAtari911- **Added:** Documentation for existing `noheader` parameter
8543*9ccd446eSAtari911- **Updated:** README with complete eventlist parameter list
8544*9ccd446eSAtari911- **Info:** Feature already existed, just wasn't documented!
8545*9ccd446eSAtari911
8546*9ccd446eSAtari911### The noheader Parameter
8547*9ccd446eSAtari911
8548*9ccd446eSAtari911**What it does**: Hides the clock/date/weather header in eventlist
8549*9ccd446eSAtari911
8550*9ccd446eSAtari911**Usage**:
8551*9ccd446eSAtari911```
8552*9ccd446eSAtari911{{eventlist today noheader}}
8553*9ccd446eSAtari911```
8554*9ccd446eSAtari911
8555*9ccd446eSAtari911**Before (with header)**:
8556*9ccd446eSAtari911```
8557*9ccd446eSAtari911┌─────────────────────────────────┐
8558*9ccd446eSAtari911│ �� 3:45 PM    ��️ 72°  Feb 7     │ ← Clock header
8559*9ccd446eSAtari911├─────────────────────────────────┤
8560*9ccd446eSAtari911│ 5 min load │ CPU │ Memory       │ ← System stats
8561*9ccd446eSAtari911├─────────────────────────────────┤
8562*9ccd446eSAtari911│ Today's Events                   │
8563*9ccd446eSAtari911│ • 10:00 Team Meeting             │
8564*9ccd446eSAtari911│ • 2:00 Project Review            │
8565*9ccd446eSAtari911└─────────────────────────────────┘
8566*9ccd446eSAtari911```
8567*9ccd446eSAtari911
8568*9ccd446eSAtari911**After (noheader)**:
8569*9ccd446eSAtari911```
8570*9ccd446eSAtari911┌─────────────────────────────────┐
8571*9ccd446eSAtari911│ Today's Events                   │ ← No header!
8572*9ccd446eSAtari911│ • 10:00 Team Meeting             │
8573*9ccd446eSAtari911│ • 2:00 Project Review            │
8574*9ccd446eSAtari911└─────────────────────────────────┘
8575*9ccd446eSAtari911
8576*9ccd446eSAtari911Cleaner, more compact! ✓
8577*9ccd446eSAtari911```
8578*9ccd446eSAtari911
8579*9ccd446eSAtari911### When to Use noheader
8580*9ccd446eSAtari911
8581*9ccd446eSAtari911**Use WITH header** (default):
8582*9ccd446eSAtari911- Dashboard view
8583*9ccd446eSAtari911- Want to see current time
8584*9ccd446eSAtari911- Want weather info
8585*9ccd446eSAtari911- Want system stats
8586*9ccd446eSAtari911
8587*9ccd446eSAtari911**Use WITHOUT header** (`noheader`):
8588*9ccd446eSAtari911- Embedded in page content
8589*9ccd446eSAtari911- Just want event list
8590*9ccd446eSAtari911- Minimal design
8591*9ccd446eSAtari911- Space-constrained
8592*9ccd446eSAtari911
8593*9ccd446eSAtari911### Complete eventlist Parameters
8594*9ccd446eSAtari911
8595*9ccd446eSAtari911**Date Parameters**:
8596*9ccd446eSAtari911```
8597*9ccd446eSAtari911date=YYYY-MM-DD          Show specific date
8598*9ccd446eSAtari911daterange=START:END      Show date range
8599*9ccd446eSAtari911```
8600*9ccd446eSAtari911
8601*9ccd446eSAtari911**Filter Parameters**:
8602*9ccd446eSAtari911```
8603*9ccd446eSAtari911namespace=name           Filter by namespace
8604*9ccd446eSAtari911```
8605*9ccd446eSAtari911
8606*9ccd446eSAtari911**Display Parameters**:
8607*9ccd446eSAtari911```
8608*9ccd446eSAtari911today                    Show today with live clock
8609*9ccd446eSAtari911noheader                 Hide clock/date/weather header
8610*9ccd446eSAtari911showchecked              Show completed tasks
8611*9ccd446eSAtari911range=day|week|month     Show day/week/month range
8612*9ccd446eSAtari911```
8613*9ccd446eSAtari911
8614*9ccd446eSAtari911### Examples
8615*9ccd446eSAtari911
8616*9ccd446eSAtari911**Full featured** (dashboard):
8617*9ccd446eSAtari911```
8618*9ccd446eSAtari911{{eventlist today}}
8619*9ccd446eSAtari911```
8620*9ccd446eSAtari911Shows: Clock, weather, system stats, events ✓
8621*9ccd446eSAtari911
8622*9ccd446eSAtari911**Minimal** (embedded):
8623*9ccd446eSAtari911```
8624*9ccd446eSAtari911{{eventlist today noheader}}
8625*9ccd446eSAtari911```
8626*9ccd446eSAtari911Shows: Just events ✓
8627*9ccd446eSAtari911
8628*9ccd446eSAtari911**Date range without header**:
8629*9ccd446eSAtari911```
8630*9ccd446eSAtari911{{eventlist daterange=2026-02-01:2026-02-28 noheader}}
8631*9ccd446eSAtari911```
8632*9ccd446eSAtari911Shows: Events for February, no header ✓
8633*9ccd446eSAtari911
8634*9ccd446eSAtari911**With namespace filter**:
8635*9ccd446eSAtari911```
8636*9ccd446eSAtari911{{eventlist today namespace=work noheader}}
8637*9ccd446eSAtari911```
8638*9ccd446eSAtari911Shows: Today's work events, no header ✓
8639*9ccd446eSAtari911
8640*9ccd446eSAtari911### Implementation
8641*9ccd446eSAtari911
8642*9ccd446eSAtari911**Already existed in code** (line 833):
8643*9ccd446eSAtari911```php
8644*9ccd446eSAtari911$noheader = isset($data['noheader']) ? true : false;
8645*9ccd446eSAtari911```
8646*9ccd446eSAtari911
8647*9ccd446eSAtari911**Applied at render** (line 1010):
8648*9ccd446eSAtari911```php
8649*9ccd446eSAtari911if ($today && !empty($allEvents) && !$noheader) {
8650*9ccd446eSAtari911    // Render clock header with date/time/weather
8651*9ccd446eSAtari911}
8652*9ccd446eSAtari911```
8653*9ccd446eSAtari911
8654*9ccd446eSAtari911**Just wasn't documented!** Now it is. ✓
8655*9ccd446eSAtari911
8656*9ccd446eSAtari911## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE
8657*9ccd446eSAtari911
8658*9ccd446eSAtari911### ✨ Improvement: Removed Filter Badge Above Sidebar
8659*9ccd446eSAtari911- **Removed:** Filter badge no longer shows above compact calendar
8660*9ccd446eSAtari911- **Reason:** Filtering is already clearly visible in the calendar view
8661*9ccd446eSAtari911- **Result:** Cleaner UI, less redundancy
8662*9ccd446eSAtari911
8663*9ccd446eSAtari911### What Changed
8664*9ccd446eSAtari911
8665*9ccd446eSAtari911**BEFORE**:
8666*9ccd446eSAtari911```
8667*9ccd446eSAtari911┌─────────────────────────┐
8668*9ccd446eSAtari911│ Filtering: work ✕       │ ← Badge above calendar
8669*9ccd446eSAtari911├─────────────────────────┤
8670*9ccd446eSAtari911│ ◀ February 2026 ▶       │
8671*9ccd446eSAtari911├─────────────────────────┤
8672*9ccd446eSAtari911│ Calendar grid with       │
8673*9ccd446eSAtari911│ filtered events          │ ← Already filtered
8674*9ccd446eSAtari911└─────────────────────────┘
8675*9ccd446eSAtari911
8676*9ccd446eSAtari911Badge was redundant - you can already see
8677*9ccd446eSAtari911the filtering in the calendar!
8678*9ccd446eSAtari911```
8679*9ccd446eSAtari911
8680*9ccd446eSAtari911**AFTER**:
8681*9ccd446eSAtari911```
8682*9ccd446eSAtari911┌─────────────────────────┐
8683*9ccd446eSAtari911│ ◀ February 2026 ▶       │ ← No badge!
8684*9ccd446eSAtari911├─────────────────────────┤
8685*9ccd446eSAtari911│ Calendar grid with       │
8686*9ccd446eSAtari911│ filtered events          │ ← Filtering visible here
8687*9ccd446eSAtari911└─────────────────────────┘
8688*9ccd446eSAtari911
8689*9ccd446eSAtari911Cleaner, simpler UI ✓
8690*9ccd446eSAtari911```
8691*9ccd446eSAtari911
8692*9ccd446eSAtari911### Why Remove It?
8693*9ccd446eSAtari911
8694*9ccd446eSAtari911**Redundant Information**:
8695*9ccd446eSAtari911- Calendar already shows only filtered events
8696*9ccd446eSAtari911- Namespace badges on events show which namespace
8697*9ccd446eSAtari911- Badge added visual clutter without value
8698*9ccd446eSAtari911
8699*9ccd446eSAtari911**Better UX**:
8700*9ccd446eSAtari911- Less visual noise
8701*9ccd446eSAtari911- More space for content
8702*9ccd446eSAtari911- Filtering still obvious from event display
8703*9ccd446eSAtari911
8704*9ccd446eSAtari911**Code Cleanup**:
8705*9ccd446eSAtari911```php
8706*9ccd446eSAtari911// Old code (removed):
8707*9ccd446eSAtari911if ($namespace && $namespace !== '*' && ...) {
8708*9ccd446eSAtari911    $html .= '<div class="calendar-namespace-filter">';
8709*9ccd446eSAtari911    $html .= 'Filtering: ' . $namespace . ' ✕';
8710*9ccd446eSAtari911    $html .= '</div>';
8711*9ccd446eSAtari911}
8712*9ccd446eSAtari911
8713*9ccd446eSAtari911// New code:
8714*9ccd446eSAtari911// Filter badge removed - filtering shown in calendar view only
8715*9ccd446eSAtari911```
8716*9ccd446eSAtari911
8717*9ccd446eSAtari911### How Filtering Still Works
8718*9ccd446eSAtari911
8719*9ccd446eSAtari911**Filtering IS Active**:
8720*9ccd446eSAtari911- Calendar only shows events from selected namespace ✓
8721*9ccd446eSAtari911- Event namespace badges show which namespace ✓
8722*9ccd446eSAtari911- Clear filtering still works (in calendar) ✓
8723*9ccd446eSAtari911
8724*9ccd446eSAtari911**Just No Badge**:
8725*9ccd446eSAtari911- No redundant "Filtering: work ✕" above calendar
8726*9ccd446eSAtari911- Cleaner, more professional appearance
8727*9ccd446eSAtari911
8728*9ccd446eSAtari911### What You Still See
8729*9ccd446eSAtari911
8730*9ccd446eSAtari911**Namespace Information**:
8731*9ccd446eSAtari911```
8732*9ccd446eSAtari911Event with namespace badge:
8733*9ccd446eSAtari911┌────────────────────────┐
8734*9ccd446eSAtari911│ 10:00 Team Meeting     │
8735*9ccd446eSAtari911│       [work] ←─────────┼─ Namespace badge on event
8736*9ccd446eSAtari911└────────────────────────┘
8737*9ccd446eSAtari911```
8738*9ccd446eSAtari911
8739*9ccd446eSAtari911**Filtered View**:
8740*9ccd446eSAtari911- Only events from selected namespace visible
8741*9ccd446eSAtari911- Empty dates show no events
8742*9ccd446eSAtari911- Clear which namespace you're viewing
8743*9ccd446eSAtari911
8744*9ccd446eSAtari911**No Need for Top Badge**:
8745*9ccd446eSAtari911- Already obvious from events shown
8746*9ccd446eSAtari911- Namespace badges provide context
8747*9ccd446eSAtari911- Less clutter!
8748*9ccd446eSAtari911
8749*9ccd446eSAtari911### Summary
8750*9ccd446eSAtari911
8751*9ccd446eSAtari911**Removed**: Filter badge above calendar
8752*9ccd446eSAtari911**Kept**: All filtering functionality
8753*9ccd446eSAtari911**Benefit**: Cleaner UI
8754*9ccd446eSAtari911
8755*9ccd446eSAtari911**Filtering works the same, just without the redundant badge!** ✨
8756*9ccd446eSAtari911
8757*9ccd446eSAtari911## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY
8758*9ccd446eSAtari911
8759*9ccd446eSAtari911### �� Fixed: Filter Badge Now Disappears Immediately
8760*9ccd446eSAtari911- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕
8761*9ccd446eSAtari911- **Added:** Badge removal before page reload/AJAX call
8762*9ccd446eSAtari911- **Result:** Badge disappears instantly, no waiting for reload
8763*9ccd446eSAtari911
8764*9ccd446eSAtari911### The Problem
8765*9ccd446eSAtari911
8766*9ccd446eSAtari911**v4.6.5 behavior**:
8767*9ccd446eSAtari911```
8768*9ccd446eSAtari911Click ✕ to clear filter
8769*9ccd446eSAtari911→ Page reloads or AJAX fires
8770*9ccd446eSAtari911→ Badge stays visible during reload ✗
8771*9ccd446eSAtari911→ Badge finally disappears after reload ✓
8772*9ccd446eSAtari911
8773*9ccd446eSAtari911User sees badge for 0.5-2 seconds after clicking ✕
8774*9ccd446eSAtari911Feels laggy! ✗
8775*9ccd446eSAtari911```
8776*9ccd446eSAtari911
8777*9ccd446eSAtari911### The Fix
8778*9ccd446eSAtari911
8779*9ccd446eSAtari911**Immediately remove badge from DOM**:
8780*9ccd446eSAtari911
8781*9ccd446eSAtari911```javascript
8782*9ccd446eSAtari911window.clearNamespaceFilter = function(calId) {
8783*9ccd446eSAtari911    const container = document.getElementById(calId);
8784*9ccd446eSAtari911
8785*9ccd446eSAtari911    // IMMEDIATELY hide/remove the filter badge
8786*9ccd446eSAtari911    const filterBadge = container.querySelector('.calendar-namespace-filter');
8787*9ccd446eSAtari911    if (filterBadge) {
8788*9ccd446eSAtari911        filterBadge.style.display = 'none'; // Hide instantly
8789*9ccd446eSAtari911        filterBadge.remove(); // Remove from DOM
8790*9ccd446eSAtari911    }
8791*9ccd446eSAtari911
8792*9ccd446eSAtari911    // THEN reload (AJAX or page reload)
8793*9ccd446eSAtari911    navCalendar(...) or window.location.href = ...
8794*9ccd446eSAtari911};
8795*9ccd446eSAtari911```
8796*9ccd446eSAtari911
8797*9ccd446eSAtari911### Before vs After
8798*9ccd446eSAtari911
8799*9ccd446eSAtari911**BEFORE (v4.6.5)**:
8800*9ccd446eSAtari911```
8801*9ccd446eSAtari911Time 0ms: Click ✕
8802*9ccd446eSAtari911┌─────────────────────────┐
8803*9ccd446eSAtari911│ Filtering: work ✕       │ ← Still visible
8804*9ccd446eSAtari911├─────────────────────────┤
8805*9ccd446eSAtari911
8806*9ccd446eSAtari911Time 500ms: Reload completes
8807*9ccd446eSAtari911┌─────────────────────────┐
8808*9ccd446eSAtari911│ (no badge)              │ ← Finally gone
8809*9ccd446eSAtari911├─────────────────────────┤
8810*9ccd446eSAtari911
8811*9ccd446eSAtari911Delay: 500-2000ms ✗
8812*9ccd446eSAtari911```
8813*9ccd446eSAtari911
8814*9ccd446eSAtari911**AFTER (v4.6.6)**:
8815*9ccd446eSAtari911```
8816*9ccd446eSAtari911Time 0ms: Click ✕
8817*9ccd446eSAtari911┌─────────────────────────┐
8818*9ccd446eSAtari911│ (no badge)              │ ← Gone immediately!
8819*9ccd446eSAtari911├─────────────────────────┤
8820*9ccd446eSAtari911
8821*9ccd446eSAtari911Time 500ms: Reload completes
8822*9ccd446eSAtari911┌─────────────────────────┐
8823*9ccd446eSAtari911│ (no badge)              │ ← Still gone
8824*9ccd446eSAtari911├─────────────────────────┤
8825*9ccd446eSAtari911
8826*9ccd446eSAtari911Delay: 0ms ✓
8827*9ccd446eSAtari911Instant feedback! ✓
8828*9ccd446eSAtari911```
8829*9ccd446eSAtari911
8830*9ccd446eSAtari911### Implementation
8831*9ccd446eSAtari911
8832*9ccd446eSAtari911**Two-step removal**:
8833*9ccd446eSAtari911
8834*9ccd446eSAtari911**Step 1**: Hide immediately
8835*9ccd446eSAtari911```javascript
8836*9ccd446eSAtari911filterBadge.style.display = 'none';
8837*9ccd446eSAtari911// User sees badge disappear instantly
8838*9ccd446eSAtari911```
8839*9ccd446eSAtari911
8840*9ccd446eSAtari911**Step 2**: Remove from DOM
8841*9ccd446eSAtari911```javascript
8842*9ccd446eSAtari911filterBadge.remove();
8843*9ccd446eSAtari911// Clean up HTML
8844*9ccd446eSAtari911```
8845*9ccd446eSAtari911
8846*9ccd446eSAtari911**Step 3**: Reload
8847*9ccd446eSAtari911```javascript
8848*9ccd446eSAtari911// Sidebar: Page reload
8849*9ccd446eSAtari911window.location.href = url.toString();
8850*9ccd446eSAtari911
8851*9ccd446eSAtari911// Calendar: AJAX reload
8852*9ccd446eSAtari911navCalendar(calId, year, month, originalNamespace);
8853*9ccd446eSAtari911```
8854*9ccd446eSAtari911
8855*9ccd446eSAtari911**Result**: Badge gone BEFORE reload starts ✓
8856*9ccd446eSAtari911
8857*9ccd446eSAtari911### Why This Matters
8858*9ccd446eSAtari911
8859*9ccd446eSAtari911**User Experience**:
8860*9ccd446eSAtari911- Old: Click ✕ → Wait → Badge disappears
8861*9ccd446eSAtari911- New: Click ✕ → Badge disappears instantly
8862*9ccd446eSAtari911
8863*9ccd446eSAtari911**Perceived Performance**:
8864*9ccd446eSAtari911- Instant visual feedback
8865*9ccd446eSAtari911- Feels responsive
8866*9ccd446eSAtari911- Professional UX
8867*9ccd446eSAtari911
8868*9ccd446eSAtari911**Technical**:
8869*9ccd446eSAtari911- DOM manipulation is synchronous (instant)
8870*9ccd446eSAtari911- Network requests are asynchronous (slow)
8871*9ccd446eSAtari911- Do fast things first!
8872*9ccd446eSAtari911
8873*9ccd446eSAtari911**Badge now disappears the moment you click ✕!** ⚡
8874*9ccd446eSAtari911
8875*9ccd446eSAtari911## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING
8876*9ccd446eSAtari911
8877*9ccd446eSAtari911### �� Fixed: Filter Badge Not Clearing in Sidebar
8878*9ccd446eSAtari911- **Fixed:** Filter badge now properly clears when clicking ✕ button
8879*9ccd446eSAtari911- **Fixed:** Sidebar widget now reloads page without namespace filter
8880*9ccd446eSAtari911- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately
8881*9ccd446eSAtari911
8882*9ccd446eSAtari911### The Problem
8883*9ccd446eSAtari911
8884*9ccd446eSAtari911**In {{calendar}} sidebar widget**:
8885*9ccd446eSAtari911```
8886*9ccd446eSAtari9111. Click namespace badge to filter
8887*9ccd446eSAtari9112. Badge appears: "Filtering: work ✕"
8888*9ccd446eSAtari9113. Click ✕ to clear filter
8889*9ccd446eSAtari9114. Badge stays visible! ✗
8890*9ccd446eSAtari9115. Events still filtered! ✗
8891*9ccd446eSAtari911```
8892*9ccd446eSAtari911
8893*9ccd446eSAtari911**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar.
8894*9ccd446eSAtari911
8895*9ccd446eSAtari911### The Fix
8896*9ccd446eSAtari911
8897*9ccd446eSAtari911**Detect widget type and handle appropriately**:
8898*9ccd446eSAtari911
8899*9ccd446eSAtari911```javascript
8900*9ccd446eSAtari911window.clearNamespaceFilter = function(calId) {
8901*9ccd446eSAtari911    const container = document.getElementById(calId);
8902*9ccd446eSAtari911
8903*9ccd446eSAtari911    // Check if this is a sidebar widget
8904*9ccd446eSAtari911    const sidebarContainer = document.getElementById('sidebar-widget-' + calId);
8905*9ccd446eSAtari911
8906*9ccd446eSAtari911    if (sidebarContainer) {
8907*9ccd446eSAtari911        // SIDEBAR: Reload page without namespace parameter
8908*9ccd446eSAtari911        const url = new URL(window.location.href);
8909*9ccd446eSAtari911        url.searchParams.delete('namespace');
8910*9ccd446eSAtari911        window.location.href = url.toString(); // Page reload
8911*9ccd446eSAtari911        return;
8912*9ccd446eSAtari911    }
8913*9ccd446eSAtari911
8914*9ccd446eSAtari911    // REGULAR CALENDAR: AJAX reload
8915*9ccd446eSAtari911    navCalendar(calId, year, month, originalNamespace);
8916*9ccd446eSAtari911};
8917*9ccd446eSAtari911```
8918*9ccd446eSAtari911
8919*9ccd446eSAtari911### How It Works
8920*9ccd446eSAtari911
8921*9ccd446eSAtari911**Sidebar Widget** ({{calendar}} syntax):
8922*9ccd446eSAtari911```
8923*9ccd446eSAtari911Rendered server-side with PHP
8924*9ccd446eSAtari911Cannot be AJAX-reloaded
8925*9ccd446eSAtari911Solution: Reload entire page without ?namespace=work parameter
8926*9ccd446eSAtari911```
8927*9ccd446eSAtari911
8928*9ccd446eSAtari911**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}):
8929*9ccd446eSAtari911```
8930*9ccd446eSAtari911Has AJAX reload capability
8931*9ccd446eSAtari911Solution: Call navCalendar() to reload via AJAX
8932*9ccd446eSAtari911```
8933*9ccd446eSAtari911
8934*9ccd446eSAtari911### Before vs After
8935*9ccd446eSAtari911
8936*9ccd446eSAtari911**BEFORE (v4.6.4)**:
8937*9ccd446eSAtari911```
8938*9ccd446eSAtari911Sidebar widget filtered by "work":
8939*9ccd446eSAtari911┌─────────────────────────┐
8940*9ccd446eSAtari911│ Filtering: work ✕       │ ← Click ✕
8941*9ccd446eSAtari911├─────────────────────────┤
8942*9ccd446eSAtari911│ Today                   │
8943*9ccd446eSAtari911│ • Work meeting          │
8944*9ccd446eSAtari911└─────────────────────────┘
8945*9ccd446eSAtari911
8946*9ccd446eSAtari911After clicking ✕:
8947*9ccd446eSAtari911┌─────────────────────────┐
8948*9ccd446eSAtari911│ Filtering: work ✕       │ ← Still there! ✗
8949*9ccd446eSAtari911├─────────────────────────┤
8950*9ccd446eSAtari911│ Today                   │
8951*9ccd446eSAtari911│ • Work meeting          │ ← Still filtered! ✗
8952*9ccd446eSAtari911└─────────────────────────┘
8953*9ccd446eSAtari911```
8954*9ccd446eSAtari911
8955*9ccd446eSAtari911**AFTER (v4.6.5)**:
8956*9ccd446eSAtari911```
8957*9ccd446eSAtari911Sidebar widget filtered by "work":
8958*9ccd446eSAtari911┌─────────────────────────┐
8959*9ccd446eSAtari911│ Filtering: work ✕       │ ← Click ✕
8960*9ccd446eSAtari911├─────────────────────────┤
8961*9ccd446eSAtari911│ Today                   │
8962*9ccd446eSAtari911│ • Work meeting          │
8963*9ccd446eSAtari911└─────────────────────────┘
8964*9ccd446eSAtari911
8965*9ccd446eSAtari911After clicking ✕ → Page reloads:
8966*9ccd446eSAtari911┌─────────────────────────┐
8967*9ccd446eSAtari911│ (no filter badge)       │ ← Cleared! ✓
8968*9ccd446eSAtari911├─────────────────────────┤
8969*9ccd446eSAtari911│ Today                   │
8970*9ccd446eSAtari911│ • Work meeting          │
8971*9ccd446eSAtari911│ • Personal task         │ ← All events! ✓
8972*9ccd446eSAtari911│ • Project review        │
8973*9ccd446eSAtari911└─────────────────────────┘
8974*9ccd446eSAtari911```
8975*9ccd446eSAtari911
8976*9ccd446eSAtari911### Technical Details
8977*9ccd446eSAtari911
8978*9ccd446eSAtari911**Why Page Reload for Sidebar?**
8979*9ccd446eSAtari911
8980*9ccd446eSAtari911Sidebar widget is rendered server-side:
8981*9ccd446eSAtari911```php
8982*9ccd446eSAtari911// In syntax.php:
8983*9ccd446eSAtari911return $this->renderSidebarWidget($events, $namespace, $calId);
8984*9ccd446eSAtari911// ↑ PHP generates complete HTML
8985*9ccd446eSAtari911// No AJAX reload endpoint exists for sidebar
8986*9ccd446eSAtari911```
8987*9ccd446eSAtari911
8988*9ccd446eSAtari911**Solution**: Remove `?namespace=work` from URL and reload page
8989*9ccd446eSAtari911```javascript
8990*9ccd446eSAtari911const url = new URL(window.location.href);
8991*9ccd446eSAtari911url.searchParams.delete('namespace'); // Remove filter
8992*9ccd446eSAtari911window.location.href = url.toString(); // Reload
8993*9ccd446eSAtari911```
8994*9ccd446eSAtari911
8995*9ccd446eSAtari911**Why AJAX for Regular Calendar?**
8996*9ccd446eSAtari911
8997*9ccd446eSAtari911Regular calendars have AJAX endpoints:
8998*9ccd446eSAtari911```javascript
8999*9ccd446eSAtari911// action.php handles:
9000*9ccd446eSAtari911action: 'load_month' → Returns new month data
9001*9ccd446eSAtari911navCalendar() → Fetches and rebuilds calendar
9002*9ccd446eSAtari911```
9003*9ccd446eSAtari911
9004*9ccd446eSAtari911### Filter Badge Behavior
9005*9ccd446eSAtari911
9006*9ccd446eSAtari911**Showing Badge** (when filtering):
9007*9ccd446eSAtari911- Server-side: PHP renders badge in HTML
9008*9ccd446eSAtari911- Client-side: JavaScript adds badge to header
9009*9ccd446eSAtari911
9010*9ccd446eSAtari911**Clearing Badge**:
9011*9ccd446eSAtari911- Sidebar: Page reload (removes ?namespace from URL)
9012*9ccd446eSAtari911- Calendar: AJAX reload (badge removed in rebuildCalendar)
9013*9ccd446eSAtari911
9014*9ccd446eSAtari911**Now works correctly for both!** ✓
9015*9ccd446eSAtari911
9016*9ccd446eSAtari911## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR
9017*9ccd446eSAtari911
9018*9ccd446eSAtari911### �� Critical Hotfix: Fixed PHP Parse Error
9019*9ccd446eSAtari911- **Fixed:** Template literal backticks causing PHP syntax error
9020*9ccd446eSAtari911- **Fixed:** Changed JavaScript template literals to concatenation
9021*9ccd446eSAtari911- **Fixed:** Admin page now loads without parse errors
9022*9ccd446eSAtari911
9023*9ccd446eSAtari911### The Problem
9024*9ccd446eSAtari911
9025*9ccd446eSAtari911**v4.6.3 broke admin page**:
9026*9ccd446eSAtari911```
9027*9ccd446eSAtari911Error loading plugin calendar
9028*9ccd446eSAtari911ParseError: syntax error, unexpected identifier "s",
9029*9ccd446eSAtari911expecting "," or ";"
9030*9ccd446eSAtari911```
9031*9ccd446eSAtari911
9032*9ccd446eSAtari911**Cause**: JavaScript template literals inside PHP echo
9033*9ccd446eSAtari911```php
9034*9ccd446eSAtari911echo '<script>
9035*9ccd446eSAtari911    let nsOptions = `<option value="">(default)</option>`;
9036*9ccd446eSAtari911                    ↑ PHP sees backtick and gets confused!
9037*9ccd446eSAtari911</script>';
9038*9ccd446eSAtari911```
9039*9ccd446eSAtari911
9040*9ccd446eSAtari911**Why it broke**: Backticks (`) are special in PHP too!
9041*9ccd446eSAtari911
9042*9ccd446eSAtari911### The Fix
9043*9ccd446eSAtari911
9044*9ccd446eSAtari911**Changed from template literals to concatenation**:
9045*9ccd446eSAtari911
9046*9ccd446eSAtari911**BEFORE (broken)**:
9047*9ccd446eSAtari911```javascript
9048*9ccd446eSAtari911let nsOptions = `<option value="">(default)</option>`;
9049*9ccd446eSAtari911nsOptions += `<option value="${namespace}">${namespace}</option>`;
9050*9ccd446eSAtari911console.log('Edit recurring:', namespace);
9051*9ccd446eSAtari911```
9052*9ccd446eSAtari911
9053*9ccd446eSAtari911**AFTER (fixed)**:
9054*9ccd446eSAtari911```javascript
9055*9ccd446eSAtari911let nsOptions = "<option value=\\"\\">(default)</option>";
9056*9ccd446eSAtari911nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>";
9057*9ccd446eSAtari911console.log("Edit recurring:", namespace);
9058*9ccd446eSAtari911```
9059*9ccd446eSAtari911
9060*9ccd446eSAtari911**Changes**:
9061*9ccd446eSAtari911- ✅ Backticks (`) → Double quotes (")
9062*9ccd446eSAtari911- ✅ Template literals (${var}) → Concatenation (" + var + ")
9063*9ccd446eSAtari911- ✅ Single quotes in console.log → Double quotes
9064*9ccd446eSAtari911- ✅ Properly escaped quotes for PHP echo
9065*9ccd446eSAtari911
9066*9ccd446eSAtari911### Technical Details
9067*9ccd446eSAtari911
9068*9ccd446eSAtari911**The Issue**:
9069*9ccd446eSAtari911```php
9070*9ccd446eSAtari911// Inside PHP echo string:
9071*9ccd446eSAtari911echo '<script>
9072*9ccd446eSAtari911    let x = `template ${literal}`;  // ✗ Backtick breaks PHP!
9073*9ccd446eSAtari911</script>';
9074*9ccd446eSAtari911```
9075*9ccd446eSAtari911
9076*9ccd446eSAtari911**The Solution**:
9077*9ccd446eSAtari911```php
9078*9ccd446eSAtari911// Use regular string concatenation:
9079*9ccd446eSAtari911echo '<script>
9080*9ccd446eSAtari911    let x = "string " + variable;   // ✓ Works in PHP echo!
9081*9ccd446eSAtari911</script>';
9082*9ccd446eSAtari911```
9083*9ccd446eSAtari911
9084*9ccd446eSAtari911**Quote Escaping**:
9085*9ccd446eSAtari911```javascript
9086*9ccd446eSAtari911// Double quotes inside PHP single-quote string:
9087*9ccd446eSAtari911'<option value=\"\">text</option>'
9088*9ccd446eSAtari911               ↑↑ Escaped for JavaScript
9089*9ccd446eSAtari911```
9090*9ccd446eSAtari911
9091*9ccd446eSAtari911### Result
9092*9ccd446eSAtari911
9093*9ccd446eSAtari911**Before**: Admin page crashed with parse error ✗
9094*9ccd446eSAtari911**After**: Admin page loads perfectly ✓
9095*9ccd446eSAtari911
9096*9ccd446eSAtari911**No functionality changed - just syntax fix!**
9097*9ccd446eSAtari911
9098*9ccd446eSAtari911## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN
9099*9ccd446eSAtari911
9100*9ccd446eSAtari911### �� Critical Fix: Namespace Dropdown in Recurring Events Section
9101*9ccd446eSAtari911- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing
9102*9ccd446eSAtari911- **Fixed:** Current namespace now properly selected in dropdown
9103*9ccd446eSAtari911- **Fixed:** Namespace extraction from DOM now uses multiple methods
9104*9ccd446eSAtari911- **Added:** Console logging to debug namespace detection
9105*9ccd446eSAtari911
9106*9ccd446eSAtari911### The Problem
9107*9ccd446eSAtari911
9108*9ccd446eSAtari911**When editing from �� Recurring Events section**:
9109*9ccd446eSAtari911```
9110*9ccd446eSAtari911Click "Edit" on recurring event
9111*9ccd446eSAtari911Namespace dropdown shows:
9112*9ccd446eSAtari911- (default)
9113*9ccd446eSAtari911- (nothing else!) ✗
9114*9ccd446eSAtari911
9115*9ccd446eSAtari911Can't select any namespace! ✗
9116*9ccd446eSAtari911```
9117*9ccd446eSAtari911
9118*9ccd446eSAtari911**Why**: Broken namespace extraction logic
9119*9ccd446eSAtari911```javascript
9120*9ccd446eSAtari911// OLD CODE (broken):
9121*9ccd446eSAtari911const namespaces = Array.from(document.querySelectorAll("[id^=ns_]"))
9122*9ccd446eSAtari911    .map(el => {
9123*9ccd446eSAtari911        // Complex parsing that often failed
9124*9ccd446eSAtari911        const nsSpan = el.querySelector("span:nth-child(3)");
9125*9ccd446eSAtari911        return nsSpan.textContent.replace("�� ", "").trim();
9126*9ccd446eSAtari911    })
9127*9ccd446eSAtari911    .filter(ns => ns !== namespace); // Excluded current! ✗
9128*9ccd446eSAtari911```
9129*9ccd446eSAtari911
9130*9ccd446eSAtari911**Result**: Empty dropdown, can't change namespace! ✗
9131*9ccd446eSAtari911
9132*9ccd446eSAtari911### The Fix
9133*9ccd446eSAtari911
9134*9ccd446eSAtari911**NEW CODE (robust)**:
9135*9ccd446eSAtari911```javascript
9136*9ccd446eSAtari911const namespaces = new Set();
9137*9ccd446eSAtari911
9138*9ccd446eSAtari911// Method 1: Namespace explorer folders
9139*9ccd446eSAtari911document.querySelectorAll("[id^=ns_]").forEach(el => {
9140*9ccd446eSAtari911    const nsSpan = el.querySelector("span:nth-child(3)");
9141*9ccd446eSAtari911    if (nsSpan) {
9142*9ccd446eSAtari911        let nsText = nsSpan.textContent.replace("�� ", "").trim();
9143*9ccd446eSAtari911        if (nsText && nsText !== "(default)") {
9144*9ccd446eSAtari911            namespaces.add(nsText); // ✓
9145*9ccd446eSAtari911        }
9146*9ccd446eSAtari911    }
9147*9ccd446eSAtari911});
9148*9ccd446eSAtari911
9149*9ccd446eSAtari911// Method 2: Datalist (backup method)
9150*9ccd446eSAtari911document.querySelectorAll("#namespaceList option").forEach(opt => {
9151*9ccd446eSAtari911    if (opt.value && opt.value !== "") {
9152*9ccd446eSAtari911        namespaces.add(opt.value); // ✓
9153*9ccd446eSAtari911    }
9154*9ccd446eSAtari911});
9155*9ccd446eSAtari911
9156*9ccd446eSAtari911// Build dropdown with ALL namespaces
9157*9ccd446eSAtari911let options = `<option value="">(default)</option>`;
9158*9ccd446eSAtari911
9159*9ccd446eSAtari911// Show current namespace as selected
9160*9ccd446eSAtari911if (namespace) {
9161*9ccd446eSAtari911    options += `<option value="${namespace}" selected>${namespace} (current)</option>`;
9162*9ccd446eSAtari911}
9163*9ccd446eSAtari911
9164*9ccd446eSAtari911// Show all other namespaces
9165*9ccd446eSAtari911for (const ns of nsArray) {
9166*9ccd446eSAtari911    if (ns !== namespace) {
9167*9ccd446eSAtari911        options += `<option value="${ns}">${ns}</option>`;
9168*9ccd446eSAtari911    }
9169*9ccd446eSAtari911}
9170*9ccd446eSAtari911```
9171*9ccd446eSAtari911
9172*9ccd446eSAtari911**Result**: All namespaces visible! ✓
9173*9ccd446eSAtari911
9174*9ccd446eSAtari911### How It Works Now
9175*9ccd446eSAtari911
9176*9ccd446eSAtari911**Before (Broken)**:
9177*9ccd446eSAtari911```
9178*9ccd446eSAtari911Edit recurring event in "work" namespace
9179*9ccd446eSAtari911
9180*9ccd446eSAtari911Dropdown shows:
9181*9ccd446eSAtari911☐ (default)
9182*9ccd446eSAtari911
9183*9ccd446eSAtari911That's it! Can't select anything! ✗
9184*9ccd446eSAtari911```
9185*9ccd446eSAtari911
9186*9ccd446eSAtari911**After (Fixed)**:
9187*9ccd446eSAtari911```
9188*9ccd446eSAtari911Edit recurring event in "work" namespace
9189*9ccd446eSAtari911
9190*9ccd446eSAtari911Dropdown shows:
9191*9ccd446eSAtari911☐ (default)
9192*9ccd446eSAtari911☑ work (current)  ← Selected!
9193*9ccd446eSAtari911☐ personal
9194*9ccd446eSAtari911☐ projects
9195*9ccd446eSAtari911☐ meetings
9196*9ccd446eSAtari911
9197*9ccd446eSAtari911All namespaces available! ✓
9198*9ccd446eSAtari911```
9199*9ccd446eSAtari911
9200*9ccd446eSAtari911### Key Improvements
9201*9ccd446eSAtari911
9202*9ccd446eSAtari911**1. Dual extraction methods**:
9203*9ccd446eSAtari911- Primary: Parse namespace explorer DOM
9204*9ccd446eSAtari911- Backup: Read from datalist
9205*9ccd446eSAtari911- Result: Always finds namespaces ✓
9206*9ccd446eSAtari911
9207*9ccd446eSAtari911**2. Current namespace included**:
9208*9ccd446eSAtari911```javascript
9209*9ccd446eSAtari911// OLD: Excluded current namespace
9210*9ccd446eSAtari911.filter(ns => ns !== namespace) ✗
9211*9ccd446eSAtari911
9212*9ccd446eSAtari911// NEW: Include and mark as selected
9213*9ccd446eSAtari911options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓
9214*9ccd446eSAtari911```
9215*9ccd446eSAtari911
9216*9ccd446eSAtari911**3. Better error handling**:
9217*9ccd446eSAtari911```javascript
9218*9ccd446eSAtari911if (nsSpan) {  // Check exists
9219*9ccd446eSAtari911    let nsText = nsSpan.textContent.replace("�� ", "").trim();
9220*9ccd446eSAtari911    if (nsText && nsText !== "(default)") {  // Validate
9221*9ccd446eSAtari911        namespaces.add(nsText);
9222*9ccd446eSAtari911    }
9223*9ccd446eSAtari911}
9224*9ccd446eSAtari911```
9225*9ccd446eSAtari911
9226*9ccd446eSAtari911**4. Console debugging**:
9227*9ccd446eSAtari911```javascript
9228*9ccd446eSAtari911console.log('Edit recurring - Current namespace:', namespace);
9229*9ccd446eSAtari911console.log('Available namespaces:', nsArray);
9230*9ccd446eSAtari911```
9231*9ccd446eSAtari911
9232*9ccd446eSAtari911Open browser console (F12) to see what namespaces are detected!
9233*9ccd446eSAtari911
9234*9ccd446eSAtari911### Example Usage
9235*9ccd446eSAtari911
9236*9ccd446eSAtari911**Scenario**: Edit recurring "Team Meeting" in "work" namespace
9237*9ccd446eSAtari911
9238*9ccd446eSAtari911**Steps**:
9239*9ccd446eSAtari9111. Go to �� Recurring Events section
9240*9ccd446eSAtari9112. Click "Edit" on "Team Meeting"
9241*9ccd446eSAtari9113. See namespace dropdown:
9242*9ccd446eSAtari911   - ☐ (default)
9243*9ccd446eSAtari911   - ☑ work (current)
9244*9ccd446eSAtari911   - ☐ personal
9245*9ccd446eSAtari911   - ☐ projects
9246*9ccd446eSAtari9114. Select "personal" to move event
9247*9ccd446eSAtari9115. Click "Save Changes"
9248*9ccd446eSAtari9116. Event moved to "personal" namespace ✓
9249*9ccd446eSAtari911
9250*9ccd446eSAtari911**Finally works as expected!** ��
9251*9ccd446eSAtari911
9252*9ccd446eSAtari911## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION
9253*9ccd446eSAtari911
9254*9ccd446eSAtari911### �� Recurring Events Namespace Fix
9255*9ccd446eSAtari911- **Fixed:** Namespace now properly preserved when editing recurring events
9256*9ccd446eSAtari911- **Fixed:** Namespace selector now allows selecting any namespace (not just default)
9257*9ccd446eSAtari911- **Added:** Better logging for namespace preservation debugging
9258*9ccd446eSAtari911- **Added:** Console logging to track namespace values during edit
9259*9ccd446eSAtari911
9260*9ccd446eSAtari911### The Namespace Problem
9261*9ccd446eSAtari911
9262*9ccd446eSAtari911**Issue 1**: Can't select non-default namespace
9263*9ccd446eSAtari911```
9264*9ccd446eSAtari911When editing recurring event:
9265*9ccd446eSAtari911- Dropdown shows all namespaces ✓
9266*9ccd446eSAtari911- User selects "work"
9267*9ccd446eSAtari911- Form submits with "" (empty/default) ✗
9268*9ccd446eSAtari911```
9269*9ccd446eSAtari911
9270*9ccd446eSAtari911**Issue 2**: Namespace not preserved
9271*9ccd446eSAtari911```
9272*9ccd446eSAtari911Recurring event in "personal" namespace
9273*9ccd446eSAtari911Edit the title only
9274*9ccd446eSAtari911After save: namespace changed to "" (default) ✗
9275*9ccd446eSAtari911```
9276*9ccd446eSAtari911
9277*9ccd446eSAtari911### The Fixes
9278*9ccd446eSAtari911
9279*9ccd446eSAtari911**Fix 1**: Better namespace preservation logic
9280*9ccd446eSAtari911```php
9281*9ccd446eSAtari911// When editing recurring event:
9282*9ccd446eSAtari911$existingNamespace = $existingEventData['namespace'];
9283*9ccd446eSAtari911
9284*9ccd446eSAtari911// Preserve if user didn't explicitly change it:
9285*9ccd446eSAtari911if (empty($namespace) ||
9286*9ccd446eSAtari911    strpos($namespace, '*') !== false ||
9287*9ccd446eSAtari911    strpos($namespace, ';') !== false) {
9288*9ccd446eSAtari911    // User didn't select or selected wildcard
9289*9ccd446eSAtari911    $namespace = $existingNamespace; // Keep existing!
9290*9ccd446eSAtari911}
9291*9ccd446eSAtari911```
9292*9ccd446eSAtari911
9293*9ccd446eSAtari911**Fix 2**: Proper form population
9294*9ccd446eSAtari911```javascript
9295*9ccd446eSAtari911// When editing, set BOTH inputs:
9296*9ccd446eSAtari911namespaceHidden.value = event.namespace || '';  // Hidden (submitted)
9297*9ccd446eSAtari911namespaceSearch.value = event.namespace || '(default)';  // Visible
9298*9ccd446eSAtari911
9299*9ccd446eSAtari911// Plus logging:
9300*9ccd446eSAtari911console.log('Set namespace for editing:', event.namespace);
9301*9ccd446eSAtari911```
9302*9ccd446eSAtari911
9303*9ccd446eSAtari911**Fix 3**: Added detailed logging
9304*9ccd446eSAtari911```php
9305*9ccd446eSAtari911error_log("Preserving namespace '$namespace' (received='$receivedNamespace')");
9306*9ccd446eSAtari911error_log("Using new namespace '$namespace'");
9307*9ccd446eSAtari911error_log("No existing namespace to preserve");
9308*9ccd446eSAtari911```
9309*9ccd446eSAtari911
9310*9ccd446eSAtari911### How It Works Now
9311*9ccd446eSAtari911
9312*9ccd446eSAtari911**Scenario 1**: Edit without changing namespace
9313*9ccd446eSAtari911```
9314*9ccd446eSAtari911Event in "work" namespace
9315*9ccd446eSAtari911Edit title to "Updated Meeting"
9316*9ccd446eSAtari911Namespace field shows: "work"
9317*9ccd446eSAtari911Hidden input value: "work"
9318*9ccd446eSAtari911Result: Saved in "work" ✓
9319*9ccd446eSAtari911```
9320*9ccd446eSAtari911
9321*9ccd446eSAtari911**Scenario 2**: Change namespace during edit
9322*9ccd446eSAtari911```
9323*9ccd446eSAtari911Event in "personal" namespace
9324*9ccd446eSAtari911Edit and select "work" namespace
9325*9ccd446eSAtari911Hidden input value: "work"
9326*9ccd446eSAtari911Result: Saved in "work" ✓
9327*9ccd446eSAtari911```
9328*9ccd446eSAtari911
9329*9ccd446eSAtari911**Scenario 3**: Edit with empty/wildcard namespace
9330*9ccd446eSAtari911```
9331*9ccd446eSAtari911Event in "projects" namespace
9332*9ccd446eSAtari911Namespace field empty or shows "personal;work"
9333*9ccd446eSAtari911System preserves: "projects"
9334*9ccd446eSAtari911Result: Saved in "projects" ✓
9335*9ccd446eSAtari911```
9336*9ccd446eSAtari911
9337*9ccd446eSAtari911### Debugging
9338*9ccd446eSAtari911
9339*9ccd446eSAtari911Now with console logging, you can see:
9340*9ccd446eSAtari911```javascript
9341*9ccd446eSAtari911Set namespace for editing: work
9342*9ccd446eSAtari911Hidden value: work
9343*9ccd446eSAtari911```
9344*9ccd446eSAtari911
9345*9ccd446eSAtari911And in PHP logs:
9346*9ccd446eSAtari911```
9347*9ccd446eSAtari911Calendar saveEvent recurring: Loaded existing data - namespace='work'
9348*9ccd446eSAtari911Calendar saveEvent recurring: Preserving namespace 'work' (received='')
9349*9ccd446eSAtari911```
9350*9ccd446eSAtari911
9351*9ccd446eSAtari911**Namespace preservation now works correctly!** ��
9352*9ccd446eSAtari911
9353*9ccd446eSAtari911## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA
9354*9ccd446eSAtari911
9355*9ccd446eSAtari911### �� Recurring Events Edit Fix
9356*9ccd446eSAtari911- **Fixed:** Editing recurring events now preserves unchanged fields
9357*9ccd446eSAtari911- **Fixed:** Empty fields no longer erase existing data
9358*9ccd446eSAtari911- **Added:** Smart merge of existing event data with new changes
9359*9ccd446eSAtari911
9360*9ccd446eSAtari911### The Problem
9361*9ccd446eSAtari911
9362*9ccd446eSAtari911**Before**: Editing erased unchanged fields!
9363*9ccd446eSAtari911```
9364*9ccd446eSAtari911Original recurring event:
9365*9ccd446eSAtari911- Title: "Team Meeting"
9366*9ccd446eSAtari911- Time: "10:00 AM"
9367*9ccd446eSAtari911- Description: "Weekly standup with engineering team"
9368*9ccd446eSAtari911- Color: Red
9369*9ccd446eSAtari911
9370*9ccd446eSAtari911User edits ONLY the title to "Staff Meeting"
9371*9ccd446eSAtari911Form sends:
9372*9ccd446eSAtari911- Title: "Staff Meeting" ✓
9373*9ccd446eSAtari911- Time: "" ✗ (empty because user didn't change it)
9374*9ccd446eSAtari911- Description: "" ✗ (empty)
9375*9ccd446eSAtari911- Color: "#3498db" ✗ (default blue)
9376*9ccd446eSAtari911
9377*9ccd446eSAtari911Result after save:
9378*9ccd446eSAtari911- Title: "Staff Meeting" ✓
9379*9ccd446eSAtari911- Time: BLANK ✗
9380*9ccd446eSAtari911- Description: BLANK ✗
9381*9ccd446eSAtari911- Color: Blue ✗
9382*9ccd446eSAtari911```
9383*9ccd446eSAtari911
9384*9ccd446eSAtari911**All the other data was lost!** ✗
9385*9ccd446eSAtari911
9386*9ccd446eSAtari911### The Fix
9387*9ccd446eSAtari911
9388*9ccd446eSAtari911**After**: Preserves unchanged data!
9389*9ccd446eSAtari911```php
9390*9ccd446eSAtari911if ($eventId && $isRecurring) {
9391*9ccd446eSAtari911    // Load existing event data
9392*9ccd446eSAtari911    $existingEventData = getExistingEventData($eventId);
9393*9ccd446eSAtari911
9394*9ccd446eSAtari911    // Merge: use new value OR keep existing
9395*9ccd446eSAtari911    $title = $title ?: $existingEventData['title'];
9396*9ccd446eSAtari911    $time = $time ?: $existingEventData['time'];
9397*9ccd446eSAtari911    $description = $description ?: $existingEventData['description'];
9398*9ccd446eSAtari911    $color = ($color === '#3498db') ?
9399*9ccd446eSAtari911        $existingEventData['color'] : $color;
9400*9ccd446eSAtari911}
9401*9ccd446eSAtari911```
9402*9ccd446eSAtari911
9403*9ccd446eSAtari911**Now**:
9404*9ccd446eSAtari911```
9405*9ccd446eSAtari911User edits ONLY the title to "Staff Meeting"
9406*9ccd446eSAtari911
9407*9ccd446eSAtari911System:
9408*9ccd446eSAtari9111. Loads existing event data
9409*9ccd446eSAtari9112. Merges: new title + existing time/description/color
9410*9ccd446eSAtari9113. Saves merged data
9411*9ccd446eSAtari911
9412*9ccd446eSAtari911Result:
9413*9ccd446eSAtari911- Title: "Staff Meeting" ✓ (changed)
9414*9ccd446eSAtari911- Time: "10:00 AM" ✓ (preserved!)
9415*9ccd446eSAtari911- Description: "Weekly standup..." ✓ (preserved!)
9416*9ccd446eSAtari911- Color: Red ✓ (preserved!)
9417*9ccd446eSAtari911```
9418*9ccd446eSAtari911
9419*9ccd446eSAtari911**Only changed fields are updated!** ✓
9420*9ccd446eSAtari911
9421*9ccd446eSAtari911### How It Works
9422*9ccd446eSAtari911
9423*9ccd446eSAtari911**Step 1**: Load existing data
9424*9ccd446eSAtari911```php
9425*9ccd446eSAtari911$existingEventData = $this->getExistingEventData(
9426*9ccd446eSAtari911    $eventId,
9427*9ccd446eSAtari911    $date,
9428*9ccd446eSAtari911    $namespace
9429*9ccd446eSAtari911);
9430*9ccd446eSAtari911```
9431*9ccd446eSAtari911
9432*9ccd446eSAtari911**Step 2**: Merge with new data
9433*9ccd446eSAtari911```php
9434*9ccd446eSAtari911// If new value is empty, use existing value
9435*9ccd446eSAtari911$title = $newTitle ?: $existingEventData['title'];
9436*9ccd446eSAtari911$time = $newTime ?: $existingEventData['time'];
9437*9ccd446eSAtari911$description = $newDesc ?: $existingEventData['description'];
9438*9ccd446eSAtari911
9439*9ccd446eSAtari911// Special handling for color (default is #3498db)
9440*9ccd446eSAtari911if ($newColor === '#3498db' && $existingEventData['color']) {
9441*9ccd446eSAtari911    $color = $existingEventData['color'];
9442*9ccd446eSAtari911}
9443*9ccd446eSAtari911```
9444*9ccd446eSAtari911
9445*9ccd446eSAtari911**Step 3**: Save merged data
9446*9ccd446eSAtari911```php
9447*9ccd446eSAtari911createRecurringEvents(..., $title, $time, $description, $color, ...);
9448*9ccd446eSAtari911```
9449*9ccd446eSAtari911
9450*9ccd446eSAtari911### Fields Preserved
9451*9ccd446eSAtari911
9452*9ccd446eSAtari911When editing recurring events, these fields are now preserved if not changed:
9453*9ccd446eSAtari911- ✅ Title (if left blank)
9454*9ccd446eSAtari911- ✅ Time (if not specified)
9455*9ccd446eSAtari911- ✅ End Time (if not specified)
9456*9ccd446eSAtari911- ✅ Description (if left empty)
9457*9ccd446eSAtari911- ✅ Color (if still default blue)
9458*9ccd446eSAtari911
9459*9ccd446eSAtari911**Edit only what you want to change - everything else stays!** ��
9460*9ccd446eSAtari911
9461*9ccd446eSAtari911## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX
9462*9ccd446eSAtari911
9463*9ccd446eSAtari911### ✨ New Feature: Rename Namespaces
9464*9ccd446eSAtari911- **Added:** ✏️ Rename button in Namespace Explorer
9465*9ccd446eSAtari911- **Added:** Rename all events in a namespace at once
9466*9ccd446eSAtari911- **Added:** Automatic cleanup of old directory structure
9467*9ccd446eSAtari911
9468*9ccd446eSAtari911### �� Critical Fix: Recurring Events Actually Edit Now!
9469*9ccd446eSAtari911- **Fixed:** Editing recurring events now deletes ALL instances
9470*9ccd446eSAtari911- **Fixed:** Previously only deleted one instance, left orphans
9471*9ccd446eSAtari911- **Fixed:** Recurring events properly regenerated on edit
9472*9ccd446eSAtari911
9473*9ccd446eSAtari911### Namespace Rename Feature
9474*9ccd446eSAtari911
9475*9ccd446eSAtari911**Before**: Could only delete namespaces, not rename
9476*9ccd446eSAtari911
9477*9ccd446eSAtari911**After**: Click ✏️ to rename!
9478*9ccd446eSAtari911
9479*9ccd446eSAtari911```
9480*9ccd446eSAtari911�� work (15 events)  [3] [✏️] [��️]
9481*9ccd446eSAtari911                          ↑ NEW!
9482*9ccd446eSAtari911```
9483*9ccd446eSAtari911
9484*9ccd446eSAtari911**How It Works**:
9485*9ccd446eSAtari9111. Click ✏️ rename button
9486*9ccd446eSAtari9112. Enter new namespace name
9487*9ccd446eSAtari9113. All events moved to new namespace
9488*9ccd446eSAtari9114. Event `namespace` field updated in JSON
9489*9ccd446eSAtari9115. Old directory cleaned up
9490*9ccd446eSAtari911
9491*9ccd446eSAtari911**Example**:
9492*9ccd446eSAtari911```
9493*9ccd446eSAtari911Rename: "work" → "business"
9494*9ccd446eSAtari911
9495*9ccd446eSAtari911Before:
9496*9ccd446eSAtari911/data/meta/work/calendar/*.json
9497*9ccd446eSAtari911Events: {namespace: "work"}
9498*9ccd446eSAtari911
9499*9ccd446eSAtari911After:
9500*9ccd446eSAtari911/data/meta/business/calendar/*.json
9501*9ccd446eSAtari911Events: {namespace: "business"}
9502*9ccd446eSAtari911```
9503*9ccd446eSAtari911
9504*9ccd446eSAtari911**Implementation**:
9505*9ccd446eSAtari911```php
9506*9ccd446eSAtari911private function renameNamespace() {
9507*9ccd446eSAtari911    // 1. Validate new name
9508*9ccd446eSAtari911    // 2. Rename directory
9509*9ccd446eSAtari911    // 3. Update all event namespace fields in JSON
9510*9ccd446eSAtari911    // 4. Clean up old empty directories
9511*9ccd446eSAtari911}
9512*9ccd446eSAtari911```
9513*9ccd446eSAtari911
9514*9ccd446eSAtari911### Recurring Events Fix - The Problem
9515*9ccd446eSAtari911
9516*9ccd446eSAtari911**Before**: Editing didn't work!
9517*9ccd446eSAtari911```
9518*9ccd446eSAtari911Original recurring event generates:
9519*9ccd446eSAtari911- Event-0 (Mon, Feb 10)
9520*9ccd446eSAtari911- Event-1 (Mon, Feb 17)
9521*9ccd446eSAtari911- Event-2 (Mon, Feb 24)
9522*9ccd446eSAtari911
9523*9ccd446eSAtari911User edits Event-0, changes title to "Updated"
9524*9ccd446eSAtari911
9525*9ccd446eSAtari911What SHOULD happen:
9526*9ccd446eSAtari911- Delete Event-0, Event-1, Event-2
9527*9ccd446eSAtari911- Generate new instances with "Updated" title
9528*9ccd446eSAtari911
9529*9ccd446eSAtari911What ACTUALLY happened:
9530*9ccd446eSAtari911- Delete Event-0 only ✗
9531*9ccd446eSAtari911- Generate new instances
9532*9ccd446eSAtari911- Result: Event-1 and Event-2 still show old title! ✗
9533*9ccd446eSAtari911```
9534*9ccd446eSAtari911
9535*9ccd446eSAtari911**After**: Properly deletes ALL instances!
9536*9ccd446eSAtari911
9537*9ccd446eSAtari911**The Fix**:
9538*9ccd446eSAtari911```php
9539*9ccd446eSAtari911private function deleteEvent() {
9540*9ccd446eSAtari911    $event = getEvent($eventId);
9541*9ccd446eSAtari911
9542*9ccd446eSAtari911    // Check if recurring
9543*9ccd446eSAtari911    if ($event['recurring'] && $event['recurringId']) {
9544*9ccd446eSAtari911        // Delete ALL instances with same recurringId
9545*9ccd446eSAtari911        deleteAllRecurringInstances($recurringId);
9546*9ccd446eSAtari911    }
9547*9ccd446eSAtari911
9548*9ccd446eSAtari911    // Then normal delete for spanning events
9549*9ccd446eSAtari911}
9550*9ccd446eSAtari911
9551*9ccd446eSAtari911private function deleteAllRecurringInstances($recurringId) {
9552*9ccd446eSAtari911    // Scan ALL calendar JSON files
9553*9ccd446eSAtari911    foreach (glob('*.json') as $file) {
9554*9ccd446eSAtari911        // Filter out events with matching recurringId
9555*9ccd446eSAtari911        $events = array_filter($events, function($event) {
9556*9ccd446eSAtari911            return $event['recurringId'] !== $recurringId;
9557*9ccd446eSAtari911        });
9558*9ccd446eSAtari911    }
9559*9ccd446eSAtari911}
9560*9ccd446eSAtari911```
9561*9ccd446eSAtari911
9562*9ccd446eSAtari911**Result**:
9563*9ccd446eSAtari911- Edit "Weekly Team Meeting" → ALL instances updated ✓
9564*9ccd446eSAtari911- Delete recurring event → ALL instances deleted ✓
9565*9ccd446eSAtari911- No more orphaned events! ✓
9566*9ccd446eSAtari911
9567*9ccd446eSAtari911### Recurring Event Fields
9568*9ccd446eSAtari911
9569*9ccd446eSAtari911Every recurring event has:
9570*9ccd446eSAtari911```json
9571*9ccd446eSAtari911{
9572*9ccd446eSAtari911    "id": "abc123-0",
9573*9ccd446eSAtari911    "recurring": true,
9574*9ccd446eSAtari911    "recurringId": "abc123",  ← Links all instances
9575*9ccd446eSAtari911    ...
9576*9ccd446eSAtari911}
9577*9ccd446eSAtari911```
9578*9ccd446eSAtari911
9579*9ccd446eSAtari911When editing/deleting, we find ALL events with same `recurringId` and remove them!
9580*9ccd446eSAtari911
9581*9ccd446eSAtari911**Finally, recurring events work properly!** ��
9582*9ccd446eSAtari911
9583*9ccd446eSAtari911## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS
9584*9ccd446eSAtari911
9585*9ccd446eSAtari911### �� Important Events Sorting - ACTUALLY FIXED!
9586*9ccd446eSAtari911- **Fixed:** Important Events now REALLY sorted by date first, then time
9587*9ccd446eSAtari911- **Fixed:** renderSidebarSection was re-sorting and breaking the order
9588*9ccd446eSAtari911- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only
9589*9ccd446eSAtari911
9590*9ccd446eSAtari911### �� Pink Theme Tooltip Bling!
9591*9ccd446eSAtari911- **Added:** Pink gradient tooltips (hot pink → light pink)
9592*9ccd446eSAtari911- **Added:** Glowing pink border on tooltips
9593*9ccd446eSAtari911- **Added:** Sparkling heart (��) appears next to tooltip!
9594*9ccd446eSAtari911- **Added:** Heart has pink glow drop-shadow
9595*9ccd446eSAtari911
9596*9ccd446eSAtari911### The Sorting Bug - Root Cause
9597*9ccd446eSAtari911
9598*9ccd446eSAtari911**Problem**: Two sorts were happening!
9599*9ccd446eSAtari911
9600*9ccd446eSAtari911**Sort #1** (Line 2047): Before rendering
9601*9ccd446eSAtari911```php
9602*9ccd446eSAtari911usort($importantEvents, ...) // Sort by date ✓
9603*9ccd446eSAtari911```
9604*9ccd446eSAtari911
9605*9ccd446eSAtari911**Sort #2** (Line 2751): Inside renderSidebarSection
9606*9ccd446eSAtari911```php
9607*9ccd446eSAtari911usort($events, ...) // Sort by TIME ONLY ✗
9608*9ccd446eSAtari911// This was breaking the date order!
9609*9ccd446eSAtari911```
9610*9ccd446eSAtari911
9611*9ccd446eSAtari911**The Fix**: Different sorting for different sections
9612*9ccd446eSAtari911```php
9613*9ccd446eSAtari911if ($title === 'Important Events') {
9614*9ccd446eSAtari911    // Sort by DATE first, then time
9615*9ccd446eSAtari911    usort($events, function($a, $b) {
9616*9ccd446eSAtari911        if ($dateA !== $dateB) {
9617*9ccd446eSAtari911            return strcmp($dateA, $dateB); // DATE first!
9618*9ccd446eSAtari911        }
9619*9ccd446eSAtari911        // Same date - sort by time
9620*9ccd446eSAtari911        return timeCompare($a, $b);
9621*9ccd446eSAtari911    });
9622*9ccd446eSAtari911} else {
9623*9ccd446eSAtari911    // Today/Tomorrow - sort by TIME only (same date)
9624*9ccd446eSAtari911    usort($events, function($a, $b) {
9625*9ccd446eSAtari911        return timeCompare($a, $b);
9626*9ccd446eSAtari911    });
9627*9ccd446eSAtari911}
9628*9ccd446eSAtari911```
9629*9ccd446eSAtari911
9630*9ccd446eSAtari911**Result**: Important Events now CORRECTLY sorted!
9631*9ccd446eSAtari911```
9632*9ccd446eSAtari911✓ Sun, Feb 8 - 3:30 PM Super Bowl
9633*9ccd446eSAtari911✓ Tue, Feb 10 - 11:30 AM Doctor visit
9634*9ccd446eSAtari911✓ Sat, Feb 14 - Valentine's Day (all-day)
9635*9ccd446eSAtari911✓ Sat, Feb 14 - 8:00 PM Crab Shack
9636*9ccd446eSAtari911```
9637*9ccd446eSAtari911
9638*9ccd446eSAtari911### Pink Tooltip Magic! ��
9639*9ccd446eSAtari911
9640*9ccd446eSAtari911**Normal Tooltips**: Black background, plain
9641*9ccd446eSAtari911```css
9642*9ccd446eSAtari911background: rgba(0, 0, 0, 0.95);
9643*9ccd446eSAtari911color: #fff;
9644*9ccd446eSAtari911```
9645*9ccd446eSAtari911
9646*9ccd446eSAtari911**Pink Theme Tooltips**: FABULOUS!
9647*9ccd446eSAtari911```css
9648*9ccd446eSAtari911/* Pink gradient background */
9649*9ccd446eSAtari911background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%);
9650*9ccd446eSAtari911
9651*9ccd446eSAtari911/* Glowing pink border */
9652*9ccd446eSAtari911border: 2px solid #ff85c1;
9653*9ccd446eSAtari911
9654*9ccd446eSAtari911/* Double glow shadow */
9655*9ccd446eSAtari911box-shadow:
9656*9ccd446eSAtari911    0 0 15px rgba(255, 20, 147, 0.6),
9657*9ccd446eSAtari911    0 4px 12px rgba(0, 0, 0, 0.4);
9658*9ccd446eSAtari911
9659*9ccd446eSAtari911/* Bold text */
9660*9ccd446eSAtari911font-weight: 600;
9661*9ccd446eSAtari911```
9662*9ccd446eSAtari911
9663*9ccd446eSAtari911**Plus**: Sparkling heart next to tooltip!
9664*9ccd446eSAtari911```css
9665*9ccd446eSAtari911.sidebar-pink [data-tooltip]:after {
9666*9ccd446eSAtari911    content: '��';
9667*9ccd446eSAtari911    font-size: 12px;
9668*9ccd446eSAtari911    filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8));
9669*9ccd446eSAtari911}
9670*9ccd446eSAtari911```
9671*9ccd446eSAtari911
9672*9ccd446eSAtari911**The Effect**:
9673*9ccd446eSAtari911```
9674*9ccd446eSAtari911Hover over ⚠ conflict warning:
9675*9ccd446eSAtari911┌────────────────────┐ ��
9676*9ccd446eSAtari911│ Conflicts with:    │ ← Pink gradient
9677*9ccd446eSAtari911│ • Event 1 (3PM)   │ ← Pink border
9678*9ccd446eSAtari911│ • Event 2 (4PM)   │ ← Pink glow
9679*9ccd446eSAtari911└────────────────────┘
9680*9ccd446eSAtari911```
9681*9ccd446eSAtari911
9682*9ccd446eSAtari911**Maximum glamour on tooltips too!** ✨
9683*9ccd446eSAtari911
9684*9ccd446eSAtari911## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING
9685*9ccd446eSAtari911
9686*9ccd446eSAtari911### �� Important Events Order Fixed
9687*9ccd446eSAtari911- **Fixed:** Important Events now sorted by date (earliest first)
9688*9ccd446eSAtari911- **Fixed:** Events on same date sorted by time (chronological)
9689*9ccd446eSAtari911- **Fixed:** All-day events appear last within each date
9690*9ccd446eSAtari911
9691*9ccd446eSAtari911### Sorting Issue
9692*9ccd446eSAtari911
9693*9ccd446eSAtari911**Before**: Random order
9694*9ccd446eSAtari911```
9695*9ccd446eSAtari911Important Events:
9696*9ccd446eSAtari911�� Valentine's Day         (Sat, Feb 14)
9697*9ccd446eSAtari91111:30 AM Doctor visit      (Tue, Feb 10)  ← Feb 10 after Feb 14!
9698*9ccd446eSAtari9113:30 PM Super Bowl         (Sun, Feb 8)   ← Feb 8 after Feb 14!
9699*9ccd446eSAtari9118:00 PM Crab Shack         (Sat, Feb 14)
9700*9ccd446eSAtari911```
9701*9ccd446eSAtari911
9702*9ccd446eSAtari911**After**: Chronological order
9703*9ccd446eSAtari911```
9704*9ccd446eSAtari911Important Events:
9705*9ccd446eSAtari9113:30 PM Super Bowl         (Sun, Feb 8)   ← Earliest!
9706*9ccd446eSAtari91111:30 AM Doctor visit      (Tue, Feb 10)
9707*9ccd446eSAtari911�� Valentine's Day         (Sat, Feb 14)  ← All-day event
9708*9ccd446eSAtari9118:00 PM Crab Shack         (Sat, Feb 14)  ← Same day, sorted by time
9709*9ccd446eSAtari911```
9710*9ccd446eSAtari911
9711*9ccd446eSAtari911### Sorting Logic
9712*9ccd446eSAtari911
9713*9ccd446eSAtari911**Primary Sort**: By date
9714*9ccd446eSAtari911```php
9715*9ccd446eSAtari911strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14"
9716*9ccd446eSAtari911```
9717*9ccd446eSAtari911
9718*9ccd446eSAtari911**Secondary Sort**: By time (within same date)
9719*9ccd446eSAtari911```php
9720*9ccd446eSAtari911// All-day events (no time) go last
9721*9ccd446eSAtari911if (empty($timeA) && !empty($timeB)) return 1;
9722*9ccd446eSAtari911if (!empty($timeA) && empty($timeB)) return -1;
9723*9ccd446eSAtari911
9724*9ccd446eSAtari911// Both have times - sort chronologically
9725*9ccd446eSAtari911$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes
9726*9ccd446eSAtari911$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes
9727*9ccd446eSAtari911return $aMinutes - $bMinutes;      // 690 < 1200
9728*9ccd446eSAtari911```
9729*9ccd446eSAtari911
9730*9ccd446eSAtari911**Result**:
9731*9ccd446eSAtari9111. Sun, Feb 8 - 3:30 PM (earliest date & time)
9732*9ccd446eSAtari9112. Tue, Feb 10 - 11:30 AM (next date)
9733*9ccd446eSAtari9113. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14)
9734*9ccd446eSAtari9114. Sat, Feb 14 - 8:00 PM (timed event on Feb 14)
9735*9ccd446eSAtari911
9736*9ccd446eSAtari911**Perfect chronological order for next 2 weeks!** ✓
9737*9ccd446eSAtari911
9738*9ccd446eSAtari911## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨��
9739*9ccd446eSAtari911
9740*9ccd446eSAtari911### �� EXTREME PINK BLING EFFECTS!
9741*9ccd446eSAtari911- **Added:** Click sparkles - 8 sparkles burst out on every click!
9742*9ccd446eSAtari911- **Added:** Auto-sparkles - random sparkles appear every 3 seconds
9743*9ccd446eSAtari911- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover
9744*9ccd446eSAtari911- **Added:** Pulsing border glow - constantly breathing pink glow
9745*9ccd446eSAtari911- **Added:** Drop shadows on sparkles for extra depth
9746*9ccd446eSAtari911- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows!
9747*9ccd446eSAtari911
9748*9ccd446eSAtari911### Sparkle Effects Breakdown
9749*9ccd446eSAtari911
9750*9ccd446eSAtari911**Click Sparkles** ��:
9751*9ccd446eSAtari911```javascript
9752*9ccd446eSAtari911// 8 sparkles burst out when you click anywhere!
9753*9ccd446eSAtari911for (let i = 0; i < 8; i++) {
9754*9ccd446eSAtari911    // Staggered appearance (40ms apart)
9755*9ccd446eSAtari911    createSparkle(x, y);
9756*9ccd446eSAtari911}
9757*9ccd446eSAtari911
9758*9ccd446eSAtari911// Sparkle emojis:
9759*9ccd446eSAtari911["✨", "��", "��", "⭐", "��", "��", "��", "��", "��", "��"]
9760*9ccd446eSAtari911```
9761*9ccd446eSAtari911
9762*9ccd446eSAtari911**Each sparkle**:
9763*9ccd446eSAtari911- Starts at click point
9764*9ccd446eSAtari911- Flies outward 30-60px in random direction
9765*9ccd446eSAtari911- Spins 360 degrees
9766*9ccd446eSAtari911- Fades in and out
9767*9ccd446eSAtari911- Has pink glow drop-shadow
9768*9ccd446eSAtari911- Disappears after 1 second
9769*9ccd446eSAtari911
9770*9ccd446eSAtari911**Auto Sparkles** ⏰:
9771*9ccd446eSAtari911```javascript
9772*9ccd446eSAtari911// Random sparkle every 3 seconds
9773*9ccd446eSAtari911setInterval(() => {
9774*9ccd446eSAtari911    const x = Math.random() * width;
9775*9ccd446eSAtari911    const y = Math.random() * height;
9776*9ccd446eSAtari911    createSparkle(x, y);
9777*9ccd446eSAtari911}, 3000);
9778*9ccd446eSAtari911```
9779*9ccd446eSAtari911
9780*9ccd446eSAtari911**Result**: Constant magical sparkles even without clicking! ✨
9781*9ccd446eSAtari911
9782*9ccd446eSAtari911**Hover Mega-Glow** ��:
9783*9ccd446eSAtari911```css
9784*9ccd446eSAtari911.sidebar-pink:hover {
9785*9ccd446eSAtari911    box-shadow:
9786*9ccd446eSAtari911        0 0 30px rgba(255, 20, 147, 0.9),
9787*9ccd446eSAtari911        0 0 50px rgba(255, 20, 147, 0.5) !important;
9788*9ccd446eSAtari911}
9789*9ccd446eSAtari911```
9790*9ccd446eSAtari911
9791*9ccd446eSAtari911**Result**: Sidebar EXPLODES with pink glow when you hover over it! ��
9792*9ccd446eSAtari911
9793*9ccd446eSAtari911**Pulsing Border Glow** ��:
9794*9ccd446eSAtari911```css
9795*9ccd446eSAtari911@keyframes pulse-glow {
9796*9ccd446eSAtari911    0%, 100% {
9797*9ccd446eSAtari911        box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
9798*9ccd446eSAtari911    }
9799*9ccd446eSAtari911    50% {
9800*9ccd446eSAtari911        box-shadow:
9801*9ccd446eSAtari911            0 0 25px rgba(255, 20, 147, 0.8),
9802*9ccd446eSAtari911            0 0 40px rgba(255, 20, 147, 0.4);
9803*9ccd446eSAtari911    }
9804*9ccd446eSAtari911}
9805*9ccd446eSAtari911
9806*9ccd446eSAtari911animation: pulse-glow 3s ease-in-out infinite;
9807*9ccd446eSAtari911```
9808*9ccd446eSAtari911
9809*9ccd446eSAtari911**Result**: Border continuously breathes with pink glow! ��
9810*9ccd446eSAtari911
9811*9ccd446eSAtari911**Sparkle Animation** ��:
9812*9ccd446eSAtari911```css
9813*9ccd446eSAtari911@keyframes sparkle {
9814*9ccd446eSAtari911    0% {
9815*9ccd446eSAtari911        opacity: 0;
9816*9ccd446eSAtari911        transform: translate(0, 0) scale(0) rotate(0deg);
9817*9ccd446eSAtari911    }
9818*9ccd446eSAtari911    50% {
9819*9ccd446eSAtari911        opacity: 1;
9820*9ccd446eSAtari911        transform: translate(halfway) scale(1) rotate(180deg);
9821*9ccd446eSAtari911    }
9822*9ccd446eSAtari911    100% {
9823*9ccd446eSAtari911        opacity: 0;
9824*9ccd446eSAtari911        transform: translate(far) scale(0) rotate(360deg);
9825*9ccd446eSAtari911    }
9826*9ccd446eSAtari911}
9827*9ccd446eSAtari911```
9828*9ccd446eSAtari911
9829*9ccd446eSAtari911**Result**: Sparkles spin, grow, shrink, and fly! ��
9830*9ccd446eSAtari911
9831*9ccd446eSAtari911### Complete Pink Bling Experience:
9832*9ccd446eSAtari911
9833*9ccd446eSAtari911**Always Active**:
9834*9ccd446eSAtari911- ✨ Pulsing pink border glow (3 second cycle)
9835*9ccd446eSAtari911- ✨ Auto-sparkles every 3 seconds
9836*9ccd446eSAtari911
9837*9ccd446eSAtari911**On Hover**:
9838*9ccd446eSAtari911- �� MEGA GLOW EFFECT (2x brightness!)
9839*9ccd446eSAtari911
9840*9ccd446eSAtari911**On Click**:
9841*9ccd446eSAtari911- �� 8 sparkles EXPLODE outward!
9842*9ccd446eSAtari911- �� Random emojis (hearts, stars, diamonds, crowns!)
9843*9ccd446eSAtari911- �� Each sparkle spins 360° while flying
9844*9ccd446eSAtari911- �� Pink glow drop-shadow on each sparkle
9845*9ccd446eSAtari911
9846*9ccd446eSAtari911**The Result**:
9847*9ccd446eSAtari911- Click anywhere = SPARKLE EXPLOSION! ��
9848*9ccd446eSAtari911- Hover anywhere = MEGA GLOW! ✨
9849*9ccd446eSAtari911- Always breathing and sparkling! ��
9850*9ccd446eSAtari911- Maximum glamour! ��
9851*9ccd446eSAtari911- Wife approval: 1000%! ��
9852*9ccd446eSAtari911
9853*9ccd446eSAtari911**THIS IS THE MOST FABULOUS CALENDAR EVER!** ��✨��
9854*9ccd446eSAtari911
9855*9ccd446eSAtari911## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH
9856*9ccd446eSAtari911
9857*9ccd446eSAtari911### �� Pink Theme Final Touches
9858*9ccd446eSAtari911- **Fixed:** Add Event text now black (was bright pink, hard to read)
9859*9ccd446eSAtari911- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!)
9860*9ccd446eSAtari911- **Removed:** Text shadow on Add Event button (cleaner with black text)
9861*9ccd446eSAtari911
9862*9ccd446eSAtari911### Add Event Text - Black & Readable!
9863*9ccd446eSAtari911
9864*9ccd446eSAtari911**Before**: Bright pink text (#ff1493) on dark pink background
9865*9ccd446eSAtari911```php
9866*9ccd446eSAtari911$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read!
9867*9ccd446eSAtari911text-shadow: 0 0 3px #ff1493; // Glowy pink
9868*9ccd446eSAtari911```
9869*9ccd446eSAtari911
9870*9ccd446eSAtari911**After**: Black text, no shadow, perfect contrast!
9871*9ccd446eSAtari911```php
9872*9ccd446eSAtari911$addBtnTextColor = $theme === 'pink' ? '#000000' : ...;
9873*9ccd446eSAtari911$addBtnTextShadow = $theme === 'pink' ? 'none' : ...;
9874*9ccd446eSAtari911```
9875*9ccd446eSAtari911
9876*9ccd446eSAtari911**Result**:
9877*9ccd446eSAtari911- Black text pops against dark pink background ✓
9878*9ccd446eSAtari911- Easy to read ✓
9879*9ccd446eSAtari911- Professional look with bling ✓
9880*9ccd446eSAtari911
9881*9ccd446eSAtari911### Clock Border - All Pink!
9882*9ccd446eSAtari911
9883*9ccd446eSAtari911**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green
9884*9ccd446eSAtari911
9885*9ccd446eSAtari911**Before**:
9886*9ccd446eSAtari911```php
9887*9ccd446eSAtari911// Inline style (only bottom):
9888*9ccd446eSAtari911style="border-bottom:2px solid #ff1493;"
9889*9ccd446eSAtari911
9890*9ccd446eSAtari911// CSS (all sides):
9891*9ccd446eSAtari911.eventlist-today-header {
9892*9ccd446eSAtari911    border: 2px solid #00cc07; // Green on top/sides!
9893*9ccd446eSAtari911}
9894*9ccd446eSAtari911```
9895*9ccd446eSAtari911
9896*9ccd446eSAtari911**After**: Inline style overrides ALL sides
9897*9ccd446eSAtari911```php
9898*9ccd446eSAtari911style="border:2px solid #ff1493;" // All 4 sides pink!
9899*9ccd446eSAtari911```
9900*9ccd446eSAtari911
9901*9ccd446eSAtari911**Result**: Clock box now 100% pink border on all four sides! ✓
9902*9ccd446eSAtari911
9903*9ccd446eSAtari911### What Changed:
9904*9ccd446eSAtari911
9905*9ccd446eSAtari911**Add Event Button**:
9906*9ccd446eSAtari911- Background: #b8156f (dark pink) ✓
9907*9ccd446eSAtari911- Text: **#000000 (black)** ← NEW!
9908*9ccd446eSAtari911- Text shadow: **none** ← NEW!
9909*9ccd446eSAtari911- Glow: 0 0 10px pink ✓
9910*9ccd446eSAtari911
9911*9ccd446eSAtari911**Clock Border**:
9912*9ccd446eSAtari911- Top: **#ff1493 (pink)** ← FIXED!
9913*9ccd446eSAtari911- Right: **#ff1493 (pink)** ← FIXED!
9914*9ccd446eSAtari911- Bottom: #ff1493 (pink) ✓
9915*9ccd446eSAtari911- Left: **#ff1493 (pink)** ← FIXED!
9916*9ccd446eSAtari911
9917*9ccd446eSAtari911**Perfect pink theme - wife approved!** ��✨
9918*9ccd446eSAtari911
9919*9ccd446eSAtari911## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION
9920*9ccd446eSAtari911
9921*9ccd446eSAtari911### �� Pink Theme Complete Makeover
9922*9ccd446eSAtari911- **Fixed:** Clock border now completely pink (was green on sides/top)
9923*9ccd446eSAtari911- **Changed:** Today/Tomorrow/Important sections now different shades of pink
9924*9ccd446eSAtari911- **Changed:** Add Event button now dark pink (was clashing blue)
9925*9ccd446eSAtari911- **Changed:** System status bars now pink gradient (3 shades!)
9926*9ccd446eSAtari911
9927*9ccd446eSAtari911### All-Pink Everything! ��
9928*9ccd446eSAtari911
9929*9ccd446eSAtari911**Clock Border**:
9930*9ccd446eSAtari911```css
9931*9ccd446eSAtari911/* Before: Green border */
9932*9ccd446eSAtari911border: 2px solid #00cc07;
9933*9ccd446eSAtari911
9934*9ccd446eSAtari911/* After: Hot pink border */
9935*9ccd446eSAtari911.sidebar-pink .eventlist-today-header {
9936*9ccd446eSAtari911    border-color: #ff1493;
9937*9ccd446eSAtari911    box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
9938*9ccd446eSAtari911}
9939*9ccd446eSAtari911```
9940*9ccd446eSAtari911
9941*9ccd446eSAtari911**Section Colors** (Different Pink Shades):
9942*9ccd446eSAtari911```php
9943*9ccd446eSAtari911// Before: Orange, green, purple
9944*9ccd446eSAtari911'Today' => '#ff9800',
9945*9ccd446eSAtari911'Tomorrow' => '#4caf50',
9946*9ccd446eSAtari911'Important' => '#9b59b6'
9947*9ccd446eSAtari911
9948*9ccd446eSAtari911// After: Hot pink, pink, light pink
9949*9ccd446eSAtari911'Today' => '#ff1493',      // Hot pink (DeepPink)
9950*9ccd446eSAtari911'Tomorrow' => '#ff69b4',   // Pink (HotPink)
9951*9ccd446eSAtari911'Important' => '#ff85c1'   // Light pink
9952*9ccd446eSAtari911```
9953*9ccd446eSAtari911
9954*9ccd446eSAtari911**Add Event Button**:
9955*9ccd446eSAtari911```php
9956*9ccd446eSAtari911// Before: Clashing blue
9957*9ccd446eSAtari911background: #3498db;
9958*9ccd446eSAtari911
9959*9ccd446eSAtari911// After: Dark pink with glow
9960*9ccd446eSAtari911background: #b8156f;       // Dark pink
9961*9ccd446eSAtari911hover: #8b0f54;            // Darker pink
9962*9ccd446eSAtari911shadow: 0 0 10px rgba(255, 20, 147, 0.5);
9963*9ccd446eSAtari911```
9964*9ccd446eSAtari911
9965*9ccd446eSAtari911**System Status Bars** (Pink Gradient):
9966*9ccd446eSAtari911```css
9967*9ccd446eSAtari911/* 5-min load average */
9968*9ccd446eSAtari911.sidebar-pink .eventlist-cpu-fill {
9969*9ccd446eSAtari911    background: #ff1493;   /* Hot pink */
9970*9ccd446eSAtari911    box-shadow: 0 0 5px rgba(255, 20, 147, 0.7);
9971*9ccd446eSAtari911}
9972*9ccd446eSAtari911
9973*9ccd446eSAtari911/* Realtime CPU */
9974*9ccd446eSAtari911.sidebar-pink .eventlist-cpu-fill-purple {
9975*9ccd446eSAtari911    background: #ff69b4;   /* Pink */
9976*9ccd446eSAtari911    box-shadow: 0 0 5px rgba(255, 105, 180, 0.7);
9977*9ccd446eSAtari911}
9978*9ccd446eSAtari911
9979*9ccd446eSAtari911/* Memory */
9980*9ccd446eSAtari911.sidebar-pink .eventlist-cpu-fill-orange {
9981*9ccd446eSAtari911    background: #ff85c1;   /* Light pink */
9982*9ccd446eSAtari911    box-shadow: 0 0 5px rgba(255, 133, 193, 0.7);
9983*9ccd446eSAtari911}
9984*9ccd446eSAtari911```
9985*9ccd446eSAtari911
9986*9ccd446eSAtari911### Pink Theme Visual Hierarchy:
9987*9ccd446eSAtari911
9988*9ccd446eSAtari911**Darkest → Lightest Pink Shades**:
9989*9ccd446eSAtari9111. Add Event button: #b8156f (dark pink)
9990*9ccd446eSAtari9112. Today section: #ff1493 (hot pink / deep pink)
9991*9ccd446eSAtari9113. System bar 1: #ff1493 (hot pink)
9992*9ccd446eSAtari9114. Tomorrow section: #ff69b4 (pink)
9993*9ccd446eSAtari9115. System bar 2: #ff69b4 (pink)
9994*9ccd446eSAtari9116. Important section: #ff85c1 (light pink)
9995*9ccd446eSAtari9117. System bar 3: #ff85c1 (light pink)
9996*9ccd446eSAtari911
9997*9ccd446eSAtari911**Result**: Beautiful pink gradient throughout entire sidebar! ��✨
9998*9ccd446eSAtari911
9999*9ccd446eSAtari911### What's Pink Now:
10000*9ccd446eSAtari911
10001*9ccd446eSAtari911✅ Sidebar background & border
10002*9ccd446eSAtari911✅ **Clock border** ← FIXED!
10003*9ccd446eSAtari911✅ Header gradient
10004*9ccd446eSAtari911✅ Week grid
10005*9ccd446eSAtari911✅ **Add Event button** ← FIXED!
10006*9ccd446eSAtari911✅ **Today section** ← Different shade!
10007*9ccd446eSAtari911✅ **Tomorrow section** ← Different shade!
10008*9ccd446eSAtari911✅ **Important section** ← Different shade!
10009*9ccd446eSAtari911✅ Event text & bars
10010*9ccd446eSAtari911✅ **System status bars** ← All 3 different pink shades!
10011*9ccd446eSAtari911✅ All shadows & glows
10012*9ccd446eSAtari911
10013*9ccd446eSAtari911**EVERYTHING is pink and fabulous!** ��✨
10014*9ccd446eSAtari911
10015*9ccd446eSAtari911## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS
10016*9ccd446eSAtari911
10017*9ccd446eSAtari911### ✨ New Theme: Pink Bling! ��
10018*9ccd446eSAtari911- **Added:** Glamorous hot pink theme with maximum sparkle
10019*9ccd446eSAtari911- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic
10020*9ccd446eSAtari911- **Perfect for:** Fabulous calendars that demand attention ✨
10021*9ccd446eSAtari911
10022*9ccd446eSAtari911### �� Professional Theme Shadow Fix
10023*9ccd446eSAtari911- **Fixed:** Section headers now have subtle shadow (not glow)
10024*9ccd446eSAtari911- **Fixed:** Clicked day panel header has proper shadow
10025*9ccd446eSAtari911
10026*9ccd446eSAtari911### Pink Bling Theme Colors
10027*9ccd446eSAtari911
10028*9ccd446eSAtari911**Background & Borders**:
10029*9ccd446eSAtari911```php
10030*9ccd446eSAtari911'bg' => '#1a0d14',           // Dark rich pink-black
10031*9ccd446eSAtari911'border' => '#ff1493',        // Hot pink (DeepPink)
10032*9ccd446eSAtari911'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow
10033*9ccd446eSAtari911```
10034*9ccd446eSAtari911
10035*9ccd446eSAtari911**Text Colors**:
10036*9ccd446eSAtari911```php
10037*9ccd446eSAtari911'text_primary' => '#ff69b4',  // Hot pink
10038*9ccd446eSAtari911'text_bright' => '#ff1493',   // Deep pink
10039*9ccd446eSAtari911'text_dim' => '#ff85c1',      // Light pink
10040*9ccd446eSAtari911```
10041*9ccd446eSAtari911
10042*9ccd446eSAtari911**Week Grid**:
10043*9ccd446eSAtari911```php
10044*9ccd446eSAtari911'grid_bg' => '#2d1a24',       // Dark purple-pink
10045*9ccd446eSAtari911'cell_bg' => '#1a0d14',       // Dark
10046*9ccd446eSAtari911'cell_today_bg' => '#3d2030', // Highlighted purple-pink
10047*9ccd446eSAtari911```
10048*9ccd446eSAtari911
10049*9ccd446eSAtari911**Special Effects**:
10050*9ccd446eSAtari911```php
10051*9ccd446eSAtari911'bar_glow' => '0 0 5px',      // Extra sparkly glow!
10052*9ccd446eSAtari911'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling!
10053*9ccd446eSAtari911```
10054*9ccd446eSAtari911
10055*9ccd446eSAtari911### Professional Theme Shadow Fix
10056*9ccd446eSAtari911
10057*9ccd446eSAtari911**Before**: Section headers had colored glow
10058*9ccd446eSAtari911```php
10059*9ccd446eSAtari911box-shadow: 0 0 8px #3498db; // Blue glow - wrong!
10060*9ccd446eSAtari911```
10061*9ccd446eSAtari911
10062*9ccd446eSAtari911**After**: Section headers have subtle shadow
10063*9ccd446eSAtari911```php
10064*9ccd446eSAtari911$headerShadow = ($theme === 'professional') ?
10065*9ccd446eSAtari911    '0 2px 4px rgba(0, 0, 0, 0.15)' :  // Shadow for professional
10066*9ccd446eSAtari911    '0 0 8px ' . $accentColor;          // Glow for others
10067*9ccd446eSAtari911```
10068*9ccd446eSAtari911
10069*9ccd446eSAtari911**Result**:
10070*9ccd446eSAtari911- **Matrix/Purple/Pink**: Colored glow on headers ✓
10071*9ccd446eSAtari911- **Professional**: Clean grey shadow (no glow) ✓
10072*9ccd446eSAtari911
10073*9ccd446eSAtari911### All Four Themes:
10074*9ccd446eSAtari911
10075*9ccd446eSAtari911**�� Matrix Edition**:
10076*9ccd446eSAtari911- Dark green (#00cc07)
10077*9ccd446eSAtari911- Neon glow effects
10078*9ccd446eSAtari911- Hacker aesthetic
10079*9ccd446eSAtari911
10080*9ccd446eSAtari911**�� Purple Dream**:
10081*9ccd446eSAtari911- Elegant purple (#9b59b6)
10082*9ccd446eSAtari911- Violet glow effects
10083*9ccd446eSAtari911- Royal aesthetic
10084*9ccd446eSAtari911
10085*9ccd446eSAtari911**�� Professional Blue**:
10086*9ccd446eSAtari911- Clean grey/blue (#4a90e2)
10087*9ccd446eSAtari911- Subtle shadows (NO glow)
10088*9ccd446eSAtari911- Corporate aesthetic
10089*9ccd446eSAtari911
10090*9ccd446eSAtari911**�� Pink Bling** (NEW!):
10091*9ccd446eSAtari911- Hot pink (#ff1493)
10092*9ccd446eSAtari911- MAXIMUM sparkle & glow
10093*9ccd446eSAtari911- Glamorous aesthetic ✨��
10094*9ccd446eSAtari911
10095*9ccd446eSAtari911### Technical Implementation
10096*9ccd446eSAtari911
10097*9ccd446eSAtari911**Theme Added To**:
10098*9ccd446eSAtari911- `getSidebarThemeStyles()` - color definitions
10099*9ccd446eSAtari911- `getSidebarTheme()` - validation
10100*9ccd446eSAtari911- `saveSidebarTheme()` - admin save
10101*9ccd446eSAtari911- Admin panel - UI with preview
10102*9ccd446eSAtari911- All shadow/glow calculations
10103*9ccd446eSAtari911- JavaScript theme colors
10104*9ccd446eSAtari911- Clicked day panel colors
10105*9ccd446eSAtari911
10106*9ccd446eSAtari911**Perfect for users who want FABULOUS pink calendars!** ��✨
10107*9ccd446eSAtari911
10108*9ccd446eSAtari911## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY
10109*9ccd446eSAtari911
10110*9ccd446eSAtari911### �� Text Glow Refinement
10111*9ccd446eSAtari911- **Changed:** Reduced text glow from 3px to 2px (less intense)
10112*9ccd446eSAtari911- **Fixed:** Clicked day panel now has same text glow as sections
10113*9ccd446eSAtari911
10114*9ccd446eSAtari911### Text Glow Reduction
10115*9ccd446eSAtari911
10116*9ccd446eSAtari911**Before**: Text glow was too strong (3px)
10117*9ccd446eSAtari911```php
10118*9ccd446eSAtari911// Sections:
10119*9ccd446eSAtari911text-shadow: 0 0 3px #00cc07; // Too bright!
10120*9ccd446eSAtari911
10121*9ccd446eSAtari911// Clicked day panel:
10122*9ccd446eSAtari911text-shadow: 0 0 3px #00cc07; // Too bright!
10123*9ccd446eSAtari911```
10124*9ccd446eSAtari911
10125*9ccd446eSAtari911**After**: Subtler text glow (2px)
10126*9ccd446eSAtari911```php
10127*9ccd446eSAtari911// Sections:
10128*9ccd446eSAtari911text-shadow: 0 0 2px #00cc07; // Just right ✓
10129*9ccd446eSAtari911
10130*9ccd446eSAtari911// Clicked day panel:
10131*9ccd446eSAtari911text-shadow: 0 0 2px #00cc07; // Just right ✓
10132*9ccd446eSAtari911```
10133*9ccd446eSAtari911
10134*9ccd446eSAtari911**Visual Impact**:
10135*9ccd446eSAtari911- **Matrix**: Softer green glow, easier to read
10136*9ccd446eSAtari911- **Purple**: Softer purple glow, more elegant
10137*9ccd446eSAtari911- **Professional**: Still no glow (clean)
10138*9ccd446eSAtari911
10139*9ccd446eSAtari911### Consistency Fix
10140*9ccd446eSAtari911
10141*9ccd446eSAtari911**Before**: Sections had glow, clicked day panel had NO glow
10142*9ccd446eSAtari911
10143*9ccd446eSAtari911**After**: Both sections AND clicked day panel have matching subtle glow
10144*9ccd446eSAtari911
10145*9ccd446eSAtari911**Where Glow Appears**:
10146*9ccd446eSAtari911- ✅ Today section event text
10147*9ccd446eSAtari911- ✅ Tomorrow section event text
10148*9ccd446eSAtari911- ✅ Important section event text
10149*9ccd446eSAtari911- ✅ **Clicked day panel event text** ← NOW CONSISTENT!
10150*9ccd446eSAtari911
10151*9ccd446eSAtari911**Result**:
10152*9ccd446eSAtari911- Glow is less intense and easier on eyes ✓
10153*9ccd446eSAtari911- All event text has consistent styling ✓
10154*9ccd446eSAtari911- Matrix/Purple themes more refined ✓
10155*9ccd446eSAtari911
10156*9ccd446eSAtari911### Technical Details
10157*9ccd446eSAtari911
10158*9ccd446eSAtari911**PHP (Sections)**:
10159*9ccd446eSAtari911```php
10160*9ccd446eSAtari911$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';';
10161*9ccd446eSAtari911```
10162*9ccd446eSAtari911
10163*9ccd446eSAtari911**JavaScript (Clicked Day Panel)**:
10164*9ccd446eSAtari911```javascript
10165*9ccd446eSAtari911themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple
10166*9ccd446eSAtari911eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'";
10167*9ccd446eSAtari911```
10168*9ccd446eSAtari911
10169*9ccd446eSAtari911**Perfect consistency and subtle elegance!** ✨
10170*9ccd446eSAtari911
10171*9ccd446eSAtari911## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY
10172*9ccd446eSAtari911
10173*9ccd446eSAtari911### ✨ Important Events Enhancement
10174*9ccd446eSAtari911- **Changed:** Important events now show from next 2 weeks (not just current week)
10175*9ccd446eSAtari911- **Fixed:** Important events on Sunday after current week now visible
10176*9ccd446eSAtari911- **Changed:** Events loaded 2 weeks into future for Important section
10177*9ccd446eSAtari911
10178*9ccd446eSAtari911### �� Background Cleanup
10179*9ccd446eSAtari911- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections
10180*9ccd446eSAtari911- **Removed:** Grey backgrounds from individual events
10181*9ccd446eSAtari911- **Result:** Clean transparent backgrounds, original dark Matrix look restored
10182*9ccd446eSAtari911
10183*9ccd446eSAtari911### Important Events - Future Coverage
10184*9ccd446eSAtari911
10185*9ccd446eSAtari911**Before**: Only showed Important events from current week
10186*9ccd446eSAtari911```php
10187*9ccd446eSAtari911if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
10188*9ccd446eSAtari911    $importantEvents[] = $event;
10189*9ccd446eSAtari911}
10190*9ccd446eSAtari911```
10191*9ccd446eSAtari911
10192*9ccd446eSAtari911**After**: Shows Important events from today through next 2 weeks
10193*9ccd446eSAtari911```php
10194*9ccd446eSAtari911// Load events 2 weeks out
10195*9ccd446eSAtari911$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days'));
10196*9ccd446eSAtari911
10197*9ccd446eSAtari911// Show all important events from today forward
10198*9ccd446eSAtari911if ($isImportant && $dateKey >= $todayStr) {
10199*9ccd446eSAtari911    $importantEvents[] = $event;
10200*9ccd446eSAtari911}
10201*9ccd446eSAtari911```
10202*9ccd446eSAtari911
10203*9ccd446eSAtari911**Example**:
10204*9ccd446eSAtari911- Today: Saturday Feb 7
10205*9ccd446eSAtari911- Current week: Sun Feb 1 → Sat Feb 7
10206*9ccd446eSAtari911- Important events shown: Feb 7 → Feb 21 (today + 14 days)
10207*9ccd446eSAtari911
10208*9ccd446eSAtari911**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓
10209*9ccd446eSAtari911
10210*9ccd446eSAtari911### Background Removal
10211*9ccd446eSAtari911
10212*9ccd446eSAtari911**Before**: Light grey/white backgrounds added
10213*9ccd446eSAtari911```php
10214*9ccd446eSAtari911// Section background:
10215*9ccd446eSAtari911$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay
10216*9ccd446eSAtari911
10217*9ccd446eSAtari911// Event background:
10218*9ccd446eSAtari911$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay
10219*9ccd446eSAtari911```
10220*9ccd446eSAtari911
10221*9ccd446eSAtari911**After**: No backgrounds (transparent)
10222*9ccd446eSAtari911```php
10223*9ccd446eSAtari911// Section: No background property
10224*9ccd446eSAtari911<div style="padding:4px 0;">
10225*9ccd446eSAtari911
10226*9ccd446eSAtari911// Event: No background property
10227*9ccd446eSAtari911<div style="padding:4px 6px; ...">
10228*9ccd446eSAtari911```
10229*9ccd446eSAtari911
10230*9ccd446eSAtari911**Result**:
10231*9ccd446eSAtari911- Clean, dark Matrix aesthetic restored ✓
10232*9ccd446eSAtari911- Purple theme darker and more elegant ✓
10233*9ccd446eSAtari911- Professional theme still has its light grey sidebar bg ✓
10234*9ccd446eSAtari911- Events stand out with just color bars and borders ✓
10235*9ccd446eSAtari911
10236*9ccd446eSAtari911### What Changed:
10237*9ccd446eSAtari911
10238*9ccd446eSAtari911**Sections (Today/Tomorrow/Important)**:
10239*9ccd446eSAtari911- ❌ No more grey overlay
10240*9ccd446eSAtari911- ✓ Transparent background
10241*9ccd446eSAtari911- ✓ Colored borders & glows remain
10242*9ccd446eSAtari911
10243*9ccd446eSAtari911**Individual Events**:
10244*9ccd446eSAtari911- ❌ No more grey overlay
10245*9ccd446eSAtari911- ✓ Transparent background
10246*9ccd446eSAtari911- ✓ Colored bars & borders remain
10247*9ccd446eSAtari911
10248*9ccd446eSAtari911**Perfect! Back to the original clean dark look with future Important events!** ��
10249*9ccd446eSAtari911
10250*9ccd446eSAtari911## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR
10251*9ccd446eSAtari911
10252*9ccd446eSAtari911### �� Final Theme Polish
10253*9ccd446eSAtari911- **Fixed:** Today/Tomorrow/Important section shadows now match theme
10254*9ccd446eSAtari911- **Fixed:** Event description text color now uses theme dim color
10255*9ccd446eSAtari911
10256*9ccd446eSAtari911### Section Shadow Fix
10257*9ccd446eSAtari911
10258*9ccd446eSAtari911**Problem**: Sections always had green glow regardless of theme
10259*9ccd446eSAtari911
10260*9ccd446eSAtari911**Before**:
10261*9ccd446eSAtari911```php
10262*9ccd446eSAtari911// Hardcoded green:
10263*9ccd446eSAtari911box-shadow: 0 0 5px rgba(0, 204, 7, 0.2);
10264*9ccd446eSAtari911```
10265*9ccd446eSAtari911
10266*9ccd446eSAtari911**After**:
10267*9ccd446eSAtari911```php
10268*9ccd446eSAtari911// Theme-aware:
10269*9ccd446eSAtari911$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' :
10270*9ccd446eSAtari911                ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' :
10271*9ccd446eSAtari911                '0 2px 4px rgba(0, 0, 0, 0.1)');
10272*9ccd446eSAtari911```
10273*9ccd446eSAtari911
10274*9ccd446eSAtari911**Result**:
10275*9ccd446eSAtari911- **Matrix**: Green glow around sections ✓
10276*9ccd446eSAtari911- **Purple**: Purple glow around sections ✓
10277*9ccd446eSAtari911- **Professional**: Subtle grey shadow (no glow) ✓
10278*9ccd446eSAtari911
10279*9ccd446eSAtari911### Description Color Fix
10280*9ccd446eSAtari911
10281*9ccd446eSAtari911**Problem**: Description text always green in clicked day panel
10282*9ccd446eSAtari911
10283*9ccd446eSAtari911**Before**:
10284*9ccd446eSAtari911```javascript
10285*9ccd446eSAtari911color: #00aa00; // Always green
10286*9ccd446eSAtari911```
10287*9ccd446eSAtari911
10288*9ccd446eSAtari911**After**:
10289*9ccd446eSAtari911```javascript
10290*9ccd446eSAtari911color: themeColors.text_dim; // Theme dim color
10291*9ccd446eSAtari911```
10292*9ccd446eSAtari911
10293*9ccd446eSAtari911**Result**:
10294*9ccd446eSAtari911- **Matrix**: Dim green (#00aa00) ✓
10295*9ccd446eSAtari911- **Purple**: Dim purple (#8e7ab8) ✓
10296*9ccd446eSAtari911- **Professional**: Grey (#7f8c8d) ✓
10297*9ccd446eSAtari911
10298*9ccd446eSAtari911### Now 100% Theme Consistent
10299*9ccd446eSAtari911
10300*9ccd446eSAtari911Every single visual element respects theme:
10301*9ccd446eSAtari911- ✅ Sidebar background & border
10302*9ccd446eSAtari911- ✅ Header colors & shadows
10303*9ccd446eSAtari911- ✅ Week grid & cells
10304*9ccd446eSAtari911- ✅ Add Event button
10305*9ccd446eSAtari911- ✅ Section borders & **shadows** ← Fixed!
10306*9ccd446eSAtari911- ✅ Event titles & times
10307*9ccd446eSAtari911- ✅ Event **descriptions** ← Fixed!
10308*9ccd446eSAtari911- ✅ Clicked day panel
10309*9ccd446eSAtari911- ✅ Event bars & glows
10310*9ccd446eSAtari911
10311*9ccd446eSAtari911**Absolute perfection across all three themes!** ��✨
10312*9ccd446eSAtari911
10313*9ccd446eSAtari911## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND
10314*9ccd446eSAtari911
10315*9ccd446eSAtari911### �� Theme Improvements
10316*9ccd446eSAtari911- **Fixed:** Clicked day panel now uses correct theme colors
10317*9ccd446eSAtari911- **Changed:** Professional Blue background now light grey (not white)
10318*9ccd446eSAtari911- **Added:** Theme colors passed to JavaScript for dynamic rendering
10319*9ccd446eSAtari911
10320*9ccd446eSAtari911### Clicked Day Panel Theming
10321*9ccd446eSAtari911
10322*9ccd446eSAtari911**Before**: Always blue regardless of theme
10323*9ccd446eSAtari911```javascript
10324*9ccd446eSAtari911// Hardcoded blue:
10325*9ccd446eSAtari911color:#00cc07;  // Always green
10326*9ccd446eSAtari911background:#3498db;  // Always blue
10327*9ccd446eSAtari911```
10328*9ccd446eSAtari911
10329*9ccd446eSAtari911**After**: Theme-aware colors
10330*9ccd446eSAtari911```php
10331*9ccd446eSAtari911// PHP passes theme to JavaScript:
10332*9ccd446eSAtari911window.themeColors_XXX = {
10333*9ccd446eSAtari911    text_primary: '#00cc07' or '#b19cd9' or '#2c3e50',
10334*9ccd446eSAtari911    text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2',
10335*9ccd446eSAtari911    text_shadow: '0 0 3px ...' or '',
10336*9ccd446eSAtari911    event_bg: 'rgba(...)',
10337*9ccd446eSAtari911    border_color: 'rgba(...)',
10338*9ccd446eSAtari911    bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)'
10339*9ccd446eSAtari911};
10340*9ccd446eSAtari911
10341*9ccd446eSAtari911// JavaScript uses theme colors:
10342*9ccd446eSAtari911color: themeColors.text_primary;
10343*9ccd446eSAtari911background: themeColors.event_bg;
10344*9ccd446eSAtari911```
10345*9ccd446eSAtari911
10346*9ccd446eSAtari911**Result**:
10347*9ccd446eSAtari911- Matrix: Green panel with green glow ✓
10348*9ccd446eSAtari911- Purple: Purple panel with purple glow ✓
10349*9ccd446eSAtari911- Professional: Blue panel, no glow, clean ✓
10350*9ccd446eSAtari911
10351*9ccd446eSAtari911### Professional Theme Background Change
10352*9ccd446eSAtari911
10353*9ccd446eSAtari911**Before**: Almost white (#f5f7fa, #ffffff)
10354*9ccd446eSAtari911```php
10355*9ccd446eSAtari911'bg' => '#f5f7fa',           // Very light
10356*9ccd446eSAtari911'cell_bg' => '#ffffff',      // Pure white
10357*9ccd446eSAtari911```
10358*9ccd446eSAtari911
10359*9ccd446eSAtari911**After**: Light grey tones
10360*9ccd446eSAtari911```php
10361*9ccd446eSAtari911'bg' => '#e8ecf1',           // Soft grey-blue
10362*9ccd446eSAtari911'cell_bg' => '#f5f7fa',      // Light grey
10363*9ccd446eSAtari911'grid_bg' => '#d5dbe3',      // Medium grey
10364*9ccd446eSAtari911'cell_today_bg' => '#dce8f7' // Highlighted grey-blue
10365*9ccd446eSAtari911```
10366*9ccd446eSAtari911
10367*9ccd446eSAtari911**Visual Impact**:
10368*9ccd446eSAtari911- Sidebar: Light grey-blue background (#e8ecf1)
10369*9ccd446eSAtari911- Week cells: Lighter grey (#f5f7fa)
10370*9ccd446eSAtari911- Today cell: Highlighted blue-grey (#dce8f7)
10371*9ccd446eSAtari911- More depth and contrast ✓
10372*9ccd446eSAtari911- Professional appearance ✓
10373*9ccd446eSAtari911
10374*9ccd446eSAtari911### All Theme Elements Now Consistent
10375*9ccd446eSAtari911
10376*9ccd446eSAtari911**Matrix (Green)**:
10377*9ccd446eSAtari911- Sidebar: Dark (#242424)
10378*9ccd446eSAtari911- Clicked panel: Dark with green
10379*9ccd446eSAtari911- Text: Green with glow
10380*9ccd446eSAtari911
10381*9ccd446eSAtari911**Purple Dream**:
10382*9ccd446eSAtari911- Sidebar: Dark purple (#2a2030)
10383*9ccd446eSAtari911- Clicked panel: Dark with purple
10384*9ccd446eSAtari911- Text: Purple with glow
10385*9ccd446eSAtari911
10386*9ccd446eSAtari911**Professional Blue**:
10387*9ccd446eSAtari911- Sidebar: Light grey (#e8ecf1)
10388*9ccd446eSAtari911- Clicked panel: Light with blue
10389*9ccd446eSAtari911- Text: Dark grey, no glow
10390*9ccd446eSAtari911
10391*9ccd446eSAtari911**Perfect theme consistency everywhere!** ��
10392*9ccd446eSAtari911
10393*9ccd446eSAtari911## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING
10394*9ccd446eSAtari911
10395*9ccd446eSAtari911### �� Critical Fixes
10396*9ccd446eSAtari911- **Fixed:** Tomorrow events not loaded when outside current week
10397*9ccd446eSAtari911- **Fixed:** `&amp;` showing instead of `&` (double HTML encoding)
10398*9ccd446eSAtari911
10399*9ccd446eSAtari911### Issue 1: Tomorrow Not Loading
10400*9ccd446eSAtari911
10401*9ccd446eSAtari911**Problem**: Sidebar only loaded events for current week
10402*9ccd446eSAtari911- Today (Saturday): Week ends today
10403*9ccd446eSAtari911- Tomorrow (Sunday): Start of NEXT week
10404*9ccd446eSAtari911- Tomorrow events never loaded from data files!
10405*9ccd446eSAtari911
10406*9ccd446eSAtari911**Before**:
10407*9ccd446eSAtari911```php
10408*9ccd446eSAtari911// Only load current week
10409*9ccd446eSAtari911$end = new DateTime($weekEnd);
10410*9ccd446eSAtari911$end->modify('+1 day');
10411*9ccd446eSAtari911$period = new DatePeriod($start, $interval, $end);
10412*9ccd446eSAtari911// If tomorrow > weekEnd, it's not in period!
10413*9ccd446eSAtari911```
10414*9ccd446eSAtari911
10415*9ccd446eSAtari911**After**:
10416*9ccd446eSAtari911```php
10417*9ccd446eSAtari911// Check if tomorrow is outside week
10418*9ccd446eSAtari911$tomorrowDate = date('Y-m-d', strtotime('+1 day'));
10419*9ccd446eSAtari911if ($tomorrowDate > $weekEnd) {
10420*9ccd446eSAtari911    // Extend to include tomorrow
10421*9ccd446eSAtari911    $end = new DateTime($tomorrowDate);
10422*9ccd446eSAtari911}
10423*9ccd446eSAtari911$end->modify('+1 day');
10424*9ccd446eSAtari911$period = new DatePeriod($start, $interval, $end);
10425*9ccd446eSAtari911```
10426*9ccd446eSAtari911
10427*9ccd446eSAtari911**Result**: Tomorrow events now loaded even at week boundary! ✓
10428*9ccd446eSAtari911
10429*9ccd446eSAtari911### Issue 2: Double HTML Encoding
10430*9ccd446eSAtari911
10431*9ccd446eSAtari911**Problem**: `&` characters showing as `&amp;`
10432*9ccd446eSAtari911
10433*9ccd446eSAtari911**Cause**: Double encoding on line 2625 and 2681
10434*9ccd446eSAtari911```php
10435*9ccd446eSAtari911// Line 2625:
10436*9ccd446eSAtari911$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee &amp; Tea"
10437*9ccd446eSAtari911
10438*9ccd446eSAtari911// Line 2681:
10439*9ccd446eSAtari911$html .= htmlspecialchars($title); // "Coffee &amp; Tea" → "Coffee &amp;amp; Tea" ❌
10440*9ccd446eSAtari911```
10441*9ccd446eSAtari911
10442*9ccd446eSAtari911**Fixed**:
10443*9ccd446eSAtari911```php
10444*9ccd446eSAtari911// Line 2625:
10445*9ccd446eSAtari911$title = htmlspecialchars($event['title']); // Encode once
10446*9ccd446eSAtari911
10447*9ccd446eSAtari911// Line 2681:
10448*9ccd446eSAtari911$html .= $title; // Use already-encoded value ✓
10449*9ccd446eSAtari911```
10450*9ccd446eSAtari911
10451*9ccd446eSAtari911**Result**: `&` displays correctly! ✓
10452*9ccd446eSAtari911
10453*9ccd446eSAtari911### Both Fixes Critical
10454*9ccd446eSAtari911
10455*9ccd446eSAtari911These were **two separate bugs**:
10456*9ccd446eSAtari9111. **Loading bug**: Tomorrow events not read from files
10457*9ccd446eSAtari9112. **Display bug**: Double-encoding text
10458*9ccd446eSAtari911
10459*9ccd446eSAtari911Both needed fixing for Tomorrow section to work properly!
10460*9ccd446eSAtari911
10461*9ccd446eSAtari911## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY
10462*9ccd446eSAtari911
10463*9ccd446eSAtari911### �� Critical Fix
10464*9ccd446eSAtari911- **Fixed:** Tomorrow section missing when tomorrow is outside current week
10465*9ccd446eSAtari911- **Fixed:** Today section now always shows regardless of week boundaries
10466*9ccd446eSAtari911- **Changed:** Today/Tomorrow processed BEFORE week boundary checks
10467*9ccd446eSAtari911
10468*9ccd446eSAtari911### The Problem
10469*9ccd446eSAtari911
10470*9ccd446eSAtari911**Scenario**: Today is Saturday (last day of week)
10471*9ccd446eSAtari911- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today
10472*9ccd446eSAtari911- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week**
10473*9ccd446eSAtari911
10474*9ccd446eSAtari911**BROKEN Logic** (v4.2.2):
10475*9ccd446eSAtari911```php
10476*9ccd446eSAtari911foreach ($events as $dateKey => $dayEvents) {
10477*9ccd446eSAtari911    if ($dateKey < $weekStart) continue; // Skip old events
10478*9ccd446eSAtari911
10479*9ccd446eSAtari911    // ...week processing...
10480*9ccd446eSAtari911
10481*9ccd446eSAtari911    if ($dateKey === $tomorrowStr) {  // ← Never reached!
10482*9ccd446eSAtari911        $tomorrowEvents[] = $event;   //   Tomorrow > weekEnd
10483*9ccd446eSAtari911    }
10484*9ccd446eSAtari911}
10485*9ccd446eSAtari911```
10486*9ccd446eSAtari911
10487*9ccd446eSAtari911**Result**: Tomorrow events never added because loop skipped them! ❌
10488*9ccd446eSAtari911
10489*9ccd446eSAtari911### The Fix
10490*9ccd446eSAtari911
10491*9ccd446eSAtari911**Process Today/Tomorrow FIRST**:
10492*9ccd446eSAtari911```php
10493*9ccd446eSAtari911foreach ($events as $dateKey => $dayEvents) {
10494*9ccd446eSAtari911    $eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
10495*9ccd446eSAtari911
10496*9ccd446eSAtari911    foreach ($eventsWithConflicts as $event) {
10497*9ccd446eSAtari911        // ALWAYS process Today and Tomorrow first!
10498*9ccd446eSAtari911        if ($dateKey === $todayStr) {
10499*9ccd446eSAtari911            $todayEvents[] = $event; // ✓ Always shows
10500*9ccd446eSAtari911        }
10501*9ccd446eSAtari911        if ($dateKey === $tomorrowStr) {
10502*9ccd446eSAtari911            $tomorrowEvents[] = $event; // ✓ Always shows
10503*9ccd446eSAtari911        }
10504*9ccd446eSAtari911
10505*9ccd446eSAtari911        // THEN check week boundaries for grid
10506*9ccd446eSAtari911        if ($dateKey >= $weekStart && $dateKey <= $weekEnd) {
10507*9ccd446eSAtari911            $weekEvents[$dateKey][] = $event;
10508*9ccd446eSAtari911        }
10509*9ccd446eSAtari911
10510*9ccd446eSAtari911        // Important events still week-only
10511*9ccd446eSAtari911        if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
10512*9ccd446eSAtari911            $importantEvents[] = $event;
10513*9ccd446eSAtari911        }
10514*9ccd446eSAtari911    }
10515*9ccd446eSAtari911}
10516*9ccd446eSAtari911```
10517*9ccd446eSAtari911
10518*9ccd446eSAtari911### What Changed
10519*9ccd446eSAtari911
10520*9ccd446eSAtari911**Before**:
10521*9ccd446eSAtari9111. Skip events < weekStart ❌
10522*9ccd446eSAtari9112. Process week grid
10523*9ccd446eSAtari9113. Try to add Today/Tomorrow ← **Failed if outside week**
10524*9ccd446eSAtari9114. Add Important events
10525*9ccd446eSAtari911
10526*9ccd446eSAtari911**After**:
10527*9ccd446eSAtari9111. **Always add Today events** ✓
10528*9ccd446eSAtari9112. **Always add Tomorrow events** ✓
10529*9ccd446eSAtari9113. Add to week grid if in range
10530*9ccd446eSAtari9114. Add Important events if in range
10531*9ccd446eSAtari911
10532*9ccd446eSAtari911**Result**:
10533*9ccd446eSAtari911- Today section: ✓ Always shows
10534*9ccd446eSAtari911- Tomorrow section: ✓ Always shows (even at week boundary!)
10535*9ccd446eSAtari911- Week grid: ✓ Only current week
10536*9ccd446eSAtari911- Important: ✓ Only current week
10537*9ccd446eSAtari911
10538*9ccd446eSAtari911### Edge Cases Fixed
10539*9ccd446eSAtari911
10540*9ccd446eSAtari911**Saturday → Sunday transition**:
10541*9ccd446eSAtari911- Today (Sat): Shows in Today section ✓
10542*9ccd446eSAtari911- Tomorrow (Sun): Shows in Tomorrow section ✓
10543*9ccd446eSAtari911- Week grid: Only shows Sat (today) ✓
10544*9ccd446eSAtari911
10545*9ccd446eSAtari911**Sunday → Monday transition**:
10546*9ccd446eSAtari911- Today (Sun): Shows in Today section ✓
10547*9ccd446eSAtari911- Tomorrow (Mon): Shows in Tomorrow section ✓
10548*9ccd446eSAtari911- Week grid: Shows both Sun and Mon ✓
10549*9ccd446eSAtari911
10550*9ccd446eSAtari911**Perfect! Tomorrow section now always works!** ��
10551*9ccd446eSAtari911
10552*9ccd446eSAtari911## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY!
10553*9ccd446eSAtari911
10554*9ccd446eSAtari911### �� Corrected Week Options
10555*9ccd446eSAtari911- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!)
10556*9ccd446eSAtari911- **Changed:** Default is **Sunday** (US/Canada standard)
10557*9ccd446eSAtari911- **Fixed:** Day names array for Sunday start: S M T W T F S
10558*9ccd446eSAtari911
10559*9ccd446eSAtari911### �� Correct Week Start Options
10560*9ccd446eSAtari911
10561*9ccd446eSAtari911**Sunday Start** (Default):
10562*9ccd446eSAtari911- Grid shows: **S M T W T F S**
10563*9ccd446eSAtari911- Week: Sunday → Saturday
10564*9ccd446eSAtari911- US/Canada standard
10565*9ccd446eSAtari911- Most common worldwide
10566*9ccd446eSAtari911
10567*9ccd446eSAtari911**Monday Start**:
10568*9ccd446eSAtari911- Grid shows: **M T W T F S S**
10569*9ccd446eSAtari911- Week: Monday → Sunday
10570*9ccd446eSAtari911- ISO 8601 standard
10571*9ccd446eSAtari911- Common in Europe
10572*9ccd446eSAtari911
10573*9ccd446eSAtari911### Technical Changes
10574*9ccd446eSAtari911
10575*9ccd446eSAtari911**All References Updated**:
10576*9ccd446eSAtari911```php
10577*9ccd446eSAtari911// Changed from 'saturday' to 'sunday' in:
10578*9ccd446eSAtari911- Admin validation
10579*9ccd446eSAtari911- Week calculation logic
10580*9ccd446eSAtari911- Day names array
10581*9ccd446eSAtari911- Default value
10582*9ccd446eSAtari911- Comments
10583*9ccd446eSAtari911```
10584*9ccd446eSAtari911
10585*9ccd446eSAtari911**Sunday Calculation** (when today is Saturday):
10586*9ccd446eSAtari911```php
10587*9ccd446eSAtari911$today = date('w'); // 0=Sun, 6=Sat
10588*9ccd446eSAtari911if ($today == 0) {
10589*9ccd446eSAtari911    $weekStart = date('Y-m-d'); // Today!
10590*9ccd446eSAtari911} else {
10591*9ccd446eSAtari911    // Go back $today days to last Sunday
10592*9ccd446eSAtari911    $weekStart = date('Y-m-d', strtotime('-' . $today . ' days'));
10593*9ccd446eSAtari911}
10594*9ccd446eSAtari911```
10595*9ccd446eSAtari911
10596*9ccd446eSAtari911**Examples**:
10597*9ccd446eSAtari911- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7
10598*9ccd446eSAtari911- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14
10599*9ccd446eSAtari911
10600*9ccd446eSAtari911**Sorry for the confusion - it's Sunday not Saturday!** ��
10601*9ccd446eSAtari911
10602*9ccd446eSAtari911## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY
10603*9ccd446eSAtari911
10604*9ccd446eSAtari911### �� Critical Fix
10605*9ccd446eSAtari911- **Fixed:** Week calculation broken when today is Saturday
10606*9ccd446eSAtari911- **Fixed:** Events not showing in Today/Important sections
10607*9ccd446eSAtari911- **Fixed:** Week grid event bars missing
10608*9ccd446eSAtari911- **Changed:** Default week start is Saturday (matches main calendar)
10609*9ccd446eSAtari911
10610*9ccd446eSAtari911### Technical Details
10611*9ccd446eSAtari911
10612*9ccd446eSAtari911**The Bug**:
10613*9ccd446eSAtari911```php
10614*9ccd446eSAtari911// BROKEN (v4.2.0):
10615*9ccd446eSAtari911$weekStart = date('Y-m-d', strtotime('saturday this week'));
10616*9ccd446eSAtari911// When TODAY is Saturday, this is ambiguous and fails!
10617*9ccd446eSAtari911
10618*9ccd446eSAtari911// FIXED (v4.2.1):
10619*9ccd446eSAtari911$today = date('w'); // 0 (Sun) to 6 (Sat)
10620*9ccd446eSAtari911if ($today == 6) {
10621*9ccd446eSAtari911    $weekStart = date('Y-m-d'); // Today!
10622*9ccd446eSAtari911} else {
10623*9ccd446eSAtari911    $daysBack = ($today == 0) ? 1 : ($today + 1);
10624*9ccd446eSAtari911    $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days'));
10625*9ccd446eSAtari911}
10626*9ccd446eSAtari911$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days'));
10627*9ccd446eSAtari911```
10628*9ccd446eSAtari911
10629*9ccd446eSAtari911**Why It Failed**:
10630*9ccd446eSAtari911- `strtotime('saturday this week')` is ambiguous when run ON a Saturday
10631*9ccd446eSAtari911- PHP may interpret it as "next Saturday" or fail
10632*9ccd446eSAtari911- Result: Week range was wrong, events filtered out
10633*9ccd446eSAtari911
10634*9ccd446eSAtari911**The Fix**:
10635*9ccd446eSAtari911- Explicit calculation using day-of-week math
10636*9ccd446eSAtari911- Saturday (day 6): weekStart = today
10637*9ccd446eSAtari911- Sunday (day 0): weekStart = yesterday
10638*9ccd446eSAtari911- Monday-Friday: calculate days back to last Saturday
10639*9ccd446eSAtari911
10640*9ccd446eSAtari911**Result**: Works reliably every day of the week!
10641*9ccd446eSAtari911
10642*9ccd446eSAtari911**Default Changed**: Saturday start (was Monday in 4.2.0)
10643*9ccd446eSAtari911- Matches main calendar behavior
10644*9ccd446eSAtari911- Users can still switch to Monday in settings
10645*9ccd446eSAtari911
10646*9ccd446eSAtari911## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR
10647*9ccd446eSAtari911
10648*9ccd446eSAtari911### ✨ New Feature
10649*9ccd446eSAtari911- **Added:** Week start day selector in Themes tab
10650*9ccd446eSAtari911- **Added:** Choose between Monday (ISO standard) or Saturday week start
10651*9ccd446eSAtari911- **Added:** Week grid and all events now respect the selected start day
10652*9ccd446eSAtari911- **Changed:** Themes tab renamed to "Sidebar Widget Settings"
10653*9ccd446eSAtari911
10654*9ccd446eSAtari911### �� Week Start Options
10655*9ccd446eSAtari911
10656*9ccd446eSAtari911**Monday Start** (Default):
10657*9ccd446eSAtari911- Grid shows: M T W T F S S
10658*9ccd446eSAtari911- Week runs: Monday → Sunday
10659*9ccd446eSAtari911- ISO 8601 standard
10660*9ccd446eSAtari911- Common in Europe, most of world
10661*9ccd446eSAtari911
10662*9ccd446eSAtari911**Saturday Start**:
10663*9ccd446eSAtari911- Grid shows: S S M T W T F
10664*9ccd446eSAtari911- Week runs: Saturday → Friday
10665*9ccd446eSAtari911- Common in Middle East
10666*9ccd446eSAtari911- Sabbath-observant communities
10667*9ccd446eSAtari911
10668*9ccd446eSAtari911### Technical Details
10669*9ccd446eSAtari911
10670*9ccd446eSAtari911**Configuration**:
10671*9ccd446eSAtari911```php
10672*9ccd446eSAtari911// Saved in: data/meta/calendar_week_start.txt
10673*9ccd446eSAtari911// Values: 'monday' or 'saturday'
10674*9ccd446eSAtari911
10675*9ccd446eSAtari911// Week calculation:
10676*9ccd446eSAtari911if ($weekStartDay === 'saturday') {
10677*9ccd446eSAtari911    $weekStart = date('Y-m-d', strtotime('saturday this week'));
10678*9ccd446eSAtari911    $weekEnd = date('Y-m-d', strtotime('friday next week'));
10679*9ccd446eSAtari911} else {
10680*9ccd446eSAtari911    $weekStart = date('Y-m-d', strtotime('monday this week'));
10681*9ccd446eSAtari911    $weekEnd = date('Y-m-d', strtotime('sunday this week'));
10682*9ccd446eSAtari911}
10683*9ccd446eSAtari911```
10684*9ccd446eSAtari911
10685*9ccd446eSAtari911**Day Names Array**:
10686*9ccd446eSAtari911```php
10687*9ccd446eSAtari911// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S']
10688*9ccd446eSAtari911// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F']
10689*9ccd446eSAtari911```
10690*9ccd446eSAtari911
10691*9ccd446eSAtari911**What Changes**:
10692*9ccd446eSAtari911- Week grid day letters
10693*9ccd446eSAtari911- Week grid date sequence
10694*9ccd446eSAtari911- Today/Tomorrow/Important event date ranges
10695*9ccd446eSAtari911- Week event grouping
10696*9ccd446eSAtari911
10697*9ccd446eSAtari911**What Stays Same**:
10698*9ccd446eSAtari911- All themes still work
10699*9ccd446eSAtari911- Event data unchanged
10700*9ccd446eSAtari911- Main calendar unaffected
10701*9ccd446eSAtari911
10702*9ccd446eSAtari911### How to Change:
10703*9ccd446eSAtari911
10704*9ccd446eSAtari9111. Admin → Calendar → �� Themes tab
10705*9ccd446eSAtari9112. Under "Week Start Day" section
10706*9ccd446eSAtari9113. Select Monday or Saturday
10707*9ccd446eSAtari9114. Click "Save Settings"
10708*9ccd446eSAtari9115. Refresh sidebar to see changes
10709*9ccd446eSAtari911
10710*9ccd446eSAtari911**Perfect for international users or religious observances!** ��
10711*9ccd446eSAtari911
10712*9ccd446eSAtari911## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS
10713*9ccd446eSAtari911
10714*9ccd446eSAtari911### ��️ Calendar Improvements
10715*9ccd446eSAtari911- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar)
10716*9ccd446eSAtari911- **Changed:** Event section backgrounds much lighter (almost white)
10717*9ccd446eSAtari911- **Changed:** Individual event backgrounds lighter and more readable
10718*9ccd446eSAtari911- **Changed:** Event borders now theme-colored
10719*9ccd446eSAtari911
10720*9ccd446eSAtari911### Technical Details
10721*9ccd446eSAtari911
10722*9ccd446eSAtari911**Week Start Change**:
10723*9ccd446eSAtari911```php
10724*9ccd446eSAtari911// Before:
10725*9ccd446eSAtari911$weekStart = date('Y-m-d', strtotime('monday this week'));
10726*9ccd446eSAtari911$weekEnd = date('Y-m-d', strtotime('sunday this week'));
10727*9ccd446eSAtari911$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
10728*9ccd446eSAtari911
10729*9ccd446eSAtari911// After:
10730*9ccd446eSAtari911$weekStart = date('Y-m-d', strtotime('sunday this week'));
10731*9ccd446eSAtari911$weekEnd = date('Y-m-d', strtotime('saturday this week'));
10732*9ccd446eSAtari911$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
10733*9ccd446eSAtari911```
10734*9ccd446eSAtari911
10735*9ccd446eSAtari911**Background Colors**:
10736*9ccd446eSAtari911```php
10737*9ccd446eSAtari911// Section backgrounds (Today, Tomorrow, Important):
10738*9ccd446eSAtari911Matrix: rgba(255, 255, 255, 0.05)    // Very light overlay
10739*9ccd446eSAtari911Purple: rgba(255, 255, 255, 0.08)    // Slightly lighter
10740*9ccd446eSAtari911Professional: rgba(255, 255, 255, 0.95)  // Almost white!
10741*9ccd446eSAtari911
10742*9ccd446eSAtari911// Individual event backgrounds:
10743*9ccd446eSAtari911Matrix: rgba(255, 255, 255, 0.03)    // Subtle
10744*9ccd446eSAtari911Purple: rgba(255, 255, 255, 0.05)    // Light
10745*9ccd446eSAtari911Professional: rgba(255, 255, 255, 0.5)   // Semi-transparent white
10746*9ccd446eSAtari911```
10747*9ccd446eSAtari911
10748*9ccd446eSAtari911**Event Borders**:
10749*9ccd446eSAtari911```php
10750*9ccd446eSAtari911Matrix: rgba(0, 204, 7, 0.2)         // Green
10751*9ccd446eSAtari911Purple: rgba(155, 89, 182, 0.2)      // Purple
10752*9ccd446eSAtari911Professional: rgba(74, 144, 226, 0.2) // Blue
10753*9ccd446eSAtari911```
10754*9ccd446eSAtari911
10755*9ccd446eSAtari911### Visual Result:
10756*9ccd446eSAtari911
10757*9ccd446eSAtari911**Before**: Dark backgrounds made text hard to read
10758*9ccd446eSAtari911**After**: Light backgrounds make events pop and text very readable
10759*9ccd446eSAtari911
10760*9ccd446eSAtari911**Week Grid**:
10761*9ccd446eSAtari911```
10762*9ccd446eSAtari911Before: [M][T][W][T][F][S][S]
10763*9ccd446eSAtari911After:  [S][M][T][W][T][F][S]  ← Now matches main calendar!
10764*9ccd446eSAtari911```
10765*9ccd446eSAtari911
10766*9ccd446eSAtari911## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS
10767*9ccd446eSAtari911
10768*9ccd446eSAtari911### �� Final Theme Polish
10769*9ccd446eSAtari911- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors
10770*9ccd446eSAtari911- **Fixed:** Event times now use theme bright color
10771*9ccd446eSAtari911- **Fixed:** Event dates use theme dim color
10772*9ccd446eSAtari911- **Fixed:** Task checkboxes use theme bright color
10773*9ccd446eSAtari911- **Fixed:** Event color bars use theme-appropriate shadows
10774*9ccd446eSAtari911- **Fixed:** No text shadows on Professional theme
10775*9ccd446eSAtari911
10776*9ccd446eSAtari911### Technical Details
10777*9ccd446eSAtari911
10778*9ccd446eSAtari911**Event Text Colors**:
10779*9ccd446eSAtari911```php
10780*9ccd446eSAtari911// Matrix:
10781*9ccd446eSAtari911- Title: #00cc07 (green)
10782*9ccd446eSAtari911- Time: #00dd00 (bright green)
10783*9ccd446eSAtari911- Date: #00aa00 (dim green)
10784*9ccd446eSAtari911- Text shadow: 0 0 3px (glow)
10785*9ccd446eSAtari911
10786*9ccd446eSAtari911// Purple:
10787*9ccd446eSAtari911- Title: #b19cd9 (lavender)
10788*9ccd446eSAtari911- Time: #d4a5ff (bright purple)
10789*9ccd446eSAtari911- Date: #8e7ab8 (dim purple)
10790*9ccd446eSAtari911- Text shadow: 0 0 3px (glow)
10791*9ccd446eSAtari911
10792*9ccd446eSAtari911// Professional:
10793*9ccd446eSAtari911- Title: #2c3e50 (dark grey)
10794*9ccd446eSAtari911- Time: #4a90e2 (blue)
10795*9ccd446eSAtari911- Date: #7f8c8d (grey)
10796*9ccd446eSAtari911- Text shadow: none (clean)
10797*9ccd446eSAtari911```
10798*9ccd446eSAtari911
10799*9ccd446eSAtari911**Color Bar Shadows**:
10800*9ccd446eSAtari911```php
10801*9ccd446eSAtari911// Matrix & Purple: Glow effect
10802*9ccd446eSAtari911box-shadow: 0 0 3px [event-color];
10803*9ccd446eSAtari911
10804*9ccd446eSAtari911// Professional: Subtle shadow
10805*9ccd446eSAtari911box-shadow: 0 1px 2px rgba(0,0,0,0.2);
10806*9ccd446eSAtari911```
10807*9ccd446eSAtari911
10808*9ccd446eSAtari911### What's Now Fully Themed:
10809*9ccd446eSAtari911
10810*9ccd446eSAtari911✅ Sidebar background & border
10811*9ccd446eSAtari911✅ Header (clock box) background, border, text
10812*9ccd446eSAtari911✅ Week grid background, borders, cells
10813*9ccd446eSAtari911✅ Week grid day letters & numbers
10814*9ccd446eSAtari911✅ Week grid event bars & "+N more" text
10815*9ccd446eSAtari911✅ Add Event button background & text
10816*9ccd446eSAtari911Today/Tomorrow/Important event titles
10817*9ccd446eSAtari911✅ Event times
10818*9ccd446eSAtari911✅ Event dates (Important section)
10819*9ccd446eSAtari911✅ Task checkboxes
10820*9ccd446eSAtari911✅ Event color bars
10821*9ccd446eSAtari911✅ All text shadows (glow vs none)
10822*9ccd446eSAtari911
10823*9ccd446eSAtari911**Every single element now respects the theme!** ��
10824*9ccd446eSAtari911
10825*9ccd446eSAtari911## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION
10826*9ccd446eSAtari911
10827*9ccd446eSAtari911### �� Theme Improvements
10828*9ccd446eSAtari911- **Fixed:** Week calendar grid now uses theme colors (purple/blue)
10829*9ccd446eSAtari911- **Fixed:** Add Event button now uses theme colors
10830*9ccd446eSAtari911- **Fixed:** Clock box border now matches theme
10831*9ccd446eSAtari911- **Fixed:** All text shadows respect theme (no glow on professional)
10832*9ccd446eSAtari911- **Fixed:** Event bars use theme-appropriate shadows
10833*9ccd446eSAtari911
10834*9ccd446eSAtari911### Technical Details
10835*9ccd446eSAtari911
10836*9ccd446eSAtari911**Week Grid Theming**:
10837*9ccd446eSAtari911```php
10838*9ccd446eSAtari911// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders
10839*9ccd446eSAtari911// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders
10840*9ccd446eSAtari911// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders
10841*9ccd446eSAtari911```
10842*9ccd446eSAtari911
10843*9ccd446eSAtari911**Add Event Button**:
10844*9ccd446eSAtari911```php
10845*9ccd446eSAtari911// Matrix: Dark green (#006400) with bright green text
10846*9ccd446eSAtari911// Purple: Purple (#7d3c98) with lavender text
10847*9ccd446eSAtari911// Professional: Blue (#3498db) with white text
10848*9ccd446eSAtari911```
10849*9ccd446eSAtari911
10850*9ccd446eSAtari911**Text Shadows**:
10851*9ccd446eSAtari911```php
10852*9ccd446eSAtari911// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color)
10853*9ccd446eSAtari911// Professional: No glow (clean look)
10854*9ccd446eSAtari911```
10855*9ccd446eSAtari911
10856*9ccd446eSAtari911**CSS Overrides**:
10857*9ccd446eSAtari911```css
10858*9ccd446eSAtari911/* Purple theme */
10859*9ccd446eSAtari911.sidebar-purple .eventlist-today-header {
10860*9ccd446eSAtari911    border-color: #9b59b6;
10861*9ccd446eSAtari911    box-shadow: 0 0 8px rgba(155, 89, 182, 0.2);
10862*9ccd446eSAtari911}
10863*9ccd446eSAtari911
10864*9ccd446eSAtari911/* Professional theme */
10865*9ccd446eSAtari911.sidebar-professional .eventlist-today-header {
10866*9ccd446eSAtari911    border-color: #4a90e2;
10867*9ccd446eSAtari911    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
10868*9ccd446eSAtari911}
10869*9ccd446eSAtari911```
10870*9ccd446eSAtari911
10871*9ccd446eSAtari911### What Changed Per Theme:
10872*9ccd446eSAtari911
10873*9ccd446eSAtari911**Purple Dream**:
10874*9ccd446eSAtari911- Week grid: Purple borders and dark purple background
10875*9ccd446eSAtari911- Add Event: Purple button with lavender text
10876*9ccd446eSAtari911- Clock box: Purple border with purple glow
10877*9ccd446eSAtari911- Event bars: Purple glow instead of green
10878*9ccd446eSAtari911- All text: Purple/lavender shades
10879*9ccd446eSAtari911
10880*9ccd446eSAtari911**Professional Blue**:
10881*9ccd446eSAtari911- Week grid: Blue borders and light grey background
10882*9ccd446eSAtari911- Add Event: Blue button with white text
10883*9ccd446eSAtari911- Clock box: Blue border with subtle shadow (no glow)
10884*9ccd446eSAtari911- Event bars: Subtle shadows (no glow)
10885*9ccd446eSAtari911- All text: Dark grey and blue shades
10886*9ccd446eSAtari911
10887*9ccd446eSAtari911**Matrix Edition**: Unchanged (still perfect green theme!)
10888*9ccd446eSAtari911
10889*9ccd446eSAtari911## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING
10890*9ccd446eSAtari911
10891*9ccd446eSAtari911### ✨ New Features
10892*9ccd446eSAtari911- **Added:** �� Themes tab in admin for sidebar widget theming
10893*9ccd446eSAtari911- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey)
10894*9ccd446eSAtari911- **Added:** Theme selector with live previews
10895*9ccd446eSAtari911- **Added:** Theme persistence across page loads
10896*9ccd446eSAtari911
10897*9ccd446eSAtari911### �� Available Themes
10898*9ccd446eSAtari911
10899*9ccd446eSAtari911**Matrix Edition** (Default):
10900*9ccd446eSAtari911- Dark background (#242424)
10901*9ccd446eSAtari911- Green accents (#00cc07)
10902*9ccd446eSAtari911- Neon glow effects
10903*9ccd446eSAtari911- Original Matrix styling
10904*9ccd446eSAtari911
10905*9ccd446eSAtari911**Purple Dream**:
10906*9ccd446eSAtari911- Dark purple background (#2a2030)
10907*9ccd446eSAtari911- Purple/violet accents (#9b59b6)
10908*9ccd446eSAtari911- Elegant purple glow
10909*9ccd446eSAtari911- Rich purple color scheme
10910*9ccd446eSAtari911
10911*9ccd446eSAtari911**Professional Blue**:
10912*9ccd446eSAtari911- Light grey background (#f5f7fa)
10913*9ccd446eSAtari911- Blue accents (#4a90e2)
10914*9ccd446eSAtari911- Clean professional look
10915*9ccd446eSAtari911- Subtle shadows instead of glow
10916*9ccd446eSAtari911
10917*9ccd446eSAtari911### �� Bug Fix
10918*9ccd446eSAtari911- **Fixed:** Tooltips now go UP and to the LEFT (was going right)
10919*9ccd446eSAtari911- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px`
10920*9ccd446eSAtari911
10921*9ccd446eSAtari911### Technical Details
10922*9ccd446eSAtari911
10923*9ccd446eSAtari911**Theme System**:
10924*9ccd446eSAtari911```php
10925*9ccd446eSAtari911// Saved in: data/meta/calendar_theme.txt
10926*9ccd446eSAtari911// Applied dynamically in syntax.php
10927*9ccd446eSAtari911$theme = $this->getSidebarTheme();  // 'matrix', 'purple', or 'professional'
10928*9ccd446eSAtari911$styles = $this->getSidebarThemeStyles($theme);
10929*9ccd446eSAtari911
10930*9ccd446eSAtari911// Styles include:
10931*9ccd446eSAtari911- bg, border, shadow
10932*9ccd446eSAtari911- header_bg, header_border, header_shadow
10933*9ccd446eSAtari911- text_primary, text_bright, text_dim
10934*9ccd446eSAtari911- grid_bg, grid_border
10935*9ccd446eSAtari911- cell_bg, cell_today_bg
10936*9ccd446eSAtari911```
10937*9ccd446eSAtari911
10938*9ccd446eSAtari911**Theme Changes**:
10939*9ccd446eSAtari911- Header background gradient
10940*9ccd446eSAtari911- Border colors
10941*9ccd446eSAtari911- Text colors
10942*9ccd446eSAtari911- Shadow/glow effects
10943*9ccd446eSAtari911- Grid colors
10944*9ccd446eSAtari911
10945*9ccd446eSAtari911**How to Change**:
10946*9ccd446eSAtari9111. Admin → Calendar → �� Themes tab
10947*9ccd446eSAtari9112. Select desired theme
10948*9ccd446eSAtari9113. Click "Save Theme"
10949*9ccd446eSAtari9114. Refresh page to see changes
10950*9ccd446eSAtari911
10951*9ccd446eSAtari911### Notes
10952*9ccd446eSAtari911- Themes only affect sidebar widget appearance
10953*9ccd446eSAtari911- Main calendar view unchanged
10954*9ccd446eSAtari911- Theme setting stored in `data/meta/calendar_theme.txt`
10955*9ccd446eSAtari911- Safe to switch themes - no data affected
10956*9ccd446eSAtari911
10957*9ccd446eSAtari911## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING
10958*9ccd446eSAtari911
10959*9ccd446eSAtari911### �� Bug Fixes
10960*9ccd446eSAtari911- **Fixed:** Events now sort chronologically by time (was using string comparison)
10961*9ccd446eSAtari911- **Fixed:** Tooltip positioning using JavaScript like system tooltips
10962*9ccd446eSAtari911- **Fixed:** All-day events appear first, then events in time order
10963*9ccd446eSAtari911
10964*9ccd446eSAtari911### Technical Details
10965*9ccd446eSAtari911
10966*9ccd446eSAtari911**Event Sorting Fix**:
10967*9ccd446eSAtari911```php
10968*9ccd446eSAtari911// BROKEN (v4.0.9):
10969*9ccd446eSAtari911return strcmp($aTime, $bTime);
10970*9ccd446eSAtari911// String comparison: "10:00" < "8:00" because "1" < "8"
10971*9ccd446eSAtari911// Result: 10:00 AM shown BEFORE 8:00 AM ❌
10972*9ccd446eSAtari911
10973*9ccd446eSAtari911// FIXED (v4.1.0):
10974*9ccd446eSAtari911$aMinutes = $this->timeToMinutes($aTime);  // 8:00 = 480
10975*9ccd446eSAtari911$bMinutes = $this->timeToMinutes($bTime);  // 10:00 = 600
10976*9ccd446eSAtari911return $aMinutes - $bMinutes;
10977*9ccd446eSAtari911// Result: 8:00 AM shown BEFORE 10:00 AM ✓
10978*9ccd446eSAtari911```
10979*9ccd446eSAtari911
10980*9ccd446eSAtari911**Example Before Fix**:
10981*9ccd446eSAtari911```
10982*9ccd446eSAtari911�� Weekend Ticket Duty (all-day)
10983*9ccd446eSAtari9118:00 AM START TICKETS
10984*9ccd446eSAtari91110:00 AM Soul Winning    ← Wrong!
10985*9ccd446eSAtari9119:45 AM Coffee           ← Should be before 10:00 AM
10986*9ccd446eSAtari911```
10987*9ccd446eSAtari911
10988*9ccd446eSAtari911**Example After Fix**:
10989*9ccd446eSAtari911```
10990*9ccd446eSAtari911�� Weekend Ticket Duty (all-day)
10991*9ccd446eSAtari9118:00 AM START TICKETS
10992*9ccd446eSAtari9119:45 AM Coffee           ← Correct!
10993*9ccd446eSAtari91110:00 AM Soul Winning
10994*9ccd446eSAtari911```
10995*9ccd446eSAtari911
10996*9ccd446eSAtari911**Tooltip Positioning**:
10997*9ccd446eSAtari911- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()`
10998*9ccd446eSAtari911- Uses CSS custom properties `--tooltip-left` and `--tooltip-top`
10999*9ccd446eSAtari911- Positioned on `mouseenter` event
11000*9ccd446eSAtari911- Matches system tooltip implementation (no cutoff)
11001*9ccd446eSAtari911
11002*9ccd446eSAtari911**JavaScript Implementation**:
11003*9ccd446eSAtari911```javascript
11004*9ccd446eSAtari911element.addEventListener("mouseenter", function() {
11005*9ccd446eSAtari911    const rect = element.getBoundingClientRect();
11006*9ccd446eSAtari911    element.style.setProperty("--tooltip-left", (rect.right - 10) + "px");
11007*9ccd446eSAtari911    element.style.setProperty("--tooltip-top", (rect.top - 30) + "px");
11008*9ccd446eSAtari911});
11009*9ccd446eSAtari911```
11010*9ccd446eSAtari911
11011*9ccd446eSAtari911**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically!
11012*9ccd446eSAtari911
11013*9ccd446eSAtari911## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX
11014*9ccd446eSAtari911
11015*9ccd446eSAtari911### �� UI Improvements
11016*9ccd446eSAtari911- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge
11017*9ccd446eSAtari911- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar
11018*9ccd446eSAtari911- **Changed:** Main calendar conflict tooltip now much smaller (was too big)
11019*9ccd446eSAtari911
11020*9ccd446eSAtari911### Technical Details
11021*9ccd446eSAtari911
11022*9ccd446eSAtari911**Sidebar Overflow Fix**:
11023*9ccd446eSAtari911```php
11024*9ccd446eSAtari911// Before (line 2005):
11025*9ccd446eSAtari911style="...overflow:hidden..."  // ← Blocked tooltips!
11026*9ccd446eSAtari911
11027*9ccd446eSAtari911// After:
11028*9ccd446eSAtari911style="...overflow:visible..."  // ← Tooltips extend beyond!
11029*9ccd446eSAtari911```
11030*9ccd446eSAtari911
11031*9ccd446eSAtari911**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important`
11032*9ccd446eSAtari911
11033*9ccd446eSAtari911**Main Calendar Tooltip Size**:
11034*9ccd446eSAtari911```css
11035*9ccd446eSAtari911/* Before: */
11036*9ccd446eSAtari911.conflict-tooltip {
11037*9ccd446eSAtari911    border: 2px solid #ff9800;
11038*9ccd446eSAtari911    border-radius: 6px;
11039*9ccd446eSAtari911    padding: 8px 12px;
11040*9ccd446eSAtari911    font-size: 12px;
11041*9ccd446eSAtari911    min-width: 200px;
11042*9ccd446eSAtari911    max-width: 350px;
11043*9ccd446eSAtari911}
11044*9ccd446eSAtari911
11045*9ccd446eSAtari911/* After: */
11046*9ccd446eSAtari911.conflict-tooltip {
11047*9ccd446eSAtari911    border: 1px solid #ff9800;  /* Thinner */
11048*9ccd446eSAtari911    border-radius: 3px;          /* Smaller */
11049*9ccd446eSAtari911    padding: 4px 8px;            /* Less padding */
11050*9ccd446eSAtari911    font-size: 10px;             /* Smaller header */
11051*9ccd446eSAtari911    min-width: 120px;            /* Narrower */
11052*9ccd446eSAtari911    max-width: 200px;            /* Narrower */
11053*9ccd446eSAtari911}
11054*9ccd446eSAtari911
11055*9ccd446eSAtari911.conflict-tooltip-body {
11056*9ccd446eSAtari911    padding: 6px 8px;  /* Was 10px 12px */
11057*9ccd446eSAtari911    font-size: 9px;    /* Was 11px */
11058*9ccd446eSAtari911    line-height: 1.4;  /* Was 1.6 */
11059*9ccd446eSAtari911}
11060*9ccd446eSAtari911
11061*9ccd446eSAtari911.conflict-item {
11062*9ccd446eSAtari911    padding: 2px 0;  /* Was 4px */
11063*9ccd446eSAtari911    font-size: 9px;  /* Added smaller font */
11064*9ccd446eSAtari911}
11065*9ccd446eSAtari911```
11066*9ccd446eSAtari911
11067*9ccd446eSAtari911**Result**:
11068*9ccd446eSAtari911- Main calendar tooltip ~50% smaller
11069*9ccd446eSAtari911- Sidebar tooltips now extend beyond borders
11070*9ccd446eSAtari911- Both tooltips compact and readable
11071*9ccd446eSAtari911
11072*9ccd446eSAtari911## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP
11073*9ccd446eSAtari911
11074*9ccd446eSAtari911### �� Bug Fix
11075*9ccd446eSAtari911- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text)
11076*9ccd446eSAtari911- **Changed:** Using HTML entity `&#10;` for newlines instead of `\n`
11077*9ccd446eSAtari911
11078*9ccd446eSAtari911### Technical Details
11079*9ccd446eSAtari911
11080*9ccd446eSAtari911**The Problem**:
11081*9ccd446eSAtari911```php
11082*9ccd446eSAtari911// Before (v4.0.7):
11083*9ccd446eSAtari911$conflictTooltip = 'Conflicts with:\n';  // Literal \n showed in tooltip
11084*9ccd446eSAtari911
11085*9ccd446eSAtari911// Displayed as:
11086*9ccd446eSAtari911"Conflicts with:\n• Event 1\n• Event 2"  // ← Literal backslash-n
11087*9ccd446eSAtari911```
11088*9ccd446eSAtari911
11089*9ccd446eSAtari911**The Fix**:
11090*9ccd446eSAtari911```php
11091*9ccd446eSAtari911// After (v4.0.8):
11092*9ccd446eSAtari911$conflictTooltip = "Conflicts with:&#10;";  // HTML entity for newline
11093*9ccd446eSAtari911
11094*9ccd446eSAtari911// Displays as:
11095*9ccd446eSAtari911Conflicts with:
11096*9ccd446eSAtari911• Event 1
11097*9ccd446eSAtari911• Event 2
11098*9ccd446eSAtari911```
11099*9ccd446eSAtari911
11100*9ccd446eSAtari911**Why `&#10;` Works**:
11101*9ccd446eSAtari911- HTML entity for line feed character
11102*9ccd446eSAtari911- Works in data attributes
11103*9ccd446eSAtari911- CSS `white-space: pre-line` preserves the newlines
11104*9ccd446eSAtari911- Renders as actual line breaks in tooltip
11105*9ccd446eSAtari911
11106*9ccd446eSAtari911**Applied to**:
11107*9ccd446eSAtari911- PHP rendering (sidebar Today/Tomorrow/Important)
11108*9ccd446eSAtari911- JavaScript rendering (clicked day events)
11109*9ccd446eSAtari911
11110*9ccd446eSAtari911## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX
11111*9ccd446eSAtari911
11112*9ccd446eSAtari911### �� UI Improvements
11113*9ccd446eSAtari911- **Changed:** Tooltip size reduced significantly (much more compact)
11114*9ccd446eSAtari911- **Fixed:** Tooltip now overflows sidebar borders (not cut off)
11115*9ccd446eSAtari911- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px)
11116*9ccd446eSAtari911- **Changed:** Narrower width (120-200px vs 200-300px)
11117*9ccd446eSAtari911
11118*9ccd446eSAtari911### Technical Details
11119*9ccd446eSAtari911
11120*9ccd446eSAtari911**Tooltip Size Reduction**:
11121*9ccd446eSAtari911```css
11122*9ccd446eSAtari911/* Before (v4.0.6):
11123*9ccd446eSAtari911padding: 6px 10px;
11124*9ccd446eSAtari911font-size: 11px;
11125*9ccd446eSAtari911min-width: 200px;
11126*9ccd446eSAtari911max-width: 300px;
11127*9ccd446eSAtari911
11128*9ccd446eSAtari911/* After (v4.0.7): */
11129*9ccd446eSAtari911padding: 3px 6px;
11130*9ccd446eSAtari911font-size: 9px;
11131*9ccd446eSAtari911min-width: 120px;
11132*9ccd446eSAtari911max-width: 200px;
11133*9ccd446eSAtari911```
11134*9ccd446eSAtari911
11135*9ccd446eSAtari911**Overflow Fix**:
11136*9ccd446eSAtari911```css
11137*9ccd446eSAtari911/* Allow tooltip to extend beyond sidebar */
11138*9ccd446eSAtari911.sidebar-widget,
11139*9ccd446eSAtari911.sidebar-matrix {
11140*9ccd446eSAtari911    overflow: visible !important;
11141*9ccd446eSAtari911}
11142*9ccd446eSAtari911
11143*9ccd446eSAtari911/* Position tooltip outside */
11144*9ccd446eSAtari911[data-tooltip]:before {
11145*9ccd446eSAtari911    bottom: 120%;  /* Further above */
11146*9ccd446eSAtari911    right: -10px;  /* Can extend beyond edge */
11147*9ccd446eSAtari911    z-index: 10000; /* Always on top */
11148*9ccd446eSAtari911}
11149*9ccd446eSAtari911```
11150*9ccd446eSAtari911
11151*9ccd446eSAtari911**Visual Result**:
11152*9ccd446eSAtari911- Tooltip is ~40% smaller
11153*9ccd446eSAtari911- Extends beyond sidebar border if needed
11154*9ccd446eSAtari911- Still readable, just more compact
11155*9ccd446eSAtari911- Better for small screens
11156*9ccd446eSAtari911
11157*9ccd446eSAtari911## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING
11158*9ccd446eSAtari911
11159*9ccd446eSAtari911### �� Critical Fix
11160*9ccd446eSAtari911- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly
11161*9ccd446eSAtari911- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names
11162*9ccd446eSAtari911- **Fixed:** Events without end time now treated as zero-duration (not +1 hour)
11163*9ccd446eSAtari911- **Fixed:** Now matches what you see in main calendar view
11164*9ccd446eSAtari911
11165*9ccd446eSAtari911### ✨ UI Improvement
11166*9ccd446eSAtari911- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right)
11167*9ccd446eSAtari911- **Added:** Custom CSS tooltip with data-tooltip attribute
11168*9ccd446eSAtari911- **Improved:** Better tooltip positioning - doesn't overflow screen edges
11169*9ccd446eSAtari911
11170*9ccd446eSAtari911### Technical Details
11171*9ccd446eSAtari911
11172*9ccd446eSAtari911**The Problem - Field Name Mismatch**:
11173*9ccd446eSAtari911```php
11174*9ccd446eSAtari911// Main calendar (line 697):
11175*9ccd446eSAtari911$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase)
11176*9ccd446eSAtari911
11177*9ccd446eSAtari911// Sidebar (before fix):
11178*9ccd446eSAtari911$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case)
11179*9ccd446eSAtari911```
11180*9ccd446eSAtari911
11181*9ccd446eSAtari911**The Problem - Duration Logic**:
11182*9ccd446eSAtari911```php
11183*9ccd446eSAtari911// Main calendar (line 697):
11184*9ccd446eSAtari911$end1 = isset($evt1['endTime']) && !empty($evt1['endTime'])
11185*9ccd446eSAtari911    ? $evt1['endTime']
11186*9ccd446eSAtari911    : $evt1['time'];  // ← Uses START time (zero duration)
11187*9ccd446eSAtari911
11188*9ccd446eSAtari911// Sidebar (before fix):
11189*9ccd446eSAtari911$endTime = ... ? ... : $this->addHoursToTime($startTime, 1);  // ← Added 1 hour!
11190*9ccd446eSAtari911```
11191*9ccd446eSAtari911
11192*9ccd446eSAtari911**The Fix**:
11193*9ccd446eSAtari911```php
11194*9ccd446eSAtari911// Now checks BOTH field names:
11195*9ccd446eSAtari911if (isset($event['end_time']) && $event['end_time'] !== '') {
11196*9ccd446eSAtari911    $endTime = $event['end_time'];
11197*9ccd446eSAtari911} elseif (isset($event['endTime']) && $event['endTime'] !== '') {
11198*9ccd446eSAtari911    $endTime = $event['endTime'];
11199*9ccd446eSAtari911} else {
11200*9ccd446eSAtari911    $endTime = $startTime;  // ← Matches main calendar!
11201*9ccd446eSAtari911}
11202*9ccd446eSAtari911```
11203*9ccd446eSAtari911
11204*9ccd446eSAtari911**Tooltip Positioning**:
11205*9ccd446eSAtari911- Uses `data-tooltip` attribute instead of `title`
11206*9ccd446eSAtari911- CSS positions tooltip ABOVE badge (`bottom: 100%`)
11207*9ccd446eSAtari911- Aligns to RIGHT edge (`right: 0`)
11208*9ccd446eSAtari911- Arrow points down to badge
11209*9ccd446eSAtari911- Black background with white text
11210*9ccd446eSAtari911- Max width 300px
11211*9ccd446eSAtari911
11212*9ccd446eSAtari911### Example
11213*9ccd446eSAtari911
11214*9ccd446eSAtari911**6:00 PM Evening Service** (no end time):
11215*9ccd446eSAtari911- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌
11216*9ccd446eSAtari911- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar!
11217*9ccd446eSAtari911
11218*9ccd446eSAtari911**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**:
11219*9ccd446eSAtari911- Zero-duration events at 6:00 PM don't overlap with anything
11220*9ccd446eSAtari911- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict
11221*9ccd446eSAtari911
11222*9ccd446eSAtari911**Tooltip appears**:
11223*9ccd446eSAtari911```
11224*9ccd446eSAtari911        ┌────────────────────┐
11225*9ccd446eSAtari911        │ Conflicts with:    │
11226*9ccd446eSAtari911        │ • Super Bowl       │
11227*9ccd446eSAtari911        │   (3:30 PM-7:00 PM)│
11228*9ccd446eSAtari911        └─────────┬──────────┘
11229*9ccd446eSAtari91111230*9ccd446eSAtari91111231*9ccd446eSAtari911```
11232*9ccd446eSAtari911
11233*9ccd446eSAtari911## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING
11234*9ccd446eSAtari911
11235*9ccd446eSAtari911### �� Bug Fix
11236*9ccd446eSAtari911- **Fixed:** Events without end_time now properly get 1-hour default duration
11237*9ccd446eSAtari911- **Fixed:** Empty string end_time values now treated as missing (was causing issues)
11238*9ccd446eSAtari911- **Improved:** More robust checking for `end_time` field (checks both isset and not empty)
11239*9ccd446eSAtari911
11240*9ccd446eSAtari911### Technical Details
11241*9ccd446eSAtari911
11242*9ccd446eSAtari911**The Problem**:
11243*9ccd446eSAtari911```php
11244*9ccd446eSAtari911// Before (broken):
11245*9ccd446eSAtari911$endTime = isset($event['end_time']) ? $event['end_time'] : default;
11246*9ccd446eSAtari911
11247*9ccd446eSAtari911// If end_time exists but is empty string "":
11248*9ccd446eSAtari911isset($event['end_time']) = TRUE
11249*9ccd446eSAtari911$endTime = ""  // ← Empty string, not default!
11250*9ccd446eSAtari911```
11251*9ccd446eSAtari911
11252*9ccd446eSAtari911**The Fix**:
11253*9ccd446eSAtari911```php
11254*9ccd446eSAtari911// After (fixed):
11255*9ccd446eSAtari911$endTime = (isset($event['end_time']) && $event['end_time'] !== '')
11256*9ccd446eSAtari911    ? $event['end_time']
11257*9ccd446eSAtari911    : $this->addHoursToTime($startTime, 1);
11258*9ccd446eSAtari911
11259*9ccd446eSAtari911// Now empty string gets the default 1-hour duration
11260*9ccd446eSAtari911```
11261*9ccd446eSAtari911
11262*9ccd446eSAtari911**Why This Matters**:
11263*9ccd446eSAtari911Events like "6:00 PM Evening Service" with no end time should be treated as 6:00-7:00 PM (1 hour). If the `end_time` field contains an empty string instead of being absent, the old code would use the empty string, causing conflict detection to fail.
11264*9ccd446eSAtari911
11265*9ccd446eSAtari911**Example**:
11266*9ccd446eSAtari911```
11267*9ccd446eSAtari911Super Bowl: 3:30 PM - 7:00 PM
11268*9ccd446eSAtari911Evening Service: 6:00 PM - ??? (should be 7:00 PM)
11269*9ccd446eSAtari911
11270*9ccd446eSAtari911If end_time = "" (empty string):
11271*9ccd446eSAtari911  Old code: Uses "" → conflict detection fails
11272*9ccd446eSAtari911  New code: Uses 7:00 PM → conflict detected ✓
11273*9ccd446eSAtari911```
11274*9ccd446eSAtari911
11275*9ccd446eSAtari911### Testing
11276*9ccd446eSAtari911If you're still not seeing the conflict on the 6:00 PM service:
11277*9ccd446eSAtari9111. Check if the event has `end_time` set in the JSON
11278*9ccd446eSAtari9112. Clear cache (Admin → Manage Events → Clear Cache)
11279*9ccd446eSAtari9113. The conflict should now appear
11280*9ccd446eSAtari911
11281*9ccd446eSAtari911## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS
11282*9ccd446eSAtari911
11283*9ccd446eSAtari911### ✨ Feature Added
11284*9ccd446eSAtari911- **Added:** Hover over ⚠ badge to see which events are conflicting
11285*9ccd446eSAtari911- **Added:** Tooltip shows conflicting event titles and times
11286*9ccd446eSAtari911- **Added:** Works in both sidebar sections and clicked day events
11287*9ccd446eSAtari911
11288*9ccd446eSAtari911### Technical Details
11289*9ccd446eSAtari911
11290*9ccd446eSAtari911**Conflict Tracking Enhanced**:
11291*9ccd446eSAtari911```php
11292*9ccd446eSAtari911// Now tracks WHICH events conflict:
11293*9ccd446eSAtari911$event['conflictingWith'] = [
11294*9ccd446eSAtari911    ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'],
11295*9ccd446eSAtari911    ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30']
11296*9ccd446eSAtari911];
11297*9ccd446eSAtari911```
11298*9ccd446eSAtari911
11299*9ccd446eSAtari911**Tooltip Format**:
11300*9ccd446eSAtari911```
11301*9ccd446eSAtari911Conflicts with:
11302*9ccd446eSAtari911• Meeting (10:00 AM-11:00 AM)
11303*9ccd446eSAtari911• Call (10:30 AM-11:30 PM)
11304*9ccd446eSAtari911```
11305*9ccd446eSAtari911
11306*9ccd446eSAtari911**Where It Works**:
11307*9ccd446eSAtari911- ✅ Today section (sidebar)
11308*9ccd446eSAtari911- ✅ Tomorrow section (sidebar)
11309*9ccd446eSAtari911- ✅ Important Events section (sidebar)
11310*9ccd446eSAtari911- ✅ Clicked day events (week grid)
11311*9ccd446eSAtari911
11312*9ccd446eSAtari911**Cursor**: Changes to `help` cursor on hover to indicate tooltip
11313*9ccd446eSAtari911
11314*9ccd446eSAtari911### Note on Multi-Day Events
11315*9ccd446eSAtari911The current conflict detection only checks time conflicts **within the same day**. If you have an event that spans multiple days (e.g., start date on Monday, end date on Wednesday), each day is treated independently. To see conflicts across the entire span, you would need to check each individual day.
11316*9ccd446eSAtari911
11317*9ccd446eSAtari911## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC
11318*9ccd446eSAtari911
11319*9ccd446eSAtari911### �� Bug Fixes
11320*9ccd446eSAtari911- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections
11321*9ccd446eSAtari911- **Fixed:** Important Events now shows events even if they're today or tomorrow
11322*9ccd446eSAtari911- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular)
11323*9ccd446eSAtari911
11324*9ccd446eSAtari911### Technical Details
11325*9ccd446eSAtari911
11326*9ccd446eSAtari911**Conflict Badge Issue**:
11327*9ccd446eSAtari911```php
11328*9ccd446eSAtari911// BROKEN (line 2511):
11329*9ccd446eSAtari911$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']);
11330*9ccd446eSAtari911// ↑ Checking 'conflicts' (plural)
11331*9ccd446eSAtari911
11332*9ccd446eSAtari911// But detectTimeConflicts() sets:
11333*9ccd446eSAtari911$event['conflict'] = true/false;
11334*9ccd446eSAtari911// ↑ Setting 'conflict' (singular)
11335*9ccd446eSAtari911
11336*9ccd446eSAtari911// FIXED:
11337*9ccd446eSAtari911$hasConflict = isset($event['conflict']) && $event['conflict'];
11338*9ccd446eSAtari911```
11339*9ccd446eSAtari911
11340*9ccd446eSAtari911**Result**: Badge now shows for ALL conflicting events in sidebar sections
11341*9ccd446eSAtari911
11342*9ccd446eSAtari911**Important Events Logic Issue**:
11343*9ccd446eSAtari911```php
11344*9ccd446eSAtari911// BROKEN:
11345*9ccd446eSAtari911if ($dateKey === $todayStr) {
11346*9ccd446eSAtari911    $todayEvents[] = ...;
11347*9ccd446eSAtari911} elseif ($dateKey === $tomorrowStr) {
11348*9ccd446eSAtari911    $tomorrowEvents[] = ...;
11349*9ccd446eSAtari911} else {  // ← Only checked if NOT today/tomorrow!
11350*9ccd446eSAtari911    if ($isImportant) {
11351*9ccd446eSAtari911        $importantEvents[] = ...;
11352*9ccd446eSAtari911    }
11353*9ccd446eSAtari911}
11354*9ccd446eSAtari911
11355*9ccd446eSAtari911// FIXED:
11356*9ccd446eSAtari911if ($dateKey === $todayStr) {
11357*9ccd446eSAtari911    $todayEvents[] = ...;
11358*9ccd446eSAtari911}
11359*9ccd446eSAtari911if ($dateKey === $tomorrowStr) {
11360*9ccd446eSAtari911    $tomorrowEvents[] = ...;
11361*9ccd446eSAtari911}
11362*9ccd446eSAtari911// ↑ Changed to separate 'if' statements
11363*9ccd446eSAtari911if ($isImportant && $dateKey in this week) {
11364*9ccd446eSAtari911    $importantEvents[] = ...;  // ← Now includes today/tomorrow too!
11365*9ccd446eSAtari911}
11366*9ccd446eSAtari911```
11367*9ccd446eSAtari911
11368*9ccd446eSAtari911**Result**: Important namespace events now show in Important section even if they're today or tomorrow
11369*9ccd446eSAtari911
11370*9ccd446eSAtari911### Conflict Badge Display
11371*9ccd446eSAtari911- Simplified to just ⚠ icon (no count)
11372*9ccd446eSAtari911- Orange color (#ff9800)
11373*9ccd446eSAtari911- 10px font size
11374*9ccd446eSAtari911- Hover shows "Time conflict detected"
11375*9ccd446eSAtari911
11376*9ccd446eSAtari911## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY
11377*9ccd446eSAtari911
11378*9ccd446eSAtari911### �� Bug Fix
11379*9ccd446eSAtari911- **Fixed:** Important Events section now displays all events correctly
11380*9ccd446eSAtari911- **Fixed:** Single-event days now get conflict flag (was returning early without flag)
11381*9ccd446eSAtari911- **Fixed:** Conflict detection no longer causes events to disappear from Important section
11382*9ccd446eSAtari911
11383*9ccd446eSAtari911### Technical Details
11384*9ccd446eSAtari911
11385*9ccd446eSAtari911**The Problem**:
11386*9ccd446eSAtari911- `detectTimeConflicts()` returned early if only 1 event on a day
11387*9ccd446eSAtari911- Returned original array without adding 'conflict' field
11388*9ccd446eSAtari911- This inconsistency caused issues in event categorization
11389*9ccd446eSAtari911
11390*9ccd446eSAtari911**The Solution**:
11391*9ccd446eSAtari911```php
11392*9ccd446eSAtari911// Before (broken):
11393*9ccd446eSAtari911if (empty($dayEvents) || count($dayEvents) < 2) {
11394*9ccd446eSAtari911    return $dayEvents;  // No 'conflict' field added!
11395*9ccd446eSAtari911}
11396*9ccd446eSAtari911
11397*9ccd446eSAtari911// After (fixed):
11398*9ccd446eSAtari911if (count($dayEvents) === 1) {
11399*9ccd446eSAtari911    return [array_merge($dayEvents[0], ['conflict' => false])];  // Always add flag
11400*9ccd446eSAtari911}
11401*9ccd446eSAtari911```
11402*9ccd446eSAtari911
11403*9ccd446eSAtari911**Result**:
11404*9ccd446eSAtari911- All events now have 'conflict' field consistently
11405*9ccd446eSAtari911- Single events: conflict = false
11406*9ccd446eSAtari911- Multiple events: conflict = true/false based on overlap
11407*9ccd446eSAtari911- Important Events section displays correctly
11408*9ccd446eSAtari911
11409*9ccd446eSAtari911## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES
11410*9ccd446eSAtari911
11411*9ccd446eSAtari911### �� Bug Fixes
11412*9ccd446eSAtari911- **Fixed:** Conflict badge (⚠) now displays in clicked day events
11413*9ccd446eSAtari911- **Fixed:** Recurring events edit now updates time and end_time correctly
11414*9ccd446eSAtari911- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit
11415*9ccd446eSAtari911
11416*9ccd446eSAtari911### ✨ Features Added
11417*9ccd446eSAtari911- **Added:** Time conflict detection for overlapping events
11418*9ccd446eSAtari911- **Added:** detectTimeConflicts() function checks all events on same day
11419*9ccd446eSAtari911- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions
11420*9ccd446eSAtari911- **Added:** Events now have 'conflict' flag set automatically
11421*9ccd446eSAtari911
11422*9ccd446eSAtari911### �� UI Changes
11423*9ccd446eSAtari911- **Changed:** Admin tab order: �� Manage Events (first), �� Update Plugin, ⚙️ Outlook Sync
11424*9ccd446eSAtari911- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin")
11425*9ccd446eSAtari911- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars)
11426*9ccd446eSAtari911
11427*9ccd446eSAtari911### Technical Details
11428*9ccd446eSAtari911
11429*9ccd446eSAtari911**Conflict Detection**:
11430*9ccd446eSAtari911```php
11431*9ccd446eSAtari911// Automatically detects overlapping events on same day
11432*9ccd446eSAtari911// Sets 'conflict' flag to true if event overlaps with another
11433*9ccd446eSAtari911$eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
11434*9ccd446eSAtari911```
11435*9ccd446eSAtari911
11436*9ccd446eSAtari911**Logic**:
11437*9ccd446eSAtari911- All-day events never conflict (no time set)
11438*9ccd446eSAtari911- Timed events check for overlap with other timed events
11439*9ccd446eSAtari911- Overlap = start1 < end2 AND start2 < end1
11440*9ccd446eSAtari911- Default duration is 60 minutes if no end_time
11441*9ccd446eSAtari911
11442*9ccd446eSAtari911**Recurring Events Fix**:
11443*9ccd446eSAtari911- Old: Updated `$event['start']` and `$event['end']` (wrong fields)
11444*9ccd446eSAtari911- New: Updates `$event['time']` and `$event['end_time']` (correct fields)
11445*9ccd446eSAtari911- Now edits actually save and update the events
11446*9ccd446eSAtari911
11447*9ccd446eSAtari911**Week View Bars**:
11448*9ccd446eSAtari911- Shows 4 colored bars instead of 3
11449*9ccd446eSAtari911- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc.
11450*9ccd446eSAtari911
11451231d0edbSAtari911## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE ��
11452231d0edbSAtari911
11453231d0edbSAtari911**Major Release**: Complete Matrix-themed calendar plugin with advanced features!
11454231d0edbSAtari911
11455231d0edbSAtari911### �� Major Features
11456231d0edbSAtari911
11457231d0edbSAtari911#### Sidebar Widget
11458231d0edbSAtari911- **Week Grid**: Interactive 7-day calendar with click-to-view events
11459231d0edbSAtari911- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips
11460231d0edbSAtari911- **Live Clock**: Updates every second with date display
11461231d0edbSAtari911- **Real-time Weather**: Geolocation-based temperature with icon
11462231d0edbSAtari911- **Event Sections**: Today (orange), Tomorrow (green), Important (purple)
11463231d0edbSAtari911- **Add Event Button**: Dark green bar opens full event creation dialog
11464231d0edbSAtari911- **Matrix Theme**: Green glow effects throughout
11465231d0edbSAtari911
11466231d0edbSAtari911#### Event Management
11467231d0edbSAtari911- **Single Color Bars**: Clean 3px bars showing event's assigned color
11468231d0edbSAtari911- **All-Day Events First**: Then sorted chronologically by time
11469231d0edbSAtari911- **Conflict Detection**: Orange ⚠ badge on overlapping events
11470231d0edbSAtari911- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//)
11471231d0edbSAtari911- **HTML Rendering**: Pre-rendered for JavaScript display
11472231d0edbSAtari911- **Click-to-View**: Click week grid days to expand event details
11473231d0edbSAtari911
11474231d0edbSAtari911#### Admin Interface
11475231d0edbSAtari911- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button
11476231d0edbSAtari911- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings
11477231d0edbSAtari911- **Manage Events Tab**: Browse, edit, delete, move events across namespaces
11478231d0edbSAtari911
11479231d0edbSAtari911#### Outlook Sync
11480231d0edbSAtari911- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook
11481231d0edbSAtari911- **Category Mapping**: Map colors to Outlook categories
11482231d0edbSAtari911- **Conflict Resolution**: Time conflict detection
11483231d0edbSAtari911- **Import/Export Config**: Encrypted configuration files
11484231d0edbSAtari911
11485231d0edbSAtari911### �� Design
11486231d0edbSAtari911- **Matrix Theme**: Authentic green glow aesthetic
11487231d0edbSAtari911- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections
11488231d0edbSAtari911- **Color Scheme**:
11489231d0edbSAtari911  - Today: Orange #ff9800
11490231d0edbSAtari911  - Tomorrow: Green #4caf50
11491231d0edbSAtari911  - Important: Purple #9b59b6
11492231d0edbSAtari911  - Add Event: Dark green #006400
11493231d0edbSAtari911  - System bars: Green/Purple/Orange
11494231d0edbSAtari911
11495231d0edbSAtari911### �� Technical Highlights
11496231d0edbSAtari911- **Zero-margin Design**: Perfect flush alignment throughout
11497231d0edbSAtari911- **Flexbox Layout**: Modern, responsive structure
11498231d0edbSAtari911- **AJAX Operations**: No page reloads needed
11499231d0edbSAtari911- **Smart Sorting**: All-day events first, then chronological
11500231d0edbSAtari911- **Tooltip System**: Detailed stats on hover (working correctly)
11501231d0edbSAtari911- **Event Dialog**: Full form with drag support
11502231d0edbSAtari911- **Cache Management**: One-click cache clearing
11503231d0edbSAtari911
11504231d0edbSAtari911### �� Breaking Changes from v3.x
11505231d0edbSAtari911- Removed dual color bars (now single event color bar only)
11506231d0edbSAtari911- Add Event button moved to between header and week grid
11507231d0edbSAtari911- All-day events now appear FIRST (not last)
11508231d0edbSAtari911- Update Plugin tab is now the default admin tab
11509231d0edbSAtari911
11510231d0edbSAtari911### �� Bug Fixes (v3.10.x → v4.0.0)
11511231d0edbSAtari911- ✅ Fixed color bars not showing (align-self:stretch vs height:100%)
11512231d0edbSAtari911- ✅ Fixed tooltip function naming (sanitized calId for JavaScript)
11513231d0edbSAtari911- ✅ Fixed weather display (added updateWeather function)
11514231d0edbSAtari911- ✅ Fixed HTML rendering in events (title_html/description_html fields)
11515231d0edbSAtari911- ✅ Fixed Add Event dialog (null check for calendar element)
11516231d0edbSAtari911- ✅ Fixed text positioning in Add Event button
11517231d0edbSAtari911- ✅ Fixed spacing throughout sidebar widget
11518231d0edbSAtari911
11519231d0edbSAtari911### �� Complete Feature List
11520231d0edbSAtari911- Full calendar view (month grid)
11521231d0edbSAtari911- Sidebar widget (week view)
11522231d0edbSAtari911- Event panel (standalone)
11523231d0edbSAtari911- Event list (date ranges)
11524231d0edbSAtari911- Namespace support
11525231d0edbSAtari911- Color coding
11526231d0edbSAtari911- Time conflict detection
11527231d0edbSAtari911- DokuWiki syntax in events
11528231d0edbSAtari911- Outlook synchronization
11529231d0edbSAtari911- System monitoring
11530231d0edbSAtari911- Weather display
11531231d0edbSAtari911- Live clock
11532231d0edbSAtari911- Admin interface
11533231d0edbSAtari911- Cache management
11534231d0edbSAtari911- Draggable dialogs
11535231d0edbSAtari911- AJAX save/edit/delete
11536231d0edbSAtari911- Import/export config
11537231d0edbSAtari911
11538231d0edbSAtari911### �� Usage
11539231d0edbSAtari911
11540231d0edbSAtari911**Sidebar Widget**:
11541231d0edbSAtari911```
11542231d0edbSAtari911{{calendar sidebar}}
11543231d0edbSAtari911{{calendar sidebar namespace=team}}
11544231d0edbSAtari911```
11545231d0edbSAtari911
11546231d0edbSAtari911**Full Calendar**:
11547231d0edbSAtari911```
11548231d0edbSAtari911{{calendar}}
11549231d0edbSAtari911{{calendar year=2026 month=6 namespace=team}}
11550231d0edbSAtari911```
11551231d0edbSAtari911
11552231d0edbSAtari911**Event Panel**:
11553231d0edbSAtari911```
11554231d0edbSAtari911{{eventpanel}}
11555231d0edbSAtari911```
11556231d0edbSAtari911
11557231d0edbSAtari911**Event List**:
11558231d0edbSAtari911```
11559231d0edbSAtari911{{eventlist daterange=2026-01-01:2026-01-31}}
11560231d0edbSAtari911```
11561231d0edbSAtari911
11562231d0edbSAtari911### �� Stats
11563231d0edbSAtari911- **40+ versions** developed during v3.x iterations
11564231d0edbSAtari911- **3.10.0 → 3.11.4**: Polish and refinement
11565231d0edbSAtari911- **4.0.0**: Production-ready Matrix Edition
11566231d0edbSAtari911
11567231d0edbSAtari911### �� Credits
11568231d0edbSAtari911Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration.
11569231d0edbSAtari911
11570231d0edbSAtari911---
11571231d0edbSAtari911
11572231d0edbSAtari911## Previous Versions (v3.11.4 and earlier)
11573231d0edbSAtari911
11574231d0edbSAtari911## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING
11575231d0edbSAtari911- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px)
11576231d0edbSAtari911- **Improved:** Small breathing room between system stats bars and Add Event button
11577231d0edbSAtari911- **Visual:** Better spacing for cleaner appearance
11578231d0edbSAtari911
11579231d0edbSAtari911### CSS Change:
11580231d0edbSAtari911**eventlist-today-header**:
11581231d0edbSAtari911- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px`
11582231d0edbSAtari911
11583231d0edbSAtari911### Visual Result:
11584231d0edbSAtari911```
11585231d0edbSAtari911│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats bars
11586231d0edbSAtari911│                       │  ← 2px space (restored)
11587231d0edbSAtari911├───────────────────────┤
11588231d0edbSAtari911│  + ADD EVENT          │  ← Add Event bar
11589231d0edbSAtari911├───────────────────────┤
11590231d0edbSAtari911```
11591231d0edbSAtari911
11592231d0edbSAtari911**Before (v3.11.3)**: No space, bars directly touch Add Event button
11593231d0edbSAtari911**After (v3.11.4)**: 2px breathing room for better visual hierarchy
11594231d0edbSAtari911
11595231d0edbSAtari911## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION
11596231d0edbSAtari911- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset
11597231d0edbSAtari911- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error
11598231d0edbSAtari911- **Changed:** Add Event text moved up 1px (position:relative; top:-1px)
11599231d0edbSAtari911- **Changed:** Line-height reduced from 12px to 10px for better text centering
11600231d0edbSAtari911- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets
11601231d0edbSAtari911
11602231d0edbSAtari911### JavaScript Fix:
11603231d0edbSAtari911**Problem**: Line 1084-1085 in calendar-main.js
11604231d0edbSAtari911```javascript
11605231d0edbSAtari911const calendar = document.getElementById(calId);
11606231d0edbSAtari911const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error!
11607231d0edbSAtari911```
11608231d0edbSAtari911
11609231d0edbSAtari911**Solution**: Added null check
11610231d0edbSAtari911```javascript
11611231d0edbSAtari911const calendar = document.getElementById(calId);
11612231d0edbSAtari911const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null;
11613231d0edbSAtari911```
11614231d0edbSAtari911
11615231d0edbSAtari911**Why This Happened**:
11616231d0edbSAtari911- Regular calendar has element with id=calId
11617231d0edbSAtari911- Sidebar widget doesn't have this element (different structure)
11618231d0edbSAtari911- Code tried to read .dataset on null, causing error
11619231d0edbSAtari911
11620231d0edbSAtari911### Text Position Fix:
11621231d0edbSAtari911**Before**:
11622231d0edbSAtari911- line-height: 12px
11623231d0edbSAtari911- vertical-align: middle
11624231d0edbSAtari911- Text slightly low
11625231d0edbSAtari911
11626231d0edbSAtari911**After**:
11627231d0edbSAtari911- line-height: 10px
11628231d0edbSAtari911- position: relative; top: -1px
11629231d0edbSAtari911- Text perfectly centered
11630231d0edbSAtari911
11631231d0edbSAtari911### What Works Now:
11632231d0edbSAtari911✅ Click "+ ADD EVENT" in sidebar → Dialog opens
11633231d0edbSAtari911✅ No console errors
11634231d0edbSAtari911✅ Text properly centered vertically
11635231d0edbSAtari911✅ Form pre-filled with today's date
11636231d0edbSAtari911✅ Save works correctly
11637231d0edbSAtari911
11638231d0edbSAtari911## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR
11639231d0edbSAtari911- **Added:** Event dialog to sidebar widget (same as regular calendar)
11640231d0edbSAtari911- **Changed:** Add Event button now opens proper event form dialog
11641231d0edbSAtari911- **Added:** renderEventDialog() called in renderSidebarWidget()
11642231d0edbSAtari911- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date
11643231d0edbSAtari911- **Improved:** Can now add events directly from sidebar widget
11644231d0edbSAtari911
11645231d0edbSAtari911### Add Event Button Behavior:
11646231d0edbSAtari911**Before (v3.11.1)**: Showed alert with instructions
11647231d0edbSAtari911**After (v3.11.2)**: Opens full event creation dialog
11648231d0edbSAtari911
11649231d0edbSAtari911**Dialog Features**:
11650231d0edbSAtari911- Date field (defaults to today)
11651231d0edbSAtari911- Title field (required)
11652231d0edbSAtari911- Time field (optional)
11653231d0edbSAtari911- End time field (optional)
11654231d0edbSAtari911- Color picker
11655231d0edbSAtari911- Category field
11656231d0edbSAtari911- Description field
11657231d0edbSAtari911- Save and Cancel buttons
11658231d0edbSAtari911- Draggable dialog
11659231d0edbSAtari911
11660231d0edbSAtari911### Technical Changes:
11661231d0edbSAtari911- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget()
11662231d0edbSAtari911- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')`
11663231d0edbSAtari911- Dialog uses same structure as regular calendar
11664231d0edbSAtari911- Uses existing openAddEvent() and saveEventCompact() JavaScript functions
11665231d0edbSAtari911
11666231d0edbSAtari911### User Flow:
11667231d0edbSAtari9111. User clicks "+ ADD EVENT" green bar
11668231d0edbSAtari9112. Event dialog opens with today's date pre-filled
11669231d0edbSAtari9113. User fills in event details
11670231d0edbSAtari9114. User clicks Save
11671231d0edbSAtari9115. Event saved via AJAX
11672231d0edbSAtari9116. Dialog closes
11673231d0edbSAtari9117. Sidebar refreshes to show new event
11674231d0edbSAtari911
11675231d0edbSAtari911## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG
11676231d0edbSAtari911- **Fixed:** Removed bottom padding from header (was 2px, now 0)
11677231d0edbSAtari911- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0)
11678231d0edbSAtari911- **Fixed:** Add Event bar now flush against header with zero gap
11679231d0edbSAtari911- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin
11680231d0edbSAtari911- **Improved:** Alert provides clear instructions on how to add events
11681231d0edbSAtari911
11682231d0edbSAtari911### CSS Changes:
11683231d0edbSAtari911**eventlist-today-header**:
11684231d0edbSAtari911- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom)
11685231d0edbSAtari911
11686231d0edbSAtari911**eventlist-stats-container**:
11687231d0edbSAtari911- `margin-top: 2px` → `margin: 0` (removed all margins)
11688231d0edbSAtari911
11689231d0edbSAtari911### Add Event Button Behavior:
11690231d0edbSAtari911**Before**: Clicked → Navigated to Admin → Manage Events tab
11691231d0edbSAtari911**After**: Clicked → Shows alert with instructions
11692231d0edbSAtari911
11693231d0edbSAtari911**Alert Message**:
11694231d0edbSAtari911```
11695231d0edbSAtari911To add an event, go to:
11696231d0edbSAtari911Admin → Calendar Management → Manage Events tab
11697231d0edbSAtari911or use the full calendar view {{calendar}}
11698231d0edbSAtari911```
11699231d0edbSAtari911
11700231d0edbSAtari911### Visual Result:
11701231d0edbSAtari911```
11702231d0edbSAtari911│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats (no margin-bottom)
11703231d0edbSAtari911├────────────────────────┤
11704231d0edbSAtari911│  + ADD EVENT           │  ← Perfectly flush!
11705231d0edbSAtari911├────────────────────────┤
11706231d0edbSAtari911```
11707231d0edbSAtari911
11708231d0edbSAtari911No gaps, perfectly aligned!
11709231d0edbSAtari911
11710231d0edbSAtari911## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE
11711231d0edbSAtari911- **Moved:** Add Event bar back to original position (between header and week grid)
11712231d0edbSAtari911- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff)
11713231d0edbSAtari911- **Changed:** Letter spacing reduced from 0.5px to 0.4px
11714231d0edbSAtari911- **Fixed:** Text now fully visible without being cut off
11715231d0edbSAtari911- **Final:** Optimal position and size determined
11716231d0edbSAtari911
11717231d0edbSAtari911### Final Layout:
11718231d0edbSAtari911```
11719231d0edbSAtari911┌─────────────────────────────┐
11720231d0edbSAtari911│  Clock | Weather | Stats    │  ← Header
11721231d0edbSAtari911├─────────────────────────────┤
11722231d0edbSAtari911│  + ADD EVENT                 │  ← Bar (back here, smaller text)
11723231d0edbSAtari911├─────────────────────────────┤
11724231d0edbSAtari911│  M  T  W  T  F  S  S        │  ← Week Grid
11725231d0edbSAtari911│  3  4  5  6  7  8  9        │
11726231d0edbSAtari911├─────────────────────────────┤
11727231d0edbSAtari911│  Today                       │  ← Event sections
11728231d0edbSAtari911└─────────────────────────────┘
11729231d0edbSAtari911```
11730231d0edbSAtari911
11731231d0edbSAtari911### Text Size Changes:
11732231d0edbSAtari911**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off
11733231d0edbSAtari911**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible
11734231d0edbSAtari911
11735231d0edbSAtari911### Why This Position:
11736231d0edbSAtari911- Separates header from calendar
11737231d0edbSAtari911- Natural action point after viewing stats
11738231d0edbSAtari911- Users see stats → decide to add event → view calendar
11739231d0edbSAtari911- Consistent with original design intent
11740231d0edbSAtari911
11741231d0edbSAtari911## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID
11742231d0edbSAtari911- **Moved:** Add Event bar repositioned from between header/grid to below week grid
11743231d0edbSAtari911- **Improved:** Better visual flow - header → stats → grid → add button → events
11744231d0edbSAtari911- **Changed:** Add Event bar now acts as separator between calendar and event sections
11745231d0edbSAtari911
11746231d0edbSAtari911### New Layout:
11747231d0edbSAtari911```
11748231d0edbSAtari911┌─────────────────────────────┐
11749231d0edbSAtari911│  Clock | Weather | Stats    │  ← Header
11750231d0edbSAtari911├─────────────────────────────┤
11751231d0edbSAtari911│  M  T  W  T  F  S  S        │  ← Week Grid
11752231d0edbSAtari911│  3  4  5  6  7  8  9        │
11753231d0edbSAtari911├─────────────────────────────┤
11754231d0edbSAtari911│  + ADD EVENT                 │  ← Add bar (moved here!)
11755231d0edbSAtari911├─────────────────────────────┤
11756231d0edbSAtari911│  Today                       │  ← Event sections
11757231d0edbSAtari911│  Tomorrow                    │
11758231d0edbSAtari911│  Important Events            │
11759231d0edbSAtari911└─────────────────────────────┘
11760231d0edbSAtari911```
11761231d0edbSAtari911
11762231d0edbSAtari911### Visual Flow:
11763231d0edbSAtari911**Before (v3.10.8)**:
11764231d0edbSAtari9111. Header (clock, weather, stats)
11765231d0edbSAtari9112. **+ ADD EVENT** bar
11766231d0edbSAtari9113. Week grid
11767231d0edbSAtari9114. Event sections
11768231d0edbSAtari911
11769231d0edbSAtari911**After (v3.10.9)**:
11770231d0edbSAtari9111. Header (clock, weather, stats)
11771231d0edbSAtari9112. Week grid (calendar days)
11772231d0edbSAtari9113. **+ ADD EVENT** bar
11773231d0edbSAtari9114. Event sections
11774231d0edbSAtari911
11775231d0edbSAtari911### Benefits:
11776231d0edbSAtari911- Natural reading flow: View calendar → Add event → See events
11777231d0edbSAtari911- Add button positioned between calendar and event list
11778231d0edbSAtari911- Acts as visual separator
11779231d0edbSAtari911- More logical action placement
11780231d0edbSAtari911
11781231d0edbSAtari911## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR
11782231d0edbSAtari911- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color
11783231d0edbSAtari911- **Changed:** Events now display with single 3px color bar (event's assigned color only)
11784231d0edbSAtari911- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly
11785231d0edbSAtari911- **Simplified:** Cleaner visual with one color bar instead of two
11786231d0edbSAtari911- **Improved:** More space for event content without extra bar
11787231d0edbSAtari911
11788231d0edbSAtari911### Visual Changes:
11789231d0edbSAtari911
11790231d0edbSAtari911**Before (v3.10.7)** - Dual color bars:
11791231d0edbSAtari911```
11792231d0edbSAtari911├─ [Orange][Green]  Event Title
11793231d0edbSAtari911├─ [Blue][Purple]   Event Title
11794231d0edbSAtari911```
11795231d0edbSAtari911
11796231d0edbSAtari911**After (v3.10.8)** - Single color bar:
11797231d0edbSAtari911```
11798231d0edbSAtari911├─ [Green]  Event Title    ← Only event color!
11799231d0edbSAtari911├─ [Purple] Event Title    ← Only event color!
11800231d0edbSAtari911```
11801231d0edbSAtari911
11802231d0edbSAtari911### Add Bar Changes:
11803231d0edbSAtari911- Added `margin:0` to eliminate gaps
11804231d0edbSAtari911- Now flush against header (no space above)
11805231d0edbSAtari911- Now flush against week grid (no space below)
11806231d0edbSAtari911- Perfect seamless connection
11807231d0edbSAtari911
11808231d0edbSAtari911### Technical Changes:
11809231d0edbSAtari911**renderSidebarEvent()**:
11810231d0edbSAtari911- Removed section color bar (4px)
11811231d0edbSAtari911- Kept only event color bar (3px)
11812231d0edbSAtari911
11813231d0edbSAtari911**showDayEvents() JavaScript**:
11814231d0edbSAtari911- Removed section color bar (4px blue)
11815231d0edbSAtari911- Kept only event color bar (3px)
11816231d0edbSAtari911
11817231d0edbSAtari911**Add Event bar**:
11818231d0edbSAtari911- Added `margin:0` inline style
11819231d0edbSAtari911- Removed all top/bottom margins
11820231d0edbSAtari911
11821231d0edbSAtari911## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR
11822231d0edbSAtari911- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day)
11823231d0edbSAtari911- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%`
11824231d0edbSAtari911- **Changed:** Add Event bar color from orange to dark green (#006400)
11825231d0edbSAtari911- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off)
11826231d0edbSAtari911- **Changed:** Add Event bar text now bright green (#00ff00) with green glow
11827231d0edbSAtari911- **Changed:** Add Event bar font size increased from 7px to 9px
11828231d0edbSAtari911- **Changed:** Add Event bar letter spacing increased to 0.5px
11829231d0edbSAtari911- **Improved:** Hover effect on Add Event bar now darker green (#004d00)
11830231d0edbSAtari911
11831231d0edbSAtari911### Color Bar Fix Details:
11832231d0edbSAtari911**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars
11833231d0edbSAtari911**Solution**: Applied same fix as clicked day events:
11834231d0edbSAtari911- Changed parent div: `align-items:start` → `align-items:stretch`
11835231d0edbSAtari911- Added `min-height:20px` to parent
11836231d0edbSAtari911- Changed bars: `height:100%` → `align-self:stretch`
11837231d0edbSAtari911- Bars now properly fill vertical space in ALL sections
11838231d0edbSAtari911
11839231d0edbSAtari911### Add Event Bar Changes:
11840231d0edbSAtari911**Before**:
11841231d0edbSAtari911- Background: Orange (#ff9800)
11842231d0edbSAtari911- Text: Black (#000)
11843231d0edbSAtari911- Height: 6px (text cut off)
11844231d0edbSAtari911- Font: 7px
11845231d0edbSAtari911
11846231d0edbSAtari911**After**:
11847231d0edbSAtari911- Background: Dark green (#006400)
11848231d0edbSAtari911- Text: Bright green (#00ff00) with green glow
11849231d0edbSAtari911- Height: 12px (text fully visible)
11850231d0edbSAtari911- Font: 9px
11851231d0edbSAtari911- Hover: Darker green (#004d00)
11852231d0edbSAtari911- Matrix-themed green aesthetic
11853231d0edbSAtari911
11854231d0edbSAtari911## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE
11855231d0edbSAtari911- **Fixed:** Event color bars now display correctly in clicked day events
11856231d0edbSAtari911- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events
11857231d0edbSAtari911- **Added:** Conflict badge (⚠) appears on right side of conflicting events
11858231d0edbSAtari911- **Updated:** Complete README.md rewrite with full Matrix theme documentation
11859231d0edbSAtari911- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering)
11860231d0edbSAtari911- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px`
11861231d0edbSAtari911- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning
11862231d0edbSAtari911
11863231d0edbSAtari911### Color Bar Fix:
11864231d0edbSAtari911**Problem**: Bars had `height:100%` but parent had no explicit height
11865231d0edbSAtari911**Solution**:
11866231d0edbSAtari911- Changed to `align-self:stretch` on bars
11867231d0edbSAtari911- Parent uses `align-items:stretch`
11868231d0edbSAtari911- Added `min-height:20px` to parent
11869231d0edbSAtari911- Bars now properly fill vertical space
11870231d0edbSAtari911
11871231d0edbSAtari911### Sorting Change:
11872231d0edbSAtari911**Before**: Timed events first → All-day events last
11873231d0edbSAtari911**After**: All-day events FIRST → Timed events chronologically
11874231d0edbSAtari911
11875231d0edbSAtari911**Example**:
11876231d0edbSAtari911```
11877231d0edbSAtari911Monday, Feb 5
11878231d0edbSAtari911├─ All Day - Project Deadline       ← All-day first
11879231d0edbSAtari911├─ 8:00 AM - Morning Standup        ← Earliest time
11880231d0edbSAtari911├─ 10:30 AM - Coffee with Bob
11881231d0edbSAtari911└─ 2:00 PM - Team Meeting           ← Latest time
11882231d0edbSAtari911```
11883231d0edbSAtari911
11884231d0edbSAtari911### Conflict Badge:
11885231d0edbSAtari911- Orange warning triangle (⚠) on right side
11886231d0edbSAtari911- 10px font size
11887231d0edbSAtari911- Only appears if `event.conflict` is true
11888231d0edbSAtari911- Title attribute shows "Time conflict detected"
11889231d0edbSAtari911- Small and unobtrusive
11890231d0edbSAtari911
11891231d0edbSAtari911### README Update:
11892231d0edbSAtari911- Complete rewrite with Matrix theme focus
11893231d0edbSAtari911- Full usage instructions for all features
11894231d0edbSAtari911- Admin interface documentation
11895231d0edbSAtari911- Outlook sync setup guide
11896231d0edbSAtari911- System monitoring details
11897231d0edbSAtari911- Troubleshooting section
11898231d0edbSAtari911- Color scheme reference
11899231d0edbSAtari911- File structure documentation
11900231d0edbSAtari911- Performance tips
11901231d0edbSAtari911- Security notes
11902231d0edbSAtari911- Quick start examples
11903231d0edbSAtari911
119041d05cddcSAtari911## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR
119051d05cddcSAtari911- **Added:** Events now sorted by time when clicking week grid days
119061d05cddcSAtari911- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px)
119071d05cddcSAtari911- **Improved:** Events with times appear first, sorted chronologically
119081d05cddcSAtari911- **Improved:** All-day events appear after timed events
119091d05cddcSAtari911- **Changed:** Add Event bar font size reduced to 7px (from 10px)
119101d05cddcSAtari911- **Changed:** Add Event bar now has 0 padding and fixed 6px height
119111d05cddcSAtari911
119121d05cddcSAtari911### Sorting Logic:
119131d05cddcSAtari911- Events with times sorted by time (earliest first)
119141d05cddcSAtari911- All-day events (no time) appear at the end
119151d05cddcSAtari911- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare
119161d05cddcSAtari911- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event
119171d05cddcSAtari911
119181d05cddcSAtari911### Add Event Bar Changes:
119191d05cddcSAtari911- **Height**: 6px (was ~12px with padding)
119201d05cddcSAtari911- **Padding**: 0 (was 4px top/bottom)
119211d05cddcSAtari911- **Font Size**: 7px (was 10px)
119221d05cddcSAtari911- **Letter Spacing**: 0.3px (was 0.5px)
119231d05cddcSAtari911- **Line Height**: 6px to match height
119241d05cddcSAtari911- **Vertical Align**: Middle for text centering
119251d05cddcSAtari911
119261d05cddcSAtari911## Version 3.10.4 (2026-02-06) - ADD EVENT BAR
119271d05cddcSAtari911- **Added:** Thin orange "Add Event" bar between header and week grid
119281d05cddcSAtari911- **Added:** Quick access to event creation from sidebar widget
119291d05cddcSAtari911- **Styled:** Sleek design with hover effects and glow
119301d05cddcSAtari911- **Interactive:** Clicks navigate to Manage Events tab in admin
119311d05cddcSAtari911- **Improved:** User workflow for adding events from sidebar
119321d05cddcSAtari911
119331d05cddcSAtari911### Visual Design:
119341d05cddcSAtari911- Orange background (#ff9800) matching Today section color
119351d05cddcSAtari911- 4px top/bottom padding for thin, sleek appearance
119361d05cddcSAtari911- Black text with white text-shadow for visibility
119371d05cddcSAtari911- Hover effect: Darkens to #ff7700 with enhanced glow
119381d05cddcSAtari911- Orange glow effect (box-shadow) matching Matrix theme
119391d05cddcSAtari911- Centered "+ ADD EVENT" text (10px, bold, letter-spacing)
119401d05cddcSAtari911
119411d05cddcSAtari911### Technical Changes:
119421d05cddcSAtari911- Added between header close and renderWeekGrid() call
119431d05cddcSAtari911- Inline onclick handler navigates to admin manage tab
119441d05cddcSAtari911- Inline onmouseover/onmouseout for hover effects
119451d05cddcSAtari911- Smooth 0.2s transition on all style changes
119461d05cddcSAtari911
119471d05cddcSAtari911## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION
119481d05cddcSAtari911- **Changed:** Update Plugin tab is now the default tab when opening admin
119491d05cddcSAtari911- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab
119501d05cddcSAtari911- **Improved:** Clear Cache button now larger and more prominent with helpful description
119511d05cddcSAtari911- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events
119521d05cddcSAtari911- **Removed:** Debug console.log statements from day event display
119531d05cddcSAtari911- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab
119541d05cddcSAtari911
119551d05cddcSAtari911### UI Changes:
119561d05cddcSAtari911- Update Plugin tab opens by default (was Config/Outlook Sync tab)
119571d05cddcSAtari911- Clear Cache button prominently displayed at top of Update Plugin tab
119581d05cddcSAtari911- Orange ��️ button (10px 20px padding) with confirmation dialog
119591d05cddcSAtari911- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin"
119601d05cddcSAtari911- Success/error messages display on Update Plugin tab after cache clear
119611d05cddcSAtari911- Tab navigation reordered to put Update first
119621d05cddcSAtari911
119631d05cddcSAtari911### Technical Changes:
119641d05cddcSAtari911- Default tab changed from 'config' to 'update' in html() method
119651d05cddcSAtari911- Tab navigation HTML reordered to show Update Plugin tab first
119661d05cddcSAtari911- clearCache() method now redirects with 'update' tab parameter
119671d05cddcSAtari911- Removed Clear Cache button from renderConfigTab()
119681d05cddcSAtari911- Added Clear Cache button to renderUpdateTab() with message display
119691d05cddcSAtari911
119701d05cddcSAtari911## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX
119711d05cddcSAtari911- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days
119721d05cddcSAtari911- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML
119731d05cddcSAtari911- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields
119741d05cddcSAtari911- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events
119751d05cddcSAtari911
119761d05cddcSAtari911### Technical Changes:
119771d05cddcSAtari911- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render()
119781d05cddcSAtari911- Events added to weekEvents now include pre-rendered HTML versions
119791d05cddcSAtari911- title_html and description_html fields populated before json_encode()
119801d05cddcSAtari911- JavaScript now receives properly formatted HTML content
119811d05cddcSAtari911
119821d05cddcSAtari911## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON
119831d05cddcSAtari911- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123)
119841d05cddcSAtari911- **Fixed:** HTML event handlers now call correctly sanitized function names
119851d05cddcSAtari911- **Fixed:** Weather temperature now updates correctly in sidebar widget
119861d05cddcSAtari911- **Added:** Weather update function to sidebar widget JavaScript
119871d05cddcSAtari911- **Added:** "Clear Cache" button in admin panel for easy cache refresh
119881d05cddcSAtari911- **Added:** Default weather location set to Irvine, CA when geolocation unavailable
119891d05cddcSAtari911- **Improved:** All tooltip functions now work correctly on system status bars
119901d05cddcSAtari911
119911d05cddcSAtari911### Technical Changes:
119921d05cddcSAtari911- Changed tooltip function names to use $jsCalId instead of $calId
119931d05cddcSAtari911- Changed HTML onmouseover/onmouseout to use $jsCalId
119941d05cddcSAtari911- Added updateWeather() function to sidebar widget
119951d05cddcSAtari911- Added getWeatherIcon() function to sidebar widget
119961d05cddcSAtari911- Added clearCache() method in admin.php
119971d05cddcSAtari911- Added recursiveDelete() helper method in admin.php
119981d05cddcSAtari911- Admin UI now has ��️ Clear Cache button alongside Export/Import
119991d05cddcSAtari911
120001d05cddcSAtari911## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES
120011d05cddcSAtari911- **Fixed:** JavaScript syntax error "Missing initializer in const declaration"
120021d05cddcSAtari911- **Fixed:** Event links and formatting not displaying in clicked day events
120031d05cddcSAtari911- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores
120041d05cddcSAtari911- **Changed:** Event titles now use `title_html` field to preserve HTML formatting
120051d05cddcSAtari911- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting
120061d05cddcSAtari911- **Improved:** All JavaScript variable names now use valid syntax
120071d05cddcSAtari911- **Improved:** Links, bold, italic, and other HTML formatting preserved in events
120081d05cddcSAtari911
120091d05cddcSAtari911### Technical Changes:
120101d05cddcSAtari911- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);`
120111d05cddcSAtari911- JavaScript variables now use underscores instead of dashes
120121d05cddcSAtari911- Event HTML rendering preserves DokuWiki formatting
120131d05cddcSAtari911- Fixed "showTooltip_sidebar is not defined" errors
120141d05cddcSAtari911- Fixed "showDayEvents_cal is not defined" errors
120151d05cddcSAtari911
120161d05cddcSAtari911## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX
120171d05cddcSAtari911- **Fixed:** Critical JavaScript loading order issue causing ReferenceError
120181d05cddcSAtari911- **Fixed:** Functions now defined BEFORE HTML that uses them
120191d05cddcSAtari911- **Changed:** Consolidated all JavaScript into single comprehensive script block
120201d05cddcSAtari911- **Removed:** ~290 lines of duplicate JavaScript code
120211d05cddcSAtari911- **Added:** Shared state management with `sharedState_[calId]` object
120221d05cddcSAtari911- **Improved:** System tooltip functions now work correctly
120231d05cddcSAtari911- **Improved:** Week grid click events now work correctly
120241d05cddcSAtari911
120251d05cddcSAtari911### Technical Changes:
120261d05cddcSAtari911- Moved all JavaScript to beginning of widget (before HTML)
120271d05cddcSAtari911- Removed duplicate script blocks
120281d05cddcSAtari911- Unified tooltip and stats functions
120291d05cddcSAtari911- Shared latestStats and cpuHistory state
120301d05cddcSAtari911- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined"
120311d05cddcSAtari911
120321d05cddcSAtari911## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS
120331d05cddcSAtari911- **Added:** Dual color bars on events (section color + event color)
120341d05cddcSAtari911- **Added:** Click week grid days to view events (replaced hover tooltips)
120351d05cddcSAtari911- **Added:** Expandable section below week grid for selected day events
120361d05cddcSAtari911- **Added:** Blue theme for selected day section
120371d05cddcSAtari911- **Changed:** Week grid days now clickable instead of tooltips
120381d05cddcSAtari911- **Changed:** Section bar: 4px wide (left)
120391d05cddcSAtari911- **Changed:** Event bar: 3px wide (right)
120401d05cddcSAtari911- **Increased:** Gap between color bars from 3px to 6px
120411d05cddcSAtari911- **Improved:** Click is more reliable and mobile-friendly than hover tooltips
120421d05cddcSAtari911
120431d05cddcSAtari911### Visual Changes:
120441d05cddcSAtari911- Each event shows TWO color bars side-by-side
120451d05cddcSAtari911- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue)
120461d05cddcSAtari911- Right bar (3px): Individual event's assigned color
120471d05cddcSAtari911- Click any day in week grid to expand event list
120481d05cddcSAtari911- X button to close selected day events
120491d05cddcSAtari911
120501d05cddcSAtari911## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY
120511d05cddcSAtari911- **Increased:** Event color bar width from 2px to 3px
120521d05cddcSAtari911- **Increased:** Gap between section and event bars from 3px to 6px
120531d05cddcSAtari911- **Improved:** Event color bars now more visible alongside section bars
120541d05cddcSAtari911- **Note:** Dual color bar system already in place from v3.9.6
120551d05cddcSAtari911
120561d05cddcSAtari911## Version 3.9.6 (2026-02-05) - UI REFINEMENTS
120571d05cddcSAtari911- **Changed:** Date in Important Events moved below event name (was above)
120581d05cddcSAtari911- **Changed:** Section headers now 9px font size (was 10px)
120591d05cddcSAtari911- **Changed:** Section headers now normal case (was ALL CAPS)
120601d05cddcSAtari911- **Changed:** Letter spacing reduced from 0.8px to 0.3px
120611d05cddcSAtari911- **Improved:** More natural reading flow with date below event name
120621d05cddcSAtari911- **Improved:** Cleaner, more subtle section headers
120631d05cddcSAtari911
120641d05cddcSAtari911### Header Changes:
120651d05cddcSAtari911- "TODAY" → "Today"
120661d05cddcSAtari911- "TOMORROW" → "Tomorrow"
120671d05cddcSAtari911- "IMPORTANT EVENTS" → "Important Events"
120681d05cddcSAtari911
120691d05cddcSAtari911## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN
120701d05cddcSAtari911- **Redesigned:** Complete overhaul of `sidebar` parameter
120711d05cddcSAtari911- **Added:** Compact week-at-a-glance itinerary view (200px wide)
120721d05cddcSAtari911- **Added:** Live clock widget at top of sidebar
120731d05cddcSAtari911- **Added:** 7-cell week grid showing event bars
120741d05cddcSAtari911- **Added:** Today section with orange header and left border
120751d05cddcSAtari911- **Added:** Tomorrow section with green header and left border
120761d05cddcSAtari911- **Added:** Important Events section with purple header and left border
120771d05cddcSAtari911- **Added:** Admin setting to configure important namespaces
120781d05cddcSAtari911- **Added:** Time conflict badges in sidebar events
120791d05cddcSAtari911- **Added:** Task checkboxes in sidebar events
120801d05cddcSAtari911- **Changed:** Sidebar now optimized for narrow spaces (200px)
120811d05cddcSAtari911- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets
120821d05cddcSAtari911
120831d05cddcSAtari911### New Features:
120841d05cddcSAtari911- Clock updates every second showing current time
120851d05cddcSAtari911- Week grid shows Mon-Sun with colored event bars
120861d05cddcSAtari911- Today/Tomorrow sections show full event details
120871d05cddcSAtari911- Important events highlighted in purple (configurable namespaces)
120881d05cddcSAtari911- All badges (conflict, time, etc.) shown in compact format
120891d05cddcSAtari911- Automatic time conflict detection
120901d05cddcSAtari911
120911d05cddcSAtari911## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP
120921d05cddcSAtari911- **Removed:** 16 unused/debug/backup files
120931d05cddcSAtari911- **Removed:** 69 console.log() debug statements
120941d05cddcSAtari911- **Removed:** 3 orphaned object literals from console.log removal
120951d05cddcSAtari911- **Removed:** Temporary comments and markers
120961d05cddcSAtari911- **Fixed:** JavaScript syntax errors from cleanup
120971d05cddcSAtari911- **Improved:** Code quality and maintainability
120981d05cddcSAtari911- **Improved:** Reduced plugin size by removing unnecessary files
120991d05cddcSAtari911- **Status:** Production-ready, fully cleaned codebase
121001d05cddcSAtari911
121011d05cddcSAtari911### Files Removed:
121021d05cddcSAtari911- style.css.backup, script.js.backup
121031d05cddcSAtari911- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php
121041d05cddcSAtari911- debug_events.php, debug_html.php, cleanup_events.php
121051d05cddcSAtari911- fix_corrupted_json.php, fix_wildcard_namespaces.php
121061d05cddcSAtari911- find_outlook_duplicates.php, update_namespace.php
121071d05cddcSAtari911- validate_calendar_json.php, admin.js
121081d05cddcSAtari911- test_date_field.html
121091d05cddcSAtari911
121101d05cddcSAtari911## Version 3.7.5 (2026-02-05)
121111d05cddcSAtari911- **Fixed:** PHP syntax error (duplicate foreach loop removed)
121121d05cddcSAtari911- **Fixed:** Time variable handling in grace period logic
121131d05cddcSAtari911
121141d05cddcSAtari911## Version 3.7.4 (2026-02-05)
121151d05cddcSAtari911- **Added:** 15-minute grace period for timed events
121161d05cddcSAtari911- **Changed:** Events with times now stay visible for 15 minutes after their start time
121171d05cddcSAtari911- **Changed:** Prevents events from immediately disappearing when they start
121181d05cddcSAtari911- **Improved:** Better user experience for ongoing events
121191d05cddcSAtari911- **Fixed:** Events from earlier today now properly handled with grace period
121201d05cddcSAtari911
121211d05cddcSAtari911## Version 3.7.3 (2026-02-05)
121221d05cddcSAtari911- **Changed:** Complete redesign of cleanup section for compact, sleek layout
121231d05cddcSAtari911- **Changed:** Radio buttons now in single row at top
121241d05cddcSAtari911- **Changed:** All options visible with grayed-out inactive states (opacity 0.4)
121251d05cddcSAtari911- **Changed:** Inline controls - no more grid layout or wrapper boxes
121261d05cddcSAtari911- **Changed:** Namespace filter now compact single-line input
121271d05cddcSAtari911- **Changed:** Smaller buttons and tighter spacing throughout
121281d05cddcSAtari911- **Improved:** More professional, space-efficient design
121291d05cddcSAtari911
121301d05cddcSAtari911## Version 3.7.2 (2026-02-04)
121311d05cddcSAtari911- **Fixed:** Strange boxes under cleanup options - now properly hidden
121321d05cddcSAtari911- **Changed:** Unified color scheme across all admin sections
121331d05cddcSAtari911- **Changed:** Green (#00cc07) - Primary actions and main theme
121341d05cddcSAtari911- **Changed:** Orange (#ff9800) - Warnings and cleanup features
121351d05cddcSAtari911- **Changed:** Purple (#7b1fa2) - Secondary actions and accents
121361d05cddcSAtari911- **Improved:** Consistent visual design throughout admin interface
121371d05cddcSAtari911
121381d05cddcSAtari911## Version 3.7.1 (2026-02-04)
121391d05cddcSAtari911- **Fixed:** Cleanup section background changed from orange to white
121401d05cddcSAtari911- **Fixed:** Event cleanup now properly scans all calendar directories
121411d05cddcSAtari911- **Added:** Debug info display when preview finds no events
121421d05cddcSAtari911- **Improved:** Better directory scanning logic matching other features
121431d05cddcSAtari911
121441d05cddcSAtari911## Version 3.7.0 (2026-02-04)
121451d05cddcSAtari911- **Added:** Event cleanup feature in Events Manager
121461d05cddcSAtari911- **Added:** Delete old events by age (months/years old)
121471d05cddcSAtari911- **Added:** Delete events by status (completed tasks, past events)
121481d05cddcSAtari911- **Added:** Delete events by date range
121491d05cddcSAtari911- **Added:** Namespace filter for targeted cleanup
121501d05cddcSAtari911- **Added:** Preview function to see what will be deleted
121511d05cddcSAtari911- **Added:** Automatic backup creation before cleanup
121521d05cddcSAtari911- **Changed:** Reduced changelog viewer height to 100px (was 400px)
121531d05cddcSAtari911
121541d05cddcSAtari911## Version 3.6.3 (2026-02-04)
121551d05cddcSAtari911- **Fixed:** Conflict tooltips now work properly after navigating between months
121561d05cddcSAtari911- **Added:** Changelog display in Update Plugin tab
121571d05cddcSAtari911- **Added:** CHANGELOG.md file with version history
121581d05cddcSAtari911- **Improved:** Changelog shows last 10 versions with color-coded change types
121591d05cddcSAtari911- **Fixed:** Removed debug console.log statements
121601d05cddcSAtari911
121611d05cddcSAtari911## Version 3.6.2 (2026-02-04)
121621d05cddcSAtari911- **Fixed:** Month title now updates correctly when navigating between months
121631d05cddcSAtari911- **Changed:** All eventpanel header elements reduced by 10% for more compact design
121641d05cddcSAtari911- **Changed:** Reduced header height from 78px to 70px
121651d05cddcSAtari911
121661d05cddcSAtari911## Version 3.6.1 (2026-02-04)
121671d05cddcSAtari911- **Changed:** Complete redesign of eventpanel header with practical two-row layout
121681d05cddcSAtari911- **Fixed:** Improved layout for narrow widths (~500px)
121691d05cddcSAtari911- **Changed:** Simplified color scheme (removed purple gradient)
121701d05cddcSAtari911
121711d05cddcSAtari911## Version 3.6.0 (2026-02-04)
121721d05cddcSAtari911- **Changed:** Redesigned eventpanel header with gradient background
121731d05cddcSAtari911- **Changed:** Consolidated multiple header rows into compact single-row design
121741d05cddcSAtari911
121751d05cddcSAtari911## Version 3.5.1 (2026-02-04)
121761d05cddcSAtari911- **Changed:** Moved event search bar into header row next to + Add button
121771d05cddcSAtari911- **Improved:** More compact UI with search integrated into header
121781d05cddcSAtari911
121791d05cddcSAtari911## Version 3.5.0 (2026-02-04)
121801d05cddcSAtari911- **Added:** Event search functionality in sidebar and eventpanel
121811d05cddcSAtari911- **Added:** Real-time filtering as you type
121821d05cddcSAtari911- **Added:** Clear button (✕) appears when searching
121831d05cddcSAtari911- **Added:** "No results" message when search returns nothing
121841d05cddcSAtari911
121851d05cddcSAtari911## Version 3.4.7 (2026-02-04)
121861d05cddcSAtari911- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding)
121871d05cddcSAtari911- **Fixed:** Removed debug logging from console
121881d05cddcSAtari911- **Changed:** Updated export version number to match plugin version
121891d05cddcSAtari911
121901d05cddcSAtari911## Version 3.4.6 (2026-02-04)
121911d05cddcSAtari911- **Added:** Debug logging to diagnose conflict detection issues
121921d05cddcSAtari911- **Development:** Extensive console logging for troubleshooting
121931d05cddcSAtari911
121941d05cddcSAtari911## Version 3.4.5 (2026-02-04)
121951d05cddcSAtari911- **Added:** Debug logging to showDayPopup and conflict detection
121961d05cddcSAtari911- **Development:** Added logging to trace conflict detection flow
121971d05cddcSAtari911
121981d05cddcSAtari911## Version 3.4.4 (2026-02-04)
121991d05cddcSAtari911- **Fixed:** Conflict detection now persists across page refreshes (PHP-based)
122001d05cddcSAtari911- **Fixed:** Conflict tooltips now appear on hover
122011d05cddcSAtari911- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation)
122021d05cddcSAtari911- **Added:** Conflict badges in both future and past events sections
122031d05cddcSAtari911
122041d05cddcSAtari911## Version 3.4.3 (2026-02-04)
122051d05cddcSAtari911- **Added:** Custom styled conflict tooltips with hover functionality
122061d05cddcSAtari911- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2)
122071d05cddcSAtari911- **Improved:** Beautiful tooltip design with orange header and clean formatting
122081d05cddcSAtari911
122091d05cddcSAtari911## Version 3.4.2 (2026-02-04)
122101d05cddcSAtari911- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3)
122111d05cddcSAtari911
122121d05cddcSAtari911## Version 3.4.1 (2026-02-04)
122131d05cddcSAtari911- **Fixed:** End time field now properly saves to database
122141d05cddcSAtari911- **Fixed:** End time dropdown now filters to show only valid times after start time
122151d05cddcSAtari911- **Added:** Smart dropdown behavior - expands on focus, filters invalid options
122161d05cddcSAtari911- **Improved:** End time auto-suggests +1 hour when start time selected
122171d05cddcSAtari911
122181d05cddcSAtari911## Version 3.4.0 (2026-02-04)
122191d05cddcSAtari911- **Added:** End time support for events (start and end times)
122201d05cddcSAtari911- **Added:** Automatic time conflict detection
122211d05cddcSAtari911- **Added:** Conflict warning badges (⚠️) on events with overlapping times
122221d05cddcSAtari911- **Added:** Conflict tooltips showing which events conflict
122231d05cddcSAtari911- **Added:** Visual conflict indicators with pulse animation
122241d05cddcSAtari911- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM")
122251d05cddcSAtari911
122261d05cddcSAtari911## Version 3.3.77 (2026-02-04)
122271d05cddcSAtari911- **Fixed:** Namespace badge onclick handlers restored after clearing filter
122281d05cddcSAtari911- **Fixed:** Namespace filtering works infinitely (filter → clear → filter)
122291d05cddcSAtari911
122301d05cddcSAtari911## Version 3.3.76 (2026-02-04)
122311d05cddcSAtari911- **Fixed:** Namespace badges now clickable after clearing namespace filter
122321d05cddcSAtari911
122331d05cddcSAtari911## Version 3.3.75 (2026-02-04)
122341d05cddcSAtari911- **Fixed:** Form resubmission warnings eliminated
122351d05cddcSAtari911- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303
122361d05cddcSAtari911- **Changed:** All admin redirects now use absolute URLs
122371d05cddcSAtari911
122381d05cddcSAtari911## Version 3.3.74 (2026-02-04)
122391d05cddcSAtari911- **Fixed:** Clearing namespace filter now restores original namespace instead of default
122401d05cddcSAtari911- **Added:** data-original-namespace attribute to preserve initial namespace setting
122411d05cddcSAtari911- **Improved:** Console logging for namespace filter debugging
122421d05cddcSAtari911
122431d05cddcSAtari911## Version 3.3.73 (2026-02-03)
122441d05cddcSAtari911- **Added:** Dynamic namespace filtering banner with clear button
122451d05cddcSAtari911- **Fixed:** JavaScript function accessibility issues
122461d05cddcSAtari911- **Fixed:** Namespace badge click handlers in event lists
122471d05cddcSAtari911- **Improved:** Persistent namespace filtering across views
122481d05cddcSAtari911
122491d05cddcSAtari911## Earlier Versions
122501d05cddcSAtari911See previous transcripts for complete history through v3.3.73, including:
122511d05cddcSAtari911- Recurring events with Outlook sync
122521d05cddcSAtari911- Multi-namespace support
122531d05cddcSAtari911- Event categories and mapping
122541d05cddcSAtari911- Backup/restore functionality
122551d05cddcSAtari911- System statistics bar
122561d05cddcSAtari911- Namespace selector with fuzzy search
122571d05cddcSAtari911- Events Manager with import/export
122581d05cddcSAtari911- And much more...
12259