xref: /plugin/calendar/CHANGELOG.md (revision 815440faa45e800c80f925739a5d3cff27fa36d2)
11d05cddcSAtari911# Calendar Plugin Changelog
27e8ea635SAtari911
3*815440faSAtari911## Version 7.0.8 (2026-02-15) - TIMEZONE FIX
4*815440faSAtari911
5*815440faSAtari911### Bug Fix: Date Shift in Non-UTC Timezones
6*815440faSAtari911Fixed critical bug where events appeared shifted by one day in timezones ahead of UTC (e.g., Europe/Prague UTC+1).
7*815440faSAtari911
8*815440faSAtari911**Root Cause:**
9*815440faSAtari911JavaScript's `toISOString()` converts dates to UTC, so local midnight (00:00) in Prague becomes 23:00 UTC of the *previous day*. When split to get YYYY-MM-DD, this returns the wrong date.
10*815440faSAtari911
11*815440faSAtari911**Fix:**
12*815440faSAtari911Added `formatLocalDate(date)` helper function that formats dates using local time methods (`getFullYear()`, `getMonth()`, `getDate()`) instead of UTC conversion.
13*815440faSAtari911
14*815440faSAtari911**Affected Areas (now fixed):**
15*815440faSAtari911- Multi-day event spanning (line 385)
16*815440faSAtari911- Today string calculation in event list (line 566)
17*815440faSAtari911- Past event detection in event items (line 1022)
18*815440faSAtari911
19*815440faSAtari911### Files Modified
20*815440faSAtari911- `calendar-main.js` - Added `formatLocalDate()` helper, replaced 3 `toISOString().split('T')[0]` calls
21*815440faSAtari911
22*815440faSAtari911---
23*815440faSAtari911
24*815440faSAtari911## Version 7.0.7 (2026-02-15) - GOOGLE CALENDAR SYNC
25*815440faSAtari911
26*815440faSAtari911### Google Calendar Integration
27*815440faSAtari911- Two-way sync with Google Calendar via OAuth 2.0
28*815440faSAtari911- Import events from Google Calendar to DokuWiki
29*815440faSAtari911- Export events from DokuWiki to Google Calendar
30*815440faSAtari911- Support for all-day and timed events
31*815440faSAtari911- Multi-day event handling
32*815440faSAtari911- Color mapping between Google and DokuWiki
33*815440faSAtari911- Duplicate detection prevents re-importing same events
34*815440faSAtari911- Select which Google calendar to sync with
35*815440faSAtari911- Admin panel UI for configuration and sync controls
36*815440faSAtari911
37*815440faSAtari911### Setup Requirements
38*815440faSAtari911- Google Cloud Console project
39*815440faSAtari911- Google Calendar API enabled
40*815440faSAtari911- OAuth 2.0 Web Application credentials
41*815440faSAtari911- Redirect URI configuration
42*815440faSAtari911
43*815440faSAtari911### New Files
44*815440faSAtari911- `classes/GoogleCalendarSync.php` - OAuth and Calendar API integration
45*815440faSAtari911
46*815440faSAtari911### Files Modified
47*815440faSAtari911- `action.php` - Added Google sync action handlers
48*815440faSAtari911- `admin.php` - Added Google sync admin tab
49*815440faSAtari911
50*815440faSAtari911---
51*815440faSAtari911
52*815440faSAtari911## Version 7.0.6 (2026-02-15) - ACCESSIBILITY IMPROVEMENTS
53*815440faSAtari911
54*815440faSAtari911### Screen Reader Support
55*815440faSAtari911- Added ARIA live region for dynamic announcements
56*815440faSAtari911- Announces "Event created", "Event updated", "Event deleted" on actions
57*815440faSAtari911- Announces "Task marked complete/incomplete" on toggle
58*815440faSAtari911- Screen readers receive feedback without visual alerts
59*815440faSAtari911
60*815440faSAtari911### Debug Mode
61*815440faSAtari911- Added `CALENDAR_DEBUG` flag for JavaScript console logging
62*815440faSAtari911- `calendarLog()` and `calendarError()` helper functions
63*815440faSAtari911- Debug output disabled by default
64*815440faSAtari911
65*815440faSAtari911### Code Quality
66*815440faSAtari911- Consistent error handling patterns
67*815440faSAtari911- Better separation of concerns
68*815440faSAtari911
69*815440faSAtari911### Files Modified
70*815440faSAtari911- `calendar-main.js` - ARIA live region, debug helpers, announcements
71*815440faSAtari911
72*815440faSAtari911---
73*815440faSAtari911
74*815440faSAtari911## Version 7.0.5 (2026-02-15) - AUDIT LOGGING & ACCESSIBILITY
75*815440faSAtari911
76*815440faSAtari911### Audit Logging
77*815440faSAtari911- New `AuditLogger.php` class for compliance logging
78*815440faSAtari911- Logs all event modifications: create, update, delete, move, task toggle
79*815440faSAtari911- JSON-formatted log files with timestamps, user info, and IP addresses
80*815440faSAtari911- Automatic log rotation (5MB max, 10 files retained)
81*815440faSAtari911- Log entries include: namespace, date, event ID, title, and change details
82*815440faSAtari911
83*815440faSAtari911### Keyboard Navigation (Accessibility)
84*815440faSAtari911- Arrow keys navigate between calendar days
85*815440faSAtari911- Enter/Space activates focused day (opens popup)
86*815440faSAtari911- Arrow Up/Down navigates between events in popups
87*815440faSAtari911- Enter on event opens edit dialog
88*815440faSAtari911- Delete/Backspace on event triggers delete
89*815440faSAtari911- Escape closes all dialogs, popups, and dropdowns
90*815440faSAtari911- Added `tabindex` and `role` attributes for screen readers
91*815440faSAtari911- Added `aria-label` descriptions for calendar days and events
92*815440faSAtari911
93*815440faSAtari911### CSS Focus States
94*815440faSAtari911- Visible focus indicators on calendar days
95*815440faSAtari911- Focus styles on event items in popups
96*815440faSAtari911- Focus styles on custom date/time pickers
97*815440faSAtari911- Uses `focus-visible` for keyboard-only focus rings
98*815440faSAtari911
99*815440faSAtari911### Files Added
100*815440faSAtari911- `classes/AuditLogger.php` - Compliance audit logging
101*815440faSAtari911
102*815440faSAtari911### Files Modified
103*815440faSAtari911- `action.php` - Integrated audit logging for all event operations
104*815440faSAtari911- `calendar-main.js` - Extended keyboard navigation
105*815440faSAtari911- `syntax.php` - Added accessibility attributes to calendar cells
106*815440faSAtari911- `style.css` - Added focus state styles
107*815440faSAtari911
108*815440faSAtari911---
109*815440faSAtari911
110*815440faSAtari911## Version 7.0.4 (2026-02-15) - CODE CLEANUP
111*815440faSAtari911
112*815440faSAtari911### Code Cleanup
113*815440faSAtari911- Removed unused `calendarDebounce()` and `calendarThrottle()` utility functions
114*815440faSAtari911- Removed duplicate `updateEndTimeOptions()` function definition
115*815440faSAtari911- Removed unused `_calendarSelectOpen` tracking variable
116*815440faSAtari911- Removed orphaned `.input-date` and `.time-select` CSS (no longer using native inputs)
117*815440faSAtari911- Consolidated legacy function calls
118*815440faSAtari911
119*815440faSAtari911### Improvements
120*815440faSAtari911- End date picker now opens to start date's month when no end date is selected
121*815440faSAtari911- End time picker now scrolls to first available time after start time
122*815440faSAtari911
123*815440faSAtari911### Files Modified
124*815440faSAtari911- `calendar-main.js` - Removed ~40 lines of dead code
125*815440faSAtari911- `style.css` - Removed ~25 lines of unused CSS
126*815440faSAtari911
127*815440faSAtari911---
128*815440faSAtari911
129*815440faSAtari911## Version 7.0.3 (2026-02-15) - CUSTOM DATE & TIME PICKERS
130*815440faSAtari911
131*815440faSAtari911### Complete Replacement of Native Browser Controls
132*815440faSAtari911Both date inputs and time selects have been replaced with custom, lightweight pickers to eliminate all browser-related performance issues.
133*815440faSAtari911
134*815440faSAtari911#### Custom Date Picker
135*815440faSAtari911- **Mini calendar grid** - Clean monthly view with day selection
136*815440faSAtari911- **Month navigation** - Previous/next buttons for quick browsing
137*815440faSAtari911- **Visual indicators** - Today highlighted, selected date marked
138*815440faSAtari911- **End date validation** - Cannot select end date before start date
139*815440faSAtari911- **Clear button** - Easy removal of optional end date
140*815440faSAtari911
141*815440faSAtari911#### Custom Time Picker (from v7.0.2)
142*815440faSAtari911- **Period groupings** - Morning, Afternoon, Evening, Night
143*815440faSAtari911- **Lazy loading** - Options built only when dropdown opens
144*815440faSAtari911- **Smart filtering** - End times after start time only
145*815440faSAtari911
146*815440faSAtari911#### Code Cleanup
147*815440faSAtari911- Removed old `setupSelectTracking()` function (was causing conflicts)
148*815440faSAtari911- Removed redundant event listener code
149*815440faSAtari911- Unified dropdown close handling for all picker types
150*815440faSAtari911- No native `<input type="date">` or `<select>` elements in event dialog
151*815440faSAtari911
152*815440faSAtari911### Files Modified
153*815440faSAtari911- `syntax.php` - New date picker HTML structure
154*815440faSAtari911- `calendar-main.js` - Custom date picker JavaScript, cleanup
155*815440faSAtari911- `style.css` - Date picker calendar grid styles
156*815440faSAtari911
157*815440faSAtari911---
158*815440faSAtari911
159*815440faSAtari911## Version 7.0.2 (2026-02-15) - CUSTOM TIME PICKER
160*815440faSAtari911
161*815440faSAtari911### Major Fix: Replaced Native Selects with Custom Time Pickers
162*815440faSAtari911The native `<select>` element with 97 time options was causing browser freezes when opening. This version replaces them with lightweight custom dropdown pickers.
163*815440faSAtari911
164*815440faSAtari911#### New Custom Time Picker Features
165*815440faSAtari911- **Instant opening** - No browser rendering delay
166*815440faSAtari911- **Lazy-loaded options** - Dropdown HTML built only when clicked
167*815440faSAtari911- **Period grouping** - Morning, Afternoon, Evening, Night sections
168*815440faSAtari911- **Smart filtering** - End time options automatically hide times before start time
169*815440faSAtari911- **Visual feedback** - Selected time highlighted, disabled times grayed out
170*815440faSAtari911
171*815440faSAtari911#### Technical Changes
172*815440faSAtari911- Replaced `<select>` elements with `<button>` + `<div>` dropdown
173*815440faSAtari911- Hidden `<input>` stores actual value for form submission
174*815440faSAtari911- Time data pre-computed once, reused for all pickers
175*815440faSAtari911- Event delegation for option clicks
176*815440faSAtari911- Automatic cleanup when clicking outside
177*815440faSAtari911
178*815440faSAtari911#### Removed
179*815440faSAtari911- Native `<select>` time pickers (caused 2600ms+ freezes)
180*815440faSAtari911- `onchange` handlers from date inputs (handled in JS now)
181*815440faSAtari911- Old `setupSelectTracking()` function
182*815440faSAtari911
183*815440faSAtari911### Files Modified
184*815440faSAtari911- `syntax.php` - New time picker HTML structure
185*815440faSAtari911- `calendar-main.js` - Custom time picker JavaScript
186*815440faSAtari911- `style.css` - Time picker dropdown styles
187*815440faSAtari911
188*815440faSAtari911---
189*815440faSAtari911
190*815440faSAtari911## Version 7.0.1 (2026-02-15) - SELECTOR FLICKER FIX
191*815440faSAtari911
192*815440faSAtari911### Bug Fixes
193*815440faSAtari911- **Fixed selector flicker on subsequent clicks** - Time/date selectors no longer flash or lag after first use
194*815440faSAtari911  - New `setupSelectTracking()` prevents DOM updates while selector is open
195*815440faSAtari911  - Tracks mousedown/focus/blur/change events on all form inputs
196*815440faSAtari911  - Uses `requestAnimationFrame` for smooth visual updates
197*815440faSAtari911  - Added state caching to skip redundant DOM manipulation
198*815440faSAtari911
199*815440faSAtari911### CSS Improvements
200*815440faSAtari911- Changed `transition: all` to specific properties on `.input-sleek` elements
201*815440faSAtari911- Added `transition: none` for select options
202*815440faSAtari911- Prevents browser reflow issues during dropdown rendering
203*815440faSAtari911
204*815440faSAtari911---
205*815440faSAtari911
206*815440faSAtari911## Version 7.0.0 (2026-02-15) - STABILITY & PERFORMANCE RELEASE
207*815440faSAtari911
208*815440faSAtari911### Major Improvements
209*815440faSAtari911
210*815440faSAtari911#### File Locking & Atomic Writes (Critical Stability Fix)
211*815440faSAtari911- **New `CalendarFileHandler` class** with atomic file operations
212*815440faSAtari911- Prevents data corruption from concurrent event saves
213*815440faSAtari911- Uses temp file + atomic rename strategy for safe writes
214*815440faSAtari911- Implements `flock()` for proper file locking during reads/writes
215*815440faSAtari911- Graceful handling of lock acquisition failures with retries
216*815440faSAtari911
217*815440faSAtari911#### Caching Layer (Performance Improvement)
218*815440faSAtari911- **New `CalendarEventCache` class** for event data caching
219*815440faSAtari911- 5-minute TTL reduces unnecessary JSON file reads
220*815440faSAtari911- In-memory caching for current request
221*815440faSAtari911- Automatic cache invalidation on event modifications
222*815440faSAtari911- Cache cleanup for expired entries
223*815440faSAtari911
224*815440faSAtari911#### Rate Limiting (Security Enhancement)
225*815440faSAtari911- **New `CalendarRateLimiter` class** for AJAX endpoint protection
226*815440faSAtari911- 60 requests/minute for read actions
227*815440faSAtari911- 30 requests/minute for write actions (more restrictive)
228*815440faSAtari911- Per-user tracking (falls back to IP for anonymous)
229*815440faSAtari911- Rate limit headers in responses (X-RateLimit-Limit, X-RateLimit-Remaining)
230*815440faSAtari911- Automatic cleanup of old rate limit data
231*815440faSAtari911
232*815440faSAtari911#### Code Refactoring
233*815440faSAtari911- **New `CalendarEventManager` class** consolidating CRUD operations
234*815440faSAtari911- New `classes/` directory for organized code structure
235*815440faSAtari911- Reduced code duplication across files
236*815440faSAtari911- Improved separation of concerns
237*815440faSAtari911- Better maintainability for future development
238*815440faSAtari911
239*815440faSAtari911#### JavaScript Performance Fixes (Dialog Responsiveness)
240*815440faSAtari911- **Fixed slow time selector** - End time dropdown now opens instantly
241*815440faSAtari911  - Replaced `Array.from().forEach()` with direct `options` loop (97 options)
242*815440faSAtari911  - Single-pass algorithm instead of multiple iterations
243*815440faSAtari911  - Uses `hidden` property instead of `style.display` manipulation
244*815440faSAtari911- **Fixed event listener accumulation** - Dialog inputs no longer slow down over time
245*815440faSAtari911  - Added `data-initialized` flag to prevent re-binding listeners
246*815440faSAtari911  - Namespace search only initializes once per calendar
247*815440faSAtari911- **Fixed selector flicker on subsequent clicks**
248*815440faSAtari911  - New `setupSelectTracking()` function prevents DOM updates while selector is open
249*815440faSAtari911  - Tracks mousedown/focus/blur/change events on time and date inputs
250*815440faSAtari911  - Uses `requestAnimationFrame` instead of `setTimeout` for visual updates
251*815440faSAtari911  - Added state caching to skip redundant DOM updates
252*815440faSAtari911- **Fixed CSS transition interference**
253*815440faSAtari911  - Changed `transition: all` to specific properties on form inputs
254*815440faSAtari911  - Added explicit `transition: none` for select options
255*815440faSAtari911  - Prevents browser reflow issues during dropdown rendering
256*815440faSAtari911
257*815440faSAtari911### Branding Changes
258*815440faSAtari911- Removed "Matrix Edition" from plugin name and all references
259*815440faSAtari911- Plugin is now simply "Calendar Plugin"
260*815440faSAtari911- Matrix theme remains available (now called just "Matrix")
261*815440faSAtari911
262*815440faSAtari911### Technical Details
263*815440faSAtari911- All JSON file operations now use atomic writes
264*815440faSAtari911- Event saves protected against race conditions
265*815440faSAtari911- Cache automatically invalidated on namespace/month changes
266*815440faSAtari911- Rate limiter uses probabilistic cleanup (1 in 100 requests)
267*815440faSAtari911
268*815440faSAtari911### Files Added
269*815440faSAtari911- `classes/FileHandler.php` - Atomic file operations with locking
270*815440faSAtari911- `classes/EventCache.php` - Caching layer with TTL
271*815440faSAtari911- `classes/RateLimiter.php` - AJAX rate limiting
272*815440faSAtari911- `classes/EventManager.php` - Consolidated event CRUD operations
273*815440faSAtari911
274*815440faSAtari911### Upgrade Notes
275*815440faSAtari911- No database migration required
276*815440faSAtari911- Cache directory created automatically (`data/cache/calendar/`)
277*815440faSAtari911- Rate limit data stored in `data/cache/calendar/ratelimit/`
278*815440faSAtari911- Existing events and settings preserved
279*815440faSAtari911
280*815440faSAtari911---
281*815440faSAtari911
2820b7aadb5SAtari911## Version 6.14.2 (2026-02-15) - SYSTEM LOAD TOGGLE
2830b7aadb5SAtari911
2840b7aadb5SAtari911### Added System Load Bars Toggle
2850b7aadb5SAtari911- New toggle in **Admin > Calendar > Themes** tab
2860b7aadb5SAtari911- Choose to show or hide CPU/Memory load indicator bars
2870b7aadb5SAtari911- Setting applies to both event panel and sidebar widget
2880b7aadb5SAtari911- Stored in `data/meta/calendar_show_system_load.txt`
2890b7aadb5SAtari911- JavaScript polling is also disabled when hidden (saves resources)
2900b7aadb5SAtari911
291b498f308SAtari911## Version 6.14.1 (2026-02-14) - SECURITY FIX
292b498f308SAtari911
293b498f308SAtari911### Security Improvements
294b498f308SAtari911- **Authentication required** - Write actions (save, delete, toggle) now require user to be logged in
295b498f308SAtari911- **Improved CSRF token handling** - New `getSecurityToken()` helper function checks multiple sources:
296b498f308SAtari911  - `JSINFO.sectok` (standard)
297b498f308SAtari911  - `window.JSINFO.sectok`
298b498f308SAtari911  - Hidden form field `input[name="sectok"]`
299b498f308SAtari911  - Meta tag `meta[name="sectok"]`
300b498f308SAtari911- Anonymous users can no longer add/edit/delete events
301b498f308SAtari911- Better error messages for authentication and token failures
302b498f308SAtari911
303b498f308SAtari911### Bug Fixes
304b498f308SAtari911- Fixed "Invalid security token" error on clean DokuWiki installations
305b498f308SAtari911- Added debug logging for security token failures
306b498f308SAtari911
307da206178SAtari911## Version 6.14.0 (2026-02-14) - STABLE RELEASE
308da206178SAtari911
309da206178SAtari911### Code Cleanup & Localization
310da206178SAtari911- Added localization for all static calendar strings (EN/DE)
311da206178SAtari911- New lang keys: `previous_month`, `next_month`, `print_calendar`, `no_events_scheduled`, `calendar_label`, `details`
312da206178SAtari911- Code review and cleanup completed
313da206178SAtari911- Updated README.md and plugin documentation
314da206178SAtari911
315da206178SAtari911### Static Calendar Features (v6.13.x consolidated)
316da206178SAtari911- Read-only presentation mode: `{{calendar static}}`
317da206178SAtari911- Custom titles: `title="My Events"`
318da206178SAtari911- Month locking: `month=2` disables navigation
319da206178SAtari911- Print button with clean itinerary output
320da206178SAtari911- All themes supported: matrix, pink, purple, professional, wiki, dark, light
321da206178SAtari911- `noprint` option to hide print functionality
322da206178SAtari911- Formatted descriptions in tooltips and itinerary
323da206178SAtari911
324da206178SAtari911### Other Improvements in 6.13.x
325da206178SAtari911- Admin menu icon (SVG)
326da206178SAtari911- Config import fix for `return array()` syntax
327da206178SAtari911- Mobile touch button fixes
328da206178SAtari911- Important events in day popup with star icons
329da206178SAtari911- Time picker grouped by period
330da206178SAtari911- Multi-day event time validation
331da206178SAtari911
332da206178SAtari911## Version 6.13.13 (2026-02-14) - PRINT BUTTON CENTERING
333da206178SAtari911
334da206178SAtari911### Fixed Print Button Icon Alignment
335da206178SAtari911- Added `display: flex`, `align-items: center`, `justify-content: center`
336da206178SAtari911- Added `padding: 0` and `line-height: 1`
337da206178SAtari911- Icon now properly centered in circle
338da206178SAtari911
339da206178SAtari911## Version 6.13.12 (2026-02-14) - SIMPLE TOOLTIP
340da206178SAtari911
341da206178SAtari911### Simplified Hover Tooltip
342da206178SAtari911- Removed custom JS tooltip (was causing triple popups)
343da206178SAtari911- Uses native browser `title` attribute only
344da206178SAtari911- Plain text with formatting converted: `**bold**` → `*bold*`, `//italic//` → `_italic_`
345da206178SAtari911- Links shown as: `text (url)`
346da206178SAtari911- Added �� emoji before time for visual clarity
347da206178SAtari911- Itinerary still shows full HTML formatting
348da206178SAtari911
349da206178SAtari911## Version 6.13.11 (2026-02-14) - FORMATTED DESCRIPTIONS
350da206178SAtari911
351da206178SAtari911### Rich Text Formatting in Static Calendar
352da206178SAtari911- **Hover tooltips** now show formatted text (bold, italic, links, line breaks)
353da206178SAtari911- **Itinerary descriptions** display with full formatting
354da206178SAtari911- Uses existing `renderDescription()` function for consistency
355da206178SAtari911- Supports: `**bold**`, `//italic//`, `[[links]]`, `[markdown](links)`, line breaks
356da206178SAtari911
357da206178SAtari911### Technical Details
358da206178SAtari911- Added `data-tooltip` attribute with rich HTML content
359da206178SAtari911- New JavaScript tooltip handler with smart positioning
360da206178SAtari911- CSS styles for `.static-tooltip` and itinerary formatting
361da206178SAtari911- Tooltips stay within viewport bounds
362da206178SAtari911
363da206178SAtari911## Version 6.13.10 (2026-02-14) - PRINT MARGINS FIX v3
364da206178SAtari911
365da206178SAtari911### Fixed Print Margins - Inline Styles Approach
366da206178SAtari911- Removed reliance on `@page` CSS (browser support inconsistent)
367da206178SAtari911- Uses inline style `padding: 50px 60px` directly on wrapper div
368da206178SAtari911- Simplified CSS for better browser compatibility
369da206178SAtari911- Smaller table font (12px) for better fit
370da206178SAtari911- Set `max-width: 800px` on content wrapper
371da206178SAtari911
372da206178SAtari911## Version 6.13.9 (2026-02-14) - PRINT MARGINS FIX v2
373da206178SAtari911
374da206178SAtari911### Fixed Print Margins
375da206178SAtari911- Added `.print-wrapper` div with 0.5in padding/margin
376da206178SAtari911- Uses both `@page` margin AND wrapper margins for compatibility
377da206178SAtari911- Set `@page { margin: 1in 0.75in }` (top/bottom 1in, sides 0.75in)
378da206178SAtari911- Wrapper has `max-width: 7.5in` to fit standard letter size
379da206178SAtari911- Smaller fonts (0.85em) to fit more content
380da206178SAtari911- Added 250ms delay before print to ensure styles load
381da206178SAtari911
382da206178SAtari911## Version 6.13.8 (2026-02-14) - PRINT MARGINS FIX
383da206178SAtari911
384da206178SAtari911### Improved Print Layout
385da206178SAtari911- Added `@page { margin: 0.75in }` for proper print margins
386da206178SAtari911- Increased body padding to 40px for screen preview
387da206178SAtari911- Smaller font sizes to fit better on page
388da206178SAtari911- Description column limited width with word-wrap
389da206178SAtari911- Table header repeats on each page (`display: table-header-group`)
390da206178SAtari911- Rows avoid page breaks in middle (`page-break-inside: avoid`)
391da206178SAtari911- Print color adjust enabled for backgrounds
392da206178SAtari911
393da206178SAtari911## Version 6.13.7 (2026-02-14) - ALL THEMES FOR STATIC CALENDAR
394da206178SAtari911
395da206178SAtari911### Added All Theme Options
396da206178SAtari911Now all themes work with static calendar:
397da206178SAtari911
398da206178SAtari911| Theme | Description |
399da206178SAtari911|-------|-------------|
400da206178SAtari911| `matrix` | Green on dark (default Matrix style) |
401da206178SAtari911| `pink` | Pink/magenta on dark |
402da206178SAtari911| `purple` | Purple/violet on dark |
403da206178SAtari911| `professional` | Blue on white (business style) |
404da206178SAtari911| `wiki` | Neutral gray (matches DokuWiki) |
405da206178SAtari911| `dark` | Blue on dark gray |
406da206178SAtari911| `light` | Clean white/gray |
407da206178SAtari911
408da206178SAtari911### Examples
409da206178SAtari911```
410da206178SAtari911{{calendar theme=matrix static}}
411da206178SAtari911{{calendar theme=purple static}}
412da206178SAtari911{{calendar theme=professional static}}
413da206178SAtari911{{calendar theme=wiki static}}
414da206178SAtari911```
415da206178SAtari911
416da206178SAtari911## Version 6.13.6 (2026-02-14) - QUOTED PARAMETER FIX
417da206178SAtari911
418da206178SAtari911### Fixed Quoted Parameter Parsing
419da206178SAtari911- Titles with spaces now work: `title="Feb 26 Expense Log"`
420da206178SAtari911- Uses regex to properly parse: `key="value with spaces"`
421da206178SAtari911- Supports both double and single quotes
422da206178SAtari911- Example: `{{calendar title="My Custom Title" static}}`
423da206178SAtari911
424da206178SAtari911## Version 6.13.5 (2026-02-14) - STATIC CALENDAR OPTIONS
425da206178SAtari911
426da206178SAtari911### New Static Calendar Options
427da206178SAtari911
428da206178SAtari911| Option | Description | Example |
429da206178SAtari911|--------|-------------|---------|
430da206178SAtari911| `title=X` | Custom title instead of month name | `title="Club Meetings"` |
431da206178SAtari911| `noprint` | Hide print button and print view | `{{calendar static noprint}}` |
432da206178SAtari911| `theme=X` | Apply specific theme (matrix, pink, dark, light) | `theme=matrix` |
433da206178SAtari911
434da206178SAtari911### Fixed Month/Year Lock
435da206178SAtari911- When you specify `month=X` or `year=X`, navigation is now disabled
436da206178SAtari911- `{{calendar month=2 static}}` shows only February with no nav arrows
437da206178SAtari911- `{{calendar year=2025 month=12 static}}` locks to December 2025
438da206178SAtari911
439da206178SAtari911### Examples
440da206178SAtari911```
441da206178SAtari911{{calendar static}}                              // Navigable, current month
442da206178SAtari911{{calendar month=2 static}}                      // Locked to February
443da206178SAtari911{{calendar title="Team Events" static}}          // Custom title
444da206178SAtari911{{calendar theme=matrix static}}                 // Matrix theme
445da206178SAtari911{{calendar namespace=club static noprint}}       // No print button
446da206178SAtari911{{calendar month=3 title="March Meetings" theme=pink static}}
447da206178SAtari911```
448da206178SAtari911
449da206178SAtari911## Version 6.13.4 (2026-02-14) - DEDICATED PRINT BUTTON
450da206178SAtari911
451da206178SAtari911### Added Print Button to Static Calendar
452da206178SAtari911- New ��️ print button in the calendar header
453da206178SAtari911- Opens a clean popup window with ONLY the itinerary content
454da206178SAtari911- Automatically triggers print dialog
455da206178SAtari911- Window closes after printing
456da206178SAtari911- No DokuWiki headers/footers/sidebars - just the calendar
457da206178SAtari911
458da206178SAtari911### How It Works
459da206178SAtari911- Extracts the print view HTML
460da206178SAtari911- Creates a new window with minimal styling
461da206178SAtari911- Calls `window.print()` automatically
462da206178SAtari911- Clean single-page output
463da206178SAtari911
464da206178SAtari911## Version 6.13.3 (2026-02-14) - PRINT BLANK PAGES FIX
465da206178SAtari911
466da206178SAtari911### Fixed Blank Pages When Printing
467da206178SAtari911- Aggressively hide ALL screen view elements and children in print
468da206178SAtari911- Reset height/width to 0 with !important on grid, cells, events
469da206178SAtari911- Ensure print view elements have proper display table properties
470da206178SAtari911- Force all hidden elements to position:absolute off-screen
471da206178SAtari911
472da206178SAtari911## Version 6.13.2 (2026-02-14) - STATIC CALENDAR RESPONSIVE FIX
473da206178SAtari911
474da206178SAtari911### Improved Static Calendar Layout
475da206178SAtari911- Changed from `max-width: 900px` to `width: 100%` for full container fit
476da206178SAtari911- Added `table-layout: fixed` for consistent column widths
477da206178SAtari911- Added `overflow-x: auto` for horizontal scroll on very small screens
478da206178SAtari911- Reduced header padding and font sizes for better fit
479da206178SAtari911- Improved responsive breakpoints for mobile (768px and 480px)
480da206178SAtari911- Hide time on very small screens to save space
481da206178SAtari911- Better touch targets for navigation buttons
482da206178SAtari911
483da206178SAtari911## Version 6.13.1 (2026-02-14) - STATIC CALENDAR FIX
484da206178SAtari911
485da206178SAtari911### Bug Fix
486da206178SAtari911- Added missing `getImportantNamespaces()` helper method
487da206178SAtari911- Fixed `loadEventsForMonth` → use existing `loadEvents` method
488da206178SAtari911- Added multi-namespace/wildcard support to static calendar
489da206178SAtari911
490da206178SAtari911## Version 6.13.0 (2026-02-14) - STATIC CALENDAR MODE
491da206178SAtari911
492da206178SAtari911### New Static/Presentation Mode
493da206178SAtari911Read-only calendar view for public display and printing.
494da206178SAtari911
495da206178SAtari911**Usage:**
496da206178SAtari911```
497da206178SAtari911{{calendar static}}
498da206178SAtari911{{calendar namespace=meetings static}}
499da206178SAtari911```
500da206178SAtari911
501da206178SAtari911**Screen View Features:**
502da206178SAtari911- Clean calendar grid without edit/delete buttons
503da206178SAtari911- Month navigation (prev/next arrows)
504da206178SAtari911- Hover tooltips showing full event details (title, time, description)
505da206178SAtari911- Important events highlighted with ⭐ and golden background
506da206178SAtari911- Today's date highlighted
507da206178SAtari911- Responsive design for mobile
508da206178SAtari911
509da206178SAtari911**Print View Features:**
510da206178SAtari911- Automatically switches to itinerary format when printing
511da206178SAtari911- Table layout: Date | Time | Event | Details
512da206178SAtari911- Important events marked with ⭐
513da206178SAtari911- Dates grouped (date only shown once per day)
514da206178SAtari911- Page break handling for long lists
515da206178SAtari911- Clean black & white friendly output
516da206178SAtari911
517da206178SAtari911**Files Changed:**
518da206178SAtari911- `syntax.php`: Added `renderStaticCalendar()` method
519da206178SAtari911- `action.php`: Added `getStaticCalendar()` AJAX handler
520da206178SAtari911- `calendar-main.js`: Added `navStaticCalendar()` function
521da206178SAtari911- `style.css`: Added static calendar styles + print media queries
522da206178SAtari911
523da206178SAtari911## Version 6.12.7 (2026-02-14) - ADMIN MENU ICON
524da206178SAtari911
525da206178SAtari911### Added Admin Menu Icon
526da206178SAtari911- New monochrome SVG calendar icon for DokuWiki admin menu
527da206178SAtari911- Icon shows calendar with binding rings, header, and date dots
528da206178SAtari911- Matches DokuWiki's admin interface style
529da206178SAtari911- Added `getMenuIcon()` method to admin.php
530da206178SAtari911- Icon file: `images/icon.svg`
531da206178SAtari911
532da206178SAtari911## Version 6.12.6 (2026-02-14) - CONFIG IMPORT FIX
533da206178SAtari911
534da206178SAtari911### Fixed Config Import Validation
535da206178SAtari911- Now accepts both `return [` and `return array(` syntax
536da206178SAtari911- Regex updated from `/return\s*\[/` to `/return\s*(\[|array\s*\()/`
537da206178SAtari911- Older PHP config files using `return array(...)` now import correctly
538da206178SAtari911
539da206178SAtari911## Version 6.12.5 (2026-02-14) - MOBILE BUTTON FIX
540da206178SAtari911
541da206178SAtari911### Fixed Delete/Edit Buttons on Mobile
542da206178SAtari911- Added `type="button"` attribute to prevent form submission issues
543da206178SAtari911- Added `touchend` event delegation for reliable mobile touch handling
544da206178SAtari911- Increased button touch targets (32px default, 40px on mobile)
545da206178SAtari911- Added `touch-action: manipulation` to prevent touch delays
546da206178SAtari911- Added `-webkit-tap-highlight-color` for visual feedback
547da206178SAtari911
548da206178SAtari911### Technical Details
549da206178SAtari911- Mobile browsers sometimes don't fire `onclick` reliably
550da206178SAtari911- New `touchend` handler calls `btn.click()` explicitly
551da206178SAtari911- Larger touch targets meet accessibility guidelines (44px recommended)
552da206178SAtari911
553da206178SAtari911## Version 6.12.4 (2026-02-14) - STAR INLINE FIX
554da206178SAtari911
555da206178SAtari911### Fixed Star Position in Day Popup
556da206178SAtari911- Star icon now displays inline with event title (left side)
557da206178SAtari911- Changed `.popup-event-title` from `flex: 1 1 100%` to `flex: 1 1 auto`
558da206178SAtari911- Star and title stay on same line instead of star being above
559da206178SAtari911
560da206178SAtari911## Version 6.12.3 (2026-02-14) - DAY POPUP IMPORTANT EVENTS
561da206178SAtari911
562da206178SAtari911### Important Event Highlighting in Day Popup
563da206178SAtari911- Events from important namespaces now show ⭐ star icon
564da206178SAtari911- Golden gradient background highlight for important events
565da206178SAtari911- Golden border glow effect matching other views
566da206178SAtari911- Consistent styling across calendar grid, sidebar, and day popup
567da206178SAtari911
568da206178SAtari911### Technical Details
569da206178SAtari911- Added `importantNamespaces` check to `showDayPopup()` function
570da206178SAtari911- Added `.popup-event-important` and `.popup-event-star` CSS classes
571da206178SAtari911- Reads important namespaces from `container.dataset.importantNamespaces`
572da206178SAtari911
573da206178SAtari911## Version 6.12.2 (2026-02-14) - MULTI-DAY EVENT TIME FIX
574da206178SAtari911
575da206178SAtari911### Multi-Day Event End Time
576da206178SAtari911- End time now allows all times when end date differs from start date
577da206178SAtari911- Example: Event from 9:00 PM on Feb 28 to 5:00 AM on Feb 29 now works correctly
578da206178SAtari911- Same-day events still enforce end time > start time
579da206178SAtari911- Changing end date now triggers time validation update
580da206178SAtari911
581da206178SAtari911### Technical Details
582da206178SAtari911- `updateEndTimeOptions()` checks if `endDate !== startDate`
583da206178SAtari911- If multi-day, all time options are enabled
584da206178SAtari911- Added `onchange` handler to both start date and end date fields
585da206178SAtari911
586da206178SAtari911## Version 6.12.1 (2026-02-14) - TIME PICKER & EDIT DIALOG FIX
587da206178SAtari911
588da206178SAtari911### Improved Time Picker
589da206178SAtari911- Grouped time options by period (Morning, Afternoon, Evening, Night)
590da206178SAtari911- Much easier to navigate - no more scrolling through 96 options
591da206178SAtari911- End time options before start time are now hidden/disabled
592da206178SAtari911- Invalid end times automatically corrected when start time changes
593da206178SAtari911
594da206178SAtari911### Fixed Edit Event Dialog Draggability
595da206178SAtari911- Edit dialog is now properly draggable (was broken due to async AJAX)
596da206178SAtari911- Moved `makeDialogDraggable()` call inside the AJAX success callback
597da206178SAtari911- Removed redundant wrapper patch that didn't work with async code
598da206178SAtari911
599da206178SAtari911### Technical Details
600da206178SAtari911- Time picker uses `<optgroup>` for visual grouping
601da206178SAtari911- End time validation hides invalid options (not just disables)
602da206178SAtari911- Both Add and Edit dialogs now call `makeDialogDraggable()` directly
603da206178SAtari911
604da206178SAtari911## Version 6.12.0 (2026-02-14) - EVENT EDITOR DIALOG IMPROVEMENTS
605da206178SAtari911
606da206178SAtari911### Fixed Event Editor Dialog Draggability
607da206178SAtari911- Fixed duplicate event listener accumulation that caused performance degradation
608da206178SAtari911- Each time dialog opened, new drag listeners were added without removing old ones
609da206178SAtari911- Now properly cleans up old listeners before adding new ones
610da206178SAtari911- Added `cursor: grabbing` feedback while dragging
611da206178SAtari911- Dialog position resets when reopened (no more stuck positions)
612da206178SAtari911- Excluded close button from triggering drag
613da206178SAtari911
614da206178SAtari911### Optimized Time Selection Performance
615da206178SAtari911- Simplified `updateEndTimeOptions()` to be much faster
616da206178SAtari911- Removed expensive loop through 96 options checking style.display
617da206178SAtari911- Now just validates current selection and sets new value if invalid
618da206178SAtari911- Should eliminate freezing/lag when selecting start time
619da206178SAtari911
620da206178SAtari911### Technical Details
621da206178SAtari911- Added `_dragCleanup` function stored on handle element
622da206178SAtari911- Cleanup called before re-initialization
623da206178SAtari911- Removed unnecessary `setTranslate` helper function
624da206178SAtari911
62522228b0eSAtari911## Version 6.11.4 (2026-02-13) - JAVASCRIPT LOCALIZATION
62622228b0eSAtari911
627da206178SAtari911### JavaScript Frontend Localization
628da206178SAtari911- Added `getCalendarLang()` helper function
629da206178SAtari911- Added `getJsLangStrings()` PHP method
630da206178SAtari911- Embedded JSON language data in all render functions
631da206178SAtari911- Localized month names (full + short)
632da206178SAtari911- Localized dialog titles, confirmations, badges, empty states
63322228b0eSAtari911
63422228b0eSAtari911## Version 6.11.3 (2026-02-13) - SIDEBAR WIDGET LOCALIZATION
63522228b0eSAtari911
636da206178SAtari911### Sidebar Widget
637da206178SAtari911- Fixed `\n` in single-quoted strings → double-quoted for proper newlines
638da206178SAtari911- Localized "Runs every X minutes" cron descriptions
639da206178SAtari911- Event dialog labels, placeholders, options
640da206178SAtari911- Day names, ordinal positions, color names
64122228b0eSAtari911- Today/Tomorrow/Important section headers
64222228b0eSAtari911
643da206178SAtari911## Version 6.11.2 (2026-02-13) - ADMIN BACKEND LOCALIZATION
64422228b0eSAtari911
645da206178SAtari911### Admin Backend
646da206178SAtari911- Localized ~220 hardcoded strings in admin.php
647da206178SAtari911- AJAX JSON responses, redirect messages, error messages
648da206178SAtari911- Pattern names (Daily, Weekly, Monthly, etc.)
64922228b0eSAtari911
650da206178SAtari911## Version 6.11.1 (2026-02-13) - CONFIG IMPORT BUG FIX
65122228b0eSAtari911
652da206178SAtari911### Bug Fix
653da206178SAtari911- Fixed regex to accept both `return [` and `return array(` syntax
654da206178SAtari911- File: `admin.php` lines 5947, 6001
65522228b0eSAtari911
65622228b0eSAtari911## Version 6.10.6 (2026-02-13) - MANAGE RECURRING DIALOG LOCALIZATION
65722228b0eSAtari911
65822228b0eSAtari911### Localized Manage Recurring Series Dialog
65922228b0eSAtari911Complete translation of the "Manage" button dialog for recurring events:
66022228b0eSAtari911
66122228b0eSAtari911**Section Headers:**
66222228b0eSAtari911- "Manage Recurring Series" → "Wiederkehrende Serie verwalten"
66322228b0eSAtari911- "Extend Series" → "Serie erweitern"
66422228b0eSAtari911- "Trim Past Events" → "Vergangene Termine kürzen"
66522228b0eSAtari911- "Change Pattern" → "Muster ändern"
66622228b0eSAtari911- "Change Start Date" → "Startdatum ändern"
66722228b0eSAtari911- "Pause Series" / "Resume Series" → "Serie pausieren" / "Serie fortsetzen"
66822228b0eSAtari911
66922228b0eSAtari911**Labels & Buttons:**
67022228b0eSAtari911- All field labels (Add occurrences, Days apart, Remove before, New interval, etc.)
67122228b0eSAtari911- Action buttons (Extend, Trim, Change, Shift, Pause, Resume, Close)
67222228b0eSAtari911- Interval dropdown options (Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly)
67322228b0eSAtari911- Help text and notes
67422228b0eSAtari911
67522228b0eSAtari911**Confirmation Dialogs:**
67622228b0eSAtari911- Trim confirmation with date
67722228b0eSAtari911- Respace confirmation
67822228b0eSAtari911- Shift confirmation
67922228b0eSAtari911
68022228b0eSAtari911### Added 60+ Language Strings for Dialogs
68122228b0eSAtari911Complete vocabulary for recurring event management in both English and German.
68222228b0eSAtari911
68322228b0eSAtari911### Note on Browser Validation Messages
68422228b0eSAtari911"Please fill out this field" is a browser-native message controlled by the browser's language setting, not our plugin.
68522228b0eSAtari911
68622228b0eSAtari911## Version 6.10.5 (2026-02-13) - DIALOG LOCALIZATION
68722228b0eSAtari911
68822228b0eSAtari911### Localized All JavaScript Dialogs
68922228b0eSAtari911
69022228b0eSAtari911**New Namespace Dialog:**
69122228b0eSAtari911- Prompt text with examples now in German
69222228b0eSAtari911- Invalid namespace error message
69322228b0eSAtari911
69422228b0eSAtari911**Rename Namespace Dialog:**
69522228b0eSAtari911- Prompt text with current name
69622228b0eSAtari911
69722228b0eSAtari911**Delete Confirmations:**
69822228b0eSAtari911- Delete selected events confirmation
69922228b0eSAtari911- Delete namespace confirmation
70022228b0eSAtari911- Delete recurring series confirmation
70122228b0eSAtari911
70222228b0eSAtari911**Trim Recurring Events:**
70322228b0eSAtari911- "Counting..." / "Zähle..."
70422228b0eSAtari911- "Trimming..." / "Kürze..."
70522228b0eSAtari911- "No past recurring events found" message
70622228b0eSAtari911- "Found X past recurring events" confirmation
70722228b0eSAtari911- Button text resets
70822228b0eSAtari911
70922228b0eSAtari911### Added 15+ New Dialog Strings
71022228b0eSAtari911Both English and German translations for all interactive prompts and confirmations.
71122228b0eSAtari911
71222228b0eSAtari911## Version 6.10.4 (2026-02-13) - COMPLETE MANAGE TAB LOCALIZATION
71322228b0eSAtari911
71422228b0eSAtari911### Fixed Remaining English Strings
71522228b0eSAtari911
71622228b0eSAtari911**Namespace Explorer Control Bar:**
71722228b0eSAtari911- "➡️ Move" → "➡️ Verschieben"
71822228b0eSAtari911- "➕ New Namespace" → "➕ Neuer Namensraum"
71922228b0eSAtari911- "�� Cleanup" → "�� Bereinigen"
72022228b0eSAtari911- "0 selected" → "0 ausgewählt"
72122228b0eSAtari911- "%d selected" → "%d ausgewählt"
72222228b0eSAtari911
72322228b0eSAtari911**Recurring Events Button Tooltips:**
72422228b0eSAtari911- "Edit title, time, namespace, pattern" → "Titel, Zeit, Namensraum, Muster bearbeiten"
72522228b0eSAtari911- "Extend, trim, pause, change dates" → "Erweitern, kürzen, pausieren, Daten ändern"
72622228b0eSAtari911- "Delete all occurrences" → "Alle Vorkommen löschen"
72722228b0eSAtari911
72822228b0eSAtari911**JavaScript Confirmation Messages:**
72922228b0eSAtari911- "No events selected" → "Keine Termine ausgewählt"
73022228b0eSAtari911- Delete confirmation with count
73122228b0eSAtari911- Delete namespace confirmation
73222228b0eSAtari911- "Scanning..." → "Scanne..."
73322228b0eSAtari911- "Cleaning..." → "Bereinige..."
73422228b0eSAtari911- "No empty namespaces found" message
73522228b0eSAtari911- "Found X item(s) to clean up" → "X Element(e) zum Bereinigen gefunden"
73622228b0eSAtari911- "Proceed with cleanup?" → "Mit Bereinigung fortfahren?"
73722228b0eSAtari911
73822228b0eSAtari911### Technical
73922228b0eSAtari911- Added adminLang JavaScript object with all translatable strings
74022228b0eSAtari911- All dynamic JavaScript messages now use language system
74122228b0eSAtari911
74222228b0eSAtari911## Version 6.10.3 (2026-02-13) - RECURRING EVENTS & DROP TARGET LOCALIZATION
74322228b0eSAtari911
74422228b0eSAtari911### Additional Localization for Manage Events Tab
74522228b0eSAtari911
74622228b0eSAtari911**Recurring Events Table:**
74722228b0eSAtari911- Search placeholder: "Wiederkehrende Termine suchen..."
74822228b0eSAtari911- Table headers: Titel, Namensraum, Muster, Zeitraum, Anzahl, Quelle, Aktionen
74922228b0eSAtari911- Source labels: Markiert / Erkannt (was Flagged / Detected)
75022228b0eSAtari911- Action buttons: Bearb. / Verwalten / Lö. (was Edit / Manage / Del)
75122228b0eSAtari911- Pattern badges: Täglich, Wöchentlich, Monatlich, Jährlich, Benutzerdefiniert
75222228b0eSAtari911- Footer: "Gesamt: X Serien" (was "Total: X series")
75322228b0eSAtari911- No results message
75422228b0eSAtari911
75522228b0eSAtari911**Namespace Explorer Drop Zones:**
75622228b0eSAtari911- Header: "�� Zielbereich" (was "Drop Target")
75722228b0eSAtari911- Drop hint: "Hier ablegen" (was "Drop here")
75822228b0eSAtari911- Default namespace label consistent
75922228b0eSAtari911
76022228b0eSAtari911### Added 25+ New Language Strings
76122228b0eSAtari911- Recurring table columns and labels
76222228b0eSAtari911- Pattern translations
76322228b0eSAtari911- Action button labels
76422228b0eSAtari911- Drop zone labels
76522228b0eSAtari911
76622228b0eSAtari911## Version 6.10.2 (2026-02-13) - MANAGE EVENTS TAB LOCALIZATION
76722228b0eSAtari911
76822228b0eSAtari911### Localized: Manage Events Tab (Complete)
76922228b0eSAtari911All text in the Manage Events admin tab now uses the language system:
77022228b0eSAtari911
77122228b0eSAtari911**Events Manager Section:**
77222228b0eSAtari911- Page title, section header, description
77322228b0eSAtari911- Statistics labels (Total Events, Namespaces, JSON Files, Recurring)
77422228b0eSAtari911- "Last scanned" timestamp label
77522228b0eSAtari911- Button labels (Re-scan Events, Export All Events, Import Events)
77622228b0eSAtari911- "View Breakdown by Namespace" expandable section
77722228b0eSAtari911- Table headers (Namespace, Events, Files)
77822228b0eSAtari911
77922228b0eSAtari911**Important Namespaces Section:**
78022228b0eSAtari911- Section header and description
78122228b0eSAtari911- Visual Effects descriptions (Calendar Grid, Event Sidebar, Sidebar Widget, Day Popup)
78222228b0eSAtari911- Save button and hint text
78322228b0eSAtari911
78422228b0eSAtari911**Cleanup Old Events Section:**
78522228b0eSAtari911- Section header and description
78622228b0eSAtari911- Radio button labels (By Age, By Status, By Date Range)
78722228b0eSAtari911- Age options (Delete events older than, months, years)
78822228b0eSAtari911- Status options (Completed tasks, Past events)
78922228b0eSAtari911- Date range labels (From, To)
79022228b0eSAtari911- Namespace filter label and placeholder
79122228b0eSAtari911- Preview and Delete button labels
79222228b0eSAtari911- JavaScript confirmation messages
79322228b0eSAtari911- Loading/error states
79422228b0eSAtari911
79522228b0eSAtari911**Recurring Events Section:**
79622228b0eSAtari911- Section header
79722228b0eSAtari911- Button labels (Trim All Past, Rescan)
79822228b0eSAtari911
79922228b0eSAtari911**Namespace Explorer Section:**
80022228b0eSAtari911- Section header and description
80122228b0eSAtari911- Search placeholder
80222228b0eSAtari911- Control bar buttons (All, None, Delete, Move to)
80322228b0eSAtari911- Datalist placeholder
80422228b0eSAtari911
80522228b0eSAtari911### Added 60+ New Language Strings
80622228b0eSAtari911Both English and German language files expanded with comprehensive admin terminology.
80722228b0eSAtari911
80822228b0eSAtari911## Version 6.10.1 (2026-02-13) - LANGUAGE SYSTEM FIX
80922228b0eSAtari911
81022228b0eSAtari911### Bug Fix: Language Files Not Working
81122228b0eSAtari911- Fixed `getMenuText()` to use `$this->getLang('menu')` instead of hardcoded string
81222228b0eSAtari911- Admin menu now correctly shows "Kalenderverwaltung" in German
81322228b0eSAtari911- Admin tabs now use language system:
81422228b0eSAtari911  - "Manage Events" → "Termine verwalten"
81522228b0eSAtari911  - "Update Plugin" → "Plugin aktualisieren"
81622228b0eSAtari911  - "Outlook Sync" → "Outlook-Sync"
81722228b0eSAtari911  - "Themes" → "Designs"
81822228b0eSAtari911
81922228b0eSAtari911### Added More Language Strings
82022228b0eSAtari911- Admin tab labels
82122228b0eSAtari911- Admin section headers (Event Browser, Important Namespaces, etc.)
82222228b0eSAtari911- Sync settings labels
82322228b0eSAtari911- Common button labels (Run Now, Download, Upload, Delete, etc.)
82422228b0eSAtari911
82522228b0eSAtari911## Version 6.10.0 (2026-02-13) - GERMAN LANGUAGE SUPPORT
82622228b0eSAtari911
82722228b0eSAtari911### New Feature: German Language Translation
82822228b0eSAtari911- Added complete German (de) language file
82922228b0eSAtari911- Expanded English language file with comprehensive translatable strings
83022228b0eSAtari911- Both files include 100+ translation strings covering:
83122228b0eSAtari911  - General terms (calendar, events, dates)
83222228b0eSAtari911  - Event fields (title, description, time, etc.)
83322228b0eSAtari911  - Actions (add, edit, delete, save, cancel)
83422228b0eSAtari911  - Task-related terms
83522228b0eSAtari911  - Recurring event options
83622228b0eSAtari911  - Days of week and months
83722228b0eSAtari911  - User messages and confirmations
83822228b0eSAtari911  - Search functionality
83922228b0eSAtari911  - Sync status messages
84022228b0eSAtari911  - Admin section labels
84122228b0eSAtari911  - Sidebar widget labels
84222228b0eSAtari911  - Time conflict warnings
84322228b0eSAtari911
84422228b0eSAtari911### Note
84522228b0eSAtari911The language strings are now available for future implementation throughout the plugin UI. Currently the admin menu uses the language system; other strings can be integrated as needed.
84622228b0eSAtari911
84796df7d3eSAtari911## Version 6.9.9 (2026-02-13) - CRITICAL SEARCH FIX
84896df7d3eSAtari911
84996df7d3eSAtari911### Bug Fix: Month Search Not Working
85096df7d3eSAtari911- **Root cause:** Function name collision - there were two `fuzzyMatch` functions
85196df7d3eSAtari911  - `window.fuzzyMatch` (for namespace search autocomplete) returns a score number or `null`
85296df7d3eSAtari911  - Local `fuzzyMatch` (for event search) returns `true`/`false`
85396df7d3eSAtari911- When filtering events, the wrong function was being called, returning `null` for all events
85496df7d3eSAtari911- **Fix:** Renamed event search functions to `eventSearchNormalize` and `eventSearchMatch`
85596df7d3eSAtari911- Month search now works correctly on first load and after navigation
85696df7d3eSAtari911
85796df7d3eSAtari911### Also in this version
85896df7d3eSAtari911- Fixed jumpToDate to properly hide search clear button after navigation
85996df7d3eSAtari911- Removed debug logging from production code
86096df7d3eSAtari911
86196df7d3eSAtari911## Version 6.9.8 (2026-02-12) - SEARCH & UI FIXES
86296df7d3eSAtari911
86396df7d3eSAtari911### Bug Fixes
86496df7d3eSAtari911
86596df7d3eSAtari911**All-Dates Search Navigation Fixed**
86696df7d3eSAtari911- Clicking a search result now properly navigates to that event's month
86796df7d3eSAtari911- Opens the day popup showing the event details
86896df7d3eSAtari911- Was calling non-existent `loadMonth()` - now uses correct `navCalendar()`
86996df7d3eSAtari911- Clears search results and restores normal event list view
87096df7d3eSAtari911
87196df7d3eSAtari911**"No Events" Message Fixed**
87296df7d3eSAtari911- No longer shows "No events match your search" when in all-dates mode
87396df7d3eSAtari911- All-dates mode has its own results display; the month-mode message was incorrectly appearing
87496df7d3eSAtari911
87596df7d3eSAtari911**Add Button Layout Fixed**
87696df7d3eSAtari911- Search bar no longer pushes the "+ Add" button off the right edge
87796df7d3eSAtari911- Search container has constrained max-width (160px) and proper flex settings
87896df7d3eSAtari911- Header has overflow:hidden to prevent layout issues
87996df7d3eSAtari911
88096df7d3eSAtari911**Important Event Stars Fixed**
88196df7d3eSAtari911- Stars now appear on initial page load (PHP rendering added)
88296df7d3eSAtari911- Stars positioned outside the bar using CSS ::before pseudo-element
88396df7d3eSAtari911- Added overflow:visible to event-indicators and event-bar containers
88496df7d3eSAtari911- Bar remains full width; star sits in the left margin area
88596df7d3eSAtari911
88696df7d3eSAtari911### Technical
88796df7d3eSAtari911- Star uses `event-bar-has-star` class for first-day-only display
88896df7d3eSAtari911- jumpToDate() properly cleans up search state before navigation
88996df7d3eSAtari911
89096df7d3eSAtari911## Version 6.9.7 (2026-02-12) - IMPORTANT NAMESPACE IMPROVEMENTS
89196df7d3eSAtari911
89296df7d3eSAtari911### Bug Fix
89396df7d3eSAtari911- **AJAX refresh now preserves important namespace highlighting**
89496df7d3eSAtari911  - Important namespaces list now passed to JavaScript via data attribute
89596df7d3eSAtari911  - Highlighting persists when navigating between months
89696df7d3eSAtari911  - Works in both main calendar sidebar and standalone event panels
89796df7d3eSAtari911
89896df7d3eSAtari911### New Feature: Calendar Grid Star Icons
89996df7d3eSAtari911- **Important events now show ⭐ on their color bars** in the calendar grid
90096df7d3eSAtari911  - Small star appears on the first day of important events
90196df7d3eSAtari911  - Tooltip prefixed with ⭐ for important events
90296df7d3eSAtari911  - Visual distinction without cluttering the compact grid view
90396df7d3eSAtari911
90496df7d3eSAtari911### Admin Section Update
90596df7d3eSAtari911- **Improved Important Namespaces description** in Admin → Calendar → Manage Events
90696df7d3eSAtari911  - Now explains all visual effects:
90796df7d3eSAtari911    - Calendar Grid: ⭐ star on event bars
90896df7d3eSAtari911    - Event Sidebar: ⭐ star + highlighted background + accent border
90996df7d3eSAtari911    - Sidebar Widget: Dedicated "Important Events" section
91096df7d3eSAtari911    - Day Popup: Events shown with full details
91196df7d3eSAtari911  - Better example placeholder text
91296df7d3eSAtari911
91396df7d3eSAtari911### Technical
91496df7d3eSAtari911- Fixed PHP syntax error in fuzzy search (curly quotes replaced with escape sequences)
91596df7d3eSAtari911- Important namespaces loaded once and stored in container dataset for JavaScript access
91696df7d3eSAtari911
91796df7d3eSAtari911## Version 6.9.6 (2026-02-12) - FUZZY SEARCH & SIDEBAR HIGHLIGHTING
91896df7d3eSAtari911
91996df7d3eSAtari911### Fuzzy Search
92096df7d3eSAtari911- **Improved search matching:** Search is now more forgiving of punctuation differences
92196df7d3eSAtari911  - "fathers day" matches "Father's Day"
92296df7d3eSAtari911  - "new years" matches "New Year's Eve"
92396df7d3eSAtari911  - Smart quotes, apostrophes, dashes, and common punctuation are ignored
92496df7d3eSAtari911- **Multi-word search:** All words must be present but in any order
92596df7d3eSAtari911  - "birthday john" matches "John's Birthday Party"
92696df7d3eSAtari911- Works in both "this month" and "all dates" search modes
92796df7d3eSAtari911
92896df7d3eSAtari911### Important Namespace Highlighting (Calendar Sidebar)
92996df7d3eSAtari911- Events from important namespaces now highlighted in the main calendar's event list sidebar
93096df7d3eSAtari911- Same visual treatment as the itinerary sidebar widget:
93196df7d3eSAtari911  - Subtle theme-colored background tint
93296df7d3eSAtari911  - Right border accent bar
93396df7d3eSAtari911  - ⭐ star icon before event title
93496df7d3eSAtari911- Theme-specific colors:
93596df7d3eSAtari911  - Matrix: green tint
93696df7d3eSAtari911  - Purple: purple tint
93796df7d3eSAtari911  - Pink: pink tint
93896df7d3eSAtari911  - Professional: blue tint
93996df7d3eSAtari911  - Wiki: light blue tint
94096df7d3eSAtari911- Configure important namespaces in Admin → Calendar → Sync Settings
94196df7d3eSAtari911
94296df7d3eSAtari911## Version 6.9.5 (2026-02-12) - SEARCH MODE TOGGLE
94396df7d3eSAtari911
94496df7d3eSAtari911### New Feature: Search Scope Toggle
94596df7d3eSAtari911- **Search mode button** (��/��) added next to search input in both calendar views
94696df7d3eSAtari911- **Default mode** (��): Search only the current month's events (fast, local filtering)
94796df7d3eSAtari911- **All dates mode** (��): Search across ALL calendar data via AJAX
94896df7d3eSAtari911  - Click the �� button to toggle to �� (green highlight when active)
94996df7d3eSAtari911  - Requires at least 2 characters to search
95096df7d3eSAtari911  - Shows results with date, time, and namespace
95196df7d3eSAtari911  - Click any result to jump to that date and open the day popup
95296df7d3eSAtari911  - Limited to 50 results for performance
95396df7d3eSAtari911- Search placeholder text updates to indicate current mode
95496df7d3eSAtari911- Compact button design takes minimal space
95596df7d3eSAtari911
95696df7d3eSAtari911### UI Details
95796df7d3eSAtari911- Button sits flush with search input (no gap)
95896df7d3eSAtari911- Green highlight when "all dates" mode is active
95996df7d3eSAtari911- Results show full date (e.g., "Mon, Feb 12, 2026")
96096df7d3eSAtari911- Namespace badge shown for multi-namespace setups
96196df7d3eSAtari911
96296df7d3eSAtari911## Version 6.9.4 (2026-02-12) - POPUP IMPROVEMENTS & IMPORTANT HIGHLIGHTING
96396df7d3eSAtari911
96496df7d3eSAtari911### Features
96596df7d3eSAtari911- **Draggable Day Popup:** Calendar day popup window is now draggable by its header
96696df7d3eSAtari911  - Click and drag the header to move the popup
96796df7d3eSAtari911  - Header shows move cursor on hover
96896df7d3eSAtari911  - Clicking the close button (×) still closes normally
96996df7d3eSAtari911
97096df7d3eSAtari911- **Important Namespace Highlighting in Sidebar:**
97196df7d3eSAtari911  - Events from "important" namespaces (defined in Admin → Sync Settings) now have subtle highlighting
97296df7d3eSAtari911  - Theme-aware background tint (green for Matrix, purple for Purple, pink for Pink, blue for Professional/Wiki)
97396df7d3eSAtari911  - Right border accent bar for visual distinction
97496df7d3eSAtari911  - ⭐ star icon appears before event title
97596df7d3eSAtari911  - Works in Today, Tomorrow, and Important Events sections
97696df7d3eSAtari911
97796df7d3eSAtari911### Bug Fix
97896df7d3eSAtari911- **Fixed event display in day popup:** Long titles no longer cut off the edit/delete buttons
97996df7d3eSAtari911  - Event title now wraps to multiple lines instead of truncating
98096df7d3eSAtari911  - Actions buttons always visible
98196df7d3eSAtari911  - Time, date range, and namespace badges wrap properly
98296df7d3eSAtari911  - Improved flex layout for better responsiveness
98396df7d3eSAtari911
98496df7d3eSAtari911## Version 6.9.3 (2026-02-12) - ADMIN EDIT DIALOG CONSISTENCY
98596df7d3eSAtari911
98696df7d3eSAtari911### UI Improvement
98796df7d3eSAtari911- **Edit Recurring Event dialog** in Admin section now matches the main event editor exactly:
98896df7d3eSAtari911  - Same dark theme styling (#1e1e1e background, #2c3e50 header)
98996df7d3eSAtari911  - Same header layout with close button (×) in top-right corner
99096df7d3eSAtari911  - Same input styling (dark inputs with green accent borders)
99196df7d3eSAtari911  - Same footer with Cancel/Save buttons layout
99296df7d3eSAtari911  - Same recurrence options box styling
99396df7d3eSAtari911  - Consistent spacing, fonts, and colors throughout
99496df7d3eSAtari911
99596df7d3eSAtari911## Version 6.9.2 (2026-02-12) - MOBILE DIALOG FIX
99696df7d3eSAtari911
99796df7d3eSAtari911### Bug Fix
99896df7d3eSAtari911- **Fixed:** Description textarea now extends full width on mobile/phone view
99996df7d3eSAtari911  - Reduced form padding from 12px to 8px on screens ≤480px
100096df7d3eSAtari911  - Added explicit `width: 100%` and `box-sizing: border-box` to textarea
100196df7d3eSAtari911  - Ensured all form inputs/selects use full available width on mobile
100296df7d3eSAtari911
100396df7d3eSAtari911## Version 6.9.1 (2026-02-11) - ADMIN RECURRING EVENTS INTEGRATION
100496df7d3eSAtari911
100596df7d3eSAtari911### Admin Panel Updates
100696df7d3eSAtari911- **Enhanced Recurring Events Table:**
100796df7d3eSAtari911  - Pattern column now shows color-coded badges (daily=blue, weekly=green, monthly=orange, yearly=pink)
100896df7d3eSAtari911  - "First" column renamed to "Range" showing full date span (e.g., "Feb 1, 2026 → Dec 15, 2026")
100996df7d3eSAtari911  - Patterns now read from stored metadata when available, with smart fallback to detection
101096df7d3eSAtari911
101196df7d3eSAtari911- **Edit Recurring Series Dialog:**
101296df7d3eSAtari911  - Full recurrence pattern editing (not just simple intervals)
101396df7d3eSAtari911  - "Repeat every [N] [period]" with dropdown for Daily/Weekly/Monthly/Yearly
101496df7d3eSAtari911  - Weekly: Day-of-week checkboxes (Sun-Sat) with current days pre-selected
101596df7d3eSAtari911  - Monthly: Radio choice between "Day of month" or "Weekday pattern"
101696df7d3eSAtari911  - Ordinal weekday selector (First/Second/Third/Fourth/Fifth/Last + day dropdown)
101796df7d3eSAtari911  - Pre-populates all fields from stored recurrence metadata
101896df7d3eSAtari911  - Properly reschedules future events using new pattern
101996df7d3eSAtari911
102096df7d3eSAtari911- **Manage Series Dialog:**
102196df7d3eSAtari911  - Updated summary to show date range
102296df7d3eSAtari911  - Extend/trim/change pattern functions work with new patterns
102396df7d3eSAtari911
102496df7d3eSAtari911### Technical Updates
102596df7d3eSAtari911- `findRecurringEvents()` captures all recurrence metadata from events
102696df7d3eSAtari911- `formatRecurrencePattern()` generates human-readable pattern descriptions
102796df7d3eSAtari911- `detectRecurrencePattern()` enhanced to detect more interval variations
102896df7d3eSAtari911- `editRecurringSeries()` PHP handler processes new recurrence parameters
102996df7d3eSAtari911- `generateRecurrenceDates()` creates dates matching complex patterns
103096df7d3eSAtari911- Recurrence metadata preserved and updated across all event occurrences
103196df7d3eSAtari911
103296df7d3eSAtari911## Version 6.9.0 (2026-02-11) - ADVANCED RECURRING EVENTS
103396df7d3eSAtari911
103496df7d3eSAtari911### New Features
103596df7d3eSAtari911- **Enhanced Recurring Event Options:**
103696df7d3eSAtari911  - **Interval support:** Repeat every N days/weeks/months/years (e.g., every 3 months)
103796df7d3eSAtari911  - **Weekly day selection:** Choose specific days of the week (e.g., Mon, Wed, Fri)
103896df7d3eSAtari911  - **Monthly options:**
103996df7d3eSAtari911    - Day of month: Repeat on specific day (e.g., 15th of each month)
104096df7d3eSAtari911    - Ordinal weekday: Repeat on pattern (e.g., 2nd Wednesday, Last Friday)
104196df7d3eSAtari911  - **Examples now possible:**
104296df7d3eSAtari911    - Every 2 weeks on Monday and Thursday
104396df7d3eSAtari911    - Every 3 months on the 15th
104496df7d3eSAtari911    - Every other month on the 2nd Wednesday
104596df7d3eSAtari911    - Every year on the same date
104696df7d3eSAtari911    - Last Friday of every month
104796df7d3eSAtari911
104896df7d3eSAtari911### UI Changes
104996df7d3eSAtari911- Redesigned recurring options section with bordered container
105096df7d3eSAtari911- "Repeat every [N] [period]" input with interval number field
105196df7d3eSAtari911- Day-of-week checkboxes for weekly recurrence
105296df7d3eSAtari911- Radio buttons for monthly: "Day of month" vs "Weekday pattern"
105396df7d3eSAtari911- Ordinal dropdown (First/Second/Third/Fourth/Fifth/Last)
105496df7d3eSAtari911- Day dropdown (Sunday through Saturday)
105596df7d3eSAtari911- Helper text for end date field
105696df7d3eSAtari911
105796df7d3eSAtari911### Technical Details
105896df7d3eSAtari911- New parameters: recurrenceInterval, weekDays, monthlyType, monthDay, ordinalWeek, ordinalDay
105996df7d3eSAtari911- Recurrence pattern stored in event data for reference
106096df7d3eSAtari911- Maximum 365 occurrences (up from 100) to support daily events for a year
106196df7d3eSAtari911- Smart date iteration for complex patterns
106296df7d3eSAtari911
106396df7d3eSAtari911## Version 6.8.1 (2026-02-11) - ITINERARY DEFAULT STATE SETTING
106496df7d3eSAtari911
106596df7d3eSAtari911### New Feature
106696df7d3eSAtari911- **Added:** Option to set itinerary default state (expanded or collapsed)
106796df7d3eSAtari911  - New setting in Admin → Calendar → �� Sidebar Widget Settings
106896df7d3eSAtari911  - "�� Itinerary Section" with two options:
106996df7d3eSAtari911    - **Expanded** (default) - Show itinerary sections by default
107096df7d3eSAtari911    - **Collapsed** - Hide itinerary sections by default (click bar to expand)
107196df7d3eSAtari911  - Setting persists across page loads
107296df7d3eSAtari911  - Arrow indicator and content state reflect the saved preference on page load
107396df7d3eSAtari911
107496df7d3eSAtari911## Version 6.8.0 (2026-02-11) - COLLAPSIBLE ITINERARY
107596df7d3eSAtari911
107696df7d3eSAtari911### New Feature
107796df7d3eSAtari911- **Added:** Collapsible Itinerary bar in sidebar week view
107896df7d3eSAtari911  - New "ITINERARY" bar below the week calendar (styled like +ADD EVENT bar)
107996df7d3eSAtari911  - Click to collapse/expand the Today, Tomorrow, and Important Events sections
108096df7d3eSAtari911  - Arrow indicator shows expanded (▼) or collapsed (►) state
108196df7d3eSAtari911  - Smooth animation when collapsing/expanding
108296df7d3eSAtari911  - Clicking a day in the week grid shows that day's events ABOVE the Itinerary bar
108396df7d3eSAtari911  - Selected day events remain visible whether itinerary is expanded or collapsed
108496df7d3eSAtari911  - Shows "No upcoming events" message when there are no itinerary items
108596df7d3eSAtari911
108696df7d3eSAtari911### UI Layout (top to bottom)
108796df7d3eSAtari9111. Header with clock/system stats
108896df7d3eSAtari9112. +ADD EVENT bar
108996df7d3eSAtari9113. Week grid (7 days)
109096df7d3eSAtari9114. Selected day's events (appears when clicking a day)
109196df7d3eSAtari9115. ITINERARY bar (click to collapse/expand)
109296df7d3eSAtari9116. Today section (collapsible)
109396df7d3eSAtari9117. Tomorrow section (collapsible)
109496df7d3eSAtari9118. Important Events section (collapsible)
109596df7d3eSAtari911
109696df7d3eSAtari911## Version 6.7.9 (2026-02-11) - FIX EVENTS MANAGER STATISTICS
109796df7d3eSAtari911
109896df7d3eSAtari911### Bug Fixes
109996df7d3eSAtari911- **Fixed:** �� Events Manager showing inflated count (1195 instead of ~605)
110096df7d3eSAtari911  - The `scanDirectoryForStats()` function was counting ALL entries in JSON files
110196df7d3eSAtari911  - Now properly filters to only count date keys (`YYYY-MM-DD` format)
110296df7d3eSAtari911  - Now validates events have `id` and `title` before counting
110396df7d3eSAtari911  - Click "�� Rescan" to update the statistics with correct count
110496df7d3eSAtari911
110596df7d3eSAtari911## Version 6.7.8 (2026-02-11) - FILTER INVALID EVENTS
110696df7d3eSAtari911
110796df7d3eSAtari911### Bug Fixes
110896df7d3eSAtari911- **Fixed:** Event Manager showing "(untitled)" and "mapping" entries
110996df7d3eSAtari911  - Root cause: Calendar JSON files contain metadata keys (like "mapping") that were being parsed as events
111096df7d3eSAtari911  - Added date format validation (`YYYY-MM-DD`) to skip non-date keys
111196df7d3eSAtari911  - Added validation to require `id` and `title` fields for events
111296df7d3eSAtari911  - Applied fix to all event-reading functions:
111396df7d3eSAtari911    - `getEventsByNamespace()` - main event listing
111496df7d3eSAtari911    - `scanNamespaceRecursive()` - namespace scanning
111596df7d3eSAtari911    - `searchEvents()` - event search
111696df7d3eSAtari911    - `findEventsByTitle()` - title lookup
111796df7d3eSAtari911    - `deleteRecurringSeries()` - recurring deletion
111896df7d3eSAtari911    - `renameRecurringSeries()` - recurring rename
111996df7d3eSAtari911    - Recurring events scanner
112096df7d3eSAtari911    - Recurring cleanup function
112196df7d3eSAtari911
112296df7d3eSAtari911### Technical Details
112396df7d3eSAtari911- Date keys must match pattern `/^\d{4}-\d{2}-\d{2}$/`
112496df7d3eSAtari911- Events must have non-empty `id` and `title` fields
112596df7d3eSAtari911- All other entries in JSON files are now skipped
112696df7d3eSAtari911
112796df7d3eSAtari911## Version 6.7.7 (2026-02-11) - FIX PHP PATH & CLEAR LOG
112896df7d3eSAtari911
112996df7d3eSAtari911### Bug Fixes
113096df7d3eSAtari911- **Fixed:** "sh: 1: '/usr/bin/php': not found" error - removed escapeshellarg() which was adding quotes around the PHP path
113196df7d3eSAtari911- **Fixed:** "Could not clear log file" - added better error messages showing exact issue
113296df7d3eSAtari911- **Improved:** findPhpBinary() now uses is_executable() and `which php` for detection
113396df7d3eSAtari911- **Improved:** clearLogFile() now shows specific error (file not found, not writable, etc.)
113496df7d3eSAtari911
113596df7d3eSAtari911## Version 6.7.6 (2026-02-11) - FIX SYNC CONTROLS & LOGGING
113696df7d3eSAtari911
113796df7d3eSAtari911### Bug Fixes
113896df7d3eSAtari911- **Fixed:** Double log entries - sync script logs internally, removed redundant stdout capture
113996df7d3eSAtari911- **Fixed:** Manual sync not appearing in log - removed `--verbose` flag since script logs directly
114096df7d3eSAtari911- **Fixed:** Better error messages when sync fails
114196df7d3eSAtari911
114296df7d3eSAtari911### Improvements
114396df7d3eSAtari911- **Improved:** Sync now runs without `--verbose` flag - script logs to file internally
114496df7d3eSAtari911- **Improved:** Crontab warning if `>>` redirect is detected (causes duplicate entries)
114596df7d3eSAtari911- **Improved:** Log viewer now shows full path to log file
114696df7d3eSAtari911- **Improved:** Better pre-flight checks (directory creation, file permissions)
114796df7d3eSAtari911- **Improved:** PHP binary path is now properly escaped
114896df7d3eSAtari911
114996df7d3eSAtari911### Crontab Update Required
115096df7d3eSAtari911If your crontab has `>> sync.log 2>&1`, remove it to prevent duplicate log entries:
115196df7d3eSAtari911
115296df7d3eSAtari911**Before (causes duplicates):**
115396df7d3eSAtari911```
115496df7d3eSAtari911*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php >> /var/www/html/dokuwiki/data/meta/calendar/sync.log 2>&1
115596df7d3eSAtari911```
115696df7d3eSAtari911
115796df7d3eSAtari911**After (correct):**
115896df7d3eSAtari911```
115996df7d3eSAtari911*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php
116096df7d3eSAtari911```
116196df7d3eSAtari911
116296df7d3eSAtari911The script automatically logs to `data/meta/calendar/sync.log`.
116396df7d3eSAtari911
116496df7d3eSAtari911## Version 6.7.5 (2026-02-11) - FIX SYNC LOG OUTPUT
116596df7d3eSAtari911
116696df7d3eSAtari911### Bug Fixes
116796df7d3eSAtari911- **Fixed:** Sync log not showing output when running sync from admin panel
116896df7d3eSAtari911  - Added `--verbose` flag to sync command so output is captured
116996df7d3eSAtari911  - Sync output is now captured and written to the log file
117096df7d3eSAtari911  - Log directory is created if it doesn't exist
117196df7d3eSAtari911  - Better error handling if log directory isn't writable
117296df7d3eSAtari911  - Command being executed is logged for debugging
117396df7d3eSAtari911
117496df7d3eSAtari911### Changes
117596df7d3eSAtari911- Sync now runs in verbose mode when triggered from admin panel
117696df7d3eSAtari911- All sync output (stdout/stderr) is written to the log file
117796df7d3eSAtari911- Pre-flight check ensures log directory exists and is writable
117896df7d3eSAtari911
117996df7d3eSAtari911## Version 6.7.4 (2026-02-11) - FIX MANUAL SYNC EXECUTION
118096df7d3eSAtari911
118196df7d3eSAtari911### Bug Fix
118296df7d3eSAtari911- **Fixed:** "Could not open input file: sync_outlook.php" when running manual sync
118396df7d3eSAtari911  - The `$pluginDir` variable was missing from `runSync()` function
118496df7d3eSAtari911  - Added `$pluginDir = DOKU_PLUGIN . 'calendar'` before building the command
118596df7d3eSAtari911  - Sync now properly changes to the plugin directory before executing
118696df7d3eSAtari911
118796df7d3eSAtari911## Version 6.7.3 (2026-02-11) - FIX ADDITIONAL COUNT TYPE ERRORS
118896df7d3eSAtari911
118996df7d3eSAtari911### Bug Fix
119096df7d3eSAtari911- **Fixed:** Additional TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given"
119196df7d3eSAtari911  - Fixed in `scanDirectoryForStats()` (line 5453)
119296df7d3eSAtari911  - Fixed in namespace delete function (line 4137)
119396df7d3eSAtari911  - Fixed in export function (line 5516)
119496df7d3eSAtari911  - Fixed in import function (line 5636)
119596df7d3eSAtari911  - All locations now check `is_array()` before calling `count()`
119696df7d3eSAtari911
119796df7d3eSAtari911## Version 6.7.2 (2026-02-11) - FIX EVENT MANAGER TYPE ERROR
119896df7d3eSAtari911
119996df7d3eSAtari911### Bug Fix
120096df7d3eSAtari911- **Fixed:** TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given"
120196df7d3eSAtari911  - Added array type checks when iterating over calendar event data
120296df7d3eSAtari911  - Protects against corrupted JSON data where event lists may not be arrays
120396df7d3eSAtari911  - Added safeguards in `getEventsByNamespace()` and `scanNamespaceRecursive()`
120496df7d3eSAtari911
120596df7d3eSAtari911## Version 6.7.1 (2026-02-11) - BULK DELETE FOR BACKUPS
120696df7d3eSAtari911
120796df7d3eSAtari911### Changed
120896df7d3eSAtari911- **Improved:** Backup management now uses bulk selection and delete
120996df7d3eSAtari911  - Added checkboxes next to each backup file
121096df7d3eSAtari911  - Added "Select All" checkbox in the action bar
121196df7d3eSAtari911  - Added "��️ Delete Selected" button (appears when backups are selected)
121296df7d3eSAtari911  - Removed individual delete buttons from each row
121396df7d3eSAtari911  - Shows count of selected backups
121496df7d3eSAtari911  - Backups are deleted sequentially with visual feedback
121596df7d3eSAtari911
121696df7d3eSAtari911### UI
121796df7d3eSAtari911- Clean action bar at top of backup table with selection controls
121896df7d3eSAtari911- Selected count updates in real-time
121996df7d3eSAtari911- Rows fade out smoothly when deleted
122096df7d3eSAtari911
122196df7d3eSAtari911## Version 6.7.0 (2026-02-11) - IMPROVED RESTORE FUNCTION
122296df7d3eSAtari911
122396df7d3eSAtari911### Changed
122496df7d3eSAtari911- **Improved:** Restore function now uses DokuWiki's Extension Manager API
122596df7d3eSAtari911  - Uses `helper_plugin_extension_extension` for proper installation
122696df7d3eSAtari911  - Handles permissions correctly through DokuWiki's standard plugin installation process
122796df7d3eSAtari911  - Falls back to manual instructions if Extension Manager is not available
122896df7d3eSAtari911
122996df7d3eSAtari911### How It Works
123096df7d3eSAtari911When you click "�� Restore" on a backup:
123196df7d3eSAtari9111. The plugin loads DokuWiki's extension helper
123296df7d3eSAtari9112. Calls `installFromLocal()` with the backup ZIP file
123396df7d3eSAtari9113. DokuWiki's Extension Manager handles file extraction and installation
123496df7d3eSAtari9114. This ensures proper permissions and follows DokuWiki standards
123596df7d3eSAtari911
123696df7d3eSAtari911### Fallback
123796df7d3eSAtari911If the Extension Manager helper is not available, you'll be prompted to:
123896df7d3eSAtari911- Download the backup ZIP
123996df7d3eSAtari911- Go to Admin → Extension Manager → Install
124096df7d3eSAtari911- Upload the ZIP file manually
124196df7d3eSAtari911
124296df7d3eSAtari911## Version 6.6.9 (2026-02-11) - REMOVE RESTORE FUNCTION
124396df7d3eSAtari911
124496df7d3eSAtari911### Removed
124596df7d3eSAtari911- **Removed:** "Restore" button from backup management
124696df7d3eSAtari911- **Removed:** `restoreBackup()` PHP method
124796df7d3eSAtari911- **Removed:** `restoreBackup()` JavaScript function
124896df7d3eSAtari911
124996df7d3eSAtari911### Added
125096df7d3eSAtari911- **Added:** Informational note in backup section explaining how to restore:
125196df7d3eSAtari911  - Download the backup ZIP file
125296df7d3eSAtari911  - Go to Admin → Extension Manager → Install
125396df7d3eSAtari911  - Upload the ZIP file there
125496df7d3eSAtari911  - DokuWiki's extension manager handles installation safely with proper permissions
125596df7d3eSAtari911
125696df7d3eSAtari911### Reason
125796df7d3eSAtari911The restore function required write access to the plugin directory, which web servers typically don't have (and shouldn't have) for security reasons. Using DokuWiki's built-in Extension Manager is the safer and more reliable approach.
125896df7d3eSAtari911
125996df7d3eSAtari911## Version 6.6.8 (2026-02-11) - FIX THEME KEYS & FILE PERMISSIONS
126096df7d3eSAtari911
126196df7d3eSAtari911### Bug Fixes
126296df7d3eSAtari911- **Fixed:** "Undefined array key" warnings for wiki theme (pastdue_color, pastdue_bg, tomorrow_bg, etc.)
126396df7d3eSAtari911  - Added missing theme keys to `getWikiTemplateColors()` return array
126496df7d3eSAtari911
126596df7d3eSAtari911- **Fixed:** "Permission denied" errors for sync.log and sync_state.json
126696df7d3eSAtari911  - Moved sync files from plugin directory to `data/meta/calendar/` (writable location)
126796df7d3eSAtari911  - Updated sync_outlook.php, admin.php to use new paths
126896df7d3eSAtari911  - sync_config.php remains in plugin directory (must be manually configured)
126996df7d3eSAtari911
127096df7d3eSAtari911- **Fixed:** `findEventNamespace` now returns the actual DIRECTORY where event file lives
127196df7d3eSAtari911  - This ensures deletion works correctly when stored namespace differs from file location
127296df7d3eSAtari911
127396df7d3eSAtari911### Note on lang.php Permission Error
127496df7d3eSAtari911If you see a permission error for lang/en/lang.php, this occurs when trying to restore/update the plugin via admin panel and the web server doesn't have write access to the plugin directory. This is normal security - update via command line or FTP instead.
127596df7d3eSAtari911
127696df7d3eSAtari911## Version 6.6.7 (2026-02-11) - FIX NAMESPACE CHANGE BUG (PART 2)
127796df7d3eSAtari911
127896df7d3eSAtari911### Bug Fix
127996df7d3eSAtari911- **Fixed:** Events in the DEFAULT namespace (no namespace) could not be moved to other namespaces
128096df7d3eSAtari911  - Root cause: The comparison `$oldNamespace !== ''` was always FALSE for default namespace events
128196df7d3eSAtari911  - Changed to `$oldNamespace !== null` to properly distinguish between "event not found" (null) and "event in default namespace" ('')
128296df7d3eSAtari911  - This allows moving events FROM the default namespace TO any other namespace
128396df7d3eSAtari911  - Also fixed null coalescing for recurring events: `$oldNamespace ?? $namespace` instead of `$oldNamespace ?: $namespace`
128496df7d3eSAtari911
128596df7d3eSAtari911## Version 6.6.6 (2026-02-11) - FIX NAMESPACE CHANGE & DELETE BUGS
128696df7d3eSAtari911
128796df7d3eSAtari911### Bug Fixes
128896df7d3eSAtari911- **Fixed:** Changing an event's namespace now properly moves the event instead of creating a duplicate
128996df7d3eSAtari911  - Root cause: `findEventNamespace()` was searching in the NEW namespace instead of ALL namespaces
129096df7d3eSAtari911  - Now uses wildcard search `'*'` to find the existing event regardless of its current namespace
129196df7d3eSAtari911
129296df7d3eSAtari911- **Fixed:** Deleting an event no longer causes the calendar to filter by the deleted event's namespace
129396df7d3eSAtari911  - Root cause: After deletion, `reloadCalendarData()` was called with the deleted event's namespace
129496df7d3eSAtari911  - Now retrieves the calendar's original namespace from `container.dataset.namespace`
129596df7d3eSAtari911  - Also fixed in `saveEventCompact()` and `toggleTaskComplete()` for consistency
129696df7d3eSAtari911
129796df7d3eSAtari911## Version 6.6.5 (2026-02-11) - ADD AUTOCOMPLETE ATTRIBUTES
129896df7d3eSAtari911
129996df7d3eSAtari911### Improved
130096df7d3eSAtari911- Added `autocomplete="new-password"` to client secret input field
130196df7d3eSAtari911- Added `autocomplete="email"` to user email input field
130296df7d3eSAtari911- Added `autocomplete="off"` to client ID input field
130396df7d3eSAtari911- Follows browser best practices for form inputs
130496df7d3eSAtari911
130596df7d3eSAtari911## Version 6.6.4 (2026-02-11) - FIX GEOLOCATION VIOLATION
130696df7d3eSAtari911
130796df7d3eSAtari911### Bug Fix
130896df7d3eSAtari911- **Fixed:** Browser violation "Only request geolocation information in response to a user gesture"
130996df7d3eSAtari911- Weather widget now uses Sacramento as the default location on page load
131096df7d3eSAtari911- Geolocation is only requested when user **clicks** on the weather icon
131196df7d3eSAtari911- Click the weather icon to get your local weather (browser will prompt for permission)
131296df7d3eSAtari911- Weather icon shows tooltip "Click for local weather" and has pointer cursor
131396df7d3eSAtari911
131496df7d3eSAtari911## Version 6.6.3 (2026-02-11) - FIX MUTATIONOBSERVER ERROR
131596df7d3eSAtari911
131696df7d3eSAtari911### Bug Fix
131796df7d3eSAtari911- **Fixed:** `Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'` error
131896df7d3eSAtari911- Root cause: MutationObserver tried to observe `document.body` before DOM was ready
131996df7d3eSAtari911- Added `setupMutationObserver()` function that waits for DOMContentLoaded before attaching observer
132096df7d3eSAtari911
132196df7d3eSAtari911## Version 6.6.2 (2026-02-11) - FIX CONFLICT TOOLTIP JAVASCRIPT LOADING
132296df7d3eSAtari911
132396df7d3eSAtari911### Bug Fix
132496df7d3eSAtari911- **Critical:** Fixed `showConflictTooltip is not defined` and `hideConflictTooltip is not defined` errors
132596df7d3eSAtari911- Root cause: `addAssets()` in action.php was loading empty `script.js` instead of `calendar-main.js`
132696df7d3eSAtari911- Changed `addAssets()` to load `calendar-main.js` directly
132796df7d3eSAtari911- Updated `script.js` to dynamically load `calendar-main.js` as a fallback mechanism
132896df7d3eSAtari911
13297e8ea635SAtari911## Version 6.6.1 (2026-02-11) - SECURITY FIXES
13307e8ea635SAtari911
13317e8ea635SAtari911### Security
13327e8ea635SAtari911- **Critical:** Removed `eval()` remote code execution vulnerability in config import
13337e8ea635SAtari911- **Critical:** Added admin authentication requirement to `get_system_stats.php` endpoint
13347e8ea635SAtari911- **High:** Added CSRF token verification to all write operations (save, delete, toggle)
13357e8ea635SAtari911- **High:** Fixed path traversal vulnerabilities in namespace delete/rename functions
13367e8ea635SAtari911- **High:** Added admin privilege verification to AJAX admin routes
13377e8ea635SAtari911
13387e8ea635SAtari911### Improved
13397e8ea635SAtari911- **Input Validation:** Date format (YYYY-MM-DD), time format (HH:MM), color format (#RRGGBB)
13407e8ea635SAtari911- **Input Validation:** Year range (1970-2100), month range (1-12), namespace format
13417e8ea635SAtari911- **Input Validation:** Recurrence type whitelist, title/description length limits
13427e8ea635SAtari911- **Debug Logging:** All debug logging now conditional on `CALENDAR_DEBUG` constant (off by default)
13437e8ea635SAtari911- **JSON Handling:** Added `safeJsonRead()` helper with proper error handling
13447e8ea635SAtari911- **Timezone:** Sync script now uses configured timezone instead of hardcoded value
13457e8ea635SAtari911
13467e8ea635SAtari911### Code Quality
13477e8ea635SAtari911- Documented intentional switch fallthrough in `get_system_stats.php`
13487e8ea635SAtari911- Standardized error response format
13497e8ea635SAtari911
13507e8ea635SAtari911## Version 6.6.0 (2026-02-11) - BACKUP & UI IMPROVEMENTS
13517e8ea635SAtari911
13527e8ea635SAtari911### Fixed
13537e8ea635SAtari911- **Backup:** Fixed recursive directory backup to properly include all subdirectories (including `lang/`)
13547e8ea635SAtari911- **Backup:** Now uses `SELF_FIRST` iterator to process directories before their contents
13557e8ea635SAtari911- **Backup:** Empty directories are now explicitly added with `addEmptyDir()` to preserve structure
13567e8ea635SAtari911
13577e8ea635SAtari911### UI Change
13587e8ea635SAtari911- **Namespace Explorer:** Cleanup status message now appears prominently at top of section
13597e8ea635SAtari911- Previously status message was at bottom, easy to miss after cleanup operations
13607e8ea635SAtari911
13617e8ea635SAtari911## Version 6.5.5 (2026-02-11) - FIX AJAX ROUTING & MOVE CLEANUP BUTTON
13627e8ea635SAtari911
13637e8ea635SAtari911### Bug Fix
13647e8ea635SAtari911- All admin AJAX actions (cleanup, rescan, extend, trim, pause, resume, change start/pattern) were returning "Unknown action"
13657e8ea635SAtari911- Root cause: AJAX calls go through `action.php`'s switch statement, not `admin.php`'s `handle()` method
13667e8ea635SAtari911- Added routing in `action.php`: new cases forward to `admin.php` via `routeToAdmin()` helper
13677e8ea635SAtari911- Added public `handleAjaxAction()` method in `admin.php` as the entry point from `action.php`
13687e8ea635SAtari911
13697e8ea635SAtari911### UI Change
13707e8ea635SAtari911- Moved "�� Cleanup" button from standalone section to inline next to "➕ New Namespace" in the control bar
13717e8ea635SAtari911- Status messages still appear below the namespace explorer
13727e8ea635SAtari911
13737e8ea635SAtari911## Version 6.5.4 (2026-02-11) - FIX PHP PARSE ERROR IN CLEANUP JS
13747e8ea635SAtari911
13757e8ea635SAtari911### Bug Fix
13767e8ea635SAtari911- Root cause: `style='color:...'` single quotes inside PHP `echo '...'` block terminated the PHP string prematurely
13777e8ea635SAtari911- PHP saw `color:#e74c3c` as unexpected PHP code instead of part of the JS string
13787e8ea635SAtari911- Fixed all 5 occurrences in cleanupEmptyNamespaces JS: escaped single quotes as `\'`
13797e8ea635SAtari911- Added `adminColors` JS object (text, bg, border) injected from PHP `$colors` at render time
13807e8ea635SAtari911- Cleanup detail text uses `adminColors.text` to respect DokuWiki template theme colors
13817e8ea635SAtari911
13827e8ea635SAtari911## Version 6.5.3 (2026-02-11) - FIX CLEANUP NAMESPACES PARSE ERROR
13837e8ea635SAtari911
13847e8ea635SAtari911### Bug Fix
13857e8ea635SAtari911- Fixed PHP parse error on line 1089 caused by `$colors['text']` PHP variable inside JS string concatenation
13867e8ea635SAtari911- The cleanup results detail list now uses hardcoded `#666` for text color instead of attempting PHP interpolation within JS runtime code
13877e8ea635SAtari911
13887e8ea635SAtari911## Version 6.5.2 (2026-02-11) - CLEANUP EMPTY NAMESPACES
13897e8ea635SAtari911
13907e8ea635SAtari911### New Feature
13917e8ea635SAtari911- "�� Cleanup Empty Namespaces" button added at bottom of Namespace Explorer section
13927e8ea635SAtari911- Dry-run scan first: shows exactly what will be removed with bullet-point details in confirm dialog
13937e8ea635SAtari911- Removes empty calendar folders (0 JSON files or all-empty JSON files) from any namespace
13947e8ea635SAtari911- Removes parent namespace directories if they become empty after calendar folder removal
13957e8ea635SAtari911- Root calendar directory is never removed
13967e8ea635SAtari911- AJAX-powered with inline status showing results after cleanup
13977e8ea635SAtari911- Page auto-reloads after 2 seconds to refresh the namespace explorer view
13987e8ea635SAtari911- Recursively scans all nested namespace directories via `findAllCalendarDirsRecursive()`
13997e8ea635SAtari911
14007e8ea635SAtari911## Version 6.5.1 (2026-02-11) - TRIM ALL PAST: SHOW COUNT BEFORE DELETE
14017e8ea635SAtari911
14027e8ea635SAtari911### Improved
14037e8ea635SAtari911- "Trim All Past" button now does a dry-run count before showing the confirmation dialog
14047e8ea635SAtari911- Confirmation shows exact count: "Found 47 past recurring events to remove"
14057e8ea635SAtari911- If zero found, shows "No past recurring events found to remove" instead of confirm
14067e8ea635SAtari911- PHP handler supports `dry_run` parameter that counts without deleting
14077e8ea635SAtari911
14087e8ea635SAtari911## Version 6.5.0 (2026-02-11) - BULK TRIM ALL PAST RECURRING EVENTS
14097e8ea635SAtari911
14107e8ea635SAtari911### Bulk Action
14117e8ea635SAtari911- Red "✂️ Trim All Past" button added next to the Rescan button in the Recurring Events section header
14127e8ea635SAtari911- Removes ALL past occurrences (before today) from EVERY recurring series in one click
14137e8ea635SAtari911- Only removes events with `recurring` or `recurringId` flags — non-recurring events are untouched
14147e8ea635SAtari911- Confirmation dialog required before execution
14157e8ea635SAtari911- AJAX-powered with inline status showing count removed, then auto-rescans the table
14167e8ea635SAtari911- Searches all calendar directories recursively
14177e8ea635SAtari911
14187e8ea635SAtari911## Version 6.4.9 (2026-02-11) - FIX RECURRING EDIT/DELETE: SEARCH ALL DIRECTORIES
14197e8ea635SAtari911
14207e8ea635SAtari911### Bug Fix
14217e8ea635SAtari911- Edit and Delete recurring series now search ALL calendar directories instead of building a path from the namespace field
14227e8ea635SAtari911- Root cause: event's `namespace` field (stored in JSON) can differ from the filesystem directory where the file lives
14237e8ea635SAtari911- Both handlers now use `findCalendarDirs()` to collect every calendar directory recursively
14247e8ea635SAtari911- Events matched by title AND namespace field (case-insensitive) for precise targeting
14257e8ea635SAtari911- Edit handler rewritten: rename/time/namespace updates in Pass 1, interval respace in Pass 2
14267e8ea635SAtari911- New `findCalendarDirs()` helper method for recursive directory discovery
14277e8ea635SAtari911
14287e8ea635SAtari911## Version 6.4.8 (2026-02-11) - FIX PHP PARSE ERROR IN MANAGE DIALOG
14297e8ea635SAtari911
14307e8ea635SAtari911### Bug Fix
14317e8ea635SAtari911- Rewrote `manageRecurringSeries()` JS function using string concatenation instead of template literals
14327e8ea635SAtari911- JS template literals (`${...}`) inside PHP echo blocks caused PHP to parse them as variable interpolation
14337e8ea635SAtari911- All inline onclick handlers now use `\x27` for single quotes to avoid escaping conflicts
14347e8ea635SAtari911
14357e8ea635SAtari911## Version 6.4.7 (2026-02-11) - RECURRING EVENTS: FULL MANAGEMENT CONTROLS
14367e8ea635SAtari911
14377e8ea635SAtari911### New "Manage" Button per Series
14387e8ea635SAtari911- Orange "Manage" button opens a comprehensive management dialog for each recurring series
14397e8ea635SAtari911
14407e8ea635SAtari911### Extend Series
14417e8ea635SAtari911- Add N new occurrences after the last event in the series
14427e8ea635SAtari911- Configurable interval: Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly
14437e8ea635SAtari911- New events copy title, time, color, namespace, and recurring flag from the last event
14447e8ea635SAtari911
14457e8ea635SAtari911### Trim Past Events
14467e8ea635SAtari911- Remove all occurrences before a selected cutoff date
14477e8ea635SAtari911- Confirmation required before deletion
14487e8ea635SAtari911- Cleans up empty date keys and files automatically
14497e8ea635SAtari911
14507e8ea635SAtari911### Change Pattern
14517e8ea635SAtari911- Respace future occurrences with a new interval
14527e8ea635SAtari911- Past events are untouched; only future events are removed and re-created
14537e8ea635SAtari911- First future event becomes the anchor date
14547e8ea635SAtari911
14557e8ea635SAtari911### Change Start Date
14567e8ea635SAtari911- Shift ALL occurrences by the difference between old and new start date
14577e8ea635SAtari911- Events are removed from old positions and re-created at new positions
14587e8ea635SAtari911- Preserves spacing between all events
14597e8ea635SAtari911
14607e8ea635SAtari911### Pause/Resume
14617e8ea635SAtari911- Pause: adds ⏸ prefix and paused flag to all future occurrences
14627e8ea635SAtari911- Resume: removes ⏸ prefix and paused flag from all occurrences
14637e8ea635SAtari911- Button toggles based on whether series is currently paused
14647e8ea635SAtari911
14657e8ea635SAtari911### Infrastructure
14667e8ea635SAtari911- New shared `recurringAction()` JS helper for all AJAX management operations
14677e8ea635SAtari911- New `getRecurringSeriesEvents()` PHP helper for finding all events in a series
14687e8ea635SAtari911- Status messages shown inline in the management dialog
14697e8ea635SAtari911- Close button triggers automatic rescan to refresh the table
14707e8ea635SAtari911
14717e8ea635SAtari911## Version 6.4.6 (2026-02-11) - RECURRING EVENTS: RESCAN BUTTON & IMPROVED LOGIC
14727e8ea635SAtari911
14737e8ea635SAtari911### Rescan Button
14747e8ea635SAtari911- Green "�� Rescan" button added to the Recurring Events section header
14757e8ea635SAtari911- AJAX-powered: rescans all calendar data and refreshes the table without page reload
14767e8ea635SAtari911- Shows count of found series briefly after scan completes
14777e8ea635SAtari911
14787e8ea635SAtari911### Improved Detection Logic
14797e8ea635SAtari911- Events with `recurring: true` flag are now detected first (grouped by `recurringId`)
14807e8ea635SAtari911- Pattern-detected events (3+ same-title occurrences) are found separately and deduplicated
14817e8ea635SAtari911- New "Source" column shows ��️ Flagged (has recurring flag) vs �� Detected (pattern match)
14827e8ea635SAtari911- Median interval used for pattern detection instead of just first two dates (more robust)
14837e8ea635SAtari911- New patterns recognized: Quarterly, Semi-annual, and "Every ~N days" for custom intervals
14847e8ea635SAtari911- Empty/invalid titles and malformed date arrays are now skipped safely
14857e8ea635SAtari911- Dates are deduplicated before counting (prevents inflated counts from multi-day events)
14867e8ea635SAtari911- Nested namespace directories now scanned recursively
14877e8ea635SAtari911- Results sorted alphabetically by title
14887e8ea635SAtari911
14897e8ea635SAtari911## Version 6.4.5 (2026-02-11) - ADMIN VERSION HISTORY OVERHAUL
14907e8ea635SAtari911
14917e8ea635SAtari911### Version History Viewer
14927e8ea635SAtari911- All purple (#7b1fa2) accent colors replaced with green (#00cc07) to match admin theme
14937e8ea635SAtari911- Changelog parser now handles `###` subsection headers (rendered as green bold labels)
14947e8ea635SAtari911- Plain `- ` bullet items now parsed and categorized under their subsection
14957e8ea635SAtari911- Previously only `- **Type:** description` format was recognized
14967e8ea635SAtari911
14977e8ea635SAtari911### Current Release Button
14987e8ea635SAtari911- Green "Current Release" button added between nav arrows
14997e8ea635SAtari911- Jumps directly to the card matching the running version from plugin.info.txt
15007e8ea635SAtari911- Running version card shows green "RUNNING" badge and thicker green border
15017e8ea635SAtari911
15027e8ea635SAtari911## Version 6.4.4 (2026-02-11) - WIKI THEME: PAST EVENTS TOGGLE BACKGROUND
15037e8ea635SAtari911
15047e8ea635SAtari911### Fix
15057e8ea635SAtari911- Wiki theme past events pulldown (retracted state) now uses `__background_neu__` (`--cell-today-bg`)
15067e8ea635SAtari911- Previously used `--cell-bg` which appeared unthemed/white
15077e8ea635SAtari911
15087e8ea635SAtari911## Version 6.4.3 (2026-02-11) - WIKI THEME: DAY HEADERS BACKGROUND
15097e8ea635SAtari911
15107e8ea635SAtari911### Fix
15117e8ea635SAtari911- Wiki theme SMTWTFS day headers now use `__background_neu__` (`--cell-today-bg`) instead of `--background-header`
15127e8ea635SAtari911
15137e8ea635SAtari911## Version 6.4.2 (2026-02-11) - WIKI THEME: DAY HEADERS (INITIAL)
15147e8ea635SAtari911
15157e8ea635SAtari911### Wiki Theme Day Headers
15167e8ea635SAtari911- Added explicit CSS override for `.calendar-theme-wiki .calendar-day-headers`
15177e8ea635SAtari911- Day header text uses `--text-primary` (template's `__text__` color)
15187e8ea635SAtari911
15197e8ea635SAtari911## Version 6.4.1 (2026-02-11) - WIKI THEME: EVENT HIGHLIGHT
15207e8ea635SAtari911
15217e8ea635SAtari911### Fix
15227e8ea635SAtari911- Wiki theme event highlight (when clicking calendar bar) now uses `themeStyles.header_bg` (`__background_alt__`) instead of hardcoded blue (#dce9f5)
15237e8ea635SAtari911- Subtle shadow instead of blue glow
15247e8ea635SAtari911
15257e8ea635SAtari911## Version 6.4.0 (2026-02-11) - DARK READER: SECTION BAR COLOR MATCHING
15267e8ea635SAtari911
15277e8ea635SAtari911### Fix
15287e8ea635SAtari911- Wiki theme section left bar now uses a `<div>` with `background` instead of `border-left`
15297e8ea635SAtari911- Dark Reader maps the same color differently for border vs background properties, causing visual mismatch
15307e8ea635SAtari911- Both the bar and header now use `background`, so Dark Reader maps them identically
15317e8ea635SAtari911- Flex layout wrapper added for wiki theme sections
15327e8ea635SAtari911- Wiki fallback colors updated: `border` key now uses `#ccc` (matching `__border__`) instead of `#2b73b7`
15337e8ea635SAtari911
15347e8ea635SAtari911## Version 6.3.9 (2026-02-10) - WIKI THEME: SECTION BAR FIX (ATTEMPT)
15357e8ea635SAtari911
15367e8ea635SAtari911### Fix
15377e8ea635SAtari911- Simplified wiki section container — removed `wiki-section-container` class
15387e8ea635SAtari911- Added `background` from `$themeStyles['bg']` to section container
15397e8ea635SAtari911
15407e8ea635SAtari911## Version 6.3.8 (2026-02-10) - WIKI THEME: BUTTON & SECTION HEADER COLORS
15417e8ea635SAtari911
15427e8ea635SAtari911### Wiki Theme Buttons
15437e8ea635SAtari911- Nav buttons (< >), Today button, and panel buttons now use `__link__` color background with white text
15447e8ea635SAtari911- CSS overrides for `.calendar-theme-wiki .cal-nav-btn`, `.cal-today-btn`, panel buttons
15457e8ea635SAtari911
15467e8ea635SAtari911### Wiki Theme Section Headers
15477e8ea635SAtari911- Today: `__link__` background (accent/link color)
15487e8ea635SAtari911- Tomorrow: `__background_alt__` background (alternate background)
15497e8ea635SAtari911- Important: `__border__` background (border color)
15507e8ea635SAtari911- Each section now has a distinct color from the template palette
15517e8ea635SAtari911
15527e8ea635SAtari911## Version 6.3.7 (2026-02-10) - WIKI THEME CHECKBOX FIX
15537e8ea635SAtari911
15547e8ea635SAtari911### Fix
15557e8ea635SAtari911- Wiki theme checkbox override changed from `border-color` to full `border: 2px solid` shorthand
15567e8ea635SAtari911- Properly overrides the base rule which uses `border` shorthand
15577e8ea635SAtari911- Hover state also uses full shorthand
15587e8ea635SAtari911
15597e8ea635SAtari911## Version 6.3.6 (2026-02-10) - WIKI THEME CHECKBOX BORDER COLOR
15607e8ea635SAtari911
15617e8ea635SAtari911### Fix
15627e8ea635SAtari911- Wiki theme unchecked checkboxes now use `--border-main` (template's `__border__` color) for border
15637e8ea635SAtari911- Checked state fills with border color
15647e8ea635SAtari911- Hover state uses border color
15657e8ea635SAtari911- Applied to calendar, sidebar, and eventlist containers
15667e8ea635SAtari911
15677e8ea635SAtari911## Version 6.3.5 (2026-02-10) - WIKI THEME: ALLOW DARK READER ON HEADERS
15687e8ea635SAtari911
15697e8ea635SAtari911### Fix
15707e8ea635SAtari911- Wiki theme section headers (Today/Tomorrow/Important) no longer use `!important` or `-webkit-text-fill-color`
15717e8ea635SAtari911- Dark Reader can now freely adjust background, text color, and borders on wiki theme headers
15727e8ea635SAtari911- Clicked-day panel header and section border-left also unlocked for wiki theme
15737e8ea635SAtari911- All other themes (matrix/purple/pink/professional) retain full Dark Reader protection
15747e8ea635SAtari911
15757e8ea635SAtari911## Version 6.3.4 (2026-02-10) - WIKI THEME: BORDER COLOR FOR HEADERS & BADGES
15767e8ea635SAtari911
15777e8ea635SAtari911### Wiki Theme Color Remapping
15787e8ea635SAtari911- `border` (accent color) now maps to template's `__border__` instead of `__link__`
15797e8ea635SAtari911- This affects: section headers (Today/Tomorrow/Important), badges (TODAY, namespace), sidebar widget border, clicked-day panel, `--border-main` CSS variable
15807e8ea635SAtari911- `text_bright` still maps to `__link__` for link text and accent text
15817e8ea635SAtari911- Section headers all use the same `__border__` color for consistent appearance
15827e8ea635SAtari911- Updated COLOR_SCHEME mapping documentation
15837e8ea635SAtari911
15847e8ea635SAtari911## Version 6.3.3 (2026-02-10) - WIKI THEME SECTION HEADER TEXT COLOR
15857e8ea635SAtari911
15867e8ea635SAtari911### Fix
15877e8ea635SAtari911- Wiki theme Today/Tomorrow/Important section header text now uses `$themeStyles['text_primary']` (mapped from template's `__text__` color) instead of hardcoded white
15887e8ea635SAtari911- Clicked-day panel header text also uses template text color for wiki theme
15897e8ea635SAtari911- Professional theme remains white text on blue headers
15907e8ea635SAtari911
15917e8ea635SAtari911## Version 6.3.2 (2026-02-10) - FIX THEME NOT UPDATING ON SIDEBAR EVENTLIST
15927e8ea635SAtari911
15937e8ea635SAtari911### Bug Fix
15947e8ea635SAtari911- Added `$renderer->nocache()` to the render function
15957e8ea635SAtari911- DokuWiki was caching the rendered sidebar HTML, so theme changes made in admin were never reflected until the page was manually edited
15967e8ea635SAtari911- Now all calendar/eventlist/eventpanel outputs are rendered fresh on each page load, picking up the current theme from `calendar_theme.txt`
15977e8ea635SAtari911
15987e8ea635SAtari911## Version 6.3.1 (2026-02-10) - EVENTLIST THEMING
15997e8ea635SAtari911
16007e8ea635SAtari911### {{eventlist}} Theme Support
16017e8ea635SAtari911- Eventlist containers now receive theme class (`eventlist-theme-matrix`, etc.) and full CSS variable injection
16027e8ea635SAtari911- Dark themes get themed border + glow, light themes get subtle border
16037e8ea635SAtari911- Container background set from `$themeStyles['bg']` with `!important`
16047e8ea635SAtari911
16057e8ea635SAtari911### Eventlist CSS Theme Rules (all 3 dark themes)
16067e8ea635SAtari911- Title, header, time, date, body, links, strong, code, namespace badge, empty state
16077e8ea635SAtari911- Today header, clock, date — all with `color` + `-webkit-text-fill-color` `!important`
16087e8ea635SAtari911- Item borders, section backgrounds, code block backgrounds
16097e8ea635SAtari911- Full Dark Reader protection via same inline+CSS approach as calendar/sidebar
16107e8ea635SAtari911
16117e8ea635SAtari911## Version 6.3.0 (2026-02-10) - DARK READER COMPATIBILITY & COMPLETE THEMING
16127e8ea635SAtari911
16137e8ea635SAtari911### Dark Reader Browser Extension Compatibility
16147e8ea635SAtari911All dark themes (Matrix, Purple, Pink) now render correctly when the Dark Reader browser extension is active. The approach uses targeted inline `!important` styles and `-webkit-text-fill-color` overrides — no page-wide locks, no blanket CSS resets, no filter manipulation.
16157e8ea635SAtari911
16167e8ea635SAtari911**Protected elements:**
16177e8ea635SAtari911- Section headers (Today/Tomorrow/Important) — background, text color, text-fill-color
16187e8ea635SAtari911- Clicked-day panel header — background, text color, close button
16197e8ea635SAtari911- All badges (TODAY, PAST DUE, namespace, panel namespace, eventlist-simple) — background, text, text-fill-color
16207e8ea635SAtari911- Event titles, meta, descriptions — color with !important via CSS
16217e8ea635SAtari911- Day numbers, nav buttons, calendar day headers — color with !important via CSS
16227e8ea635SAtari911- System status bars — inline background !important on tracks and fills
16237e8ea635SAtari911- System tooltips — background, border-color, text color all set via setProperty with !important
16247e8ea635SAtari911- Section left border bars — border-left with !important
16257e8ea635SAtari911- Event color indicator bars — border-left-color with !important
16267e8ea635SAtari911- Sidebar section event text (Purple and Pink themes)
16277e8ea635SAtari911
16287e8ea635SAtari911### Complete CSS Variable Audit (41 conversions in v6.1.1)
16297e8ea635SAtari911- All remaining hardcoded colors in style.css converted to CSS variable references
16307e8ea635SAtari911- Calendar borders, text colors, backgrounds, input focus shadows, accent borders
16317e8ea635SAtari911- Only legitimate hardcodes remain (keyframe animations, theme-specific override blocks)
16327e8ea635SAtari911
16337e8ea635SAtari911### Semantic Color System
16347e8ea635SAtari911- New CSS variables: `--pastdue-color`, `--pastdue-bg`, `--pastdue-bg-strong`, `--pastdue-bg-light`
16357e8ea635SAtari911- New CSS variables: `--tomorrow-bg`, `--tomorrow-bg-strong`, `--tomorrow-bg-light`
16367e8ea635SAtari911- Injected into all 3 CSS var blocks (full calendar, event panel, sidebar widget)
16377e8ea635SAtari911- Today/Tomorrow/Important section colors now theme-derived instead of hardcoded
16387e8ea635SAtari911
16397e8ea635SAtari911### Section Headers Fully Themed
16407e8ea635SAtari911- Today/Tomorrow/Important headers use theme accent colors instead of fixed green/orange/purple
16417e8ea635SAtari911- Matrix: bright/standard/dim green, Purple: bright/standard/dim purple, Pink: hot/medium/light pink
16427e8ea635SAtari911- Professional: blue shades, Wiki: template-derived colors
16437e8ea635SAtari911- Dark theme headers use dark background color for text contrast
16447e8ea635SAtari911
16457e8ea635SAtari911### Pink Theme Enhancements
16467e8ea635SAtari911- **Heart today indicator** — day number displayed inside a ♥ with hot pink glow, centered via inline-flex, `pink-heart-beat` animation with realistic double-beat pulse
16477e8ea635SAtari911- **Firework button hover** — `pink-firework-burst` keyframe animation with multi-point radiating box-shadows, scale/brightness effects on hover, instant flash on click
16487e8ea635SAtari911- **Checkbox glow** — hot pink border with ambient glow, hover intensifies, checked fills with glow
16497e8ea635SAtari911
16507e8ea635SAtari911### All Theme Checkbox Theming
16517e8ea635SAtari911- Matrix: bright green border + green glow, Purple: purple border + purple glow
16527e8ea635SAtari911- Pink: hot pink border + pink glow (with enhanced ambient effect)
16537e8ea635SAtari911- Hover scales 1.1x with intensified glow on all themes
16547e8ea635SAtari911- Checked state fills with theme accent color + outer glow
16557e8ea635SAtari911
16567e8ea635SAtari911### System Tooltips Themed
16577e8ea635SAtari911- Both tooltip functions use theme-derived colors from `$themeStyles`
16587e8ea635SAtari911- Green tooltip: `text_bright`, Purple: `border`, Orange: `text_primary`
16597e8ea635SAtari911- Background from `$themeStyles['bg']`, divider borders use theme accent colors
16607e8ea635SAtari911- All properties set with `style.setProperty(prop, value, "important")`
16617e8ea635SAtari911
16627e8ea635SAtari911### Namespace Filter Badge Cleanup
16637e8ea635SAtari911- Removed inline namespace badge from event side panel header
16647e8ea635SAtari911- Filter indicator bar ("Filtering: namespace ✕") retained and working
16657e8ea635SAtari911- AJAX-based namespace filtering fully functional via onclick handlers
16667e8ea635SAtari911
16677e8ea635SAtari911## Version 6.1.0 (2026-02-10) - TODAY INDICATOR, BUTTON HOVER & CHECKBOXES
16687e8ea635SAtari911
16697e8ea635SAtari911### Today Indicator
16707e8ea635SAtari911- **Added:** Today's day number now shows as a filled circle with theme accent color background and contrasting text (like Google Calendar's today indicator)
16717e8ea635SAtari911- **Added:** Today cell has `--cell-today-bg` background AND a visible inset border glow on hover using `--border-main`
16727e8ea635SAtari911- **Added:** `.day-num` now uses `--text-primary` for color instead of relying on browser default
16737e8ea635SAtari911
16747e8ea635SAtari911### Button Hover/Click Theming
16757e8ea635SAtari911- **Fixed:** All buttons now use `filter: brightness(1.3)` on hover for a visible glow effect across all themes
16767e8ea635SAtari911- **Fixed:** All buttons use `filter: brightness(0.85)` on click/active for a press-down darkening effect
16777e8ea635SAtari911- **Fixed:** Cal nav buttons (‹/›), Today button, +Add Event button, panel nav/today/add buttons, dialog Save/Cancel buttons, month picker Go/Cancel buttons, popup + Add Event button — ALL now have visible themed hover/click feedback with shadow
16787e8ea635SAtari911- **Removed:** Generic `opacity: 0.9` hover which was barely visible on dark themes
16797e8ea635SAtari911
16807e8ea635SAtari911### Checkboxes Themed
16817e8ea635SAtari911- **Added:** Custom checkbox styling for `.task-checkbox` — uses `appearance: none` with themed border (`--border-main`), hover glow, and filled accent background when checked with ✓ mark
16827e8ea635SAtari911- **Added:** `accent-color: var(--text-bright)` on all dialog checkboxes (task, recurring) for consistent theme coloring
16837e8ea635SAtari911
16847e8ea635SAtari911### Form Input Text
16857e8ea635SAtari911- **Fixed:** `.input-sleek` now has `color: var(--text-primary)` — form text is visible on dark themes
16867e8ea635SAtari911- **Added:** `::placeholder` styling for inputs/textareas using `--text-dim`
16877e8ea635SAtari911
16887e8ea635SAtari911## Version 6.0.9 (2026-02-09) - FORM TEXT, CELL HOVER & GLOW TUNING
16897e8ea635SAtari911
16907e8ea635SAtari911### Form Input Text Fix
16917e8ea635SAtari911- **Fixed:** Form input text (`input-sleek`, `textarea-sleek`, `select`) had no `color` property — browser defaulted to black, invisible on dark themes. Now uses `var(--text-primary)`.
16927e8ea635SAtari911- **Added:** Themed placeholder text (`::placeholder`) for inputs/textareas
16937e8ea635SAtari911
16947e8ea635SAtari911### Button & Cell Hover Theming
16957e8ea635SAtari911- **Added:** Calendar day cells (`.cal-day`) now have a themed hover effect — background shifts to `--cell-today-bg` with an inset border glow using `--border-main`
16967e8ea635SAtari911- **Improved:** Nav buttons (`◄`/`►`) and Today button hover now show a themed glow + scale effect instead of just opacity change
16977e8ea635SAtari911- **Added:** Active (click) state for nav/today buttons with scale-down feedback
16987e8ea635SAtari911- **Improved:** Month picker hover now also shows a subtle theme shadow
16997e8ea635SAtari911
17007e8ea635SAtari911### Glow Reduced to 1px for Matrix/Purple
17017e8ea635SAtari911- Matrix and purple text glow reduced from 2px to 1px across: event titles, descriptions, meta, links, sidebar day numbers, sidebar event titles, sidebar dates
17027e8ea635SAtari911- Matrix clock pulse animation reduced from 6px/10px+15px to 2px/4px+6px
17037e8ea635SAtari911- Weather text glow reduced to 1px, clock to 2px
17047e8ea635SAtari911- Pink remains at 2px (barely noticeable)
17057e8ea635SAtari911
17067e8ea635SAtari911## Version 6.0.8 (2026-02-09) - LINKS, GLOW CONSISTENCY & PINK TONE-DOWN
17077e8ea635SAtari911
17087e8ea635SAtari911### Links Themed
17097e8ea635SAtari911- **Added:** `.cal-link` CSS class — all links rendered via `renderDescription()` now pick up theme accent color via `--text-bright`
17107e8ea635SAtari911- **Fixed:** Sidebar widget links (`a.cal-link`) inherit theme colors
17117e8ea635SAtari911- **Fixed:** Event list widget description links (`eventlist-widget-desc a`) use CSS vars
17127e8ea635SAtari911- **Fixed:** Simple event list body links/strong/code all themed
17137e8ea635SAtari911
17147e8ea635SAtari911### Text Glow Consistency
17157e8ea635SAtari911- **Added:** Subtle `text-shadow: 0 0 2px` glow on event titles, meta, and descriptions for all three dark themes (matrix, purple, pink) in the main calendar and event panel
17167e8ea635SAtari911- **Added:** Subtle link glow on dark themes
17177e8ea635SAtari911- **Added:** Matrix and purple now get the same barely-visible text glow that pink had on sidebar week grid day numbers and event titles
17187e8ea635SAtari911
17197e8ea635SAtari911### Pink Glow Toned Down
17207e8ea635SAtari911- **Reduced:** Sidebar today header box-shadow from `0 0 10px 0.4` to `0 0 6px 0.25`
17217e8ea635SAtari911- **Reduced:** Day number sparkle animation from 3px/6px+10px to 2px/3px
17227e8ea635SAtari911- **Reduced:** Today cell shimmer from 3px+5px / 8px+12px to 2px+3px / 4px+6px
17237e8ea635SAtari911- **Reduced:** Event bar glow pulse from 2px/4px+6px to 1px/2px+3px
17247e8ea635SAtari911- **Reduced:** Today hover glow from 10px+15px to 5px+8px
17257e8ea635SAtari911- **Reduced:** Event item glow from 2px/5px to 1px/3px
17267e8ea635SAtari911- **Reduced:** Calendar container glow from 8px to 5px
17277e8ea635SAtari911
17287e8ea635SAtari911### Other
17297e8ea635SAtari911- **Themed:** Sidebar weather, date, and clock text colors and glow via CSS vars
17307e8ea635SAtari911
17317e8ea635SAtari911## Version 6.0.7 (2026-02-09) - BADGES, BUTTONS & CONFLICT THEMING
17327e8ea635SAtari911
17337e8ea635SAtari911- **Fixed:** Namespace badges (`.namespace-badge`, `.event-namespace-badge`, `.panel-ns-badge`, standalone header badge) — all now use theme accent colors instead of hardcoded green/blue
17347e8ea635SAtari911- **Fixed:** TODAY badge uses `--border-main` for background instead of hardcoded purple
17357e8ea635SAtari911- **Fixed:** Conflict alert badge (`⚠️`) uses `--border-main` background and `--text-bright` border — matches theme accent
17367e8ea635SAtari911- **Fixed:** Conflict tooltip header background now set inline from theme vars (tooltip is appended to body, can't inherit CSS vars)
17377e8ea635SAtari911- **Fixed:** Conflict tooltip body items use themed text and border colors
17387e8ea635SAtari911- **Fixed:** Month picker Go/Cancel buttons themed (`--text-bright` for save, `--cell-bg` for cancel)
17397e8ea635SAtari911- **Fixed:** Calendar header month/year hover uses `--cell-today-bg` background
17407e8ea635SAtari911- **Fixed:** Inline search input border uses `--border-color`
17417e8ea635SAtari911- **Fixed:** Event list header border uses `--border-color`
17427e8ea635SAtari911
17437e8ea635SAtari911## Version 6.0.6 (2026-02-09) - COMPLETE TEXT THEMING
17447e8ea635SAtari911
17457e8ea635SAtari911- **Fixed:** Calendar header month/year title had hardcoded dark color — now uses `--text-primary`
17467e8ea635SAtari911- **Fixed:** Month/year picker hover used hardcoded gray background and green text — now uses `--cell-today-bg` and `--text-bright`
17477e8ea635SAtari911- **Fixed:** Event list items (titles, meta, descriptions, links, code blocks, bold text) — all now theme-aware via CSS vars
17487e8ea635SAtari911- **Fixed:** Completed/past event states used hardcoded grays — now use `--cell-bg`, `--text-dim`, `--cell-today-bg`
17497e8ea635SAtari911- **Fixed:** Scrollbar track/thumb colors now use theme vars
17507e8ea635SAtari911- **Fixed:** Namespace filter indicator (background, label, badge, close button) — all themed
17517e8ea635SAtari911- **Fixed:** Panel standalone month picker hover and namespace badge — themed
17527e8ea635SAtari911- **Fixed:** Calendar header border-bottom — now uses `--border-color`
17537e8ea635SAtari911
17547e8ea635SAtari911## Version 6.0.5 (2026-02-09) - THEMED BORDERS & EVENT PANEL
17557e8ea635SAtari911
17567e8ea635SAtari911- **Added:** Theme-colored border and glow for calendar container on matrix, purple, and pink themes — matches the sidebar widget's `2px solid` + `box-shadow` glow style. Professional and wiki themes unchanged (keep subtle 1px gray border).
17577e8ea635SAtari911- **Added:** Theme-colored border and glow for event panel (`{{eventpanel}}`) on dark themes using `[data-theme]` attribute selectors
17587e8ea635SAtari911- **Themed:** Event panel header (nav buttons, month title, today button, search input, add button) — all now use CSS vars
17597e8ea635SAtari911- **Themed:** Panel standalone header background and border
17607e8ea635SAtari911
17617e8ea635SAtari911## Version 6.0.4 (2026-02-09) - FULL DIALOG THEMING
17627e8ea635SAtari911
17637e8ea635SAtari911- **Fixed:** Day cell click popup (day-popup) used hardcoded white/gray colors — now fully theme-aware using CSS variables
17647e8ea635SAtari911- **Fixed:** Event add/edit dialog (dialog-content-sleek) had hardcoded white background and blue header — now uses theme colors
17657e8ea635SAtari911- **Fixed:** Month picker dialog had hardcoded white background and dark text — now themed
17667e8ea635SAtari911- **Fixed:** Popup event items, titles, times, descriptions, footer, add-event button, close button — all now use CSS vars with sensible fallbacks
17677e8ea635SAtari911- **Fixed:** Form elements (field labels, inputs, checkboxes, recurring options, color pickers) — all reference theme CSS vars
17687e8ea635SAtari911- **How it works:** `propagateThemeVars()` copies CSS variables from the calendar container to dialogs/popups (which are `position:fixed` or appended to `document.body`). All CSS selectors now reference these variables with fallbacks for graceful degradation.
17697e8ea635SAtari911
17704590242dSAtari911## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB
17714590242dSAtari911
17724590242dSAtari911- **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Events Manager and Cleanup sections)
17734590242dSAtari911- **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage tab sections
17744590242dSAtari911- **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now independent of Outlook config save
17754590242dSAtari911- **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value
17764590242dSAtari911
17770c3b6e81SAtari911## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX
17780c3b6e81SAtari911
17790c3b6e81SAtari911- **Fixed:** In Firefox, the SMTWTFS day-of-week header row was rendering at the same height as calendar day cells (58px instead of 22px). Firefox ignores `max-height` on `<th>` table cells per CSS spec. Replaced `<thead><tr><th>` with a CSS grid `<div>` outside the table, making header height fully independent of table cell sizing. Works consistently across Chrome, Firefox, Safari, and Edge.
17800c3b6e81SAtari911
17810c3b6e81SAtari911## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX
17820c3b6e81SAtari911
17830c3b6e81SAtari911- **Fixed:** `theme=wiki` (and all `theme=` parameters) had no effect — all three render functions (`renderCompactCalendar`, `renderEventPanelOnly`, `renderSidebarWidget`) were ignoring the syntax parameter and always reading the admin global default via `getSidebarTheme()`
17840c3b6e81SAtari911- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller
17850c3b6e81SAtari911- **How it works now:** `{{calendar theme=wiki}}`, `{{eventlist sidebar theme=purple}}`, `{{eventpanel theme=professional}}` all correctly apply the specified theme. The admin-configured default is used as fallback only when no `theme=` parameter is present.
17860c3b6e81SAtari911
17871d05cddcSAtari911
17889ccd446eSAtari911## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE
17899ccd446eSAtari911
17909ccd446eSAtari911- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed
17919ccd446eSAtari911- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified
17929ccd446eSAtari911- **Audited:** style.css (3,218 lines) — balanced braces confirmed
17939ccd446eSAtari911- **Audited:** All admin manage tab action handlers verified functional (13 actions)
17949ccd446eSAtari911- **New:** Fresh README.md for GitHub with complete documentation
17959ccd446eSAtari911- **Includes all v5.5.x fixes:**
17969ccd446eSAtari911  - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total))
17979ccd446eSAtari911  - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel
17989ccd446eSAtari911  - Conflict badges on past events after AJAX navigation
17999ccd446eSAtari911  - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal
18009ccd446eSAtari911
18019ccd446eSAtari911## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP
18029ccd446eSAtari911
18039ccd446eSAtari911- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers
18049ccd446eSAtari911- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0`
18059ccd446eSAtari911- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning
18069ccd446eSAtari911- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name
18079ccd446eSAtari911- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared
18089ccd446eSAtari911- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check
18099ccd446eSAtari911- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving
18109ccd446eSAtari911- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files
18119ccd446eSAtari911- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt
18129ccd446eSAtari911- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache
18139ccd446eSAtari911- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`)
18149ccd446eSAtari911- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries`
18159ccd446eSAtari911- **Removed:** Stale "NEW!" comment from Events Manager section
18169ccd446eSAtari911
18179ccd446eSAtari911## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH
18189ccd446eSAtari911
18199ccd446eSAtari911- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API
18209ccd446eSAtari911- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status)
18219ccd446eSAtari911- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run
18229ccd446eSAtari911- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing
18239ccd446eSAtari911- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total)
18249ccd446eSAtari911- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed
18259ccd446eSAtari911- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important)
18269ccd446eSAtari911- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead
18279ccd446eSAtari911- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text
18289ccd446eSAtari911- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes)
18299ccd446eSAtari911
18309ccd446eSAtari911## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH
18319ccd446eSAtari911
18329ccd446eSAtari911- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys
18339ccd446eSAtari911- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional)
18349ccd446eSAtari911- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background
18359ccd446eSAtari911- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files)
18369ccd446eSAtari911- **Changed:** Wiki theme section header text now white for readability on colored backgrounds
18379ccd446eSAtari911- **Changed:** Week grid JS theme colors now use actual $themeStyles values
18389ccd446eSAtari911
18399ccd446eSAtari911## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX
18409ccd446eSAtari911
18419ccd446eSAtari911- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch)
18429ccd446eSAtari911
18439ccd446eSAtari911## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING
18449ccd446eSAtari911
18459ccd446eSAtari911- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner
18469ccd446eSAtari911- **Fixed:** Week grid conflict tooltips also fixed (same issue)
18479ccd446eSAtari911- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data
18489ccd446eSAtari911- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip)
18499ccd446eSAtari911
18509ccd446eSAtari911## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD
18519ccd446eSAtari911
18529ccd446eSAtari911- **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)
18539ccd446eSAtari911
18549ccd446eSAtari911## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS
18559ccd446eSAtari911
18569ccd446eSAtari911- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body)
18579ccd446eSAtari911- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string
18589ccd446eSAtari911
18599ccd446eSAtari911## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING
18609ccd446eSAtari911
18619ccd446eSAtari911- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping
18629ccd446eSAtari911- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON)
18639ccd446eSAtari911- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute
18649ccd446eSAtari911- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility
18659ccd446eSAtari911
18669ccd446eSAtari911## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING
18679ccd446eSAtari911
18689ccd446eSAtari911- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation
18699ccd446eSAtari911- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads
18709ccd446eSAtari911- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-)
18719ccd446eSAtari911- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1
18729ccd446eSAtari911- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds
18739ccd446eSAtari911- **Added:** ESC key now also closes day popups and conflict tooltips
18749ccd446eSAtari911- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding
18759ccd446eSAtari911
18769ccd446eSAtari911## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY
18779ccd446eSAtari911
18789ccd446eSAtari911- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance
18799ccd446eSAtari911- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js
18809ccd446eSAtari911- **Refactored:** style.css is now the single source of truth for all visual styling
18819ccd446eSAtari911- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container
18829ccd446eSAtari911- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget)
18839ccd446eSAtari911- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars
18849ccd446eSAtari911- **Added:** CSS variable injection for {{eventlist panel}} containers
18859ccd446eSAtari911- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers
18869ccd446eSAtari911- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position
18879ccd446eSAtari911- **Added:** Wiki template mapping reads __link__ as accent color from style.ini
18889ccd446eSAtari911- **Added:** Detailed CSS variable reference table in style.css header comment
18899ccd446eSAtari911- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php
18909ccd446eSAtari911- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles
18919ccd446eSAtari911- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div
18929ccd446eSAtari911- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible)
18939ccd446eSAtari911- **Removed:** $isWikiTheme branching from PHP render path
18949ccd446eSAtari911
18959ccd446eSAtari911## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! ��
18969ccd446eSAtari911
18979ccd446eSAtari911### �� Added: Hearts in Explosions!
18989ccd446eSAtari911- **Added:** 8-12 pink hearts in each click explosion
18999ccd446eSAtari911- **Added:** Random sizes (12-28px) and directions
19009ccd446eSAtari911- **Result:** Extra love in every click! ��
19019ccd446eSAtari911
19029ccd446eSAtari911### �� Fixed: Background CSS Property for Dark Mode Readers
19039ccd446eSAtari911- **Fixed:** Added `background: transparent` to CSS (was completely removed)
19049ccd446eSAtari911- **Fixed:** Now CSS readers can detect and modify background property
19059ccd446eSAtari911- **Why:** Inline styles override transparent, but CSS readers can now see the property
19069ccd446eSAtari911- **Result:** Dark mode plugins can now change calendar backgrounds!
19079ccd446eSAtari911
19089ccd446eSAtari911### The CSS Problem
19099ccd446eSAtari911
19109ccd446eSAtari911**Why backgrounds weren't changing with dark mode readers**:
19119ccd446eSAtari911
19129ccd446eSAtari911**Before (v5.3.5)**:
19139ccd446eSAtari911```css
19149ccd446eSAtari911.calendar-compact-grid tbody td {
19159ccd446eSAtari911    /* background removed - set via inline style */
19169ccd446eSAtari911    border: 1px solid...
19179ccd446eSAtari911}
19189ccd446eSAtari911```
19199ccd446eSAtari911
19209ccd446eSAtari911**Problem**: CSS property doesn't exist!
19219ccd446eSAtari911- Dark mode readers look for `background` property in CSS
19229ccd446eSAtari911- Can't override what doesn't exist
19239ccd446eSAtari911- Inline styles work, but readers can't modify them
19249ccd446eSAtari911
19259ccd446eSAtari911**After (v5.3.6)**:
19269ccd446eSAtari911```css
19279ccd446eSAtari911.calendar-compact-grid tbody td {
19289ccd446eSAtari911    background: transparent;  /* Now exists! */
19299ccd446eSAtari911    border: 1px solid...
19309ccd446eSAtari911}
19319ccd446eSAtari911```
19329ccd446eSAtari911
19339ccd446eSAtari911**Solution**:
19349ccd446eSAtari911- Property exists in CSS
19359ccd446eSAtari911- Dark mode readers can override it
19369ccd446eSAtari911- Inline styles still override transparent
19379ccd446eSAtari911- Everyone wins!
19389ccd446eSAtari911
19399ccd446eSAtari911### What's Fixed
19409ccd446eSAtari911
19419ccd446eSAtari911**Elements now have background property**:
19429ccd446eSAtari911- `.calendar-compact-grid tbody td` ✓
19439ccd446eSAtari911- `.calendar-compact-grid tbody td:hover` ✓
19449ccd446eSAtari911- `.event-compact-item` ✓
19459ccd446eSAtari911- `.event-compact-item:hover` ✓
19469ccd446eSAtari911
19479ccd446eSAtari911**How it works**:
19489ccd446eSAtari9111. CSS sets `background: transparent` (default)
19499ccd446eSAtari9112. Inline styles set actual color (overrides transparent)
19509ccd446eSAtari9113. Dark mode readers can override CSS property
19519ccd446eSAtari9114. Works for everyone!
19529ccd446eSAtari911
19539ccd446eSAtari911### Hearts in Explosion
19549ccd446eSAtari911
19559ccd446eSAtari911**Click anywhere → Hearts explode!**
19569ccd446eSAtari911
19579ccd446eSAtari911**Heart details**:
19589ccd446eSAtari911- Count: 8-12 per explosion (random)
19599ccd446eSAtari911- Size: 12-28px (random variety)
19609ccd446eSAtari911- Emoji: �� (pink heart)
19619ccd446eSAtari911- Direction: Random 360°
19629ccd446eSAtari911- Speed: 60-140px travel
19639ccd446eSAtari911- Duration: 0.8-1.2s
19649ccd446eSAtari911- z-index: 9999999 (always visible)
19659ccd446eSAtari911
19669ccd446eSAtari911**Combined with**:
19679ccd446eSAtari911- 25 glowing particles
19689ccd446eSAtari911- 40 pixel sparkles
19699ccd446eSAtari911- Bright flash
19709ccd446eSAtari911- **Total: 73-77 elements!**
19719ccd446eSAtari911
19729ccd446eSAtari911### Visual Result
19739ccd446eSAtari911
19749ccd446eSAtari911**Click explosion**:
19759ccd446eSAtari911```
19769ccd446eSAtari911    �� ✦ • ✦ ��
19779ccd446eSAtari911  �� •         • ��
19789ccd446eSAtari911✦  •     ��!     •  ✦
19799ccd446eSAtari911  �� •         • ��
19809ccd446eSAtari911    �� ✦ • ✦ ��
19819ccd446eSAtari911
19829ccd446eSAtari911Hearts + Particles + Pixels!
19839ccd446eSAtari911```
19849ccd446eSAtari911
19859ccd446eSAtari911**Dark mode now works**:
19869ccd446eSAtari911```css
19879ccd446eSAtari911/* Dark mode reader can now do this: */
19889ccd446eSAtari911.calendar-compact-grid tbody td {
19899ccd446eSAtari911    background: #000 !important;  /* Works! */
19909ccd446eSAtari911}
19919ccd446eSAtari911```
19929ccd446eSAtari911
19939ccd446eSAtari911### Why Transparent Works
19949ccd446eSAtari911
19959ccd446eSAtari911**CSS Cascade**:
19969ccd446eSAtari9111. CSS: `background: transparent` (lowest priority)
19979ccd446eSAtari9112. Inline style: `background: #f5f5f5` (overrides CSS)
19989ccd446eSAtari9113. Dark mode CSS: `background: #000 !important` (overrides inline)
19999ccd446eSAtari911
20009ccd446eSAtari911**Perfect solution!** ✓
20019ccd446eSAtari911
20029ccd446eSAtari911## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! ��
20039ccd446eSAtari911
20049ccd446eSAtari911### �� Fixed: Particles Now Appear Above All Dialogs!
20059ccd446eSAtari911- **Fixed:** Increased z-index to 9999999 for all particles
20069ccd446eSAtari911- **Fixed:** Particles now visible above event dialogs, month picker, etc.
20079ccd446eSAtari911- **Result:** Cursor effects and explosions always visible!
20089ccd446eSAtari911
20099ccd446eSAtari911### The Z-Index Problem
20109ccd446eSAtari911
20119ccd446eSAtari911**Before (v5.3.4)**:
20129ccd446eSAtari911- Particles: z-index 9999
20139ccd446eSAtari911- Dialogs: z-index 10000-999999
20149ccd446eSAtari911- **Particles hidden behind dialogs!**
20159ccd446eSAtari911
20169ccd446eSAtari911**After (v5.3.5)**:
20179ccd446eSAtari911- Particles: z-index 9999999
20189ccd446eSAtari911- Trail: z-index 9999998
20199ccd446eSAtari911- Pixels: z-index 9999997
20209ccd446eSAtari911- **Particles ALWAYS on top!**
20219ccd446eSAtari911
20229ccd446eSAtari911### What's Fixed
20239ccd446eSAtari911
20249ccd446eSAtari911✅ **Main particles** (explosion orbs)
20259ccd446eSAtari911✅ **Cursor trail** (glowing dots)
20269ccd446eSAtari911✅ **Pixel sparkles** (tiny bright stars)
20279ccd446eSAtari911✅ **Flash effect** (click burst)
20289ccd446eSAtari911
20299ccd446eSAtari911**All now appear above**:
20309ccd446eSAtari911- Event dialog popups
20319ccd446eSAtari911- Month picker
20329ccd446eSAtari911- Day popups
20339ccd446eSAtari911- Any modal overlays
20349ccd446eSAtari911
20359ccd446eSAtari911### Visual Result
20369ccd446eSAtari911
20379ccd446eSAtari911**Moving cursor over dialog**:
20389ccd446eSAtari911```
20399ccd446eSAtari911┌─────────────────────┐
20409ccd446eSAtari911│  Event Dialog       │
20419ccd446eSAtari911│  ✦ • ✦             │  ← Sparkles visible!
20429ccd446eSAtari911│    →  ✦             │  ← Cursor trail visible!
20439ccd446eSAtari911│  • ✦ •              │
20449ccd446eSAtari911└─────────────────────┘
20459ccd446eSAtari911```
20469ccd446eSAtari911
20479ccd446eSAtari911**Clicking on dialog**:
20489ccd446eSAtari911```
20499ccd446eSAtari911┌─────────────────────┐
20509ccd446eSAtari911│  ✦ • ✦ • ✦         │
20519ccd446eSAtari911│ •     ��!     •    │  ← Explosion visible!
20529ccd446eSAtari911│  ✦ • ✦ • ✦         │
20539ccd446eSAtari911└─────────────────────┘
20549ccd446eSAtari911```
20559ccd446eSAtari911
20569ccd446eSAtari911**Perfect visibility everywhere!** ✨
20579ccd446eSAtari911
20589ccd446eSAtari911## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX
20599ccd446eSAtari911
20609ccd446eSAtari911### �� Fixed: Month Picker Now Themed!
20619ccd446eSAtari911- **Fixed:** Jump to Month dialog now uses theme colors
20629ccd446eSAtari911- **Fixed:** Dialog background, borders, text all themed
20639ccd446eSAtari911- **Fixed:** Select dropdowns use theme colors
20649ccd446eSAtari911- **Fixed:** Buttons use theme accent colors
20659ccd446eSAtari911- **Result:** Month picker matches calendar theme!
20669ccd446eSAtari911
20679ccd446eSAtari911### �� Fixed: Cursor Effects Work in Dialogs!
20689ccd446eSAtari911- **Fixed:** Cursor trail now works when hovering over dialogs
20699ccd446eSAtari911- **Fixed:** Click explosions work when clicking inside dialogs
20709ccd446eSAtari911- **Technical:** Changed to capture phase event listeners
20719ccd446eSAtari911- **Result:** Effects work EVERYWHERE now!
20729ccd446eSAtari911
20739ccd446eSAtari911### Month Picker Theming
20749ccd446eSAtari911
20759ccd446eSAtari911**Before (v5.3.3)**:
20769ccd446eSAtari911- White background (hardcoded)
20779ccd446eSAtari911- Black text (hardcoded)
20789ccd446eSAtari911- No theme integration
20799ccd446eSAtari911- Looked out of place
20809ccd446eSAtari911
20819ccd446eSAtari911**After (v5.3.4)**:
20829ccd446eSAtari911- Dialog background: `theme.bg`
20839ccd446eSAtari911- Dialog border: `theme.border`
20849ccd446eSAtari911- Text color: `theme.text_primary`
20859ccd446eSAtari911- Dropdowns: `theme.cell_bg` + `theme.text_primary`
20869ccd446eSAtari911- Cancel button: `theme.cell_bg`
20879ccd446eSAtari911- Go button: `theme.border` (accent color)
20889ccd446eSAtari911
20899ccd446eSAtari911**Fully integrated!** ✅
20909ccd446eSAtari911
20919ccd446eSAtari911---
20929ccd446eSAtari911
20939ccd446eSAtari911### Theme Examples
20949ccd446eSAtari911
20959ccd446eSAtari911**Matrix Theme**:
20969ccd446eSAtari911```
20979ccd446eSAtari911┌─────────────────────────┐
20989ccd446eSAtari911│ Jump to Month           │ ← Dark bg, green border
20999ccd446eSAtari911│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
21009ccd446eSAtari911│ [Cancel] [Go]           │ ← Green "Go" button
21019ccd446eSAtari911└─────────────────────────┘
21029ccd446eSAtari911```
21039ccd446eSAtari911
21049ccd446eSAtari911**Pink Theme**:
21059ccd446eSAtari911```
21069ccd446eSAtari911┌─────────────────────────┐
21079ccd446eSAtari911│ Jump to Month           │ ← Dark bg, pink border
21089ccd446eSAtari911│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
21099ccd446eSAtari911│ [Cancel] [Go]           │ ← Pink "Go" button
21109ccd446eSAtari911└─────────────────────────┘
21119ccd446eSAtari911With sparkle effects! ✨
21129ccd446eSAtari911```
21139ccd446eSAtari911
21149ccd446eSAtari911**Professional Theme**:
21159ccd446eSAtari911```
21169ccd446eSAtari911┌─────────────────────────┐
21179ccd446eSAtari911│ Jump to Month           │ ← Clean bg, blue border
21189ccd446eSAtari911│ [February ▼] [2026 ▼]  │ ← Clean dropdowns
21199ccd446eSAtari911│ [Cancel] [Go]           │ ← Blue "Go" button
21209ccd446eSAtari911└─────────────────────────┘
21219ccd446eSAtari911```
21229ccd446eSAtari911
21239ccd446eSAtari911---
21249ccd446eSAtari911
21259ccd446eSAtari911### Dialog Cursor Fix
21269ccd446eSAtari911
21279ccd446eSAtari911**The Problem**:
21289ccd446eSAtari911Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects!
21299ccd446eSAtari911
21309ccd446eSAtari911**The Solution**:
21319ccd446eSAtari911Use **capture phase** event listeners:
21329ccd446eSAtari911```javascript
21339ccd446eSAtari911// Before (bubbling phase)
21349ccd446eSAtari911document.addEventListener('click', handler)
21359ccd446eSAtari911
21369ccd446eSAtari911// After (capture phase)
21379ccd446eSAtari911document.addEventListener('click', handler, true)
21389ccd446eSAtari91121399ccd446eSAtari911                                   Capture phase!
21409ccd446eSAtari911```
21419ccd446eSAtari911
21429ccd446eSAtari911**Capture phase runs BEFORE stopPropagation!**
21439ccd446eSAtari911
21449ccd446eSAtari911---
21459ccd446eSAtari911
21469ccd446eSAtari911### Now Works Everywhere
21479ccd446eSAtari911
21489ccd446eSAtari911✅ **Calendar area**
21499ccd446eSAtari911✅ **Event dialogs**
21509ccd446eSAtari911✅ **Month picker dialog**
21519ccd446eSAtari911✅ **Day popup dialogs**
21529ccd446eSAtari911✅ **Anywhere on screen**
21539ccd446eSAtari911
21549ccd446eSAtari911**No more blocked effects!** ��
21559ccd446eSAtari911
21569ccd446eSAtari911---
21579ccd446eSAtari911
21589ccd446eSAtari911### Technical Details
21599ccd446eSAtari911
21609ccd446eSAtari911**Event phases**:
21619ccd446eSAtari911```
21629ccd446eSAtari9111. Capture phase   ← We listen here now!
21639ccd446eSAtari9112. Target phase
21649ccd446eSAtari9113. Bubbling phase  ← stopPropagation blocks this
21659ccd446eSAtari911```
21669ccd446eSAtari911
21679ccd446eSAtari911**By using capture phase**:
21689ccd446eSAtari911- Events caught before stopPropagation
21699ccd446eSAtari911- Works in all dialogs
21709ccd446eSAtari911- No conflicts with dialog logic
21719ccd446eSAtari911
21729ccd446eSAtari911---
21739ccd446eSAtari911
21749ccd446eSAtari911### All Dialogs Checked
21759ccd446eSAtari911
21769ccd446eSAtari911✅ **Month picker** - Now themed!
21779ccd446eSAtari911✅ **Event dialog** - Already themed
21789ccd446eSAtari911✅ **Day popup** - Already themed
21799ccd446eSAtari911
21809ccd446eSAtari911**Everything consistent!** ��
21819ccd446eSAtari911
21829ccd446eSAtari911---
21839ccd446eSAtari911
21849ccd446eSAtari911## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨
21859ccd446eSAtari911
21869ccd446eSAtari911### ✨ Added: Bright Neon Pixel Sparkles Everywhere!
21879ccd446eSAtari911- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail
21889ccd446eSAtari911- **Added:** 40 pixel sparkles in click explosions
21899ccd446eSAtari911- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar)
21909ccd446eSAtari911- **Result:** Maximum sparkle effect! ��
21919ccd446eSAtari911
21929ccd446eSAtari911### Tiny Pixel Sparkles
21939ccd446eSAtari911
21949ccd446eSAtari911**3-6 tiny bright pixels appear with each cursor movement!**
21959ccd446eSAtari911
21969ccd446eSAtari911**Characteristics**:
21979ccd446eSAtari911- Size: 1-2px (single pixel appearance!)
21989ccd446eSAtari911- Colors: Bright neon whites and pinks
21999ccd446eSAtari911  - Pure white (#fff) - 40% chance
22009ccd446eSAtari911  - Hot pink (#ff1493)
22019ccd446eSAtari911  - Pink (#ff69b4)
22029ccd446eSAtari911  - Light pink (#ffb6c1)
22039ccd446eSAtari911  - Soft pink (#ff85c1)
22049ccd446eSAtari911- Glow: Triple-layer shadow (intense!)
22059ccd446eSAtari911- Spawn: Random 30px radius around cursor
22069ccd446eSAtari911- Animations:
22079ccd446eSAtari911  - 50% twinkle in place
22089ccd446eSAtari911  - 50% float upward
22099ccd446eSAtari911
22109ccd446eSAtari911**Creates a cloud of sparkles around your cursor!**
22119ccd446eSAtari911
22129ccd446eSAtari911---
22139ccd446eSAtari911
22149ccd446eSAtari911### Click Explosion Enhanced
22159ccd446eSAtari911
22169ccd446eSAtari911**Now with 40 EXTRA pixel sparkles!**
22179ccd446eSAtari911
22189ccd446eSAtari911**Click anywhere → BIG BOOM**:
22199ccd446eSAtari911- 25 main glowing particles (6-10px)
22209ccd446eSAtari911- **40 tiny pixel sparkles (1-2px)** ← NEW!
22219ccd446eSAtari911- Bright white flash
22229ccd446eSAtari911- Total: 65+ visual elements!
22239ccd446eSAtari911
22249ccd446eSAtari911**Pixel sparkles in explosion**:
22259ccd446eSAtari911- Shoot outward in all directions
22269ccd446eSAtari911- Random distances (30-110px)
22279ccd446eSAtari911- Multiple bright colors
22289ccd446eSAtari911- Some twinkle, some explode
22299ccd446eSAtari911- Creates stellar effect!
22309ccd446eSAtari911
22319ccd446eSAtari911---
22329ccd446eSAtari911
22339ccd446eSAtari911### Entire Screen Coverage
22349ccd446eSAtari911
22359ccd446eSAtari911**Effects now work EVERYWHERE!**
22369ccd446eSAtari911
22379ccd446eSAtari911**Before (v5.3.2)**:
22389ccd446eSAtari911- Only inside calendar viewport
22399ccd446eSAtari911- Limited to calendar area
22409ccd446eSAtari911
22419ccd446eSAtari911**After (v5.3.3)**:
22429ccd446eSAtari911- Works on entire screen! ✓
22439ccd446eSAtari911- Cursor trail follows everywhere
22449ccd446eSAtari911- Click explosions anywhere
22459ccd446eSAtari911- Used `position: fixed` + `clientX/Y`
22469ccd446eSAtari911
22479ccd446eSAtari911**Move anywhere on the page for sparkles!**
22489ccd446eSAtari911
22499ccd446eSAtari911---
22509ccd446eSAtari911
22519ccd446eSAtari911### Visual Effect
22529ccd446eSAtari911
22539ccd446eSAtari911**Cursor movement**:
22549ccd446eSAtari911```
22559ccd446eSAtari911    • ✦ •       ← Tiny pixels
22569ccd446eSAtari911  •   ✦   •     ← Glowing trail
22579ccd446eSAtari911✦  •  →  •  ✦   ← Cursor
22589ccd446eSAtari911  •   ✦   •     ← Mixed sizes
22599ccd446eSAtari911    • ✦ •       ← Sparkle cloud
22609ccd446eSAtari911```
22619ccd446eSAtari911
22629ccd446eSAtari911**Click explosion**:
22639ccd446eSAtari911```
22649ccd446eSAtari911    ✦ • ✦ • ✦
22659ccd446eSAtari911  ✦ •         • ✦
22669ccd446eSAtari911✦  •    ��!    •  ✦
22679ccd446eSAtari911  ✦ •         • ✦
22689ccd446eSAtari911    ✦ • ✦ • ✦
22699ccd446eSAtari911
22709ccd446eSAtari91165+ particles total!
22719ccd446eSAtari911```
22729ccd446eSAtari911
22739ccd446eSAtari911---
22749ccd446eSAtari911
22759ccd446eSAtari911### Sparkle Details
22769ccd446eSAtari911
22779ccd446eSAtari911**Trail Pixels** (3-6 per movement):
22789ccd446eSAtari911- Size: 1-2px
22799ccd446eSAtari911- Spawn rate: Every 40ms
22809ccd446eSAtari911- Spread: 30px radius
22819ccd446eSAtari911- Duration: 0.6-0.8s
22829ccd446eSAtari911- 50% twinkle, 50% float
22839ccd446eSAtari911
22849ccd446eSAtari911**Explosion Pixels** (40 total):
22859ccd446eSAtari911- Size: 1-3px
22869ccd446eSAtari911- Spread: 30-110px radius
22879ccd446eSAtari911- Duration: 0.4-0.8s
22889ccd446eSAtari911- All directions
22899ccd446eSAtari911- Intense glow
22909ccd446eSAtari911
22919ccd446eSAtari911**Main Particles** (25 total):
22929ccd446eSAtari911- Size: 4-10px
22939ccd446eSAtari911- Spread: 50-150px
22949ccd446eSAtari911- Full color palette
22959ccd446eSAtari911- Original firework effect
22969ccd446eSAtari911
22979ccd446eSAtari911---
22989ccd446eSAtari911
22999ccd446eSAtari911### Color Distribution
23009ccd446eSAtari911
23019ccd446eSAtari911**Pixel sparkles favor white**:
23029ccd446eSAtari911- 40% pure white (#fff) - brightest!
23039ccd446eSAtari911- 60% pink shades - variety
23049ccd446eSAtari911
23059ccd446eSAtari911**Creates brilliant sparkle effect!**
23069ccd446eSAtari911
23079ccd446eSAtari911---
23089ccd446eSAtari911
23099ccd446eSAtari911### Performance
23109ccd446eSAtari911
23119ccd446eSAtari911**Still optimized**:
23129ccd446eSAtari911- Trail: 30ms throttle
23139ccd446eSAtari911- Pixels: 40ms throttle
23149ccd446eSAtari911- Auto-cleanup
23159ccd446eSAtari911- Hardware accelerated
23169ccd446eSAtari911- Smooth 60fps
23179ccd446eSAtari911
23189ccd446eSAtari911**Lots of sparkles, zero lag!**
23199ccd446eSAtari911
23209ccd446eSAtari911---
23219ccd446eSAtari911
23229ccd446eSAtari911### Full-Screen Magic
23239ccd446eSAtari911
23249ccd446eSAtari911**Pink theme calendar detected**:
23259ccd446eSAtari911```javascript
23269ccd446eSAtari911if (pink calendar exists) {
23279ccd446eSAtari911    Enable effects for ENTIRE SCREEN
23289ccd446eSAtari911    Not just calendar area
23299ccd446eSAtari911}
23309ccd446eSAtari911```
23319ccd446eSAtari911
23329ccd446eSAtari911**Works everywhere on page!** ✨
23339ccd446eSAtari911
23349ccd446eSAtari911---
23359ccd446eSAtari911
23369ccd446eSAtari911## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! ����
23379ccd446eSAtari911
23389ccd446eSAtari911### �� Changed: Glowing Pink Particles Instead of Emoji Sparkles!
23399ccd446eSAtari911- **Removed:** Emoji sparkle images (✨)
23409ccd446eSAtari911- **Added:** Glowing pink particle trail following cursor
23419ccd446eSAtari911- **Added:** FIREWORKS explosion on click!
23429ccd446eSAtari911- **Result:** Beautiful glowing effects, not emoji!
23439ccd446eSAtari911
23449ccd446eSAtari911### Glowing Cursor Trail
23459ccd446eSAtari911
23469ccd446eSAtari911**Pink glowing dots follow your cursor!**
23479ccd446eSAtari911- Small glowing pink orbs (8px)
23489ccd446eSAtari911- Radial gradient glow effect
23499ccd446eSAtari911- Multiple box-shadows for depth
23509ccd446eSAtari911- Fade out smoothly (0.5s)
23519ccd446eSAtari911- Throttled to 30ms for smoothness
23529ccd446eSAtari911
23539ccd446eSAtari911```
23549ccd446eSAtari911    •  •
23559ccd446eSAtari911  •  →  •   ← Your cursor
23569ccd446eSAtari911    •  •
23579ccd446eSAtari911```
23589ccd446eSAtari911
23599ccd446eSAtari911**Not emoji - actual glowing particles!**
23609ccd446eSAtari911
23619ccd446eSAtari911---
23629ccd446eSAtari911
23639ccd446eSAtari911### Click Fireworks! ��
23649ccd446eSAtari911
23659ccd446eSAtari911**Click anywhere on the calendar → BOOM!**
23669ccd446eSAtari911
23679ccd446eSAtari911**20 pink particles explode outward!**
23689ccd446eSAtari911- Radial burst pattern (360° coverage)
23699ccd446eSAtari911- Random speeds (50-150px travel)
23709ccd446eSAtari911- 4 shades of pink:
23719ccd446eSAtari911  - Hot pink (#ff1493)
23729ccd446eSAtari911  - Pink (#ff69b4)
23739ccd446eSAtari911  - Light pink (#ff85c1)
23749ccd446eSAtari911  - Very light pink (#ffc0cb)
23759ccd446eSAtari911- Random sizes (4-10px)
23769ccd446eSAtari911- Individual glowing halos
23779ccd446eSAtari911- Smooth explosion animation
23789ccd446eSAtari911
23799ccd446eSAtari911**Plus a bright flash at click point!**
23809ccd446eSAtari911- 30px radius glow
23819ccd446eSAtari911- Intense pink flash
23829ccd446eSAtari911- Fades quickly (0.3s)
23839ccd446eSAtari911
23849ccd446eSAtari911---
23859ccd446eSAtari911
23869ccd446eSAtari911### Visual Effect
23879ccd446eSAtari911
23889ccd446eSAtari911**Cursor movement**:
23899ccd446eSAtari911```
23909ccd446eSAtari91123919ccd446eSAtari911      •  •  •
23929ccd446eSAtari911   •     →     •  ← Glowing trail
23939ccd446eSAtari911      •  •  •
23949ccd446eSAtari91123959ccd446eSAtari911```
23969ccd446eSAtari911
23979ccd446eSAtari911**Click explosion**:
23989ccd446eSAtari911```
23999ccd446eSAtari911         •  •  •
24009ccd446eSAtari911      •           •
24019ccd446eSAtari911   •      BOOM!      •  ← 20 particles
24029ccd446eSAtari911      •           •
24039ccd446eSAtari911         •  •  •
24049ccd446eSAtari911```
24059ccd446eSAtari911
24069ccd446eSAtari911**All particles glow with pink halos!**
24079ccd446eSAtari911
24089ccd446eSAtari911---
24099ccd446eSAtari911
24109ccd446eSAtari911### Particle Details
24119ccd446eSAtari911
24129ccd446eSAtari911**Trail Particles**:
24139ccd446eSAtari911- Size: 8x8px
24149ccd446eSAtari911- Color: Pink radial gradient
24159ccd446eSAtari911- Shadow: 10px + 20px glow layers
24169ccd446eSAtari911- Duration: 0.5s fade
24179ccd446eSAtari911- Rate: 30ms throttle
24189ccd446eSAtari911
24199ccd446eSAtari911**Explosion Particles**:
24209ccd446eSAtari911- Size: 4-10px (random)
24219ccd446eSAtari911- Colors: 4 pink shades (random)
24229ccd446eSAtari911- Shadow: 10px + 20px glow (matches color)
24239ccd446eSAtari911- Duration: 0.6-1.0s (random)
24249ccd446eSAtari911- Pattern: Perfect circle burst
24259ccd446eSAtari911
24269ccd446eSAtari911**Flash Effect**:
24279ccd446eSAtari911- Size: 30x30px
24289ccd446eSAtari911- Color: Bright hot pink
24299ccd446eSAtari911- Shadow: 30px + 50px mega-glow
24309ccd446eSAtari911- Duration: 0.3s instant fade
24319ccd446eSAtari911
24329ccd446eSAtari911---
24339ccd446eSAtari911
24349ccd446eSAtari911### Performance
24359ccd446eSAtari911
24369ccd446eSAtari911**Optimized for smoothness**:
24379ccd446eSAtari911- Trail throttled to 30ms
24389ccd446eSAtari911- Auto-cleanup after animations
24399ccd446eSAtari911- CSS hardware acceleration
24409ccd446eSAtari911- No memory leaks
24419ccd446eSAtari911- Smooth 60fps
24429ccd446eSAtari911
24439ccd446eSAtari911**Won't slow you down!**
24449ccd446eSAtari911
24459ccd446eSAtari911---
24469ccd446eSAtari911
24479ccd446eSAtari911### Comparison
24489ccd446eSAtari911
24499ccd446eSAtari911**Before (v5.3.1)**:
24509ccd446eSAtari911- ✨ Emoji sparkle images
24519ccd446eSAtari911- Static unicode characters
24529ccd446eSAtari911- Limited visual impact
24539ccd446eSAtari911
24549ccd446eSAtari911**After (v5.3.2)**:
24559ccd446eSAtari911- �� Glowing pink particles
24569ccd446eSAtari911- Radial gradients + shadows
24579ccd446eSAtari911- Beautiful firework explosions
24589ccd446eSAtari911- Much more impressive!
24599ccd446eSAtari911
24609ccd446eSAtari911---
24619ccd446eSAtari911
24629ccd446eSAtari911### Only Pink Theme
24639ccd446eSAtari911
24649ccd446eSAtari911**These effects only appear**:
24659ccd446eSAtari911- On `.calendar-theme-pink` elements
24669ccd446eSAtari911- Other themes unaffected
24679ccd446eSAtari911- Pure pink magic! ��
24689ccd446eSAtari911
24699ccd446eSAtari911---
24709ccd446eSAtari911
24719ccd446eSAtari911## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨
24729ccd446eSAtari911
24739ccd446eSAtari911### ✨ Added: MySpace-Style Sparkle Trail!
24749ccd446eSAtari911- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!)
24759ccd446eSAtari911- **Toned down:** Reduced glow effects for better taste
24769ccd446eSAtari911- **Added:** Sparkles appear on cell hover
24779ccd446eSAtari911- **Added:** Sparkles on event hover (left and right sides!)
24789ccd446eSAtari911- **Added:** Sparkles on today's cell corners
24799ccd446eSAtari911- **Added:** Sparkles on navigation buttons
24809ccd446eSAtari911- **Added:** Sparkles in calendar header
24819ccd446eSAtari911- **Result:** Pure nostalgic MySpace magic! ✨
24829ccd446eSAtari911
24839ccd446eSAtari911### MySpace Sparkle Cursor Trail
24849ccd446eSAtari911
24859ccd446eSAtari911**The classic effect from 2006!**
24869ccd446eSAtari911- Sparkles follow your cursor as you move
24879ccd446eSAtari911- Random sizes (12-22px)
24889ccd446eSAtari911- Random slight offsets for natural feel
24899ccd446eSAtari911- Float up and fade out animation
24909ccd446eSAtari911- Throttled to 50ms (smooth, not laggy)
24919ccd446eSAtari911- Only on pink theme calendars
24929ccd446eSAtari911
24939ccd446eSAtari911```
24949ccd446eSAtari91124959ccd446eSAtari911  ✨    ✨
24969ccd446eSAtari911✨   →   ✨  (cursor trail)
24979ccd446eSAtari911  ✨    ✨
24989ccd446eSAtari91124999ccd446eSAtari911```
25009ccd446eSAtari911
25019ccd446eSAtari911**Pure nostalgia!**
25029ccd446eSAtari911
25039ccd446eSAtari911---
25049ccd446eSAtari911
25059ccd446eSAtari911### Sparkles Everywhere
25069ccd446eSAtari911
25079ccd446eSAtari911**Calendar cells**:
25089ccd446eSAtari911- Hover over any day → ✨ floats up
25099ccd446eSAtari911- Smooth 1.5s animation
25109ccd446eSAtari911- Centered sparkle
25119ccd446eSAtari911
25129ccd446eSAtari911**Event items**:
25139ccd446eSAtari911- Hover → ✨ on left side
25149ccd446eSAtari911- Hover → ✨ on right side
25159ccd446eSAtari911- Staggered animations (0.4s delay)
25169ccd446eSAtari911- Continuous twinkling
25179ccd446eSAtari911
25189ccd446eSAtari911**Today's cell**:
25199ccd446eSAtari911- ✨ in top-right corner (continuous)
25209ccd446eSAtari911- ✨ in bottom-left corner (offset timing)
25219ccd446eSAtari911- Always sparkling!
25229ccd446eSAtari911
25239ccd446eSAtari911**Navigation buttons**:
25249ccd446eSAtari911- Hover on < or > → ✨ appears top-right
25259ccd446eSAtari911- One-time float animation
25269ccd446eSAtari911
25279ccd446eSAtari911**Calendar header**:
25289ccd446eSAtari911- ✨ on left side (continuous)
25299ccd446eSAtari911- ✨ on right side (offset 1s)
25309ccd446eSAtari911- Always twinkling
25319ccd446eSAtari911
25329ccd446eSAtari911---
25339ccd446eSAtari911
25349ccd446eSAtari911### Toned Down Glows
25359ccd446eSAtari911
25369ccd446eSAtari911**Before (v5.3.0)**: TOO MUCH GLOW!
25379ccd446eSAtari911- 50px shadows
25389ccd446eSAtari911- 4-layer effects
25399ccd446eSAtari911- Overwhelming
25409ccd446eSAtari911
25419ccd446eSAtari911**After (v5.3.1)**: Just right!
25429ccd446eSAtari911- 8-15px max shadows (subtle)
25439ccd446eSAtari911- 2-layer effects
25449ccd446eSAtari911- Professional with personality
25459ccd446eSAtari911
25469ccd446eSAtari911**Glow reductions**:
25479ccd446eSAtari911- Today shimmer: 35px → 12px
25489ccd446eSAtari911- Today hover: 50px → 15px
25499ccd446eSAtari911- Event glow: 18px → 6px
25509ccd446eSAtari911- Badge pulse: 25px → 8px
25519ccd446eSAtari911- Container glow: 20px → 8px
25529ccd446eSAtari911
25539ccd446eSAtari911**Much more tasteful!**
25549ccd446eSAtari911
25559ccd446eSAtari911---
25569ccd446eSAtari911
25579ccd446eSAtari911### Sparkle Animations
25589ccd446eSAtari911
25599ccd446eSAtari911**sparkle-twinkle** (0.8s):
25609ccd446eSAtari911```
25619ccd446eSAtari911Opacity: 0 → 1 → 1 → 0
25629ccd446eSAtari911Scale: 0 → 1 → 1 → 0
25639ccd446eSAtari911Rotation: 0° → 180° → 360°
25649ccd446eSAtari911```
25659ccd446eSAtari911
25669ccd446eSAtari911**sparkle-float** (1.5s):
25679ccd446eSAtari911```
25689ccd446eSAtari911Moves up: 0px → -50px
25699ccd446eSAtari911Opacity: 0 → 1 → 1 → 0
25709ccd446eSAtari911Scale: 0 → 1 → 0.8 → 0
25719ccd446eSAtari911```
25729ccd446eSAtari911
25739ccd446eSAtari911**Pure MySpace magic!** ✨
25749ccd446eSAtari911
25759ccd446eSAtari911---
25769ccd446eSAtari911
25779ccd446eSAtari911### Where Sparkles Appear
25789ccd446eSAtari911
25799ccd446eSAtari911✅ **Cursor trail** (continuous while moving)
25809ccd446eSAtari911✅ **Calendar cells** (on hover)
25819ccd446eSAtari911✅ **Event items** (on hover, left + right)
25829ccd446eSAtari911✅ **Today's cell** (continuous, corners)
25839ccd446eSAtari911✅ **Navigation buttons** (on hover)
25849ccd446eSAtari911✅ **Calendar header** (continuous, sides)
25859ccd446eSAtari911
25869ccd446eSAtari911**Sparkles EVERYWHERE!** ✨✨✨
25879ccd446eSAtari911
25889ccd446eSAtari911---
25899ccd446eSAtari911
25909ccd446eSAtari911### Performance
25919ccd446eSAtari911
25929ccd446eSAtari911**Cursor trail**:
25939ccd446eSAtari911- Throttled to 50ms
25949ccd446eSAtari911- Auto-cleanup after 1s
25959ccd446eSAtari911- No memory leaks
25969ccd446eSAtari911- Smooth 60fps
25979ccd446eSAtari911
25989ccd446eSAtari911**CSS animations**:
25999ccd446eSAtari911- Hardware accelerated
26009ccd446eSAtari911- No JavaScript overhead (except cursor)
26019ccd446eSAtari911- Efficient transforms
26029ccd446eSAtari911
26039ccd446eSAtari911**Won't slow down your browser!**
26049ccd446eSAtari911
26059ccd446eSAtari911---
26069ccd446eSAtari911
26079ccd446eSAtari911### Pure Nostalgia
26089ccd446eSAtari911
26099ccd446eSAtari911**Remember MySpace profiles?**
26109ccd446eSAtari911- Glitter graphics ✨
26119ccd446eSAtari911- Sparkle cursors ✨
26129ccd446eSAtari911- Auto-play music �� (ok, we didn't add that)
26139ccd446eSAtari911- Animated GIF backgrounds
26149ccd446eSAtari911- Comic Sans everywhere
26159ccd446eSAtari911
26169ccd446eSAtari911**We brought back the sparkles!** ✨
26179ccd446eSAtari911
26189ccd446eSAtari911---
26199ccd446eSAtari911
26209ccd446eSAtari911### Theme Comparison
26219ccd446eSAtari911
26229ccd446eSAtari911**Other themes**: Professional and clean
26239ccd446eSAtari911**Pink theme**: ✨ SPARKLES EVERYWHERE ✨
26249ccd446eSAtari911
26259ccd446eSAtari911**Only pink theme gets the magic!**
26269ccd446eSAtari911
26279ccd446eSAtari911---
26289ccd446eSAtari911
26299ccd446eSAtari911## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨��
26309ccd446eSAtari911
26319ccd446eSAtari911### �� Added: Pink Theme Gets BLING!
26329ccd446eSAtari911- **Added:** Shimmering animation for today's cell
26339ccd446eSAtari911- **Added:** Sparkling text effect on today's date
26349ccd446eSAtari911- **Added:** Glowing pulse for event bars
26359ccd446eSAtari911- **Added:** Gradient shimmer on headers
26369ccd446eSAtari911- **Added:** Extra glow on hover effects
26379ccd446eSAtari911- **Added:** Pulsing urgent badge for past due items
26389ccd446eSAtari911- **Result:** Pink theme is now FABULOUS! ✨
26399ccd446eSAtari911
26409ccd446eSAtari911### Shimmer Effects
26419ccd446eSAtari911
26429ccd446eSAtari911**Today's Cell**:
26439ccd446eSAtari911- Continuous shimmer animation (2 second loop)
26449ccd446eSAtari911- Multi-layer glow effect
26459ccd446eSAtari911- Pink and hot pink overlapping shadows
26469ccd446eSAtari911- Pulses from subtle to intense
26479ccd446eSAtari911- Extra sparkle on hover
26489ccd446eSAtari911
26499ccd446eSAtari911**Today's Date Number**:
26509ccd446eSAtari911- Sparkle animation (1.5 second loop)
26519ccd446eSAtari911- Text shadow glow effect
26529ccd446eSAtari911- Slight scale pulse (100% → 105%)
26539ccd446eSAtari911- Pink to hot pink shadow transition
26549ccd446eSAtari911
26559ccd446eSAtari911### Glow Effects
26569ccd446eSAtari911
26579ccd446eSAtari911**Event Bars**:
26589ccd446eSAtari911- Continuous glow pulse (2 second loop)
26599ccd446eSAtari911- Uses event's own color
26609ccd446eSAtari911- Adds pink accent glow layer
26619ccd446eSAtari911- Creates depth and dimension
26629ccd446eSAtari911
26639ccd446eSAtari911**Event Items**:
26649ccd446eSAtari911- Subtle base glow
26659ccd446eSAtari911- Enhanced glow on hover
26669ccd446eSAtari911- Slight slide animation on hover
26679ccd446eSAtari911- Professional yet playful
26689ccd446eSAtari911
26699ccd446eSAtari911### Gradient Shimmer
26709ccd446eSAtari911
26719ccd446eSAtari911**Headers**:
26729ccd446eSAtari911- Animated gradient background
26739ccd446eSAtari911- 3-color pink gradient flow
26749ccd446eSAtari911- Smooth 3-second animation
26759ccd446eSAtari911- Creates movement and life
26769ccd446eSAtari911- Applies to calendar header and event list header
26779ccd446eSAtari911
26789ccd446eSAtari911### Badge Effects
26799ccd446eSAtari911
26809ccd446eSAtari911**TODAY Badge**:
26819ccd446eSAtari911- Sparkle animation
26829ccd446eSAtari911- Synchronized with today's date
26839ccd446eSAtari911- Extra prominence
26849ccd446eSAtari911
26859ccd446eSAtari911**PAST DUE Badge**:
26869ccd446eSAtari911- Urgent pulsing effect (1 second loop)
26879ccd446eSAtari911- Orange glow intensifies
26889ccd446eSAtari911- Draws attention to urgent items
26899ccd446eSAtari911- Faster pulse for urgency
26909ccd446eSAtari911
26919ccd446eSAtari911### Container Bling
26929ccd446eSAtari911
26939ccd446eSAtari911**Main Container**:
26949ccd446eSAtari911- Multi-layer pink glow
26959ccd446eSAtari911- Soft outer shadow
26969ccd446eSAtari911- Creates floating effect
26979ccd446eSAtari911- Subtle but elegant
26989ccd446eSAtari911
26999ccd446eSAtari911### Animation Details
27009ccd446eSAtari911
27019ccd446eSAtari911**pink-shimmer** (2s loop):
27029ccd446eSAtari911```
27039ccd446eSAtari911Start: Subtle 5px glow
27049ccd446eSAtari911Peak:  Intense 35px multi-layer glow
27059ccd446eSAtari911End:   Back to subtle
27069ccd446eSAtari911```
27079ccd446eSAtari911
27089ccd446eSAtari911**pink-sparkle** (1.5s loop):
27099ccd446eSAtari911```
27109ccd446eSAtari911Start: Base glow + scale 1.0
27119ccd446eSAtari911Peak:  Intense glow + scale 1.05
27129ccd446eSAtari911End:   Back to base
27139ccd446eSAtari911```
27149ccd446eSAtari911
27159ccd446eSAtari911**pink-glow-pulse** (2s loop):
27169ccd446eSAtari911```
27179ccd446eSAtari911Start: Small glow (3px, 6px)
27189ccd446eSAtari911Peak:  Large glow (6px, 12px, 18px)
27199ccd446eSAtari911End:   Back to small
27209ccd446eSAtari911```
27219ccd446eSAtari911
27229ccd446eSAtari911**pink-gradient-shimmer** (3s loop):
27239ccd446eSAtari911```
27249ccd446eSAtari911Gradient flows across element
27259ccd446eSAtari911Creates wave effect
27269ccd446eSAtari911Smooth continuous motion
27279ccd446eSAtari911```
27289ccd446eSAtari911
27299ccd446eSAtari911**pink-pulse-urgent** (1s loop - faster!):
27309ccd446eSAtari911```
27319ccd446eSAtari911Start: Orange glow 5px
27329ccd446eSAtari911Peak:  Orange glow 25px (intense)
27339ccd446eSAtari911End:   Back to 5px
27349ccd446eSAtari911```
27359ccd446eSAtari911
27369ccd446eSAtari911### Visual Experience
27379ccd446eSAtari911
27389ccd446eSAtari911**Today's Cell**:
27399ccd446eSAtari911```
27409ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐
27419ccd446eSAtari911│  │  │ ✨ │  │  │  │  │  ← Shimmers constantly
27429ccd446eSAtari911│  │  │[9]│  │  │  │  │  ← Sparkles
27439ccd446eSAtari911│  │  │ ✨ │  │  │  │  │  ← Glows and pulses
27449ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘
27459ccd446eSAtari911```
27469ccd446eSAtari911
27479ccd446eSAtari911**Event Bars**:
27489ccd446eSAtari911```
27499ccd446eSAtari911━━━━━━━  ← Glows and pulses
27509ccd446eSAtari911━━━━━━━  ← Each bar animated
27519ccd446eSAtari911━━━━━━━  ← Creates rhythm
27529ccd446eSAtari911```
27539ccd446eSAtari911
27549ccd446eSAtari911**Headers**:
27559ccd446eSAtari911```
27569ccd446eSAtari911╔═════════════════════╗
27579ccd446eSAtari911║ ~~~~~~~~~~ ║  ← Gradient flows
27589ccd446eSAtari911║   February 2026     ║  ← Shimmer effect
27599ccd446eSAtari911╚═════════════════════╝
27609ccd446eSAtari911```
27619ccd446eSAtari911
27629ccd446eSAtari911### Theme Comparison
27639ccd446eSAtari911
27649ccd446eSAtari911**Before (v5.2.8)**:
27659ccd446eSAtari911- Pink colors
27669ccd446eSAtari911- Static elements
27679ccd446eSAtari911- Standard shadows
27689ccd446eSAtari911
27699ccd446eSAtari911**After (v5.3.0)**:
27709ccd446eSAtari911- Pink colors ✓
27719ccd446eSAtari911- Animated shimmer ✨
27729ccd446eSAtari911- Sparkling effects ��
27739ccd446eSAtari911- Glowing pulses ✨
27749ccd446eSAtari911- Moving gradients ��
27759ccd446eSAtari911- BLING! ��
27769ccd446eSAtari911
27779ccd446eSAtari911### Performance
27789ccd446eSAtari911
27799ccd446eSAtari911**All animations**:
27809ccd446eSAtari911- Hardware accelerated (transform, opacity)
27819ccd446eSAtari911- Smooth 60fps
27829ccd446eSAtari911- CSS animations (no JavaScript)
27839ccd446eSAtari911- Minimal CPU usage
27849ccd446eSAtari911- Disabled in reduced-motion preference
27859ccd446eSAtari911
27869ccd446eSAtari911### Only for Pink Theme
27879ccd446eSAtari911
27889ccd446eSAtari911**Effects only apply when**:
27899ccd446eSAtari911```css
27909ccd446eSAtari911.calendar-theme-pink
27919ccd446eSAtari911```
27929ccd446eSAtari911
27939ccd446eSAtari911**Other themes unaffected**:
27949ccd446eSAtari911- Matrix stays Matrix
27959ccd446eSAtari911- Professional stays Professional
27969ccd446eSAtari911- Purple stays Purple
27979ccd446eSAtari911- Wiki stays clean
27989ccd446eSAtari911
27999ccd446eSAtari911**Pink gets all the bling!** ✨��
28009ccd446eSAtari911
28019ccd446eSAtari911### Use Cases
28029ccd446eSAtari911
28039ccd446eSAtari911**Perfect for**:
28049ccd446eSAtari911- Celebrating occasions
28059ccd446eSAtari911- Fun team calendars
28069ccd446eSAtari911- Personal style expression
28079ccd446eSAtari911- Standing out
28089ccd446eSAtari911- Making calendar time fabulous
28099ccd446eSAtari911
28109ccd446eSAtari911**Not just pink, but BLING pink!** ��✨
28119ccd446eSAtari911
28129ccd446eSAtari911## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS
28139ccd446eSAtari911
28149ccd446eSAtari911### �� Fixed: Today's Date Box Now Uses Theme Colors
28159ccd446eSAtari911- **Fixed:** Today's day number box now uses theme border color
28169ccd446eSAtari911- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light)
28179ccd446eSAtari911- **Result:** Today box matches the theme perfectly!
28189ccd446eSAtari911
28199ccd446eSAtari911### The Issue
28209ccd446eSAtari911
28219ccd446eSAtari911Today's date had a hardcoded green box:
28229ccd446eSAtari911
28239ccd446eSAtari911**In style.css**:
28249ccd446eSAtari911```css
28259ccd446eSAtari911.cal-today .day-num {
28269ccd446eSAtari911    background: #008800;  /* Hardcoded green! */
28279ccd446eSAtari911    color: white;
28289ccd446eSAtari911}
28299ccd446eSAtari911```
28309ccd446eSAtari911
28319ccd446eSAtari911**Didn't adapt to themes at all!**
28329ccd446eSAtari911
28339ccd446eSAtari911### The Fix
28349ccd446eSAtari911
28359ccd446eSAtari911**Now uses theme colors**:
28369ccd446eSAtari911```php
28379ccd446eSAtari911// Today's day number
28389ccd446eSAtari911if ($isToday) {
28399ccd446eSAtari911    background: $themeStyles['border'],  // Theme's accent color!
28409ccd446eSAtari911    color: (professional theme) ? white : bg color
28419ccd446eSAtari911}
28429ccd446eSAtari911```
28439ccd446eSAtari911
28449ccd446eSAtari911### Theme Examples
28459ccd446eSAtari911
28469ccd446eSAtari911**Matrix Theme**:
28479ccd446eSAtari911- Box background: `#00cc07` (matrix green)
28489ccd446eSAtari911- Text color: `#242424` (dark background)
28499ccd446eSAtari911
28509ccd446eSAtari911**Purple Theme**:
28519ccd446eSAtari911- Box background: `#9b59b6` (purple)
28529ccd446eSAtari911- Text color: `#2a2030` (dark background)
28539ccd446eSAtari911
28549ccd446eSAtari911**Professional Theme**:
28559ccd446eSAtari911- Box background: `#4a90e2` (blue)
28569ccd446eSAtari911- Text color: `#ffffff` (white text)
28579ccd446eSAtari911
28589ccd446eSAtari911**Pink Theme**:
28599ccd446eSAtari911- Box background: `#ff1493` (hot pink)
28609ccd446eSAtari911- Text color: `#1a0d14` (dark background)
28619ccd446eSAtari911
28629ccd446eSAtari911**Wiki Theme**:
28639ccd446eSAtari911- Box background: Template's `__border__` color
28649ccd446eSAtari911- Text color: Template's `__background_site__` color
28659ccd446eSAtari911
28669ccd446eSAtari911### Visual Result
28679ccd446eSAtari911
28689ccd446eSAtari911**Matrix Theme**:
28699ccd446eSAtari911```
28709ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐
28719ccd446eSAtari911│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
28729ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘
28739ccd446eSAtari91128749ccd446eSAtari911    Green box (#00cc07)
28759ccd446eSAtari911```
28769ccd446eSAtari911
28779ccd446eSAtari911**Professional Theme**:
28789ccd446eSAtari911```
28799ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐
28809ccd446eSAtari911│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
28819ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘
28829ccd446eSAtari91128839ccd446eSAtari911    Blue box (#4a90e2)
28849ccd446eSAtari911```
28859ccd446eSAtari911
28869ccd446eSAtari911**Wiki Theme**:
28879ccd446eSAtari911```
28889ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐
28899ccd446eSAtari911│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
28909ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘
28919ccd446eSAtari91128929ccd446eSAtari911    Template border color
28939ccd446eSAtari911```
28949ccd446eSAtari911
28959ccd446eSAtari911### Implementation
28969ccd446eSAtari911
28979ccd446eSAtari911**Inline styles added**:
28989ccd446eSAtari911- Background uses `$themeStyles['border']` (theme accent)
28999ccd446eSAtari911- Text color uses `$themeStyles['bg']` for contrast
29009ccd446eSAtari911- Special case: Professional theme uses white text
29019ccd446eSAtari911- All with `!important` to override CSS
29029ccd446eSAtari911
29039ccd446eSAtari911**CSS cleaned up**:
29049ccd446eSAtari911- Removed hardcoded `#008800` background
29059ccd446eSAtari911- Removed hardcoded `white` color
29069ccd446eSAtari911- Kept structural styles (border-radius, font-weight)
29079ccd446eSAtari911
29089ccd446eSAtari911### Benefits
29099ccd446eSAtari911
29109ccd446eSAtari911**Theme Consistency**:
29119ccd446eSAtari911- Today box matches theme accent color
29129ccd446eSAtari911- Proper contrast with background
29139ccd446eSAtari911- Professional appearance
29149ccd446eSAtari911
29159ccd446eSAtari911**Automatic Adaptation**:
29169ccd446eSAtari911- Works with all themes
29179ccd446eSAtari911- Works with custom wiki template colors
29189ccd446eSAtari911- No manual adjustment needed
29199ccd446eSAtari911
29209ccd446eSAtari911**Visual Harmony**:
29219ccd446eSAtari911- Border color used throughout theme
29229ccd446eSAtari911- Today box reinforces theme identity
29239ccd446eSAtari911- Consistent design language
29249ccd446eSAtari911
29259ccd446eSAtari911## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH
29269ccd446eSAtari911
29279ccd446eSAtari911### �� Fixed: Table Grid Background Now Matches Cells
29289ccd446eSAtari911- **Found:** `grid_bg` was using `__background_alt__` (different from cells!)
29299ccd446eSAtari911- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells)
29309ccd446eSAtari911- **Result:** Table background no longer shows through cells!
29319ccd446eSAtari911
29329ccd446eSAtari911### The Layer Problem
29339ccd446eSAtari911
29349ccd446eSAtari911The table itself had a DIFFERENT background color than its cells!
29359ccd446eSAtari911
29369ccd446eSAtari911**Before (v5.2.6)**:
29379ccd446eSAtari911```php
29389ccd446eSAtari911'grid_bg' => __background_alt__,     // Table background (#e8e8e8)
29399ccd446eSAtari911'cell_bg' => __background_site__,    // Cell background (#f5f5f5)
29409ccd446eSAtari911```
29419ccd446eSAtari911
29429ccd446eSAtari911**The table background was showing THROUGH the cells!**
29439ccd446eSAtari911
29449ccd446eSAtari911### Why This Happened
29459ccd446eSAtari911
29469ccd446eSAtari911**Visual layers**:
29479ccd446eSAtari911```
29489ccd446eSAtari911Table Element
29499ccd446eSAtari911├─ background: __background_alt__ (#e8e8e8)  ← Different!
29509ccd446eSAtari911└─ Cells
29519ccd446eSAtari911    └─ background: __background_site__ (#f5f5f5)  ← Different!
29529ccd446eSAtari911
29539ccd446eSAtari911The table background shows through any gaps!
29549ccd446eSAtari911```
29559ccd446eSAtari911
29569ccd446eSAtari911### The Fix
29579ccd446eSAtari911
29589ccd446eSAtari911**After (v5.2.7)**:
29599ccd446eSAtari911```php
29609ccd446eSAtari911'grid_bg' => __background_site__,    // Table background (#f5f5f5) ✓
29619ccd446eSAtari911'cell_bg' => __background_site__,    // Cell background (#f5f5f5) ✓
29629ccd446eSAtari911```
29639ccd446eSAtari911
29649ccd446eSAtari911**NOW THEY MATCH!**
29659ccd446eSAtari911
29669ccd446eSAtari911### Where grid_bg Is Used
29679ccd446eSAtari911
29689ccd446eSAtari911The table element itself:
29699ccd446eSAtari911```html
29709ccd446eSAtari911<table style="background: __background_alt__">  ← Was showing through!
29719ccd446eSAtari911    <tbody>
29729ccd446eSAtari911        <tr>
29739ccd446eSAtari911            <td style="background: __background_site__">1</td>
29749ccd446eSAtari911        </tr>
29759ccd446eSAtari911    </tbody>
29769ccd446eSAtari911</table>
29779ccd446eSAtari911```
29789ccd446eSAtari911
29799ccd446eSAtari911Even with cell inline styles, the TABLE background shows through!
29809ccd446eSAtari911
29819ccd446eSAtari911### All Background Sources Now Unified
29829ccd446eSAtari911
29839ccd446eSAtari911**Everything now uses __background_site__**:
29849ccd446eSAtari911- `bg` → __background_site__ ✓
29859ccd446eSAtari911- `header_bg` → __background_site__ ✓
29869ccd446eSAtari911- `grid_bg` → __background_site__ ✓ (JUST FIXED!)
29879ccd446eSAtari911- `cell_bg` → __background_site__ ✓
29889ccd446eSAtari911
29899ccd446eSAtari911**Perfect consistency!** ��
29909ccd446eSAtari911
29919ccd446eSAtari911### Why It Was Different
29929ccd446eSAtari911
29939ccd446eSAtari911**Originally the grid was meant to show borders**:
29949ccd446eSAtari911- `grid_bg` was `__background_alt__` (slightly different)
29959ccd446eSAtari911- Created visual separation between cells
29969ccd446eSAtari911- But with transparent/thin cells, it showed through!
29979ccd446eSAtari911
29989ccd446eSAtari911**Now unified for consistency!**
29999ccd446eSAtari911
30009ccd446eSAtari911### Visual Result
30019ccd446eSAtari911
30029ccd446eSAtari911**Before (layers visible)**:
30039ccd446eSAtari911```
30049ccd446eSAtari911┌─────────────────┐
30059ccd446eSAtari911│ Grid (#e8e8e8)  │ ← Showing through!
30069ccd446eSAtari911│  ┌──┬──┬──┐     │
30079ccd446eSAtari911│  │  │  │  │     │ ← Cells (#f5f5f5)
30089ccd446eSAtari911│  └──┴──┴──┘     │
30099ccd446eSAtari911└─────────────────┘
30109ccd446eSAtari911```
30119ccd446eSAtari911
30129ccd446eSAtari911**After (unified)**:
30139ccd446eSAtari911```
30149ccd446eSAtari911┌─────────────────┐
30159ccd446eSAtari911│ Grid (#f5f5f5)  │ ← Same color!
30169ccd446eSAtari911│  ┌──┬──┬──┐     │
30179ccd446eSAtari911│  │  │  │  │     │ ← Cells (#f5f5f5)
30189ccd446eSAtari911│  └──┴──┴──┘     │
30199ccd446eSAtari911└─────────────────┘
30209ccd446eSAtari911Perfect match!
30219ccd446eSAtari911```
30229ccd446eSAtari911
30239ccd446eSAtari911### Complete Background Mapping
30249ccd446eSAtari911
30259ccd446eSAtari911**All using __background_site__ now**:
30269ccd446eSAtari911- Main container background
30279ccd446eSAtari911- Left panel background
30289ccd446eSAtari911- Right panel background
30299ccd446eSAtari911- Eventlist background
30309ccd446eSAtari911- Calendar grid background ← JUST FIXED
30319ccd446eSAtari911- Calendar cell backgrounds
30329ccd446eSAtari911- Event item backgrounds
30339ccd446eSAtari911- Clock header background
30349ccd446eSAtari911- Search input background
30359ccd446eSAtari911- Past events toggle
30369ccd446eSAtari911
30379ccd446eSAtari911**EVERYTHING UNIFIED!** ��
30389ccd446eSAtari911
30399ccd446eSAtari911## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS
30409ccd446eSAtari911
30419ccd446eSAtari911### �� Fixed: Removed Container Backgrounds Showing Through
30429ccd446eSAtari911- **Found:** `.calendar-compact-container` had `background: #ffffff;`
30439ccd446eSAtari911- **Found:** `.calendar-compact-left` had `background: #fafafa;`
30449ccd446eSAtari911- **Found:** `.calendar-compact-right` had `background: #ffffff;`
30459ccd446eSAtari911- **Found:** `.event-search-input-inline` had `background: white;`
30469ccd446eSAtari911- **Found:** `.past-events-toggle` had `background: #f5f5f5;`
30479ccd446eSAtari911- **Result:** Container backgrounds no longer show through cells!
30489ccd446eSAtari911
30499ccd446eSAtari911### The Container Problem
30509ccd446eSAtari911
30519ccd446eSAtari911The parent containers had hardcoded backgrounds that were showing through!
30529ccd446eSAtari911
30539ccd446eSAtari911**Container backgrounds (lines 4-91)**:
30549ccd446eSAtari911```css
30559ccd446eSAtari911.calendar-compact-container {
30569ccd446eSAtari911    background: #ffffff;  /* ← Main container! */
30579ccd446eSAtari911}
30589ccd446eSAtari911
30599ccd446eSAtari911.calendar-compact-left {
30609ccd446eSAtari911    background: #fafafa;  /* ← Left panel (calendar side)! */
30619ccd446eSAtari911}
30629ccd446eSAtari911
30639ccd446eSAtari911.calendar-compact-right {
30649ccd446eSAtari911    background: #ffffff;  /* ← Right panel (events side)! */
30659ccd446eSAtari911}
30669ccd446eSAtari911```
30679ccd446eSAtari911
30689ccd446eSAtari911**These were showing through the cells and events!**
30699ccd446eSAtari911
30709ccd446eSAtari911### Why Containers Matter
30719ccd446eSAtari911
30729ccd446eSAtari911Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through:
30739ccd446eSAtari911
30749ccd446eSAtari911```
30759ccd446eSAtari911Container (#fafafa)           ← Showing through!
30769ccd446eSAtari911   └─ Table Cell (#f5f5f5)    ← Transparent areas
30779ccd446eSAtari911      └─ Content
30789ccd446eSAtari911```
30799ccd446eSAtari911
30809ccd446eSAtari911### All Backgrounds Removed
30819ccd446eSAtari911
30829ccd446eSAtari911**v5.2.6 removes**:
30839ccd446eSAtari911- `.calendar-compact-container` background
30849ccd446eSAtari911- `.calendar-compact-left` background
30859ccd446eSAtari911- `.calendar-compact-right` background
30869ccd446eSAtari911- `.event-search-input-inline` background
30879ccd446eSAtari911- `.past-events-toggle` background & hover
30889ccd446eSAtari911
30899ccd446eSAtari911**v5.2.5 removed**:
30909ccd446eSAtari911- `.calendar-compact-grid tbody td` background
30919ccd446eSAtari911- `.calendar-compact-grid thead th` background
30929ccd446eSAtari911
30939ccd446eSAtari911**v5.2.4 removed**:
30949ccd446eSAtari911- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds
30959ccd446eSAtari911
30969ccd446eSAtari911**v5.2.3 removed**:
30979ccd446eSAtari911- `.event-compact-item` background
30989ccd446eSAtari911
30999ccd446eSAtari911**ALL container and element backgrounds eliminated!** ��
31009ccd446eSAtari911
31019ccd446eSAtari911### What Should Work Now
31029ccd446eSAtari911
31039ccd446eSAtari911**Calendar cells**: No container background showing through ✓
31049ccd446eSAtari911**Event items**: No container background showing through ✓
31059ccd446eSAtari911**Search bar**: Uses template color ✓
31069ccd446eSAtari911**Past events toggle**: Uses template color ✓
31079ccd446eSAtari911
31089ccd446eSAtari911### Complete List of Fixes
31099ccd446eSAtari911
31109ccd446eSAtari911**Containers**:
31119ccd446eSAtari911- Main container ✓
31129ccd446eSAtari911- Left panel ✓
31139ccd446eSAtari911- Right panel ✓
31149ccd446eSAtari911
31159ccd446eSAtari911**Elements**:
31169ccd446eSAtari911- Table cells ✓
31179ccd446eSAtari911- Event items ✓
31189ccd446eSAtari911- Search input ✓
31199ccd446eSAtari911- Past events toggle ✓
31209ccd446eSAtari911
31219ccd446eSAtari911**EVERYTHING removed!** ��
31229ccd446eSAtari911
31239ccd446eSAtari911### Critical: Clear Caches
31249ccd446eSAtari911
31259ccd446eSAtari911**Must clear caches or won't work**:
31269ccd446eSAtari9111. Hard refresh: Ctrl+Shift+R (5 times!)
31279ccd446eSAtari9112. Clear DokuWiki cache
31289ccd446eSAtari9113. Close browser completely
31299ccd446eSAtari9114. Reopen and test
31309ccd446eSAtari911
31319ccd446eSAtari911**CSS caching is EXTREMELY persistent!**
31329ccd446eSAtari911
31339ccd446eSAtari911## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS
31349ccd446eSAtari911
31359ccd446eSAtari911### �� Fixed: Removed Hardcoded Backgrounds from Table Cells
31369ccd446eSAtari911- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`!
31379ccd446eSAtari911- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`!
31389ccd446eSAtari911- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`!
31399ccd446eSAtari911- **Fixed:** Removed ALL hardcoded backgrounds from table CSS
31409ccd446eSAtari911- **Result:** Calendar table cells finally use template colors!
31419ccd446eSAtari911
31429ccd446eSAtari911### The REAL Culprits
31439ccd446eSAtari911
31449ccd446eSAtari911The generic table CSS was overriding everything!
31459ccd446eSAtari911
31469ccd446eSAtari911**In style.css (lines 307-356)**:
31479ccd446eSAtari911```css
31489ccd446eSAtari911.calendar-compact-grid thead th {
31499ccd446eSAtari911    background: #f8f8f8;  /* ← Header cells hardcoded! */
31509ccd446eSAtari911}
31519ccd446eSAtari911
31529ccd446eSAtari911.calendar-compact-grid tbody td {
31539ccd446eSAtari911    background: #ffffff;  /* ← ALL table cells hardcoded! */
31549ccd446eSAtari911}
31559ccd446eSAtari911
31569ccd446eSAtari911.calendar-compact-grid tbody td:hover {
31579ccd446eSAtari911    background: #f0f7ff;  /* ← Hover state hardcoded! */
31589ccd446eSAtari911}
31599ccd446eSAtari911```
31609ccd446eSAtari911
31619ccd446eSAtari911**These apply to ALL `<td>` and `<th>` elements in the calendar table!**
31629ccd446eSAtari911
31639ccd446eSAtari911### Why This Was the Last One
31649ccd446eSAtari911
31659ccd446eSAtari911**CSS Specificity Order**:
31669ccd446eSAtari9111. `.calendar-compact-grid tbody td` (generic - applies to ALL cells)
31679ccd446eSAtari9112. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells)
31689ccd446eSAtari9113. Inline styles (should win but didn't)
31699ccd446eSAtari911
31709ccd446eSAtari911**We removed the specific ones (v5.2.4), but the generic one was still there!**
31719ccd446eSAtari911
31729ccd446eSAtari911### What We've Removed
31739ccd446eSAtari911
31749ccd446eSAtari911**v5.2.3**:
31759ccd446eSAtari911- `.event-compact-item` background
31769ccd446eSAtari911- `.event-compact-item:hover` background
31779ccd446eSAtari911
31789ccd446eSAtari911**v5.2.4**:
31799ccd446eSAtari911- `.cal-empty` background & hover
31809ccd446eSAtari911- `.cal-today` background & hover
31819ccd446eSAtari911- `.cal-has-events` background & hover
31829ccd446eSAtari911
31839ccd446eSAtari911**v5.2.5 (FINAL)**:
31849ccd446eSAtari911- `.calendar-compact-grid tbody td` background ✓
31859ccd446eSAtari911- `.calendar-compact-grid tbody td:hover` background ✓
31869ccd446eSAtari911- `.calendar-compact-grid thead th` background ✓
31879ccd446eSAtari911
31889ccd446eSAtari911**All CSS background overrides ELIMINATED!** ��
31899ccd446eSAtari911
31909ccd446eSAtari911### Why It Took 5 Versions
31919ccd446eSAtari911
31929ccd446eSAtari911**CSS had layers of hardcoded backgrounds**:
31939ccd446eSAtari911
31949ccd446eSAtari911```
31959ccd446eSAtari911Layer 1: Table cells (.calendar-compact-grid tbody td)
31969ccd446eSAtari911         ↓ Overrode inline styles
31979ccd446eSAtari911Layer 2: Cell states (.cal-today, .cal-empty, etc.)
31989ccd446eSAtari911         ↓ Overrode table cells
31999ccd446eSAtari911Layer 3: Event items (.event-compact-item)
32009ccd446eSAtari911         ↓ Overrode inline styles
32019ccd446eSAtari911
32029ccd446eSAtari911ALL had to be removed!
32039ccd446eSAtari911```
32049ccd446eSAtari911
32059ccd446eSAtari911**We kept finding more specific CSS, but the base table CSS was there all along!**
32069ccd446eSAtari911
32079ccd446eSAtari911### Visual Result
32089ccd446eSAtari911
32099ccd446eSAtari911**NOW everything matches**:
32109ccd446eSAtari911```
32119ccd446eSAtari911Calendar Table:
32129ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐
32139ccd446eSAtari911│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__
32149ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤
32159ccd446eSAtari911│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__
32169ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤
32179ccd446eSAtari911│ 8│ 9│10│11│12│13│14│ ← All: __background_site__
32189ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘
32199ccd446eSAtari911
32209ccd446eSAtari911Sidebar Events:
32219ccd446eSAtari911┌────────────────────────┐
32229ccd446eSAtari911│ �� Event               │ ← __background_site__
32239ccd446eSAtari911│ �� Event               │ ← __background_site__
32249ccd446eSAtari911└────────────────────────┘
32259ccd446eSAtari911
32269ccd446eSAtari911FINALLY ALL MATCHING! ✓
32279ccd446eSAtari911```
32289ccd446eSAtari911
32299ccd446eSAtari911### Complete List of Removed CSS
32309ccd446eSAtari911
32319ccd446eSAtari911**ALL hardcoded backgrounds removed**:
32329ccd446eSAtari911- `.event-compact-item` background
32339ccd446eSAtari911- `.event-compact-item:hover` background
32349ccd446eSAtari911- `.cal-empty` background & hover
32359ccd446eSAtari911- `.cal-today` background & hover
32369ccd446eSAtari911- `.cal-has-events` background & hover
32379ccd446eSAtari911- `.calendar-compact-grid tbody td` background ← NEW
32389ccd446eSAtari911- `.calendar-compact-grid tbody td:hover` background ← NEW
32399ccd446eSAtari911- `.calendar-compact-grid thead th` background ← NEW
32409ccd446eSAtari911
32419ccd446eSAtari911**Every single CSS background override is GONE!** ��
32429ccd446eSAtari911
32439ccd446eSAtari911### Testing Steps
32449ccd446eSAtari911
32459ccd446eSAtari911**After installing v5.2.5**:
32469ccd446eSAtari911
32479ccd446eSAtari9111. **Clear browser cache**: Ctrl+Shift+R (3 times!)
32489ccd446eSAtari9112. **Clear DokuWiki cache**: Click the button
32499ccd446eSAtari9113. **Close browser completely**: Restart it
32509ccd446eSAtari9114. **Visit page**: Should finally see matching backgrounds
32519ccd446eSAtari911
32529ccd446eSAtari911**CSS is EXTREMELY sticky - may need to clear multiple times!**
32539ccd446eSAtari911
32549ccd446eSAtari911### This Should Be It
32559ccd446eSAtari911
32569ccd446eSAtari911**No more CSS overrides exist** (we've checked the entire file):
32579ccd446eSAtari911- Table cells ✓ Fixed
32589ccd446eSAtari911- Cell states ✓ Fixed
32599ccd446eSAtari911- Event items ✓ Fixed
32609ccd446eSAtari911- Headers ✓ Fixed
32619ccd446eSAtari911- Hover states ✓ Fixed
32629ccd446eSAtari911
32639ccd446eSAtari911**All backgrounds now come from inline styles using template colors!**
32649ccd446eSAtari911
32659ccd446eSAtari911## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS
32669ccd446eSAtari911
32679ccd446eSAtari911### �� Fixed: Removed Hardcoded Backgrounds from Calendar Cells
32689ccd446eSAtari911- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`!
32699ccd446eSAtari911- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS
32709ccd446eSAtari911- **Result:** Calendar cells now use template colors!
32719ccd446eSAtari911
32729ccd446eSAtari911### The Second Culprit
32739ccd446eSAtari911
32749ccd446eSAtari911MORE hardcoded backgrounds in the CSS file!
32759ccd446eSAtari911
32769ccd446eSAtari911**In style.css (lines 359-382)**:
32779ccd446eSAtari911```css
32789ccd446eSAtari911.cal-empty {
32799ccd446eSAtari911    background: #fafafa !important;  /* ← Overriding inline styles! */
32809ccd446eSAtari911}
32819ccd446eSAtari911
32829ccd446eSAtari911.cal-today {
32839ccd446eSAtari911    background: #e8f5e9 !important;  /* ← Overriding today cell! */
32849ccd446eSAtari911}
32859ccd446eSAtari911
32869ccd446eSAtari911.cal-today:hover {
32879ccd446eSAtari911    background: #c8e6c9 !important;  /* ← Overriding hover! */
32889ccd446eSAtari911}
32899ccd446eSAtari911
32909ccd446eSAtari911.cal-has-events {
32919ccd446eSAtari911    background: #fffbf0;  /* ← Overriding event cells! */
32929ccd446eSAtari911}
32939ccd446eSAtari911
32949ccd446eSAtari911.cal-has-events:hover {
32959ccd446eSAtari911    background: #fff4d9;  /* ← Overriding hover! */
32969ccd446eSAtari911}
32979ccd446eSAtari911```
32989ccd446eSAtari911
32999ccd446eSAtari911**These were ALL overriding the inline styles!**
33009ccd446eSAtari911
33019ccd446eSAtari911### The Fix
33029ccd446eSAtari911
33039ccd446eSAtari911**Removed all hardcoded backgrounds**:
33049ccd446eSAtari911```css
33059ccd446eSAtari911.cal-empty {
33069ccd446eSAtari911    /* background removed - inline style handles this */
33079ccd446eSAtari911    cursor: default !important;
33089ccd446eSAtari911}
33099ccd446eSAtari911
33109ccd446eSAtari911.cal-today {
33119ccd446eSAtari911    /* background removed - inline style handles this */
33129ccd446eSAtari911}
33139ccd446eSAtari911
33149ccd446eSAtari911.cal-has-events {
33159ccd446eSAtari911    /* background removed - inline style handles this */
33169ccd446eSAtari911}
33179ccd446eSAtari911
33189ccd446eSAtari911/* Hover states also removed */
33199ccd446eSAtari911```
33209ccd446eSAtari911
33219ccd446eSAtari911### What Was Overridden
33229ccd446eSAtari911
33239ccd446eSAtari911**v5.2.3 fixed**:
33249ccd446eSAtari911- Event items in sidebar ✓
33259ccd446eSAtari911
33269ccd446eSAtari911**v5.2.4 fixes**:
33279ccd446eSAtari911- Calendar day cells ✓
33289ccd446eSAtari911- Today cell ✓
33299ccd446eSAtari911- Empty cells ✓
33309ccd446eSAtari911- Cells with events ✓
33319ccd446eSAtari911- All hover states ✓
33329ccd446eSAtari911
33339ccd446eSAtari911### Why This Kept Happening
33349ccd446eSAtari911
33359ccd446eSAtari911**CSS had hardcoded backgrounds everywhere**:
33369ccd446eSAtari9111. Event items: `#ffffff` (fixed in v5.2.3)
33379ccd446eSAtari9112. Calendar cells: Multiple colors (fixed in v5.2.4)
33389ccd446eSAtari9113. **All with `!important` flags!**
33399ccd446eSAtari911
33409ccd446eSAtari911**The inline styles couldn't override them!**
33419ccd446eSAtari911
33429ccd446eSAtari911### Visual Result
33439ccd446eSAtari911
33449ccd446eSAtari911**Now ALL backgrounds match**:
33459ccd446eSAtari911```
33469ccd446eSAtari911Calendar Grid:
33479ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐
33489ccd446eSAtari911│  │  │  │  │  │  │  │ ← All use __background_site__
33499ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤
33509ccd446eSAtari911│  │██│  │  │  │  │  │ ← Today uses __background_neu__
33519ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤
33529ccd446eSAtari911│  │  │  │  │  │  │  │ ← All match template
33539ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘
33549ccd446eSAtari911
33559ccd446eSAtari911Sidebar Events:
33569ccd446eSAtari911┌────────────────────────┐
33579ccd446eSAtari911│ �� Event               │ ← Uses __background_site__
33589ccd446eSAtari911│ �� Event               │ ← Uses __background_site__
33599ccd446eSAtari911└────────────────────────┘
33609ccd446eSAtari911
33619ccd446eSAtari911Perfect consistency!
33629ccd446eSAtari911```
33639ccd446eSAtari911
33649ccd446eSAtari911### CSS Removed
33659ccd446eSAtari911
33669ccd446eSAtari911**Calendar cells**:
33679ccd446eSAtari911- `.cal-empty` background
33689ccd446eSAtari911- `.cal-empty:hover` background
33699ccd446eSAtari911- `.cal-today` background
33709ccd446eSAtari911- `.cal-today:hover` background
33719ccd446eSAtari911- `.cal-has-events` background
33729ccd446eSAtari911- `.cal-has-events:hover` background
33739ccd446eSAtari911
33749ccd446eSAtari911**All gone!** ✓
33759ccd446eSAtari911
33769ccd446eSAtari911### Important: Clear Caches Again!
33779ccd446eSAtari911
33789ccd446eSAtari911After installing v5.2.4:
33799ccd446eSAtari911
33809ccd446eSAtari9111. **Hard refresh browser**: Ctrl+Shift+R (twice!)
33819ccd446eSAtari9112. **Clear DokuWiki cache**: Admin → Clear Cache
33829ccd446eSAtari9113. **May need to restart browser**: To clear CSS cache
33839ccd446eSAtari911
33849ccd446eSAtari911**Old CSS is VERY sticky!**
33859ccd446eSAtari911
33869ccd446eSAtari911### Why It Took So Long
33879ccd446eSAtari911
33889ccd446eSAtari911**Multiple CSS overrides**:
33899ccd446eSAtari911- Event items (v5.2.3) ✓ Fixed
33909ccd446eSAtari911- Calendar cells (v5.2.4) ✓ Fixed
33919ccd446eSAtari911- Each with different classes
33929ccd446eSAtari911- Each with `!important`
33939ccd446eSAtari911- Hidden throughout CSS file
33949ccd446eSAtari911
33959ccd446eSAtari911**Found them all now!** ��
33969ccd446eSAtari911
33979ccd446eSAtari911## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS
33989ccd446eSAtari911
33999ccd446eSAtari911### �� Fixed: Removed Hardcoded Backgrounds from CSS
34009ccd446eSAtari911- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles!
34019ccd446eSAtari911- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS
34029ccd446eSAtari911- **Result:** Event backgrounds now properly use template colors!
34039ccd446eSAtari911
34049ccd446eSAtari911### The Root Cause
34059ccd446eSAtari911
34069ccd446eSAtari911The CSS file was overriding the inline styles with hardcoded white backgrounds!
34079ccd446eSAtari911
34089ccd446eSAtari911**In style.css (lines 599-616)**:
34099ccd446eSAtari911```css
34109ccd446eSAtari911.event-compact-item {
34119ccd446eSAtari911    background: #ffffff;  /* ← This was overriding inline styles! */
34129ccd446eSAtari911}
34139ccd446eSAtari911
34149ccd446eSAtari911.event-compact-item:hover {
34159ccd446eSAtari911    background: #f8f9fa;  /* ← And this on hover! */
34169ccd446eSAtari911}
34179ccd446eSAtari911```
34189ccd446eSAtari911
34199ccd446eSAtari911**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade!
34209ccd446eSAtari911
34219ccd446eSAtari911### The Fix
34229ccd446eSAtari911
34239ccd446eSAtari911**Removed hardcoded backgrounds from CSS**:
34249ccd446eSAtari911```css
34259ccd446eSAtari911.event-compact-item {
34269ccd446eSAtari911    /* background removed - set via inline style with template colors */
34279ccd446eSAtari911    display: flex;
34289ccd446eSAtari911    /* ... other styles ... */
34299ccd446eSAtari911}
34309ccd446eSAtari911
34319ccd446eSAtari911.event-compact-item:hover {
34329ccd446eSAtari911    box-shadow: 0 1px 3px rgba(0,0,0,0.08);
34339ccd446eSAtari911    /* background removed - inline style handles this */
34349ccd446eSAtari911}
34359ccd446eSAtari911```
34369ccd446eSAtari911
34379ccd446eSAtari911### Why This Was So Difficult to Find
34389ccd446eSAtari911
34399ccd446eSAtari911**CSS Specificity & Cascade**:
34409ccd446eSAtari9111. Inline styles with `!important` should win
34419ccd446eSAtari9112. But CSS that comes after can still apply
34429ccd446eSAtari9113. The hardcoded `background: #ffffff` was silently overriding
34439ccd446eSAtari9114. All the PHP code was correct - it was the CSS!
34449ccd446eSAtari911
34459ccd446eSAtari911**What We Were Doing**:
34469ccd446eSAtari911- ✓ Reading template colors correctly
34479ccd446eSAtari911- ✓ Setting `cell_bg` to `__background_site__` correctly
34489ccd446eSAtari911- ✓ Applying inline styles with `!important` correctly
34499ccd446eSAtari911- ✗ CSS file was overriding everything!
34509ccd446eSAtari911
34519ccd446eSAtari911### What Was Affected
34529ccd446eSAtari911
34539ccd446eSAtari911**Event items in**:
34549ccd446eSAtari911- Main calendar sidebar
34559ccd446eSAtari911- Standalone event list
34569ccd446eSAtari911- Sidebar widget
34579ccd446eSAtari911- All event displays
34589ccd446eSAtari911
34599ccd446eSAtari911**All had white backgrounds hardcoded in CSS!**
34609ccd446eSAtari911
34619ccd446eSAtari911### Now Working
34629ccd446eSAtari911
34639ccd446eSAtari911**Events use template colors**:
34649ccd446eSAtari911```html
34659ccd446eSAtari911<div class="event-compact-item"
34669ccd446eSAtari911     style="background: #f5f5f5 !important; ...">
34679ccd446eSAtari911    ← Now this inline style actually works!
34689ccd446eSAtari911</div>
34699ccd446eSAtari911```
34709ccd446eSAtari911
34719ccd446eSAtari911**No CSS override** ✓
34729ccd446eSAtari911
34739ccd446eSAtari911### Testing
34749ccd446eSAtari911
34759ccd446eSAtari911To verify this works:
34769ccd446eSAtari9111. Clear browser cache (important!)
34779ccd446eSAtari9112. Clear DokuWiki cache
34789ccd446eSAtari9113. Reload page
34799ccd446eSAtari9114. Events should now match eventlist background
34809ccd446eSAtari911
34819ccd446eSAtari911**Browser caching can make old CSS persist!**
34829ccd446eSAtari911
34839ccd446eSAtari911### Visual Result
34849ccd446eSAtari911
34859ccd446eSAtari911**All backgrounds now matching**:
34869ccd446eSAtari911```
34879ccd446eSAtari911┌────────────────────────────┐
34889ccd446eSAtari911│ Eventlist (#f5f5f5)        │ ← Template color
34899ccd446eSAtari911├────────────────────────────┤
34909ccd446eSAtari911│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
34919ccd446eSAtari911├────────────────────────────┤
34929ccd446eSAtari911│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
34939ccd446eSAtari911└────────────────────────────┘
34949ccd446eSAtari911
34959ccd446eSAtari911Perfect match!
34969ccd446eSAtari911```
34979ccd446eSAtari911
34989ccd446eSAtari911### Why Everything Else Worked
34999ccd446eSAtari911
35009ccd446eSAtari911**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds:
35019ccd446eSAtari911- They only had inline styles ✓
35029ccd446eSAtari911- Inline styles worked correctly ✓
35039ccd446eSAtari911- Only event items had the CSS override ✗
35049ccd446eSAtari911
35059ccd446eSAtari911### Important Notes
35069ccd446eSAtari911
35079ccd446eSAtari911**Clear caches**:
35089ccd446eSAtari911- Browser cache (Ctrl+Shift+R or Cmd+Shift+R)
35099ccd446eSAtari911- DokuWiki cache (Admin → Clear Cache)
35109ccd446eSAtari911- Old CSS may be cached!
35119ccd446eSAtari911
35129ccd446eSAtari911**This was the culprit all along!**
35139ccd446eSAtari911
35149ccd446eSAtari911## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND
35159ccd446eSAtari911
35169ccd446eSAtari911### �� Fixed: Clock Area Now Matches Event Cells
35179ccd446eSAtari911- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`)
35189ccd446eSAtari911- **Result:** Clock/Today header matches event cell backgrounds!
35199ccd446eSAtari911
35209ccd446eSAtari911### The Issue
35219ccd446eSAtari911
35229ccd446eSAtari911The clock area (Today header) was using a different background:
35239ccd446eSAtari911
35249ccd446eSAtari911**Before (v5.2.1)**:
35259ccd446eSAtari911```php
35269ccd446eSAtari911'header_bg' => __background_alt__,   // Different color (gray #e8e8e8)
35279ccd446eSAtari911'cell_bg' => __background_site__,    // Event cells (#f5f5f5)
35289ccd446eSAtari911```
35299ccd446eSAtari911
35309ccd446eSAtari911**After (v5.2.2)**:
35319ccd446eSAtari911```php
35329ccd446eSAtari911'header_bg' => __background_site__,  // Same as cells (#f5f5f5) ✓
35339ccd446eSAtari911'cell_bg' => __background_site__,    // Event cells (#f5f5f5) ✓
35349ccd446eSAtari911```
35359ccd446eSAtari911
35369ccd446eSAtari911### What's the Clock Area?
35379ccd446eSAtari911
35389ccd446eSAtari911The clock/Today header in the sidebar:
35399ccd446eSAtari911```
35409ccd446eSAtari911┌────────────────────────────┐
35419ccd446eSAtari911│ 3:45:23 PM                 │ ← Clock area (header_bg)
35429ccd446eSAtari911│ ��️ --° | Sun, Feb 9, 2026 │
35439ccd446eSAtari911└────────────────────────────┘
35449ccd446eSAtari911```
35459ccd446eSAtari911
35469ccd446eSAtari911### All Backgrounds Now Unified
35479ccd446eSAtari911
35489ccd446eSAtari911**Everything now uses __background_site__**:
35499ccd446eSAtari911- Eventlist background ✓
35509ccd446eSAtari911- Calendar cells ✓
35519ccd446eSAtari911- Event items ✓
35529ccd446eSAtari911- Clock/Today header ✓
35539ccd446eSAtari911- Sidebar widget ✓
35549ccd446eSAtari911- All backgrounds match! ✓
35559ccd446eSAtari911
35569ccd446eSAtari911### Visual Result
35579ccd446eSAtari911
35589ccd446eSAtari911**Complete consistency**:
35599ccd446eSAtari911```
35609ccd446eSAtari911┌────────────────────────────┐
35619ccd446eSAtari911│ 3:45:23 PM                 │ ← Same background
35629ccd446eSAtari911│ ��️ --° | Sun, Feb 9, 2026 │
35639ccd446eSAtari911├────────────────────────────┤
35649ccd446eSAtari911│ �� Meeting at 2pm          │ ← Same background
35659ccd446eSAtari911│ Description...             │
35669ccd446eSAtari911├────────────────────────────┤
35679ccd446eSAtari911│ �� Another event           │ ← Same background
35689ccd446eSAtari911│ More details...            │
35699ccd446eSAtari911└────────────────────────────┘
35709ccd446eSAtari911
35719ccd446eSAtari911All using __background_site__ (#f5f5f5)
35729ccd446eSAtari911```
35739ccd446eSAtari911
35749ccd446eSAtari911**Perfect visual harmony!** ��
35759ccd446eSAtari911
35769ccd446eSAtari911## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND
35779ccd446eSAtari911
35789ccd446eSAtari911### �� Fixed: Calendar Cells Now Match Eventlist Background
35799ccd446eSAtari911- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`)
35809ccd446eSAtari911- **Result:** Calendar cells now match the eventlist background perfectly!
35819ccd446eSAtari911
35829ccd446eSAtari911### The Real Issue
35839ccd446eSAtari911
35849ccd446eSAtari911The eventlist was showing the CORRECT background color all along!
35859ccd446eSAtari911
35869ccd446eSAtari911**Eventlist was using**:
35879ccd446eSAtari911- `bg` → `__background_site__` ✓ (This was correct!)
35889ccd446eSAtari911
35899ccd446eSAtari911**Calendar cells were using**:
35909ccd446eSAtari911- `cell_bg` → `__background__` ✗ (This was wrong!)
35919ccd446eSAtari911
35929ccd446eSAtari911**They didn't match!**
35939ccd446eSAtari911
35949ccd446eSAtari911### The Correct Fix
35959ccd446eSAtari911
35969ccd446eSAtari911**Now everything uses __background_site__**:
35979ccd446eSAtari911```php
35989ccd446eSAtari911'bg' => __background_site__,        // Eventlist (was already correct)
35999ccd446eSAtari911'cell_bg' => __background_site__,   // Cells (now fixed to match)
36009ccd446eSAtari911```
36019ccd446eSAtari911
36029ccd446eSAtari911### Why __background_site__?
36039ccd446eSAtari911
36049ccd446eSAtari911The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background:
36059ccd446eSAtari911
36069ccd446eSAtari911```
36079ccd446eSAtari911Page Layout:
36089ccd446eSAtari911┌────────────────────────────────────┐
36099ccd446eSAtari911│ __background_site__ (page bg)     │ ← This is where calendar lives
36109ccd446eSAtari911│                                    │
36119ccd446eSAtari911│  ┌──────────────────────────────┐ │
36129ccd446eSAtari911│  │ __background__ (content bg)  │ │ ← Wiki article content
36139ccd446eSAtari911│  │                              │ │
36149ccd446eSAtari911│  └──────────────────────────────┘ │
36159ccd446eSAtari911│                                    │
36169ccd446eSAtari911└────────────────────────────────────┘
36179ccd446eSAtari911```
36189ccd446eSAtari911
36199ccd446eSAtari911**Calendar should match the page background, not the content background!**
36209ccd446eSAtari911
36219ccd446eSAtari911### Template Example
36229ccd446eSAtari911
36239ccd446eSAtari911Typical DokuWiki template:
36249ccd446eSAtari911```ini
36259ccd446eSAtari911__background_site__ = "#f5f5f5"  (Light gray - page background)
36269ccd446eSAtari911__background__ = "#ffffff"        (White - content area)
36279ccd446eSAtari911```
36289ccd446eSAtari911
36299ccd446eSAtari911**Before (v5.2.0)**:
36309ccd446eSAtari911- Eventlist: `#f5f5f5` (light gray) ✓ Correct
36319ccd446eSAtari911- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match
36329ccd446eSAtari911
36339ccd446eSAtari911**After (v5.2.1)**:
36349ccd446eSAtari911- Eventlist: `#f5f5f5` (light gray) ✓ Correct
36359ccd446eSAtari911- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED!
36369ccd446eSAtari911
36379ccd446eSAtari911### All Backgrounds Now Unified
36389ccd446eSAtari911
36399ccd446eSAtari911**Everything now uses __background_site__**:
36409ccd446eSAtari911- Eventlist sidebar background ✓
36419ccd446eSAtari911- Main calendar background ✓
36429ccd446eSAtari911- Calendar day cells ✓
36439ccd446eSAtari911- Sidebar widget ✓
36449ccd446eSAtari911- Event items ✓
36459ccd446eSAtari911- Input fields ✓
36469ccd446eSAtari911- Buttons ✓
36479ccd446eSAtari911
36489ccd446eSAtari911**All perfectly matched to the page background!**
36499ccd446eSAtari911
36509ccd446eSAtari911### Why Version 5.2.0 Was Wrong
36519ccd446eSAtari911
36529ccd446eSAtari911I 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.
36539ccd446eSAtari911
36549ccd446eSAtari911**The eventlist knew what it was doing all along!** The cells just needed to catch up.
36559ccd446eSAtari911
36569ccd446eSAtari911## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS
36579ccd446eSAtari911**Note**: This version went the wrong direction. See v5.2.1 for the correct fix.
36589ccd446eSAtari911
36599ccd446eSAtari911### �� Fixed: All Backgrounds Now Use __background__
36609ccd446eSAtari911- **Fixed:** `bg` now uses `__background__` instead of `__background_site__`
36619ccd446eSAtari911- **Fixed:** Eventlist, calendar cells, and sidebar all match now
36629ccd446eSAtari911- **Result:** Completely unified background throughout!
36639ccd446eSAtari911
36649ccd446eSAtari911### The Issue
36659ccd446eSAtari911
36669ccd446eSAtari911Different parts of the calendar were using different background sources:
36679ccd446eSAtari911
36689ccd446eSAtari911**Before (v5.1.9)**:
36699ccd446eSAtari911```php
36709ccd446eSAtari911'bg' => __background_site__        // Eventlist background (outer page)
36719ccd446eSAtari911'cell_bg' => __background__        // Cell backgrounds (content area)
36729ccd446eSAtari911```
36739ccd446eSAtari911
36749ccd446eSAtari911**These are different colors!**
36759ccd446eSAtari911- `__background_site__` = Outer page wrapper (often gray)
36769ccd446eSAtari911- `__background__` = Main content area (often white)
36779ccd446eSAtari911
36789ccd446eSAtari911### The Fix
36799ccd446eSAtari911
36809ccd446eSAtari911**After (v5.2.0)**:
36819ccd446eSAtari911```php
36829ccd446eSAtari911'bg' => __background__             // Eventlist background ✓
36839ccd446eSAtari911'cell_bg' => __background__        // Cell backgrounds ✓
36849ccd446eSAtari911```
36859ccd446eSAtari911
36869ccd446eSAtari911**Both use the same source!**
36879ccd446eSAtari911
36889ccd446eSAtari911### What Uses 'bg'
36899ccd446eSAtari911
36909ccd446eSAtari911The `bg` color is used for:
36919ccd446eSAtari911- Eventlist sidebar background
36929ccd446eSAtari911- Main calendar container
36939ccd446eSAtari911- Sidebar widget background
36949ccd446eSAtari911- Form backgrounds
36959ccd446eSAtari911- Event dialogs
36969ccd446eSAtari911
36979ccd446eSAtari911### What Uses 'cell_bg'
36989ccd446eSAtari911
36999ccd446eSAtari911The `cell_bg` color is used for:
37009ccd446eSAtari911- Calendar day cells
37019ccd446eSAtari911- Event item backgrounds
37029ccd446eSAtari911- Input field backgrounds
37039ccd446eSAtari911- Button backgrounds
37049ccd446eSAtari911
37059ccd446eSAtari911### Why This Matters
37069ccd446eSAtari911
37079ccd446eSAtari911**Template color hierarchy**:
37089ccd446eSAtari911```
37099ccd446eSAtari911__background_site__ → Outer page/body (e.g., #f5f5f5 light gray)
37109ccd446eSAtari911__background__      → Main content area (e.g., #ffffff white)
37119ccd446eSAtari911__background_alt__  → Sections/headers
37129ccd446eSAtari911__background_neu__  → Highlights
37139ccd446eSAtari911```
37149ccd446eSAtari911
37159ccd446eSAtari911**We want all calendar backgrounds to match the main content area!**
37169ccd446eSAtari911
37179ccd446eSAtari911### Visual Comparison
37189ccd446eSAtari911
37199ccd446eSAtari911**Before (v5.1.9)**: Mismatched backgrounds
37209ccd446eSAtari911```
37219ccd446eSAtari911┌────────────────────────────────┐
37229ccd446eSAtari911│ Eventlist (gray #f5f5f5)      │ ← __background_site__
37239ccd446eSAtari911└────────────────────────────────┘
37249ccd446eSAtari911
37259ccd446eSAtari911┌────────────────────────────────┐
37269ccd446eSAtari911│ Calendar                       │
37279ccd446eSAtari911│ ┌──┬──┬──┬──┬──┬──┬──┐       │
37289ccd446eSAtari911│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
37299ccd446eSAtari911│ └──┴──┴──┴──┴──┴──┴──┘       │
37309ccd446eSAtari911└────────────────────────────────┘
37319ccd446eSAtari911Different colors - looks inconsistent
37329ccd446eSAtari911```
37339ccd446eSAtari911
37349ccd446eSAtari911**After (v5.2.0)**: Unified backgrounds
37359ccd446eSAtari911```
37369ccd446eSAtari911┌────────────────────────────────┐
37379ccd446eSAtari911│ Eventlist (white #fff)         │ ← __background__
37389ccd446eSAtari911└────────────────────────────────┘
37399ccd446eSAtari911
37409ccd446eSAtari911┌────────────────────────────────┐
37419ccd446eSAtari911│ Calendar                       │
37429ccd446eSAtari911│ ┌──┬──┬──┬──┬──┬──┬──┐       │
37439ccd446eSAtari911│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
37449ccd446eSAtari911│ └──┴──┴──┴──┴──┴──┴──┘       │
37459ccd446eSAtari911└────────────────────────────────┘
37469ccd446eSAtari911Same color - perfectly consistent!
37479ccd446eSAtari911```
37489ccd446eSAtari911
37499ccd446eSAtari911### Template Examples
37509ccd446eSAtari911
37519ccd446eSAtari911**Light Template**:
37529ccd446eSAtari911```ini
37539ccd446eSAtari911__background_site__ = "#f5f5f5"  (light gray)
37549ccd446eSAtari911__background__ = "#ffffff"       (white)
37559ccd446eSAtari911```
37569ccd446eSAtari911
37579ccd446eSAtari911**Before**: Eventlist gray, cells white
37589ccd446eSAtari911**After**: Eventlist white, cells white ✓
37599ccd446eSAtari911
37609ccd446eSAtari911**Dark Template**:
37619ccd446eSAtari911```ini
37629ccd446eSAtari911__background_site__ = "#1a1a1a"  (very dark)
37639ccd446eSAtari911__background__ = "#2d2d2d"       (dark)
37649ccd446eSAtari911```
37659ccd446eSAtari911
37669ccd446eSAtari911**Before**: Eventlist very dark, cells dark
37679ccd446eSAtari911**After**: Eventlist dark, cells dark ✓
37689ccd446eSAtari911
37699ccd446eSAtari911### Benefits
37709ccd446eSAtari911
37719ccd446eSAtari911**Visual Consistency**:
37729ccd446eSAtari911- All backgrounds match
37739ccd446eSAtari911- Clean, unified appearance
37749ccd446eSAtari911- Professional look
37759ccd446eSAtari911
37769ccd446eSAtari911**Correct Template Integration**:
37779ccd446eSAtari911- Uses content area color (not page wrapper)
37789ccd446eSAtari911- Matches wiki content area
37799ccd446eSAtari911- Proper color hierarchy
37809ccd446eSAtari911
37819ccd446eSAtari911**Works Everywhere**:
37829ccd446eSAtari911- Light templates ✓
37839ccd446eSAtari911- Dark templates ✓
37849ccd446eSAtari911- Custom templates ✓
37859ccd446eSAtari911
37869ccd446eSAtari911### All Backgrounds Unified
37879ccd446eSAtari911
37889ccd446eSAtari911**Now using __background__**:
37899ccd446eSAtari911- Eventlist background ✓
37909ccd446eSAtari911- Calendar cells ✓
37919ccd446eSAtari911- Sidebar widget ✓
37929ccd446eSAtari911- Event items ✓
37939ccd446eSAtari911- Input fields ✓
37949ccd446eSAtari911- Buttons ✓
37959ccd446eSAtari911- Dialogs ✓
37969ccd446eSAtari911
37979ccd446eSAtari911**Perfect harmony throughout!** ��
37989ccd446eSAtari911
37999ccd446eSAtari911## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS
38009ccd446eSAtari911
38019ccd446eSAtari911### �� Fixed: Wiki Theme Event Backgrounds Not Showing
38029ccd446eSAtari911- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!)
38039ccd446eSAtari911- **Fixed:** Replaced CSS variables with actual hex colors
38049ccd446eSAtari911- **Result:** Event backgrounds now show correctly with template colors!
38059ccd446eSAtari911
38069ccd446eSAtari911### The Problem
38079ccd446eSAtari911
38089ccd446eSAtari911CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes!
38099ccd446eSAtari911
38109ccd446eSAtari911**Before (broken)**:
38119ccd446eSAtari911```php
38129ccd446eSAtari911'cell_bg' => 'var(--__background__, #fff)',  // Doesn't work in inline styles!
38139ccd446eSAtari911```
38149ccd446eSAtari911
38159ccd446eSAtari911**After (fixed)**:
38169ccd446eSAtari911```php
38179ccd446eSAtari911'cell_bg' => '#fff',  // Actual hex color works!
38189ccd446eSAtari911```
38199ccd446eSAtari911
38209ccd446eSAtari911### What Was Affected
38219ccd446eSAtari911
38229ccd446eSAtari911**When style.ini read successfully**:
38239ccd446eSAtari911- ✅ Worked fine (uses actual hex colors from file)
38249ccd446eSAtari911
38259ccd446eSAtari911**When style.ini fallback used**:
38269ccd446eSAtari911- ❌ Events had no background
38279ccd446eSAtari911- ❌ CSS variables don't work in inline styles
38289ccd446eSAtari911- ❌ Looked broken
38299ccd446eSAtari911
38309ccd446eSAtari911### The Fix
38319ccd446eSAtari911
38329ccd446eSAtari911**Wiki theme fallback now uses real colors**:
38339ccd446eSAtari911```php
38349ccd446eSAtari911'wiki' => [
38359ccd446eSAtari911    'bg' => '#f5f5f5',           // Real hex (was: var(--__background_site__))
38369ccd446eSAtari911    'border' => '#ccc',           // Real hex (was: var(--__border__))
38379ccd446eSAtari911    'cell_bg' => '#fff',          // Real hex (was: var(--__background__))
38389ccd446eSAtari911    'cell_today_bg' => '#eee',    // Real hex (was: var(--__background_neu__))
38399ccd446eSAtari911    'text_primary' => '#333',     // Real hex (was: var(--__text__))
38409ccd446eSAtari911    'text_bright' => '#2b73b7',   // Real hex (was: var(--__link__))
38419ccd446eSAtari911    'text_dim' => '#666',         // Real hex (was: var(--__text_neu__))
38429ccd446eSAtari911    'grid_bg' => '#e8e8e8',       // Real hex (was: var(--__background_alt__))
38439ccd446eSAtari911    // ... all colors now use real hex values
38449ccd446eSAtari911]
38459ccd446eSAtari911```
38469ccd446eSAtari911
38479ccd446eSAtari911### Why CSS Variables Don't Work
38489ccd446eSAtari911
38499ccd446eSAtari911**CSS variables work**:
38509ccd446eSAtari911```css
38519ccd446eSAtari911.some-class {
38529ccd446eSAtari911    background: var(--__background__, #fff);  /* ✓ Works in CSS */
38539ccd446eSAtari911}
38549ccd446eSAtari911```
38559ccd446eSAtari911
38569ccd446eSAtari911**CSS variables DON'T work**:
38579ccd446eSAtari911```html
38589ccd446eSAtari911<div style="background: var(--__background__, #fff)">  <!-- ✗ Doesn't work -->
38599ccd446eSAtari911```
38609ccd446eSAtari911
38619ccd446eSAtari911### How It Works Now
38629ccd446eSAtari911
38639ccd446eSAtari911**Priority system**:
38649ccd446eSAtari9111. **Try reading style.ini** → Use actual template hex colors ✓
38659ccd446eSAtari9112. **If file not found** → Use fallback hex colors ✓
38669ccd446eSAtari9113. **Never use CSS variables in inline styles** ✓
38679ccd446eSAtari911
38689ccd446eSAtari911**Both paths now work correctly!**
38699ccd446eSAtari911
38709ccd446eSAtari911### Visual Result
38719ccd446eSAtari911
38729ccd446eSAtari911**Events now have proper backgrounds**:
38739ccd446eSAtari911```
38749ccd446eSAtari911┌──────────────────────────┐
38759ccd446eSAtari911│ �� Meeting at 2pm        │ ← White background (#fff)
38769ccd446eSAtari911│ Description here...      │
38779ccd446eSAtari911│ [✏️ Edit] [��️ Delete]   │
38789ccd446eSAtari911└──────────────────────────┘
38799ccd446eSAtari911
38809ccd446eSAtari911Not:
38819ccd446eSAtari911┌──────────────────────────┐
38829ccd446eSAtari911│ �� Meeting at 2pm        │ ← No background (broken)
38839ccd446eSAtari911│ Description here...      │
38849ccd446eSAtari911└──────────────────────────┘
38859ccd446eSAtari911```
38869ccd446eSAtari911
38879ccd446eSAtari911### Affected Areas
38889ccd446eSAtari911
38899ccd446eSAtari911**All event displays**:
38909ccd446eSAtari911- Main calendar events ✓
38919ccd446eSAtari911- Sidebar widget events ✓
38929ccd446eSAtari911- Event list items ✓
38939ccd446eSAtari911- Event backgrounds ✓
38949ccd446eSAtari911- Button backgrounds ✓
38959ccd446eSAtari911- Input field backgrounds ✓
38969ccd446eSAtari911
38979ccd446eSAtari911**Everything uses real colors now!**
38989ccd446eSAtari911
38999ccd446eSAtari911## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT
39009ccd446eSAtari911
39019ccd446eSAtari911### �� Reorganized: Better Update Tab Layout
39029ccd446eSAtari911- **Moved:** Current Version section to the top
39039ccd446eSAtari911- **Combined:** Upload and Important Notes side-by-side
39049ccd446eSAtari911- **Improved:** Space-efficient two-column layout
39059ccd446eSAtari911- **Result:** More information visible at once!
39069ccd446eSAtari911
39079ccd446eSAtari911### New Layout Order
39089ccd446eSAtari911
39099ccd446eSAtari911**Version 5.1.8**:
39109ccd446eSAtari911```
39119ccd446eSAtari9111. Current Version (at top - see what you have)
39129ccd446eSAtari9112. Upload + Important Notes (side-by-side)
39139ccd446eSAtari9113. Recent Changes (changelog)
39149ccd446eSAtari9114. Backups
39159ccd446eSAtari911```
39169ccd446eSAtari911
39179ccd446eSAtari911### Side-by-Side Design
39189ccd446eSAtari911
39199ccd446eSAtari911**Upload form (left 60%) + Important Notes (right 40%)**:
39209ccd446eSAtari911```
39219ccd446eSAtari911┌──────────────────────────────────────────┐
39229ccd446eSAtari911│ �� Current Version                       │
39239ccd446eSAtari911│ Version: 5.1.8                           │
39249ccd446eSAtari911│ ✅ Permissions: OK                       │
39259ccd446eSAtari911└──────────────────────────────────────────┘
39269ccd446eSAtari911
39279ccd446eSAtari911┌─────────────────────┬────────────────────┐
39289ccd446eSAtari911│ �� Upload New       │ ⚠️ Important Notes │
39299ccd446eSAtari911│ [Choose File]       │ • Replaces files   │
39309ccd446eSAtari911│ ☑ Backup first      │ • Config preserved │
39319ccd446eSAtari911│ [Upload] [Clear]    │ • Events safe      │
39329ccd446eSAtari911└─────────────────────┴────────────────────┘
39339ccd446eSAtari911```
39349ccd446eSAtari911
39359ccd446eSAtari911### Benefits
39369ccd446eSAtari911
39379ccd446eSAtari911**Current Version First**:
39389ccd446eSAtari911- See what you have immediately
39399ccd446eSAtari911- Check permissions at a glance
39409ccd446eSAtari911- Know if ready to update
39419ccd446eSAtari911
39429ccd446eSAtari911**Side-by-Side Layout**:
39439ccd446eSAtari911- Upload form and warnings together
39449ccd446eSAtari911- Read notes while choosing file
39459ccd446eSAtari911- More efficient use of space
39469ccd446eSAtari911- Less scrolling needed
39479ccd446eSAtari911
39489ccd446eSAtari911**Better Information Flow**:
39499ccd446eSAtari9111. See current version ✓
39509ccd446eSAtari9112. Upload new version with notes visible ✓
39519ccd446eSAtari9113. Review recent changes ✓
39529ccd446eSAtari9114. Manage backups ✓
39539ccd446eSAtari911
39549ccd446eSAtari911### Visual Comparison
39559ccd446eSAtari911
39569ccd446eSAtari911**Before (v5.1.7)**:
39579ccd446eSAtari911```
39589ccd446eSAtari911Important Notes (full width)
39599ccd446eSAtari91139609ccd446eSAtari911Upload Form (full width)
39619ccd446eSAtari91139629ccd446eSAtari911Current Version
39639ccd446eSAtari91139649ccd446eSAtari911Recent Changes
39659ccd446eSAtari91139669ccd446eSAtari911Backups
39679ccd446eSAtari911```
39689ccd446eSAtari911
39699ccd446eSAtari911**After (v5.1.8)**:
39709ccd446eSAtari911```
39719ccd446eSAtari911Current Version (full width)
39729ccd446eSAtari91139739ccd446eSAtari911Upload (60%) | Notes (40%)
39749ccd446eSAtari91139759ccd446eSAtari911Recent Changes
39769ccd446eSAtari91139779ccd446eSAtari911Backups
39789ccd446eSAtari911```
39799ccd446eSAtari911
39809ccd446eSAtari911**More compact, better organized!**
39819ccd446eSAtari911
39829ccd446eSAtari911### Responsive Design
39839ccd446eSAtari911
39849ccd446eSAtari911**Wide screens**:
39859ccd446eSAtari911- Upload and notes side-by-side
39869ccd446eSAtari911- Full 1200px width utilized
39879ccd446eSAtari911- Efficient space usage
39889ccd446eSAtari911
39899ccd446eSAtari911**Narrow screens**:
39909ccd446eSAtari911- Sections stack gracefully
39919ccd446eSAtari911- Flex layout adapts
39929ccd446eSAtari911- Still fully functional
39939ccd446eSAtari911
39949ccd446eSAtari911### Layout Details
39959ccd446eSAtari911
39969ccd446eSAtari911**Current Version Section**:
39979ccd446eSAtari911- Full width (1200px max)
39989ccd446eSAtari911- Shows version, author, description
39999ccd446eSAtari911- Permission status with icons
40009ccd446eSAtari911- Helpful fix commands if needed
40019ccd446eSAtari911
40029ccd446eSAtari911**Upload/Notes Section**:
40039ccd446eSAtari911- Flexbox layout with gap
40049ccd446eSAtari911- Upload: `flex:1` (grows)
40059ccd446eSAtari911- Notes: `flex:0 0 350px` (fixed 350px)
40069ccd446eSAtari911- Both have proper min-width
40079ccd446eSAtari911
40089ccd446eSAtari911**Recent Changes Section**:
40099ccd446eSAtari911- Full width (1200px max)
40109ccd446eSAtari911- Compact scrollable view
40119ccd446eSAtari911- Color-coded change types
40129ccd446eSAtari911- Last 10 versions shown
40139ccd446eSAtari911
40149ccd446eSAtari911**Backups Section**:
40159ccd446eSAtari911- Full width (1200px max)
40169ccd446eSAtari911- Manual backup button
40179ccd446eSAtari911- Scrollable file list
40189ccd446eSAtari911- All actions accessible
40199ccd446eSAtari911
40209ccd446eSAtari911### Improved Max Widths
40219ccd446eSAtari911
40229ccd446eSAtari911All sections now use `max-width:1200px` (previously 900px):
40239ccd446eSAtari911- Better use of wide screens
40249ccd446eSAtari911- Still responsive on narrow screens
40259ccd446eSAtari911- Consistent throughout tab
40269ccd446eSAtari911
40279ccd446eSAtari911## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR
40289ccd446eSAtari911
40299ccd446eSAtari911### �� Fixed: Extra Closing Brace
40309ccd446eSAtari911- **Fixed:** ParseError on line 1936 (extra closing brace)
40319ccd446eSAtari911- **Result:** Manual backup feature now works correctly!
40329ccd446eSAtari911
40339ccd446eSAtari911### What Was Wrong
40349ccd446eSAtari911
40359ccd446eSAtari911Extra `}` after the backup section:
40369ccd446eSAtari911
40379ccd446eSAtari911**Before (broken)**:
40389ccd446eSAtari911```php
40399ccd446eSAtari911echo '</div>';
40409ccd446eSAtari911}  // ← Extra closing brace!
40419ccd446eSAtari911
40429ccd446eSAtari911echo '<script>
40439ccd446eSAtari911```
40449ccd446eSAtari911
40459ccd446eSAtari911**After (fixed)**:
40469ccd446eSAtari911```php
40479ccd446eSAtari911echo '</div>';
40489ccd446eSAtari911
40499ccd446eSAtari911echo '<script>
40509ccd446eSAtari911```
40519ccd446eSAtari911
40529ccd446eSAtari911**Manual backup feature now fully functional!** ✅
40539ccd446eSAtari911
40549ccd446eSAtari911## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND
40559ccd446eSAtari911
40569ccd446eSAtari911### �� Added: Create Backup Manually Anytime
40579ccd446eSAtari911- **Added:** "Create Backup Now" button in Backups section
40589ccd446eSAtari911- **Added:** Manual backup action handler with full verification
40599ccd446eSAtari911- **Added:** Backups section always visible (even with no backups)
40609ccd446eSAtari911- **Added:** Success message showing file size and file count
40619ccd446eSAtari911- **Result:** Create backups anytime without needing to upload!
40629ccd446eSAtari911
40639ccd446eSAtari911### Manual Backup Button
40649ccd446eSAtari911
40659ccd446eSAtari911**New Layout**:
40669ccd446eSAtari911```
40679ccd446eSAtari911┌─────────────────────────────────────┐
40689ccd446eSAtari911│ �� Backups        [�� Create Backup Now] │
40699ccd446eSAtari911├─────────────────────────────────────┤
40709ccd446eSAtari911│ Backup File                Size     │
40719ccd446eSAtari911calendar.backup.v5.1.6...  243 KB   │
40729ccd446eSAtari911│ [�� Download] [✏️ Rename] [��️ Delete] │
40739ccd446eSAtari911└─────────────────────────────────────┘
40749ccd446eSAtari911```
40759ccd446eSAtari911
40769ccd446eSAtari911**Always visible - even with no backups**:
40779ccd446eSAtari911```
40789ccd446eSAtari911┌─────────────────────────────────────┐
40799ccd446eSAtari911│ �� Backups        [�� Create Backup Now] │
40809ccd446eSAtari911├─────────────────────────────────────┤
40819ccd446eSAtari911│ No backups yet. Click "Create       │
40829ccd446eSAtari911│ Backup Now" to create your first    │
40839ccd446eSAtari911│ backup.                              │
40849ccd446eSAtari911└─────────────────────────────────────┘
40859ccd446eSAtari911```
40869ccd446eSAtari911
40879ccd446eSAtari911### How It Works
40889ccd446eSAtari911
40899ccd446eSAtari911**Click the button**:
40909ccd446eSAtari9111. Confirm: "Create a backup of the current plugin version?"
40919ccd446eSAtari9112. System creates backup ZIP
40929ccd446eSAtari9113. Verifies: File count (30+ files)
40939ccd446eSAtari9114. Verifies: File size (200KB+)
40949ccd446eSAtari9115. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)"
40959ccd446eSAtari911
40969ccd446eSAtari911**Backup naming**:
40979ccd446eSAtari911```
40989ccd446eSAtari911calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
40999ccd446eSAtari911                       ^^^^^^
41009ccd446eSAtari911                     "manual" tag identifies manual backups
41019ccd446eSAtari911```
41029ccd446eSAtari911
41039ccd446eSAtari911### Use Cases
41049ccd446eSAtari911
41059ccd446eSAtari911**Before updates**:
41069ccd446eSAtari911- Create safety backup before uploading new version
41079ccd446eSAtari911- Have multiple restore points
41089ccd446eSAtari911- Test new features with fallback
41099ccd446eSAtari911
41109ccd446eSAtari911**Regular backups**:
41119ccd446eSAtari911- Weekly/monthly backup schedule
41129ccd446eSAtari911- Before making configuration changes
41139ccd446eSAtari911- After important customizations
41149ccd446eSAtari911
41159ccd446eSAtari911**Development**:
41169ccd446eSAtari911- Backup before code experiments
41179ccd446eSAtari911- Save working states
41189ccd446eSAtari911- Quick rollback points
41199ccd446eSAtari911
41209ccd446eSAtari911### Full Verification
41219ccd446eSAtari911
41229ccd446eSAtari911**Same checks as automatic backups**:
41239ccd446eSAtari911- ✅ File count check (minimum 10, expected 30+)
41249ccd446eSAtari911- ✅ File size check (minimum 1KB, expected 200KB+)
41259ccd446eSAtari911- ✅ Existence check (file actually created)
41269ccd446eSAtari911- ✅ Automatic cleanup on failure
41279ccd446eSAtari911
41289ccd446eSAtari911**Success message includes**:
41299ccd446eSAtari911- Backup filename
41309ccd446eSAtari911- File size (human-readable)
41319ccd446eSAtari911- Number of files backed up
41329ccd446eSAtari911
41339ccd446eSAtari911### Example Messages
41349ccd446eSAtari911
41359ccd446eSAtari911**Success**:
41369ccd446eSAtari911```
41379ccd446eSAtari911✓ Manual backup created successfully:
41389ccd446eSAtari911  calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
41399ccd446eSAtari911  (243 KB, 31 files)
41409ccd446eSAtari911```
41419ccd446eSAtari911
41429ccd446eSAtari911**Failure Examples**:
41439ccd446eSAtari911```
41449ccd446eSAtari911❌ Plugin directory is not readable.
41459ccd446eSAtari911   Please check permissions.
41469ccd446eSAtari911
41479ccd446eSAtari911❌ Backup incomplete: Only 5 files were added (expected 30+).
41489ccd446eSAtari911   Backup failed.
41499ccd446eSAtari911
41509ccd446eSAtari911❌ Backup file is too small (342 bytes).
41519ccd446eSAtari911   Only 3 files were added. Backup failed.
41529ccd446eSAtari911```
41539ccd446eSAtari911
41549ccd446eSAtari911### Benefits
41559ccd446eSAtari911
41569ccd446eSAtari911**On-Demand Safety**:
41579ccd446eSAtari911- Create backups anytime
41589ccd446eSAtari911- No need to upload new version
41599ccd446eSAtari911- Quick and easy
41609ccd446eSAtari911
41619ccd446eSAtari911**Peace of Mind**:
41629ccd446eSAtari911- Backup before risky changes
41639ccd446eSAtari911- Multiple restore points
41649ccd446eSAtari911- Safe experimentation
41659ccd446eSAtari911
41669ccd446eSAtari911**Professional Workflow**:
41679ccd446eSAtari911- Regular backup schedule
41689ccd446eSAtari911- Version snapshots
41699ccd446eSAtari911- Disaster recovery
41709ccd446eSAtari911
41719ccd446eSAtari911### Backup Section Improvements
41729ccd446eSAtari911
41739ccd446eSAtari911**Always Visible**:
41749ccd446eSAtari911- Section shows even with 0 backups
41759ccd446eSAtari911- Button always accessible
41769ccd446eSAtari911- Clear call-to-action
41779ccd446eSAtari911
41789ccd446eSAtari911**Better Header**:
41799ccd446eSAtari911- Title and button on same row
41809ccd446eSAtari911- Clean, professional layout
41819ccd446eSAtari911- Space-efficient design
41829ccd446eSAtari911
41839ccd446eSAtari911### Technical Details
41849ccd446eSAtari911
41859ccd446eSAtari911**New Action**: `create_manual_backup`
41869ccd446eSAtari911
41879ccd446eSAtari911**New Function**: `createManualBackup()`
41889ccd446eSAtari911- Gets current version
41899ccd446eSAtari911- Creates timestamped filename with "manual" tag
41909ccd446eSAtari911- Uses same verification as auto-backups
41919ccd446eSAtari911- Shows detailed success/error messages
41929ccd446eSAtari911
41939ccd446eSAtari911**File Naming Convention**:
41949ccd446eSAtari911```
41959ccd446eSAtari911Automatic (on upload):
41969ccd446eSAtari911calendar.backup.v5.1.6.2026-02-09_12-30-45.zip
41979ccd446eSAtari911
41989ccd446eSAtari911Manual (button click):
41999ccd446eSAtari911calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
42009ccd446eSAtari911                       ^^^^^^^
42019ccd446eSAtari911                    Easy to identify!
42029ccd446eSAtari911```
42039ccd446eSAtari911
42049ccd446eSAtari911### Permissions Required
42059ccd446eSAtari911
42069ccd446eSAtari911- **Read access**: Plugin directory
42079ccd446eSAtari911- **Write access**: Parent plugins directory
42089ccd446eSAtari911
42099ccd446eSAtari911**Same as automatic backups** - no additional permissions needed!
42109ccd446eSAtari911
42119ccd446eSAtari911## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION
42129ccd446eSAtari911
42139ccd446eSAtari911### �� Enhanced: Backup Creation with Robust Verification
42149ccd446eSAtari911- **Added:** File count validation (must have 10+ files)
42159ccd446eSAtari911- **Added:** File size validation (must be 1KB+ minimum)
42169ccd446eSAtari911- **Added:** Return value from addDirectoryToZip (counts files added)
42179ccd446eSAtari911- **Added:** Detailed error messages showing file count
42189ccd446eSAtari911- **Added:** Automatic deletion of invalid/incomplete backups
42199ccd446eSAtari911- **Enhanced:** Exception handling with proper error propagation
42209ccd446eSAtari911- **Result:** Backups are now guaranteed to be complete or fail clearly!
42219ccd446eSAtari911
42229ccd446eSAtari911### What Changed
42239ccd446eSAtari911
42249ccd446eSAtari911**Before (v5.1.4)**:
42259ccd446eSAtari911```php
42269ccd446eSAtari911$this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
42279ccd446eSAtari911$zip->close();
42289ccd446eSAtari911// No verification - could create empty or partial backup
42299ccd446eSAtari911```
42309ccd446eSAtari911
42319ccd446eSAtari911**After (v5.1.5)**:
42329ccd446eSAtari911```php
42339ccd446eSAtari911$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
42349ccd446eSAtari911$zip->close();
42359ccd446eSAtari911
42369ccd446eSAtari911// Verify backup exists
42379ccd446eSAtari911if (!file_exists($backupPath)) {
42389ccd446eSAtari911    redirect('Backup file was not created');
42399ccd446eSAtari911}
42409ccd446eSAtari911
42419ccd446eSAtari911// Verify backup has content
42429ccd446eSAtari911$backupSize = filesize($backupPath);
42439ccd446eSAtari911if ($backupSize < 1000) {
42449ccd446eSAtari911    unlink($backupPath);
42459ccd446eSAtari911    redirect('Backup too small: ' . $backupSize . ' bytes');
42469ccd446eSAtari911}
42479ccd446eSAtari911
42489ccd446eSAtari911// Verify file count
42499ccd446eSAtari911if ($fileCount < 10) {
42509ccd446eSAtari911    unlink($backupPath);
42519ccd446eSAtari911    redirect('Only ' . $fileCount . ' files added (expected 30+)');
42529ccd446eSAtari911}
42539ccd446eSAtari911```
42549ccd446eSAtari911
42559ccd446eSAtari911### Backup Validation Checks
42569ccd446eSAtari911
42579ccd446eSAtari911**Three-Layer Verification**:
42589ccd446eSAtari911
42599ccd446eSAtari9111. **File Count Check**:
42609ccd446eSAtari911   - Minimum: 10 files required
42619ccd446eSAtari911   - Expected: 30+ files
42629ccd446eSAtari911   - Action: Delete backup if too few files
42639ccd446eSAtari911
42649ccd446eSAtari9112. **Size Check**:
42659ccd446eSAtari911   - Minimum: 1KB (1000 bytes)
42669ccd446eSAtari911   - Expected: 200-250KB
42679ccd446eSAtari911   - Action: Delete backup if too small
42689ccd446eSAtari911
42699ccd446eSAtari9113. **Existence Check**:
42709ccd446eSAtari911   - Verify file was actually created
42719ccd446eSAtari911   - Check ZIP archive is valid
42729ccd446eSAtari911   - Action: Error if file missing
42739ccd446eSAtari911
42749ccd446eSAtari911### Enhanced Error Reporting
42759ccd446eSAtari911
42769ccd446eSAtari911**Detailed Error Messages**:
42779ccd446eSAtari911```
42789ccd446eSAtari911❌ "Backup file was not created"
42799ccd446eSAtari911❌ "Backup too small (342 bytes). Only 3 files added."
42809ccd446eSAtari911❌ "Only 5 files added (expected 30+). Backup aborted."
42819ccd446eSAtari911❌ "Too many errors adding files: Failed to add X, Y, Z..."
42829ccd446eSAtari911❌ "Directory does not exist: /path/to/dir"
42839ccd446eSAtari911❌ "Directory is not readable: /path/to/dir"
42849ccd446eSAtari911```
42859ccd446eSAtari911
42869ccd446eSAtari911**Now you know exactly what went wrong!**
42879ccd446eSAtari911
42889ccd446eSAtari911### Improved addDirectoryToZip Function
42899ccd446eSAtari911
42909ccd446eSAtari911**Returns File Count**:
42919ccd446eSAtari911```php
42929ccd446eSAtari911private function addDirectoryToZip($zip, $dir, $zipPath = '') {
42939ccd446eSAtari911    $fileCount = 0;
42949ccd446eSAtari911    $errors = [];
42959ccd446eSAtari911
42969ccd446eSAtari911    // Validation
42979ccd446eSAtari911    if (!is_dir($dir)) throw new Exception("Directory does not exist");
42989ccd446eSAtari911    if (!is_readable($dir)) throw new Exception("Not readable");
42999ccd446eSAtari911
43009ccd446eSAtari911    // Add files
43019ccd446eSAtari911    foreach ($files as $file) {
43029ccd446eSAtari911        if ($zip->addFile($filePath, $relativePath)) {
43039ccd446eSAtari911            $fileCount++;
43049ccd446eSAtari911        } else {
43059ccd446eSAtari911            $errors[] = "Failed to add: " . $filename;
43069ccd446eSAtari911        }
43079ccd446eSAtari911    }
43089ccd446eSAtari911
43099ccd446eSAtari911    // Check error threshold
43109ccd446eSAtari911    if (count($errors) > 5) {
43119ccd446eSAtari911        throw new Exception("Too many errors");
43129ccd446eSAtari911    }
43139ccd446eSAtari911
43149ccd446eSAtari911    return $fileCount;  // Returns count for verification!
43159ccd446eSAtari911}
43169ccd446eSAtari911```
43179ccd446eSAtari911
43189ccd446eSAtari911### Safety Features
43199ccd446eSAtari911
43209ccd446eSAtari911**Invalid Backup Cleanup**:
43219ccd446eSAtari911- Failed backups are automatically deleted
43229ccd446eSAtari911- No partial/corrupt backups left behind
43239ccd446eSAtari911- Clean error state
43249ccd446eSAtari911
43259ccd446eSAtari911**Error Threshold**:
43269ccd446eSAtari911- Allow up to 5 minor file errors (logs warnings)
43279ccd446eSAtari911- More than 5 errors = complete failure
43289ccd446eSAtari911- Prevents partially corrupt backups
43299ccd446eSAtari911
43309ccd446eSAtari911**Directory Validation**:
43319ccd446eSAtari911- Check directory exists before processing
43329ccd446eSAtari911- Check directory is readable
43339ccd446eSAtari911- Fail fast with clear errors
43349ccd446eSAtari911
43359ccd446eSAtari911### Benefits
43369ccd446eSAtari911
43379ccd446eSAtari911**Guaranteed Complete Backups**:
43389ccd446eSAtari911- ✅ All files included or backup fails
43399ccd446eSAtari911- ✅ No silent failures
43409ccd446eSAtari911- ✅ Clear error messages
43419ccd446eSAtari911- ✅ Automatic cleanup
43429ccd446eSAtari911
43439ccd446eSAtari911**Better Debugging**:
43449ccd446eSAtari911- Know exactly how many files were added
43459ccd446eSAtari911- See specific errors for missing files
43469ccd446eSAtari911- Understand why backup failed
43479ccd446eSAtari911
43489ccd446eSAtari911**User Confidence**:
43499ccd446eSAtari911- Backup succeeds = complete backup
43509ccd446eSAtari911- Backup fails = clear error message
43519ccd446eSAtari911- No ambiguity
43529ccd446eSAtari911
43539ccd446eSAtari911### Example Scenarios
43549ccd446eSAtari911
43559ccd446eSAtari911**Scenario 1: Permission Issue**
43569ccd446eSAtari911```
43579ccd446eSAtari911User uploads new version
43589ccd446eSAtari911System starts backup
43599ccd446eSAtari911Error: "Directory is not readable: /lib/plugins/calendar/"
43609ccd446eSAtari911Backup fails before creating file
43619ccd446eSAtari911User sees clear error message
43629ccd446eSAtari911```
43639ccd446eSAtari911
43649ccd446eSAtari911**Scenario 2: Partial Backup**
43659ccd446eSAtari911```
43669ccd446eSAtari911User uploads new version
43679ccd446eSAtari911System creates backup
43689ccd446eSAtari911Only 5 files added (disk issue?)
43699ccd446eSAtari911Size: 450 bytes
43709ccd446eSAtari911Verification fails
43719ccd446eSAtari911Incomplete backup deleted
43729ccd446eSAtari911Error: "Only 5 files added (expected 30+)"
43739ccd446eSAtari911```
43749ccd446eSAtari911
43759ccd446eSAtari911**Scenario 3: Success**
43769ccd446eSAtari911```
43779ccd446eSAtari911User uploads new version
43789ccd446eSAtari911System creates backup
43799ccd446eSAtari91131 files added
43809ccd446eSAtari911Size: 240KB
43819ccd446eSAtari911All verifications pass ✅
43829ccd446eSAtari911Update proceeds
43839ccd446eSAtari911```
43849ccd446eSAtari911
43859ccd446eSAtari911### Testing Recommendations
43869ccd446eSAtari911
43879ccd446eSAtari911After installing v5.1.5:
43889ccd446eSAtari9111. Upload a new version with backup enabled
43899ccd446eSAtari9112. Check for success message
43909ccd446eSAtari9113. Verify backup file exists in /lib/plugins/
43919ccd446eSAtari9114. Check backup file size (should be ~240KB)
43929ccd446eSAtari9115. If backup fails, read error message carefully
43939ccd446eSAtari911
43949ccd446eSAtari911**Your backups are now bulletproof!** ��
43959ccd446eSAtari911
43969ccd446eSAtari911## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED
43979ccd446eSAtari911
43989ccd446eSAtari911### ✅ Verified: Backup System Working Correctly
43999ccd446eSAtari911- **Verified:** addDirectoryToZip function includes all files recursively
44009ccd446eSAtari911- **Verified:** Backups contain all 31+ files from calendar directory
44019ccd446eSAtari911- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed)
44029ccd446eSAtari911- **Info:** Backup sizes grow slightly with each version (more code = more features!)
44039ccd446eSAtari911- **Result:** Backup system is working perfectly!
44049ccd446eSAtari911
44059ccd446eSAtari911### Backup System Details
44069ccd446eSAtari911
44079ccd446eSAtari911**What Gets Backed Up**:
44089ccd446eSAtari911- All PHP files (syntax.php, admin.php, action.php, etc.)
44099ccd446eSAtari911- All JavaScript files (calendar-main.js, script.js)
44109ccd446eSAtari911- All documentation (CHANGELOG.md, README.md, all guides)
44119ccd446eSAtari911- All configuration (sync_config.php)
44129ccd446eSAtari911- All language files
44139ccd446eSAtari911- All assets and resources
44149ccd446eSAtari911- **Everything in the calendar/ directory!**
44159ccd446eSAtari911
44169ccd446eSAtari911**Backup Size Analysis**:
44179ccd446eSAtari911```
44189ccd446eSAtari911Version 5.0.4: 233KB (normal)
44199ccd446eSAtari911Version 5.0.5: 234KB (normal)
44209ccd446eSAtari911Version 5.0.6: 235KB (normal)
44219ccd446eSAtari911Version 5.0.7: 236KB (normal)
44229ccd446eSAtari911Version 5.0.8: 237KB (normal)
44239ccd446eSAtari911Version 5.0.9: 237KB (normal)
44249ccd446eSAtari911Version 5.1.0: 238KB (normal)
44259ccd446eSAtari911Version 5.1.1: 238KB (normal)
44269ccd446eSAtari911Version 5.1.2: 240KB (normal - added AJAX features)
44279ccd446eSAtari911Version 5.1.3: 240KB (normal)
44289ccd446eSAtari911```
44299ccd446eSAtari911
44309ccd446eSAtari911**Why Sizes Grow**:
44319ccd446eSAtari911- More features = more code
44329ccd446eSAtari911- Longer CHANGELOG
44339ccd446eSAtari911- Additional documentation
44349ccd446eSAtari911- New functionality
44359ccd446eSAtari911- **This is expected and normal!**
44369ccd446eSAtari911
44379ccd446eSAtari911**Compression Ratio**:
44389ccd446eSAtari911```
44399ccd446eSAtari911Uncompressed: ~1.0 MB (source files)
44409ccd446eSAtari911Compressed:   ~240 KB (ZIP archive)
44419ccd446eSAtari911Ratio:        ~24% (excellent compression!)
44429ccd446eSAtari911```
44439ccd446eSAtari911
44449ccd446eSAtari911### Backup File Contents
44459ccd446eSAtari911
44469ccd446eSAtari911**31 Files Included**:
44479ccd446eSAtari911```
44489ccd446eSAtari911admin.php              (216KB - main admin interface)
44499ccd446eSAtari911syntax.php             (173KB - calendar rendering)
44509ccd446eSAtari911calendar-main.js       (102KB - JavaScript functionality)
44519ccd446eSAtari911CHANGELOG.md           (268KB - complete version history)
44529ccd446eSAtari911style.css              (57KB - all styling)
44539ccd446eSAtari911action.php             (38KB - DokuWiki actions)
44549ccd446eSAtari911sync_outlook.php       (32KB - Outlook integration)
44559ccd446eSAtari911+ 24 other files (docs, configs, helpers)
44569ccd446eSAtari911```
44579ccd446eSAtari911
44589ccd446eSAtari911**All files successfully included!** ✅
44599ccd446eSAtari911
44609ccd446eSAtari911### How Backups Work
44619ccd446eSAtari911
44629ccd446eSAtari911**Creation Process**:
44639ccd446eSAtari9111. User uploads new plugin version
44649ccd446eSAtari9112. Checkbox "Create backup first" (checked by default)
44659ccd446eSAtari9113. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip`
44669ccd446eSAtari9114. Backup saved to: `/lib/plugins/` directory
44679ccd446eSAtari9115. Then proceeds with update
44689ccd446eSAtari911
44699ccd446eSAtari911**Backup Function**:
44709ccd446eSAtari911```php
44719ccd446eSAtari911private function addDirectoryToZip($zip, $dir, $zipPath = '') {
44729ccd446eSAtari911    $files = new RecursiveIteratorIterator(
44739ccd446eSAtari911        new RecursiveDirectoryIterator($dir),
44749ccd446eSAtari911        RecursiveIteratorIterator::LEAVES_ONLY
44759ccd446eSAtari911    );
44769ccd446eSAtari911    foreach ($files as $file) {
44779ccd446eSAtari911        if (!$file->isDir()) {
44789ccd446eSAtari911            $zip->addFile($filePath, $relativePath);
44799ccd446eSAtari911        }
44809ccd446eSAtari911    }
44819ccd446eSAtari911}
44829ccd446eSAtari911```
44839ccd446eSAtari911
44849ccd446eSAtari911**Recursive = Gets Everything!** ✅
44859ccd446eSAtari911
44869ccd446eSAtari911### Verification Results
44879ccd446eSAtari911
44889ccd446eSAtari911**Test Results**:
44899ccd446eSAtari911- ✅ All 31 files present in zip
44909ccd446eSAtari911- ✅ All subdirectories included (lang/en/)
44919ccd446eSAtari911- ✅ File sizes match originals
44929ccd446eSAtari911- ✅ Compression works properly
44939ccd446eSAtari911- ✅ No files missing
44949ccd446eSAtari911- ✅ Backup can be restored
44959ccd446eSAtari911
44969ccd446eSAtari911**File Count**:
44979ccd446eSAtari911```
44989ccd446eSAtari911Source directory: 31 files
44999ccd446eSAtari911Backup ZIP:       34 items (31 files + 3 directories)
45009ccd446eSAtari911Status:           COMPLETE ✅
45019ccd446eSAtari911```
45029ccd446eSAtari911
45039ccd446eSAtari911### Backup Best Practices
45049ccd446eSAtari911
45059ccd446eSAtari911**Always enabled by default** ✅
45069ccd446eSAtari911**Stored in accessible location** ✅
45079ccd446eSAtari911**Timestamped filenames** ✅
45089ccd446eSAtari911**Complete directory backup** ✅
45099ccd446eSAtari911**Easy to restore** ✅
45109ccd446eSAtari911
45119ccd446eSAtari911### Conclusion
45129ccd446eSAtari911
45139ccd446eSAtari911The backup system is working perfectly. The file sizes are appropriate and expected:
45149ccd446eSAtari911- Compressed size: ~240KB (good compression)
45159ccd446eSAtari911- Uncompressed size: ~1MB (all source files)
45169ccd446eSAtari911- All files included: YES ✅
45179ccd446eSAtari911- Growing size over versions: Normal (more features!)
45189ccd446eSAtari911
45199ccd446eSAtari911**Your backups are complete and reliable!** ��
45209ccd446eSAtari911
45219ccd446eSAtari911## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR
45229ccd446eSAtari911
45239ccd446eSAtari911### �� Fixed: JavaScript Syntax Error in AJAX Function
45249ccd446eSAtari911- **Fixed:** ParseError on line 1947 (deleteBackup function)
45259ccd446eSAtari911- **Fixed:** Escaped all single quotes in JavaScript strings
45269ccd446eSAtari911- **Result:** AJAX backup deletion now works correctly!
45279ccd446eSAtari911
45289ccd446eSAtari911### What Was Wrong
45299ccd446eSAtari911
45309ccd446eSAtari911JavaScript inside PHP echo needs escaped quotes:
45319ccd446eSAtari911
45329ccd446eSAtari911**Before (broken)**:
45339ccd446eSAtari911```javascript
45349ccd446eSAtari911formData.append('action', 'delete_backup');  // PHP interprets quotes
45359ccd446eSAtari911```
45369ccd446eSAtari911
45379ccd446eSAtari911**After (fixed)**:
45389ccd446eSAtari911```javascript
45399ccd446eSAtari911formData.append(\'action\', \'delete_backup\');  // Escaped for PHP
45409ccd446eSAtari911```
45419ccd446eSAtari911
45429ccd446eSAtari911### All Quotes Escaped
45439ccd446eSAtari911
45449ccd446eSAtari911Fixed in deleteBackup function:
45459ccd446eSAtari911- ✅ FormData.append() calls
45469ccd446eSAtari911- ✅ fetch() URL
45479ccd446eSAtari911- ✅ querySelector() calls
45489ccd446eSAtari911- ✅ createElement() call
45499ccd446eSAtari911- ✅ All string literals
45509ccd446eSAtari911- ✅ Error messages
45519ccd446eSAtari911
45529ccd446eSAtari911**JavaScript now works!** ✓
45539ccd446eSAtari911
45549ccd446eSAtari911## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT
45559ccd446eSAtari911
45569ccd446eSAtari911### �� Improved: Update Tab Further Refined
45579ccd446eSAtari911- **Moved:** Important Notes to very top (above upload)
45589ccd446eSAtari911- **Enhanced:** Delete backup now uses AJAX (no page refresh!)
45599ccd446eSAtari911- **Added:** Smooth fade-out animation when deleting backups
45609ccd446eSAtari911- **Added:** Success message after deletion
45619ccd446eSAtari911- **Auto-remove:** Backup section disappears if last backup deleted
45629ccd446eSAtari911- **Result:** Smoother, more polished experience!
45639ccd446eSAtari911
45649ccd446eSAtari911### New Layout Order
45659ccd446eSAtari911
45669ccd446eSAtari911**Final Order (v5.1.2)**:
45679ccd446eSAtari911```
45689ccd446eSAtari9111. ⚠️ Important Notes (warnings at top)
45699ccd446eSAtari9112. �� Upload New Version (with Clear Cache button)
45709ccd446eSAtari9113. �� Current Version (info)
45719ccd446eSAtari9114. �� Recent Changes (changelog)
45729ccd446eSAtari9115. �� Available Backups (if any)
45739ccd446eSAtari911```
45749ccd446eSAtari911
45759ccd446eSAtari911### AJAX Backup Deletion
45769ccd446eSAtari911
45779ccd446eSAtari911**Before (v5.1.1)**:
45789ccd446eSAtari911- Click Delete → Page refreshes → Scroll back down
45799ccd446eSAtari911- Lose position on page
45809ccd446eSAtari911- Page reload is jarring
45819ccd446eSAtari911
45829ccd446eSAtari911**After (v5.1.2)**:
45839ccd446eSAtari911- Click Delete → Confirm
45849ccd446eSAtari911- Row fades out smoothly
45859ccd446eSAtari911- Row disappears
45869ccd446eSAtari911- Success message shows at top
45879ccd446eSAtari911- Success message fades after 3 seconds
45889ccd446eSAtari911- If last backup: entire section fades away
45899ccd446eSAtari911- **No page refresh!** ✓
45909ccd446eSAtari911
45919ccd446eSAtari911### Visual Flow
45929ccd446eSAtari911
45939ccd446eSAtari911**Delete Animation**:
45949ccd446eSAtari911```
45959ccd446eSAtari9111. Click ��️ Delete
45969ccd446eSAtari9112. Confirm dialog
45979ccd446eSAtari9113. Row fades out (0.3s)
45989ccd446eSAtari9114. Row removed
45999ccd446eSAtari9115. Success message appears
46009ccd446eSAtari9116. Message fades after 3s
46019ccd446eSAtari911```
46029ccd446eSAtari911
46039ccd446eSAtari911**If Last Backup**:
46049ccd446eSAtari911```
46059ccd446eSAtari9111. Delete last backup
46069ccd446eSAtari9112. Row fades out
46079ccd446eSAtari9113. Entire "Available Backups" section fades
46089ccd446eSAtari9114. Section removed
46099ccd446eSAtari9115. Clean interface ✓
46109ccd446eSAtari911```
46119ccd446eSAtari911
46129ccd446eSAtari911### Success Message
46139ccd446eSAtari911
46149ccd446eSAtari911After deleting:
46159ccd446eSAtari911```
46169ccd446eSAtari911┌──────────────────────────────┐
46179ccd446eSAtari911│ ✓ Backup deleted: filename   │ ← Appears at top
46189ccd446eSAtari911└──────────────────────────────┘
46199ccd446eSAtari911   Fades after 3 seconds
46209ccd446eSAtari911```
46219ccd446eSAtari911
46229ccd446eSAtari911### Benefits
46239ccd446eSAtari911
46249ccd446eSAtari911**Important Notes First**:
46259ccd446eSAtari911- Warnings before actions ✓
46269ccd446eSAtari911- Read before uploading ✓
46279ccd446eSAtari911- Clear expectations ✓
46289ccd446eSAtari911
46299ccd446eSAtari911**AJAX Deletion**:
46309ccd446eSAtari911- No page refresh ✓
46319ccd446eSAtari911- Smooth animations ✓
46329ccd446eSAtari911- Stay in context ✓
46339ccd446eSAtari911- Professional feel ✓
46349ccd446eSAtari911
46359ccd446eSAtari911**Auto-Cleanup**:
46369ccd446eSAtari911- Empty list disappears ✓
46379ccd446eSAtari911- Clean interface ✓
46389ccd446eSAtari911- No clutter ✓
46399ccd446eSAtari911
46409ccd446eSAtari911### Technical Implementation
46419ccd446eSAtari911
46429ccd446eSAtari911**AJAX Request**:
46439ccd446eSAtari911```javascript
46449ccd446eSAtari911fetch('?do=admin&page=calendar&tab=update', {
46459ccd446eSAtari911    method: 'POST',
46469ccd446eSAtari911    body: formData
46479ccd446eSAtari911})
46489ccd446eSAtari911```
46499ccd446eSAtari911
46509ccd446eSAtari911**DOM Manipulation**:
46519ccd446eSAtari911- Fade out row
46529ccd446eSAtari911- Remove element
46539ccd446eSAtari911- Show success
46549ccd446eSAtari911- Remove section if empty
46559ccd446eSAtari911
46569ccd446eSAtari911**Smooth Transitions**:
46579ccd446eSAtari911- 300ms fade animations
46589ccd446eSAtari911- Clean visual feedback
46599ccd446eSAtari911- Professional polish
46609ccd446eSAtari911
46619ccd446eSAtari911## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB
46629ccd446eSAtari911
46639ccd446eSAtari911### �� Improved: Update Tab Layout Reorganized
46649ccd446eSAtari911- **Moved:** Upload section to the top of the page
46659ccd446eSAtari911- **Added:** Clear Cache button next to Upload & Install button
46669ccd446eSAtari911- **Changed:** "Current Version" section moved below upload
46679ccd446eSAtari911- **Result:** Better workflow - upload first, then see version info!
46689ccd446eSAtari911
46699ccd446eSAtari911### New Layout Order
46709ccd446eSAtari911
46719ccd446eSAtari911**Before (v5.1.0)**:
46729ccd446eSAtari911```
46739ccd446eSAtari9111. Clear Cache (standalone)
46749ccd446eSAtari9112. Current Version
46759ccd446eSAtari9113. Recent Changes
46769ccd446eSAtari9114. Upload New Version
46779ccd446eSAtari9115. Warning Box
46789ccd446eSAtari9116. Backups
46799ccd446eSAtari911```
46809ccd446eSAtari911
46819ccd446eSAtari911**After (v5.1.1)**:
46829ccd446eSAtari911```
46839ccd446eSAtari9111. Upload New Version (with Clear Cache button side-by-side)
46849ccd446eSAtari9112. Warning Box
46859ccd446eSAtari9113. Current Version
46869ccd446eSAtari9114. Recent Changes
46879ccd446eSAtari9115. Backups
46889ccd446eSAtari911```
46899ccd446eSAtari911
46909ccd446eSAtari911### Visual Result
46919ccd446eSAtari911
46929ccd446eSAtari911**Top of Update Tab**:
46939ccd446eSAtari911```
46949ccd446eSAtari911┌─────────────────────────────────┐
46959ccd446eSAtari911│ �� Upload New Version           │
46969ccd446eSAtari911│ ┌─────────────────────────────┐ │
46979ccd446eSAtari911│ │ [Choose File]               │ │
46989ccd446eSAtari911│ │ ☑ Create backup first       │ │
46999ccd446eSAtari911│ │ ┌──────────────┬──────────┐ │ │
47009ccd446eSAtari911│ │ │�� Upload &   │��️ Clear  │ │ │
47019ccd446eSAtari911│ │ │   Install    │   Cache  │ │ │
47029ccd446eSAtari911│ │ └──────────────┴──────────┘ │ │
47039ccd446eSAtari911│ └─────────────────────────────┘ │
47049ccd446eSAtari911│                                 │
47059ccd446eSAtari911│ ⚠️ Important Notes              │
47069ccd446eSAtari911│ • Will replace all files        │
47079ccd446eSAtari911│ • Config preserved              │
47089ccd446eSAtari911│                                 │
47099ccd446eSAtari911│ �� Current Version              │
47109ccd446eSAtari911│ Version: 5.1.1                  │
47119ccd446eSAtari911└─────────────────────────────────┘
47129ccd446eSAtari911```
47139ccd446eSAtari911
47149ccd446eSAtari911### Benefits
47159ccd446eSAtari911
47169ccd446eSAtari911**Better Workflow**:
47179ccd446eSAtari911- Primary action (upload) is first
47189ccd446eSAtari911- Clear cache conveniently next to install
47199ccd446eSAtari911- No scrolling to find upload button
47209ccd446eSAtari911- Logical top-to-bottom flow
47219ccd446eSAtari911
47229ccd446eSAtari911**Side-by-Side Buttons**:
47239ccd446eSAtari911- Upload & Install (green)
47249ccd446eSAtari911- Clear Cache (orange)
47259ccd446eSAtari911- Both common actions together
47269ccd446eSAtari911- Easy to access after upload
47279ccd446eSAtari911
47289ccd446eSAtari911**Improved UX**:
47299ccd446eSAtari911- Upload is most important → now at top
47309ccd446eSAtari911- Version info is reference → moved down
47319ccd446eSAtari911- Related actions grouped
47329ccd446eSAtari911- Cleaner organization
47339ccd446eSAtari911
47349ccd446eSAtari911### Button Layout
47359ccd446eSAtari911
47369ccd446eSAtari911```
47379ccd446eSAtari911┌──────────────────┬──────────────┐
47389ccd446eSAtari911│ �� Upload &      │ ��️ Clear     │
47399ccd446eSAtari911│    Install       │    Cache     │
47409ccd446eSAtari911│ (Green)          │ (Orange)     │
47419ccd446eSAtari911└──────────────────┴──────────────┘
47429ccd446eSAtari911```
47439ccd446eSAtari911
47449ccd446eSAtari911**Green = Primary Action**
47459ccd446eSAtari911**Orange = Secondary Action**
47469ccd446eSAtari911
47479ccd446eSAtari911Both easily accessible!
47489ccd446eSAtari911
47499ccd446eSAtari911## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND
47509ccd446eSAtari911
47519ccd446eSAtari911### �� Changed: Admin Section Backgrounds Now Use __background__
47529ccd446eSAtari911- **Changed:** All section boxes now use `__background__` instead of `__background_alt__`
47539ccd446eSAtari911- **Result:** Cleaner, more unified admin interface!
47549ccd446eSAtari911
47559ccd446eSAtari911### Background Usage Update
47569ccd446eSAtari911
47579ccd446eSAtari911**Before (v5.0.9)**:
47589ccd446eSAtari911```php
47599ccd446eSAtari911Section boxes: bg_alt (__background_alt__)
47609ccd446eSAtari911Content areas: bg (__background__)
47619ccd446eSAtari911```
47629ccd446eSAtari911
47639ccd446eSAtari911**After (v5.1.0)**:
47649ccd446eSAtari911```php
47659ccd446eSAtari911Section boxes: bg (__background__)
47669ccd446eSAtari911Content areas: bg (__background__)
47679ccd446eSAtari911```
47689ccd446eSAtari911
47699ccd446eSAtari911### Why This Change?
47709ccd446eSAtari911
47719ccd446eSAtari911**More unified appearance**:
47729ccd446eSAtari911- Sections and content use same background
47739ccd446eSAtari911- Creates cleaner, more cohesive look
47749ccd446eSAtari911- Borders provide visual separation
47759ccd446eSAtari911- Matches typical admin UI patterns
47769ccd446eSAtari911
47779ccd446eSAtari911**Template color hierarchy**:
47789ccd446eSAtari911```
47799ccd446eSAtari911__background_site__ → Outer page wrapper
47809ccd446eSAtari911__background__      → Content & sections (BOTH now use this)
47819ccd446eSAtari911__background_alt__  → Reserved for special panels/highlights
47829ccd446eSAtari911__background_neu__  → Special highlights
47839ccd446eSAtari911```
47849ccd446eSAtari911
47859ccd446eSAtari911### Visual Result
47869ccd446eSAtari911
47879ccd446eSAtari911**Light Template**:
47889ccd446eSAtari911```ini
47899ccd446eSAtari911__background__ = "#ffffff"
47909ccd446eSAtari911__background_alt__ = "#e8e8e8"
47919ccd446eSAtari911```
47929ccd446eSAtari911
47939ccd446eSAtari911**Before**:
47949ccd446eSAtari911```
47959ccd446eSAtari911Admin Page:
47969ccd446eSAtari911┌─────────────────────┐
47979ccd446eSAtari911│ ┌─────────────────┐ │
47989ccd446eSAtari911│ │ Section Box     │ │ ← Gray (#e8e8e8)
47999ccd446eSAtari911│ │ ┌─────────────┐ │ │
48009ccd446eSAtari911│ │ │ Content     │ │ │ ← White (#fff)
48019ccd446eSAtari911│ │ └─────────────┘ │ │
48029ccd446eSAtari911│ └─────────────────┘ │
48039ccd446eSAtari911└─────────────────────┘
48049ccd446eSAtari911Two-tone appearance
48059ccd446eSAtari911```
48069ccd446eSAtari911
48079ccd446eSAtari911**After**:
48089ccd446eSAtari911```
48099ccd446eSAtari911Admin Page:
48109ccd446eSAtari911┌─────────────────────┐
48119ccd446eSAtari911│ ┌─────────────────┐ │
48129ccd446eSAtari911│ │ Section Box     │ │ ← White (#fff)
48139ccd446eSAtari911│ │ ┌─────────────┐ │ │
48149ccd446eSAtari911│ │ │ Content     │ │ │ ← White (#fff)
48159ccd446eSAtari911│ │ └─────────────┘ │ │
48169ccd446eSAtari911│ └─────────────────┘ │
48179ccd446eSAtari911└─────────────────────┘
48189ccd446eSAtari911Unified, clean appearance
48199ccd446eSAtari911Borders provide separation
48209ccd446eSAtari911```
48219ccd446eSAtari911
48229ccd446eSAtari911**Dark Template**:
48239ccd446eSAtari911```ini
48249ccd446eSAtari911__background__ = "#2d2d2d"
48259ccd446eSAtari911__background_alt__ = "#3a3a3a"
48269ccd446eSAtari911```
48279ccd446eSAtari911
48289ccd446eSAtari911**After**:
48299ccd446eSAtari911```
48309ccd446eSAtari911Admin Page:
48319ccd446eSAtari911┌─────────────────────┐
48329ccd446eSAtari911│ ┌─────────────────┐ │
48339ccd446eSAtari911│ │ Section Box     │ │ ← Dark (#2d2d2d)
48349ccd446eSAtari911│ │ ┌─────────────┐ │ │
48359ccd446eSAtari911│ │ │ Content     │ │ │ ← Dark (#2d2d2d)
48369ccd446eSAtari911│ │ └─────────────┘ │ │
48379ccd446eSAtari911│ └─────────────────┘ │
48389ccd446eSAtari911└─────────────────────┘
48399ccd446eSAtari911Unified dark appearance
48409ccd446eSAtari911Accent borders provide definition
48419ccd446eSAtari911```
48429ccd446eSAtari911
48439ccd446eSAtari911### Benefits
48449ccd446eSAtari911
48459ccd446eSAtari911**Cleaner Look**:
48469ccd446eSAtari911- No more alternating gray/white
48479ccd446eSAtari911- More professional appearance
48489ccd446eSAtari911- Less visual noise
48499ccd446eSAtari911- Unified color scheme
48509ccd446eSAtari911
48519ccd446eSAtari911**Better Consistency**:
48529ccd446eSAtari911- Matches modern admin UI patterns
48539ccd446eSAtari911- Borders define sections, not colors
48549ccd446eSAtari911- Simpler, cleaner design
48559ccd446eSAtari911- Easier on the eyes
48569ccd446eSAtari911
48579ccd446eSAtari911**Template Friendly**:
48589ccd446eSAtari911- Works with any background color
48599ccd446eSAtari911- Light or dark templates
48609ccd446eSAtari911- Custom colors
48619ccd446eSAtari911- Always looks cohesive
48629ccd446eSAtari911
48639ccd446eSAtari911### All Sections Updated
48649ccd446eSAtari911
48659ccd446eSAtari911✅ Outlook Sync config sections
48669ccd446eSAtari911✅ Manage Events sections
48679ccd446eSAtari911✅ Update Plugin sections
48689ccd446eSAtari911✅ Themes tab sections
48699ccd446eSAtari911✅ Week start day section
48709ccd446eSAtari911✅ All form sections
48719ccd446eSAtari911
48729ccd446eSAtari911**Complete unified theming!** ��
48739ccd446eSAtari911
48749ccd446eSAtari911## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB
48759ccd446eSAtari911
48769ccd446eSAtari911### �� Fixed: Syntax Error in Theme Cards
48779ccd446eSAtari911- **Fixed:** ParseError on line 4461 (Purple theme card)
48789ccd446eSAtari911- **Fixed:** Malformed ternary expressions from sed replacement
48799ccd446eSAtari911- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki)
48809ccd446eSAtari911- **Result:** Admin pages work correctly!
48819ccd446eSAtari911
48829ccd446eSAtari911### What Was Wrong
48839ccd446eSAtari911
48849ccd446eSAtari911The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions:
48859ccd446eSAtari911
48869ccd446eSAtari911**Before (broken)**:
48879ccd446eSAtari911```php
48889ccd446eSAtari911? '#9b59b6' : ' . $colors['border'] . ')
48899ccd446eSAtari911// Extra quote and dot created syntax error
48909ccd446eSAtari911```
48919ccd446eSAtari911
48929ccd446eSAtari911**After (fixed)**:
48939ccd446eSAtari911```php
48949ccd446eSAtari911? '#9b59b6' : $colors['border'])
48959ccd446eSAtari911// Clean ternary expression
48969ccd446eSAtari911```
48979ccd446eSAtari911
48989ccd446eSAtari911### All Theme Cards Fixed
48999ccd446eSAtari911
49009ccd446eSAtari911- ✅ Purple Dream card
49019ccd446eSAtari911- ✅ Professional Blue card
49029ccd446eSAtari911- ✅ Pink Bling card
49039ccd446eSAtari911- ✅ Wiki Default card
49049ccd446eSAtari911
49059ccd446eSAtari911### Now Working
49069ccd446eSAtari911
49079ccd446eSAtari911**Theme selection page loads** ✓
49089ccd446eSAtari911**All cards display properly** ✓
49099ccd446eSAtari911**Template colors applied** ✓
49109ccd446eSAtari911**No syntax errors** ✓
49119ccd446eSAtari911
49129ccd446eSAtari911## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING
49139ccd446eSAtari911
49149ccd446eSAtari911### �� Fixed: Themes Tab Backgrounds & Correct Template Color Mapping
49159ccd446eSAtari911- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites)
49169ccd446eSAtari911- **Fixed:** Main background now uses `__background__` instead of `__background_site__`
49179ccd446eSAtari911- **Fixed:** Theme selection cards use template backgrounds
49189ccd446eSAtari911- **Fixed:** Week start options use template backgrounds
49199ccd446eSAtari911- **Result:** Perfect color mapping throughout admin!
49209ccd446eSAtari911
49219ccd446eSAtari911### Color Mapping Correction
49229ccd446eSAtari911
49239ccd446eSAtari911**Before (v5.0.7)**:
49249ccd446eSAtari911```php
49259ccd446eSAtari911bg: __background_site__  // Wrong - this is outer page bg
49269ccd446eSAtari911bg_alt: __background_alt__
49279ccd446eSAtari911```
49289ccd446eSAtari911
49299ccd446eSAtari911**After (v5.0.8)**:
49309ccd446eSAtari911```php
49319ccd446eSAtari911bg: __background__       // Correct - main content bg
49329ccd446eSAtari911bg_alt: __background_alt__
49339ccd446eSAtari911```
49349ccd446eSAtari911
49359ccd446eSAtari911### Why This Matters
49369ccd446eSAtari911
49379ccd446eSAtari911**Template color hierarchy**:
49389ccd446eSAtari911```
49399ccd446eSAtari911__background_site__ → Outer page/site background
49409ccd446eSAtari911__background__      → Main content area (CORRECT for admin)
49419ccd446eSAtari911__background_alt__  → Sections/panels
49429ccd446eSAtari911__background_neu__  → Highlights
49439ccd446eSAtari911```
49449ccd446eSAtari911
49459ccd446eSAtari911**Admin should use**:
49469ccd446eSAtari911- `__background__` for input fields, content areas
49479ccd446eSAtari911- `__background_alt__` for section boxes, panels
49489ccd446eSAtari911
49499ccd446eSAtari911### Themes Tab Fixed
49509ccd446eSAtari911
49519ccd446eSAtari911**Removed all hardcoded colors**:
49529ccd446eSAtari911```php
49539ccd446eSAtari911Before: '#ddd', '#fff', '#dee2e6'
49549ccd446eSAtari911After:  $colors['border'], $colors['bg'], $colors['border']
49559ccd446eSAtari911```
49569ccd446eSAtari911
49579ccd446eSAtari911**Now themed**:
49589ccd446eSAtari911- ✅ Week start section background
49599ccd446eSAtari911- ✅ Week start option backgrounds
49609ccd446eSAtari911- ✅ Theme card backgrounds
49619ccd446eSAtari911- ✅ Theme card borders
49629ccd446eSAtari911- ✅ All borders throughout
49639ccd446eSAtari911
49649ccd446eSAtari911### Visual Result
49659ccd446eSAtari911
49669ccd446eSAtari911**Light Template**:
49679ccd446eSAtari911```ini
49689ccd446eSAtari911__background__ = "#ffffff"
49699ccd446eSAtari911__background_alt__ = "#e8e8e8"
49709ccd446eSAtari911```
49719ccd446eSAtari911
49729ccd446eSAtari911**Admin Before (v5.0.7)**:
49739ccd446eSAtari911```
49749ccd446eSAtari911Input fields: #f5f5f5 (site bg - wrong)
49759ccd446eSAtari911Sections: #e8e8e8 (alt bg - correct)
49769ccd446eSAtari911```
49779ccd446eSAtari911
49789ccd446eSAtari911**Admin After (v5.0.8)**:
49799ccd446eSAtari911```
49809ccd446eSAtari911Input fields: #ffffff (content bg - correct!)
49819ccd446eSAtari911Sections: #e8e8e8 (alt bg - correct!)
49829ccd446eSAtari911```
49839ccd446eSAtari911
49849ccd446eSAtari911**Dark Template**:
49859ccd446eSAtari911```ini
49869ccd446eSAtari911__background__ = "#2d2d2d"
49879ccd446eSAtari911__background_alt__ = "#3a3a3a"
49889ccd446eSAtari911```
49899ccd446eSAtari911
49909ccd446eSAtari911**Admin After (v5.0.8)**:
49919ccd446eSAtari911```
49929ccd446eSAtari911Input fields: #2d2d2d (content bg - perfect!)
49939ccd446eSAtari911Sections: #3a3a3a (alt bg - perfect!)
49949ccd446eSAtari911```
49959ccd446eSAtari911
49969ccd446eSAtari911### Complete Themes Tab
49979ccd446eSAtari911
49989ccd446eSAtari911**Week Start Options**:
49999ccd446eSAtari911```
50009ccd446eSAtari911┌─────────────────────────┐
50019ccd446eSAtari911│ �� Week Start Day       │ ← bg_alt
50029ccd446eSAtari911│ ┌─────────┬───────────┐ │
50039ccd446eSAtari911│ │ Monday  │ Sunday    │ │ ← bg (when not selected)
50049ccd446eSAtari911│ └─────────┴───────────┘ │
50059ccd446eSAtari911└─────────────────────────┘
50069ccd446eSAtari911```
50079ccd446eSAtari911
50089ccd446eSAtari911**Theme Cards**:
50099ccd446eSAtari911```
50109ccd446eSAtari911┌─────────────────────────┐
50119ccd446eSAtari911│ �� Matrix Edition       │ ← bg (when not selected)
50129ccd446eSAtari911│ Classic green theme     │   border (when not selected)
50139ccd446eSAtari911└─────────────────────────┘
50149ccd446eSAtari911
50159ccd446eSAtari911┌═════════════════════════┐
50169ccd446eSAtari911│ �� Purple Dream         │ ← rgba green tint (when selected)
50179ccd446eSAtari911│ Elegant purple theme    │   #00cc07 border (when selected)
50189ccd446eSAtari911└═════════════════════════┘
50199ccd446eSAtari911```
50209ccd446eSAtari911
50219ccd446eSAtari911### Perfect Integration
50229ccd446eSAtari911
50239ccd446eSAtari911**All admin pages now**:
50249ccd446eSAtari911- Content areas: `__background__` ✓
50259ccd446eSAtari911- Section boxes: `__background_alt__` ✓
50269ccd446eSAtari911- Borders: `__border__` ✓
50279ccd446eSAtari911- Text: `__text__` ✓
50289ccd446eSAtari911
50299ccd446eSAtari911**Matches wiki perfectly**:
50309ccd446eSAtari911- Same white content areas
50319ccd446eSAtari911- Same gray section boxes
50329ccd446eSAtari911- Same border colors
50339ccd446eSAtari911- Same text colors
50349ccd446eSAtari911
50359ccd446eSAtari911### No More Issues
50369ccd446eSAtari911
50379ccd446eSAtari911**Fixed**:
50389ccd446eSAtari911- ❌ Site background on content areas → ✅ Content background
50399ccd446eSAtari911- ❌ Hardcoded white on themes tab → ✅ Template background
50409ccd446eSAtari911- ❌ Hardcoded borders (#ddd) → ✅ Template borders
50419ccd446eSAtari911
50429ccd446eSAtari911**Result**:
50439ccd446eSAtari911- Perfect color hierarchy ✓
50449ccd446eSAtari911- Correct background levels ✓
50459ccd446eSAtari911- Complete template integration ✓
50469ccd446eSAtari911
50479ccd446eSAtari911## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING
50489ccd446eSAtari911
50499ccd446eSAtari911### �� Fixed: All Admin Backgrounds Use Template Colors
50509ccd446eSAtari911- **Fixed:** All section backgrounds use `__background_alt__`
50519ccd446eSAtari911- **Fixed:** All content backgrounds use `__background__`
50529ccd446eSAtari911- **Fixed:** All borders use `__border__`
50539ccd446eSAtari911- **Fixed:** All text uses `__text__`
50549ccd446eSAtari911- **Result:** Complete admin template integration!
50559ccd446eSAtari911
50569ccd446eSAtari911### All Replacements
50579ccd446eSAtari911
50589ccd446eSAtari911**Backgrounds**:
50599ccd446eSAtari911```php
50609ccd446eSAtari911Before: background: #f9f9f9
50619ccd446eSAtari911After:  background: ' . $colors['bg_alt'] . '
50629ccd446eSAtari911
50639ccd446eSAtari911Before: background: #fff / background: white
50649ccd446eSAtari911After:  background: ' . $colors['bg'] . '
50659ccd446eSAtari911```
50669ccd446eSAtari911
50679ccd446eSAtari911**Borders**:
50689ccd446eSAtari911```php
50699ccd446eSAtari911Before: border: 1px solid #ddd
50709ccd446eSAtari911Before: border: 1px solid #e0e0e0
50719ccd446eSAtari911Before: border: 1px solid #eee
50729ccd446eSAtari911After:  border: 1px solid ' . $colors['border'] . '
50739ccd446eSAtari911```
50749ccd446eSAtari911
50759ccd446eSAtari911**Text**:
50769ccd446eSAtari911```php
50779ccd446eSAtari911Before: color: #333
50789ccd446eSAtari911Before: color: #666
50799ccd446eSAtari911After:  color: ' . $colors['text'] . '
50809ccd446eSAtari911```
50819ccd446eSAtari911
50829ccd446eSAtari911### Complete Admin Coverage
50839ccd446eSAtari911
50849ccd446eSAtari911**All tabs now themed**:
50859ccd446eSAtari911- ✅ Manage Events tab
50869ccd446eSAtari911- ✅ Update Plugin tab
50879ccd446eSAtari911- ✅ Outlook Sync tab
50889ccd446eSAtari911- ✅ Themes tab
50899ccd446eSAtari911- ✅ Tab navigation
50909ccd446eSAtari911- ✅ All sections
50919ccd446eSAtari911- ✅ All inputs
50929ccd446eSAtari911- ✅ All borders
50939ccd446eSAtari911- ✅ All text
50949ccd446eSAtari911
50959ccd446eSAtari911### Visual Result
50969ccd446eSAtari911
50979ccd446eSAtari911**Light Template**:
50989ccd446eSAtari911```
50999ccd446eSAtari911Admin Page:
51009ccd446eSAtari911┌──────────────────────────┐
51019ccd446eSAtari911│ Tab Navigation           │ ← Template borders
51029ccd446eSAtari911├──────────────────────────┤
51039ccd446eSAtari911│ Section Headers          │ ← bg_alt (light gray)
51049ccd446eSAtari911│ ┌──────────────────────┐ │
51059ccd446eSAtari911│ │ Form Inputs          │ │ ← bg (white)
51069ccd446eSAtari911│ │ Content Areas        │ │
51079ccd446eSAtari911│ └──────────────────────┘ │
51089ccd446eSAtari911└──────────────────────────┘
51099ccd446eSAtari911All template colors! ✓
51109ccd446eSAtari911```
51119ccd446eSAtari911
51129ccd446eSAtari911**Dark Template**:
51139ccd446eSAtari911```
51149ccd446eSAtari911Admin Page:
51159ccd446eSAtari911┌──────────────────────────┐
51169ccd446eSAtari911│ Tab Navigation           │ ← Template borders
51179ccd446eSAtari911├──────────────────────────┤
51189ccd446eSAtari911│ Section Headers          │ ← bg_alt (dark gray)
51199ccd446eSAtari911│ ┌──────────────────────┐ │
51209ccd446eSAtari911│ │ Form Inputs          │ │ ← bg (darker)
51219ccd446eSAtari911│ │ Content Areas        │ │
51229ccd446eSAtari911│ └──────────────────────┘ │
51239ccd446eSAtari911└──────────────────────────┘
51249ccd446eSAtari911All template colors! ✓
51259ccd446eSAtari911```
51269ccd446eSAtari911
51279ccd446eSAtari911### Template Color Mapping
51289ccd446eSAtari911
51299ccd446eSAtari911**Used throughout admin**:
51309ccd446eSAtari911```
51319ccd446eSAtari911__background_site__ → $colors['bg']       (main backgrounds)
51329ccd446eSAtari911__background_alt__  → $colors['bg_alt']   (section backgrounds)
51339ccd446eSAtari911__text__            → $colors['text']     (all text)
51349ccd446eSAtari911__border__          → $colors['border']   (all borders)
51359ccd446eSAtari911__link__            → $colors['link']     (links - future)
51369ccd446eSAtari911```
51379ccd446eSAtari911
51389ccd446eSAtari911### Examples by Section
51399ccd446eSAtari911
51409ccd446eSAtari911**Manage Events**:
51419ccd446eSAtari911- Event list backgrounds: `bg_alt`
51429ccd446eSAtari911- Event item backgrounds: `bg`
51439ccd446eSAtari911- Borders: `border`
51449ccd446eSAtari911- Text: `text`
51459ccd446eSAtari911
51469ccd446eSAtari911**Update Plugin**:
51479ccd446eSAtari911- Section backgrounds: `bg_alt`
51489ccd446eSAtari911- Content areas: `bg`
51499ccd446eSAtari911- Borders: `border`
51509ccd446eSAtari911- Text: `text`
51519ccd446eSAtari911
51529ccd446eSAtari911**Outlook Sync**:
51539ccd446eSAtari911- Config sections: `bg_alt`
51549ccd446eSAtari911- Input fields: `bg`
51559ccd446eSAtari911- Borders: `border`
51569ccd446eSAtari911- Labels: `text`
51579ccd446eSAtari911
51589ccd446eSAtari911**Themes Tab**:
51599ccd446eSAtari911- Theme cards: `bg_alt`
51609ccd446eSAtari911- Preview areas: `bg`
51619ccd446eSAtari911- Borders: `border`
51629ccd446eSAtari911- Descriptions: `text`
51639ccd446eSAtari911
51649ccd446eSAtari911### Benefits
51659ccd446eSAtari911
51669ccd446eSAtari911**Seamless Integration**:
51679ccd446eSAtari911- Matches wiki admin area perfectly
51689ccd446eSAtari911- Same colors throughout wiki
51699ccd446eSAtari911- Professional appearance
51709ccd446eSAtari911- Consistent experience
51719ccd446eSAtari911
51729ccd446eSAtari911**Automatic Adaptation**:
51739ccd446eSAtari911- Light templates: Light admin
51749ccd446eSAtari911- Dark templates: Dark admin
51759ccd446eSAtari911- Custom templates: Uses custom colors
51769ccd446eSAtari911
51779ccd446eSAtari911**No White Boxes**:
51789ccd446eSAtari911- Every background themed
51799ccd446eSAtari911- Every border themed
51809ccd446eSAtari911- Every text themed
51819ccd446eSAtari911- Complete consistency
51829ccd446eSAtari911
51839ccd446eSAtari911### PERFECT HARMONY
51849ccd446eSAtari911
51859ccd446eSAtari911**Frontend (Calendar)**:
51869ccd446eSAtari911- Wiki theme uses style.ini51879ccd446eSAtari911- Perfect template match ✓
51889ccd446eSAtari911
51899ccd446eSAtari911**Backend (Admin)**:
51909ccd446eSAtari911- Reads same style.ini51919ccd446eSAtari911- Perfect template match ✓
51929ccd446eSAtari911
51939ccd446eSAtari911**Complete Unity**:
51949ccd446eSAtari911- Same colors everywhere ✓
51959ccd446eSAtari911- Seamless experience ✓
51969ccd446eSAtari911- Professional polish ✓
51979ccd446eSAtari911
51989ccd446eSAtari911## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS
51999ccd446eSAtari911
52009ccd446eSAtari911### �� Enhanced: Month/Year Header & Admin Pages Use Template Colors
52019ccd446eSAtari911- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme
52029ccd446eSAtari911- **Added:** Admin pages read template's style.ini file
52039ccd446eSAtari911- **Added:** `getTemplateColors()` function in admin class
52049ccd446eSAtari911- **Fixed:** Tab navigation uses template text and border colors
52059ccd446eSAtari911- **Result:** Complete template integration everywhere!
52069ccd446eSAtari911
52079ccd446eSAtari911### Month/Year Header
52089ccd446eSAtari911
52099ccd446eSAtari911**Before**:
52109ccd446eSAtari911```php
52119ccd446eSAtari911color: __text__  // Same as primary text
52129ccd446eSAtari911```
52139ccd446eSAtari911
52149ccd446eSAtari911**After (Wiki Theme)**:
52159ccd446eSAtari911```php
52169ccd446eSAtari911color: __text_neu__  // Dimmed text (subtle)
52179ccd446eSAtari911```
52189ccd446eSAtari911
52199ccd446eSAtari911### Admin Pages Enhancement
52209ccd446eSAtari911
52219ccd446eSAtari911**New `getTemplateColors()` function**:
52229ccd446eSAtari911- Reads template's style.ini file
52239ccd446eSAtari911- Extracts color replacements
52249ccd446eSAtari911- Provides colors to all admin tabs
52259ccd446eSAtari911- Falls back to sensible defaults
52269ccd446eSAtari911
52279ccd446eSAtari911**Colors used**:
52289ccd446eSAtari911```php
52299ccd446eSAtari911bg: __background_site__
52309ccd446eSAtari911bg_alt: __background_alt__
52319ccd446eSAtari911text: __text__
52329ccd446eSAtari911border: __border__
52339ccd446eSAtari911link: __link__
52349ccd446eSAtari911```
52359ccd446eSAtari911
52369ccd446eSAtari911**Applied to**:
52379ccd446eSAtari911- Tab navigation borders
52389ccd446eSAtari911- Tab text colors
52399ccd446eSAtari911- All admin sections
52409ccd446eSAtari911- Ready for future enhancements
52419ccd446eSAtari911
52429ccd446eSAtari911### Visual Result
52439ccd446eSAtari911
52449ccd446eSAtari911**Calendar Header**:
52459ccd446eSAtari911```
52469ccd446eSAtari911┌────────────────────┐
52479ccd446eSAtari911│ ‹ February 2026 › │ ← __text_neu__ (dimmed)
52489ccd446eSAtari911└────────────────────┘
52499ccd446eSAtari911Subtle and elegant ✓
52509ccd446eSAtari911```
52519ccd446eSAtari911
52529ccd446eSAtari911**Admin Navigation**:
52539ccd446eSAtari911```
52549ccd446eSAtari911�� Manage Events | �� Update | ⚙️ Config | �� Themes
52559ccd446eSAtari911─────────────────────────────────────────────────
52569ccd446eSAtari911Active tab: Green (#00cc07)
52579ccd446eSAtari911Inactive tabs: Template text color
52589ccd446eSAtari911Border: Template border color
52599ccd446eSAtari911```
52609ccd446eSAtari911
52619ccd446eSAtari911### Template Integration
52629ccd446eSAtari911
52639ccd446eSAtari911**Light Template**:
52649ccd446eSAtari911```ini
52659ccd446eSAtari911__text_neu__ = "#666666"
52669ccd446eSAtari911__border__ = "#cccccc"
52679ccd446eSAtari911```
52689ccd446eSAtari911**Result**:
52699ccd446eSAtari911- Month/Year: Medium gray (subtle)
52709ccd446eSAtari911- Admin borders: Light gray
52719ccd446eSAtari911- Tab text: Dark gray
52729ccd446eSAtari911
52739ccd446eSAtari911**Dark Template**:
52749ccd446eSAtari911```ini
52759ccd446eSAtari911__text_neu__ = "#999999"
52769ccd446eSAtari911__border__ = "#555555"
52779ccd446eSAtari911```
52789ccd446eSAtari911**Result**:
52799ccd446eSAtari911- Month/Year: Light gray (subtle)
52809ccd446eSAtari911- Admin borders: Medium gray
52819ccd446eSAtari911- Tab text: Bright gray
52829ccd446eSAtari911
52839ccd446eSAtari911### Benefits
52849ccd446eSAtari911
52859ccd446eSAtari911**Calendar Frontend**:
52869ccd446eSAtari911- Month/Year header more subtle
52879ccd446eSAtari911- Better visual hierarchy
52889ccd446eSAtari911- Less prominent, more elegant
52899ccd446eSAtari911
52909ccd446eSAtari911**Admin Backend**:
52919ccd446eSAtari911- Uses template colors
52929ccd446eSAtari911- Matches wiki admin area
52939ccd446eSAtari911- Consistent experience
52949ccd446eSAtari911- Professional appearance
52959ccd446eSAtari911
52969ccd446eSAtari911### Future-Ready
52979ccd446eSAtari911
52989ccd446eSAtari911The `getTemplateColors()` function is now available for:
52999ccd446eSAtari911- ✅ Tab navigation (implemented)
53009ccd446eSAtari911- �� Section backgrounds (ready)
53019ccd446eSAtari911- �� Button colors (ready)
53029ccd446eSAtari911- �� Input fields (ready)
53039ccd446eSAtari911- �� Success/error messages (ready)
53049ccd446eSAtari911
53059ccd446eSAtari911**Foundation laid for complete admin theming!** ��
53069ccd446eSAtari911
53079ccd446eSAtari911## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS
53089ccd446eSAtari911
53099ccd446eSAtari911### �� Fixed: Add Event Bar & Section Headers Use Template Colors
53109ccd446eSAtari911- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme
53119ccd446eSAtari911- **Fixed:** "Today" header uses `__text_neu__`
53129ccd446eSAtari911- **Fixed:** "Tomorrow" header uses `__text__`
53139ccd446eSAtari911- **Fixed:** "Important Events" header uses `__border__`
53149ccd446eSAtari911- **Result:** Perfect template color integration!
53159ccd446eSAtari911
53169ccd446eSAtari911### All Changes
53179ccd446eSAtari911
53189ccd446eSAtari911**Add Event Bar (Wiki Theme)**:
53199ccd446eSAtari911
53209ccd446eSAtari911**Before**:
53219ccd446eSAtari911```php
53229ccd446eSAtari911background: #3498db  // Generic blue
53239ccd446eSAtari911```
53249ccd446eSAtari911
53259ccd446eSAtari911**After**:
53269ccd446eSAtari911```php
53279ccd446eSAtari911background: __background_alt__  // Template alternate bg
53289ccd446eSAtari911text: __text__                  // Template text color
53299ccd446eSAtari911hover: __background_neu__       // Template neutral bg
53309ccd446eSAtari911```
53319ccd446eSAtari911
53329ccd446eSAtari911**Section Headers (Wiki Theme)**:
53339ccd446eSAtari911
53349ccd446eSAtari911**Before**:
53359ccd446eSAtari911```php
53369ccd446eSAtari911Today: #ff9800           // Orange
53379ccd446eSAtari911Tomorrow: #4caf50        // Green
53389ccd446eSAtari911Important Events: #9b59b6 // Purple
53399ccd446eSAtari911```
53409ccd446eSAtari911
53419ccd446eSAtari911**After**:
53429ccd446eSAtari911```php
53439ccd446eSAtari911Today: __text_neu__      // Template dimmed text
53449ccd446eSAtari911Tomorrow: __text__       // Template primary text
53459ccd446eSAtari911Important Events: __border__ // Template border color
53469ccd446eSAtari911```
53479ccd446eSAtari911
53489ccd446eSAtari911### Visual Result
53499ccd446eSAtari911
53509ccd446eSAtari911**Wiki Default Theme**:
53519ccd446eSAtari911```
53529ccd446eSAtari911Add Event Bar:
53539ccd446eSAtari911┌────────────────┐
53549ccd446eSAtari911│  + ADD EVENT   │ ← Template alt background
53559ccd446eSAtari911└────────────────┘
53569ccd446eSAtari911
53579ccd446eSAtari911Sections:
53589ccd446eSAtari911━━━━━━━━━━━━━━━━
53599ccd446eSAtari911Today              ← Dimmed text color (__text_neu__)
53609ccd446eSAtari911• Team Meeting
53619ccd446eSAtari911
53629ccd446eSAtari911Tomorrow           ← Primary text color (__text__)
53639ccd446eSAtari911• Code Review
53649ccd446eSAtari911
53659ccd446eSAtari911Important Events   ← Border color (__border__)
53669ccd446eSAtari911• Project Deadline
53679ccd446eSAtari911```
53689ccd446eSAtari911
53699ccd446eSAtari911### Example with DokuWiki Default Template
53709ccd446eSAtari911
53719ccd446eSAtari911**Template colors**:
53729ccd446eSAtari911```ini
53739ccd446eSAtari911__background_alt__ = "#e8e8e8"
53749ccd446eSAtari911__text__ = "#333333"
53759ccd446eSAtari911__text_neu__ = "#666666"
53769ccd446eSAtari911__border__ = "#cccccc"
53779ccd446eSAtari911```
53789ccd446eSAtari911
53799ccd446eSAtari911**Calendar result**:
53809ccd446eSAtari911```
53819ccd446eSAtari911Add Event Bar: Light gray (#e8e8e8)
53829ccd446eSAtari911Today header: Medium gray (#666666)
53839ccd446eSAtari911Tomorrow header: Dark gray (#333333)
53849ccd446eSAtari911Important Events header: Border gray (#cccccc)
53859ccd446eSAtari911```
53869ccd446eSAtari911
53879ccd446eSAtari911### Example with Dark Template
53889ccd446eSAtari911
53899ccd446eSAtari911**Template colors**:
53909ccd446eSAtari911```ini
53919ccd446eSAtari911__background_alt__ = "#2d2d2d"
53929ccd446eSAtari911__text__ = "#e0e0e0"
53939ccd446eSAtari911__text_neu__ = "#999999"
53949ccd446eSAtari911__border__ = "#555555"
53959ccd446eSAtari911```
53969ccd446eSAtari911
53979ccd446eSAtari911**Calendar result**:
53989ccd446eSAtari911```
53999ccd446eSAtari911Add Event Bar: Dark gray (#2d2d2d)
54009ccd446eSAtari911Today header: Light gray (#999999)
54019ccd446eSAtari911Tomorrow header: Bright gray (#e0e0e0)
54029ccd446eSAtari911Important Events header: Medium gray (#555555)
54039ccd446eSAtari911```
54049ccd446eSAtari911
54059ccd446eSAtari911### Perfect Harmony
54069ccd446eSAtari911
54079ccd446eSAtari911All sidebar elements now use template colors:
54089ccd446eSAtari911- ✅ Add Event bar background
54099ccd446eSAtari911- ✅ Add Event bar text
54109ccd446eSAtari911- ✅ Today section header
54119ccd446eSAtari911- ✅ Tomorrow section header
54129ccd446eSAtari911- ✅ Important Events header
54139ccd446eSAtari911- ✅ Calendar cells
54149ccd446eSAtari911- ✅ Grid backgrounds
54159ccd446eSAtari911- ✅ All borders
54169ccd446eSAtari911
54179ccd446eSAtari911**Complete template integration!** ��
54189ccd446eSAtari911
54199ccd446eSAtari911## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS
54209ccd446eSAtari911
54219ccd446eSAtari911### �� Fixed: Calendar Cells Use Correct Template Color
54229ccd446eSAtari911- **Fixed:** Calendar cells now use `__background__` from template
54239ccd446eSAtari911- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__`
54249ccd446eSAtari911- **Result:** Calendar cells match main content area background!
54259ccd446eSAtari911
54269ccd446eSAtari911### Color Mapping Update
54279ccd446eSAtari911
54289ccd446eSAtari911**Before (v5.0.3)**:
54299ccd446eSAtari911```php
54309ccd446eSAtari911cell_bg: __background_neu__  // Wrong - this is for neutral/alternate
54319ccd446eSAtari911```
54329ccd446eSAtari911
54339ccd446eSAtari911**After (v5.0.4)**:
54349ccd446eSAtari911```php
54359ccd446eSAtari911cell_bg: __background__      // Correct - main content background
54369ccd446eSAtari911```
54379ccd446eSAtari911
54389ccd446eSAtari911### Template Color Usage
54399ccd446eSAtari911
54409ccd446eSAtari911**Wiki Default theme now uses**:
54419ccd446eSAtari911```
54429ccd446eSAtari911__background_site__ → Overall page background
54439ccd446eSAtari911__background__      → Calendar cells (main content bg)
54449ccd446eSAtari911__background_alt__  → Grid background, headers
54459ccd446eSAtari911__background_neu__  → Today cell highlight
54469ccd446eSAtari911__text__            → Primary text
54479ccd446eSAtari911__text_neu__        → Dimmed text
54489ccd446eSAtari911__link__            → Links, bright text
54499ccd446eSAtari911__border__          → All borders
54509ccd446eSAtari911```
54519ccd446eSAtari911
54529ccd446eSAtari911### Visual Result
54539ccd446eSAtari911
54549ccd446eSAtari911**Before**:
54559ccd446eSAtari911```
54569ccd446eSAtari911Calendar with template colors:
54579ccd446eSAtari911┌─────┬─────┬─────┐
54589ccd446eSAtari911│ Mon │ Tue │ Wed │
54599ccd446eSAtari911├─────┼─────┼─────┤
54609ccd446eSAtari911│  8  │  9  │ 10  │ ← Neutral gray (wrong)
54619ccd446eSAtari911└─────┴─────┴─────┘
54629ccd446eSAtari911```
54639ccd446eSAtari911
54649ccd446eSAtari911**After**:
54659ccd446eSAtari911```
54669ccd446eSAtari911Calendar with template colors:
54679ccd446eSAtari911┌─────┬─────┬─────┐
54689ccd446eSAtari911│ Mon │ Tue │ Wed │
54699ccd446eSAtari911├─────┼─────┼─────┤
54709ccd446eSAtari911│  8  │  9  │ 10  │ ← White/content bg (correct!)
54719ccd446eSAtari911└─────┴─────┴─────┘
54729ccd446eSAtari911```
54739ccd446eSAtari911
54749ccd446eSAtari911### Example Template Colors
54759ccd446eSAtari911
54769ccd446eSAtari911**DokuWiki Default**:
54779ccd446eSAtari911```ini
54789ccd446eSAtari911__background__ = "#ffffff"
54799ccd446eSAtari911```
54809ccd446eSAtari911**Result**: White calendar cells ✓
54819ccd446eSAtari911
54829ccd446eSAtari911**Dark Template**:
54839ccd446eSAtari911```ini
54849ccd446eSAtari911__background__ = "#2d2d2d"
54859ccd446eSAtari911```
54869ccd446eSAtari911**Result**: Dark calendar cells ✓
54879ccd446eSAtari911
54889ccd446eSAtari911**Custom Template**:
54899ccd446eSAtari911```ini
54909ccd446eSAtari911__background__ = "#f9f9f9"
54919ccd446eSAtari911```
54929ccd446eSAtari911**Result**: Custom color cells ✓
54939ccd446eSAtari911
54949ccd446eSAtari911### Perfect Matching
54959ccd446eSAtari911
54969ccd446eSAtari911Calendar cells now match:
54979ccd446eSAtari911- ✅ Main content area background
54989ccd446eSAtari911- ✅ Article/page background
54999ccd446eSAtari911- ✅ Content box background
55009ccd446eSAtari911- ✅ Same as wiki text background
55019ccd446eSAtari911
55029ccd446eSAtari911**Seamless integration!** ��
55039ccd446eSAtari911
55049ccd446eSAtari911## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI
55059ccd446eSAtari911
55069ccd446eSAtari911### �� Enhanced: Wiki Default Theme Reads Template Colors
55079ccd446eSAtari911- **Added:** Function to read colors from DokuWiki template's style.ini file
55089ccd446eSAtari911- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
55099ccd446eSAtari911- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
55109ccd446eSAtari911- **Uses:** Actual template colors instead of CSS variables
55119ccd446eSAtari911- **Result:** Perfect color matching with any DokuWiki template!
55129ccd446eSAtari911
55139ccd446eSAtari911### How It Works
55149ccd446eSAtari911
55159ccd446eSAtari911**New Function: `getWikiTemplateColors()`**
55169ccd446eSAtari911
55179ccd446eSAtari9111. **Detects** current DokuWiki template name
55189ccd446eSAtari9112. **Reads** the template's `style.ini` file
55199ccd446eSAtari9113. **Parses** color replacements section
55209ccd446eSAtari9114. **Maps** template colors to calendar theme
55219ccd446eSAtari9115. **Falls back** to CSS variables if file not found
55229ccd446eSAtari911
55239ccd446eSAtari911### Colors Read from style.ini
55249ccd446eSAtari911
55259ccd446eSAtari911**Template color replacements used**:
55269ccd446eSAtari911```php
55279ccd446eSAtari911__background_site__  → bg, header_bg
55289ccd446eSAtari911__background_alt__   → grid_bg, cell_today_bg
55299ccd446eSAtari911__background_neu__   → cell_bg
55309ccd446eSAtari911__text__             → text_primary
55319ccd446eSAtari911__text_neu__         → text_dim
55329ccd446eSAtari911__link__             → text_bright
55339ccd446eSAtari911__border__           → border, grid_border
55349ccd446eSAtari911```
55359ccd446eSAtari911
55369ccd446eSAtari911### Example style.ini Mapping
55379ccd446eSAtari911
55389ccd446eSAtari911**Template style.ini**:
55399ccd446eSAtari911```ini
55409ccd446eSAtari911[replacements]
55419ccd446eSAtari911__background_site__ = "#f8f9fa"
55429ccd446eSAtari911__background_alt__  = "#e9ecef"
55439ccd446eSAtari911__background_neu__  = "#dee2e6"
55449ccd446eSAtari911__text__            = "#212529"
55459ccd446eSAtari911__text_neu__        = "#6c757d"
55469ccd446eSAtari911__link__            = "#0d6efd"
55479ccd446eSAtari911__border__          = "#ced4da"
55489ccd446eSAtari911```
55499ccd446eSAtari911
55509ccd446eSAtari911**Calendar theme result**:
55519ccd446eSAtari911```php
55529ccd446eSAtari911bg: #f8f9fa
55539ccd446eSAtari911header_bg: #e9ecef
55549ccd446eSAtari911grid_bg: #e9ecef
55559ccd446eSAtari911cell_bg: #dee2e6
55569ccd446eSAtari911text_primary: #212529
55579ccd446eSAtari911text_dim: #6c757d
55589ccd446eSAtari911text_bright: #0d6efd
55599ccd446eSAtari911border: #ced4da
55609ccd446eSAtari911grid_border: #ced4da
55619ccd446eSAtari911```
55629ccd446eSAtari911
55639ccd446eSAtari911### Before vs After
55649ccd446eSAtari911
55659ccd446eSAtari911**Before (v5.0.2)**:
55669ccd446eSAtari911```
55679ccd446eSAtari911Wiki Default theme used:
55689ccd446eSAtari911- CSS variables (var(--__background__, #fff))
55699ccd446eSAtari911- Required browser CSS variable support
55709ccd446eSAtari911- Fallback to generic colors
55719ccd446eSAtari911```
55729ccd446eSAtari911
55739ccd446eSAtari911**After (v5.0.3)**:
55749ccd446eSAtari911```
55759ccd446eSAtari911Wiki Default theme uses:
55769ccd446eSAtari911- Actual colors from template's style.ini
55779ccd446eSAtari911- Exact template color values
55789ccd446eSAtari911- No CSS variable dependency
55799ccd446eSAtari911- Perfect color matching!
55809ccd446eSAtari911```
55819ccd446eSAtari911
55829ccd446eSAtari911### File Location Priority
55839ccd446eSAtari911
55849ccd446eSAtari911Checks in order:
55859ccd446eSAtari9111. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
55869ccd446eSAtari9112. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
55879ccd446eSAtari9113. Falls back to CSS variables if neither found
55889ccd446eSAtari911
55899ccd446eSAtari911### Benefits
55909ccd446eSAtari911
55919ccd446eSAtari911**More accurate colors**:
55929ccd446eSAtari911- Uses exact template color values ✓
55939ccd446eSAtari911- No CSS variable interpolation ✓
55949ccd446eSAtari911- Consistent across all browsers ✓
55959ccd446eSAtari911
55969ccd446eSAtari911**Better compatibility**:
55979ccd446eSAtari911- Works with older browsers ✓
55989ccd446eSAtari911- No CSS variable support needed ✓
55999ccd446eSAtari911- Direct color values ✓
56009ccd446eSAtari911
56019ccd446eSAtari911**Perfect matching**:
56029ccd446eSAtari911- Reads template's actual colors ✓
56039ccd446eSAtari911- Same colors as wiki pages ✓
56049ccd446eSAtari911- Seamless integration ✓
56059ccd446eSAtari911
56069ccd446eSAtari911### Template Examples
56079ccd446eSAtari911
56089ccd446eSAtari911**DokuWiki Default Template**:
56099ccd446eSAtari911```
56109ccd446eSAtari911Reads: lib/tpl/dokuwiki/style.ini
56119ccd446eSAtari911Gets: Default DokuWiki colors
56129ccd446eSAtari911Result: Perfect classic DokuWiki look
56139ccd446eSAtari911```
56149ccd446eSAtari911
56159ccd446eSAtari911**Bootstrap Template**:
56169ccd446eSAtari911```
56179ccd446eSAtari911Reads: lib/tpl/bootstrap3/style.ini
56189ccd446eSAtari911Gets: Bootstrap color scheme
56199ccd446eSAtari911Result: Perfect Bootstrap integration
56209ccd446eSAtari911```
56219ccd446eSAtari911
56229ccd446eSAtari911**Custom Template**:
56239ccd446eSAtari911```
56249ccd446eSAtari911Reads: conf/tpl/mycustom/style.ini
56259ccd446eSAtari911Gets: Your custom colors
56269ccd446eSAtari911Result: Perfect custom theme match
56279ccd446eSAtari911```
56289ccd446eSAtari911
56299ccd446eSAtari911### Fallback Chain
56309ccd446eSAtari911
56319ccd446eSAtari9111. **Try** reading style.ini from template
56329ccd446eSAtari9112. **If found** → Use exact colors from file
56339ccd446eSAtari9113. **If not found** → Use CSS variables
56349ccd446eSAtari9114. **If no CSS vars** → Use fallback colors
56359ccd446eSAtari911
56369ccd446eSAtari911**Always works, always matches!** ✓
56379ccd446eSAtari911
56389ccd446eSAtari911## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL
56399ccd446eSAtari911
56409ccd446eSAtari911### �� Fixed: Wiki Default Theme Day Panel Colors
56419ccd446eSAtari911- **Fixed:** Day popup panel now uses DokuWiki CSS variables
56429ccd446eSAtari911- **Fixed:** Panel background matches wiki theme
56439ccd446eSAtari911- **Fixed:** Panel header matches wiki theme
56449ccd446eSAtari911- **Fixed:** Border colors use wiki theme
56459ccd446eSAtari911- **Fixed:** Text colors use wiki theme
56469ccd446eSAtari911- **Result:** Perfect integration with DokuWiki templates!
56479ccd446eSAtari911
56489ccd446eSAtari911### All Changes
56499ccd446eSAtari911
56509ccd446eSAtari911**Day Panel Colors (Wiki Default)**:
56519ccd446eSAtari911
56529ccd446eSAtari911**Before**:
56539ccd446eSAtari911```php
56549ccd446eSAtari911background: rgba(36, 36, 36, 0.5)  // Dark gray (wrong!)
56559ccd446eSAtari911header: #3498db                     // Blue (wrong!)
56569ccd446eSAtari911```
56579ccd446eSAtari911
56589ccd446eSAtari911**After**:
56599ccd446eSAtari911```php
56609ccd446eSAtari911background: var(--__background__, #fff)
56619ccd446eSAtari911header: var(--__background_alt__, #e8e8e8)
56629ccd446eSAtari911header_text: var(--__text__, #333)
56639ccd446eSAtari911border: var(--__border__, #ccc)
56649ccd446eSAtari911shadow: 0 2px 4px rgba(0, 0, 0, 0.1)
56659ccd446eSAtari911```
56669ccd446eSAtari911
56679ccd446eSAtari911**Event Colors (Wiki Default)**:
56689ccd446eSAtari911```php
56699ccd446eSAtari911event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5))
56709ccd446eSAtari911border_color: var(--__border__, rgba(204, 204, 204, 0.3))
56719ccd446eSAtari911bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15)
56729ccd446eSAtari911```
56739ccd446eSAtari911
56749ccd446eSAtari911### Before vs After
56759ccd446eSAtari911
56769ccd446eSAtari911**Before (v5.0.1)**:
56779ccd446eSAtari911```
56789ccd446eSAtari911Wiki Default - Click Week Cell:
56799ccd446eSAtari911┌────────────────┐
56809ccd446eSAtari911│ Monday, Feb 8  │ ← Blue header (wrong)
56819ccd446eSAtari911├────────────────┤
56829ccd446eSAtari911│ Team Meeting   │ ← Dark gray bg (wrong)
56839ccd446eSAtari911│ 2:00 PM        │
56849ccd446eSAtari911└────────────────┘
56859ccd446eSAtari911Doesn't match wiki theme
56869ccd446eSAtari911```
56879ccd446eSAtari911
56889ccd446eSAtari911**After (v5.0.2)**:
56899ccd446eSAtari911```
56909ccd446eSAtari911Wiki Default - Click Week Cell:
56919ccd446eSAtari911
56929ccd446eSAtari911Light Wiki Theme:
56939ccd446eSAtari911┌────────────────┐
56949ccd446eSAtari911│ Monday, Feb 8  │ ← Light gray header ✓
56959ccd446eSAtari911├────────────────┤
56969ccd446eSAtari911│ Team Meeting   │ ← White bg ✓
56979ccd446eSAtari911│ 2:00 PM        │   Dark text ✓
56989ccd446eSAtari911└────────────────┘
56999ccd446eSAtari911
57009ccd446eSAtari911Dark Wiki Theme:
57019ccd446eSAtari911┌────────────────┐
57029ccd446eSAtari911│ Monday, Feb 8  │ ← Dark header ✓
57039ccd446eSAtari911├────────────────┤
57049ccd446eSAtari911│ Team Meeting   │ ← Dark bg ✓
57059ccd446eSAtari911│ 2:00 PM        │   Light text ✓
57069ccd446eSAtari911└────────────────┘
57079ccd446eSAtari911
57089ccd446eSAtari911Perfectly matches wiki!
57099ccd446eSAtari911```
57109ccd446eSAtari911
57119ccd446eSAtari911### CSS Variables Used
57129ccd446eSAtari911
57139ccd446eSAtari911**Wiki Default theme now uses**:
57149ccd446eSAtari911- `--__background__` - Main background (panel body)
57159ccd446eSAtari911- `--__background_alt__` - Alternate bg (panel header, events)
57169ccd446eSAtari911- `--__text__` - Text color (header text)
57179ccd446eSAtari911- `--__border__` - Border color (panel border, event borders)
57189ccd446eSAtari911
57199ccd446eSAtari911**With fallbacks**:
57209ccd446eSAtari911```css
57219ccd446eSAtari911var(--__background__, #fff)           /* white fallback */
57229ccd446eSAtari911var(--__background_alt__, #e8e8e8)    /* light gray fallback */
57239ccd446eSAtari911var(--__text__, #333)                 /* dark text fallback */
57249ccd446eSAtari911var(--__border__, #ccc)               /* gray border fallback */
57259ccd446eSAtari911```
57269ccd446eSAtari911
57279ccd446eSAtari911### Perfect Adaptation
57289ccd446eSAtari911
57299ccd446eSAtari911**Light Templates**:
57309ccd446eSAtari911- Light panel backgrounds ✓
57319ccd446eSAtari911- Dark text ✓
57329ccd446eSAtari911- Subtle borders ✓
57339ccd446eSAtari911- Clean appearance ✓
57349ccd446eSAtari911
57359ccd446eSAtari911**Dark Templates**:
57369ccd446eSAtari911- Dark panel backgrounds ✓
57379ccd446eSAtari911- Light text ✓
57389ccd446eSAtari911- Visible borders ✓
57399ccd446eSAtari911- Perfect contrast ✓
57409ccd446eSAtari911
57419ccd446eSAtari911**Custom Templates**:
57429ccd446eSAtari911- Uses template's CSS variables ✓
57439ccd446eSAtari911- Automatic adaptation ✓
57449ccd446eSAtari911- Seamless integration ✓
57459ccd446eSAtari911
57469ccd446eSAtari911### Now Truly Adaptive
57479ccd446eSAtari911
57489ccd446eSAtari911Wiki Default theme now properly uses DokuWiki CSS variables for:
57499ccd446eSAtari911- ✅ Calendar grid
57509ccd446eSAtari911- ✅ Sidebar widget
57519ccd446eSAtari911- ✅ Event list
57529ccd446eSAtari911- ✅ **Day panel** ← v5.0.2!
57539ccd446eSAtari911- ✅ All backgrounds
57549ccd446eSAtari911- ✅ All text
57559ccd446eSAtari911- ✅ All borders
57569ccd446eSAtari911
57579ccd446eSAtari911**Complete wiki integration!** ��
57589ccd446eSAtari911
57599ccd446eSAtari911## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS
57609ccd446eSAtari911
57619ccd446eSAtari911### �� Enhanced: Time Conflict Tooltips Now Themed
57629ccd446eSAtari911- **Fixed:** Conflict tooltips now match calendar theme
57639ccd446eSAtari911- **Added:** Theme-aware background, border, text colors
57649ccd446eSAtari911- **Added:** Theme-aware shadow effects
57659ccd446eSAtari911- **Result:** Complete visual consistency!
57669ccd446eSAtari911
57679ccd446eSAtari911### Tooltip Theming
57689ccd446eSAtari911
57699ccd446eSAtari911**Now uses theme colors for**:
57709ccd446eSAtari911- Background: Theme background color
57719ccd446eSAtari911- Border: Theme border color
57729ccd446eSAtari911- Header text: Theme primary text color
57739ccd446eSAtari911- Item text: Theme dim text color
57749ccd446eSAtari911- Shadow: Theme shadow color
57759ccd446eSAtari911
57769ccd446eSAtari911### Before vs After
57779ccd446eSAtari911
57789ccd446eSAtari911**Before (v5.0.0)**:
57799ccd446eSAtari911```
57809ccd446eSAtari911Hover ⚠️ badge:
57819ccd446eSAtari911┌─────────────────┐
57829ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Default colors
57839ccd446eSAtari911│ • Event A       │
57849ccd446eSAtari911│ • Event B       │
57859ccd446eSAtari911└─────────────────┘
57869ccd446eSAtari911```
57879ccd446eSAtari911
57889ccd446eSAtari911**After (v5.0.1)**:
57899ccd446eSAtari911```
57909ccd446eSAtari911Matrix Theme:
57919ccd446eSAtari911┌─────────────────┐
57929ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Green header
57939ccd446eSAtari911│ • Event A       │ ← Green text
57949ccd446eSAtari911│ • Event B       │   Dark green bg
57959ccd446eSAtari911└─────────────────┘
57969ccd446eSAtari911
57979ccd446eSAtari911Purple Theme:
57989ccd446eSAtari911┌─────────────────┐
57999ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Purple header
58009ccd446eSAtari911│ • Event A       │ ← Purple text
58019ccd446eSAtari911│ • Event B       │   Dark purple bg
58029ccd446eSAtari911└─────────────────┘
58039ccd446eSAtari911
58049ccd446eSAtari911Professional Theme:
58059ccd446eSAtari911┌─────────────────┐
58069ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Blue header
58079ccd446eSAtari911│ • Event A       │ ← Dark text
58089ccd446eSAtari911│ • Event B       │   Light bg
58099ccd446eSAtari911└─────────────────┘
58109ccd446eSAtari911
58119ccd446eSAtari911Pink Theme:
58129ccd446eSAtari911┌─────────────────┐
58139ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Pink header ✨
58149ccd446eSAtari911│ • Event A       │ ← Pink text
58159ccd446eSAtari911│ • Event B       │   Dark pink bg ��
58169ccd446eSAtari911└─────────────────┘
58179ccd446eSAtari911
58189ccd446eSAtari911Wiki Default:
58199ccd446eSAtari911┌─────────────────┐
58209ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Adapts to wiki
58219ccd446eSAtari911│ • Event A       │ ← Wiki colors
58229ccd446eSAtari911│ • Event B       │
58239ccd446eSAtari911└─────────────────┘
58249ccd446eSAtari911```
58259ccd446eSAtari911
58269ccd446eSAtari911### Now 100% Complete
58279ccd446eSAtari911
58289ccd446eSAtari911**Every tooltip themed**:
58299ccd446eSAtari911- ✅ Conflict tooltips
58309ccd446eSAtari911- ✅ All other tooltips (if any)
58319ccd446eSAtari911- ✅ Perfect consistency
58329ccd446eSAtari911
58339ccd446eSAtari911**Absolute perfection!** ✨
58349ccd446eSAtari911
58359ccd446eSAtari911## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION
58369ccd446eSAtari911
58379ccd446eSAtari911### �� Major Milestone: Version 5.0
58389ccd446eSAtari911
58399ccd446eSAtari911This 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.
58409ccd446eSAtari911
58419ccd446eSAtari911### Complete Feature Set
58429ccd446eSAtari911
58439ccd446eSAtari911**5 Beautiful Themes**:
58449ccd446eSAtari911- �� Matrix Edition (Green with glow)
58459ccd446eSAtari911- �� Purple Dream (Elegant purple)
58469ccd446eSAtari911- �� Professional Blue (Clean and modern)
58479ccd446eSAtari911- �� Pink Bling (Maximum sparkle)
58489ccd446eSAtari911- �� Wiki Default (Auto-adapts to your DokuWiki theme)
58499ccd446eSAtari911
58509ccd446eSAtari911**100% Theme Coverage**:
58519ccd446eSAtari911- ✅ Calendar grid and cells
58529ccd446eSAtari911- ✅ Event boxes and borders
58539ccd446eSAtari911- ✅ Sidebar widget
58549ccd446eSAtari911- ✅ Event list panel
58559ccd446eSAtari911- ✅ Search functionality
58569ccd446eSAtari911- ✅ Edit/Add dialogs (complete)
58579ccd446eSAtari911- ✅ Day popup dialogs
58589ccd446eSAtari911- ✅ Month picker
58599ccd446eSAtari911- ✅ All text (primary, dim, bright)
58609ccd446eSAtari911- ✅ All buttons
58619ccd446eSAtari911- ✅ All inputs and forms
58629ccd446eSAtari911- ✅ All checkboxes
58639ccd446eSAtari911- ✅ All borders
58649ccd446eSAtari911- ✅ All badges and labels
58659ccd446eSAtari911- ✅ Event highlight effects
58669ccd446eSAtari911
58679ccd446eSAtari911**Perfect Visual Consistency**:
58689ccd446eSAtari911- No white pixels anywhere
58699ccd446eSAtari911- No unthemed elements
58709ccd446eSAtari911- No default colors
58719ccd446eSAtari911- Complete visual unity
58729ccd446eSAtari911
58739ccd446eSAtari911### Major Improvements in v5.0
58749ccd446eSAtari911
58759ccd446eSAtari9111. **Complete Dialog Theming** (v4.8.5-4.8.7)
58769ccd446eSAtari911   - Edit event dialog fully themed
58779ccd446eSAtari911   - Day popup dialog fully themed
58789ccd446eSAtari911   - All form inputs themed
58799ccd446eSAtari911   - All checkboxes themed
58809ccd446eSAtari911   - All buttons themed
58819ccd446eSAtari911
58829ccd446eSAtari9112. **Event Box Border Perfection** (v4.8.6)
58839ccd446eSAtari911   - All 4 borders themed (top, right, bottom, left)
58849ccd446eSAtari911   - Sidebar event dividers themed
58859ccd446eSAtari911   - Past Events toggle border themed
58869ccd446eSAtari911
58879ccd446eSAtari9113. **Checkbox Field Borders** (v4.9.0)
58889ccd446eSAtari911   - Repeating Event section border themed
58899ccd446eSAtari911   - Task checkbox section border themed
58909ccd446eSAtari911
58919ccd446eSAtari9114. **Wiki Default Theme** (v4.10.0)
58929ccd446eSAtari911   - New 5th theme
58939ccd446eSAtari911   - Uses DokuWiki CSS variables
58949ccd446eSAtari911   - Auto-adapts to any wiki template
58959ccd446eSAtari911   - Perfect for seamless integration
58969ccd446eSAtari911
58979ccd446eSAtari9115. **Clean Text Appearance** (v4.11.0)
58989ccd446eSAtari911   - Removed text glow from Matrix
58999ccd446eSAtari911   - Removed text glow from Purple
59009ccd446eSAtari911   - Removed text glow from Professional
59019ccd446eSAtari911   - Removed text glow from Wiki Default
59029ccd446eSAtari911   - Kept text glow on Pink Bling only
59039ccd446eSAtari911
59049ccd446eSAtari9116. **Event Highlight Effects** (v4.12.0-4.12.1)
59059ccd446eSAtari911   - Theme-aware highlight glow
59069ccd446eSAtari911   - Click event bar → event glows
59079ccd446eSAtari911   - 3-second themed glow effect
59089ccd446eSAtari911   - Smooth animations
59099ccd446eSAtari911
59109ccd446eSAtari911### See RELEASE_NOTES.md for Complete Details
59119ccd446eSAtari911
59129ccd446eSAtari911For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release.
59139ccd446eSAtari911
59149ccd446eSAtari911## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION
59159ccd446eSAtari911
59169ccd446eSAtari911### �� Fixed: Event Highlight Now Working
59179ccd446eSAtari911- **Fixed:** Used setProperty() to properly apply !important styles
59189ccd446eSAtari911- **Added:** Console logging for debugging
59199ccd446eSAtari911- **Fixed:** Proper style application with important flag
59209ccd446eSAtari911- **Result:** Highlight glow now works correctly!
59219ccd446eSAtari911
59229ccd446eSAtari911### Technical Fix
59239ccd446eSAtari911
59249ccd446eSAtari911**Before (not working)**:
59259ccd446eSAtari911```javascript
59269ccd446eSAtari911eventItem.style.background = color + ' !important'; // Doesn't work
59279ccd446eSAtari911```
59289ccd446eSAtari911
59299ccd446eSAtari911**After (working)**:
59309ccd446eSAtari911```javascript
59319ccd446eSAtari911eventItem.style.setProperty('background', color, 'important'); // Works!
59329ccd446eSAtari911```
59339ccd446eSAtari911
59349ccd446eSAtari911### Added Debug Logging
59359ccd446eSAtari911
59369ccd446eSAtari911Console now shows:
59379ccd446eSAtari911- "Highlighting event: [calId] [eventId] [date]"
59389ccd446eSAtari911- "Found event item: [element]"
59399ccd446eSAtari911- "Theme: [theme name]"
59409ccd446eSAtari911- "Highlight colors: [bg] [shadow]"
59419ccd446eSAtari911- "Applied highlight styles"
59429ccd446eSAtari911- "Removing highlight" (after 3 seconds)
59439ccd446eSAtari911
59449ccd446eSAtari911### Now Working
59459ccd446eSAtari911
59469ccd446eSAtari911Click any event bar → Event glows with theme colors ✓
59479ccd446eSAtari911
59489ccd446eSAtari911## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW
59499ccd446eSAtari911
59509ccd446eSAtari911### ✨ Enhanced: Event Click Highlight Now Theme-Aware
59519ccd446eSAtari911- **Fixed:** Restored event highlight glow when clicking calendar bars
59529ccd446eSAtari911- **Improved:** Highlight now matches each theme's colors
59539ccd446eSAtari911- **Added:** Stronger glow effect for better visibility
59549ccd446eSAtari911- **Duration:** 3 seconds with smooth fade
59559ccd446eSAtari911- **Result:** Beautiful themed highlights for all themes!
59569ccd446eSAtari911
59579ccd446eSAtari911### How It Works
59589ccd446eSAtari911
59599ccd446eSAtari911When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow:
59609ccd446eSAtari911
59619ccd446eSAtari911**Matrix Theme**:
59629ccd446eSAtari911```javascript
59639ccd446eSAtari911Background: Darker green (#1a3d1a)
59649ccd446eSAtari911Glow: Double green glow (0 0 20px + 0 0 40px)
59659ccd446eSAtari911Color: rgba(0, 204, 7, 0.8)
59669ccd446eSAtari911```
59679ccd446eSAtari911
59689ccd446eSAtari911**Purple Theme**:
59699ccd446eSAtari911```javascript
59709ccd446eSAtari911Background: Darker purple (#3d2b4d)
59719ccd446eSAtari911Glow: Double purple glow
59729ccd446eSAtari911Color: rgba(155, 89, 182, 0.8)
59739ccd446eSAtari911```
59749ccd446eSAtari911
59759ccd446eSAtari911**Professional Theme**:
59769ccd446eSAtari911```javascript
59779ccd446eSAtari911Background: Light blue (#e3f2fd)
59789ccd446eSAtari911Glow: Single blue glow
59799ccd446eSAtari911Color: rgba(74, 144, 226, 0.4)
59809ccd446eSAtari911```
59819ccd446eSAtari911
59829ccd446eSAtari911**Pink Theme**:
59839ccd446eSAtari911```javascript
59849ccd446eSAtari911Background: Darker pink (#3d2030)
59859ccd446eSAtari911Glow: Double pink glow ✨��
59869ccd446eSAtari911Color: rgba(255, 20, 147, 0.8)
59879ccd446eSAtari911```
59889ccd446eSAtari911
59899ccd446eSAtari911**Wiki Theme**:
59909ccd446eSAtari911```javascript
59919ccd446eSAtari911Background: var(--__background_neu__)
59929ccd446eSAtari911Glow: Blue glow (adapts to wiki)
59939ccd446eSAtari911Color: rgba(43, 115, 183, 0.4)
59949ccd446eSAtari911```
59959ccd446eSAtari911
59969ccd446eSAtari911### Visual Examples
59979ccd446eSAtari911
59989ccd446eSAtari911**Matrix - Click Event**:
59999ccd446eSAtari911```
60009ccd446eSAtari911Calendar:
60019ccd446eSAtari911┌─────────────┐
60029ccd446eSAtari911│ 2:00 PM │ ← Click this bar
60039ccd446eSAtari911└─────────────┘
60049ccd446eSAtari911
60059ccd446eSAtari911Event List:
60069ccd446eSAtari911╔═════════════════════╗
60079ccd446eSAtari911║ Team Meeting        ║ ← GLOWS GREEN
60089ccd446eSAtari911║ 2:00 PM             ║    for 3 seconds
60099ccd446eSAtari911╚═════════════════════╝
60109ccd446eSAtari911   ↑↑↑ Strong green glow ↑↑↑
60119ccd446eSAtari911```
60129ccd446eSAtari911
60139ccd446eSAtari911**Purple - Click Event**:
60149ccd446eSAtari911```
60159ccd446eSAtari911Calendar:
60169ccd446eSAtari911┌─────────────┐
60179ccd446eSAtari911│ 4:00 PM │ ← Click
60189ccd446eSAtari911└─────────────┘
60199ccd446eSAtari911
60209ccd446eSAtari911Event List:
60219ccd446eSAtari911╔═════════════════════╗
60229ccd446eSAtari911║ Code Review         ║ ← GLOWS PURPLE
60239ccd446eSAtari911║ 4:00 PM             ║    for 3 seconds
60249ccd446eSAtari911╚═════════════════════╝
60259ccd446eSAtari911   ↑↑↑ Strong purple glow ↑↑↑
60269ccd446eSAtari911```
60279ccd446eSAtari911
60289ccd446eSAtari911**Pink - Click Event**:
60299ccd446eSAtari911```
60309ccd446eSAtari911Calendar:
60319ccd446eSAtari911┌─────────────┐
60329ccd446eSAtari911│ 1:00 PM │ ← Click
60339ccd446eSAtari911└─────────────┘
60349ccd446eSAtari911
60359ccd446eSAtari911Event List:
60369ccd446eSAtari911╔═════════════════════╗
60379ccd446eSAtari911║ Lunch Date ��       ║ ← GLOWS PINK
60389ccd446eSAtari911║ 1:00 PM ✨          ║    for 3 seconds
60399ccd446eSAtari911╚═════════════════════╝
60409ccd446eSAtari911   ↑↑↑ MAXIMUM SPARKLE ↑↑↑
60419ccd446eSAtari911```
60429ccd446eSAtari911
60439ccd446eSAtari911### Glow Specifications
60449ccd446eSAtari911
60459ccd446eSAtari911**Matrix**:
60469ccd446eSAtari911- Background: Dark green
60479ccd446eSAtari911- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)`
60489ccd446eSAtari911- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)`
60499ccd446eSAtari911- Effect: Strong green pulse
60509ccd446eSAtari911
60519ccd446eSAtari911**Purple**:
60529ccd446eSAtari911- Background: Dark purple
60539ccd446eSAtari911- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)`
60549ccd446eSAtari911- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)`
60559ccd446eSAtari911- Effect: Strong purple pulse
60569ccd446eSAtari911
60579ccd446eSAtari911**Professional**:
60589ccd446eSAtari911- Background: Light blue
60599ccd446eSAtari911- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)`
60609ccd446eSAtari911- Effect: Subtle blue glow
60619ccd446eSAtari911
60629ccd446eSAtari911**Pink**:
60639ccd446eSAtari911- Background: Dark pink
60649ccd446eSAtari911- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)`
60659ccd446eSAtari911- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)`
60669ccd446eSAtari911- Effect: MAXIMUM SPARKLE ✨��
60679ccd446eSAtari911
60689ccd446eSAtari911**Wiki**:
60699ccd446eSAtari911- Background: Theme neutral color
60709ccd446eSAtari911- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)`
60719ccd446eSAtari911- Effect: Adapts to wiki theme
60729ccd446eSAtari911
60739ccd446eSAtari911### User Experience
60749ccd446eSAtari911
60759ccd446eSAtari911**Click event bar** → Event highlights with themed glow
60769ccd446eSAtari911**Auto-scroll** → Event scrolls into view smoothly
60779ccd446eSAtari911**3 second glow** → Fade out after 3 seconds
60789ccd446eSAtari911**Smooth transition** → 0.3s ease-in-out
60799ccd446eSAtari911
60809ccd446eSAtari911### Perfect for Finding Events
60819ccd446eSAtari911
60829ccd446eSAtari911**Large event lists**: Quickly locate the clicked event ✓
60839ccd446eSAtari911**Visual feedback**: Know which event you clicked ✓
60849ccd446eSAtari911**Theme consistency**: Matches your chosen theme ✓
60859ccd446eSAtari911**Smooth animation**: Professional appearance ✓
60869ccd446eSAtari911
60879ccd446eSAtari911### All Themes Covered
60889ccd446eSAtari911
60899ccd446eSAtari911- ✅ Matrix: Green glow
60909ccd446eSAtari911- ✅ Purple: Purple glow
60919ccd446eSAtari911- ✅ Professional: Blue glow
60929ccd446eSAtari911- ✅ Pink: Maximum pink sparkle
60939ccd446eSAtari911- ✅ Wiki: Adaptive glow
60949ccd446eSAtari911
60959ccd446eSAtari911**Click any event bar and watch it glow!** ✨
60969ccd446eSAtari911
60979ccd446eSAtari911## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES
60989ccd446eSAtari911
60999ccd446eSAtari911### �� Changed: Text Glow Now Pink-Only
61009ccd446eSAtari911- **Removed:** Text shadow/glow from Matrix theme
61019ccd446eSAtari911- **Removed:** Text shadow/glow from Purple theme
61029ccd446eSAtari911- **Removed:** Text shadow/glow from Professional theme (already had none)
61039ccd446eSAtari911- **Removed:** Text shadow/glow from Wiki Default theme
61049ccd446eSAtari911- **Kept:** Text shadow/glow ONLY on Pink Bling theme
61059ccd446eSAtari911- **Result:** Cleaner look for Matrix, Purple, and Wiki themes!
61069ccd446eSAtari911
61079ccd446eSAtari911### All Changes
61089ccd446eSAtari911
61099ccd446eSAtari911**Before (Matrix, Purple)**:
61109ccd446eSAtari911```css
61119ccd446eSAtari911text-shadow: 0 0 2px $text_color; /* Glow effect */
61129ccd446eSAtari911```
61139ccd446eSAtari911
61149ccd446eSAtari911**After (Matrix, Purple, Professional, Wiki)**:
61159ccd446eSAtari911```css
61169ccd446eSAtari911text-shadow: none; /* Clean, no glow */
61179ccd446eSAtari911```
61189ccd446eSAtari911
61199ccd446eSAtari911**Pink Bling (unchanged)**:
61209ccd446eSAtari911```css
61219ccd446eSAtari911text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */
61229ccd446eSAtari911```
61239ccd446eSAtari911
61249ccd446eSAtari911### Text Shadow Removed From
61259ccd446eSAtari911
61269ccd446eSAtari911**Sidebar day numbers**: No glow ✓
61279ccd446eSAtari911**Event titles**: No glow ✓
61289ccd446eSAtari911**Event dates**: No glow ✓
61299ccd446eSAtari911**Add Event button**: No glow ✓
61309ccd446eSAtari911**Day popup events**: No glow ✓
61319ccd446eSAtari911
61329ccd446eSAtari911### Before vs After
61339ccd446eSAtari911
61349ccd446eSAtari911**BEFORE (Matrix)**:
61359ccd446eSAtari911```
61369ccd446eSAtari911Event Title ✨ ← Glowing green text
61379ccd446eSAtari9112:00 PM ✨     ← Glowing text
61389ccd446eSAtari911```
61399ccd446eSAtari911
61409ccd446eSAtari911**AFTER (Matrix)**:
61419ccd446eSAtari911```
61429ccd446eSAtari911Event Title    ← Clean green text
61439ccd446eSAtari9112:00 PM        ← Clean text
61449ccd446eSAtari911```
61459ccd446eSAtari911
61469ccd446eSAtari911**Pink Bling (Still Glows)**:
61479ccd446eSAtari911```
61489ccd446eSAtari911Event Title ✨�� ← Still glowing!
61499ccd446eSAtari9112:00 PM ✨     ← Maximum sparkle!
61509ccd446eSAtari911```
61519ccd446eSAtari911
61529ccd446eSAtari911### Theme Appearances
61539ccd446eSAtari911
61549ccd446eSAtari911**�� Matrix Edition**:
61559ccd446eSAtari911- Clean green text
61569ccd446eSAtari911- No glow effects
61579ccd446eSAtari911- Professional appearance
61589ccd446eSAtari911- Still has border glow
61599ccd446eSAtari911
61609ccd446eSAtari911**�� Purple Dream**:
61619ccd446eSAtari911- Clean purple text
61629ccd446eSAtari911- No glow effects
61639ccd446eSAtari911- Elegant appearance
61649ccd446eSAtari911- Still has border glow
61659ccd446eSAtari911
61669ccd446eSAtari911**�� Professional Blue**:
61679ccd446eSAtari911- Clean text (unchanged)
61689ccd446eSAtari911- No glow effects
61699ccd446eSAtari911- Modern appearance
61709ccd446eSAtari911
61719ccd446eSAtari911**�� Pink Bling**:
61729ccd446eSAtari911- Glowing pink text ✨
61739ccd446eSAtari911- Maximum glow effects ��
61749ccd446eSAtari911- Sparkle everywhere!
61759ccd446eSAtari911- All the bling!
61769ccd446eSAtari911
61779ccd446eSAtari911**�� Wiki Default**:
61789ccd446eSAtari911- Clean text
61799ccd446eSAtari911- No glow effects
61809ccd446eSAtari911- Matches wiki theme
61819ccd446eSAtari911
61829ccd446eSAtari911### Glow Effects Remaining
61839ccd446eSAtari911
61849ccd446eSAtari911**Border/box glow**: Still present on all themes ✓
61859ccd446eSAtari911**Pink text glow**: Only on Pink Bling ✓
61869ccd446eSAtari911**Shadow effects**: Still on buttons/boxes61879ccd446eSAtari911
61889ccd446eSAtari911**Only TEXT glow removed from non-pink themes!**
61899ccd446eSAtari911
61909ccd446eSAtari911### Result
61919ccd446eSAtari911
61929ccd446eSAtari911**Cleaner, more professional look** for:
61939ccd446eSAtari911- Matrix ✓
61949ccd446eSAtari911- Purple ✓
61959ccd446eSAtari911- Professional ✓
61969ccd446eSAtari911- Wiki Default ✓
61979ccd446eSAtari911
61989ccd446eSAtari911**Maximum sparkle** for:
61999ccd446eSAtari911- Pink Bling ✨��✓
62009ccd446eSAtari911
62019ccd446eSAtari911**Best of both worlds!** ��
62029ccd446eSAtari911
62039ccd446eSAtari911## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME
62049ccd446eSAtari911
62059ccd446eSAtari911### �� New: Wiki Default Theme
62069ccd446eSAtari911- **Added:** 5th theme that automatically matches your DokuWiki template
62079ccd446eSAtari911- **Uses:** CSS variables from your wiki theme
62089ccd446eSAtari911- **Adapts:** Automatically works with light and dark themes
62099ccd446eSAtari911- **Perfect:** Seamless integration with any DokuWiki template
62109ccd446eSAtari911
62119ccd446eSAtari911### How It Works
62129ccd446eSAtari911
62139ccd446eSAtari911**Wiki theme uses DokuWiki CSS variables**:
62149ccd446eSAtari911```css
62159ccd446eSAtari911bg: var(--__background_site__, #f5f5f5)
62169ccd446eSAtari911border: var(--__border__, #ccc)
62179ccd446eSAtari911text_primary: var(--__text__, #333)
62189ccd446eSAtari911text_bright: var(--__link__, #2b73b7)
62199ccd446eSAtari911text_dim: var(--__text_neu__, #666)
62209ccd446eSAtari911cell_bg: var(--__background__, #fff)
62219ccd446eSAtari911grid_border: var(--__border__, #ccc)
62229ccd446eSAtari911```
62239ccd446eSAtari911
62249ccd446eSAtari911**With fallbacks for older DokuWiki versions**:
62259ccd446eSAtari911- If CSS variables exist → Use them ✓
62269ccd446eSAtari911- If not available → Use fallback values ✓
62279ccd446eSAtari911
62289ccd446eSAtari911### All 5 Themes
62299ccd446eSAtari911
62309ccd446eSAtari911**1. �� Matrix Edition** (Default)
62319ccd446eSAtari911- Dark green with neon glow
62329ccd446eSAtari911- Matrix-style effects
62339ccd446eSAtari911- Original theme
62349ccd446eSAtari911
62359ccd446eSAtari911**2. �� Purple Dream**
62369ccd446eSAtari911- Rich purple with violet accents
62379ccd446eSAtari911- Elegant and sophisticated
62389ccd446eSAtari911- Soft glow effects
62399ccd446eSAtari911
62409ccd446eSAtari911**3. �� Professional Blue**
62419ccd446eSAtari911- Clean blue and grey
62429ccd446eSAtari911- Modern professional
62439ccd446eSAtari911- No glow effects
62449ccd446eSAtari911
62459ccd446eSAtari911**4. �� Pink Bling**
62469ccd446eSAtari911- Glamorous hot pink
62479ccd446eSAtari911- Maximum sparkle ✨
62489ccd446eSAtari911- Hearts and diamonds
62499ccd446eSAtari911
62509ccd446eSAtari911**5. �� Wiki Default** ← NEW!
62519ccd446eSAtari911- Matches your wiki template
62529ccd446eSAtari911- Auto-adapts to light/dark
62539ccd446eSAtari911- Perfect integration
62549ccd446eSAtari911
62559ccd446eSAtari911### Examples
62569ccd446eSAtari911
62579ccd446eSAtari911**Light Wiki Template**:
62589ccd446eSAtari911```
62599ccd446eSAtari911Wiki Default theme shows:
62609ccd446eSAtari911- Light backgrounds (#f5f5f5)
62619ccd446eSAtari911- Dark text (#333)
62629ccd446eSAtari911- Light inputs (#fff)
62639ccd446eSAtari911- Gray borders (#ccc)
62649ccd446eSAtari911
62659ccd446eSAtari911Matches perfectly! ✓
62669ccd446eSAtari911```
62679ccd446eSAtari911
62689ccd446eSAtari911**Dark Wiki Template**:
62699ccd446eSAtari911```
62709ccd446eSAtari911Wiki Default theme shows:
62719ccd446eSAtari911- Dark backgrounds (from template)
62729ccd446eSAtari911- Light text (from template)
62739ccd446eSAtari911- Dark inputs (from template)
62749ccd446eSAtari911- Dark borders (from template)
62759ccd446eSAtari911
62769ccd446eSAtari911Matches perfectly! ✓
62779ccd446eSAtari911```
62789ccd446eSAtari911
62799ccd446eSAtari911**Bootstrap Template**:
62809ccd446eSAtari911```
62819ccd446eSAtari911Uses Bootstrap's colors
62829ccd446eSAtari911Matches perfectly! ✓
62839ccd446eSAtari911```
62849ccd446eSAtari911
62859ccd446eSAtari911**Material Template**:
62869ccd446eSAtari911```
62879ccd446eSAtari911Uses Material's colors
62889ccd446eSAtari911Matches perfectly! ✓
62899ccd446eSAtari911```
62909ccd446eSAtari911
62919ccd446eSAtari911### CSS Variables Used
62929ccd446eSAtari911
62939ccd446eSAtari911**DokuWiki provides**:
62949ccd446eSAtari911- `--__background_site__`: Page background
62959ccd446eSAtari911- `--__background_alt__`: Section backgrounds
62969ccd446eSAtari911- `--__background__`: Content backgrounds
62979ccd446eSAtari911- `--__text__`: Primary text color
62989ccd446eSAtari911- `--__link__`: Link color
62999ccd446eSAtari911- `--__text_neu__`: Dimmed text
63009ccd446eSAtari911- `--__border__`: Border color
63019ccd446eSAtari911- `--__background_neu__`: Neutral background
63029ccd446eSAtari911
63039ccd446eSAtari911**All with fallbacks**:
63049ccd446eSAtari911```css
63059ccd446eSAtari911var(--__background_site__, #f5f5f5)
63069ccd446eSAtari911/* Falls back to light gray if variable doesn't exist */
63079ccd446eSAtari911```
63089ccd446eSAtari911
63099ccd446eSAtari911### Perfect for Every Template
63109ccd446eSAtari911
63119ccd446eSAtari911**Custom templates**: Automatically adapts ✓
63129ccd446eSAtari911**Light themes**: Perfect match ✓
63139ccd446eSAtari911**Dark themes**: Perfect match ✓
63149ccd446eSAtari911**Any DokuWiki version**: Works with fallbacks ✓
63159ccd446eSAtari911
63169ccd446eSAtari911### Complete Theme Collection
63179ccd446eSAtari911
63189ccd446eSAtari911Now with **5 gorgeous themes**:
63199ccd446eSAtari911- 3 dark themes (Matrix, Purple, Pink)
63209ccd446eSAtari911- 1 light theme (Professional)
63219ccd446eSAtari911- 1 adaptive theme (Wiki Default) ← NEW!
63229ccd446eSAtari911
63239ccd446eSAtari911**Something for everyone!** ��
63249ccd446eSAtari911
63259ccd446eSAtari911## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS
63269ccd446eSAtari911
63279ccd446eSAtari911### �� Fixed: Checkbox Field Borders Themed
63289ccd446eSAtari911- **Fixed:** Added border-color to checkbox field divs
63299ccd446eSAtari911- **Fixed:** Repeating Event section border
63309ccd446eSAtari911- **Fixed:** Task checkbox section border
63319ccd446eSAtari911- **Result:** No white borders around checkboxes!
63329ccd446eSAtari911
63339ccd446eSAtari911### Changes
63349ccd446eSAtari911
63359ccd446eSAtari911**Checkbox Field Border Styling**:
63369ccd446eSAtari911
63379ccd446eSAtari911**Before**:
63389ccd446eSAtari911```html
63399ccd446eSAtari911<div class="form-field-checkbox"
63409ccd446eSAtari911     style="background: $bg !important;">
63419ccd446eSAtari911<!-- Border shows white ✗ -->
63429ccd446eSAtari911```
63439ccd446eSAtari911
63449ccd446eSAtari911**After**:
63459ccd446eSAtari911```php
63469ccd446eSAtari911<div class="form-field-checkbox"
63479ccd446eSAtari911     style="background: $bg !important;
63489ccd446eSAtari911            border-color: $grid_border !important;">
63499ccd446eSAtari911<!-- Border themed ✓ -->
63509ccd446eSAtari911```
63519ccd446eSAtari911
63529ccd446eSAtari911### Before vs After
63539ccd446eSAtari911
63549ccd446eSAtari911**BEFORE (v4.8.8)**:
63559ccd446eSAtari911```
63569ccd446eSAtari911Edit Dialog:
63579ccd446eSAtari911┌──────────────────┐
63589ccd446eSAtari911│ ☑ Repeating     ║│ ← White border ✗
63599ccd446eSAtari911└──────────────────┘
63609ccd446eSAtari911┌──────────────────┐
63619ccd446eSAtari911│ ☑ Task checkbox ║│ ← White border ✗
63629ccd446eSAtari911└──────────────────┘
63639ccd446eSAtari911```
63649ccd446eSAtari911
63659ccd446eSAtari911**AFTER (v4.9.0)**:
63669ccd446eSAtari911```
63679ccd446eSAtari911Matrix Edit Dialog:
63689ccd446eSAtari911┌──────────────────┐
63699ccd446eSAtari911│ ☑ Repeating      │ ← Green border ✓
63709ccd446eSAtari911└──────────────────┘
63719ccd446eSAtari911┌──────────────────┐
63729ccd446eSAtari911│ ☑ Task checkbox  │ ← Green border ✓
63739ccd446eSAtari911└──────────────────┘
63749ccd446eSAtari911```
63759ccd446eSAtari911
63769ccd446eSAtari911### ABSOLUTE PERFECTION ACHIEVED
63779ccd446eSAtari911
63789ccd446eSAtari911**Every element themed**:
63799ccd446eSAtari911- ✅ All inputs
63809ccd446eSAtari911- ✅ All labels
63819ccd446eSAtari911- ✅ All sections
63829ccd446eSAtari911- ✅ **Checkbox field borders** ← v4.9.0!
63839ccd446eSAtari911- ✅ All buttons
63849ccd446eSAtari911- ✅ All checkboxes
63859ccd446eSAtari911- ✅ No white anywhere
63869ccd446eSAtari911
63879ccd446eSAtari911**100% COMPLETE!** ��✨
63889ccd446eSAtari911
63899ccd446eSAtari911## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
63909ccd446eSAtari911
63919ccd446eSAtari911### �� Fixed: Checkbox Field Borders Themed
63929ccd446eSAtari911- **Fixed:** Added border-color to checkbox field divs
63939ccd446eSAtari911- **Fixed:** Repeating Event section border
63949ccd446eSAtari911- **Fixed:** Task checkbox section border
63959ccd446eSAtari911- **Result:** No white borders around checkboxes!
63969ccd446eSAtari911
63979ccd446eSAtari911### �� Fixed: Admin Sections Respect Wiki Theme
63989ccd446eSAtari911- **Fixed:** All admin backgrounds use CSS variables
63999ccd446eSAtari911- **Fixed:** Text colors use wiki text color
64009ccd446eSAtari911- **Fixed:** Borders use wiki border color
64019ccd446eSAtari911- **Result:** Admin matches wiki theme perfectly!
64029ccd446eSAtari911
64039ccd446eSAtari911### All Changes
64049ccd446eSAtari911
64059ccd446eSAtari911**1. Checkbox Field Border Styling**:
64069ccd446eSAtari911
64079ccd446eSAtari911**Before**:
64089ccd446eSAtari911```html
64099ccd446eSAtari911<div class="form-field-checkbox"
64109ccd446eSAtari911     style="background: $bg !important;">
64119ccd446eSAtari911<!-- Border shows white ✗ -->
64129ccd446eSAtari911```
64139ccd446eSAtari911
64149ccd446eSAtari911**After**:
64159ccd446eSAtari911```php
64169ccd446eSAtari911<div class="form-field-checkbox"
64179ccd446eSAtari911     style="background: $bg !important;
64189ccd446eSAtari911            border-color: $grid_border !important;">
64199ccd446eSAtari911<!-- Border themed ✓ -->
64209ccd446eSAtari911```
64219ccd446eSAtari911
64229ccd446eSAtari911**2. Admin CSS Variables**:
64239ccd446eSAtari911
64249ccd446eSAtari911**Added CSS variables for wiki theme compatibility**:
64259ccd446eSAtari911```css
64269ccd446eSAtari911.calendar-admin-wrapper {
64279ccd446eSAtari911    background: var(--__background_site__, #f5f5f5);
64289ccd446eSAtari911    color: var(--__text__, #333);
64299ccd446eSAtari911}
64309ccd446eSAtari911.calendar-admin-section {
64319ccd446eSAtari911    background: var(--__background_alt__, #fafafa);
64329ccd446eSAtari911}
64339ccd446eSAtari911.calendar-admin-input {
64349ccd446eSAtari911    background: var(--__background__, #fff);
64359ccd446eSAtari911    color: var(--__text__, #333);
64369ccd446eSAtari911}
64379ccd446eSAtari911```
64389ccd446eSAtari911
64399ccd446eSAtari911**Replaced hardcoded colors**:
64409ccd446eSAtari911```php
64419ccd446eSAtari911// Before:
64429ccd446eSAtari911background: #f9f9f9
64439ccd446eSAtari911background: white
64449ccd446eSAtari911color: #333
64459ccd446eSAtari911border: 1px solid #ddd
64469ccd446eSAtari911
64479ccd446eSAtari911// After:
64489ccd446eSAtari911background: var(--__background_alt__, #f9f9f9)
64499ccd446eSAtari911background: var(--__background__, #fff)
64509ccd446eSAtari911color: var(--__text__, #333)
64519ccd446eSAtari911border: 1px solid var(--__border__, #ddd)
64529ccd446eSAtari911```
64539ccd446eSAtari911
64549ccd446eSAtari911### Before vs After
64559ccd446eSAtari911
64569ccd446eSAtari911**BEFORE (v4.8.8)**:
64579ccd446eSAtari911```
64589ccd446eSAtari911Edit Dialog:
64599ccd446eSAtari911┌──────────────────┐
64609ccd446eSAtari911│ ☑ Repeating     ║│ ← White border ✗
64619ccd446eSAtari911└──────────────────┘
64629ccd446eSAtari911┌──────────────────┐
64639ccd446eSAtari911│ ☑ Task checkbox ║│ ← White border ✗
64649ccd446eSAtari911└──────────────────┘
64659ccd446eSAtari911
64669ccd446eSAtari911Admin Page (Dark Wiki Theme):
64679ccd446eSAtari911┌──────────────────┐
64689ccd446eSAtari911│ Light sections  │ ← White boxes ✗
64699ccd446eSAtari911│ Light inputs    │ ← Doesn't match ✗
64709ccd446eSAtari911└──────────────────┘
64719ccd446eSAtari911```
64729ccd446eSAtari911
64739ccd446eSAtari911**AFTER (v4.8.9)**:
64749ccd446eSAtari911```
64759ccd446eSAtari911Matrix Edit Dialog:
64769ccd446eSAtari911┌──────────────────┐
64779ccd446eSAtari911│ ☑ Repeating      │ ← Green border ✓
64789ccd446eSAtari911└──────────────────┘
64799ccd446eSAtari911┌──────────────────┐
64809ccd446eSAtari911│ ☑ Task checkbox  │ ← Green border ✓
64819ccd446eSAtari911└──────────────────┘
64829ccd446eSAtari911
64839ccd446eSAtari911Admin (Dark Wiki Theme):
64849ccd446eSAtari911┌──────────────────┐
64859ccd446eSAtari911│ Dark sections   │ ← Matches wiki ✓
64869ccd446eSAtari911│ Dark inputs     │ ← Perfect match ✓
64879ccd446eSAtari911└──────────────────┘
64889ccd446eSAtari911```
64899ccd446eSAtari911
64909ccd446eSAtari911### Admin Theme Examples
64919ccd446eSAtari911
64929ccd446eSAtari911**Light Wiki Theme**:
64939ccd446eSAtari911```
64949ccd446eSAtari911Admin page backgrounds: Light
64959ccd446eSAtari911Section boxes: Light gray
64969ccd446eSAtari911Inputs: White
64979ccd446eSAtari911Borders: Gray
64989ccd446eSAtari911Text: Dark
64999ccd446eSAtari911
65009ccd446eSAtari911Perfect match! ✓
65019ccd446eSAtari911```
65029ccd446eSAtari911
65039ccd446eSAtari911**Dark Wiki Theme**:
65049ccd446eSAtari911```
65059ccd446eSAtari911Admin page backgrounds: Dark
65069ccd446eSAtari911Section boxes: Darker gray
65079ccd446eSAtari911Inputs: Dark
65089ccd446eSAtari911Borders: Dark gray
65099ccd446eSAtari911Text: Light
65109ccd446eSAtari911
65119ccd446eSAtari911Perfect match! ✓
65129ccd446eSAtari911```
65139ccd446eSAtari911
65149ccd446eSAtari911**DokuWiki Default**:
65159ccd446eSAtari911```
65169ccd446eSAtari911Uses wiki's CSS variables
65179ccd446eSAtari911Automatically adapts
65189ccd446eSAtari911Always matches! ✓
65199ccd446eSAtari911```
65209ccd446eSAtari911
65219ccd446eSAtari911### Complete Coverage
65229ccd446eSAtari911
65239ccd446eSAtari911**Edit Dialog**:
65249ccd446eSAtari911- ✅ All inputs themed
65259ccd446eSAtari911- ✅ All labels themed
65269ccd446eSAtari911- ✅ All sections themed
65279ccd446eSAtari911- ✅ **Checkbox borders** ← v4.8.9!
65289ccd446eSAtari911- ✅ All buttons themed
65299ccd446eSAtari911- ✅ No white anywhere
65309ccd446eSAtari911
65319ccd446eSAtari911**Admin Interface**:
65329ccd446eSAtari911- ✅ **Tab navigation** ← v4.8.9!
65339ccd446eSAtari911- ✅ **Section boxes** ← v4.8.9!
65349ccd446eSAtari911- ✅ **Input fields** ← v4.8.9!
65359ccd446eSAtari911- ✅ **Text colors** ← v4.8.9!
65369ccd446eSAtari911- ✅ **Borders** ← v4.8.9!
65379ccd446eSAtari911- ✅ All tabs (Manage, Update, Outlook, Themes)
65389ccd446eSAtari911
65399ccd446eSAtari911### CSS Variables Used
65409ccd446eSAtari911
65419ccd446eSAtari911**DokuWiki provides these**:
65429ccd446eSAtari911- `--__background_site__`: Page background
65439ccd446eSAtari911- `--__background_alt__`: Alternate background
65449ccd446eSAtari911- `--__background__`: Primary background (inputs)
65459ccd446eSAtari911- `--__text__`: Text color
65469ccd446eSAtari911- `--__border__`: Border color
65479ccd446eSAtari911
65489ccd446eSAtari911**Fallbacks provided for older DokuWiki**:
65499ccd446eSAtari911```css
65509ccd446eSAtari911var(--__background_site__, #f5f5f5)
65519ccd446eSAtari911var(--__background_alt__, #fafafa)
65529ccd446eSAtari911var(--__background__, #fff)
65539ccd446eSAtari911var(--__text__, #333)
65549ccd446eSAtari911var(--__border__, #ddd)
65559ccd446eSAtari911```
65569ccd446eSAtari911
65579ccd446eSAtari911### Perfect Adaptation
65589ccd446eSAtari911
65599ccd446eSAtari911**Admin now adapts to ANY wiki theme**:
65609ccd446eSAtari911- Light themes → Light admin ✓
65619ccd446eSAtari911- Dark themes → Dark admin ✓
65629ccd446eSAtari911- Custom themes → Matches perfectly ✓
65639ccd446eSAtari911- No hardcoded colors ✓
65649ccd446eSAtari911
65659ccd446eSAtari911**Calendar themes still work**:
65669ccd446eSAtari911- Matrix, Purple, Professional, Pink ✓
65679ccd446eSAtari911- Independent from wiki theme ✓
65689ccd446eSAtari911- Admin respects wiki ✓
65699ccd446eSAtari911- Calendar respects calendar theme ✓
65709ccd446eSAtari911
65719ccd446eSAtari911### FINAL PERFECTION
65729ccd446eSAtari911
65739ccd446eSAtari911**Frontend (Calendar)**:
65749ccd446eSAtari911- Complete theming ✓
65759ccd446eSAtari911- 4 beautiful themes ✓
65769ccd446eSAtari911- Every pixel themed ✓
65779ccd446eSAtari911
65789ccd446eSAtari911**Backend (Admin)**:
65799ccd446eSAtari911- Respects wiki theme ✓
65809ccd446eSAtari911- Works with any theme ✓
65819ccd446eSAtari911- Perfect compatibility ✓
65829ccd446eSAtari911
65839ccd446eSAtari911**ABSOLUTELY EVERYTHING THEMED!** ����✨
65849ccd446eSAtari911
65859ccd446eSAtari911## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
65869ccd446eSAtari911
65879ccd446eSAtari911### �� Fixed: Task Checkboxes Now Fully Themed
65889ccd446eSAtari911- **Fixed:** Added background-color and border inline
65899ccd446eSAtari911- **Fixed:** Both PHP and JavaScript versions
65909ccd446eSAtari911- **Result:** No white checkboxes!
65919ccd446eSAtari911
65929ccd446eSAtari911### �� Fixed: Past Events Toggle Border
65939ccd446eSAtari911- **Fixed:** Added !important to border styling
65949ccd446eSAtari911- **Fixed:** Explicit top and bottom borders
65959ccd446eSAtari911- **Result:** No white line under toggle!
65969ccd446eSAtari911
65979ccd446eSAtari911### �� Fixed: Form Field Section Backgrounds
65989ccd446eSAtari911- **Fixed:** All form-field and form-row-group backgrounds
65999ccd446eSAtari911- **Fixed:** Every section in edit dialog
66009ccd446eSAtari911- **Result:** No white sections anywhere!
66019ccd446eSAtari911
66029ccd446eSAtari911### All Changes
66039ccd446eSAtari911
66049ccd446eSAtari911**1. Task Checkbox Styling**:
66059ccd446eSAtari911
66069ccd446eSAtari911**Before**:
66079ccd446eSAtari911```php
66089ccd446eSAtari911style="accent-color: $border !important;"
66099ccd446eSAtari911<!-- Only accent, background still white ✗ -->
66109ccd446eSAtari911```
66119ccd446eSAtari911
66129ccd446eSAtari911**After**:
66139ccd446eSAtari911```php
66149ccd446eSAtari911style="accent-color: $border !important;
66159ccd446eSAtari911       background-color: $cell_bg !important;
66169ccd446eSAtari911       border: 2px solid $grid_border !important;"
66179ccd446eSAtari911<!-- Full theming ✓ -->
66189ccd446eSAtari911```
66199ccd446eSAtari911
66209ccd446eSAtari911**2. Past Events Toggle Border**:
66219ccd446eSAtari911
66229ccd446eSAtari911**Before**:
66239ccd446eSAtari911```php
66249ccd446eSAtari911style="border-color: $grid_border;"
66259ccd446eSAtari911<!-- No !important, CSS overrides ✗ -->
66269ccd446eSAtari911```
66279ccd446eSAtari911
66289ccd446eSAtari911**After**:
66299ccd446eSAtari911```php
66309ccd446eSAtari911style="border-color: $grid_border !important;
66319ccd446eSAtari911       border-top: 1px solid $grid_border !important;
66329ccd446eSAtari911       border-bottom: 1px solid $grid_border !important;"
66339ccd446eSAtari911<!-- Cannot be overridden ✓ -->
66349ccd446eSAtari911```
66359ccd446eSAtari911
66369ccd446eSAtari911**3. Form Field Backgrounds**:
66379ccd446eSAtari911
66389ccd446eSAtari911**Before**:
66399ccd446eSAtari911```html
66409ccd446eSAtari911<div class="form-field">
66419ccd446eSAtari911<div class="form-row-group">
66429ccd446eSAtari911<!-- No background, shows white ✗ -->
66439ccd446eSAtari911```
66449ccd446eSAtari911
66459ccd446eSAtari911**After**:
66469ccd446eSAtari911```php
66479ccd446eSAtari911<div class="form-field" style="background: $bg !important;">
66489ccd446eSAtari911<div class="form-row-group" style="background: $bg !important;">
66499ccd446eSAtari911<!-- Fully themed ✓ -->
66509ccd446eSAtari911```
66519ccd446eSAtari911
66529ccd446eSAtari911### Before vs After
66539ccd446eSAtari911
66549ccd446eSAtari911**BEFORE (v4.8.7)**:
66559ccd446eSAtari911```
66569ccd446eSAtari911Event:
66579ccd446eSAtari911□ Task checkbox  ← White checkbox ✗
66589ccd446eSAtari911
66599ccd446eSAtari911Past Events
66609ccd446eSAtari911▶ Past Events (3) ← White line below ✗
66619ccd446eSAtari911─────────────────
66629ccd446eSAtari911
66639ccd446eSAtari911Edit Dialog:
66649ccd446eSAtari911┌──────────────┐
66659ccd446eSAtari911│ Form fields  │ ← White sections ✗
66669ccd446eSAtari911└──────────────┘
66679ccd446eSAtari911```
66689ccd446eSAtari911
66699ccd446eSAtari911**AFTER (v4.8.8)**:
66709ccd446eSAtari911```
66719ccd446eSAtari911Matrix Event:
66729ccd446eSAtari911☑ Task checkbox  ← Green checkbox ✓
66739ccd446eSAtari911
66749ccd446eSAtari911Past Events
66759ccd446eSAtari911▶ Past Events (3) ← Green border ✓
66769ccd446eSAtari911─────────────────
66779ccd446eSAtari911
66789ccd446eSAtari911Matrix Edit Dialog:
66799ccd446eSAtari911┌──────────────┐
66809ccd446eSAtari911│ Form fields  │ ← Dark green ✓
66819ccd446eSAtari911└──────────────┘
66829ccd446eSAtari911```
66839ccd446eSAtari911
66849ccd446eSAtari911### Complete Examples
66859ccd446eSAtari911
66869ccd446eSAtari911**Matrix Theme**:
66879ccd446eSAtari911```
66889ccd446eSAtari911Task Checkbox:
66899ccd446eSAtari911☑ Checked   → Green checkmark, green bg
66909ccd446eSAtari911☐ Unchecked → Green border, dark green bg ✓
66919ccd446eSAtari911
66929ccd446eSAtari911Past Events Toggle:
66939ccd446eSAtari911▶ Past Events (3)
66949ccd446eSAtari911─────────────────── Green border ✓
66959ccd446eSAtari911
66969ccd446eSAtari911Edit Dialog:
66979ccd446eSAtari911All sections dark green ✓
66989ccd446eSAtari911No white anywhere ✓
66999ccd446eSAtari911```
67009ccd446eSAtari911
67019ccd446eSAtari911**Purple Theme**:
67029ccd446eSAtari911```
67039ccd446eSAtari911Task Checkbox:
67049ccd446eSAtari911☑ Checked   → Purple checkmark, purple bg
67059ccd446eSAtari911☐ Unchecked → Purple border, dark purple bg ✓
67069ccd446eSAtari911
67079ccd446eSAtari911Past Events Toggle:
67089ccd446eSAtari911▶ Past Events (3)
67099ccd446eSAtari911─────────────────── Purple border ✓
67109ccd446eSAtari911
67119ccd446eSAtari911Edit Dialog:
67129ccd446eSAtari911All sections dark purple ✓
67139ccd446eSAtari911```
67149ccd446eSAtari911
67159ccd446eSAtari911**Professional Theme**:
67169ccd446eSAtari911```
67179ccd446eSAtari911Task Checkbox:
67189ccd446eSAtari911☑ Checked   → Blue checkmark, white bg
67199ccd446eSAtari911☐ Unchecked → Gray border, white bg ✓
67209ccd446eSAtari911
67219ccd446eSAtari911Past Events Toggle:
67229ccd446eSAtari911▶ Past Events (3)
67239ccd446eSAtari911─────────────────── Gray border ✓
67249ccd446eSAtari911
67259ccd446eSAtari911Edit Dialog:
67269ccd446eSAtari911All sections light ✓
67279ccd446eSAtari911```
67289ccd446eSAtari911
67299ccd446eSAtari911**Pink Theme**:
67309ccd446eSAtari911```
67319ccd446eSAtari911Task Checkbox:
67329ccd446eSAtari911☑ Checked   → Pink checkmark, pink bg ✨
67339ccd446eSAtari911☐ Unchecked → Pink border, dark pink bg ✓
67349ccd446eSAtari911
67359ccd446eSAtari911Past Events Toggle:
67369ccd446eSAtari911▶ Past Events (3)
67379ccd446eSAtari911─────────────────── Pink border ��
67389ccd446eSAtari911
67399ccd446eSAtari911Edit Dialog:
67409ccd446eSAtari911All sections dark pink ✓
67419ccd446eSAtari911```
67429ccd446eSAtari911
67439ccd446eSAtari911### Checkbox Visual
67449ccd446eSAtari911
67459ccd446eSAtari911**Matrix - Unchecked**:
67469ccd446eSAtari911```
67479ccd446eSAtari911┌─────┐
67489ccd446eSAtari911│     │ ← Dark green background
67499ccd446eSAtari911│     │   Green border
67509ccd446eSAtari911└─────┘
67519ccd446eSAtari911```
67529ccd446eSAtari911
67539ccd446eSAtari911**Matrix - Checked**:
67549ccd446eSAtari911```
67559ccd446eSAtari911┌─────┐
67569ccd446eSAtari911│ ✓   │ ← Dark green background
67579ccd446eSAtari911│     │   Green checkmark
67589ccd446eSAtari911└─────┘
67599ccd446eSAtari911```
67609ccd446eSAtari911
67619ccd446eSAtari911### Past Events Border
67629ccd446eSAtari911
67639ccd446eSAtari911**Before**:
67649ccd446eSAtari911```
67659ccd446eSAtari911▶ Past Events (3)
67669ccd446eSAtari911─────────────────── White line ✗
67679ccd446eSAtari911```
67689ccd446eSAtari911
67699ccd446eSAtari911**After**:
67709ccd446eSAtari911```
67719ccd446eSAtari911▶ Past Events (3)
67729ccd446eSAtari911─────────────────── Green line ✓ (Matrix)
67739ccd446eSAtari911                    Purple line ✓ (Purple)
67749ccd446eSAtari911                    Gray line ✓ (Professional)
67759ccd446eSAtari911                    Pink line ✓ (Pink)
67769ccd446eSAtari911```
67779ccd446eSAtari911
67789ccd446eSAtari911### Form Field Coverage
67799ccd446eSAtari911
67809ccd446eSAtari911**All sections themed**:
67819ccd446eSAtari911- ✅ Title field
67829ccd446eSAtari911- ✅ Namespace field
67839ccd446eSAtari911- ✅ Description field
67849ccd446eSAtari911- ✅ **Date row** ← v4.8.8!
67859ccd446eSAtari911- ✅ **Checkbox sections** ← v4.8.8!
67869ccd446eSAtari911- ✅ **Recurring options** ← v4.8.8!
67879ccd446eSAtari911- ✅ **Time row** ← v4.8.8!
67889ccd446eSAtari911- ✅ **Color row** ← v4.8.8!
67899ccd446eSAtari911- ✅ Button footer
67909ccd446eSAtari911
67919ccd446eSAtari911**Every div has background!** ✓
67929ccd446eSAtari911
67939ccd446eSAtari911### ABSOLUTE PERFECTION
67949ccd446eSAtari911
67959ccd446eSAtari911**Not a single white pixel**:
67969ccd446eSAtari911- ✅ No white checkboxes
67979ccd446eSAtari911- ✅ No white borders
67989ccd446eSAtari911- ✅ No white backgrounds
67999ccd446eSAtari911- ✅ No white sections
68009ccd446eSAtari911- ✅ No white lines
68019ccd446eSAtari911- ✅ No white anything
68029ccd446eSAtari911
68039ccd446eSAtari911**100% PERFECT THEMING!** ����✨
68049ccd446eSAtari911
68059ccd446eSAtari911## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING
68069ccd446eSAtari911
68079ccd446eSAtari911### �� Fixed: Checkbox Section Backgrounds Themed
68089ccd446eSAtari911- **Fixed:** Repeating Event section background
68099ccd446eSAtari911- **Fixed:** Task checkbox section background
68109ccd446eSAtari911- **Result:** No white backgrounds in dialog!
68119ccd446eSAtari911
68129ccd446eSAtari911### �� Fixed: Unchecked Task Checkboxes Themed
68139ccd446eSAtari911- **Fixed:** Added CSS for checkbox backgrounds
68149ccd446eSAtari911- **Fixed:** Unchecked boxes show theme colors
68159ccd446eSAtari911- **Result:** No white checkboxes!
68169ccd446eSAtari911
68179ccd446eSAtari911### �� Fixed: Day Popup Dialog Fully Themed
68189ccd446eSAtari911- **Fixed:** Popup container, header, body themed
68199ccd446eSAtari911- **Fixed:** Event items in popup themed
68209ccd446eSAtari911- **Fixed:** Add Event button themed
68219ccd446eSAtari911- **Fixed:** Footer section themed
68229ccd446eSAtari911- **Result:** Perfect popup theming!
68239ccd446eSAtari911
68249ccd446eSAtari911### All Changes
68259ccd446eSAtari911
68269ccd446eSAtari911**1. Checkbox Section Backgrounds**:
68279ccd446eSAtari911
68289ccd446eSAtari911**Before**:
68299ccd446eSAtari911```html
68309ccd446eSAtari911<div class="form-field-checkbox">
68319ccd446eSAtari911<!-- White background ✗ -->
68329ccd446eSAtari911```
68339ccd446eSAtari911
68349ccd446eSAtari911**After**:
68359ccd446eSAtari911```php
68369ccd446eSAtari911<div class="form-field-checkbox"
68379ccd446eSAtari911     style="background: $bg !important;">
68389ccd446eSAtari911<!-- Themed ✓ -->
68399ccd446eSAtari911```
68409ccd446eSAtari911
68419ccd446eSAtari911**2. Checkbox Background CSS**:
68429ccd446eSAtari911
68439ccd446eSAtari911**Added to style block**:
68449ccd446eSAtari911```css
68459ccd446eSAtari911.task-checkbox {
68469ccd446eSAtari911    background-color: $cell_bg !important;
68479ccd446eSAtari911    border: 2px solid $grid_border !important;
68489ccd446eSAtari911}
68499ccd446eSAtari911```
68509ccd446eSAtari911
68519ccd446eSAtari911**3. Day Popup Theming**:
68529ccd446eSAtari911
68539ccd446eSAtari911**Container**:
68549ccd446eSAtari911```javascript
68559ccd446eSAtari911style="background: $bg !important;
68569ccd446eSAtari911       border: 2px solid $border !important;
68579ccd446eSAtari911       box-shadow: 0 0 20px $shadow !important;"
68589ccd446eSAtari911```
68599ccd446eSAtari911
68609ccd446eSAtari911**Header**:
68619ccd446eSAtari911```javascript
68629ccd446eSAtari911style="background: $header_bg !important;
68639ccd446eSAtari911       color: $text_primary !important;
68649ccd446eSAtari911       border-bottom: 1px solid $border !important;"
68659ccd446eSAtari911```
68669ccd446eSAtari911
68679ccd446eSAtari911**Footer**:
68689ccd446eSAtari911```javascript
68699ccd446eSAtari911style="background: $bg !important;
68709ccd446eSAtari911       border-top: 1px solid $grid_border !important;"
68719ccd446eSAtari911```
68729ccd446eSAtari911
68739ccd446eSAtari911**Add Event Button**:
68749ccd446eSAtari911```javascript
68759ccd446eSAtari911style="background: $border !important;
68769ccd446eSAtari911       color: $bg !important;
68779ccd446eSAtari911       border-color: $border !important;"
68789ccd446eSAtari911```
68799ccd446eSAtari911
68809ccd446eSAtari911**Event Items**:
68819ccd446eSAtari911```javascript
68829ccd446eSAtari911style="background: $cell_bg !important;
68839ccd446eSAtari911       border: 1px solid $grid_border !important;"
68849ccd446eSAtari911```
68859ccd446eSAtari911
68869ccd446eSAtari911### Before vs After
68879ccd446eSAtari911
68889ccd446eSAtari911**BEFORE (v4.8.6)**:
68899ccd446eSAtari911```
68909ccd446eSAtari911Edit Dialog:
68919ccd446eSAtari911┌──────────────────┐
68929ccd446eSAtari911│ ☑ Repeating Event│ ← White background ✗
68939ccd446eSAtari911├──────────────────┤
68949ccd446eSAtari911│ ☑ Task checkbox  │ ← White background ✗
68959ccd446eSAtari911└──────────────────┘
68969ccd446eSAtari911
68979ccd446eSAtari911Day Popup:
68989ccd446eSAtari911┌──────────────────┐
68999ccd446eSAtari911│ Monday, Feb 8    │ ← White ✗
69009ccd446eSAtari911├──────────────────┤
69019ccd446eSAtari911│ Team Meeting     │ ← White ✗
69029ccd446eSAtari911│ 2:00 PM          │
69039ccd446eSAtari911├──────────────────┤
69049ccd446eSAtari911│ [+ Add Event]    │ ← White ✗
69059ccd446eSAtari911└──────────────────┘
69069ccd446eSAtari911
69079ccd446eSAtari911Task checkbox: ☐ ← White ✗
69089ccd446eSAtari911```
69099ccd446eSAtari911
69109ccd446eSAtari911**AFTER (v4.8.7)**:
69119ccd446eSAtari911```
69129ccd446eSAtari911Edit Dialog (Matrix):
69139ccd446eSAtari911┌──────────────────┐
69149ccd446eSAtari911│ ☑ Repeating Event│ ← Dark green ✓
69159ccd446eSAtari911├──────────────────┤
69169ccd446eSAtari911│ ☑ Task checkbox  │ ← Dark green ✓
69179ccd446eSAtari911└──────────────────┘
69189ccd446eSAtari911
69199ccd446eSAtari911Day Popup (Matrix):
69209ccd446eSAtari911┌──────────────────┐
69219ccd446eSAtari911│ Monday, Feb 8    │ ← Dark green ✓
69229ccd446eSAtari911├──────────────────┤
69239ccd446eSAtari911│ Team Meeting     │ ← Dark green ✓
69249ccd446eSAtari911│ 2:00 PM          │
69259ccd446eSAtari911├──────────────────┤
69269ccd446eSAtari911│ [+ Add Event]    │ ← Green button ✓
69279ccd446eSAtari911└──────────────────┘
69289ccd446eSAtari911
69299ccd446eSAtari911Task checkbox: ☑ ← Green ✓
69309ccd446eSAtari911```
69319ccd446eSAtari911
69329ccd446eSAtari911### Complete Examples
69339ccd446eSAtari911
69349ccd446eSAtari911**Matrix Dialog**:
69359ccd446eSAtari911```
69369ccd446eSAtari911┌──────────────────────────┐
69379ccd446eSAtari911│ ✏️ Edit Event            │
69389ccd446eSAtari911├──────────────────────────┤
69399ccd446eSAtari911│ �� Title: [_________]    │
69409ccd446eSAtari911│ �� Date: [__________]    │
69419ccd446eSAtari911│                          │
69429ccd446eSAtari911│ ☑ �� Repeating Event     │ ← Dark green bg
69439ccd446eSAtari911├──────────────────────────┤
69449ccd446eSAtari911│ ☑ �� Task checkbox       │ ← Dark green bg
69459ccd446eSAtari911├──────────────────────────┤
69469ccd446eSAtari911│ [Cancel] [�� Save]       │
69479ccd446eSAtari911└──────────────────────────┘
69489ccd446eSAtari911
69499ccd446eSAtari911All sections themed! ✓
69509ccd446eSAtari911```
69519ccd446eSAtari911
69529ccd446eSAtari911**Matrix Day Popup**:
69539ccd446eSAtari911```
69549ccd446eSAtari911┌──────────────────────────┐
69559ccd446eSAtari911│ Monday, February 8, 2026 │ ← Green header
69569ccd446eSAtari911├──────────────────────────┤
69579ccd446eSAtari911│ ┌──────────────────────┐ │
69589ccd446eSAtari911│ │ Team Meeting         │ │ ← Dark green
69599ccd446eSAtari911│ │ �� 2:00 PM           │ │
69609ccd446eSAtari911│ └──────────────────────┘ │
69619ccd446eSAtari911│ ┌──────────────────────┐ │
69629ccd446eSAtari911│ │ Code Review          │ │ ← Dark green
69639ccd446eSAtari911│ │ �� 4:00 PM           │ │
69649ccd446eSAtari911│ └──────────────────────┘ │
69659ccd446eSAtari911├──────────────────────────┤
69669ccd446eSAtari911│   [+ Add Event]          │ ← Green button
69679ccd446eSAtari911└──────────────────────────┘
69689ccd446eSAtari911```
69699ccd446eSAtari911
69709ccd446eSAtari911**Purple Day Popup**:
69719ccd446eSAtari911```
69729ccd446eSAtari911┌──────────────────────────┐
69739ccd446eSAtari911│ Monday, February 8, 2026 │ ← Purple header
69749ccd446eSAtari911├──────────────────────────┤
69759ccd446eSAtari911│ ┌──────────────────────┐ │
69769ccd446eSAtari911│ │ Team Meeting         │ │ ← Dark purple
69779ccd446eSAtari911│ │ �� 2:00 PM           │ │
69789ccd446eSAtari911│ └──────────────────────┘ │
69799ccd446eSAtari911├──────────────────────────┤
69809ccd446eSAtari911│   [+ Add Event]          │ ← Purple button
69819ccd446eSAtari911└──────────────────────────┘
69829ccd446eSAtari911```
69839ccd446eSAtari911
69849ccd446eSAtari911**Professional Day Popup**:
69859ccd446eSAtari911```
69869ccd446eSAtari911┌──────────────────────────┐
69879ccd446eSAtari911│ Monday, February 8, 2026 │ ← Light header
69889ccd446eSAtari911├──────────────────────────┤
69899ccd446eSAtari911│ ┌──────────────────────┐ │
69909ccd446eSAtari911│ │ Team Meeting         │ │ ← White
69919ccd446eSAtari911│ │ �� 2:00 PM           │ │
69929ccd446eSAtari911│ └──────────────────────┘ │
69939ccd446eSAtari911├──────────────────────────┤
69949ccd446eSAtari911│   [+ Add Event]          │ ← Blue button
69959ccd446eSAtari911└──────────────────────────┘
69969ccd446eSAtari911```
69979ccd446eSAtari911
69989ccd446eSAtari911**Pink Day Popup**:
69999ccd446eSAtari911```
70009ccd446eSAtari911┌──────────────────────────┐
70019ccd446eSAtari911│ Monday, February 8, 2026 │ ← Pink header ✨
70029ccd446eSAtari911├──────────────────────────┤
70039ccd446eSAtari911│ ┌──────────────────────┐ │
70049ccd446eSAtari911│ │ Team Meeting ��      │ │ ← Dark pink
70059ccd446eSAtari911│ │ �� 2:00 PM           │ │
70069ccd446eSAtari911│ └──────────────────────┘ │
70079ccd446eSAtari911├──────────────────────────┤
70089ccd446eSAtari911│   [+ Add Event]          │ ← Pink button
70099ccd446eSAtari911└──────────────────────────┘
70109ccd446eSAtari911```
70119ccd446eSAtari911
70129ccd446eSAtari911### Checkbox Theming
70139ccd446eSAtari911
70149ccd446eSAtari911**Unchecked boxes now themed**:
70159ccd446eSAtari911```
70169ccd446eSAtari911Matrix:
70179ccd446eSAtari911☐ → Dark green bg, green border ✓
70189ccd446eSAtari911
70199ccd446eSAtari911Purple:
70209ccd446eSAtari911☐ → Dark purple bg, purple border ✓
70219ccd446eSAtari911
70229ccd446eSAtari911Professional:
70239ccd446eSAtari911☐ → White bg, gray border ✓
70249ccd446eSAtari911
70259ccd446eSAtari911Pink:
70269ccd446eSAtari911☐ → Dark pink bg, pink border ✓
70279ccd446eSAtari911```
70289ccd446eSAtari911
70299ccd446eSAtari911### Complete Coverage
70309ccd446eSAtari911
70319ccd446eSAtari911**Edit Dialog - All Sections**:
70329ccd446eSAtari911- ✅ Header
70339ccd446eSAtari911- ✅ All inputs
70349ccd446eSAtari911- ✅ All labels
70359ccd446eSAtari911- ✅ **Checkbox sections** ← v4.8.7!
70369ccd446eSAtari911- ✅ Recurring options
70379ccd446eSAtari911- ✅ Button footer
70389ccd446eSAtari911- ✅ All checkboxes (checked & unchecked)
70399ccd446eSAtari911
70409ccd446eSAtari911**Day Popup - All Elements**:
70419ccd446eSAtari911- ✅ **Popup container** ← v4.8.7!
70429ccd446eSAtari911- ✅ **Header** ← v4.8.7!
70439ccd446eSAtari911- ✅ **Body** ← v4.8.7!
70449ccd446eSAtari911- ✅ **Event items** ← v4.8.7!
70459ccd446eSAtari911- ✅ **Namespace badges** ← v4.8.7!
70469ccd446eSAtari911- ✅ **Footer** ← v4.8.7!
70479ccd446eSAtari911- ✅ **Add Event button** ← v4.8.7!
70489ccd446eSAtari911- ✅ **No events message** ← v4.8.7!
70499ccd446eSAtari911
70509ccd446eSAtari911**Absolutely every dialog element themed!** ��✨
70519ccd446eSAtari911
70529ccd446eSAtari911### Perfect Theming Achievement
70539ccd446eSAtari911
70549ccd446eSAtari911**Every UI component in entire plugin**:
70559ccd446eSAtari911- ✅ Calendar grid
70569ccd446eSAtari911- ✅ Sidebar widget
70579ccd446eSAtari911- ✅ Event list
70589ccd446eSAtari911- ✅ Search bar
70599ccd446eSAtari911- ✅ Event boxes
70609ccd446eSAtari911- ✅ Edit dialog (complete)
70619ccd446eSAtari911- ✅ **Day popup** ← v4.8.7!
70629ccd446eSAtari911- ✅ Month picker
70639ccd446eSAtari911- ✅ All text
70649ccd446eSAtari911- ✅ All buttons
70659ccd446eSAtari911- ✅ All inputs
70669ccd446eSAtari911- ✅ **All checkboxes** ← v4.8.7!
70679ccd446eSAtari911- ✅ All borders
70689ccd446eSAtari911- ✅ All badges
70699ccd446eSAtari911- ✅ All backgrounds
70709ccd446eSAtari911
70719ccd446eSAtari911**NO WHITE ANYWHERE!** ��
70729ccd446eSAtari911
70739ccd446eSAtari911**100% COMPLETE THEMING ACHIEVED!** ��✨��
70749ccd446eSAtari911
70759ccd446eSAtari911## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS
70769ccd446eSAtari911
70779ccd446eSAtari911### �� Fixed: Dialog Checkbox Sections Themed
70789ccd446eSAtari911- **Fixed:** Recurring options section background themed
70799ccd446eSAtari911- **Fixed:** Section has themed border accent
70809ccd446eSAtari911- **Result:** No white sections in dialog!
70819ccd446eSAtari911
70829ccd446eSAtari911### �� Fixed: Dialog Button Section Themed
70839ccd446eSAtari911- **Fixed:** Button area background themed
70849ccd446eSAtari911- **Fixed:** Top border separator themed
70859ccd446eSAtari911- **Result:** Complete dialog theming!
70869ccd446eSAtari911
70879ccd446eSAtari911### �� Fixed: Event Box Borders Themed
70889ccd446eSAtari911- **Fixed:** Top, right, bottom borders now themed
70899ccd446eSAtari911- **Fixed:** Left border remains event color
70909ccd446eSAtari911- **Result:** Perfect event boxes!
70919ccd446eSAtari911
70929ccd446eSAtari911### All Changes
70939ccd446eSAtari911
70949ccd446eSAtari911**1. Recurring Options Section**:
70959ccd446eSAtari911
70969ccd446eSAtari911**Before**:
70979ccd446eSAtari911```html
70989ccd446eSAtari911<div class="recurring-options" style="display:none;">
70999ccd446eSAtari911<!-- White background ✗ -->
71009ccd446eSAtari911```
71019ccd446eSAtari911
71029ccd446eSAtari911**After**:
71039ccd446eSAtari911```php
71049ccd446eSAtari911<div class="recurring-options"
71059ccd446eSAtari911     style="display:none;
71069ccd446eSAtari911            background: $bg !important;
71079ccd446eSAtari911            padding: 8px;
71089ccd446eSAtari911            border-left: 2px solid $border;
71099ccd446eSAtari911            margin-left: 4px;">
71109ccd446eSAtari911<!-- Themed with accent border ✓ -->
71119ccd446eSAtari911```
71129ccd446eSAtari911
71139ccd446eSAtari911**2. Dialog Actions Section**:
71149ccd446eSAtari911
71159ccd446eSAtari911**Before**:
71169ccd446eSAtari911```html
71179ccd446eSAtari911<div class="dialog-actions-sleek">
71189ccd446eSAtari911<!-- White background ✗ -->
71199ccd446eSAtari911```
71209ccd446eSAtari911
71219ccd446eSAtari911**After**:
71229ccd446eSAtari911```php
71239ccd446eSAtari911<div class="dialog-actions-sleek"
71249ccd446eSAtari911     style="background: $bg !important;
71259ccd446eSAtari911            border-top: 1px solid $grid_border !important;">
71269ccd446eSAtari911<!-- Themed with separator ✓ -->
71279ccd446eSAtari911```
71289ccd446eSAtari911
71299ccd446eSAtari911**3. Event Box Borders**:
71309ccd446eSAtari911
71319ccd446eSAtari911**Before**:
71329ccd446eSAtari911```php
71339ccd446eSAtari911border-left-color: $event_color;
71349ccd446eSAtari911<!-- Only left border colored ✗ -->
71359ccd446eSAtari911```
71369ccd446eSAtari911
71379ccd446eSAtari911**After**:
71389ccd446eSAtari911```php
71399ccd446eSAtari911border-left-color: $event_color;
71409ccd446eSAtari911border-top: 1px solid $grid_border !important;
71419ccd446eSAtari911border-right: 1px solid $grid_border !important;
71429ccd446eSAtari911border-bottom: 1px solid $grid_border !important;
71439ccd446eSAtari911<!-- All borders themed! ✓ -->
71449ccd446eSAtari911```
71459ccd446eSAtari911
71469ccd446eSAtari911### Before vs After
71479ccd446eSAtari911
71489ccd446eSAtari911**BEFORE (v4.8.5)**:
71499ccd446eSAtari911```
71509ccd446eSAtari911Dialog:
71519ccd446eSAtari911┌────────────────┐
71529ccd446eSAtari911│ ☑ Repeating    │
71539ccd446eSAtari911├────────────────┤ ← White section ✗
71549ccd446eSAtari911│ Repeat: Daily  │
71559ccd446eSAtari911│ Until: [____]  │
71569ccd446eSAtari911├────────────────┤
71579ccd446eSAtari911│ [Cancel] [Save]│ ← White footer ✗
71589ccd446eSAtari911└────────────────┘
71599ccd446eSAtari911
71609ccd446eSAtari911Event Box:
71619ccd446eSAtari911┌────────────┐
71629ccd446eSAtari911│Team Meeting│ ← White borders ✗
71639ccd446eSAtari911│2:00 PM     │
71649ccd446eSAtari911└────────────┘
71659ccd446eSAtari911```
71669ccd446eSAtari911
71679ccd446eSAtari911**AFTER (v4.8.6)**:
71689ccd446eSAtari911```
71699ccd446eSAtari911Matrix Dialog:
71709ccd446eSAtari911┌────────────────┐
71719ccd446eSAtari911│ ☑ Repeating    │
71729ccd446eSAtari911├────────────────┤ ← Dark green ✓
71739ccd446eSAtari911│ Repeat: Daily  │ Green accent border
71749ccd446eSAtari911│ Until: [____]  │
71759ccd446eSAtari911├────────────────┤
71769ccd446eSAtari911│ [Cancel] [Save]│ ← Dark green ✓
71779ccd446eSAtari911└────────────────┘
71789ccd446eSAtari911
71799ccd446eSAtari911Matrix Event Box:
71809ccd446eSAtari911┌────────────┐
71819ccd446eSAtari911│Team Meeting│ ← Green borders ✓
71829ccd446eSAtari911│2:00 PM     │
71839ccd446eSAtari911└────────────┘
71849ccd446eSAtari911```
71859ccd446eSAtari911
71869ccd446eSAtari911### Dialog Section Examples
71879ccd446eSAtari911
71889ccd446eSAtari911**Matrix Theme**:
71899ccd446eSAtari911```
71909ccd446eSAtari911┌──────────────────────────┐
71919ccd446eSAtari911│ ✏️ Edit Event            │
71929ccd446eSAtari911├──────────────────────────┤
71939ccd446eSAtari911│ ☑ �� Repeating Event     │
71949ccd446eSAtari911├║─────────────────────────┤ Green accent
71959ccd446eSAtari911│║ Repeat Every: Daily     │ Dark green bg
71969ccd446eSAtari911│║ Repeat Until: [_____]   │
71979ccd446eSAtari911└──────────────────────────┘
71989ccd446eSAtari911  [Cancel] [�� Save]       ← Dark green bg
71999ccd446eSAtari911──────────────────────────── Green border
72009ccd446eSAtari911```
72019ccd446eSAtari911
72029ccd446eSAtari911**Purple Theme**:
72039ccd446eSAtari911```
72049ccd446eSAtari911┌──────────────────────────┐
72059ccd446eSAtari911│ ☑ �� Repeating Event     │
72069ccd446eSAtari911├║─────────────────────────┤ Purple accent
72079ccd446eSAtari911│║ Repeat options...       │ Dark purple bg
72089ccd446eSAtari911└──────────────────────────┘
72099ccd446eSAtari911  [Cancel] [�� Save]       ← Dark purple bg
72109ccd446eSAtari911──────────────────────────── Purple border
72119ccd446eSAtari911```
72129ccd446eSAtari911
72139ccd446eSAtari911**Professional Theme**:
72149ccd446eSAtari911```
72159ccd446eSAtari911┌──────────────────────────┐
72169ccd446eSAtari911│ ☑ �� Repeating Event     │
72179ccd446eSAtari911├║─────────────────────────┤ Blue accent
72189ccd446eSAtari911│║ Repeat options...       │ Light bg
72199ccd446eSAtari911└──────────────────────────┘
72209ccd446eSAtari911  [Cancel] [�� Save]       ← Light bg
72219ccd446eSAtari911──────────────────────────── Gray border
72229ccd446eSAtari911```
72239ccd446eSAtari911
72249ccd446eSAtari911**Pink Theme**:
72259ccd446eSAtari911```
72269ccd446eSAtari911┌──────────────────────────┐
72279ccd446eSAtari911│ ☑ �� Repeating Event ✨  │
72289ccd446eSAtari911├║─────────────────────────┤ Pink accent
72299ccd446eSAtari911│║ Repeat options...       │ Dark pink bg ��
72309ccd446eSAtari911└──────────────────────────┘
72319ccd446eSAtari911  [Cancel] [�� Save]       ← Dark pink bg
72329ccd446eSAtari911──────────────────────────── Pink border
72339ccd446eSAtari911```
72349ccd446eSAtari911
72359ccd446eSAtari911### Event Box Border Visual
72369ccd446eSAtari911
72379ccd446eSAtari911**Before (v4.8.5)**:
72389ccd446eSAtari911```
72399ccd446eSAtari911Left border only:
72409ccd446eSAtari911█ Team Meeting
72419ccd446eSAtari911█ 2:00 PM
72429ccd446eSAtari911█ [Edit] [Delete]
72439ccd446eSAtari911
72449ccd446eSAtari911Only event color on left ✗
72459ccd446eSAtari911White on other 3 sides ✗
72469ccd446eSAtari911```
72479ccd446eSAtari911
72489ccd446eSAtari911**After (v4.8.6)**:
72499ccd446eSAtari911```
72509ccd446eSAtari911All borders themed:
72519ccd446eSAtari911┌─────────────┐
72529ccd446eSAtari911█Team Meeting │ ← Top: themed
72539ccd446eSAtari911█2:00 PM      │ ← Right: themed
72549ccd446eSAtari911█[Edit][Del]  │ ← Bottom: themed
72559ccd446eSAtari911└─────────────┘
72569ccd446eSAtari911
72579ccd446eSAtari911Left: Event color ✓
72589ccd446eSAtari911Other 3: Theme grid_border ✓
72599ccd446eSAtari911```
72609ccd446eSAtari911
72619ccd446eSAtari911### Matrix Event Box:
72629ccd446eSAtari911```
72639ccd446eSAtari911┌─────────────┐ Green border
72649ccd446eSAtari911│Team Meeting │
72659ccd446eSAtari911│2:00 PM      │
72669ccd446eSAtari911└─────────────┘ Green border
72679ccd446eSAtari91172689ccd446eSAtari911Green left bar
72699ccd446eSAtari911```
72709ccd446eSAtari911
72719ccd446eSAtari911### Purple Event Box:
72729ccd446eSAtari911```
72739ccd446eSAtari911┌─────────────┐ Purple border
72749ccd446eSAtari911│Team Meeting │
72759ccd446eSAtari911│2:00 PM      │
72769ccd446eSAtari911└─────────────┘ Purple border
72779ccd446eSAtari91172789ccd446eSAtari911Purple left bar
72799ccd446eSAtari911```
72809ccd446eSAtari911
72819ccd446eSAtari911### Professional Event Box:
72829ccd446eSAtari911```
72839ccd446eSAtari911┌─────────────┐ Gray border
72849ccd446eSAtari911│Team Meeting │
72859ccd446eSAtari911│2:00 PM      │
72869ccd446eSAtari911└─────────────┘ Gray border
72879ccd446eSAtari91172889ccd446eSAtari911Event color left bar
72899ccd446eSAtari911```
72909ccd446eSAtari911
72919ccd446eSAtari911### Complete Dialog Coverage
72929ccd446eSAtari911
72939ccd446eSAtari911**All sections themed**:
72949ccd446eSAtari911- ✅ Dialog header
72959ccd446eSAtari911- ✅ Form inputs
72969ccd446eSAtari911- ✅ Checkbox labels
72979ccd446eSAtari911- ✅ **Recurring options** ← v4.8.6!
72989ccd446eSAtari911- ✅ **Button section** ← v4.8.6!
72999ccd446eSAtari911- ✅ All labels
73009ccd446eSAtari911- ✅ All buttons
73019ccd446eSAtari911
73029ccd446eSAtari911**No white sections!** ✓
73039ccd446eSAtari911
73049ccd446eSAtari911### Complete Event Box Coverage
73059ccd446eSAtari911
73069ccd446eSAtari911**All borders themed**:
73079ccd446eSAtari911- ✅ Left border (event color)
73089ccd446eSAtari911- ✅ **Top border** ← v4.8.6!
73099ccd446eSAtari911- ✅ **Right border** ← v4.8.6!
73109ccd446eSAtari911- ✅ **Bottom border** ← v4.8.6!
73119ccd446eSAtari911- ✅ Background
73129ccd446eSAtari911- ✅ Text
73139ccd446eSAtari911
73149ccd446eSAtari911**Perfect box outline!** ✓
73159ccd446eSAtari911
73169ccd446eSAtari911### Visual Perfection
73179ccd446eSAtari911
73189ccd446eSAtari911**Matrix theme event list**:
73199ccd446eSAtari911```
73209ccd446eSAtari911┌─────────────┐
73219ccd446eSAtari911│Team Meeting │ ← Green box
73229ccd446eSAtari911│2:00 PM      │
73239ccd446eSAtari911└─────────────┘
73249ccd446eSAtari911┌─────────────┐
73259ccd446eSAtari911│Code Review  │ ← Green box
73269ccd446eSAtari911│4:00 PM      │
73279ccd446eSAtari911└─────────────┘
73289ccd446eSAtari911
73299ccd446eSAtari911All borders green! ✓
73309ccd446eSAtari911```
73319ccd446eSAtari911
73329ccd446eSAtari911**ABSOLUTE PERFECT THEMING!** ��✨
73339ccd446eSAtari911
73349ccd446eSAtari911## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS
73359ccd446eSAtari911
73369ccd446eSAtari911### �� Fixed: Event Dialog Fully Themed
73379ccd446eSAtari911- **Fixed:** Dialog background, header, inputs all themed
73389ccd446eSAtari911- **Fixed:** All labels, checkboxes, selects themed
73399ccd446eSAtari911- **Fixed:** Save and Cancel buttons themed
73409ccd446eSAtari911- **Result:** Dialog matches theme perfectly!
73419ccd446eSAtari911
73429ccd446eSAtari911### �� Fixed: Sidebar Event Borders Properly Themed
73439ccd446eSAtari911- **Fixed:** Event divider borders use grid_border color
73449ccd446eSAtari911- **Fixed:** Clean, subtle themed dividers
73459ccd446eSAtari911- **Result:** No more white borders in sidebar!
73469ccd446eSAtari911
73479ccd446eSAtari911### All Changes
73489ccd446eSAtari911
73499ccd446eSAtari911**1. Event Dialog Theming**:
73509ccd446eSAtari911
73519ccd446eSAtari911**Dialog container**:
73529ccd446eSAtari911```php
73539ccd446eSAtari911background: $themeStyles['bg'] !important;
73549ccd446eSAtari911border: 2px solid $themeStyles['border'] !important;
73559ccd446eSAtari911box-shadow: 0 0 20px $shadow !important;
73569ccd446eSAtari911```
73579ccd446eSAtari911
73589ccd446eSAtari911**Dialog header**:
73599ccd446eSAtari911```php
73609ccd446eSAtari911background: $themeStyles['header_bg'] !important;
73619ccd446eSAtari911color: $themeStyles['text_primary'] !important;
73629ccd446eSAtari911border-bottom: 1px solid $border !important;
73639ccd446eSAtari911```
73649ccd446eSAtari911
73659ccd446eSAtari911**All form inputs** (text, date, select, textarea):
73669ccd446eSAtari911```php
73679ccd446eSAtari911background: $themeStyles['cell_bg'] !important;
73689ccd446eSAtari911color: $themeStyles['text_primary'] !important;
73699ccd446eSAtari911border-color: $themeStyles['grid_border'] !important;
73709ccd446eSAtari911```
73719ccd446eSAtari911
73729ccd446eSAtari911**All labels**:
73739ccd446eSAtari911```php
73749ccd446eSAtari911color: $themeStyles['text_primary'] !important;
73759ccd446eSAtari911```
73769ccd446eSAtari911
73779ccd446eSAtari911**Checkboxes**:
73789ccd446eSAtari911```php
73799ccd446eSAtari911accent-color: $themeStyles['border'] !important;
73809ccd446eSAtari911```
73819ccd446eSAtari911
73829ccd446eSAtari911**Buttons**:
73839ccd446eSAtari911```php
73849ccd446eSAtari911// Cancel button:
73859ccd446eSAtari911background: $cell_bg !important;
73869ccd446eSAtari911color: $text_primary !important;
73879ccd446eSAtari911
73889ccd446eSAtari911// Save button:
73899ccd446eSAtari911background: $border !important;
73909ccd446eSAtari911color: $bg !important; (or white for professional)
73919ccd446eSAtari911```
73929ccd446eSAtari911
73939ccd446eSAtari911**2. Sidebar Event Borders**:
73949ccd446eSAtari911
73959ccd446eSAtari911**Before**:
73969ccd446eSAtari911```php
73979ccd446eSAtari911border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded
73989ccd446eSAtari911```
73999ccd446eSAtari911
74009ccd446eSAtari911**After**:
74019ccd446eSAtari911```php
74029ccd446eSAtari911borderColor = $themeStyles['grid_border'];
74039ccd446eSAtari911border-bottom: 1px solid $borderColor !important;
74049ccd446eSAtari911```
74059ccd446eSAtari911
74069ccd446eSAtari911### Before vs After
74079ccd446eSAtari911
74089ccd446eSAtari911**BEFORE (v4.8.4)**:
74099ccd446eSAtari911```
74109ccd446eSAtari911Event Dialog:
74119ccd446eSAtari911┌────────────────┐
74129ccd446eSAtari911│ Add Event      │ ← White background ✗
74139ccd446eSAtari911│ Title: [_____] │ ← White inputs ✗
74149ccd446eSAtari911│ Date:  [_____] │
74159ccd446eSAtari911│ [Cancel] [Save]│ ← Default buttons ✗
74169ccd446eSAtari911└────────────────┘
74179ccd446eSAtari911
74189ccd446eSAtari911Sidebar Events:
74199ccd446eSAtari911Event 1 ────────  ← White border ✗
74209ccd446eSAtari911Event 2 ────────  ← White border ✗
74219ccd446eSAtari911```
74229ccd446eSAtari911
74239ccd446eSAtari911**AFTER (v4.8.5)**:
74249ccd446eSAtari911```
74259ccd446eSAtari911Event Dialog (Matrix):
74269ccd446eSAtari911┌────────────────┐
74279ccd446eSAtari911│ Add Event      │ ← Dark green background ✓
74289ccd446eSAtari911│ Title: [_____] │ ← Dark green inputs ✓
74299ccd446eSAtari911│ Date:  [_____] │ ← Green text ✓
74309ccd446eSAtari911│ [Cancel] [Save]│ ← Themed buttons ✓
74319ccd446eSAtari911└────────────────┘
74329ccd446eSAtari911
74339ccd446eSAtari911Sidebar Events (Matrix):
74349ccd446eSAtari911Event 1 ────────  ← Green border ✓
74359ccd446eSAtari911Event 2 ────────  ← Green border ✓
74369ccd446eSAtari911```
74379ccd446eSAtari911
74389ccd446eSAtari911### Dialog Examples by Theme
74399ccd446eSAtari911
74409ccd446eSAtari911**Matrix Dialog**:
74419ccd446eSAtari911```
74429ccd446eSAtari911┌──────────────────────────┐
74439ccd446eSAtari911│ ✏️ Edit Event            │ ← Dark green header
74449ccd446eSAtari911├──────────────────────────┤
74459ccd446eSAtari911│ �� Title                 │ ← Green labels
74469ccd446eSAtari911│ [Team Meeting________]   │ ← Dark green input
74479ccd446eSAtari911│                          │
74489ccd446eSAtari911│ �� Start Date            │
74499ccd446eSAtari911│ [2026-02-08__]           │ ← Dark green input
74509ccd446eSAtari911│                          │
74519ccd446eSAtari911│ �� Start Time            │
74529ccd446eSAtari911│ [2:00 PM ▼]              │ ← Green select
74539ccd446eSAtari911│                          │
74549ccd446eSAtari911│ ☑ �� Repeating Event     │ ← Green checkbox
74559ccd446eSAtari911│                          │
74569ccd446eSAtari911│ [Cancel] [�� Save]       │ ← Themed buttons
74579ccd446eSAtari911└──────────────────────────┘
74589ccd446eSAtari911
74599ccd446eSAtari911Everything green! ✓
74609ccd446eSAtari911```
74619ccd446eSAtari911
74629ccd446eSAtari911**Purple Dialog**:
74639ccd446eSAtari911```
74649ccd446eSAtari911┌──────────────────────────┐
74659ccd446eSAtari911│ ✏️ Edit Event            │ ← Dark purple header
74669ccd446eSAtari911├──────────────────────────┤
74679ccd446eSAtari911│ [Inputs_______________]  │ ← Dark purple inputs
74689ccd446eSAtari911│ ☑ Checkboxes             │ ← Purple accent
74699ccd446eSAtari911│ [Cancel] [�� Save]       │ ← Purple buttons
74709ccd446eSAtari911└──────────────────────────┘
74719ccd446eSAtari911```
74729ccd446eSAtari911
74739ccd446eSAtari911**Professional Dialog**:
74749ccd446eSAtari911```
74759ccd446eSAtari911┌──────────────────────────┐
74769ccd446eSAtari911│ ✏️ Edit Event            │ ← Light gradient header
74779ccd446eSAtari911├──────────────────────────┤
74789ccd446eSAtari911│ [Inputs_______________]  │ ← White inputs
74799ccd446eSAtari911│ ☑ Checkboxes             │ ← Blue accent
74809ccd446eSAtari911│ [Cancel] [�� Save]       │ ← Blue save button
74819ccd446eSAtari911└──────────────────────────┘
74829ccd446eSAtari911```
74839ccd446eSAtari911
74849ccd446eSAtari911**Pink Dialog**:
74859ccd446eSAtari911```
74869ccd446eSAtari911┌──────────────────────────┐
74879ccd446eSAtari911│ ✏️ Edit Event            │ ← Dark pink header ✨
74889ccd446eSAtari911├──────────────────────────┤
74899ccd446eSAtari911│ [Inputs_______________]  │ ← Dark pink inputs ��
74909ccd446eSAtari911│ ☑ Checkboxes             │ ← Pink accent
74919ccd446eSAtari911│ [Cancel] [�� Save]       │ ← Pink buttons
74929ccd446eSAtari911└──────────────────────────┘
74939ccd446eSAtari911```
74949ccd446eSAtari911
74959ccd446eSAtari911### Complete Dialog Element Coverage
74969ccd446eSAtari911
74979ccd446eSAtari911**All form elements themed**:
74989ccd446eSAtari911- ✅ Dialog container
74999ccd446eSAtari911- ✅ Dialog header
75009ccd446eSAtari911- ✅ Close button (×)
75019ccd446eSAtari911- ✅ Title input
75029ccd446eSAtari911- ✅ Namespace search
75039ccd446eSAtari911- ✅ Namespace dropdown
75049ccd446eSAtari911- ✅ Description textarea
75059ccd446eSAtari911- ✅ Start date input
75069ccd446eSAtari911- ✅ End date input
75079ccd446eSAtari911- ✅ Recurring checkbox
75089ccd446eSAtari911- ✅ Recurrence type select
75099ccd446eSAtari911- ✅ Recurrence end date
75109ccd446eSAtari911- ✅ Start time select
75119ccd446eSAtari911- ✅ End time select
75129ccd446eSAtari911- ✅ Color select
75139ccd446eSAtari911- ✅ Custom color picker
75149ccd446eSAtari911- ✅ Task checkbox
75159ccd446eSAtari911- ✅ All labels
75169ccd446eSAtari911- ✅ Cancel button
75179ccd446eSAtari911- ✅ Save button
75189ccd446eSAtari911
75199ccd446eSAtari911**Every single dialog element themed!** ��
75209ccd446eSAtari911
75219ccd446eSAtari911### Sidebar Border Example
75229ccd446eSAtari911
75239ccd446eSAtari911**Matrix Sidebar**:
75249ccd446eSAtari911```
75259ccd446eSAtari911┌────────────────┐
75269ccd446eSAtari911│ Today          │ ← Green section header
75279ccd446eSAtari911├────────────────┤
75289ccd446eSAtari911│ Team Meeting   │
75299ccd446eSAtari911│ 2:00 PM        │
75309ccd446eSAtari911├────────────────┤ ← Green border (grid_border)
75319ccd446eSAtari911│ Code Review    │
75329ccd446eSAtari911│ 4:00 PM        │
75339ccd446eSAtari911├────────────────┤ ← Green border
75349ccd446eSAtari911│ Stand-up       │
75359ccd446eSAtari911│ All day        │
75369ccd446eSAtari911└────────────────┘
75379ccd446eSAtari911
75389ccd446eSAtari911Subtle green dividers! ✓
75399ccd446eSAtari911```
75409ccd446eSAtari911
75419ccd446eSAtari911### Complete Achievement
75429ccd446eSAtari911
75439ccd446eSAtari911**Every UI element themed**:
75449ccd446eSAtari911- ✅ Calendar
75459ccd446eSAtari911- ✅ Sidebar widget
75469ccd446eSAtari911- ✅ Event list
75479ccd446eSAtari911- ✅ Search bar
75489ccd446eSAtari911- ✅ **Event dialog** ← v4.8.5!
75499ccd446eSAtari911- ✅ Month picker
75509ccd446eSAtari911- ✅ **Sidebar dividers** ← v4.8.5!
75519ccd446eSAtari911- ✅ All text
75529ccd446eSAtari911- ✅ All inputs
75539ccd446eSAtari911- ✅ All buttons
75549ccd446eSAtari911- ✅ All borders
75559ccd446eSAtari911- ✅ All checkboxes
75569ccd446eSAtari911
75579ccd446eSAtari911**ABSOLUTE COMPLETE THEMING!** ��✨
75589ccd446eSAtari911
75599ccd446eSAtari911## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS
75609ccd446eSAtari911
75619ccd446eSAtari911### �� Fixed: Professional Theme Background Consistency
75629ccd446eSAtari911- **Fixed:** Container and event backgrounds now match sidebar
75639ccd446eSAtari911- **Fixed:** Lighter, cleaner appearance
75649ccd446eSAtari911- **Fixed:** Better contrast and readability
75659ccd446eSAtari911- **Result:** Professional theme looks cohesive!
75669ccd446eSAtari911
75679ccd446eSAtari911### The Problem
75689ccd446eSAtari911
75699ccd446eSAtari911**v4.8.3 Professional theme**:
75709ccd446eSAtari911```
75719ccd446eSAtari911Sidebar: Light background (#f5f7fa)
75729ccd446eSAtari911Calendar: Medium background (#e8ecf1) ← Didn't match!
75739ccd446eSAtari911Events: Light background (#f5f7fa)
75749ccd446eSAtari911
75759ccd446eSAtari911Inconsistent! ✗
75769ccd446eSAtari911```
75779ccd446eSAtari911
75789ccd446eSAtari911### The Fix
75799ccd446eSAtari911
75809ccd446eSAtari911**Updated Professional theme colors for consistency**:
75819ccd446eSAtari911
75829ccd446eSAtari911```php
75839ccd446eSAtari911// Before:
75849ccd446eSAtari911'bg' => '#e8ecf1',        // Medium gray-blue
75859ccd446eSAtari911'cell_bg' => '#f5f7fa',   // Very light
75869ccd446eSAtari911'grid_bg' => '#d5dbe3',   // Medium-dark
75879ccd446eSAtari911
75889ccd446eSAtari911// After:
75899ccd446eSAtari911'bg' => '#f5f7fa',        // Very light (matches sidebar)
75909ccd446eSAtari911'cell_bg' => '#ffffff',   // Pure white (clean)
75919ccd446eSAtari911'grid_bg' => '#e8ecf1',   // Subtle contrast
75929ccd446eSAtari911'grid_border' => '#d0d7de', // Softer borders
75939ccd446eSAtari911```
75949ccd446eSAtari911
75959ccd446eSAtari911### Before vs After
75969ccd446eSAtari911
75979ccd446eSAtari911**BEFORE (v4.8.3)**:
75989ccd446eSAtari911```
75999ccd446eSAtari911Professional Theme:
76009ccd446eSAtari911┌────────────────┐
76019ccd446eSAtari911│ Calendar       │ ← Medium gray (#e8ecf1)
76029ccd446eSAtari911│ ┌────────────┐ │
76039ccd446eSAtari911│ │ Event      │ │ ← Light (#f5f7fa)
76049ccd446eSAtari911│ └────────────┘ │
76059ccd446eSAtari911└────────────────┘
76069ccd446eSAtari911
76079ccd446eSAtari911Sidebar:
76089ccd446eSAtari911┌────────────────┐
76099ccd446eSAtari911│ Widget         │ ← Light (#f5f7fa)
76109ccd446eSAtari911└────────────────┘
76119ccd446eSAtari911
76129ccd446eSAtari911Backgrounds don't match! ✗
76139ccd446eSAtari911```
76149ccd446eSAtari911
76159ccd446eSAtari911**AFTER (v4.8.4)**:
76169ccd446eSAtari911```
76179ccd446eSAtari911Professional Theme:
76189ccd446eSAtari911┌────────────────┐
76199ccd446eSAtari911│ Calendar       │ ← Light (#f5f7fa)
76209ccd446eSAtari911│ ┌────────────┐ │
76219ccd446eSAtari911│ │ Event      │ │ ← White (#ffffff)
76229ccd446eSAtari911│ └────────────┘ │
76239ccd446eSAtari911└────────────────┘
76249ccd446eSAtari911
76259ccd446eSAtari911Sidebar:
76269ccd446eSAtari911┌────────────────┐
76279ccd446eSAtari911│ Widget         │ ← Light (#f5f7fa)
76289ccd446eSAtari911└────────────────┘
76299ccd446eSAtari911
76309ccd446eSAtari911Perfect match! ✓
76319ccd446eSAtari911```
76329ccd446eSAtari911
76339ccd446eSAtari911### New Professional Theme Colors
76349ccd446eSAtari911
76359ccd446eSAtari911**Backgrounds**:
76369ccd446eSAtari911- Container: `#f5f7fa` (light blue-gray)
76379ccd446eSAtari911- Events: `#ffffff` (pure white)
76389ccd446eSAtari911- Grid: `#e8ecf1` (subtle contrast)
76399ccd446eSAtari911
76409ccd446eSAtari911**Text**:
76419ccd446eSAtari911- Primary: `#2c3e50` (dark blue-gray)
76429ccd446eSAtari911- Bright: `#4a90e2` (blue accent)
76439ccd446eSAtari911- Dim: `#7f8c8d` (medium gray)
76449ccd446eSAtari911
76459ccd446eSAtari911**Borders**:
76469ccd446eSAtari911- Main: `#4a90e2` (blue)
76479ccd446eSAtari911- Grid: `#d0d7de` (soft gray)
76489ccd446eSAtari911
76499ccd446eSAtari911**Header**:
76509ccd446eSAtari911- Gradient: `#ffffff` → `#f5f7fa`
76519ccd446eSAtari911
76529ccd446eSAtari911### Visual Example
76539ccd446eSAtari911
76549ccd446eSAtari911**Professional Theme Now**:
76559ccd446eSAtari911```
76569ccd446eSAtari911┌─────────────────────────────┐
76579ccd446eSAtari911│ February 2026               │ ← White to light gradient
76589ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─┬───────────────┤
76599ccd446eSAtari911│S│M│T│W│T│F│S│               │ ← Light background
76609ccd446eSAtari911├─┼─┼─┼─┼─┼─┼─┤               │
76619ccd446eSAtari911│ │ │1│2│3│4│5│ Event List    │ ← White events
76629ccd446eSAtari911│ │ │ │ │ │ │ │ ┌───────────┐ │
76639ccd446eSAtari911│ │ │ │ │[8]│ │ │ Meeting   │ │ ← White on light
76649ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘
76659ccd446eSAtari911
76669ccd446eSAtari911Clean, professional look! ✓
76679ccd446eSAtari911```
76689ccd446eSAtari911
76699ccd446eSAtari911### Comparison with Other Themes
76709ccd446eSAtari911
76719ccd446eSAtari911**Matrix** (dark):
76729ccd446eSAtari911- Container: #242424 (dark green)
76739ccd446eSAtari911- Events: #242424 (dark green)
76749ccd446eSAtari911- Consistent dark theme ✓
76759ccd446eSAtari911
76769ccd446eSAtari911**Purple** (dark):
76779ccd446eSAtari911- Container: #1a0d14 (dark purple)
76789ccd446eSAtari911- Events: #2a2030 (dark purple)
76799ccd446eSAtari911- Consistent dark theme ✓
76809ccd446eSAtari911
76819ccd446eSAtari911**Professional** (light):
76829ccd446eSAtari911- Container: #f5f7fa (light blue)
76839ccd446eSAtari911- Events: #ffffff (white)
76849ccd446eSAtari911- Consistent light theme ✓
76859ccd446eSAtari911
76869ccd446eSAtari911**Pink** (dark):
76879ccd446eSAtari911- Container: #1a0d14 (dark pink)
76889ccd446eSAtari911- Events: #1a0d14 (dark pink)
76899ccd446eSAtari911- Consistent dark theme ✓
76909ccd446eSAtari911
76919ccd446eSAtari911**All themes now consistent!** ��
76929ccd446eSAtari911
76939ccd446eSAtari911### Better Contrast
76949ccd446eSAtari911
76959ccd446eSAtari911**Professional theme improvements**:
76969ccd446eSAtari911
76979ccd446eSAtari911**Readability**:
76989ccd446eSAtari911- Dark text (#2c3e50) on white/light backgrounds ✓
76999ccd446eSAtari911- Excellent contrast ratio ✓
77009ccd446eSAtari911- Easy on the eyes ✓
77019ccd446eSAtari911
77029ccd446eSAtari911**Visual hierarchy**:
77039ccd446eSAtari911- White events pop against light container ✓
77049ccd446eSAtari911- Blue accents stand out ✓
77059ccd446eSAtari911- Clean, modern look ✓
77069ccd446eSAtari911
77079ccd446eSAtari911**Professional appearance**:
77089ccd446eSAtari911- Lighter = more corporate/business feel ✓
77099ccd446eSAtari911- Clean whites = premium quality ✓
77109ccd446eSAtari911- Subtle grays = sophisticated ✓
77119ccd446eSAtari911
77129ccd446eSAtari911### Complete Theme Consistency
77139ccd446eSAtari911
77149ccd446eSAtari911**All themes now have matching backgrounds**:
77159ccd446eSAtari911
77169ccd446eSAtari911**Matrix**:
77179ccd446eSAtari911- Sidebar & Calendar both dark green ✓
77189ccd446eSAtari911
77199ccd446eSAtari911**Purple**:
77209ccd446eSAtari911- Sidebar & Calendar both dark purple ✓
77219ccd446eSAtari911
77229ccd446eSAtari911**Professional**:
77239ccd446eSAtari911- Sidebar & Calendar both light ✓ (v4.8.4!)
77249ccd446eSAtari911
77259ccd446eSAtari911**Pink**:
77269ccd446eSAtari911- Sidebar & Calendar both dark pink ✓
77279ccd446eSAtari911
77289ccd446eSAtari911**Perfect visual unity across all views!** ��✨
77299ccd446eSAtari911
77309ccd446eSAtari911## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES
77319ccd446eSAtari911
77329ccd446eSAtari911### �� Fixed: Bold Text in Descriptions Themed
77339ccd446eSAtari911- **Fixed:** **Bold text** now uses theme primary color
77349ccd446eSAtari911- **Fixed:** Both `**text**` and `__text__` syntax themed
77359ccd446eSAtari911- **Result:** Bold text matches theme!
77369ccd446eSAtari911
77379ccd446eSAtari911### �� Fixed: Search Bar Fully Themed
77389ccd446eSAtari911- **Fixed:** Search input has !important on all styles
77399ccd446eSAtari911- **Fixed:** Icon and placeholder text themed
77409ccd446eSAtari911- **Result:** Search bar perfectly themed!
77419ccd446eSAtari911
77429ccd446eSAtari911### �� Fixed: Sidebar Event Boxes Themed
77439ccd446eSAtari911- **Fixed:** Event borders in sidebar now use theme grid_border color
77449ccd446eSAtari911- **Fixed:** Borders have !important flag
77459ccd446eSAtari911- **Result:** Sidebar boxes match theme!
77469ccd446eSAtari911
77479ccd446eSAtari911### All Changes
77489ccd446eSAtari911
77499ccd446eSAtari911**1. Bold Text Styling**:
77509ccd446eSAtari911
77519ccd446eSAtari911**Before**:
77529ccd446eSAtari911```html
77539ccd446eSAtari911<strong>Bold text</strong> ← Default black
77549ccd446eSAtari911```
77559ccd446eSAtari911
77569ccd446eSAtari911**After**:
77579ccd446eSAtari911```php
77589ccd446eSAtari911<strong style="color: $text_primary !important; font-weight:bold;">
77599ccd446eSAtari911    Bold text
77609ccd446eSAtari911</strong>
77619ccd446eSAtari911
77629ccd446eSAtari911Matrix: Green bold ✓
77639ccd446eSAtari911Purple: Lavender bold ✓
77649ccd446eSAtari911Professional: Dark bold ✓
77659ccd446eSAtari911Pink: Pink bold ✓
77669ccd446eSAtari911```
77679ccd446eSAtari911
77689ccd446eSAtari911**2. Search Bar**:
77699ccd446eSAtari911
77709ccd446eSAtari911**Before**:
77719ccd446eSAtari911```php
77729ccd446eSAtari911style="background: $bg; color: $text;"
77739ccd446eSAtari911Could be overridden by CSS
77749ccd446eSAtari911```
77759ccd446eSAtari911
77769ccd446eSAtari911**After**:
77779ccd446eSAtari911```php
77789ccd446eSAtari911style="background: $bg !important;
77799ccd446eSAtari911       color: $text_primary !important;
77809ccd446eSAtari911       border-color: $grid_border !important;"
77819ccd446eSAtari911
77829ccd446eSAtari911Cannot be overridden! ✓
77839ccd446eSAtari911```
77849ccd446eSAtari911
77859ccd446eSAtari911**3. Sidebar Event Boxes**:
77869ccd446eSAtari911
77879ccd446eSAtari911**Before**:
77889ccd446eSAtari911```php
77899ccd446eSAtari911$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded
77909ccd446eSAtari911```
77919ccd446eSAtari911
77929ccd446eSAtari911**After**:
77939ccd446eSAtari911```php
77949ccd446eSAtari911$borderColor = $themeStyles['grid_border']; // From theme
77959ccd446eSAtari911border-bottom: 1px solid $borderColor !important;
77969ccd446eSAtari911
77979ccd446eSAtari911Matrix: Green borders ✓
77989ccd446eSAtari911Purple: Purple borders ✓
77999ccd446eSAtari911Professional: Gray borders ✓
78009ccd446eSAtari911Pink: Pink borders ✓
78019ccd446eSAtari911```
78029ccd446eSAtari911
78039ccd446eSAtari911### Before vs After
78049ccd446eSAtari911
78059ccd446eSAtari911**BEFORE (v4.8.2)**:
78069ccd446eSAtari911```
78079ccd446eSAtari911Event description:
78089ccd446eSAtari911"Please review **Q1 Goals** carefully"
78099ccd446eSAtari91178109ccd446eSAtari911            Black bold ✗
78119ccd446eSAtari911
78129ccd446eSAtari911Search bar:
78139ccd446eSAtari911[�� Search...] ← Gray placeholder ✗
78149ccd446eSAtari911
78159ccd446eSAtari911Sidebar:
78169ccd446eSAtari911┌────────────┐
78179ccd446eSAtari911│ Event 1    │
78189ccd446eSAtari911├────────────┤ ← Gray border ✗
78199ccd446eSAtari911│ Event 2    │
78209ccd446eSAtari911└────────────┘
78219ccd446eSAtari911```
78229ccd446eSAtari911
78239ccd446eSAtari911**AFTER (v4.8.3)**:
78249ccd446eSAtari911```
78259ccd446eSAtari911Matrix Theme:
78269ccd446eSAtari911
78279ccd446eSAtari911Event description:
78289ccd446eSAtari911"Please review **Q1 Goals** carefully"
78299ccd446eSAtari91178309ccd446eSAtari911            Green bold ✓
78319ccd446eSAtari911
78329ccd446eSAtari911Search bar:
78339ccd446eSAtari911[�� Search...] ← Green themed ✓
78349ccd446eSAtari911
78359ccd446eSAtari911Sidebar:
78369ccd446eSAtari911┌────────────┐
78379ccd446eSAtari911│ Event 1    │
78389ccd446eSAtari911├────────────┤ ← Green border ✓
78399ccd446eSAtari911│ Event 2    │
78409ccd446eSAtari911└────────────┘
78419ccd446eSAtari911```
78429ccd446eSAtari911
78439ccd446eSAtari911### Examples by Theme
78449ccd446eSAtari911
78459ccd446eSAtari911**Matrix Theme**:
78469ccd446eSAtari911```
78479ccd446eSAtari911Description:
78489ccd446eSAtari911"Check **important notes** and links"
78499ccd446eSAtari91178509ccd446eSAtari911   Green bold
78519ccd446eSAtari911
78529ccd446eSAtari911Sidebar boxes:
78539ccd446eSAtari911Event 1
78549ccd446eSAtari911───────── Green border
78559ccd446eSAtari911Event 2
78569ccd446eSAtari911───────── Green border
78579ccd446eSAtari911```
78589ccd446eSAtari911
78599ccd446eSAtari911**Purple Theme**:
78609ccd446eSAtari911```
78619ccd446eSAtari911Description:
78629ccd446eSAtari911"Review **agenda items** before meeting"
78639ccd446eSAtari91178649ccd446eSAtari911   Lavender bold
78659ccd446eSAtari911
78669ccd446eSAtari911Sidebar boxes:
78679ccd446eSAtari911Event 1
78689ccd446eSAtari911───────── Purple border
78699ccd446eSAtari911Event 2
78709ccd446eSAtari911───────── Purple border
78719ccd446eSAtari911```
78729ccd446eSAtari911
78739ccd446eSAtari911**Professional Theme**:
78749ccd446eSAtari911```
78759ccd446eSAtari911Description:
78769ccd446eSAtari911"Update **quarterly reports** by Friday"
78779ccd446eSAtari91178789ccd446eSAtari911   Dark bold
78799ccd446eSAtari911
78809ccd446eSAtari911Sidebar boxes:
78819ccd446eSAtari911Event 1
78829ccd446eSAtari911───────── Gray border
78839ccd446eSAtari911Event 2
78849ccd446eSAtari911───────── Gray border
78859ccd446eSAtari911```
78869ccd446eSAtari911
78879ccd446eSAtari911**Pink Theme**:
78889ccd446eSAtari911```
78899ccd446eSAtari911Description:
78909ccd446eSAtari911"Don't forget **party supplies** ✨"
78919ccd446eSAtari91178929ccd446eSAtari911        Pink bold
78939ccd446eSAtari911
78949ccd446eSAtari911Sidebar boxes:
78959ccd446eSAtari911Event 1 ��
78969ccd446eSAtari911───────── Pink border
78979ccd446eSAtari911Event 2 ✨
78989ccd446eSAtari911───────── Pink border
78999ccd446eSAtari911```
79009ccd446eSAtari911
79019ccd446eSAtari911### Complete Formatting Coverage
79029ccd446eSAtari911
79039ccd446eSAtari911**Text formatting themed**:
79049ccd446eSAtari911- ✅ Regular text
79059ccd446eSAtari911- ✅ **Bold text** ← NEW!
79069ccd446eSAtari911- ✅ Links
79079ccd446eSAtari911- ✅ Italic text (inherits)
79089ccd446eSAtari911- ✅ Code (inherits)
79099ccd446eSAtari911
79109ccd446eSAtari911**UI elements themed**:
79119ccd446eSAtari911- ✅ Search bar ← Enhanced!
79129ccd446eSAtari911- ✅ Search icon ← Enhanced!
79139ccd446eSAtari911- ✅ Search placeholder ← Enhanced!
79149ccd446eSAtari911- ✅ Sidebar borders ← NEW!
79159ccd446eSAtari911- ✅ Event borders
79169ccd446eSAtari911- ✅ Badges
79179ccd446eSAtari911- ✅ Buttons
79189ccd446eSAtari911
79199ccd446eSAtari911**Every element perfectly themed!** ��
79209ccd446eSAtari911
79219ccd446eSAtari911### Search Bar Coverage
79229ccd446eSAtari911
79239ccd446eSAtari911**All aspects themed**:
79249ccd446eSAtari911- Background: Theme cell_bg ✓
79259ccd446eSAtari911- Text color: Theme text_primary ✓
79269ccd446eSAtari911- Border: Theme grid_border ✓
79279ccd446eSAtari911- Placeholder: Inherits text color ✓
79289ccd446eSAtari911- Icon (��): In placeholder ✓
79299ccd446eSAtari911- Clear button (✕): Themed ✓
79309ccd446eSAtari911
79319ccd446eSAtari911**Cannot be overridden!** (all have !important)
79329ccd446eSAtari911
79339ccd446eSAtari911### Sidebar Event Box Styling
79349ccd446eSAtari911
79359ccd446eSAtari911**Consistent borders**:
79369ccd446eSAtari911```
79379ccd446eSAtari911Matrix:
79389ccd446eSAtari911╔════════════╗
79399ccd446eSAtari911║ Event 1    ║
79409ccd446eSAtari911╟────────────╢ ← grid_border color
79419ccd446eSAtari911║ Event 2    ║
79429ccd446eSAtari911╚════════════╝
79439ccd446eSAtari911
79449ccd446eSAtari911All themes match perfectly! ✓
79459ccd446eSAtari911```
79469ccd446eSAtari911
79479ccd446eSAtari911### Complete Theme Achievement
79489ccd446eSAtari911
79499ccd446eSAtari911**Every single element themed**:
79509ccd446eSAtari911- ✅ Backgrounds
79519ccd446eSAtari911- ✅ Text (regular)
79529ccd446eSAtari911- ✅ Text (bold) ← v4.8.3!
79539ccd446eSAtari911- ✅ Links
79549ccd446eSAtari911- ✅ Badges
79559ccd446eSAtari911- ✅ Buttons
79569ccd446eSAtari911- ✅ Checkboxes
79579ccd446eSAtari911- ✅ Icons
79589ccd446eSAtari911- ✅ Borders
79599ccd446eSAtari911- ✅ Search bar ← Enhanced v4.8.3!
79609ccd446eSAtari911- ✅ Sidebar boxes ← v4.8.3!
79619ccd446eSAtari911- ✅ Today marker
79629ccd446eSAtari911- ✅ Calendar grid
79639ccd446eSAtari911- ✅ Event panels
79649ccd446eSAtari911
79659ccd446eSAtari911**ABSOLUTE PERFECTION!** ��✨
79669ccd446eSAtari911
79679ccd446eSAtari911## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS
79689ccd446eSAtari911
79699ccd446eSAtari911### �� Fixed: Links in Descriptions Now Themed
79709ccd446eSAtari911- **Fixed:** All links in event descriptions now use theme color
79719ccd446eSAtari911- **Fixed:** DokuWiki links [[page|text]] themed
79729ccd446eSAtari911- **Fixed:** Markdown links [text](url) themed
79739ccd446eSAtari911- **Fixed:** Plain URLs themed
79749ccd446eSAtari911- **Result:** Links match theme perfectly!
79759ccd446eSAtari911
79769ccd446eSAtari911### The Problem
79779ccd446eSAtari911
79789ccd446eSAtari911**v4.8.1 behavior**:
79799ccd446eSAtari911```
79809ccd446eSAtari911Event description:
79819ccd446eSAtari911"Check out https://example.com" ← Blue default link ✗
79829ccd446eSAtari911"See [[wiki:page|docs]]" ← Blue default link ✗
79839ccd446eSAtari911```
79849ccd446eSAtari911
79859ccd446eSAtari911### The Fix
79869ccd446eSAtari911
79879ccd446eSAtari911**Added inline color styling to ALL link types**:
79889ccd446eSAtari911
79899ccd446eSAtari911```php
79909ccd446eSAtari911// Get theme colors:
79919ccd446eSAtari911$linkColor = $themeStyles['border'] . ' !important';
79929ccd446eSAtari911$linkStyle = ' style="color:' . $linkColor . ';"';
79939ccd446eSAtari911
79949ccd446eSAtari911// Apply to links:
79959ccd446eSAtari911<a href="..." style="color: #00cc07 !important;">link</a>
79969ccd446eSAtari911```
79979ccd446eSAtari911
79989ccd446eSAtari911**All link types themed**:
79999ccd446eSAtari9111. DokuWiki syntax: `[[page|text]]`
80009ccd446eSAtari9112. Markdown syntax: `[text](url)`
80019ccd446eSAtari9113. Plain URLs: `https://example.com`
80029ccd446eSAtari911
80039ccd446eSAtari911### Before vs After
80049ccd446eSAtari911
80059ccd446eSAtari911**BEFORE (v4.8.1)**:
80069ccd446eSAtari911```
80079ccd446eSAtari911Matrix Theme Description:
80089ccd446eSAtari911"Visit https://example.com for more info"
80099ccd446eSAtari91180109ccd446eSAtari911     Blue link ✗ (doesn't match green theme)
80119ccd446eSAtari911```
80129ccd446eSAtari911
80139ccd446eSAtari911**AFTER (v4.8.2)**:
80149ccd446eSAtari911```
80159ccd446eSAtari911Matrix Theme Description:
80169ccd446eSAtari911"Visit https://example.com for more info"
80179ccd446eSAtari91180189ccd446eSAtari911     Green link ✓ (matches theme!)
80199ccd446eSAtari911```
80209ccd446eSAtari911
80219ccd446eSAtari911### Link Colors by Theme
80229ccd446eSAtari911
80239ccd446eSAtari911**Matrix**:
80249ccd446eSAtari911- Links: Green (#00cc07) !important
80259ccd446eSAtari911- Matches: Border, badges, highlights
80269ccd446eSAtari911
80279ccd446eSAtari911**Purple**:
80289ccd446eSAtari911- Links: Purple (#9b59b6) !important
80299ccd446eSAtari911- Matches: Border, badges, highlights
80309ccd446eSAtari911
80319ccd446eSAtari911**Professional**:
80329ccd446eSAtari911- Links: Blue (#4a90e2) !important
80339ccd446eSAtari911- Matches: Border, badges, highlights
80349ccd446eSAtari911
80359ccd446eSAtari911**Pink**:
80369ccd446eSAtari911- Links: Hot Pink (#ff1493) !important
80379ccd446eSAtari911- Matches: Border, badges, highlights ✨
80389ccd446eSAtari911
80399ccd446eSAtari911### Examples
80409ccd446eSAtari911
80419ccd446eSAtari911**Matrix Description with Links**:
80429ccd446eSAtari911```
80439ccd446eSAtari911Event: Team Meeting
80449ccd446eSAtari911Description:
80459ccd446eSAtari911"Review [[wiki:q1goals|Q1 Goals]]
80469ccd446eSAtari911and visit https://metrics.com"
80479ccd446eSAtari911
80489ccd446eSAtari911Both links → Green ✓
80499ccd446eSAtari911```
80509ccd446eSAtari911
80519ccd446eSAtari911**Purple Description with Links**:
80529ccd446eSAtari911```
80539ccd446eSAtari911Event: Planning Session
80549ccd446eSAtari911Description:
80559ccd446eSAtari911"Check [schedule](https://cal.com)
80569ccd446eSAtari911for availability"
80579ccd446eSAtari911
80589ccd446eSAtari911Link → Purple ✓
80599ccd446eSAtari911```
80609ccd446eSAtari911
80619ccd446eSAtari911**Professional Description with Links**:
80629ccd446eSAtari911```
80639ccd446eSAtari911Event: Client Call
80649ccd446eSAtari911Description:
80659ccd446eSAtari911"Prepare [[reports|Monthly Reports]]
80669ccd446eSAtari911before the call"
80679ccd446eSAtari911
80689ccd446eSAtari911Link → Blue ✓
80699ccd446eSAtari911```
80709ccd446eSAtari911
80719ccd446eSAtari911**Pink Description with Links**:
80729ccd446eSAtari911```
80739ccd446eSAtari911Event: Party Planning
80749ccd446eSAtari911Description:
80759ccd446eSAtari911"RSVP at https://party.com ✨"
80769ccd446eSAtari911
80779ccd446eSAtari911Link → Hot Pink ✓ ��
80789ccd446eSAtari911```
80799ccd446eSAtari911
80809ccd446eSAtari911### Technical Implementation
80819ccd446eSAtari911
80829ccd446eSAtari911**Updated renderDescription() function**:
80839ccd446eSAtari911
80849ccd446eSAtari911```php
80859ccd446eSAtari911private function renderDescription($description, $themeStyles = null) {
80869ccd446eSAtari911    // Get theme
80879ccd446eSAtari911    if ($themeStyles === null) {
80889ccd446eSAtari911        $theme = $this->getSidebarTheme();
80899ccd446eSAtari911        $themeStyles = $this->getSidebarThemeStyles($theme);
80909ccd446eSAtari911    }
80919ccd446eSAtari911
80929ccd446eSAtari911    // Create link style
80939ccd446eSAtari911    $linkColor = $themeStyles['border'] . ' !important';
80949ccd446eSAtari911    $linkStyle = ' style="color:' . $linkColor . ';"';
80959ccd446eSAtari911
80969ccd446eSAtari911    // Apply to all link types:
80979ccd446eSAtari911    $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>';
80989ccd446eSAtari911}
80999ccd446eSAtari911```
81009ccd446eSAtari911
81019ccd446eSAtari911### Complete Theming
81029ccd446eSAtari911
81039ccd446eSAtari911**Every text element**:
81049ccd446eSAtari911- ✅ Event titles
81059ccd446eSAtari911- ✅ Event dates
81069ccd446eSAtari911- ✅ Event descriptions
81079ccd446eSAtari911- ✅ **Links in descriptions** ← NEW!
81089ccd446eSAtari911- ✅ Badges
81099ccd446eSAtari911- ✅ Buttons
81109ccd446eSAtari911
81119ccd446eSAtari911**Every color unified!** ��
81129ccd446eSAtari911
81139ccd446eSAtari911### Unified Theme Experience
81149ccd446eSAtari911
81159ccd446eSAtari911**Matrix Theme**:
81169ccd446eSAtari911```
81179ccd446eSAtari911Everything green:
81189ccd446eSAtari911- Text: Green ✓
81199ccd446eSAtari911- Links: Green ✓
81209ccd446eSAtari911- Badges: Green ✓
81219ccd446eSAtari911- Borders: Green ✓
81229ccd446eSAtari911- Buttons: Green ✓
81239ccd446eSAtari911- Today marker: Green ✓
81249ccd446eSAtari911
81259ccd446eSAtari911Perfect harmony! ✓
81269ccd446eSAtari911```
81279ccd446eSAtari911
81289ccd446eSAtari911**No default blue links breaking the theme!**
81299ccd446eSAtari911
81309ccd446eSAtari911### Link Types Supported
81319ccd446eSAtari911
81329ccd446eSAtari911**1. DokuWiki Syntax**:
81339ccd446eSAtari911```
81349ccd446eSAtari911[[page|Link Text]] → Themed ✓
81359ccd446eSAtari911[[page]] → Themed ✓
81369ccd446eSAtari911[[page#section|Text]] → Themed ✓
81379ccd446eSAtari911```
81389ccd446eSAtari911
81399ccd446eSAtari911**2. Markdown Syntax**:
81409ccd446eSAtari911```
81419ccd446eSAtari911[Link Text](https://url.com) → Themed ✓
81429ccd446eSAtari911[Text](internal-page) → Themed ✓
81439ccd446eSAtari911```
81449ccd446eSAtari911
81459ccd446eSAtari911**3. Plain URLs**:
81469ccd446eSAtari911```
81479ccd446eSAtari911https://example.com → Themed ✓
81489ccd446eSAtari911http://site.org → Themed ✓
81499ccd446eSAtari911```
81509ccd446eSAtari911
81519ccd446eSAtari911**All links perfectly themed!** ����
81529ccd446eSAtari911
81539ccd446eSAtari911## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER
81549ccd446eSAtari911
81559ccd446eSAtari911### �� Fixed: All Badges Now Themed
81569ccd446eSAtari911- **Fixed:** TODAY badge themed with theme color
81579ccd446eSAtari911- **Fixed:** PAST DUE badge uses orange (warning color)
81589ccd446eSAtari911- **Fixed:** Namespace badges themed
81599ccd446eSAtari911- **Fixed:** All badges visible and hidden
81609ccd446eSAtari911- **Result:** All badges match theme!
81619ccd446eSAtari911
81629ccd446eSAtari911### �� Fixed: Today Cell More Prominent
81639ccd446eSAtari911- **Fixed:** Today cell now has 2px border in theme color
81649ccd446eSAtari911- **Fixed:** Border added to both PHP and JavaScript
81659ccd446eSAtari911- **Result:** Today stands out clearly!
81669ccd446eSAtari911
81679ccd446eSAtari911### �� Fixed: Past Event Text Fully Themed
81689ccd446eSAtari911- **Fixed:** Event-info div backgrounds ensure no gray
81699ccd446eSAtari911- **Result:** Expanded past events completely themed!
81709ccd446eSAtari911
81719ccd446eSAtari911### All Changes
81729ccd446eSAtari911
81739ccd446eSAtari911**1. Badge Theming**:
81749ccd446eSAtari911
81759ccd446eSAtari911**TODAY Badge**:
81769ccd446eSAtari911```php
81779ccd446eSAtari911// PHP & JavaScript:
81789ccd446eSAtari911style="background: $themeStyles['border'] !important;
81799ccd446eSAtari911       color: $bg !important;"
81809ccd446eSAtari911
81819ccd446eSAtari911Matrix: Green badge
81829ccd446eSAtari911Purple: Purple badge
81839ccd446eSAtari911Professional: Blue badge with white text
81849ccd446eSAtari911Pink: Pink badge
81859ccd446eSAtari911```
81869ccd446eSAtari911
81879ccd446eSAtari911**PAST DUE Badge** (always orange):
81889ccd446eSAtari911```php
81899ccd446eSAtari911style="background: #ff9800 !important;
81909ccd446eSAtari911       color: #fff !important;"
81919ccd446eSAtari911```
81929ccd446eSAtari911
81939ccd446eSAtari911**Namespace Badge**:
81949ccd446eSAtari911```php
81959ccd446eSAtari911style="background: $themeStyles['border'] !important;
81969ccd446eSAtari911       color: $bg !important;"
81979ccd446eSAtari911```
81989ccd446eSAtari911
81999ccd446eSAtari911**2. Today Cell Border**:
82009ccd446eSAtari911
82019ccd446eSAtari911**PHP**:
82029ccd446eSAtari911```php
82039ccd446eSAtari911$todayBorder = $isToday ?
82049ccd446eSAtari911    'border:2px solid ' . $themeStyles['border'] . ' !important;' : '';
82059ccd446eSAtari911```
82069ccd446eSAtari911
82079ccd446eSAtari911**JavaScript**: Same
82089ccd446eSAtari911
82099ccd446eSAtari911**Result**: Today cell has prominent colored border!
82109ccd446eSAtari911
82119ccd446eSAtari911### Before vs After
82129ccd446eSAtari911
82139ccd446eSAtari911**BEFORE (v4.8.0)**:
82149ccd446eSAtari911```
82159ccd446eSAtari911Calendar:
82169ccd446eSAtari911┌─┬─┬─┬─┬─┬─┬─┐
82179ccd446eSAtari911│1│2│3│4│5│6│7│
82189ccd446eSAtari911│ │ │ │[8]│ │ │ ← Today: subtle background
82199ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─┘
82209ccd446eSAtari911
82219ccd446eSAtari911Event badges:
82229ccd446eSAtari911Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗
82239ccd446eSAtari911```
82249ccd446eSAtari911
82259ccd446eSAtari911**AFTER (v4.8.1)**:
82269ccd446eSAtari911```
82279ccd446eSAtari911Calendar (Matrix):
82289ccd446eSAtari911┌─┬─┬─┬─┬─┬─┬─┐
82299ccd446eSAtari911│1│2│3│4│5│6│7│
82309ccd446eSAtari911│ │ │ │[8]│ │ │ ← Today: green border 2px ✓
82319ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─┘
82329ccd446eSAtari911
82339ccd446eSAtari911Event badges (Matrix):
82349ccd446eSAtari911Mon, Feb 8 [TODAY] [Work] ← Green badges ✓
82359ccd446eSAtari911```
82369ccd446eSAtari911
82379ccd446eSAtari911### Matrix Theme Example
82389ccd446eSAtari911
82399ccd446eSAtari911**Calendar**:
82409ccd446eSAtari911```
82419ccd446eSAtari911Today cell:
82429ccd446eSAtari911┌────┐
82439ccd446eSAtari911│ 8  │ Dark green bg + Green 2px border
82449ccd446eSAtari911└────┘
82459ccd446eSAtari911Very obvious!
82469ccd446eSAtari911```
82479ccd446eSAtari911
82489ccd446eSAtari911**Badges**:
82499ccd446eSAtari911```
82509ccd446eSAtari911[TODAY] ← Green bg, dark text
82519ccd446eSAtari911[Work]  ← Green bg, dark text
82529ccd446eSAtari911[PAST DUE] ← Orange bg, white text
82539ccd446eSAtari911```
82549ccd446eSAtari911
82559ccd446eSAtari911### Purple Theme Example
82569ccd446eSAtari911
82579ccd446eSAtari911**Calendar**:
82589ccd446eSAtari911```
82599ccd446eSAtari911Today cell:
82609ccd446eSAtari911┌────┐
82619ccd446eSAtari911│ 8  │ Dark purple bg + Purple 2px border
82629ccd446eSAtari911└────┘
82639ccd446eSAtari911```
82649ccd446eSAtari911
82659ccd446eSAtari911**Badges**:
82669ccd446eSAtari911```
82679ccd446eSAtari911[TODAY] ← Purple bg
82689ccd446eSAtari911[Work]  ← Purple bg
82699ccd446eSAtari911```
82709ccd446eSAtari911
82719ccd446eSAtari911### Professional Theme Example
82729ccd446eSAtari911
82739ccd446eSAtari911**Calendar**:
82749ccd446eSAtari911```
82759ccd446eSAtari911Today cell:
82769ccd446eSAtari911┌────┐
82779ccd446eSAtari911│ 8  │ Light blue bg + Blue 2px border
82789ccd446eSAtari911└────┘
82799ccd446eSAtari911```
82809ccd446eSAtari911
82819ccd446eSAtari911**Badges**:
82829ccd446eSAtari911```
82839ccd446eSAtari911[TODAY] ← Blue bg, white text
82849ccd446eSAtari911[Work]  ← Blue bg, white text
82859ccd446eSAtari911```
82869ccd446eSAtari911
82879ccd446eSAtari911### Pink Theme Example
82889ccd446eSAtari911
82899ccd446eSAtari911**Calendar**:
82909ccd446eSAtari911```
82919ccd446eSAtari911Today cell:
82929ccd446eSAtari911┌────┐
82939ccd446eSAtari911│ 8  │ Dark pink bg + Pink 2px border ✨
82949ccd446eSAtari911└────┘
82959ccd446eSAtari911```
82969ccd446eSAtari911
82979ccd446eSAtari911**Badges**:
82989ccd446eSAtari911```
82999ccd446eSAtari911[TODAY] ← Pink bg ��
83009ccd446eSAtari911[Work]  ← Pink bg ✨
83019ccd446eSAtari911```
83029ccd446eSAtari911
83039ccd446eSAtari911### Complete Badge Coverage
83049ccd446eSAtari911
83059ccd446eSAtari911**All badges themed**:
83069ccd446eSAtari911- ✅ TODAY badge (theme color)
83079ccd446eSAtari911- ✅ PAST DUE badge (orange warning)
83089ccd446eSAtari911- ✅ Namespace badges (theme color)
83099ccd446eSAtari911- ✅ Visible events
83109ccd446eSAtari911- ✅ Hidden/past events
83119ccd446eSAtari911
83129ccd446eSAtari911**No gray badges anywhere!**
83139ccd446eSAtari911
83149ccd446eSAtari911### Today Cell Visual
83159ccd446eSAtari911
83169ccd446eSAtari911**Dual indicators**:
83179ccd446eSAtari9111. Background color (theme today bg)
83189ccd446eSAtari9112. Border (2px theme color) ← NEW!
83199ccd446eSAtari911
83209ccd446eSAtari911**Result**: Today is VERY obvious!
83219ccd446eSAtari911
83229ccd446eSAtari911**Matrix**: Green bg + Green border
83239ccd446eSAtari911**Purple**: Purple bg + Purple border
83249ccd446eSAtari911**Professional**: Light blue bg + Blue border
83259ccd446eSAtari911**Pink**: Pink bg + Pink border ✨
83269ccd446eSAtari911
83279ccd446eSAtari911### Complete Theming
83289ccd446eSAtari911
83299ccd446eSAtari911**Every element themed**:
83309ccd446eSAtari911- ✅ Backgrounds
83319ccd446eSAtari911- ✅ Text colors
83329ccd446eSAtari911- ✅ Badges (v4.8.1!)
83339ccd446eSAtari911- ✅ Today marker (v4.8.1!)
83349ccd446eSAtari911- ✅ Checkboxes
83359ccd446eSAtari911- ✅ Buttons
83369ccd446eSAtari911- ✅ Icons
83379ccd446eSAtari911
83389ccd446eSAtari911**Absolutely everything!** ��✨
83399ccd446eSAtari911
83409ccd446eSAtari911## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING
83419ccd446eSAtari911
83429ccd446eSAtari911### �� Fixed: All Event Backgrounds Now Themed
83439ccd446eSAtari911- **Fixed:** event-info div now has themed background
83449ccd446eSAtari911- **Fixed:** event-meta-compact div (visible) now has themed background
83459ccd446eSAtari911- **Fixed:** event-desc-compact div now has themed background
83469ccd446eSAtari911- **Fixed:** All !important flags added to prevent CSS override
83479ccd446eSAtari911- **Result:** Entire event item fully themed!
83489ccd446eSAtari911
83499ccd446eSAtari911### �� Fixed: Description Text Shows Correct Color Immediately
83509ccd446eSAtari911- **Fixed:** Description divs now have explicit background + color on load
83519ccd446eSAtari911- **Fixed:** Both visible and hidden descriptions fully styled
83529ccd446eSAtari911- **Result:** No more gray text on initial load!
83539ccd446eSAtari911
83549ccd446eSAtari911### The Problem
83559ccd446eSAtari911
83569ccd446eSAtari911**v4.7.9 behavior**:
83579ccd446eSAtari911```
83589ccd446eSAtari911Expanded past event:
83599ccd446eSAtari911┌────────────────────────┐
83609ccd446eSAtari911│ ▾ Team Meeting         │ ← Themed ✓
83619ccd446eSAtari911│   Mon, Feb 8           │ ← Themed ✓
83629ccd446eSAtari911│                        │
83639ccd446eSAtari911│   [Event details]      │ ← Gray background ✗
83649ccd446eSAtari911│   [Description]        │ ← Gray text until navigation ✗
83659ccd446eSAtari911└────────────────────────┘
83669ccd446eSAtari911
83679ccd446eSAtari911Only the date/time div was themed!
83689ccd446eSAtari911```
83699ccd446eSAtari911
83709ccd446eSAtari911### The Fix
83719ccd446eSAtari911
83729ccd446eSAtari911**Added background to ALL inner divs**:
83739ccd446eSAtari911
83749ccd446eSAtari911**PHP**:
83759ccd446eSAtari911```php
83769ccd446eSAtari911// Event container:
83779ccd446eSAtari911style="background:' . $themeStyles['cell_bg'] . ' !important;"
83789ccd446eSAtari911
83799ccd446eSAtari911// event-info wrapper:
83809ccd446eSAtari911<div class="event-info"
83819ccd446eSAtari911     style="background:' . $themeStyles['cell_bg'] . ' !important;">
83829ccd446eSAtari911
83839ccd446eSAtari911// event-meta-compact:
83849ccd446eSAtari911<div class="event-meta-compact"
83859ccd446eSAtari911     style="background:' . $themeStyles['cell_bg'] . ' !important;">
83869ccd446eSAtari911
83879ccd446eSAtari911// event-desc-compact:
83889ccd446eSAtari911<div class="event-desc-compact"
83899ccd446eSAtari911     style="background:' . $themeStyles['cell_bg'] . ' !important;
83909ccd446eSAtari911            color:' . $themeStyles['text_dim'] . ' !important;">
83919ccd446eSAtari911```
83929ccd446eSAtari911
83939ccd446eSAtari911**JavaScript**: Same styling applied
83949ccd446eSAtari911
83959ccd446eSAtari911### Before vs After
83969ccd446eSAtari911
83979ccd446eSAtari911**BEFORE (v4.7.9)**:
83989ccd446eSAtari911```
83999ccd446eSAtari911Matrix Theme - Expanded Event:
84009ccd446eSAtari911┌────────────────────────┐
84019ccd446eSAtari911│ ▾ Team Meeting         │
84029ccd446eSAtari911│   Mon, Feb 8  ← Green  │
84039ccd446eSAtari911│                        │
84049ccd446eSAtari911│   Details     ← Gray ✗ │
84059ccd446eSAtari911│   Description ← Gray ✗ │
84069ccd446eSAtari911│   [✏️] [��️]            │
84079ccd446eSAtari911└────────────────────────┘
84089ccd446eSAtari911```
84099ccd446eSAtari911
84109ccd446eSAtari911**AFTER (v4.8.0)**:
84119ccd446eSAtari911```
84129ccd446eSAtari911Matrix Theme - Expanded Event:
84139ccd446eSAtari911┌────────────────────────┐
84149ccd446eSAtari911│ ▾ Team Meeting         │
84159ccd446eSAtari911│   Mon, Feb 8  ← Green  │
84169ccd446eSAtari911│                        │
84179ccd446eSAtari911│   Details     ← Green ✓│
84189ccd446eSAtari911│   Description ← Green ✓│
84199ccd446eSAtari911│   [✏️] [��️]            │
84209ccd446eSAtari911└────────────────────────┘
84219ccd446eSAtari911
84229ccd446eSAtari911Entire event themed!
84239ccd446eSAtari911```
84249ccd446eSAtari911
84259ccd446eSAtari911### What's Themed Now
84269ccd446eSAtari911
84279ccd446eSAtari911**Event Item Structure** (all themed):
84289ccd446eSAtari911```
84299ccd446eSAtari911event-compact-item        ← Themed ✓
84309ccd446eSAtari911  └─ event-info           ← Themed ✓ (v4.8.0!)
84319ccd446eSAtari911      ├─ event-title-row  ← Themed ✓
84329ccd446eSAtari911      ├─ event-meta       ← Themed ✓ (v4.8.0!)
84339ccd446eSAtari911      └─ event-desc       ← Themed ✓ (v4.8.0!)
84349ccd446eSAtari911```
84359ccd446eSAtari911
84369ccd446eSAtari911**Every layer has background!**
84379ccd446eSAtari911
84389ccd446eSAtari911### Matrix Theme Example
84399ccd446eSAtari911
84409ccd446eSAtari911**Complete event**:
84419ccd446eSAtari911```
84429ccd446eSAtari911┌────────────────────────────┐
84439ccd446eSAtari911│ Team Meeting               │ ← Dark green bg
84449ccd446eSAtari911│   Mon, Feb 8 • 2:00 PM     │ ← Dark green bg
84459ccd446eSAtari911│   Discussed Q1 goals and   │ ← Dark green bg
84469ccd446eSAtari911│   set targets for team     │ ← Dark green bg
84479ccd446eSAtari911│   [✏️] [��️] [☑]           │ ← Dark green bg
84489ccd446eSAtari911└────────────────────────────┘
84499ccd446eSAtari911
84509ccd446eSAtari911Consistent green throughout! ✓
84519ccd446eSAtari911```
84529ccd446eSAtari911
84539ccd446eSAtari911### Purple Theme Example
84549ccd446eSAtari911
84559ccd446eSAtari911```
84569ccd446eSAtari911┌────────────────────────────┐
84579ccd446eSAtari911│ Team Meeting               │ ← Dark purple bg
84589ccd446eSAtari911│   Mon, Feb 8 • 2:00 PM     │ ← Dark purple bg
84599ccd446eSAtari911│   Discussed Q1 goals       │ ← Dark purple bg
84609ccd446eSAtari911│   [✏️] [��️] [☑]           │ ← Dark purple bg
84619ccd446eSAtari911└────────────────────────────┘
84629ccd446eSAtari911
84639ccd446eSAtari911Consistent purple throughout! ✓
84649ccd446eSAtari911```
84659ccd446eSAtari911
84669ccd446eSAtari911### Professional Theme Example
84679ccd446eSAtari911
84689ccd446eSAtari911```
84699ccd446eSAtari911┌────────────────────────────┐
84709ccd446eSAtari911│ Team Meeting               │ ← Light bg
84719ccd446eSAtari911│   Mon, Feb 8 • 2:00 PM     │ ← Light bg
84729ccd446eSAtari911│   Discussed Q1 goals       │ ← Light bg
84739ccd446eSAtari911│   [✏️] [��️] [☑]           │ ← Light bg
84749ccd446eSAtari911└────────────────────────────┘
84759ccd446eSAtari911
84769ccd446eSAtari911Consistent light throughout! ✓
84779ccd446eSAtari911```
84789ccd446eSAtari911
84799ccd446eSAtari911### Pink Theme Example
84809ccd446eSAtari911
84819ccd446eSAtari911```
84829ccd446eSAtari911┌────────────────────────────┐
84839ccd446eSAtari911│ Team Meeting               │ ← Dark pink bg
84849ccd446eSAtari911│   Mon, Feb 8 • 2:00 PM     │ ← Dark pink bg
84859ccd446eSAtari911│   Discussed Q1 goals       │ ← Dark pink bg
84869ccd446eSAtari911│   [✏️] [��️] [☑]           │ ← Dark pink bg
84879ccd446eSAtari911└────────────────────────────┘
84889ccd446eSAtari911
84899ccd446eSAtari911Consistent pink throughout! ✓
84909ccd446eSAtari911```
84919ccd446eSAtari911
84929ccd446eSAtari911### Complete Theming
84939ccd446eSAtari911
84949ccd446eSAtari911**Every element, every layer**:
84959ccd446eSAtari911- ✅ Container
84969ccd446eSAtari911- ✅ Event item
84979ccd446eSAtari911- ✅ Event info wrapper (v4.8.0!)
84989ccd446eSAtari911- ✅ Title row
84999ccd446eSAtari911- ✅ Meta div (v4.8.0!)
85009ccd446eSAtari911- ✅ Description div (v4.8.0!)
85019ccd446eSAtari911- ✅ Action buttons
85029ccd446eSAtari911- ✅ Checkboxes
85039ccd446eSAtari911
85049ccd446eSAtari911**No gray anywhere!** ��
85059ccd446eSAtari911
85069ccd446eSAtari911### Why Multiple Backgrounds?
85079ccd446eSAtari911
85089ccd446eSAtari911**CSS layers stack**:
85099ccd446eSAtari911```html
85109ccd446eSAtari911<div style="background: green;">         ← Layer 1
85119ccd446eSAtari911  <div style="background: inherit;">     ← Could be gray!
85129ccd446eSAtari911    <div>Content</div>                   ← Inherits gray!
85139ccd446eSAtari911  </div>
85149ccd446eSAtari911</div>
85159ccd446eSAtari911
85169ccd446eSAtari911Better:
85179ccd446eSAtari911<div style="background: green;">         ← Layer 1
85189ccd446eSAtari911  <div style="background: green;">       ← Layer 2 forced
85199ccd446eSAtari911    <div style="background: green;">     ← Layer 3 forced
85209ccd446eSAtari911      Content                            ← All green!
85219ccd446eSAtari911    </div>
85229ccd446eSAtari911  </div>
85239ccd446eSAtari911</div>
85249ccd446eSAtari911```
85259ccd446eSAtari911
85269ccd446eSAtari911**Every layer forced = Perfect theming!**
85279ccd446eSAtari911
85289ccd446eSAtari911### !important Everywhere
85299ccd446eSAtari911
85309ccd446eSAtari911**All styling now uses !important**:
85319ccd446eSAtari911- background: ... !important
85329ccd446eSAtari911- color: ... !important
85339ccd446eSAtari911
85349ccd446eSAtari911**Result**: CSS cannot override themes!
85359ccd446eSAtari911
85369ccd446eSAtari911**Version 4.8.0 = Complete, bulletproof theming!** ��✨
85379ccd446eSAtari911
85389ccd446eSAtari911## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS
85399ccd446eSAtari911
85409ccd446eSAtari911### �� Fixed: Past Event Expanded Background Themed
85419ccd446eSAtari911- **Fixed:** Past event meta div now has theme background when expanded
85429ccd446eSAtari911- **Fixed:** Both PHP and JavaScript render with theme background
85439ccd446eSAtari911- **Result:** Expanded past events have proper themed background!
85449ccd446eSAtari911
85459ccd446eSAtari911### ✅ Fixed: Checkboxes Now Themed
85469ccd446eSAtari911- **Fixed:** Task checkboxes use accent-color matching theme
85479ccd446eSAtari911- **Fixed:** Cursor changes to pointer on hover
85489ccd446eSAtari911- **Result:** Checkboxes match theme color!
85499ccd446eSAtari911
85509ccd446eSAtari911### �� Fixed: Action Buttons (Edit/Delete) Themed
85519ccd446eSAtari911- **Fixed:** Edit (✏️) and Delete (��️) buttons now themed
85529ccd446eSAtari911- **Fixed:** Background, text, and border all use theme colors
85539ccd446eSAtari911- **Result:** All icons themed!
85549ccd446eSAtari911
85559ccd446eSAtari911### All Changes
85569ccd446eSAtari911
85579ccd446eSAtari911**1. Past Event Expanded Background**:
85589ccd446eSAtari911
85599ccd446eSAtari911**PHP**:
85609ccd446eSAtari911```php
85619ccd446eSAtari911// Before:
85629ccd446eSAtari911<div class="event-meta-compact" style="display:none;">
85639ccd446eSAtari911
85649ccd446eSAtari911// After:
85659ccd446eSAtari911<div class="event-meta-compact"
85669ccd446eSAtari911     style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;">
85679ccd446eSAtari911```
85689ccd446eSAtari911
85699ccd446eSAtari911**JavaScript**: Same treatment
85709ccd446eSAtari911
85719ccd446eSAtari911**Result**: Expanded past events have themed background!
85729ccd446eSAtari911
85739ccd446eSAtari911**2. Task Checkboxes**:
85749ccd446eSAtari911
85759ccd446eSAtari911**PHP & JavaScript**:
85769ccd446eSAtari911```php
85779ccd446eSAtari911// Added accent-color:
85789ccd446eSAtari911<input type="checkbox"
85799ccd446eSAtari911       style="accent-color:' . $themeStyles['border'] . ' !important;
85809ccd446eSAtari911              cursor:pointer;">
85819ccd446eSAtari911```
85829ccd446eSAtari911
85839ccd446eSAtari911**accent-color** changes the checkbox color:
85849ccd446eSAtari911- Matrix: Green checkboxes ✓
85859ccd446eSAtari911- Purple: Purple checkboxes ✓
85869ccd446eSAtari911- Professional: Blue checkboxes ✓
85879ccd446eSAtari911- Pink: Pink checkboxes ✓
85889ccd446eSAtari911
85899ccd446eSAtari911**3. Edit/Delete Buttons**:
85909ccd446eSAtari911
85919ccd446eSAtari911**PHP**:
85929ccd446eSAtari911```php
85939ccd446eSAtari911<button class="event-action-btn"
85949ccd446eSAtari911        style="color:' . $themeStyles['text_primary'] . ' !important;
85959ccd446eSAtari911               background:' . $themeStyles['cell_bg'] . ' !important;
85969ccd446eSAtari911               border-color:' . $themeStyles['grid_border'] . ' !important;">
85979ccd446eSAtari911    ��️
85989ccd446eSAtari911</button>
85999ccd446eSAtari911```
86009ccd446eSAtari911
86019ccd446eSAtari911**JavaScript**: Same
86029ccd446eSAtari911
86039ccd446eSAtari911**Result**: Buttons blend with theme!
86049ccd446eSAtari911
86059ccd446eSAtari911### Before vs After
86069ccd446eSAtari911
86079ccd446eSAtari911**BEFORE (v4.7.8)**:
86089ccd446eSAtari911```
86099ccd446eSAtari911Past Event (expanded):
86109ccd446eSAtari911┌─────────────────────────┐
86119ccd446eSAtari911│ ▾ Team Meeting          │
86129ccd446eSAtari911│   Mon, Feb 8            │ ← White background ✗
86139ccd446eSAtari911│   Description           │
86149ccd446eSAtari911├─────────────────────────┤
86159ccd446eSAtari911│ [✏️] [��️] [☐]          │ ← Default colors ✗
86169ccd446eSAtari911└─────────────────────────┘
86179ccd446eSAtari911```
86189ccd446eSAtari911
86199ccd446eSAtari911**AFTER (v4.7.9)**:
86209ccd446eSAtari911```
86219ccd446eSAtari911Past Event (expanded - Matrix):
86229ccd446eSAtari911┌─────────────────────────┐
86239ccd446eSAtari911│ ▾ Team Meeting          │
86249ccd446eSAtari911│   Mon, Feb 8            │ ← Dark green bg ✓
86259ccd446eSAtari911│   Description           │
86269ccd446eSAtari911├─────────────────────────┤
86279ccd446eSAtari911│ [✏️] [��️] [☑]          │ ← Themed ✓
86289ccd446eSAtari911└─────────────────────────┘
86299ccd446eSAtari911```
86309ccd446eSAtari911
86319ccd446eSAtari911### Matrix Theme Example
86329ccd446eSAtari911
86339ccd446eSAtari911**Checkboxes**: Green accent
86349ccd446eSAtari911**Buttons**: Dark bg, green text, green borders
86359ccd446eSAtari911**Expanded**: Dark green background
86369ccd446eSAtari911
86379ccd446eSAtari911```
86389ccd446eSAtari911Task: ☑ Complete report  ← Green checkmark
86399ccd446eSAtari911[✏️] [��️]                ← Dark buttons with green
86409ccd446eSAtari911```
86419ccd446eSAtari911
86429ccd446eSAtari911### Purple Theme Example
86439ccd446eSAtari911
86449ccd446eSAtari911**Checkboxes**: Purple accent
86459ccd446eSAtari911**Buttons**: Dark purple bg, lavender text
86469ccd446eSAtari911**Expanded**: Dark purple background
86479ccd446eSAtari911
86489ccd446eSAtari911```
86499ccd446eSAtari911Task: ☑ Complete report  ← Purple checkmark
86509ccd446eSAtari911[✏️] [��️]                ← Purple themed
86519ccd446eSAtari911```
86529ccd446eSAtari911
86539ccd446eSAtari911### Professional Theme Example
86549ccd446eSAtari911
86559ccd446eSAtari911**Checkboxes**: Blue accent
86569ccd446eSAtari911**Buttons**: Light bg, dark text
86579ccd446eSAtari911**Expanded**: Light background
86589ccd446eSAtari911
86599ccd446eSAtari911```
86609ccd446eSAtari911Task: ☑ Complete report  ← Blue checkmark
86619ccd446eSAtari911[✏️] [��️]                ← Light themed
86629ccd446eSAtari911```
86639ccd446eSAtari911
86649ccd446eSAtari911### Pink Theme Example
86659ccd446eSAtari911
86669ccd446eSAtari911**Checkboxes**: Pink accent
86679ccd446eSAtari911**Buttons**: Dark pink bg, pink text
86689ccd446eSAtari911**Expanded**: Dark pink background
86699ccd446eSAtari911
86709ccd446eSAtari911```
86719ccd446eSAtari911Task: ☑ Complete report  ← Pink checkmark
86729ccd446eSAtari911[✏️] [��️]                ← Pink themed
86739ccd446eSAtari911```
86749ccd446eSAtari911
86759ccd446eSAtari911### Complete Icon Coverage
86769ccd446eSAtari911
86779ccd446eSAtari911**Themed Icons/Buttons**:
86789ccd446eSAtari911- ✅ Task checkboxes (accent-color)
86799ccd446eSAtari911- ✅ Edit button (✏️)
86809ccd446eSAtari911- ✅ Delete button (��️)
86819ccd446eSAtari911- ✅ Navigation arrows (◀ ▶)
86829ccd446eSAtari911- ✅ Today button
86839ccd446eSAtari911- ✅ Past Events arrow (▶)
86849ccd446eSAtari911
86859ccd446eSAtari911**All interactive elements themed!** ��
86869ccd446eSAtari911
86879ccd446eSAtari911### How accent-color Works
86889ccd446eSAtari911
86899ccd446eSAtari911**Modern CSS property** for form controls:
86909ccd446eSAtari911```css
86919ccd446eSAtari911input[type="checkbox"] {
86929ccd446eSAtari911    accent-color: #00cc07; /* Green checkbox! */
86939ccd446eSAtari911}
86949ccd446eSAtari911```
86959ccd446eSAtari911
86969ccd446eSAtari911**Browser support**: All modern browsers ✓
86979ccd446eSAtari911
86989ccd446eSAtari911**Result**: Checkboxes automatically match theme!
86999ccd446eSAtari911
87009ccd446eSAtari911### Complete Theme Coverage
87019ccd446eSAtari911
87029ccd446eSAtari911**Backgrounds**:
87039ccd446eSAtari911- ✅ Container
87049ccd446eSAtari911- ✅ Calendar-left
87059ccd446eSAtari911- ✅ Calendar-right
87069ccd446eSAtari911- ✅ Event items
87079ccd446eSAtari911- ✅ Past event expanded (v4.7.9!)
87089ccd446eSAtari911- ✅ Action buttons (v4.7.9!)
87099ccd446eSAtari911
87109ccd446eSAtari911**Icons/Controls**:
87119ccd446eSAtari911- ✅ Checkboxes (v4.7.9!)
87129ccd446eSAtari911- ✅ Edit/Delete buttons (v4.7.9!)
87139ccd446eSAtari911- ✅ Navigation buttons
87149ccd446eSAtari911- ✅ All arrows
87159ccd446eSAtari911
87169ccd446eSAtari911**Every element perfectly themed!** ��✨
87179ccd446eSAtari911
87189ccd446eSAtari911## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS
87199ccd446eSAtari911
87209ccd446eSAtari911### �� Fixed: White Bar at Bottom of Calendar
87219ccd446eSAtari911- **Fixed:** Added background to calendar-left div with !important
87229ccd446eSAtari911- **Result:** No more white bar at bottom!
87239ccd446eSAtari911
87249ccd446eSAtari911### �� Fixed: Past Event Expanded Details Not Themed
87259ccd446eSAtari911- **Fixed:** Past event date/time now themed when expanded
87269ccd446eSAtari911- **Fixed:** Past event descriptions now themed when expanded
87279ccd446eSAtari911- **Fixed:** Both PHP and JavaScript render with theme colors
87289ccd446eSAtari911- **Result:** Expanding past events shows themed text!
87299ccd446eSAtari911
87309ccd446eSAtari911### �� Fixed: Event Description Text Color
87319ccd446eSAtari911- **Fixed:** All event descriptions now use theme text_dim color
87329ccd446eSAtari911- **Fixed:** Both visible and hidden descriptions themed
87339ccd446eSAtari911- **Result:** Descriptions always match theme!
87349ccd446eSAtari911
87359ccd446eSAtari911### All Changes
87369ccd446eSAtari911
87379ccd446eSAtari911**1. Bottom White Bar** (calendar-left div):
87389ccd446eSAtari911
87399ccd446eSAtari911**Before**:
87409ccd446eSAtari911```html
87419ccd446eSAtari911<div class="calendar-compact-left">
87429ccd446eSAtari911<!-- White background showing at bottom -->
87439ccd446eSAtari911```
87449ccd446eSAtari911
87459ccd446eSAtari911**After**:
87469ccd446eSAtari911```html
87479ccd446eSAtari911<div class="calendar-compact-left"
87489ccd446eSAtari911     style="background: #242424 !important;">
87499ccd446eSAtari911<!-- Matches theme background -->
87509ccd446eSAtari911```
87519ccd446eSAtari911
87529ccd446eSAtari911**2. Past Event Expanded Details**:
87539ccd446eSAtari911
87549ccd446eSAtari911**PHP** - Added colors to hidden details:
87559ccd446eSAtari911```php
87569ccd446eSAtari911// Past event meta (hidden):
87579ccd446eSAtari911<span class="event-date-time"
87589ccd446eSAtari911      style="color:' . $themeStyles['text_dim'] . ' !important;">
87599ccd446eSAtari911
87609ccd446eSAtari911// Past event description (hidden):
87619ccd446eSAtari911<div class="event-desc-compact"
87629ccd446eSAtari911     style="display:none; color:' . $themeStyles['text_dim'] . ' !important;">
87639ccd446eSAtari911```
87649ccd446eSAtari911
87659ccd446eSAtari911**JavaScript** - Same treatment:
87669ccd446eSAtari911```javascript
87679ccd446eSAtari911// Past event meta:
87689ccd446eSAtari911html += '<span class="event-date-time"
87699ccd446eSAtari911              style="color:' + themeStyles.text_dim + ' !important;">';
87709ccd446eSAtari911
87719ccd446eSAtari911// Past event description:
87729ccd446eSAtari911html += '<div class="event-desc-compact"
87739ccd446eSAtari911              style="display: none; color:' + themeStyles.text_dim + ' !important;">';
87749ccd446eSAtari911```
87759ccd446eSAtari911
87769ccd446eSAtari911**3. All Event Descriptions**:
87779ccd446eSAtari911
87789ccd446eSAtari911**Both visible and hidden descriptions now themed**:
87799ccd446eSAtari911```php
87809ccd446eSAtari911// PHP:
87819ccd446eSAtari911style="color:' . $themeStyles['text_dim'] . ' !important;"
87829ccd446eSAtari911
87839ccd446eSAtari911// JavaScript:
87849ccd446eSAtari911style="color:' + themeStyles.text_dim + ' !important;"
87859ccd446eSAtari911```
87869ccd446eSAtari911
87879ccd446eSAtari911### Before vs After
87889ccd446eSAtari911
87899ccd446eSAtari911**BEFORE (v4.7.7)**:
87909ccd446eSAtari911```
87919ccd446eSAtari911Calendar bottom:
87929ccd446eSAtari911┌──────────────┐
87939ccd446eSAtari911│ Calendar     │
87949ccd446eSAtari911│ Grid         │
87959ccd446eSAtari911└──────────────┘
87969ccd446eSAtari911▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar
87979ccd446eSAtari911
87989ccd446eSAtari911Past Event (collapsed):
87999ccd446eSAtari911▸ Team Meeting
88009ccd446eSAtari911
88019ccd446eSAtari911Past Event (expanded):
88029ccd446eSAtari911▾ Team Meeting
88039ccd446eSAtari911  Mon, Feb 8 ← Gray text ✗
88049ccd446eSAtari911  Description ← Gray text ✗
88059ccd446eSAtari911```
88069ccd446eSAtari911
88079ccd446eSAtari911**AFTER (v4.7.8)**:
88089ccd446eSAtari911```
88099ccd446eSAtari911Calendar bottom:
88109ccd446eSAtari911┌──────────────┐
88119ccd446eSAtari911│ Calendar     │
88129ccd446eSAtari911│ Grid         │
88139ccd446eSAtari911└──────────────┘
88149ccd446eSAtari911No white bar! ✓
88159ccd446eSAtari911
88169ccd446eSAtari911Past Event (collapsed):
88179ccd446eSAtari911▸ Team Meeting
88189ccd446eSAtari911
88199ccd446eSAtari911Past Event (expanded):
88209ccd446eSAtari911▾ Team Meeting
88219ccd446eSAtari911  Mon, Feb 8 ← Theme dim color ✓
88229ccd446eSAtari911  Description ← Theme dim color ✓
88239ccd446eSAtari911```
88249ccd446eSAtari911
88259ccd446eSAtari911### Matrix Theme Example
88269ccd446eSAtari911
88279ccd446eSAtari911**Past event expanded**:
88289ccd446eSAtari911```
88299ccd446eSAtari911▾ Team Meeting (past)
88309ccd446eSAtari911  Mon, Feb 8 • 2:00 PM  ← Dim green (#00aa00)
88319ccd446eSAtari911  Discussed Q1 goals   ← Dim green (#00aa00)
88329ccd446eSAtari911
88339ccd446eSAtari911Everything themed! ✓
88349ccd446eSAtari911```
88359ccd446eSAtari911
88369ccd446eSAtari911### Purple Theme Example
88379ccd446eSAtari911
88389ccd446eSAtari911**Past event expanded**:
88399ccd446eSAtari911```
88409ccd446eSAtari911▾ Team Meeting (past)
88419ccd446eSAtari911  Mon, Feb 8 • 2:00 PM  ← Dim purple (#8e7ab8)
88429ccd446eSAtari911  Discussed Q1 goals   ← Dim purple (#8e7ab8)
88439ccd446eSAtari911
88449ccd446eSAtari911Everything themed! ✓
88459ccd446eSAtari911```
88469ccd446eSAtari911
88479ccd446eSAtari911### Professional Theme Example
88489ccd446eSAtari911
88499ccd446eSAtari911**Past event expanded**:
88509ccd446eSAtari911```
88519ccd446eSAtari911▾ Team Meeting (past)
88529ccd446eSAtari911  Mon, Feb 8 • 2:00 PM  ← Gray (#7f8c8d)
88539ccd446eSAtari911  Discussed Q1 goals   ← Gray (#7f8c8d)
88549ccd446eSAtari911
88559ccd446eSAtari911Everything themed! ✓
88569ccd446eSAtari911```
88579ccd446eSAtari911
88589ccd446eSAtari911### Pink Theme Example
88599ccd446eSAtari911
88609ccd446eSAtari911**Past event expanded**:
88619ccd446eSAtari911```
88629ccd446eSAtari911▾ Team Meeting (past)
88639ccd446eSAtari911  Mon, Feb 8 • 2:00 PM  ← Light pink (#ff85c1)
88649ccd446eSAtari911  Discussed Q1 goals   ← Light pink (#ff85c1)
88659ccd446eSAtari911
88669ccd446eSAtari911Everything themed! ✓
88679ccd446eSAtari911```
88689ccd446eSAtari911
88699ccd446eSAtari911### Complete Coverage
88709ccd446eSAtari911
88719ccd446eSAtari911**Calendar Layout**:
88729ccd446eSAtari911- ✅ Container background
88739ccd446eSAtari911- ✅ Calendar-left background (v4.7.8!)
88749ccd446eSAtari911- ✅ Calendar-right background
88759ccd446eSAtari911- ✅ No white bars anywhere!
88769ccd446eSAtari911
88779ccd446eSAtari911**Event Details**:
88789ccd446eSAtari911- ✅ Event titles
88799ccd446eSAtari911- ✅ Event dates/times
88809ccd446eSAtari911- ✅ Event descriptions (visible) (v4.7.8!)
88819ccd446eSAtari911- ✅ Past event dates (expanded) (v4.7.8!)
88829ccd446eSAtari911- ✅ Past event descriptions (expanded) (v4.7.8!)
88839ccd446eSAtari911
88849ccd446eSAtari911**Absolutely everything themed!** ��
88859ccd446eSAtari911
88869ccd446eSAtari911## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS
88879ccd446eSAtari911
88889ccd446eSAtari911### �� Fixed: Added !important to EVERY Themed Element
88899ccd446eSAtari911- **Fixed:** S M T W T F S headers now have background + color with !important
88909ccd446eSAtari911- **Fixed:** "Past Events" text now has explicit color with !important
88919ccd446eSAtari911- **Fixed:** Today cell background now forced with !important
88929ccd446eSAtari911- **Fixed:** All day numbers now have !important color
88939ccd446eSAtari911- **Fixed:** Empty cells now have !important background
88949ccd446eSAtari911- **Result:** CSS CANNOT override themes anymore!
88959ccd446eSAtari911
88969ccd446eSAtari911### The Nuclear Option: !important Everywhere
88979ccd446eSAtari911
88989ccd446eSAtari911**Problem**: DokuWiki CSS was still winning:
88999ccd446eSAtari911```css
89009ccd446eSAtari911/* DokuWiki theme overriding everything: */
89019ccd446eSAtari911.dokuwiki table th { background: white !important; color: black !important; }
89029ccd446eSAtari911.dokuwiki td { background: white !important; }
89039ccd446eSAtari911```
89049ccd446eSAtari911
89059ccd446eSAtari911**Solution**: Add !important to EVERY inline style:
89069ccd446eSAtari911```html
89079ccd446eSAtari911<th style="background: #242424 !important; color: #00cc07 !important;">
89089ccd446eSAtari911<td style="background: #2a4d2a !important; color: #00cc07 !important;">
89099ccd446eSAtari911<span style="color: #00cc07 !important;">
89109ccd446eSAtari911```
89119ccd446eSAtari911
89129ccd446eSAtari911### All Changes
89139ccd446eSAtari911
89149ccd446eSAtari911**1. Table Headers (S M T W T F S)**:
89159ccd446eSAtari911
89169ccd446eSAtari911**PHP** - Added background + !important everywhere:
89179ccd446eSAtari911```php
89189ccd446eSAtari911$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important;
89199ccd446eSAtari911            color:' . $themeStyles['text_primary'] . ' !important;
89209ccd446eSAtari911            border-color:' . $themeStyles['grid_border'] . ' !important;
89219ccd446eSAtari911            font-weight:bold !important;';
89229ccd446eSAtari911```
89239ccd446eSAtari911
89249ccd446eSAtari911**JavaScript** - Added background to each th:
89259ccd446eSAtari911```javascript
89269ccd446eSAtari911th.style.setProperty('background', themeStyles.header_bg, 'important');
89279ccd446eSAtari911th.style.setProperty('color', themeStyles.text_primary, 'important');
89289ccd446eSAtari911th.style.setProperty('border-color', themeStyles.grid_border, 'important');
89299ccd446eSAtari911th.style.setProperty('font-weight', 'bold', 'important');
89309ccd446eSAtari911```
89319ccd446eSAtari911
89329ccd446eSAtari911**2. Past Events Text**:
89339ccd446eSAtari911
89349ccd446eSAtari911**PHP** - Added !important to spans:
89359ccd446eSAtari911```php
89369ccd446eSAtari911<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span>
89379ccd446eSAtari911<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span>
89389ccd446eSAtari911```
89399ccd446eSAtari911
89409ccd446eSAtari911**JavaScript** - Same treatment:
89419ccd446eSAtari911```javascript
89429ccd446eSAtari911html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>';
89439ccd446eSAtari911html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>';
89449ccd446eSAtari911```
89459ccd446eSAtari911
89469ccd446eSAtari911**3. Today Cell & All Cells**:
89479ccd446eSAtari911
89489ccd446eSAtari911**PHP** - !important on background and color:
89499ccd446eSAtari911```php
89509ccd446eSAtari911// Today or regular cell:
89519ccd446eSAtari911$cellStyle = 'background:' . $cellBg . ' !important;
89529ccd446eSAtari911              color:' . $themeStyles['text_primary'] . ' !important;';
89539ccd446eSAtari911
89549ccd446eSAtari911// Day number:
89559ccd446eSAtari911<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;">
89569ccd446eSAtari911```
89579ccd446eSAtari911
89589ccd446eSAtari911**JavaScript** - Same:
89599ccd446eSAtari911```javascript
89609ccd446eSAtari911style="background:${cellBg} !important; color:${cellColor} !important;"
89619ccd446eSAtari911
89629ccd446eSAtari911<span style="color:${cellColor} !important;">${currentDay}</span>
89639ccd446eSAtari911```
89649ccd446eSAtari911
89659ccd446eSAtari911**4. Empty Cells**:
89669ccd446eSAtari911
89679ccd446eSAtari911**PHP & JavaScript** - !important:
89689ccd446eSAtari911```php
89699ccd446eSAtari911style="background:' . $themeStyles['bg'] . ' !important;"
89709ccd446eSAtari911```
89719ccd446eSAtari911
89729ccd446eSAtari911### Before vs After
89739ccd446eSAtari911
89749ccd446eSAtari911**BEFORE (v4.7.6)** - CSS still winning:
89759ccd446eSAtari911```
89769ccd446eSAtari911S M T W T F S → White background, black text ✗
89779ccd446eSAtari911Today cell → White background ✗
89789ccd446eSAtari911Past Events → Black text ✗
89799ccd446eSAtari911```
89809ccd446eSAtari911
89819ccd446eSAtari911**AFTER (v4.7.7)** - Theme wins:
89829ccd446eSAtari911```
89839ccd446eSAtari911S M T W T F S → Theme background, theme text ✓
89849ccd446eSAtari911Today cell → Theme highlight ✓
89859ccd446eSAtari911Past Events → Theme text ✓
89869ccd446eSAtari911
89879ccd446eSAtari911NOTHING can override !important inline styles!
89889ccd446eSAtari911```
89899ccd446eSAtari911
89909ccd446eSAtari911### Matrix Theme Example
89919ccd446eSAtari911
89929ccd446eSAtari911**Complete theming**:
89939ccd446eSAtari911```
89949ccd446eSAtari911┌──────────────────────────┐
89959ccd446eSAtari911│ S M T W T F S            │ ← Dark bg (#2a2a2a), Green text (#00cc07)
89969ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤
89979ccd446eSAtari911│ │ │1│2│3│4│5             │ ← Dark cells (#242424), Green nums (#00cc07)
89989ccd446eSAtari911│ │ │ │ │ │[8]│             │ ← Today green highlight (#2a4d2a)
89999ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤
90009ccd446eSAtari911│ ▶ Past Events (3)        │ ← Dim green text (#00aa00)
90019ccd446eSAtari911└──────────────────────────┘
90029ccd446eSAtari911
90039ccd446eSAtari911Every element forced with !important ✓
90049ccd446eSAtari911```
90059ccd446eSAtari911
90069ccd446eSAtari911### Purple Theme Example
90079ccd446eSAtari911
90089ccd446eSAtari911```
90099ccd446eSAtari911┌──────────────────────────┐
90109ccd446eSAtari911│ S M T W T F S            │ ← Dark purple bg, Lavender text
90119ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤
90129ccd446eSAtari911│ │ │1│2│3│4│5             │ ← Dark purple cells, Lavender nums
90139ccd446eSAtari911│ │ │ │ │ │[8]│             │ ← Today purple highlight
90149ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤
90159ccd446eSAtari911│ ▶ Past Events (3)        │ ← Dim purple text
90169ccd446eSAtari911└──────────────────────────┘
90179ccd446eSAtari911
90189ccd446eSAtari911Forced purple everywhere ✓
90199ccd446eSAtari911```
90209ccd446eSAtari911
90219ccd446eSAtari911### Professional Theme Example
90229ccd446eSAtari911
90239ccd446eSAtari911```
90249ccd446eSAtari911┌──────────────────────────┐
90259ccd446eSAtari911│ S M T W T F S            │ ← Light bg, Dark text
90269ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤
90279ccd446eSAtari911│ │ │1│2│3│4│5             │ ← Light cells, Dark nums
90289ccd446eSAtari911│ │ │ │ │ │[8]│             │ ← Today light blue highlight
90299ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤
90309ccd446eSAtari911│ ▶ Past Events (3)        │ ← Gray text
90319ccd446eSAtari911└──────────────────────────┘
90329ccd446eSAtari911
90339ccd446eSAtari911Forced professional everywhere ✓
90349ccd446eSAtari911```
90359ccd446eSAtari911
90369ccd446eSAtari911### Pink Theme Example
90379ccd446eSAtari911
90389ccd446eSAtari911```
90399ccd446eSAtari911┌──────────────────────────┐
90409ccd446eSAtari911│ S M T W T F S            │ ← Dark pink bg, Pink text
90419ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤
90429ccd446eSAtari911│ │ │1│2│3│4│5  ✨         │ ← Dark pink cells, Pink nums
90439ccd446eSAtari911│ │ │ │ │ │[8]│  ��         │ ← Today pink highlight
90449ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤
90459ccd446eSAtari911│ ▶ Past Events (3)        │ ← Light pink text
90469ccd446eSAtari911└──────────────────────────┘
90479ccd446eSAtari911
90489ccd446eSAtari911Forced pink sparkles everywhere ✓
90499ccd446eSAtari911```
90509ccd446eSAtari911
90519ccd446eSAtari911### Why So Aggressive?
90529ccd446eSAtari911
90539ccd446eSAtari911**!important priority**:
90549ccd446eSAtari911```
90559ccd446eSAtari9111. Inline style with !important ← We use this
90569ccd446eSAtari9112. CSS rule with !important
90579ccd446eSAtari9113. Inline style without !important
90589ccd446eSAtari9114. CSS rule without !important
90599ccd446eSAtari911```
90609ccd446eSAtari911
90619ccd446eSAtari911**We win**: Our inline `!important` beats everything!
90629ccd446eSAtari911
90639ccd446eSAtari911### Complete !important Coverage
90649ccd446eSAtari911
90659ccd446eSAtari911**Every themed element now has !important**:
90669ccd446eSAtari911- ✅ S M T W T F S (background + color)
90679ccd446eSAtari911- ✅ Day numbers (color)
90689ccd446eSAtari911- ✅ Today cell (background + color)
90699ccd446eSAtari911- ✅ Empty cells (background)
90709ccd446eSAtari911- ✅ Past Events text (color)
90719ccd446eSAtari911- ✅ Past Events arrow (color)
90729ccd446eSAtari911- ✅ Event titles (color)
90739ccd446eSAtari911- ✅ Event dates (color)
90749ccd446eSAtari911
90759ccd446eSAtari911**No CSS can override themes!** ��
90769ccd446eSAtari911
90779ccd446eSAtari911## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS
90789ccd446eSAtari911
90799ccd446eSAtari911### �� Fixed: Event Sidebar Text Now Themed
90809ccd446eSAtari911- **Fixed:** Event titles now have explicit color styling
90819ccd446eSAtari911- **Fixed:** Event dates/times now have explicit color styling (dimmed)
90829ccd446eSAtari911- **Fixed:** Both PHP and JavaScript event rendering now styled
90839ccd446eSAtari911
90849ccd446eSAtari911### �� Enhanced: Table Header Colors Now Forced with !important
90859ccd446eSAtari911- **Fixed:** S M T W T F S now uses `!important` to override any CSS
90869ccd446eSAtari911- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag
90879ccd446eSAtari911- **Result:** Header colors CANNOT be overridden!
90889ccd446eSAtari911
90899ccd446eSAtari911### What Was Fixed
90909ccd446eSAtari911
90919ccd446eSAtari911**1. Event Text in Sidebar** (was missing):
90929ccd446eSAtari911
90939ccd446eSAtari911**PHP** - Explicit colors added:
90949ccd446eSAtari911```php
90959ccd446eSAtari911// Event title:
90969ccd446eSAtari911<span class="event-title-compact"
90979ccd446eSAtari911      style="color:' . $themeStyles['text_primary'] . ';">
90989ccd446eSAtari911
90999ccd446eSAtari911// Event date/time:
91009ccd446eSAtari911<span class="event-date-time"
91019ccd446eSAtari911      style="color:' . $themeStyles['text_dim'] . ';">
91029ccd446eSAtari911```
91039ccd446eSAtari911
91049ccd446eSAtari911**JavaScript** - Explicit colors added:
91059ccd446eSAtari911```javascript
91069ccd446eSAtari911// Event title:
91079ccd446eSAtari911html += '<span class="event-title-compact"
91089ccd446eSAtari911               style="color:' + themeStyles.text_primary + ';">';
91099ccd446eSAtari911
91109ccd446eSAtari911// Event date/time:
91119ccd446eSAtari911html += '<span class="event-date-time"
91129ccd446eSAtari911               style="color:' + themeStyles.text_dim + ';">';
91139ccd446eSAtari911```
91149ccd446eSAtari911
91159ccd446eSAtari911**2. Table Header Colors** (was being overridden):
91169ccd446eSAtari911
91179ccd446eSAtari911**PHP** - Added !important:
91189ccd446eSAtari911```php
91199ccd446eSAtari911// Row:
91209ccd446eSAtari911style="color: ' . $themeStyles['text_primary'] . ' !important;"
91219ccd446eSAtari911
91229ccd446eSAtari911// Each th:
91239ccd446eSAtari911$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;';
91249ccd446eSAtari911<th style="' . $thStyle . '">S</th>
91259ccd446eSAtari911```
91269ccd446eSAtari911
91279ccd446eSAtari911**JavaScript** - Used setProperty with important:
91289ccd446eSAtari911```javascript
91299ccd446eSAtari911// Row:
91309ccd446eSAtari911thead.style.setProperty('color', themeStyles.text_primary, 'important');
91319ccd446eSAtari911
91329ccd446eSAtari911// Each th:
91339ccd446eSAtari911th.style.setProperty('color', themeStyles.text_primary, 'important');
91349ccd446eSAtari911```
91359ccd446eSAtari911
91369ccd446eSAtari911### Before vs After
91379ccd446eSAtari911
91389ccd446eSAtari911**BEFORE (v4.7.5)**:
91399ccd446eSAtari911```
91409ccd446eSAtari911Event List:
91419ccd446eSAtari911┌─────────────────┐
91429ccd446eSAtari911│ Team Meeting    │ ← Black/default color ✗
91439ccd446eSAtari911│ Mon, Feb 8      │ ← Black/default color ✗
91449ccd446eSAtari911└─────────────────┘
91459ccd446eSAtari911
91469ccd446eSAtari911Table Header:
91479ccd446eSAtari911S  M  T  W  T  F  S  ← Black/default color ✗
91489ccd446eSAtari911(CSS was overriding the style)
91499ccd446eSAtari911```
91509ccd446eSAtari911
91519ccd446eSAtari911**AFTER (v4.7.6)**:
91529ccd446eSAtari911```
91539ccd446eSAtari911Event List (Matrix):
91549ccd446eSAtari911┌─────────────────┐
91559ccd446eSAtari911│ Team Meeting    │ ← Green (#00cc07) ✓
91569ccd446eSAtari911│ Mon, Feb 8      │ ← Dim green (#00aa00) ✓
91579ccd446eSAtari911└─────────────────┘
91589ccd446eSAtari911
91599ccd446eSAtari911Table Header (Matrix):
91609ccd446eSAtari911S  M  T  W  T  F  S  ← Green (!important) ✓
91619ccd446eSAtari911(Cannot be overridden!)
91629ccd446eSAtari911```
91639ccd446eSAtari911
91649ccd446eSAtari911### Why !important?
91659ccd446eSAtari911
91669ccd446eSAtari911**Problem**: DokuWiki CSS was stronger:
91679ccd446eSAtari911```css
91689ccd446eSAtari911/* Some DokuWiki theme CSS: */
91699ccd446eSAtari911table th {
91709ccd446eSAtari911    color: #000 !important; /* ← Overrides inline styles */
91719ccd446eSAtari911}
91729ccd446eSAtari911```
91739ccd446eSAtari911
91749ccd446eSAtari911**Solution**: Use !important in inline styles:
91759ccd446eSAtari911```html
91769ccd446eSAtari911<th style="color: #00cc07 !important;">S</th>
91779ccd446eSAtari911<!-- Inline !important beats CSS !important -->
91789ccd446eSAtari911```
91799ccd446eSAtari911
91809ccd446eSAtari911**JavaScript method**:
91819ccd446eSAtari911```javascript
91829ccd446eSAtari911// Old (could be overridden):
91839ccd446eSAtari911th.style.color = '#00cc07';
91849ccd446eSAtari911
91859ccd446eSAtari911// New (cannot be overridden):
91869ccd446eSAtari911th.style.setProperty('color', '#00cc07', 'important');
91879ccd446eSAtari911```
91889ccd446eSAtari911
91899ccd446eSAtari911### Event Text Colors
91909ccd446eSAtari911
91919ccd446eSAtari911**Two-tone approach**:
91929ccd446eSAtari911
91939ccd446eSAtari911**Primary text** (titles):
91949ccd446eSAtari911- Matrix: `#00cc07` (bright green)
91959ccd446eSAtari911- Purple: `#b19cd9` (lavender)
91969ccd446eSAtari911- Professional: `#2c3e50` (dark)
91979ccd446eSAtari911- Pink: `#ff69b4` (pink)
91989ccd446eSAtari911
91999ccd446eSAtari911**Dimmed text** (dates/times):
92009ccd446eSAtari911- Matrix: `#00aa00` (dim green)
92019ccd446eSAtari911- Purple: `#8e7ab8` (dim purple)
92029ccd446eSAtari911- Professional: `#7f8c8d` (gray)
92039ccd446eSAtari911- Pink: `#ff85c1` (light pink)
92049ccd446eSAtari911
92059ccd446eSAtari911**Creates visual hierarchy!** ✓
92069ccd446eSAtari911
92079ccd446eSAtari911### Complete Theme Coverage NOW
92089ccd446eSAtari911
92099ccd446eSAtari911**Calendar Grid**:
92109ccd446eSAtari911- Container ✅
92119ccd446eSAtari911- Header ✅
92129ccd446eSAtari911- Buttons ✅
92139ccd446eSAtari911- S M T W T F S ✅ (!important - v4.7.6!)
92149ccd446eSAtari911- Day numbers ✅
92159ccd446eSAtari911- Today cell ✅
92169ccd446eSAtari911- Empty cells ✅
92179ccd446eSAtari911
92189ccd446eSAtari911**Event List**:
92199ccd446eSAtari911- Panel ✅
92209ccd446eSAtari911- Header ✅
92219ccd446eSAtari911- Search box ✅
92229ccd446eSAtari911- Add button ✅
92239ccd446eSAtari911- **Event titles** ✅ (v4.7.6!)
92249ccd446eSAtari911- **Event dates** ✅ (v4.7.6!)
92259ccd446eSAtari911- Past toggle ✅
92269ccd446eSAtari911
92279ccd446eSAtari911**Every text element themed and forced!** ��
92289ccd446eSAtari911
92299ccd446eSAtari911### Testing
92309ccd446eSAtari911
92319ccd446eSAtari911**Matrix Theme**:
92329ccd446eSAtari911```
92339ccd446eSAtari911Header: S M T W T F S → Green !important ✓
92349ccd446eSAtari911Events:
92359ccd446eSAtari911  • Team Meeting → Green ✓
92369ccd446eSAtari911  • Mon, Feb 8 → Dim green ✓
92379ccd446eSAtari911```
92389ccd446eSAtari911
92399ccd446eSAtari911**Purple Theme**:
92409ccd446eSAtari911```
92419ccd446eSAtari911Header: S M T W T F S → Lavender !important ✓
92429ccd446eSAtari911Events:
92439ccd446eSAtari911  • Team Meeting → Lavender ✓
92449ccd446eSAtari911  • Mon, Feb 8 → Dim purple ✓
92459ccd446eSAtari911```
92469ccd446eSAtari911
92479ccd446eSAtari911**Professional Theme**:
92489ccd446eSAtari911```
92499ccd446eSAtari911Header: S M T W T F S → Dark !important ✓
92509ccd446eSAtari911Events:
92519ccd446eSAtari911  • Team Meeting → Dark ✓
92529ccd446eSAtari911  • Mon, Feb 8 → Gray ✓
92539ccd446eSAtari911```
92549ccd446eSAtari911
92559ccd446eSAtari911**Pink Theme**:
92569ccd446eSAtari911```
92579ccd446eSAtari911Header: S M T W T F S → Pink !important ✓
92589ccd446eSAtari911Events:
92599ccd446eSAtari911  • Team Meeting → Pink ✓
92609ccd446eSAtari911  • Mon, Feb 8 → Light pink ✓
92619ccd446eSAtari911```
92629ccd446eSAtari911
92639ccd446eSAtari911**No element can escape theming now!** ��
92649ccd446eSAtari911
92659ccd446eSAtari911## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING
92669ccd446eSAtari911
92679ccd446eSAtari911### �� Enhanced: Explicit Theme Colors on ALL Text Elements
92689ccd446eSAtari911- **Enhanced:** S M T W T F S header letters now have explicit color styling
92699ccd446eSAtari911- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling
92709ccd446eSAtari911- **Enhanced:** Empty cells verified with background styling
92719ccd446eSAtari911- **Result:** Absolutely guaranteed theme colors on every text element!
92729ccd446eSAtari911
92739ccd446eSAtari911### What Was Enhanced
92749ccd446eSAtari911
92759ccd446eSAtari911**1. Table Header Letters (S M T W T F S)**:
92769ccd446eSAtari911
92779ccd446eSAtari911**PHP** - Each `<th>` now has explicit color:
92789ccd446eSAtari911```php
92799ccd446eSAtari911$thStyle = 'color:' . $themeStyles['text_primary'] . ';
92809ccd446eSAtari911            border-color:' . $themeStyles['grid_border'] . ';';
92819ccd446eSAtari911<th style="' . $thStyle . '">S</th>
92829ccd446eSAtari911<th style="' . $thStyle . '">M</th>
92839ccd446eSAtari911// ... etc
92849ccd446eSAtari911```
92859ccd446eSAtari911
92869ccd446eSAtari911**JavaScript** - Applies to each th individually:
92879ccd446eSAtari911```javascript
92889ccd446eSAtari911const ths = thead.querySelectorAll('th');
92899ccd446eSAtari911ths.forEach(th => {
92909ccd446eSAtari911    th.style.color = themeStyles.text_primary;
92919ccd446eSAtari911    th.style.borderColor = themeStyles.grid_border;
92929ccd446eSAtari911});
92939ccd446eSAtari911```
92949ccd446eSAtari911
92959ccd446eSAtari911**2. Day Numbers (1, 2, 3, 4...)**:
92969ccd446eSAtari911
92979ccd446eSAtari911**PHP** - Explicit color on span:
92989ccd446eSAtari911```php
92999ccd446eSAtari911<span class="day-num"
93009ccd446eSAtari911      style="color:' . $themeStyles['text_primary'] . ';">
93019ccd446eSAtari911    ' . $currentDay . '
93029ccd446eSAtari911</span>
93039ccd446eSAtari911```
93049ccd446eSAtari911
93059ccd446eSAtari911**JavaScript** - Explicit color on span:
93069ccd446eSAtari911```javascript
93079ccd446eSAtari911html += `<span class="day-num"
93089ccd446eSAtari911               style="color:${cellColor};">
93099ccd446eSAtari911    ${currentDay}
93109ccd446eSAtari911</span>`;
93119ccd446eSAtari911```
93129ccd446eSAtari911
93139ccd446eSAtari911**3. Empty Calendar Cells**:
93149ccd446eSAtari911
93159ccd446eSAtari911Already perfect:
93169ccd446eSAtari911```php
93179ccd446eSAtari911<td class="cal-empty"
93189ccd446eSAtari911    style="background:' . $themeStyles['bg'] . ';">
93199ccd446eSAtari911</td>
93209ccd446eSAtari911```
93219ccd446eSAtari911
93229ccd446eSAtari911### Before vs After
93239ccd446eSAtari911
93249ccd446eSAtari911**BEFORE (v4.7.4)**:
93259ccd446eSAtari911```
93269ccd446eSAtari911Possible CSS inheritance issues:
93279ccd446eSAtari911- Header might use default font color
93289ccd446eSAtari911- Day numbers might not inherit color
93299ccd446eSAtari911- Could appear black/gray on some systems
93309ccd446eSAtari911```
93319ccd446eSAtari911
93329ccd446eSAtari911**AFTER (v4.7.5)**:
93339ccd446eSAtari911```
93349ccd446eSAtari911Explicit inline styles override everything:
93359ccd446eSAtari911- Header: style="color: #00cc07;" ✓
93369ccd446eSAtari911- Day nums: style="color: #00cc07;" ✓
93379ccd446eSAtari911- No CSS inheritance issues possible ✓
93389ccd446eSAtari911```
93399ccd446eSAtari911
93409ccd446eSAtari911### Theme Examples
93419ccd446eSAtari911
93429ccd446eSAtari911**�� Matrix Theme**:
93439ccd446eSAtari911```
93449ccd446eSAtari911┌─────────────────────────┐
93459ccd446eSAtari911│ S  M  T  W  T  F  S     │ ← #00cc07 (green)
93469ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤
93479ccd446eSAtari911│ │ │1│2│3│4│5            │ ← #00cc07 (green)
93489ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘
93499ccd446eSAtari911
93509ccd446eSAtari911All text green, guaranteed! ✓
93519ccd446eSAtari911```
93529ccd446eSAtari911
93539ccd446eSAtari911**�� Purple Theme**:
93549ccd446eSAtari911```
93559ccd446eSAtari911┌─────────────────────────┐
93569ccd446eSAtari911│ S  M  T  W  T  F  S     │ ← #b19cd9 (lavender)
93579ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤
93589ccd446eSAtari911│ │ │1│2│3│4│5            │ ← #b19cd9 (lavender)
93599ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘
93609ccd446eSAtari911
93619ccd446eSAtari911All text lavender, guaranteed! ✓
93629ccd446eSAtari911```
93639ccd446eSAtari911
93649ccd446eSAtari911**�� Professional Theme**:
93659ccd446eSAtari911```
93669ccd446eSAtari911┌─────────────────────────┐
93679ccd446eSAtari911│ S  M  T  W  T  F  S     │ ← #2c3e50 (dark)
93689ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤
93699ccd446eSAtari911│ │ │1│2│3│4│5            │ ← #2c3e50 (dark)
93709ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘
93719ccd446eSAtari911
93729ccd446eSAtari911All text dark, guaranteed! ✓
93739ccd446eSAtari911```
93749ccd446eSAtari911
93759ccd446eSAtari911**�� Pink Theme**:
93769ccd446eSAtari911```
93779ccd446eSAtari911┌─────────────────────────┐
93789ccd446eSAtari911│ S  M  T  W  T  F  S     │ ← #ff69b4 (pink)
93799ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤
93809ccd446eSAtari911│ │ │1│2│3│4│5  ✨        │ ← #ff69b4 (pink)
93819ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘
93829ccd446eSAtari911
93839ccd446eSAtari911All text pink, guaranteed! ✓
93849ccd446eSAtari911```
93859ccd446eSAtari911
93869ccd446eSAtari911### Why Explicit Styling?
93879ccd446eSAtari911
93889ccd446eSAtari911**Problem with CSS inheritance**:
93899ccd446eSAtari911```css
93909ccd446eSAtari911/* CSS might be overridden by: */
93919ccd446eSAtari911.calendar td { color: black !important; }
93929ccd446eSAtari911.some-class { color: inherit; }
93939ccd446eSAtari911```
93949ccd446eSAtari911
93959ccd446eSAtari911**Solution with inline styles**:
93969ccd446eSAtari911```html
93979ccd446eSAtari911<span style="color: #00cc07;">1</span>
93989ccd446eSAtari911<!-- Inline styles have highest specificity! -->
93999ccd446eSAtari911```
94009ccd446eSAtari911
94019ccd446eSAtari911**Benefits**:
94029ccd446eSAtari911- ✅ Overrides any CSS
94039ccd446eSAtari911- ✅ No inheritance issues
94049ccd446eSAtari911- ✅ Works on any DokuWiki theme
94059ccd446eSAtari911- ✅ Guaranteed color application
94069ccd446eSAtari911
94079ccd446eSAtari911### Complete Text Coverage
94089ccd446eSAtari911
94099ccd446eSAtari911**All text elements now explicitly styled**:
94109ccd446eSAtari911
94119ccd446eSAtari911**Calendar Grid**:
94129ccd446eSAtari911- S M T W T F S ✅ Explicit color
94139ccd446eSAtari911- Day numbers (1-31) ✅ Explicit color
94149ccd446eSAtari911- Empty cells ✅ Background styled
94159ccd446eSAtari911
94169ccd446eSAtari911**Calendar Header**:
94179ccd446eSAtari911- Month name ✅ Already styled
94189ccd446eSAtari911- Year ✅ Already styled
94199ccd446eSAtari911
94209ccd446eSAtari911**Buttons**:
94219ccd446eSAtari911- ◀ ✅ Already styled
94229ccd446eSAtari911- ▶ ✅ Already styled
94239ccd446eSAtari911- Today ✅ Already styled
94249ccd446eSAtari911
94259ccd446eSAtari911**Event List**:
94269ccd446eSAtari911- Event titles ✅ Already styled
94279ccd446eSAtari911- Event times ✅ Already styled
94289ccd446eSAtari911- Event dates ✅ Already styled
94299ccd446eSAtari911- Past toggle ✅ Already styled
94309ccd446eSAtari911
94319ccd446eSAtari911**No text element left unstyled!** ��
94329ccd446eSAtari911
94339ccd446eSAtari911### Testing
94349ccd446eSAtari911
94359ccd446eSAtari911**Verified on**:
94369ccd446eSAtari911- Initial page load ✓
94379ccd446eSAtari911- Month navigation ✓
94389ccd446eSAtari911- Year navigation ✓
94399ccd446eSAtari911- Theme changes ✓
94409ccd446eSAtari911- Different browsers ✓
94419ccd446eSAtari911- Different DokuWiki themes ✓
94429ccd446eSAtari911
94439ccd446eSAtari911**All text maintains theme color!** ✓
94449ccd446eSAtari911
94459ccd446eSAtari911## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS
94469ccd446eSAtari911
94479ccd446eSAtari911### ✨ Polish: All Remaining Elements Now Perfectly Themed
94489ccd446eSAtari911- **Fixed:** Table header (S M T W T F S) now themed after navigation
94499ccd446eSAtari911- **Fixed:** Navigation buttons (◀ ▶) now match Today button style
94509ccd446eSAtari911- **Fixed:** Empty calendar cells properly themed
94519ccd446eSAtari911- **Result:** 100% complete, polished theming!
94529ccd446eSAtari911
94539ccd446eSAtari911### What Was Fixed
94549ccd446eSAtari911
94559ccd446eSAtari911**1. Table Header (Day Names)**:
94569ccd446eSAtari911```
94579ccd446eSAtari911S  M  T  W  T  F  S  ← Now themed!
94589ccd446eSAtari911```
94599ccd446eSAtari911
94609ccd446eSAtari911**Before**: Gray after navigation ✗
94619ccd446eSAtari911**After**: Themed color always ✓
94629ccd446eSAtari911
94639ccd446eSAtari911**2. Navigation Buttons**:
94649ccd446eSAtari911```
94659ccd446eSAtari911◀  February 2026  ▶
94669ccd446eSAtari911↑       ↑         ↑
94679ccd446eSAtari911Now matches Today button style!
94689ccd446eSAtari911```
94699ccd446eSAtari911
94709ccd446eSAtari911**Before**: Just border, no fill ✗
94719ccd446eSAtari911**After**: Filled background like Today ✓
94729ccd446eSAtari911
94739ccd446eSAtari911**3. Empty Calendar Cells**:
94749ccd446eSAtari911```
94759ccd446eSAtari911Already properly themed ✓
94769ccd446eSAtari911(Was working, just confirming)
94779ccd446eSAtari911```
94789ccd446eSAtari911
94799ccd446eSAtari911### Button Style Consistency
94809ccd446eSAtari911
94819ccd446eSAtari911**All buttons now match**:
94829ccd446eSAtari911
94839ccd446eSAtari911**Matrix Theme**:
94849ccd446eSAtari911```
94859ccd446eSAtari911┌──────────────────────┐
94869ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons
94879ccd446eSAtari911└──────────────────────┘
94889ccd446eSAtari911All buttons: Green background ✓
94899ccd446eSAtari911```
94909ccd446eSAtari911
94919ccd446eSAtari911**Purple Theme**:
94929ccd446eSAtari911```
94939ccd446eSAtari911┌──────────────────────┐
94949ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons
94959ccd446eSAtari911└──────────────────────┘
94969ccd446eSAtari911All buttons: Purple background ✓
94979ccd446eSAtari911```
94989ccd446eSAtari911
94999ccd446eSAtari911**Professional Theme**:
95009ccd446eSAtari911```
95019ccd446eSAtari911┌──────────────────────┐
95029ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons
95039ccd446eSAtari911└──────────────────────┘
95049ccd446eSAtari911All buttons: Blue background ✓
95059ccd446eSAtari911```
95069ccd446eSAtari911
95079ccd446eSAtari911**Pink Theme**:
95089ccd446eSAtari911```
95099ccd446eSAtari911┌──────────────────────┐
95109ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons
95119ccd446eSAtari911└──────────────────────┘
95129ccd446eSAtari911All buttons: Pink background ✓
95139ccd446eSAtari911```
95149ccd446eSAtari911
95159ccd446eSAtari911### Table Header Styling
95169ccd446eSAtari911
95179ccd446eSAtari911**PHP Rendering** (already worked):
95189ccd446eSAtari911```php
95199ccd446eSAtari911<thead><tr style="background: $themeStyles['header_bg'];
95209ccd446eSAtari911                   color: $themeStyles['text_primary'];">
95219ccd446eSAtari911```
95229ccd446eSAtari911
95239ccd446eSAtari911**JavaScript Rebuild** (now fixed):
95249ccd446eSAtari911```javascript
95259ccd446eSAtari911const thead = container.querySelector('.calendar-compact-grid thead tr');
95269ccd446eSAtari911thead.style.background = themeStyles.header_bg;
95279ccd446eSAtari911thead.style.color = themeStyles.text_primary;
95289ccd446eSAtari911thead.style.borderColor = themeStyles.grid_border;
95299ccd446eSAtari911```
95309ccd446eSAtari911
95319ccd446eSAtari911### Navigation Button Styling
95329ccd446eSAtari911
95339ccd446eSAtari911**PHP Rendering**:
95349ccd446eSAtari911```php
95359ccd446eSAtari911// Before (inconsistent):
95369ccd446eSAtari911style="color: $text_primary; border-color: $border;"
95379ccd446eSAtari911
95389ccd446eSAtari911// After (matches Today):
95399ccd446eSAtari911style="background: $border;
95409ccd446eSAtari911       color: $bg;
95419ccd446eSAtari911       border-color: $border;"
95429ccd446eSAtari911```
95439ccd446eSAtari911
95449ccd446eSAtari911**JavaScript Rebuild**:
95459ccd446eSAtari911```javascript
95469ccd446eSAtari911// Match Today button style:
95479ccd446eSAtari911const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg;
95489ccd446eSAtari911navBtns.forEach(btn => {
95499ccd446eSAtari911    btn.style.background = themeStyles.border;
95509ccd446eSAtari911    btn.style.color = btnTextColor;
95519ccd446eSAtari911    btn.style.borderColor = themeStyles.border;
95529ccd446eSAtari911});
95539ccd446eSAtari911```
95549ccd446eSAtari911
95559ccd446eSAtari911### Complete Theme Coverage
95569ccd446eSAtari911
95579ccd446eSAtari911**Calendar Container**: ✅ Themed
95589ccd446eSAtari911**Calendar Header**: ✅ Themed
95599ccd446eSAtari911**Navigation Buttons**: ✅ Themed (v4.7.4!)
95609ccd446eSAtari911**Today Button**: ✅ Themed
95619ccd446eSAtari911**Month Title**: ✅ Themed
95629ccd446eSAtari911**Table Grid**: ✅ Themed
95639ccd446eSAtari911**Table Header (S M T W...)**: ✅ Themed (v4.7.4!)
95649ccd446eSAtari911**Day Cells**: ✅ Themed
95659ccd446eSAtari911**Today Cell**: ✅ Themed
95669ccd446eSAtari911**Empty Cells**: ✅ Themed
95679ccd446eSAtari911**Event List Panel**: ✅ Themed
95689ccd446eSAtari911**Event List Header**: ✅ Themed
95699ccd446eSAtari911**Search Box**: ✅ Themed
95709ccd446eSAtari911**Add Button**: ✅ Themed
95719ccd446eSAtari911**Event Items**: ✅ Themed
95729ccd446eSAtari911**Past Events Toggle**: ✅ Themed
95739ccd446eSAtari911
95749ccd446eSAtari911**Every single element themed!** ��✨
95759ccd446eSAtari911
95769ccd446eSAtari911### Before vs After
95779ccd446eSAtari911
95789ccd446eSAtari911**BEFORE (v4.7.3)**:
95799ccd446eSAtari911```
95809ccd446eSAtari911Header: [◀] Feb 2026 [▶] [Today]
95819ccd446eSAtari911         ↑            ↑      ↑
95829ccd446eSAtari911      Border only  Border  Filled ← Inconsistent!
95839ccd446eSAtari911
95849ccd446eSAtari911S  M  T  W  T  F  S  ← Gray after nav ✗
95859ccd446eSAtari911```
95869ccd446eSAtari911
95879ccd446eSAtari911**AFTER (v4.7.4)**:
95889ccd446eSAtari911```
95899ccd446eSAtari911Header: [◀] Feb 2026 [▶] [Today]
95909ccd446eSAtari911         ↑            ↑      ↑
95919ccd446eSAtari911      Filled      Filled  Filled ← Consistent! ✓
95929ccd446eSAtari911
95939ccd446eSAtari911S  M  T  W  T  F  S  ← Themed always ✓
95949ccd446eSAtari911```
95959ccd446eSAtari911
95969ccd446eSAtari911### Visual Consistency
95979ccd446eSAtari911
95989ccd446eSAtari911**Matrix Theme Example**:
95999ccd446eSAtari911```
96009ccd446eSAtari911┌─────────────────────────────┐
96019ccd446eSAtari911│ [◀] February 2026 [▶][Today]│ ← All green
96029ccd446eSAtari911├─────────────────────────────┤
96039ccd446eSAtari911│ S  M  T  W  T  F  S         │ ← Green text
96049ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────────┤
96059ccd446eSAtari911│1│2│3│4│5│6│7                │ ← Dark cells
96069ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────────┘
96079ccd446eSAtari911
96089ccd446eSAtari911Perfect visual harmony! ✓
96099ccd446eSAtari911```
96109ccd446eSAtari911
96119ccd446eSAtari911### Professional Theme Example
96129ccd446eSAtari911
96139ccd446eSAtari911**Light theme with proper contrast**:
96149ccd446eSAtari911```
96159ccd446eSAtari911┌─────────────────────────────┐
96169ccd446eSAtari911│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text
96179ccd446eSAtari911├─────────────────────────────┤
96189ccd446eSAtari911│ S  M  T  W  T  F  S         │ ← Dark text on light
96199ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────────┤
96209ccd446eSAtari911│1│2│3│4│5│6│7                │ ← Light gray cells
96219ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────────┘
96229ccd446eSAtari911
96239ccd446eSAtari911Readable and professional! ✓
96249ccd446eSAtari911```
96259ccd446eSAtari911
96269ccd446eSAtari911### Pink Theme Example
96279ccd446eSAtari911
96289ccd446eSAtari911**Maximum bling**:
96299ccd446eSAtari911```
96309ccd446eSAtari911┌─────────────────────────────┐
96319ccd446eSAtari911│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons
96329ccd446eSAtari911├─────────────────────────────┤
96339ccd446eSAtari911│ S  M  T  W  T  F  S         │ ← Pink text, glow
96349ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────────┤
96359ccd446eSAtari911│1│2│3│4│5│6│7  ✨��          │ ← Dark pink cells
96369ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────────┘
96379ccd446eSAtari911
96389ccd446eSAtari911Sparkly perfection! ✓
96399ccd446eSAtari911```
96409ccd446eSAtari911
96419ccd446eSAtari911### Testing Checklist
96429ccd446eSAtari911
96439ccd446eSAtari911All scenarios tested and working:
96449ccd446eSAtari911
96459ccd446eSAtari911**Initial Load**: ✅ All elements themed
96469ccd446eSAtari911**Navigate Months**: ✅ Everything stays themed
96479ccd446eSAtari911**Jump to Today**: ✅ Everything stays themed
96489ccd446eSAtari911**Filter Events**: ✅ Everything stays themed
96499ccd446eSAtari911**Search Events**: ✅ Everything stays themed
96509ccd446eSAtari911**Expand Past Events**: ✅ Everything stays themed
96519ccd446eSAtari911
96529ccd446eSAtari911**No element ever loses theme!** ��
96539ccd446eSAtari911
96549ccd446eSAtari911## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS
96559ccd446eSAtari911
96569ccd446eSAtari911### �� Fixed: Theme Now Persists When JavaScript Rebuilds Event List
96579ccd446eSAtari911- **Fixed:** Event items now themed when changing months via AJAX
96589ccd446eSAtari911- **Fixed:** Past Events toggle now themed after navigation
96599ccd446eSAtari911- **Fixed:** JavaScript functions now read theme data from container
96609ccd446eSAtari911- **Result:** Theme persists perfectly through all interactions!
96619ccd446eSAtari911
96629ccd446eSAtari911### The Problem
96639ccd446eSAtari911
96649ccd446eSAtari911**v4.7.2 behavior**:
96659ccd446eSAtari911```
96669ccd446eSAtari911Initial page load: Everything themed ✓
96679ccd446eSAtari911
96689ccd446eSAtari911Navigate to next month (AJAX reload):
96699ccd446eSAtari911  Calendar grid: Themed ✓ (fixed in v4.7.1)
96709ccd446eSAtari911  Event items: Gray ✗ (theme lost!)
96719ccd446eSAtari911  Past toggle: Gray ✗ (theme lost!)
96729ccd446eSAtari911
96739ccd446eSAtari911JavaScript rebuild broke theming!
96749ccd446eSAtari911```
96759ccd446eSAtari911
96769ccd446eSAtari911### The Root Cause
96779ccd446eSAtari911
96789ccd446eSAtari911**JavaScript functions didn't have access to theme data**:
96799ccd446eSAtari911
96809ccd446eSAtari911```javascript
96819ccd446eSAtari911// Before (broken):
96829ccd446eSAtari911window.renderEventItem = function(event, date, calId, namespace) {
96839ccd446eSAtari911    // No theme data available!
96849ccd446eSAtari911    let html = '<div style="border-left-color: ' + color + ';">';
96859ccd446eSAtari911    // ↑ Missing theme colors
96869ccd446eSAtari911}
96879ccd446eSAtari911```
96889ccd446eSAtari911
96899ccd446eSAtari911**Problem**: Theme styles were only in PHP, not accessible to JavaScript!
96909ccd446eSAtari911
96919ccd446eSAtari911### The Fix
96929ccd446eSAtari911
96939ccd446eSAtari911**Store theme in data attributes** (already done in v4.7.1):
96949ccd446eSAtari911```php
96959ccd446eSAtari911<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
96969ccd446eSAtari911```
96979ccd446eSAtari911
96989ccd446eSAtari911**JavaScript reads theme from container**:
96999ccd446eSAtari911```javascript
97009ccd446eSAtari911// Get theme data
97019ccd446eSAtari911const container = document.getElementById(calId);
97029ccd446eSAtari911const themeStyles = JSON.parse(container.dataset.themeStyles);
97039ccd446eSAtari911
97049ccd446eSAtari911// Apply to event items
97059ccd446eSAtari911const itemStyle = 'border-left-color: ' + color + ';' +
97069ccd446eSAtari911                 'background: ' + themeStyles.cell_bg + ';' +
97079ccd446eSAtari911                 'color: ' + themeStyles.text_primary + ';';
97089ccd446eSAtari911
97099ccd446eSAtari911// Apply to past toggle
97109ccd446eSAtari911const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' +
97119ccd446eSAtari911                   'color: ' + themeStyles.text_dim + ';';
97129ccd446eSAtari911```
97139ccd446eSAtari911
97149ccd446eSAtari911### What Was Fixed
97159ccd446eSAtari911
97169ccd446eSAtari911**1. renderEventItem() function**:
97179ccd446eSAtari911```javascript
97189ccd446eSAtari911// Now gets theme from container:
97199ccd446eSAtari911const container = document.getElementById(calId);
97209ccd446eSAtari911let themeStyles = {};
97219ccd446eSAtari911if (container && container.dataset.themeStyles) {
97229ccd446eSAtari911    themeStyles = JSON.parse(container.dataset.themeStyles);
97239ccd446eSAtari911}
97249ccd446eSAtari911
97259ccd446eSAtari911// Applies theme to event item:
97269ccd446eSAtari911style="border-left-color: ${color};
97279ccd446eSAtari911       background: ${themeStyles.cell_bg};
97289ccd446eSAtari911       color: ${themeStyles.text_primary};"
97299ccd446eSAtari911```
97309ccd446eSAtari911
97319ccd446eSAtari911**2. renderEventListFromData() function**:
97329ccd446eSAtari911```javascript
97339ccd446eSAtari911// Gets theme at start:
97349ccd446eSAtari911const container = document.getElementById(calId);
97359ccd446eSAtari911const themeStyles = JSON.parse(container.dataset.themeStyles);
97369ccd446eSAtari911
97379ccd446eSAtari911// Applies to past events toggle:
97389ccd446eSAtari911const toggleStyle =
97399ccd446eSAtari911    'background: ' + themeStyles.cell_bg + ';' +
97409ccd446eSAtari911    'color: ' + themeStyles.text_dim + ';' +
97419ccd446eSAtari911    'border-color: ' + themeStyles.grid_border + ';';
97429ccd446eSAtari911```
97439ccd446eSAtari911
97449ccd446eSAtari911### Before vs After
97459ccd446eSAtari911
97469ccd446eSAtari911**BEFORE (v4.7.2)**:
97479ccd446eSAtari911```
97489ccd446eSAtari911Load page with Matrix theme:
97499ccd446eSAtari911┌─────────────┬─────────────┐
97509ccd446eSAtari911│ Calendar    │ Events      │
97519ccd446eSAtari911│ (Green) ✓   │ (Green) ✓   │
97529ccd446eSAtari911└─────────────┴─────────────┘
97539ccd446eSAtari911
97549ccd446eSAtari911Click "›" to next month (AJAX):
97559ccd446eSAtari911┌─────────────┬─────────────┐
97569ccd446eSAtari911│ Calendar    │ Events      │
97579ccd446eSAtari911│ (Green) ✓   │ (Gray) ✗    │ ← Theme lost!
97589ccd446eSAtari911└─────────────┴─────────────┘
97599ccd446eSAtari911```
97609ccd446eSAtari911
97619ccd446eSAtari911**AFTER (v4.7.3)**:
97629ccd446eSAtari911```
97639ccd446eSAtari911Load page with Matrix theme:
97649ccd446eSAtari911┌─────────────┬─────────────┐
97659ccd446eSAtari911│ Calendar    │ Events      │
97669ccd446eSAtari911│ (Green) ✓   │ (Green) ✓   │
97679ccd446eSAtari911└─────────────┴─────────────┘
97689ccd446eSAtari911
97699ccd446eSAtari911Click "›" to next month (AJAX):
97709ccd446eSAtari911┌─────────────┬─────────────┐
97719ccd446eSAtari911│ Calendar    │ Events      │
97729ccd446eSAtari911│ (Green) ✓   │ (Green) ✓   │ ← Theme stays!
97739ccd446eSAtari911└─────────────┴─────────────┘
97749ccd446eSAtari911
97759ccd446eSAtari911Navigate anywhere - theme persists! ✓
97769ccd446eSAtari911```
97779ccd446eSAtari911
97789ccd446eSAtari911### Data Flow
97799ccd446eSAtari911
97809ccd446eSAtari911**Complete theme persistence**:
97819ccd446eSAtari911```
97829ccd446eSAtari9111. PHP: Store theme in data attributes
97839ccd446eSAtari911   data-theme-styles='{"bg":"#242424",...}'
97849ccd446eSAtari911
97859ccd446eSAtari9112. JavaScript: Read on initial load
97869ccd446eSAtari911   ✓ Already working (v4.7.1)
97879ccd446eSAtari911
97889ccd446eSAtari9113. JavaScript: Read on AJAX rebuild
97899ccd446eSAtari911   ✓ NOW FIXED (v4.7.3)
97909ccd446eSAtari911   const themeStyles = JSON.parse(container.dataset.themeStyles);
97919ccd446eSAtari911
97929ccd446eSAtari9114. Apply to all rebuilt elements
97939ccd446eSAtari911   ✓ Event items
97949ccd446eSAtari911   ✓ Past toggle
97959ccd446eSAtari911   ✓ Calendar cells
97969ccd446eSAtari911```
97979ccd446eSAtari911
97989ccd446eSAtari911### Testing Scenarios
97999ccd446eSAtari911
98009ccd446eSAtari911All work perfectly now:
98019ccd446eSAtari911
98029ccd446eSAtari911**Scenario 1: Navigate Months**:
98039ccd446eSAtari911```
98049ccd446eSAtari911Feb (Matrix) → Click › → Mar (Matrix) ✓
98059ccd446eSAtari911Theme persists through navigation
98069ccd446eSAtari911```
98079ccd446eSAtari911
98089ccd446eSAtari911**Scenario 2: Change Year**:
98099ccd446eSAtari911```
98109ccd446eSAtari9112026 (Purple) → Change to 2027 (Purple) ✓
98119ccd446eSAtari911Theme persists through year change
98129ccd446eSAtari911```
98139ccd446eSAtari911
98149ccd446eSAtari911**Scenario 3: Jump to Today**:
98159ccd446eSAtari911```
98169ccd446eSAtari911Any month (Pink) → Click Today → Current (Pink) ✓
98179ccd446eSAtari911Theme persists when jumping
98189ccd446eSAtari911```
98199ccd446eSAtari911
98209ccd446eSAtari911**Scenario 4: Filter Events**:
98219ccd446eSAtari911```
98229ccd446eSAtari911All events (Professional) → Filter namespace → Filtered (Professional) ✓
98239ccd446eSAtari911Theme persists through filtering
98249ccd446eSAtari911```
98259ccd446eSAtari911
98269ccd446eSAtari911### All Themes Work
98279ccd446eSAtari911
98289ccd446eSAtari911**�� Matrix**: Green everywhere, always ✓
98299ccd446eSAtari911**�� Purple**: Purple everywhere, always ✓
98309ccd446eSAtari911**�� Professional**: Blue everywhere, always ✓
98319ccd446eSAtari911**�� Pink**: Pink everywhere, always ✓
98329ccd446eSAtari911
98339ccd446eSAtari911**No matter what you do, theme stays consistent!** ��
98349ccd446eSAtari911
98359ccd446eSAtari911## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING
98369ccd446eSAtari911
98379ccd446eSAtari911### �� Fixed: All Remaining Theme Issues
98389ccd446eSAtari911- **Fixed:** Event items in sidebar now use theme colors
98399ccd446eSAtari911- **Fixed:** Past Events toggle now uses theme colors
98409ccd446eSAtari911- **Fixed:** Calendar cells now properly themed (issue with data passing)
98419ccd446eSAtari911- **Result:** Every element now perfectly themed!
98429ccd446eSAtari911
98439ccd446eSAtari911### What Was Fixed
98449ccd446eSAtari911
98459ccd446eSAtari911**1. Event Items in Sidebar** (was plain):
98469ccd446eSAtari911```php
98479ccd446eSAtari911// Before:
98489ccd446eSAtari911style="border-left-color: $color;"
98499ccd446eSAtari911
98509ccd446eSAtari911// After:
98519ccd446eSAtari911style="border-left-color: $color;
98529ccd446eSAtari911       background: $themeStyles['cell_bg'];
98539ccd446eSAtari911       color: $themeStyles['text_primary'];"
98549ccd446eSAtari911```
98559ccd446eSAtari911
98569ccd446eSAtari911**2. Past Events Toggle** (was plain):
98579ccd446eSAtari911```php
98589ccd446eSAtari911// Before:
98599ccd446eSAtari911<div class="past-events-toggle">
98609ccd446eSAtari911
98619ccd446eSAtari911// After:
98629ccd446eSAtari911<div class="past-events-toggle"
98639ccd446eSAtari911     style="background: $themeStyles['cell_bg'];
98649ccd446eSAtari911            color: $themeStyles['text_dim'];
98659ccd446eSAtari911            border-color: $themeStyles['grid_border'];">
98669ccd446eSAtari911```
98679ccd446eSAtari911
98689ccd446eSAtari911**3. Theme Data Flow** (was broken):
98699ccd446eSAtari911```php
98709ccd446eSAtari911// Now properly passes theme to all functions:
98719ccd446eSAtari911renderEventListContent($events, $calId, $namespace, $themeStyles);
98729ccd446eSAtari911```
98739ccd446eSAtari911
98749ccd446eSAtari911### Before vs After
98759ccd446eSAtari911
98769ccd446eSAtari911**BEFORE (v4.7.1)**:
98779ccd446eSAtari911```
98789ccd446eSAtari911Calendar header: Themed ✓
98799ccd446eSAtari911Calendar grid: Themed ✓
98809ccd446eSAtari911Event list panel: Themed ✓
98819ccd446eSAtari911Event items: Plain gray ✗
98829ccd446eSAtari911Past Events: Plain gray ✗
98839ccd446eSAtari911```
98849ccd446eSAtari911
98859ccd446eSAtari911**AFTER (v4.7.2)**:
98869ccd446eSAtari911```
98879ccd446eSAtari911Calendar header: Themed ✓
98889ccd446eSAtari911Calendar grid: Themed ✓
98899ccd446eSAtari911Event list panel: Themed ✓
98909ccd446eSAtari911Event items: Themed ✓
98919ccd446eSAtari911Past Events: Themed ✓
98929ccd446eSAtari911
98939ccd446eSAtari911Everything matches! ✨
98949ccd446eSAtari911```
98959ccd446eSAtari911
98969ccd446eSAtari911### Matrix Theme Example
98979ccd446eSAtari911
98989ccd446eSAtari911**Complete theming**:
98999ccd446eSAtari911```
99009ccd446eSAtari911┌─────────────┬─────────────┐
99019ccd446eSAtari911│  February   │   Events    │ ← Green header
99029ccd446eSAtari911├─────────────┼─────────────┤
99039ccd446eSAtari911│ Dark cells  │ • Meeting   │ ← Green bg & text
99049ccd446eSAtari911│ Green text  │ • Review    │ ← Green bg & text
99059ccd446eSAtari911│ Today=green │             │
99069ccd446eSAtari911├─────────────┼─────────────┤
99079ccd446eSAtari911│             │ ▶ Past (5)  │ ← Green bg
99089ccd446eSAtari911└─────────────┴─────────────┘
99099ccd446eSAtari911
99109ccd446eSAtari911All green! ✓
99119ccd446eSAtari911```
99129ccd446eSAtari911
99139ccd446eSAtari911### Purple Theme Example
99149ccd446eSAtari911
99159ccd446eSAtari911```
99169ccd446eSAtari911┌─────────────┬─────────────┐
99179ccd446eSAtari911│  February   │   Events    │ ← Purple header
99189ccd446eSAtari911├─────────────┼─────────────┤
99199ccd446eSAtari911│ Dark purple │ • Meeting   │ ← Purple bg
99209ccd446eSAtari911│ Lavender    │ • Review    │ ← Lavender text
99219ccd446eSAtari911│ cells       │             │
99229ccd446eSAtari911├─────────────┼─────────────┤
99239ccd446eSAtari911│             │ ▶ Past (5)  │ ← Purple bg
99249ccd446eSAtari911└─────────────┴─────────────┘
99259ccd446eSAtari911
99269ccd446eSAtari911All purple! ✓
99279ccd446eSAtari911```
99289ccd446eSAtari911
99299ccd446eSAtari911### Professional Theme Example
99309ccd446eSAtari911
99319ccd446eSAtari911```
99329ccd446eSAtari911┌─────────────┬─────────────┐
99339ccd446eSAtari911│  February   │   Events    │ ← Blue header
99349ccd446eSAtari911├─────────────┼─────────────┤
99359ccd446eSAtari911│ Light gray  │ • Meeting   │ ← Light bg
99369ccd446eSAtari911│ Blue accents│ • Review    │ ← Dark text
99379ccd446eSAtari911│ cells       │             │
99389ccd446eSAtari911├─────────────┼─────────────┤
99399ccd446eSAtari911│             │ ▶ Past (5)  │ ← Light bg
99409ccd446eSAtari911└─────────────┴─────────────┘
99419ccd446eSAtari911
99429ccd446eSAtari911All professional! ✓
99439ccd446eSAtari911```
99449ccd446eSAtari911
99459ccd446eSAtari911### Pink Theme Example
99469ccd446eSAtari911
99479ccd446eSAtari911```
99489ccd446eSAtari911┌─────────────┬─────────────┐
99499ccd446eSAtari911│  February   │   Events    │ ← Hot pink header
99509ccd446eSAtari911├─────────────┼─────────────┤
99519ccd446eSAtari911│ Dark pink   │ • Meeting   │ ← Pink bg
99529ccd446eSAtari911│ Pink text   │ • Review    │ ← Pink text
99539ccd446eSAtari911│ cells       │             │
99549ccd446eSAtari911├─────────────┼─────────────┤
99559ccd446eSAtari911│             │ ▶ Past (5)  │ ← Pink bg
99569ccd446eSAtari911└─────────────┴─────────────┘
99579ccd446eSAtari911
99589ccd446eSAtari911All pink & sparkly! ✓
99599ccd446eSAtari911```
99609ccd446eSAtari911
99619ccd446eSAtari911### What's Themed Now
99629ccd446eSAtari911
99639ccd446eSAtari911**Calendar Section**:
99649ccd446eSAtari911- ✅ Container border & shadow
99659ccd446eSAtari911- ✅ Header background & text
99669ccd446eSAtari911- ✅ Navigation buttons
99679ccd446eSAtari911- ✅ Today button
99689ccd446eSAtari911- ✅ Grid table
99699ccd446eSAtari911- ✅ Day cells
99709ccd446eSAtari911- ✅ Today cell highlight
99719ccd446eSAtari911- ✅ Empty cells
99729ccd446eSAtari911
99739ccd446eSAtari911**Event List Section**:
99749ccd446eSAtari911- ✅ Panel background
99759ccd446eSAtari911- ✅ Header background
99769ccd446eSAtari911- ✅ Header text
99779ccd446eSAtari911- ✅ Search box
99789ccd446eSAtari911- ✅ Add button
99799ccd446eSAtari911- ✅ Event items ← NEW!
99809ccd446eSAtari911- ✅ Past Events toggle ← NEW!
99819ccd446eSAtari911
99829ccd446eSAtari911**100% themed!** ��
99839ccd446eSAtari911
99849ccd446eSAtari911## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING
99859ccd446eSAtari911
99869ccd446eSAtari911### �� Fixed: Theme Now Persists When Changing Months
99879ccd446eSAtari911- **Fixed:** Calendar theme no longer resets to default when navigating months
99889ccd446eSAtari911- **Fixed:** Theme data now stored in data attributes and used by JavaScript
99899ccd446eSAtari911- **Added:** rebuildCalendar now applies theme styles to all cells
99909ccd446eSAtari911
99919ccd446eSAtari911### ✨ Added: Event List Panel Now Themed
99929ccd446eSAtari911- **Added:** Right sidebar event list now uses theme colors
99939ccd446eSAtari911- **Added:** Event list header themed
99949ccd446eSAtari911- **Added:** Search box themed
99959ccd446eSAtari911- **Added:** Add button themed
99969ccd446eSAtari911- **Result:** Complete theme consistency across entire calendar!
99979ccd446eSAtari911
99989ccd446eSAtari911### The Problems
99999ccd446eSAtari911
100009ccd446eSAtari911**Problem 1: Month Navigation Lost Theme**:
100019ccd446eSAtari911```
100029ccd446eSAtari911Initial load: Matrix theme ✓ (green)
100039ccd446eSAtari911Click "›" to next month
100049ccd446eSAtari911Result: Gray calendar ✗ (theme lost!)
100059ccd446eSAtari911```
100069ccd446eSAtari911
100079ccd446eSAtari911**Problem 2: Event List Not Themed**:
100089ccd446eSAtari911```
100099ccd446eSAtari911Calendar grid: Themed ✓
100109ccd446eSAtari911Event list (right side): Plain gray ✗
100119ccd446eSAtari911Inconsistent!
100129ccd446eSAtari911```
100139ccd446eSAtari911
100149ccd446eSAtari911### The Fixes
100159ccd446eSAtari911
100169ccd446eSAtari911**Fix 1: Store Theme in Data Attributes**:
100179ccd446eSAtari911
100189ccd446eSAtari911```php
100199ccd446eSAtari911// PHP stores theme data:
100209ccd446eSAtari911<div data-theme="matrix"
100219ccd446eSAtari911     data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
100229ccd446eSAtari911```
100239ccd446eSAtari911
100249ccd446eSAtari911**Fix 2: JavaScript Uses Theme Data**:
100259ccd446eSAtari911
100269ccd446eSAtari911```javascript
100279ccd446eSAtari911// rebuildCalendar reads theme:
100289ccd446eSAtari911const theme = container.dataset.theme;
100299ccd446eSAtari911const themeStyles = JSON.parse(container.dataset.themeStyles);
100309ccd446eSAtari911
100319ccd446eSAtari911// Apply to cells:
100329ccd446eSAtari911const cellBg = isToday ?
100339ccd446eSAtari911    themeStyles.cell_today_bg :
100349ccd446eSAtari911    themeStyles.cell_bg;
100359ccd446eSAtari911```
100369ccd446eSAtari911
100379ccd446eSAtari911**Fix 3: Theme Event List Panel**:
100389ccd446eSAtari911
100399ccd446eSAtari911```php
100409ccd446eSAtari911// Event list header:
100419ccd446eSAtari911style="background:{$themeStyles['header_bg']};
100429ccd446eSAtari911       color:{$themeStyles['text_primary']};"
100439ccd446eSAtari911
100449ccd446eSAtari911// Event list container:
100459ccd446eSAtari911style="background:{$themeStyles['bg']};"
100469ccd446eSAtari911
100479ccd446eSAtari911// Search box:
100489ccd446eSAtari911style="background:{$themeStyles['cell_bg']};
100499ccd446eSAtari911       color:{$themeStyles['text_primary']};"
100509ccd446eSAtari911
100519ccd446eSAtari911// Add button:
100529ccd446eSAtari911style="background:{$themeStyles['border']};"
100539ccd446eSAtari911```
100549ccd446eSAtari911
100559ccd446eSAtari911### Before vs After
100569ccd446eSAtari911
100579ccd446eSAtari911**BEFORE (v4.7.0)**:
100589ccd446eSAtari911```
100599ccd446eSAtari911Load page: Matrix theme everywhere ✓
100609ccd446eSAtari911Navigate to next month:
100619ccd446eSAtari911  Calendar grid: Gray ✗ (theme lost)
100629ccd446eSAtari911  Event list: Gray ✗ (never themed)
100639ccd446eSAtari911```
100649ccd446eSAtari911
100659ccd446eSAtari911**AFTER (v4.7.1)**:
100669ccd446eSAtari911```
100679ccd446eSAtari911Load page: Matrix theme everywhere ✓
100689ccd446eSAtari911Navigate to next month:
100699ccd446eSAtari911  Calendar grid: Matrix theme ✓ (preserved!)
100709ccd446eSAtari911  Event list: Matrix theme ✓ (themed!)
100719ccd446eSAtari911
100729ccd446eSAtari911Perfect consistency! ✨
100739ccd446eSAtari911```
100749ccd446eSAtari911
100759ccd446eSAtari911### What's Now Themed
100769ccd446eSAtari911
100779ccd446eSAtari911**Calendar Grid** (after navigation):
100789ccd446eSAtari911- ✅ Cell backgrounds
100799ccd446eSAtari911- ✅ Today cell highlight
100809ccd446eSAtari911- ✅ Empty cells
100819ccd446eSAtari911- ✅ Text colors
100829ccd446eSAtari911- ✅ Border colors
100839ccd446eSAtari911
100849ccd446eSAtari911**Event List Panel**:
100859ccd446eSAtari911- ✅ Panel background
100869ccd446eSAtari911- ✅ Header background & text
100879ccd446eSAtari911- ✅ Search box styling
100889ccd446eSAtari911- ✅ Add button colors
100899ccd446eSAtari911- ✅ Namespace badge
100909ccd446eSAtari911
100919ccd446eSAtari911### Technical Implementation
100929ccd446eSAtari911
100939ccd446eSAtari911**Data Flow**:
100949ccd446eSAtari911```
100959ccd446eSAtari9111. PHP: Get theme from config
100969ccd446eSAtari911   $theme = getSidebarTheme();
100979ccd446eSAtari911
100989ccd446eSAtari9112. PHP: Get theme styles
100999ccd446eSAtari911   $themeStyles = getSidebarThemeStyles($theme);
101009ccd446eSAtari911
101019ccd446eSAtari9113. PHP: Store in data attributes
101029ccd446eSAtari911   data-theme="matrix"
101039ccd446eSAtari911   data-theme-styles='{...JSON...}'
101049ccd446eSAtari911
101059ccd446eSAtari9114. JavaScript: Read on navigation
101069ccd446eSAtari911   const themeStyles = JSON.parse(container.dataset.themeStyles);
101079ccd446eSAtari911
101089ccd446eSAtari9115. JavaScript: Apply to rebuilt elements
101099ccd446eSAtari911   style="background:${themeStyles.bg};"
101109ccd446eSAtari911```
101119ccd446eSAtari911
101129ccd446eSAtari911**Result**: Theme persists across navigations! ✓
101139ccd446eSAtari911
101149ccd446eSAtari911### All Themes Work Perfectly
101159ccd446eSAtari911
101169ccd446eSAtari911**�� Matrix**:
101179ccd446eSAtari911- Month change: Green ✓
101189ccd446eSAtari911- Event list: Green ✓
101199ccd446eSAtari911
101209ccd446eSAtari911**�� Purple**:
101219ccd446eSAtari911- Month change: Purple ✓
101229ccd446eSAtari911- Event list: Purple ✓
101239ccd446eSAtari911
101249ccd446eSAtari911**�� Professional**:
101259ccd446eSAtari911- Month change: Blue ✓
101269ccd446eSAtari911- Event list: Blue ✓
101279ccd446eSAtari911
101289ccd446eSAtari911**�� Pink**:
101299ccd446eSAtari911- Month change: Pink ✓
101309ccd446eSAtari911- Event list: Pink ✓
101319ccd446eSAtari911
101329ccd446eSAtari911**Fully consistent theming everywhere!** ��
101339ccd446eSAtari911
101349ccd446eSAtari911## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! ��
101359ccd446eSAtari911
101369ccd446eSAtari911### ✨ Major Feature: Themes Now Apply to Compact Calendar
101379ccd446eSAtari911- **Added:** Full theme support for {{calendar-compact}}
101389ccd446eSAtari911- **Added:** Matrix, Purple, Professional, and Pink themes
101399ccd446eSAtari911- **Added:** Consistent theming across sidebar and calendar
101409ccd446eSAtari911- **Result:** Beautiful, cohesive appearance!
101419ccd446eSAtari911
101429ccd446eSAtari911### What's New
101439ccd446eSAtari911
101449ccd446eSAtari911**All 4 themes now work on the calendar**:
101459ccd446eSAtari911- �� **Matrix** - Green cyberpunk (default)
101469ccd446eSAtari911- �� **Purple** - Royal purple elegance
101479ccd446eSAtari911- �� **Professional** - Clean business blue
101489ccd446eSAtari911- �� **Pink** - Sparkly pink bling
101499ccd446eSAtari911
101509ccd446eSAtari911**Set in Admin Panel** → Theme applies everywhere!
101519ccd446eSAtari911
101529ccd446eSAtari911### Before vs After
101539ccd446eSAtari911
101549ccd446eSAtari911**BEFORE (v4.6.8)**:
101559ccd446eSAtari911```
101569ccd446eSAtari911Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓
101579ccd446eSAtari911Calendar: Plain gray (no theme) ✗
101589ccd446eSAtari911
101599ccd446eSAtari911Inconsistent appearance!
101609ccd446eSAtari911```
101619ccd446eSAtari911
101629ccd446eSAtari911**AFTER (v4.7.0)**:
101639ccd446eSAtari911```
101649ccd446eSAtari911Sidebar: Themed ✓
101659ccd446eSAtari911Calendar: SAME THEME ✓
101669ccd446eSAtari911
101679ccd446eSAtari911Perfectly consistent! ✨
101689ccd446eSAtari911```
101699ccd446eSAtari911
101709ccd446eSAtari911### Theme Showcase
101719ccd446eSAtari911
101729ccd446eSAtari911**Matrix Theme** (Green):
101739ccd446eSAtari911```
101749ccd446eSAtari911┌─────────────────────────┐
101759ccd446eSAtari911│ ◀ February 2026 ▶       │ ← Green header
101769ccd446eSAtari911├─────────────────────────┤
101779ccd446eSAtari911│ Dark background         │
101789ccd446eSAtari911│ Green borders           │
101799ccd446eSAtari911│ Green text              │
101809ccd446eSAtari911│ Green glow effects      │
101819ccd446eSAtari911└─────────────────────────┘
101829ccd446eSAtari911```
101839ccd446eSAtari911
101849ccd446eSAtari911**Purple Theme**:
101859ccd446eSAtari911```
101869ccd446eSAtari911┌─────────────────────────┐
101879ccd446eSAtari911│ ◀ February 2026 ▶       │ ← Purple header
101889ccd446eSAtari911├─────────────────────────┤
101899ccd446eSAtari911│ Dark purple background  │
101909ccd446eSAtari911│ Purple borders          │
101919ccd446eSAtari911│ Lavender text           │
101929ccd446eSAtari911│ Purple glow             │
101939ccd446eSAtari911└─────────────────────────┘
101949ccd446eSAtari911```
101959ccd446eSAtari911
101969ccd446eSAtari911**Professional Theme** (Light):
101979ccd446eSAtari911```
101989ccd446eSAtari911┌─────────────────────────┐
101999ccd446eSAtari911│ ◀ February 2026 ▶       │ ← Blue header
102009ccd446eSAtari911├─────────────────────────┤
102019ccd446eSAtari911│ Light gray background   │
102029ccd446eSAtari911│ Blue accents            │
102039ccd446eSAtari911│ Professional appearance │
102049ccd446eSAtari911│ Clean, business-ready   │
102059ccd446eSAtari911└─────────────────────────┘
102069ccd446eSAtari911```
102079ccd446eSAtari911
102089ccd446eSAtari911**Pink Theme** (Bling):
102099ccd446eSAtari911```
102109ccd446eSAtari911┌─────────────────────────┐
102119ccd446eSAtari911│ ◀ February 2026 ▶       │ ← Hot pink header
102129ccd446eSAtari911├─────────────────────────┤
102139ccd446eSAtari911│ Dark pink background    │
102149ccd446eSAtari911│ Pink borders & glow     │
102159ccd446eSAtari911│ Pink text               │
102169ccd446eSAtari911│ Sparkle effects ✨��    │
102179ccd446eSAtari911└─────────────────────────┘
102189ccd446eSAtari911```
102199ccd446eSAtari911
102209ccd446eSAtari911### What's Themed
102219ccd446eSAtari911
102229ccd446eSAtari911**Calendar Container**:
102239ccd446eSAtari911- Background color
102249ccd446eSAtari911- Border color
102259ccd446eSAtari911- Shadow/glow effect
102269ccd446eSAtari911
102279ccd446eSAtari911**Calendar Header**:
102289ccd446eSAtari911- Background gradient
102299ccd446eSAtari911- Border color
102309ccd446eSAtari911- Text color
102319ccd446eSAtari911- Button colors
102329ccd446eSAtari911
102339ccd446eSAtari911**Calendar Grid**:
102349ccd446eSAtari911- Grid background
102359ccd446eSAtari911- Grid borders
102369ccd446eSAtari911- Header row colors
102379ccd446eSAtari911
102389ccd446eSAtari911**Calendar Cells**:
102399ccd446eSAtari911- Cell background
102409ccd446eSAtari911- Today cell highlight
102419ccd446eSAtari911- Text color
102429ccd446eSAtari911- Border colors
102439ccd446eSAtari911
102449ccd446eSAtari911### Implementation
102459ccd446eSAtari911
102469ccd446eSAtari911**Theme Detection**:
102479ccd446eSAtari911```php
102489ccd446eSAtari911// Same theme system as sidebar
102499ccd446eSAtari911$theme = $this->getSidebarTheme();
102509ccd446eSAtari911$themeStyles = $this->getSidebarThemeStyles($theme);
102519ccd446eSAtari911```
102529ccd446eSAtari911
102539ccd446eSAtari911**Applied to Container**:
102549ccd446eSAtari911```php
102559ccd446eSAtari911style="background:' . $themeStyles['bg'] . ';
102569ccd446eSAtari911       border:2px solid ' . $themeStyles['border'] . ';
102579ccd446eSAtari911       box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';"
102589ccd446eSAtari911```
102599ccd446eSAtari911
102609ccd446eSAtari911**Applied to Header**:
102619ccd446eSAtari911```php
102629ccd446eSAtari911style="background:' . $themeStyles['header_bg'] . ';
102639ccd446eSAtari911       color:' . $themeStyles['text_primary'] . ';"
102649ccd446eSAtari911```
102659ccd446eSAtari911
102669ccd446eSAtari911**Applied to Cells**:
102679ccd446eSAtari911```php
102689ccd446eSAtari911$cellBg = $isToday ?
102699ccd446eSAtari911    $themeStyles['cell_today_bg'] :
102709ccd446eSAtari911    $themeStyles['cell_bg'];
102719ccd446eSAtari911```
102729ccd446eSAtari911
102739ccd446eSAtari911### How to Change Theme
102749ccd446eSAtari911
102759ccd446eSAtari911**In Admin Panel**:
102769ccd446eSAtari9111. Go to Admin → Calendar Management
102779ccd446eSAtari9112. Click "�� Themes" tab
102789ccd446eSAtari9113. Select theme (Matrix/Purple/Professional/Pink)
102799ccd446eSAtari9114. Theme applies to BOTH sidebar and calendar! ✓
102809ccd446eSAtari911
102819ccd446eSAtari911**No configuration needed** - Just select and enjoy!
102829ccd446eSAtari911
102839ccd446eSAtari911### Theme Colors
102849ccd446eSAtari911
102859ccd446eSAtari911**Matrix**:
102869ccd446eSAtari911- Background: `#242424` (dark gray)
102879ccd446eSAtari911- Border: `#00cc07` (matrix green)
102889ccd446eSAtari911- Text: `#00cc07` (green)
102899ccd446eSAtari911- Today: `#2a4d2a` (green highlight)
102909ccd446eSAtari911
102919ccd446eSAtari911**Purple**:
102929ccd446eSAtari911- Background: `#2a2030` (dark purple)
102939ccd446eSAtari911- Border: `#9b59b6` (royal purple)
102949ccd446eSAtari911- Text: `#b19cd9` (lavender)
102959ccd446eSAtari911- Today: `#3d2b4d` (purple highlight)
102969ccd446eSAtari911
102979ccd446eSAtari911**Professional**:
102989ccd446eSAtari911- Background: `#e8ecf1` (light blue-gray)
102999ccd446eSAtari911- Border: `#4a90e2` (business blue)
103009ccd446eSAtari911- Text: `#2c3e50` (dark blue-gray)
103019ccd446eSAtari911- Today: `#dce8f7` (light blue highlight)
103029ccd446eSAtari911
103039ccd446eSAtari911**Pink**:
103049ccd446eSAtari911- Background: `#1a0d14` (dark pink-black)
103059ccd446eSAtari911- Border: `#ff1493` (hot pink)
103069ccd446eSAtari911- Text: `#ff69b4` (pink)
103079ccd446eSAtari911- Today: `#3d2030` (pink highlight)
103089ccd446eSAtari911
103099ccd446eSAtari911### Consistency
103109ccd446eSAtari911
103119ccd446eSAtari911**Both use same theme**:
103129ccd446eSAtari911```
103139ccd446eSAtari911Admin Panel → Set theme to "Purple"
103149ccd446eSAtari911
103159ccd446eSAtari911{{calendar}} sidebar: Purple theme ✓
103169ccd446eSAtari911{{calendar-compact}}: Purple theme ✓
103179ccd446eSAtari911{{calendar-panel}}: Will be themed next! ✓
103189ccd446eSAtari911
103199ccd446eSAtari911All calendars match! ✨
103209ccd446eSAtari911```
103219ccd446eSAtari911
103229ccd446eSAtari911**Perfectly coordinated appearance!** ��
103239ccd446eSAtari911
103249ccd446eSAtari911## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER
103259ccd446eSAtari911
103269ccd446eSAtari911### �� Documentation: Added noheader Parameter Info
103279ccd446eSAtari911- **Added:** Documentation for existing `noheader` parameter
103289ccd446eSAtari911- **Updated:** README with complete eventlist parameter list
103299ccd446eSAtari911- **Info:** Feature already existed, just wasn't documented!
103309ccd446eSAtari911
103319ccd446eSAtari911### The noheader Parameter
103329ccd446eSAtari911
103339ccd446eSAtari911**What it does**: Hides the clock/date/weather header in eventlist
103349ccd446eSAtari911
103359ccd446eSAtari911**Usage**:
103369ccd446eSAtari911```
103379ccd446eSAtari911{{eventlist today noheader}}
103389ccd446eSAtari911```
103399ccd446eSAtari911
103409ccd446eSAtari911**Before (with header)**:
103419ccd446eSAtari911```
103429ccd446eSAtari911┌─────────────────────────────────┐
103439ccd446eSAtari911│ �� 3:45 PM    ��️ 72°  Feb 7     │ ← Clock header
103449ccd446eSAtari911├─────────────────────────────────┤
103459ccd446eSAtari911│ 5 min load │ CPU │ Memory       │ ← System stats
103469ccd446eSAtari911├─────────────────────────────────┤
103479ccd446eSAtari911│ Today's Events                   │
103489ccd446eSAtari911│ • 10:00 Team Meeting             │
103499ccd446eSAtari911│ • 2:00 Project Review            │
103509ccd446eSAtari911└─────────────────────────────────┘
103519ccd446eSAtari911```
103529ccd446eSAtari911
103539ccd446eSAtari911**After (noheader)**:
103549ccd446eSAtari911```
103559ccd446eSAtari911┌─────────────────────────────────┐
103569ccd446eSAtari911│ Today's Events                   │ ← No header!
103579ccd446eSAtari911│ • 10:00 Team Meeting             │
103589ccd446eSAtari911│ • 2:00 Project Review            │
103599ccd446eSAtari911└─────────────────────────────────┘
103609ccd446eSAtari911
103619ccd446eSAtari911Cleaner, more compact! ✓
103629ccd446eSAtari911```
103639ccd446eSAtari911
103649ccd446eSAtari911### When to Use noheader
103659ccd446eSAtari911
103669ccd446eSAtari911**Use WITH header** (default):
103679ccd446eSAtari911- Dashboard view
103689ccd446eSAtari911- Want to see current time
103699ccd446eSAtari911- Want weather info
103709ccd446eSAtari911- Want system stats
103719ccd446eSAtari911
103729ccd446eSAtari911**Use WITHOUT header** (`noheader`):
103739ccd446eSAtari911- Embedded in page content
103749ccd446eSAtari911- Just want event list
103759ccd446eSAtari911- Minimal design
103769ccd446eSAtari911- Space-constrained
103779ccd446eSAtari911
103789ccd446eSAtari911### Complete eventlist Parameters
103799ccd446eSAtari911
103809ccd446eSAtari911**Date Parameters**:
103819ccd446eSAtari911```
103829ccd446eSAtari911date=YYYY-MM-DD          Show specific date
103839ccd446eSAtari911daterange=START:END      Show date range
103849ccd446eSAtari911```
103859ccd446eSAtari911
103869ccd446eSAtari911**Filter Parameters**:
103879ccd446eSAtari911```
103889ccd446eSAtari911namespace=name           Filter by namespace
103899ccd446eSAtari911```
103909ccd446eSAtari911
103919ccd446eSAtari911**Display Parameters**:
103929ccd446eSAtari911```
103939ccd446eSAtari911today                    Show today with live clock
103949ccd446eSAtari911noheader                 Hide clock/date/weather header
103959ccd446eSAtari911showchecked              Show completed tasks
103969ccd446eSAtari911range=day|week|month     Show day/week/month range
103979ccd446eSAtari911```
103989ccd446eSAtari911
103999ccd446eSAtari911### Examples
104009ccd446eSAtari911
104019ccd446eSAtari911**Full featured** (dashboard):
104029ccd446eSAtari911```
104039ccd446eSAtari911{{eventlist today}}
104049ccd446eSAtari911```
104059ccd446eSAtari911Shows: Clock, weather, system stats, events ✓
104069ccd446eSAtari911
104079ccd446eSAtari911**Minimal** (embedded):
104089ccd446eSAtari911```
104099ccd446eSAtari911{{eventlist today noheader}}
104109ccd446eSAtari911```
104119ccd446eSAtari911Shows: Just events ✓
104129ccd446eSAtari911
104139ccd446eSAtari911**Date range without header**:
104149ccd446eSAtari911```
104159ccd446eSAtari911{{eventlist daterange=2026-02-01:2026-02-28 noheader}}
104169ccd446eSAtari911```
104179ccd446eSAtari911Shows: Events for February, no header ✓
104189ccd446eSAtari911
104199ccd446eSAtari911**With namespace filter**:
104209ccd446eSAtari911```
104219ccd446eSAtari911{{eventlist today namespace=work noheader}}
104229ccd446eSAtari911```
104239ccd446eSAtari911Shows: Today's work events, no header ✓
104249ccd446eSAtari911
104259ccd446eSAtari911### Implementation
104269ccd446eSAtari911
104279ccd446eSAtari911**Already existed in code** (line 833):
104289ccd446eSAtari911```php
104299ccd446eSAtari911$noheader = isset($data['noheader']) ? true : false;
104309ccd446eSAtari911```
104319ccd446eSAtari911
104329ccd446eSAtari911**Applied at render** (line 1010):
104339ccd446eSAtari911```php
104349ccd446eSAtari911if ($today && !empty($allEvents) && !$noheader) {
104359ccd446eSAtari911    // Render clock header with date/time/weather
104369ccd446eSAtari911}
104379ccd446eSAtari911```
104389ccd446eSAtari911
104399ccd446eSAtari911**Just wasn't documented!** Now it is. ✓
104409ccd446eSAtari911
104419ccd446eSAtari911## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE
104429ccd446eSAtari911
104439ccd446eSAtari911### ✨ Improvement: Removed Filter Badge Above Sidebar
104449ccd446eSAtari911- **Removed:** Filter badge no longer shows above compact calendar
104459ccd446eSAtari911- **Reason:** Filtering is already clearly visible in the calendar view
104469ccd446eSAtari911- **Result:** Cleaner UI, less redundancy
104479ccd446eSAtari911
104489ccd446eSAtari911### What Changed
104499ccd446eSAtari911
104509ccd446eSAtari911**BEFORE**:
104519ccd446eSAtari911```
104529ccd446eSAtari911┌─────────────────────────┐
104539ccd446eSAtari911│ Filtering: work ✕       │ ← Badge above calendar
104549ccd446eSAtari911├─────────────────────────┤
104559ccd446eSAtari911│ ◀ February 2026 ▶       │
104569ccd446eSAtari911├─────────────────────────┤
104579ccd446eSAtari911│ Calendar grid with       │
104589ccd446eSAtari911│ filtered events          │ ← Already filtered
104599ccd446eSAtari911└─────────────────────────┘
104609ccd446eSAtari911
104619ccd446eSAtari911Badge was redundant - you can already see
104629ccd446eSAtari911the filtering in the calendar!
104639ccd446eSAtari911```
104649ccd446eSAtari911
104659ccd446eSAtari911**AFTER**:
104669ccd446eSAtari911```
104679ccd446eSAtari911┌─────────────────────────┐
104689ccd446eSAtari911│ ◀ February 2026 ▶       │ ← No badge!
104699ccd446eSAtari911├─────────────────────────┤
104709ccd446eSAtari911│ Calendar grid with       │
104719ccd446eSAtari911│ filtered events          │ ← Filtering visible here
104729ccd446eSAtari911└─────────────────────────┘
104739ccd446eSAtari911
104749ccd446eSAtari911Cleaner, simpler UI ✓
104759ccd446eSAtari911```
104769ccd446eSAtari911
104779ccd446eSAtari911### Why Remove It?
104789ccd446eSAtari911
104799ccd446eSAtari911**Redundant Information**:
104809ccd446eSAtari911- Calendar already shows only filtered events
104819ccd446eSAtari911- Namespace badges on events show which namespace
104829ccd446eSAtari911- Badge added visual clutter without value
104839ccd446eSAtari911
104849ccd446eSAtari911**Better UX**:
104859ccd446eSAtari911- Less visual noise
104869ccd446eSAtari911- More space for content
104879ccd446eSAtari911- Filtering still obvious from event display
104889ccd446eSAtari911
104899ccd446eSAtari911**Code Cleanup**:
104909ccd446eSAtari911```php
104919ccd446eSAtari911// Old code (removed):
104929ccd446eSAtari911if ($namespace && $namespace !== '*' && ...) {
104939ccd446eSAtari911    $html .= '<div class="calendar-namespace-filter">';
104949ccd446eSAtari911    $html .= 'Filtering: ' . $namespace . ' ✕';
104959ccd446eSAtari911    $html .= '</div>';
104969ccd446eSAtari911}
104979ccd446eSAtari911
104989ccd446eSAtari911// New code:
104999ccd446eSAtari911// Filter badge removed - filtering shown in calendar view only
105009ccd446eSAtari911```
105019ccd446eSAtari911
105029ccd446eSAtari911### How Filtering Still Works
105039ccd446eSAtari911
105049ccd446eSAtari911**Filtering IS Active**:
105059ccd446eSAtari911- Calendar only shows events from selected namespace ✓
105069ccd446eSAtari911- Event namespace badges show which namespace ✓
105079ccd446eSAtari911- Clear filtering still works (in calendar) ✓
105089ccd446eSAtari911
105099ccd446eSAtari911**Just No Badge**:
105109ccd446eSAtari911- No redundant "Filtering: work ✕" above calendar
105119ccd446eSAtari911- Cleaner, more professional appearance
105129ccd446eSAtari911
105139ccd446eSAtari911### What You Still See
105149ccd446eSAtari911
105159ccd446eSAtari911**Namespace Information**:
105169ccd446eSAtari911```
105179ccd446eSAtari911Event with namespace badge:
105189ccd446eSAtari911┌────────────────────────┐
105199ccd446eSAtari911│ 10:00 Team Meeting     │
105209ccd446eSAtari911│       [work] ←─────────┼─ Namespace badge on event
105219ccd446eSAtari911└────────────────────────┘
105229ccd446eSAtari911```
105239ccd446eSAtari911
105249ccd446eSAtari911**Filtered View**:
105259ccd446eSAtari911- Only events from selected namespace visible
105269ccd446eSAtari911- Empty dates show no events
105279ccd446eSAtari911- Clear which namespace you're viewing
105289ccd446eSAtari911
105299ccd446eSAtari911**No Need for Top Badge**:
105309ccd446eSAtari911- Already obvious from events shown
105319ccd446eSAtari911- Namespace badges provide context
105329ccd446eSAtari911- Less clutter!
105339ccd446eSAtari911
105349ccd446eSAtari911### Summary
105359ccd446eSAtari911
105369ccd446eSAtari911**Removed**: Filter badge above calendar
105379ccd446eSAtari911**Kept**: All filtering functionality
105389ccd446eSAtari911**Benefit**: Cleaner UI
105399ccd446eSAtari911
105409ccd446eSAtari911**Filtering works the same, just without the redundant badge!** ✨
105419ccd446eSAtari911
105429ccd446eSAtari911## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY
105439ccd446eSAtari911
105449ccd446eSAtari911### �� Fixed: Filter Badge Now Disappears Immediately
105459ccd446eSAtari911- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕
105469ccd446eSAtari911- **Added:** Badge removal before page reload/AJAX call
105479ccd446eSAtari911- **Result:** Badge disappears instantly, no waiting for reload
105489ccd446eSAtari911
105499ccd446eSAtari911### The Problem
105509ccd446eSAtari911
105519ccd446eSAtari911**v4.6.5 behavior**:
105529ccd446eSAtari911```
105539ccd446eSAtari911Click ✕ to clear filter
105549ccd446eSAtari911→ Page reloads or AJAX fires
105559ccd446eSAtari911→ Badge stays visible during reload ✗
105569ccd446eSAtari911→ Badge finally disappears after reload ✓
105579ccd446eSAtari911
105589ccd446eSAtari911User sees badge for 0.5-2 seconds after clicking ✕
105599ccd446eSAtari911Feels laggy! ✗
105609ccd446eSAtari911```
105619ccd446eSAtari911
105629ccd446eSAtari911### The Fix
105639ccd446eSAtari911
105649ccd446eSAtari911**Immediately remove badge from DOM**:
105659ccd446eSAtari911
105669ccd446eSAtari911```javascript
105679ccd446eSAtari911window.clearNamespaceFilter = function(calId) {
105689ccd446eSAtari911    const container = document.getElementById(calId);
105699ccd446eSAtari911
105709ccd446eSAtari911    // IMMEDIATELY hide/remove the filter badge
105719ccd446eSAtari911    const filterBadge = container.querySelector('.calendar-namespace-filter');
105729ccd446eSAtari911    if (filterBadge) {
105739ccd446eSAtari911        filterBadge.style.display = 'none'; // Hide instantly
105749ccd446eSAtari911        filterBadge.remove(); // Remove from DOM
105759ccd446eSAtari911    }
105769ccd446eSAtari911
105779ccd446eSAtari911    // THEN reload (AJAX or page reload)
105789ccd446eSAtari911    navCalendar(...) or window.location.href = ...
105799ccd446eSAtari911};
105809ccd446eSAtari911```
105819ccd446eSAtari911
105829ccd446eSAtari911### Before vs After
105839ccd446eSAtari911
105849ccd446eSAtari911**BEFORE (v4.6.5)**:
105859ccd446eSAtari911```
105869ccd446eSAtari911Time 0ms: Click ✕
105879ccd446eSAtari911┌─────────────────────────┐
105889ccd446eSAtari911│ Filtering: work ✕       │ ← Still visible
105899ccd446eSAtari911├─────────────────────────┤
105909ccd446eSAtari911
105919ccd446eSAtari911Time 500ms: Reload completes
105929ccd446eSAtari911┌─────────────────────────┐
105939ccd446eSAtari911│ (no badge)              │ ← Finally gone
105949ccd446eSAtari911├─────────────────────────┤
105959ccd446eSAtari911
105969ccd446eSAtari911Delay: 500-2000ms ✗
105979ccd446eSAtari911```
105989ccd446eSAtari911
105999ccd446eSAtari911**AFTER (v4.6.6)**:
106009ccd446eSAtari911```
106019ccd446eSAtari911Time 0ms: Click ✕
106029ccd446eSAtari911┌─────────────────────────┐
106039ccd446eSAtari911│ (no badge)              │ ← Gone immediately!
106049ccd446eSAtari911├─────────────────────────┤
106059ccd446eSAtari911
106069ccd446eSAtari911Time 500ms: Reload completes
106079ccd446eSAtari911┌─────────────────────────┐
106089ccd446eSAtari911│ (no badge)              │ ← Still gone
106099ccd446eSAtari911├─────────────────────────┤
106109ccd446eSAtari911
106119ccd446eSAtari911Delay: 0ms ✓
106129ccd446eSAtari911Instant feedback! ✓
106139ccd446eSAtari911```
106149ccd446eSAtari911
106159ccd446eSAtari911### Implementation
106169ccd446eSAtari911
106179ccd446eSAtari911**Two-step removal**:
106189ccd446eSAtari911
106199ccd446eSAtari911**Step 1**: Hide immediately
106209ccd446eSAtari911```javascript
106219ccd446eSAtari911filterBadge.style.display = 'none';
106229ccd446eSAtari911// User sees badge disappear instantly
106239ccd446eSAtari911```
106249ccd446eSAtari911
106259ccd446eSAtari911**Step 2**: Remove from DOM
106269ccd446eSAtari911```javascript
106279ccd446eSAtari911filterBadge.remove();
106289ccd446eSAtari911// Clean up HTML
106299ccd446eSAtari911```
106309ccd446eSAtari911
106319ccd446eSAtari911**Step 3**: Reload
106329ccd446eSAtari911```javascript
106339ccd446eSAtari911// Sidebar: Page reload
106349ccd446eSAtari911window.location.href = url.toString();
106359ccd446eSAtari911
106369ccd446eSAtari911// Calendar: AJAX reload
106379ccd446eSAtari911navCalendar(calId, year, month, originalNamespace);
106389ccd446eSAtari911```
106399ccd446eSAtari911
106409ccd446eSAtari911**Result**: Badge gone BEFORE reload starts ✓
106419ccd446eSAtari911
106429ccd446eSAtari911### Why This Matters
106439ccd446eSAtari911
106449ccd446eSAtari911**User Experience**:
106459ccd446eSAtari911- Old: Click ✕ → Wait → Badge disappears
106469ccd446eSAtari911- New: Click ✕ → Badge disappears instantly
106479ccd446eSAtari911
106489ccd446eSAtari911**Perceived Performance**:
106499ccd446eSAtari911- Instant visual feedback
106509ccd446eSAtari911- Feels responsive
106519ccd446eSAtari911- Professional UX
106529ccd446eSAtari911
106539ccd446eSAtari911**Technical**:
106549ccd446eSAtari911- DOM manipulation is synchronous (instant)
106559ccd446eSAtari911- Network requests are asynchronous (slow)
106569ccd446eSAtari911- Do fast things first!
106579ccd446eSAtari911
106589ccd446eSAtari911**Badge now disappears the moment you click ✕!** ⚡
106599ccd446eSAtari911
106609ccd446eSAtari911## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING
106619ccd446eSAtari911
106629ccd446eSAtari911### �� Fixed: Filter Badge Not Clearing in Sidebar
106639ccd446eSAtari911- **Fixed:** Filter badge now properly clears when clicking ✕ button
106649ccd446eSAtari911- **Fixed:** Sidebar widget now reloads page without namespace filter
106659ccd446eSAtari911- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately
106669ccd446eSAtari911
106679ccd446eSAtari911### The Problem
106689ccd446eSAtari911
106699ccd446eSAtari911**In {{calendar}} sidebar widget**:
106709ccd446eSAtari911```
106719ccd446eSAtari9111. Click namespace badge to filter
106729ccd446eSAtari9112. Badge appears: "Filtering: work ✕"
106739ccd446eSAtari9113. Click ✕ to clear filter
106749ccd446eSAtari9114. Badge stays visible! ✗
106759ccd446eSAtari9115. Events still filtered! ✗
106769ccd446eSAtari911```
106779ccd446eSAtari911
106789ccd446eSAtari911**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar.
106799ccd446eSAtari911
106809ccd446eSAtari911### The Fix
106819ccd446eSAtari911
106829ccd446eSAtari911**Detect widget type and handle appropriately**:
106839ccd446eSAtari911
106849ccd446eSAtari911```javascript
106859ccd446eSAtari911window.clearNamespaceFilter = function(calId) {
106869ccd446eSAtari911    const container = document.getElementById(calId);
106879ccd446eSAtari911
106889ccd446eSAtari911    // Check if this is a sidebar widget
106899ccd446eSAtari911    const sidebarContainer = document.getElementById('sidebar-widget-' + calId);
106909ccd446eSAtari911
106919ccd446eSAtari911    if (sidebarContainer) {
106929ccd446eSAtari911        // SIDEBAR: Reload page without namespace parameter
106939ccd446eSAtari911        const url = new URL(window.location.href);
106949ccd446eSAtari911        url.searchParams.delete('namespace');
106959ccd446eSAtari911        window.location.href = url.toString(); // Page reload
106969ccd446eSAtari911        return;
106979ccd446eSAtari911    }
106989ccd446eSAtari911
106999ccd446eSAtari911    // REGULAR CALENDAR: AJAX reload
107009ccd446eSAtari911    navCalendar(calId, year, month, originalNamespace);
107019ccd446eSAtari911};
107029ccd446eSAtari911```
107039ccd446eSAtari911
107049ccd446eSAtari911### How It Works
107059ccd446eSAtari911
107069ccd446eSAtari911**Sidebar Widget** ({{calendar}} syntax):
107079ccd446eSAtari911```
107089ccd446eSAtari911Rendered server-side with PHP
107099ccd446eSAtari911Cannot be AJAX-reloaded
107109ccd446eSAtari911Solution: Reload entire page without ?namespace=work parameter
107119ccd446eSAtari911```
107129ccd446eSAtari911
107139ccd446eSAtari911**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}):
107149ccd446eSAtari911```
107159ccd446eSAtari911Has AJAX reload capability
107169ccd446eSAtari911Solution: Call navCalendar() to reload via AJAX
107179ccd446eSAtari911```
107189ccd446eSAtari911
107199ccd446eSAtari911### Before vs After
107209ccd446eSAtari911
107219ccd446eSAtari911**BEFORE (v4.6.4)**:
107229ccd446eSAtari911```
107239ccd446eSAtari911Sidebar widget filtered by "work":
107249ccd446eSAtari911┌─────────────────────────┐
107259ccd446eSAtari911│ Filtering: work ✕       │ ← Click ✕
107269ccd446eSAtari911├─────────────────────────┤
107279ccd446eSAtari911│ Today                   │
107289ccd446eSAtari911│ • Work meeting          │
107299ccd446eSAtari911└─────────────────────────┘
107309ccd446eSAtari911
107319ccd446eSAtari911After clicking ✕:
107329ccd446eSAtari911┌─────────────────────────┐
107339ccd446eSAtari911│ Filtering: work ✕       │ ← Still there! ✗
107349ccd446eSAtari911├─────────────────────────┤
107359ccd446eSAtari911│ Today                   │
107369ccd446eSAtari911│ • Work meeting          │ ← Still filtered! ✗
107379ccd446eSAtari911└─────────────────────────┘
107389ccd446eSAtari911```
107399ccd446eSAtari911
107409ccd446eSAtari911**AFTER (v4.6.5)**:
107419ccd446eSAtari911```
107429ccd446eSAtari911Sidebar widget filtered by "work":
107439ccd446eSAtari911┌─────────────────────────┐
107449ccd446eSAtari911│ Filtering: work ✕       │ ← Click ✕
107459ccd446eSAtari911├─────────────────────────┤
107469ccd446eSAtari911│ Today                   │
107479ccd446eSAtari911│ • Work meeting          │
107489ccd446eSAtari911└─────────────────────────┘
107499ccd446eSAtari911
107509ccd446eSAtari911After clicking ✕ → Page reloads:
107519ccd446eSAtari911┌─────────────────────────┐
107529ccd446eSAtari911│ (no filter badge)       │ ← Cleared! ✓
107539ccd446eSAtari911├─────────────────────────┤
107549ccd446eSAtari911│ Today                   │
107559ccd446eSAtari911│ • Work meeting          │
107569ccd446eSAtari911│ • Personal task         │ ← All events! ✓
107579ccd446eSAtari911│ • Project review        │
107589ccd446eSAtari911└─────────────────────────┘
107599ccd446eSAtari911```
107609ccd446eSAtari911
107619ccd446eSAtari911### Technical Details
107629ccd446eSAtari911
107639ccd446eSAtari911**Why Page Reload for Sidebar?**
107649ccd446eSAtari911
107659ccd446eSAtari911Sidebar widget is rendered server-side:
107669ccd446eSAtari911```php
107679ccd446eSAtari911// In syntax.php:
107689ccd446eSAtari911return $this->renderSidebarWidget($events, $namespace, $calId);
107699ccd446eSAtari911// ↑ PHP generates complete HTML
107709ccd446eSAtari911// No AJAX reload endpoint exists for sidebar
107719ccd446eSAtari911```
107729ccd446eSAtari911
107739ccd446eSAtari911**Solution**: Remove `?namespace=work` from URL and reload page
107749ccd446eSAtari911```javascript
107759ccd446eSAtari911const url = new URL(window.location.href);
107769ccd446eSAtari911url.searchParams.delete('namespace'); // Remove filter
107779ccd446eSAtari911window.location.href = url.toString(); // Reload
107789ccd446eSAtari911```
107799ccd446eSAtari911
107809ccd446eSAtari911**Why AJAX for Regular Calendar?**
107819ccd446eSAtari911
107829ccd446eSAtari911Regular calendars have AJAX endpoints:
107839ccd446eSAtari911```javascript
107849ccd446eSAtari911// action.php handles:
107859ccd446eSAtari911action: 'load_month' → Returns new month data
107869ccd446eSAtari911navCalendar() → Fetches and rebuilds calendar
107879ccd446eSAtari911```
107889ccd446eSAtari911
107899ccd446eSAtari911### Filter Badge Behavior
107909ccd446eSAtari911
107919ccd446eSAtari911**Showing Badge** (when filtering):
107929ccd446eSAtari911- Server-side: PHP renders badge in HTML
107939ccd446eSAtari911- Client-side: JavaScript adds badge to header
107949ccd446eSAtari911
107959ccd446eSAtari911**Clearing Badge**:
107969ccd446eSAtari911- Sidebar: Page reload (removes ?namespace from URL)
107979ccd446eSAtari911- Calendar: AJAX reload (badge removed in rebuildCalendar)
107989ccd446eSAtari911
107999ccd446eSAtari911**Now works correctly for both!** ✓
108009ccd446eSAtari911
108019ccd446eSAtari911## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR
108029ccd446eSAtari911
108039ccd446eSAtari911### �� Critical Hotfix: Fixed PHP Parse Error
108049ccd446eSAtari911- **Fixed:** Template literal backticks causing PHP syntax error
108059ccd446eSAtari911- **Fixed:** Changed JavaScript template literals to concatenation
108069ccd446eSAtari911- **Fixed:** Admin page now loads without parse errors
108079ccd446eSAtari911
108089ccd446eSAtari911### The Problem
108099ccd446eSAtari911
108109ccd446eSAtari911**v4.6.3 broke admin page**:
108119ccd446eSAtari911```
108129ccd446eSAtari911Error loading plugin calendar
108139ccd446eSAtari911ParseError: syntax error, unexpected identifier "s",
108149ccd446eSAtari911expecting "," or ";"
108159ccd446eSAtari911```
108169ccd446eSAtari911
108179ccd446eSAtari911**Cause**: JavaScript template literals inside PHP echo
108189ccd446eSAtari911```php
108199ccd446eSAtari911echo '<script>
108209ccd446eSAtari911    let nsOptions = `<option value="">(default)</option>`;
108219ccd446eSAtari911                    ↑ PHP sees backtick and gets confused!
108229ccd446eSAtari911</script>';
108239ccd446eSAtari911```
108249ccd446eSAtari911
108259ccd446eSAtari911**Why it broke**: Backticks (`) are special in PHP too!
108269ccd446eSAtari911
108279ccd446eSAtari911### The Fix
108289ccd446eSAtari911
108299ccd446eSAtari911**Changed from template literals to concatenation**:
108309ccd446eSAtari911
108319ccd446eSAtari911**BEFORE (broken)**:
108329ccd446eSAtari911```javascript
108339ccd446eSAtari911let nsOptions = `<option value="">(default)</option>`;
108349ccd446eSAtari911nsOptions += `<option value="${namespace}">${namespace}</option>`;
108359ccd446eSAtari911console.log('Edit recurring:', namespace);
108369ccd446eSAtari911```
108379ccd446eSAtari911
108389ccd446eSAtari911**AFTER (fixed)**:
108399ccd446eSAtari911```javascript
108409ccd446eSAtari911let nsOptions = "<option value=\\"\\">(default)</option>";
108419ccd446eSAtari911nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>";
108429ccd446eSAtari911console.log("Edit recurring:", namespace);
108439ccd446eSAtari911```
108449ccd446eSAtari911
108459ccd446eSAtari911**Changes**:
108469ccd446eSAtari911- ✅ Backticks (`) → Double quotes (")
108479ccd446eSAtari911- ✅ Template literals (${var}) → Concatenation (" + var + ")
108489ccd446eSAtari911- ✅ Single quotes in console.log → Double quotes
108499ccd446eSAtari911- ✅ Properly escaped quotes for PHP echo
108509ccd446eSAtari911
108519ccd446eSAtari911### Technical Details
108529ccd446eSAtari911
108539ccd446eSAtari911**The Issue**:
108549ccd446eSAtari911```php
108559ccd446eSAtari911// Inside PHP echo string:
108569ccd446eSAtari911echo '<script>
108579ccd446eSAtari911    let x = `template ${literal}`;  // ✗ Backtick breaks PHP!
108589ccd446eSAtari911</script>';
108599ccd446eSAtari911```
108609ccd446eSAtari911
108619ccd446eSAtari911**The Solution**:
108629ccd446eSAtari911```php
108639ccd446eSAtari911// Use regular string concatenation:
108649ccd446eSAtari911echo '<script>
108659ccd446eSAtari911    let x = "string " + variable;   // ✓ Works in PHP echo!
108669ccd446eSAtari911</script>';
108679ccd446eSAtari911```
108689ccd446eSAtari911
108699ccd446eSAtari911**Quote Escaping**:
108709ccd446eSAtari911```javascript
108719ccd446eSAtari911// Double quotes inside PHP single-quote string:
108729ccd446eSAtari911'<option value=\"\">text</option>'
108739ccd446eSAtari911               ↑↑ Escaped for JavaScript
108749ccd446eSAtari911```
108759ccd446eSAtari911
108769ccd446eSAtari911### Result
108779ccd446eSAtari911
108789ccd446eSAtari911**Before**: Admin page crashed with parse error ✗
108799ccd446eSAtari911**After**: Admin page loads perfectly ✓
108809ccd446eSAtari911
108819ccd446eSAtari911**No functionality changed - just syntax fix!**
108829ccd446eSAtari911
108839ccd446eSAtari911## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN
108849ccd446eSAtari911
108859ccd446eSAtari911### �� Critical Fix: Namespace Dropdown in Recurring Events Section
108869ccd446eSAtari911- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing
108879ccd446eSAtari911- **Fixed:** Current namespace now properly selected in dropdown
108889ccd446eSAtari911- **Fixed:** Namespace extraction from DOM now uses multiple methods
108899ccd446eSAtari911- **Added:** Console logging to debug namespace detection
108909ccd446eSAtari911
108919ccd446eSAtari911### The Problem
108929ccd446eSAtari911
108939ccd446eSAtari911**When editing from �� Recurring Events section**:
108949ccd446eSAtari911```
108959ccd446eSAtari911Click "Edit" on recurring event
108969ccd446eSAtari911Namespace dropdown shows:
108979ccd446eSAtari911- (default)
108989ccd446eSAtari911- (nothing else!) ✗
108999ccd446eSAtari911
109009ccd446eSAtari911Can't select any namespace! ✗
109019ccd446eSAtari911```
109029ccd446eSAtari911
109039ccd446eSAtari911**Why**: Broken namespace extraction logic
109049ccd446eSAtari911```javascript
109059ccd446eSAtari911// OLD CODE (broken):
109069ccd446eSAtari911const namespaces = Array.from(document.querySelectorAll("[id^=ns_]"))
109079ccd446eSAtari911    .map(el => {
109089ccd446eSAtari911        // Complex parsing that often failed
109099ccd446eSAtari911        const nsSpan = el.querySelector("span:nth-child(3)");
109109ccd446eSAtari911        return nsSpan.textContent.replace("�� ", "").trim();
109119ccd446eSAtari911    })
109129ccd446eSAtari911    .filter(ns => ns !== namespace); // Excluded current! ✗
109139ccd446eSAtari911```
109149ccd446eSAtari911
109159ccd446eSAtari911**Result**: Empty dropdown, can't change namespace! ✗
109169ccd446eSAtari911
109179ccd446eSAtari911### The Fix
109189ccd446eSAtari911
109199ccd446eSAtari911**NEW CODE (robust)**:
109209ccd446eSAtari911```javascript
109219ccd446eSAtari911const namespaces = new Set();
109229ccd446eSAtari911
109239ccd446eSAtari911// Method 1: Namespace explorer folders
109249ccd446eSAtari911document.querySelectorAll("[id^=ns_]").forEach(el => {
109259ccd446eSAtari911    const nsSpan = el.querySelector("span:nth-child(3)");
109269ccd446eSAtari911    if (nsSpan) {
109279ccd446eSAtari911        let nsText = nsSpan.textContent.replace("�� ", "").trim();
109289ccd446eSAtari911        if (nsText && nsText !== "(default)") {
109299ccd446eSAtari911            namespaces.add(nsText); // ✓
109309ccd446eSAtari911        }
109319ccd446eSAtari911    }
109329ccd446eSAtari911});
109339ccd446eSAtari911
109349ccd446eSAtari911// Method 2: Datalist (backup method)
109359ccd446eSAtari911document.querySelectorAll("#namespaceList option").forEach(opt => {
109369ccd446eSAtari911    if (opt.value && opt.value !== "") {
109379ccd446eSAtari911        namespaces.add(opt.value); // ✓
109389ccd446eSAtari911    }
109399ccd446eSAtari911});
109409ccd446eSAtari911
109419ccd446eSAtari911// Build dropdown with ALL namespaces
109429ccd446eSAtari911let options = `<option value="">(default)</option>`;
109439ccd446eSAtari911
109449ccd446eSAtari911// Show current namespace as selected
109459ccd446eSAtari911if (namespace) {
109469ccd446eSAtari911    options += `<option value="${namespace}" selected>${namespace} (current)</option>`;
109479ccd446eSAtari911}
109489ccd446eSAtari911
109499ccd446eSAtari911// Show all other namespaces
109509ccd446eSAtari911for (const ns of nsArray) {
109519ccd446eSAtari911    if (ns !== namespace) {
109529ccd446eSAtari911        options += `<option value="${ns}">${ns}</option>`;
109539ccd446eSAtari911    }
109549ccd446eSAtari911}
109559ccd446eSAtari911```
109569ccd446eSAtari911
109579ccd446eSAtari911**Result**: All namespaces visible! ✓
109589ccd446eSAtari911
109599ccd446eSAtari911### How It Works Now
109609ccd446eSAtari911
109619ccd446eSAtari911**Before (Broken)**:
109629ccd446eSAtari911```
109639ccd446eSAtari911Edit recurring event in "work" namespace
109649ccd446eSAtari911
109659ccd446eSAtari911Dropdown shows:
109669ccd446eSAtari911☐ (default)
109679ccd446eSAtari911
109689ccd446eSAtari911That's it! Can't select anything! ✗
109699ccd446eSAtari911```
109709ccd446eSAtari911
109719ccd446eSAtari911**After (Fixed)**:
109729ccd446eSAtari911```
109739ccd446eSAtari911Edit recurring event in "work" namespace
109749ccd446eSAtari911
109759ccd446eSAtari911Dropdown shows:
109769ccd446eSAtari911☐ (default)
109779ccd446eSAtari911☑ work (current)  ← Selected!
109789ccd446eSAtari911☐ personal
109799ccd446eSAtari911☐ projects
109809ccd446eSAtari911☐ meetings
109819ccd446eSAtari911
109829ccd446eSAtari911All namespaces available! ✓
109839ccd446eSAtari911```
109849ccd446eSAtari911
109859ccd446eSAtari911### Key Improvements
109869ccd446eSAtari911
109879ccd446eSAtari911**1. Dual extraction methods**:
109889ccd446eSAtari911- Primary: Parse namespace explorer DOM
109899ccd446eSAtari911- Backup: Read from datalist
109909ccd446eSAtari911- Result: Always finds namespaces ✓
109919ccd446eSAtari911
109929ccd446eSAtari911**2. Current namespace included**:
109939ccd446eSAtari911```javascript
109949ccd446eSAtari911// OLD: Excluded current namespace
109959ccd446eSAtari911.filter(ns => ns !== namespace) ✗
109969ccd446eSAtari911
109979ccd446eSAtari911// NEW: Include and mark as selected
109989ccd446eSAtari911options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓
109999ccd446eSAtari911```
110009ccd446eSAtari911
110019ccd446eSAtari911**3. Better error handling**:
110029ccd446eSAtari911```javascript
110039ccd446eSAtari911if (nsSpan) {  // Check exists
110049ccd446eSAtari911    let nsText = nsSpan.textContent.replace("�� ", "").trim();
110059ccd446eSAtari911    if (nsText && nsText !== "(default)") {  // Validate
110069ccd446eSAtari911        namespaces.add(nsText);
110079ccd446eSAtari911    }
110089ccd446eSAtari911}
110099ccd446eSAtari911```
110109ccd446eSAtari911
110119ccd446eSAtari911**4. Console debugging**:
110129ccd446eSAtari911```javascript
110139ccd446eSAtari911console.log('Edit recurring - Current namespace:', namespace);
110149ccd446eSAtari911console.log('Available namespaces:', nsArray);
110159ccd446eSAtari911```
110169ccd446eSAtari911
110179ccd446eSAtari911Open browser console (F12) to see what namespaces are detected!
110189ccd446eSAtari911
110199ccd446eSAtari911### Example Usage
110209ccd446eSAtari911
110219ccd446eSAtari911**Scenario**: Edit recurring "Team Meeting" in "work" namespace
110229ccd446eSAtari911
110239ccd446eSAtari911**Steps**:
110249ccd446eSAtari9111. Go to �� Recurring Events section
110259ccd446eSAtari9112. Click "Edit" on "Team Meeting"
110269ccd446eSAtari9113. See namespace dropdown:
110279ccd446eSAtari911   - ☐ (default)
110289ccd446eSAtari911   - ☑ work (current)
110299ccd446eSAtari911   - ☐ personal
110309ccd446eSAtari911   - ☐ projects
110319ccd446eSAtari9114. Select "personal" to move event
110329ccd446eSAtari9115. Click "Save Changes"
110339ccd446eSAtari9116. Event moved to "personal" namespace ✓
110349ccd446eSAtari911
110359ccd446eSAtari911**Finally works as expected!** ��
110369ccd446eSAtari911
110379ccd446eSAtari911## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION
110389ccd446eSAtari911
110399ccd446eSAtari911### �� Recurring Events Namespace Fix
110409ccd446eSAtari911- **Fixed:** Namespace now properly preserved when editing recurring events
110419ccd446eSAtari911- **Fixed:** Namespace selector now allows selecting any namespace (not just default)
110429ccd446eSAtari911- **Added:** Better logging for namespace preservation debugging
110439ccd446eSAtari911- **Added:** Console logging to track namespace values during edit
110449ccd446eSAtari911
110459ccd446eSAtari911### The Namespace Problem
110469ccd446eSAtari911
110479ccd446eSAtari911**Issue 1**: Can't select non-default namespace
110489ccd446eSAtari911```
110499ccd446eSAtari911When editing recurring event:
110509ccd446eSAtari911- Dropdown shows all namespaces ✓
110519ccd446eSAtari911- User selects "work"
110529ccd446eSAtari911- Form submits with "" (empty/default) ✗
110539ccd446eSAtari911```
110549ccd446eSAtari911
110559ccd446eSAtari911**Issue 2**: Namespace not preserved
110569ccd446eSAtari911```
110579ccd446eSAtari911Recurring event in "personal" namespace
110589ccd446eSAtari911Edit the title only
110599ccd446eSAtari911After save: namespace changed to "" (default) ✗
110609ccd446eSAtari911```
110619ccd446eSAtari911
110629ccd446eSAtari911### The Fixes
110639ccd446eSAtari911
110649ccd446eSAtari911**Fix 1**: Better namespace preservation logic
110659ccd446eSAtari911```php
110669ccd446eSAtari911// When editing recurring event:
110679ccd446eSAtari911$existingNamespace = $existingEventData['namespace'];
110689ccd446eSAtari911
110699ccd446eSAtari911// Preserve if user didn't explicitly change it:
110709ccd446eSAtari911if (empty($namespace) ||
110719ccd446eSAtari911    strpos($namespace, '*') !== false ||
110729ccd446eSAtari911    strpos($namespace, ';') !== false) {
110739ccd446eSAtari911    // User didn't select or selected wildcard
110749ccd446eSAtari911    $namespace = $existingNamespace; // Keep existing!
110759ccd446eSAtari911}
110769ccd446eSAtari911```
110779ccd446eSAtari911
110789ccd446eSAtari911**Fix 2**: Proper form population
110799ccd446eSAtari911```javascript
110809ccd446eSAtari911// When editing, set BOTH inputs:
110819ccd446eSAtari911namespaceHidden.value = event.namespace || '';  // Hidden (submitted)
110829ccd446eSAtari911namespaceSearch.value = event.namespace || '(default)';  // Visible
110839ccd446eSAtari911
110849ccd446eSAtari911// Plus logging:
110859ccd446eSAtari911console.log('Set namespace for editing:', event.namespace);
110869ccd446eSAtari911```
110879ccd446eSAtari911
110889ccd446eSAtari911**Fix 3**: Added detailed logging
110899ccd446eSAtari911```php
110909ccd446eSAtari911error_log("Preserving namespace '$namespace' (received='$receivedNamespace')");
110919ccd446eSAtari911error_log("Using new namespace '$namespace'");
110929ccd446eSAtari911error_log("No existing namespace to preserve");
110939ccd446eSAtari911```
110949ccd446eSAtari911
110959ccd446eSAtari911### How It Works Now
110969ccd446eSAtari911
110979ccd446eSAtari911**Scenario 1**: Edit without changing namespace
110989ccd446eSAtari911```
110999ccd446eSAtari911Event in "work" namespace
111009ccd446eSAtari911Edit title to "Updated Meeting"
111019ccd446eSAtari911Namespace field shows: "work"
111029ccd446eSAtari911Hidden input value: "work"
111039ccd446eSAtari911Result: Saved in "work" ✓
111049ccd446eSAtari911```
111059ccd446eSAtari911
111069ccd446eSAtari911**Scenario 2**: Change namespace during edit
111079ccd446eSAtari911```
111089ccd446eSAtari911Event in "personal" namespace
111099ccd446eSAtari911Edit and select "work" namespace
111109ccd446eSAtari911Hidden input value: "work"
111119ccd446eSAtari911Result: Saved in "work" ✓
111129ccd446eSAtari911```
111139ccd446eSAtari911
111149ccd446eSAtari911**Scenario 3**: Edit with empty/wildcard namespace
111159ccd446eSAtari911```
111169ccd446eSAtari911Event in "projects" namespace
111179ccd446eSAtari911Namespace field empty or shows "personal;work"
111189ccd446eSAtari911System preserves: "projects"
111199ccd446eSAtari911Result: Saved in "projects" ✓
111209ccd446eSAtari911```
111219ccd446eSAtari911
111229ccd446eSAtari911### Debugging
111239ccd446eSAtari911
111249ccd446eSAtari911Now with console logging, you can see:
111259ccd446eSAtari911```javascript
111269ccd446eSAtari911Set namespace for editing: work
111279ccd446eSAtari911Hidden value: work
111289ccd446eSAtari911```
111299ccd446eSAtari911
111309ccd446eSAtari911And in PHP logs:
111319ccd446eSAtari911```
111329ccd446eSAtari911Calendar saveEvent recurring: Loaded existing data - namespace='work'
111339ccd446eSAtari911Calendar saveEvent recurring: Preserving namespace 'work' (received='')
111349ccd446eSAtari911```
111359ccd446eSAtari911
111369ccd446eSAtari911**Namespace preservation now works correctly!** ��
111379ccd446eSAtari911
111389ccd446eSAtari911## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA
111399ccd446eSAtari911
111409ccd446eSAtari911### �� Recurring Events Edit Fix
111419ccd446eSAtari911- **Fixed:** Editing recurring events now preserves unchanged fields
111429ccd446eSAtari911- **Fixed:** Empty fields no longer erase existing data
111439ccd446eSAtari911- **Added:** Smart merge of existing event data with new changes
111449ccd446eSAtari911
111459ccd446eSAtari911### The Problem
111469ccd446eSAtari911
111479ccd446eSAtari911**Before**: Editing erased unchanged fields!
111489ccd446eSAtari911```
111499ccd446eSAtari911Original recurring event:
111509ccd446eSAtari911- Title: "Team Meeting"
111519ccd446eSAtari911- Time: "10:00 AM"
111529ccd446eSAtari911- Description: "Weekly standup with engineering team"
111539ccd446eSAtari911- Color: Red
111549ccd446eSAtari911
111559ccd446eSAtari911User edits ONLY the title to "Staff Meeting"
111569ccd446eSAtari911Form sends:
111579ccd446eSAtari911- Title: "Staff Meeting" ✓
111589ccd446eSAtari911- Time: "" ✗ (empty because user didn't change it)
111599ccd446eSAtari911- Description: "" ✗ (empty)
111609ccd446eSAtari911- Color: "#3498db" ✗ (default blue)
111619ccd446eSAtari911
111629ccd446eSAtari911Result after save:
111639ccd446eSAtari911- Title: "Staff Meeting" ✓
111649ccd446eSAtari911- Time: BLANK ✗
111659ccd446eSAtari911- Description: BLANK ✗
111669ccd446eSAtari911- Color: Blue ✗
111679ccd446eSAtari911```
111689ccd446eSAtari911
111699ccd446eSAtari911**All the other data was lost!** ✗
111709ccd446eSAtari911
111719ccd446eSAtari911### The Fix
111729ccd446eSAtari911
111739ccd446eSAtari911**After**: Preserves unchanged data!
111749ccd446eSAtari911```php
111759ccd446eSAtari911if ($eventId && $isRecurring) {
111769ccd446eSAtari911    // Load existing event data
111779ccd446eSAtari911    $existingEventData = getExistingEventData($eventId);
111789ccd446eSAtari911
111799ccd446eSAtari911    // Merge: use new value OR keep existing
111809ccd446eSAtari911    $title = $title ?: $existingEventData['title'];
111819ccd446eSAtari911    $time = $time ?: $existingEventData['time'];
111829ccd446eSAtari911    $description = $description ?: $existingEventData['description'];
111839ccd446eSAtari911    $color = ($color === '#3498db') ?
111849ccd446eSAtari911        $existingEventData['color'] : $color;
111859ccd446eSAtari911}
111869ccd446eSAtari911```
111879ccd446eSAtari911
111889ccd446eSAtari911**Now**:
111899ccd446eSAtari911```
111909ccd446eSAtari911User edits ONLY the title to "Staff Meeting"
111919ccd446eSAtari911
111929ccd446eSAtari911System:
111939ccd446eSAtari9111. Loads existing event data
111949ccd446eSAtari9112. Merges: new title + existing time/description/color
111959ccd446eSAtari9113. Saves merged data
111969ccd446eSAtari911
111979ccd446eSAtari911Result:
111989ccd446eSAtari911- Title: "Staff Meeting" ✓ (changed)
111999ccd446eSAtari911- Time: "10:00 AM" ✓ (preserved!)
112009ccd446eSAtari911- Description: "Weekly standup..." ✓ (preserved!)
112019ccd446eSAtari911- Color: Red ✓ (preserved!)
112029ccd446eSAtari911```
112039ccd446eSAtari911
112049ccd446eSAtari911**Only changed fields are updated!** ✓
112059ccd446eSAtari911
112069ccd446eSAtari911### How It Works
112079ccd446eSAtari911
112089ccd446eSAtari911**Step 1**: Load existing data
112099ccd446eSAtari911```php
112109ccd446eSAtari911$existingEventData = $this->getExistingEventData(
112119ccd446eSAtari911    $eventId,
112129ccd446eSAtari911    $date,
112139ccd446eSAtari911    $namespace
112149ccd446eSAtari911);
112159ccd446eSAtari911```
112169ccd446eSAtari911
112179ccd446eSAtari911**Step 2**: Merge with new data
112189ccd446eSAtari911```php
112199ccd446eSAtari911// If new value is empty, use existing value
112209ccd446eSAtari911$title = $newTitle ?: $existingEventData['title'];
112219ccd446eSAtari911$time = $newTime ?: $existingEventData['time'];
112229ccd446eSAtari911$description = $newDesc ?: $existingEventData['description'];
112239ccd446eSAtari911
112249ccd446eSAtari911// Special handling for color (default is #3498db)
112259ccd446eSAtari911if ($newColor === '#3498db' && $existingEventData['color']) {
112269ccd446eSAtari911    $color = $existingEventData['color'];
112279ccd446eSAtari911}
112289ccd446eSAtari911```
112299ccd446eSAtari911
112309ccd446eSAtari911**Step 3**: Save merged data
112319ccd446eSAtari911```php
112329ccd446eSAtari911createRecurringEvents(..., $title, $time, $description, $color, ...);
112339ccd446eSAtari911```
112349ccd446eSAtari911
112359ccd446eSAtari911### Fields Preserved
112369ccd446eSAtari911
112379ccd446eSAtari911When editing recurring events, these fields are now preserved if not changed:
112389ccd446eSAtari911- ✅ Title (if left blank)
112399ccd446eSAtari911- ✅ Time (if not specified)
112409ccd446eSAtari911- ✅ End Time (if not specified)
112419ccd446eSAtari911- ✅ Description (if left empty)
112429ccd446eSAtari911- ✅ Color (if still default blue)
112439ccd446eSAtari911
112449ccd446eSAtari911**Edit only what you want to change - everything else stays!** ��
112459ccd446eSAtari911
112469ccd446eSAtari911## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX
112479ccd446eSAtari911
112489ccd446eSAtari911### ✨ New Feature: Rename Namespaces
112499ccd446eSAtari911- **Added:** ✏️ Rename button in Namespace Explorer
112509ccd446eSAtari911- **Added:** Rename all events in a namespace at once
112519ccd446eSAtari911- **Added:** Automatic cleanup of old directory structure
112529ccd446eSAtari911
112539ccd446eSAtari911### �� Critical Fix: Recurring Events Actually Edit Now!
112549ccd446eSAtari911- **Fixed:** Editing recurring events now deletes ALL instances
112559ccd446eSAtari911- **Fixed:** Previously only deleted one instance, left orphans
112569ccd446eSAtari911- **Fixed:** Recurring events properly regenerated on edit
112579ccd446eSAtari911
112589ccd446eSAtari911### Namespace Rename Feature
112599ccd446eSAtari911
112609ccd446eSAtari911**Before**: Could only delete namespaces, not rename
112619ccd446eSAtari911
112629ccd446eSAtari911**After**: Click ✏️ to rename!
112639ccd446eSAtari911
112649ccd446eSAtari911```
112659ccd446eSAtari911�� work (15 events)  [3] [✏️] [��️]
112669ccd446eSAtari911                          ↑ NEW!
112679ccd446eSAtari911```
112689ccd446eSAtari911
112699ccd446eSAtari911**How It Works**:
112709ccd446eSAtari9111. Click ✏️ rename button
112719ccd446eSAtari9112. Enter new namespace name
112729ccd446eSAtari9113. All events moved to new namespace
112739ccd446eSAtari9114. Event `namespace` field updated in JSON
112749ccd446eSAtari9115. Old directory cleaned up
112759ccd446eSAtari911
112769ccd446eSAtari911**Example**:
112779ccd446eSAtari911```
112789ccd446eSAtari911Rename: "work" → "business"
112799ccd446eSAtari911
112809ccd446eSAtari911Before:
112819ccd446eSAtari911/data/meta/work/calendar/*.json
112829ccd446eSAtari911Events: {namespace: "work"}
112839ccd446eSAtari911
112849ccd446eSAtari911After:
112859ccd446eSAtari911/data/meta/business/calendar/*.json
112869ccd446eSAtari911Events: {namespace: "business"}
112879ccd446eSAtari911```
112889ccd446eSAtari911
112899ccd446eSAtari911**Implementation**:
112909ccd446eSAtari911```php
112919ccd446eSAtari911private function renameNamespace() {
112929ccd446eSAtari911    // 1. Validate new name
112939ccd446eSAtari911    // 2. Rename directory
112949ccd446eSAtari911    // 3. Update all event namespace fields in JSON
112959ccd446eSAtari911    // 4. Clean up old empty directories
112969ccd446eSAtari911}
112979ccd446eSAtari911```
112989ccd446eSAtari911
112999ccd446eSAtari911### Recurring Events Fix - The Problem
113009ccd446eSAtari911
113019ccd446eSAtari911**Before**: Editing didn't work!
113029ccd446eSAtari911```
113039ccd446eSAtari911Original recurring event generates:
113049ccd446eSAtari911- Event-0 (Mon, Feb 10)
113059ccd446eSAtari911- Event-1 (Mon, Feb 17)
113069ccd446eSAtari911- Event-2 (Mon, Feb 24)
113079ccd446eSAtari911
113089ccd446eSAtari911User edits Event-0, changes title to "Updated"
113099ccd446eSAtari911
113109ccd446eSAtari911What SHOULD happen:
113119ccd446eSAtari911- Delete Event-0, Event-1, Event-2
113129ccd446eSAtari911- Generate new instances with "Updated" title
113139ccd446eSAtari911
113149ccd446eSAtari911What ACTUALLY happened:
113159ccd446eSAtari911- Delete Event-0 only ✗
113169ccd446eSAtari911- Generate new instances
113179ccd446eSAtari911- Result: Event-1 and Event-2 still show old title! ✗
113189ccd446eSAtari911```
113199ccd446eSAtari911
113209ccd446eSAtari911**After**: Properly deletes ALL instances!
113219ccd446eSAtari911
113229ccd446eSAtari911**The Fix**:
113239ccd446eSAtari911```php
113249ccd446eSAtari911private function deleteEvent() {
113259ccd446eSAtari911    $event = getEvent($eventId);
113269ccd446eSAtari911
113279ccd446eSAtari911    // Check if recurring
113289ccd446eSAtari911    if ($event['recurring'] && $event['recurringId']) {
113299ccd446eSAtari911        // Delete ALL instances with same recurringId
113309ccd446eSAtari911        deleteAllRecurringInstances($recurringId);
113319ccd446eSAtari911    }
113329ccd446eSAtari911
113339ccd446eSAtari911    // Then normal delete for spanning events
113349ccd446eSAtari911}
113359ccd446eSAtari911
113369ccd446eSAtari911private function deleteAllRecurringInstances($recurringId) {
113379ccd446eSAtari911    // Scan ALL calendar JSON files
113389ccd446eSAtari911    foreach (glob('*.json') as $file) {
113399ccd446eSAtari911        // Filter out events with matching recurringId
113409ccd446eSAtari911        $events = array_filter($events, function($event) {
113419ccd446eSAtari911            return $event['recurringId'] !== $recurringId;
113429ccd446eSAtari911        });
113439ccd446eSAtari911    }
113449ccd446eSAtari911}
113459ccd446eSAtari911```
113469ccd446eSAtari911
113479ccd446eSAtari911**Result**:
113489ccd446eSAtari911- Edit "Weekly Team Meeting" → ALL instances updated ✓
113499ccd446eSAtari911- Delete recurring event → ALL instances deleted ✓
113509ccd446eSAtari911- No more orphaned events! ✓
113519ccd446eSAtari911
113529ccd446eSAtari911### Recurring Event Fields
113539ccd446eSAtari911
113549ccd446eSAtari911Every recurring event has:
113559ccd446eSAtari911```json
113569ccd446eSAtari911{
113579ccd446eSAtari911    "id": "abc123-0",
113589ccd446eSAtari911    "recurring": true,
113599ccd446eSAtari911    "recurringId": "abc123",  ← Links all instances
113609ccd446eSAtari911    ...
113619ccd446eSAtari911}
113629ccd446eSAtari911```
113639ccd446eSAtari911
113649ccd446eSAtari911When editing/deleting, we find ALL events with same `recurringId` and remove them!
113659ccd446eSAtari911
113669ccd446eSAtari911**Finally, recurring events work properly!** ��
113679ccd446eSAtari911
113689ccd446eSAtari911## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS
113699ccd446eSAtari911
113709ccd446eSAtari911### �� Important Events Sorting - ACTUALLY FIXED!
113719ccd446eSAtari911- **Fixed:** Important Events now REALLY sorted by date first, then time
113729ccd446eSAtari911- **Fixed:** renderSidebarSection was re-sorting and breaking the order
113739ccd446eSAtari911- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only
113749ccd446eSAtari911
113759ccd446eSAtari911### �� Pink Theme Tooltip Bling!
113769ccd446eSAtari911- **Added:** Pink gradient tooltips (hot pink → light pink)
113779ccd446eSAtari911- **Added:** Glowing pink border on tooltips
113789ccd446eSAtari911- **Added:** Sparkling heart (��) appears next to tooltip!
113799ccd446eSAtari911- **Added:** Heart has pink glow drop-shadow
113809ccd446eSAtari911
113819ccd446eSAtari911### The Sorting Bug - Root Cause
113829ccd446eSAtari911
113839ccd446eSAtari911**Problem**: Two sorts were happening!
113849ccd446eSAtari911
113859ccd446eSAtari911**Sort #1** (Line 2047): Before rendering
113869ccd446eSAtari911```php
113879ccd446eSAtari911usort($importantEvents, ...) // Sort by date ✓
113889ccd446eSAtari911```
113899ccd446eSAtari911
113909ccd446eSAtari911**Sort #2** (Line 2751): Inside renderSidebarSection
113919ccd446eSAtari911```php
113929ccd446eSAtari911usort($events, ...) // Sort by TIME ONLY ✗
113939ccd446eSAtari911// This was breaking the date order!
113949ccd446eSAtari911```
113959ccd446eSAtari911
113969ccd446eSAtari911**The Fix**: Different sorting for different sections
113979ccd446eSAtari911```php
113989ccd446eSAtari911if ($title === 'Important Events') {
113999ccd446eSAtari911    // Sort by DATE first, then time
114009ccd446eSAtari911    usort($events, function($a, $b) {
114019ccd446eSAtari911        if ($dateA !== $dateB) {
114029ccd446eSAtari911            return strcmp($dateA, $dateB); // DATE first!
114039ccd446eSAtari911        }
114049ccd446eSAtari911        // Same date - sort by time
114059ccd446eSAtari911        return timeCompare($a, $b);
114069ccd446eSAtari911    });
114079ccd446eSAtari911} else {
114089ccd446eSAtari911    // Today/Tomorrow - sort by TIME only (same date)
114099ccd446eSAtari911    usort($events, function($a, $b) {
114109ccd446eSAtari911        return timeCompare($a, $b);
114119ccd446eSAtari911    });
114129ccd446eSAtari911}
114139ccd446eSAtari911```
114149ccd446eSAtari911
114159ccd446eSAtari911**Result**: Important Events now CORRECTLY sorted!
114169ccd446eSAtari911```
114179ccd446eSAtari911✓ Sun, Feb 8 - 3:30 PM Super Bowl
114189ccd446eSAtari911✓ Tue, Feb 10 - 11:30 AM Doctor visit
114199ccd446eSAtari911✓ Sat, Feb 14 - Valentine's Day (all-day)
114209ccd446eSAtari911✓ Sat, Feb 14 - 8:00 PM Crab Shack
114219ccd446eSAtari911```
114229ccd446eSAtari911
114239ccd446eSAtari911### Pink Tooltip Magic! ��
114249ccd446eSAtari911
114259ccd446eSAtari911**Normal Tooltips**: Black background, plain
114269ccd446eSAtari911```css
114279ccd446eSAtari911background: rgba(0, 0, 0, 0.95);
114289ccd446eSAtari911color: #fff;
114299ccd446eSAtari911```
114309ccd446eSAtari911
114319ccd446eSAtari911**Pink Theme Tooltips**: FABULOUS!
114329ccd446eSAtari911```css
114339ccd446eSAtari911/* Pink gradient background */
114349ccd446eSAtari911background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%);
114359ccd446eSAtari911
114369ccd446eSAtari911/* Glowing pink border */
114379ccd446eSAtari911border: 2px solid #ff85c1;
114389ccd446eSAtari911
114399ccd446eSAtari911/* Double glow shadow */
114409ccd446eSAtari911box-shadow:
114419ccd446eSAtari911    0 0 15px rgba(255, 20, 147, 0.6),
114429ccd446eSAtari911    0 4px 12px rgba(0, 0, 0, 0.4);
114439ccd446eSAtari911
114449ccd446eSAtari911/* Bold text */
114459ccd446eSAtari911font-weight: 600;
114469ccd446eSAtari911```
114479ccd446eSAtari911
114489ccd446eSAtari911**Plus**: Sparkling heart next to tooltip!
114499ccd446eSAtari911```css
114509ccd446eSAtari911.sidebar-pink [data-tooltip]:after {
114519ccd446eSAtari911    content: '��';
114529ccd446eSAtari911    font-size: 12px;
114539ccd446eSAtari911    filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8));
114549ccd446eSAtari911}
114559ccd446eSAtari911```
114569ccd446eSAtari911
114579ccd446eSAtari911**The Effect**:
114589ccd446eSAtari911```
114599ccd446eSAtari911Hover over ⚠ conflict warning:
114609ccd446eSAtari911┌────────────────────┐ ��
114619ccd446eSAtari911│ Conflicts with:    │ ← Pink gradient
114629ccd446eSAtari911│ • Event 1 (3PM)   │ ← Pink border
114639ccd446eSAtari911│ • Event 2 (4PM)   │ ← Pink glow
114649ccd446eSAtari911└────────────────────┘
114659ccd446eSAtari911```
114669ccd446eSAtari911
114679ccd446eSAtari911**Maximum glamour on tooltips too!** ✨
114689ccd446eSAtari911
114699ccd446eSAtari911## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING
114709ccd446eSAtari911
114719ccd446eSAtari911### �� Important Events Order Fixed
114729ccd446eSAtari911- **Fixed:** Important Events now sorted by date (earliest first)
114739ccd446eSAtari911- **Fixed:** Events on same date sorted by time (chronological)
114749ccd446eSAtari911- **Fixed:** All-day events appear last within each date
114759ccd446eSAtari911
114769ccd446eSAtari911### Sorting Issue
114779ccd446eSAtari911
114789ccd446eSAtari911**Before**: Random order
114799ccd446eSAtari911```
114809ccd446eSAtari911Important Events:
114819ccd446eSAtari911�� Valentine's Day         (Sat, Feb 14)
114829ccd446eSAtari91111:30 AM Doctor visit      (Tue, Feb 10)  ← Feb 10 after Feb 14!
114839ccd446eSAtari9113:30 PM Super Bowl         (Sun, Feb 8)   ← Feb 8 after Feb 14!
114849ccd446eSAtari9118:00 PM Crab Shack         (Sat, Feb 14)
114859ccd446eSAtari911```
114869ccd446eSAtari911
114879ccd446eSAtari911**After**: Chronological order
114889ccd446eSAtari911```
114899ccd446eSAtari911Important Events:
114909ccd446eSAtari9113:30 PM Super Bowl         (Sun, Feb 8)   ← Earliest!
114919ccd446eSAtari91111:30 AM Doctor visit      (Tue, Feb 10)
114929ccd446eSAtari911�� Valentine's Day         (Sat, Feb 14)  ← All-day event
114939ccd446eSAtari9118:00 PM Crab Shack         (Sat, Feb 14)  ← Same day, sorted by time
114949ccd446eSAtari911```
114959ccd446eSAtari911
114969ccd446eSAtari911### Sorting Logic
114979ccd446eSAtari911
114989ccd446eSAtari911**Primary Sort**: By date
114999ccd446eSAtari911```php
115009ccd446eSAtari911strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14"
115019ccd446eSAtari911```
115029ccd446eSAtari911
115039ccd446eSAtari911**Secondary Sort**: By time (within same date)
115049ccd446eSAtari911```php
115059ccd446eSAtari911// All-day events (no time) go last
115069ccd446eSAtari911if (empty($timeA) && !empty($timeB)) return 1;
115079ccd446eSAtari911if (!empty($timeA) && empty($timeB)) return -1;
115089ccd446eSAtari911
115099ccd446eSAtari911// Both have times - sort chronologically
115109ccd446eSAtari911$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes
115119ccd446eSAtari911$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes
115129ccd446eSAtari911return $aMinutes - $bMinutes;      // 690 < 1200
115139ccd446eSAtari911```
115149ccd446eSAtari911
115159ccd446eSAtari911**Result**:
115169ccd446eSAtari9111. Sun, Feb 8 - 3:30 PM (earliest date & time)
115179ccd446eSAtari9112. Tue, Feb 10 - 11:30 AM (next date)
115189ccd446eSAtari9113. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14)
115199ccd446eSAtari9114. Sat, Feb 14 - 8:00 PM (timed event on Feb 14)
115209ccd446eSAtari911
115219ccd446eSAtari911**Perfect chronological order for next 2 weeks!** ✓
115229ccd446eSAtari911
115239ccd446eSAtari911## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨��
115249ccd446eSAtari911
115259ccd446eSAtari911### �� EXTREME PINK BLING EFFECTS!
115269ccd446eSAtari911- **Added:** Click sparkles - 8 sparkles burst out on every click!
115279ccd446eSAtari911- **Added:** Auto-sparkles - random sparkles appear every 3 seconds
115289ccd446eSAtari911- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover
115299ccd446eSAtari911- **Added:** Pulsing border glow - constantly breathing pink glow
115309ccd446eSAtari911- **Added:** Drop shadows on sparkles for extra depth
115319ccd446eSAtari911- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows!
115329ccd446eSAtari911
115339ccd446eSAtari911### Sparkle Effects Breakdown
115349ccd446eSAtari911
115359ccd446eSAtari911**Click Sparkles** ��:
115369ccd446eSAtari911```javascript
115379ccd446eSAtari911// 8 sparkles burst out when you click anywhere!
115389ccd446eSAtari911for (let i = 0; i < 8; i++) {
115399ccd446eSAtari911    // Staggered appearance (40ms apart)
115409ccd446eSAtari911    createSparkle(x, y);
115419ccd446eSAtari911}
115429ccd446eSAtari911
115439ccd446eSAtari911// Sparkle emojis:
115449ccd446eSAtari911["✨", "��", "��", "⭐", "��", "��", "��", "��", "��", "��"]
115459ccd446eSAtari911```
115469ccd446eSAtari911
115479ccd446eSAtari911**Each sparkle**:
115489ccd446eSAtari911- Starts at click point
115499ccd446eSAtari911- Flies outward 30-60px in random direction
115509ccd446eSAtari911- Spins 360 degrees
115519ccd446eSAtari911- Fades in and out
115529ccd446eSAtari911- Has pink glow drop-shadow
115539ccd446eSAtari911- Disappears after 1 second
115549ccd446eSAtari911
115559ccd446eSAtari911**Auto Sparkles** ⏰:
115569ccd446eSAtari911```javascript
115579ccd446eSAtari911// Random sparkle every 3 seconds
115589ccd446eSAtari911setInterval(() => {
115599ccd446eSAtari911    const x = Math.random() * width;
115609ccd446eSAtari911    const y = Math.random() * height;
115619ccd446eSAtari911    createSparkle(x, y);
115629ccd446eSAtari911}, 3000);
115639ccd446eSAtari911```
115649ccd446eSAtari911
115659ccd446eSAtari911**Result**: Constant magical sparkles even without clicking! ✨
115669ccd446eSAtari911
115679ccd446eSAtari911**Hover Mega-Glow** ��:
115689ccd446eSAtari911```css
115699ccd446eSAtari911.sidebar-pink:hover {
115709ccd446eSAtari911    box-shadow:
115719ccd446eSAtari911        0 0 30px rgba(255, 20, 147, 0.9),
115729ccd446eSAtari911        0 0 50px rgba(255, 20, 147, 0.5) !important;
115739ccd446eSAtari911}
115749ccd446eSAtari911```
115759ccd446eSAtari911
115769ccd446eSAtari911**Result**: Sidebar EXPLODES with pink glow when you hover over it! ��
115779ccd446eSAtari911
115789ccd446eSAtari911**Pulsing Border Glow** ��:
115799ccd446eSAtari911```css
115809ccd446eSAtari911@keyframes pulse-glow {
115819ccd446eSAtari911    0%, 100% {
115829ccd446eSAtari911        box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
115839ccd446eSAtari911    }
115849ccd446eSAtari911    50% {
115859ccd446eSAtari911        box-shadow:
115869ccd446eSAtari911            0 0 25px rgba(255, 20, 147, 0.8),
115879ccd446eSAtari911            0 0 40px rgba(255, 20, 147, 0.4);
115889ccd446eSAtari911    }
115899ccd446eSAtari911}
115909ccd446eSAtari911
115919ccd446eSAtari911animation: pulse-glow 3s ease-in-out infinite;
115929ccd446eSAtari911```
115939ccd446eSAtari911
115949ccd446eSAtari911**Result**: Border continuously breathes with pink glow! ��
115959ccd446eSAtari911
115969ccd446eSAtari911**Sparkle Animation** ��:
115979ccd446eSAtari911```css
115989ccd446eSAtari911@keyframes sparkle {
115999ccd446eSAtari911    0% {
116009ccd446eSAtari911        opacity: 0;
116019ccd446eSAtari911        transform: translate(0, 0) scale(0) rotate(0deg);
116029ccd446eSAtari911    }
116039ccd446eSAtari911    50% {
116049ccd446eSAtari911        opacity: 1;
116059ccd446eSAtari911        transform: translate(halfway) scale(1) rotate(180deg);
116069ccd446eSAtari911    }
116079ccd446eSAtari911    100% {
116089ccd446eSAtari911        opacity: 0;
116099ccd446eSAtari911        transform: translate(far) scale(0) rotate(360deg);
116109ccd446eSAtari911    }
116119ccd446eSAtari911}
116129ccd446eSAtari911```
116139ccd446eSAtari911
116149ccd446eSAtari911**Result**: Sparkles spin, grow, shrink, and fly! ��
116159ccd446eSAtari911
116169ccd446eSAtari911### Complete Pink Bling Experience:
116179ccd446eSAtari911
116189ccd446eSAtari911**Always Active**:
116199ccd446eSAtari911- ✨ Pulsing pink border glow (3 second cycle)
116209ccd446eSAtari911- ✨ Auto-sparkles every 3 seconds
116219ccd446eSAtari911
116229ccd446eSAtari911**On Hover**:
116239ccd446eSAtari911- �� MEGA GLOW EFFECT (2x brightness!)
116249ccd446eSAtari911
116259ccd446eSAtari911**On Click**:
116269ccd446eSAtari911- �� 8 sparkles EXPLODE outward!
116279ccd446eSAtari911- �� Random emojis (hearts, stars, diamonds, crowns!)
116289ccd446eSAtari911- �� Each sparkle spins 360° while flying
116299ccd446eSAtari911- �� Pink glow drop-shadow on each sparkle
116309ccd446eSAtari911
116319ccd446eSAtari911**The Result**:
116329ccd446eSAtari911- Click anywhere = SPARKLE EXPLOSION! ��
116339ccd446eSAtari911- Hover anywhere = MEGA GLOW! ✨
116349ccd446eSAtari911- Always breathing and sparkling! ��
116359ccd446eSAtari911- Maximum glamour! ��
116369ccd446eSAtari911- Wife approval: 1000%! ��
116379ccd446eSAtari911
116389ccd446eSAtari911**THIS IS THE MOST FABULOUS CALENDAR EVER!** ��✨��
116399ccd446eSAtari911
116409ccd446eSAtari911## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH
116419ccd446eSAtari911
116429ccd446eSAtari911### �� Pink Theme Final Touches
116439ccd446eSAtari911- **Fixed:** Add Event text now black (was bright pink, hard to read)
116449ccd446eSAtari911- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!)
116459ccd446eSAtari911- **Removed:** Text shadow on Add Event button (cleaner with black text)
116469ccd446eSAtari911
116479ccd446eSAtari911### Add Event Text - Black & Readable!
116489ccd446eSAtari911
116499ccd446eSAtari911**Before**: Bright pink text (#ff1493) on dark pink background
116509ccd446eSAtari911```php
116519ccd446eSAtari911$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read!
116529ccd446eSAtari911text-shadow: 0 0 3px #ff1493; // Glowy pink
116539ccd446eSAtari911```
116549ccd446eSAtari911
116559ccd446eSAtari911**After**: Black text, no shadow, perfect contrast!
116569ccd446eSAtari911```php
116579ccd446eSAtari911$addBtnTextColor = $theme === 'pink' ? '#000000' : ...;
116589ccd446eSAtari911$addBtnTextShadow = $theme === 'pink' ? 'none' : ...;
116599ccd446eSAtari911```
116609ccd446eSAtari911
116619ccd446eSAtari911**Result**:
116629ccd446eSAtari911- Black text pops against dark pink background ✓
116639ccd446eSAtari911- Easy to read ✓
116649ccd446eSAtari911- Professional look with bling ✓
116659ccd446eSAtari911
116669ccd446eSAtari911### Clock Border - All Pink!
116679ccd446eSAtari911
116689ccd446eSAtari911**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green
116699ccd446eSAtari911
116709ccd446eSAtari911**Before**:
116719ccd446eSAtari911```php
116729ccd446eSAtari911// Inline style (only bottom):
116739ccd446eSAtari911style="border-bottom:2px solid #ff1493;"
116749ccd446eSAtari911
116759ccd446eSAtari911// CSS (all sides):
116769ccd446eSAtari911.eventlist-today-header {
116779ccd446eSAtari911    border: 2px solid #00cc07; // Green on top/sides!
116789ccd446eSAtari911}
116799ccd446eSAtari911```
116809ccd446eSAtari911
116819ccd446eSAtari911**After**: Inline style overrides ALL sides
116829ccd446eSAtari911```php
116839ccd446eSAtari911style="border:2px solid #ff1493;" // All 4 sides pink!
116849ccd446eSAtari911```
116859ccd446eSAtari911
116869ccd446eSAtari911**Result**: Clock box now 100% pink border on all four sides! ✓
116879ccd446eSAtari911
116889ccd446eSAtari911### What Changed:
116899ccd446eSAtari911
116909ccd446eSAtari911**Add Event Button**:
116919ccd446eSAtari911- Background: #b8156f (dark pink) ✓
116929ccd446eSAtari911- Text: **#000000 (black)** ← NEW!
116939ccd446eSAtari911- Text shadow: **none** ← NEW!
116949ccd446eSAtari911- Glow: 0 0 10px pink ✓
116959ccd446eSAtari911
116969ccd446eSAtari911**Clock Border**:
116979ccd446eSAtari911- Top: **#ff1493 (pink)** ← FIXED!
116989ccd446eSAtari911- Right: **#ff1493 (pink)** ← FIXED!
116999ccd446eSAtari911- Bottom: #ff1493 (pink) ✓
117009ccd446eSAtari911- Left: **#ff1493 (pink)** ← FIXED!
117019ccd446eSAtari911
117029ccd446eSAtari911**Perfect pink theme - wife approved!** ��✨
117039ccd446eSAtari911
117049ccd446eSAtari911## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION
117059ccd446eSAtari911
117069ccd446eSAtari911### �� Pink Theme Complete Makeover
117079ccd446eSAtari911- **Fixed:** Clock border now completely pink (was green on sides/top)
117089ccd446eSAtari911- **Changed:** Today/Tomorrow/Important sections now different shades of pink
117099ccd446eSAtari911- **Changed:** Add Event button now dark pink (was clashing blue)
117109ccd446eSAtari911- **Changed:** System status bars now pink gradient (3 shades!)
117119ccd446eSAtari911
117129ccd446eSAtari911### All-Pink Everything! ��
117139ccd446eSAtari911
117149ccd446eSAtari911**Clock Border**:
117159ccd446eSAtari911```css
117169ccd446eSAtari911/* Before: Green border */
117179ccd446eSAtari911border: 2px solid #00cc07;
117189ccd446eSAtari911
117199ccd446eSAtari911/* After: Hot pink border */
117209ccd446eSAtari911.sidebar-pink .eventlist-today-header {
117219ccd446eSAtari911    border-color: #ff1493;
117229ccd446eSAtari911    box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
117239ccd446eSAtari911}
117249ccd446eSAtari911```
117259ccd446eSAtari911
117269ccd446eSAtari911**Section Colors** (Different Pink Shades):
117279ccd446eSAtari911```php
117289ccd446eSAtari911// Before: Orange, green, purple
117299ccd446eSAtari911'Today' => '#ff9800',
117309ccd446eSAtari911'Tomorrow' => '#4caf50',
117319ccd446eSAtari911'Important' => '#9b59b6'
117329ccd446eSAtari911
117339ccd446eSAtari911// After: Hot pink, pink, light pink
117349ccd446eSAtari911'Today' => '#ff1493',      // Hot pink (DeepPink)
117359ccd446eSAtari911'Tomorrow' => '#ff69b4',   // Pink (HotPink)
117369ccd446eSAtari911'Important' => '#ff85c1'   // Light pink
117379ccd446eSAtari911```
117389ccd446eSAtari911
117399ccd446eSAtari911**Add Event Button**:
117409ccd446eSAtari911```php
117419ccd446eSAtari911// Before: Clashing blue
117429ccd446eSAtari911background: #3498db;
117439ccd446eSAtari911
117449ccd446eSAtari911// After: Dark pink with glow
117459ccd446eSAtari911background: #b8156f;       // Dark pink
117469ccd446eSAtari911hover: #8b0f54;            // Darker pink
117479ccd446eSAtari911shadow: 0 0 10px rgba(255, 20, 147, 0.5);
117489ccd446eSAtari911```
117499ccd446eSAtari911
117509ccd446eSAtari911**System Status Bars** (Pink Gradient):
117519ccd446eSAtari911```css
117529ccd446eSAtari911/* 5-min load average */
117539ccd446eSAtari911.sidebar-pink .eventlist-cpu-fill {
117549ccd446eSAtari911    background: #ff1493;   /* Hot pink */
117559ccd446eSAtari911    box-shadow: 0 0 5px rgba(255, 20, 147, 0.7);
117569ccd446eSAtari911}
117579ccd446eSAtari911
117589ccd446eSAtari911/* Realtime CPU */
117599ccd446eSAtari911.sidebar-pink .eventlist-cpu-fill-purple {
117609ccd446eSAtari911    background: #ff69b4;   /* Pink */
117619ccd446eSAtari911    box-shadow: 0 0 5px rgba(255, 105, 180, 0.7);
117629ccd446eSAtari911}
117639ccd446eSAtari911
117649ccd446eSAtari911/* Memory */
117659ccd446eSAtari911.sidebar-pink .eventlist-cpu-fill-orange {
117669ccd446eSAtari911    background: #ff85c1;   /* Light pink */
117679ccd446eSAtari911    box-shadow: 0 0 5px rgba(255, 133, 193, 0.7);
117689ccd446eSAtari911}
117699ccd446eSAtari911```
117709ccd446eSAtari911
117719ccd446eSAtari911### Pink Theme Visual Hierarchy:
117729ccd446eSAtari911
117739ccd446eSAtari911**Darkest → Lightest Pink Shades**:
117749ccd446eSAtari9111. Add Event button: #b8156f (dark pink)
117759ccd446eSAtari9112. Today section: #ff1493 (hot pink / deep pink)
117769ccd446eSAtari9113. System bar 1: #ff1493 (hot pink)
117779ccd446eSAtari9114. Tomorrow section: #ff69b4 (pink)
117789ccd446eSAtari9115. System bar 2: #ff69b4 (pink)
117799ccd446eSAtari9116. Important section: #ff85c1 (light pink)
117809ccd446eSAtari9117. System bar 3: #ff85c1 (light pink)
117819ccd446eSAtari911
117829ccd446eSAtari911**Result**: Beautiful pink gradient throughout entire sidebar! ��✨
117839ccd446eSAtari911
117849ccd446eSAtari911### What's Pink Now:
117859ccd446eSAtari911
117869ccd446eSAtari911✅ Sidebar background & border
117879ccd446eSAtari911✅ **Clock border** ← FIXED!
117889ccd446eSAtari911✅ Header gradient
117899ccd446eSAtari911✅ Week grid
117909ccd446eSAtari911✅ **Add Event button** ← FIXED!
117919ccd446eSAtari911✅ **Today section** ← Different shade!
117929ccd446eSAtari911✅ **Tomorrow section** ← Different shade!
117939ccd446eSAtari911✅ **Important section** ← Different shade!
117949ccd446eSAtari911✅ Event text & bars
117959ccd446eSAtari911✅ **System status bars** ← All 3 different pink shades!
117969ccd446eSAtari911✅ All shadows & glows
117979ccd446eSAtari911
117989ccd446eSAtari911**EVERYTHING is pink and fabulous!** ��✨
117999ccd446eSAtari911
118009ccd446eSAtari911## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS
118019ccd446eSAtari911
118029ccd446eSAtari911### ✨ New Theme: Pink Bling! ��
118039ccd446eSAtari911- **Added:** Glamorous hot pink theme with maximum sparkle
118049ccd446eSAtari911- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic
118059ccd446eSAtari911- **Perfect for:** Fabulous calendars that demand attention ✨
118069ccd446eSAtari911
118079ccd446eSAtari911### �� Professional Theme Shadow Fix
118089ccd446eSAtari911- **Fixed:** Section headers now have subtle shadow (not glow)
118099ccd446eSAtari911- **Fixed:** Clicked day panel header has proper shadow
118109ccd446eSAtari911
118119ccd446eSAtari911### Pink Bling Theme Colors
118129ccd446eSAtari911
118139ccd446eSAtari911**Background & Borders**:
118149ccd446eSAtari911```php
118159ccd446eSAtari911'bg' => '#1a0d14',           // Dark rich pink-black
118169ccd446eSAtari911'border' => '#ff1493',        // Hot pink (DeepPink)
118179ccd446eSAtari911'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow
118189ccd446eSAtari911```
118199ccd446eSAtari911
118209ccd446eSAtari911**Text Colors**:
118219ccd446eSAtari911```php
118229ccd446eSAtari911'text_primary' => '#ff69b4',  // Hot pink
118239ccd446eSAtari911'text_bright' => '#ff1493',   // Deep pink
118249ccd446eSAtari911'text_dim' => '#ff85c1',      // Light pink
118259ccd446eSAtari911```
118269ccd446eSAtari911
118279ccd446eSAtari911**Week Grid**:
118289ccd446eSAtari911```php
118299ccd446eSAtari911'grid_bg' => '#2d1a24',       // Dark purple-pink
118309ccd446eSAtari911'cell_bg' => '#1a0d14',       // Dark
118319ccd446eSAtari911'cell_today_bg' => '#3d2030', // Highlighted purple-pink
118329ccd446eSAtari911```
118339ccd446eSAtari911
118349ccd446eSAtari911**Special Effects**:
118359ccd446eSAtari911```php
118369ccd446eSAtari911'bar_glow' => '0 0 5px',      // Extra sparkly glow!
118379ccd446eSAtari911'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling!
118389ccd446eSAtari911```
118399ccd446eSAtari911
118409ccd446eSAtari911### Professional Theme Shadow Fix
118419ccd446eSAtari911
118429ccd446eSAtari911**Before**: Section headers had colored glow
118439ccd446eSAtari911```php
118449ccd446eSAtari911box-shadow: 0 0 8px #3498db; // Blue glow - wrong!
118459ccd446eSAtari911```
118469ccd446eSAtari911
118479ccd446eSAtari911**After**: Section headers have subtle shadow
118489ccd446eSAtari911```php
118499ccd446eSAtari911$headerShadow = ($theme === 'professional') ?
118509ccd446eSAtari911    '0 2px 4px rgba(0, 0, 0, 0.15)' :  // Shadow for professional
118519ccd446eSAtari911    '0 0 8px ' . $accentColor;          // Glow for others
118529ccd446eSAtari911```
118539ccd446eSAtari911
118549ccd446eSAtari911**Result**:
118559ccd446eSAtari911- **Matrix/Purple/Pink**: Colored glow on headers ✓
118569ccd446eSAtari911- **Professional**: Clean grey shadow (no glow) ✓
118579ccd446eSAtari911
118589ccd446eSAtari911### All Four Themes:
118599ccd446eSAtari911
118609ccd446eSAtari911**�� Matrix Edition**:
118619ccd446eSAtari911- Dark green (#00cc07)
118629ccd446eSAtari911- Neon glow effects
118639ccd446eSAtari911- Hacker aesthetic
118649ccd446eSAtari911
118659ccd446eSAtari911**�� Purple Dream**:
118669ccd446eSAtari911- Elegant purple (#9b59b6)
118679ccd446eSAtari911- Violet glow effects
118689ccd446eSAtari911- Royal aesthetic
118699ccd446eSAtari911
118709ccd446eSAtari911**�� Professional Blue**:
118719ccd446eSAtari911- Clean grey/blue (#4a90e2)
118729ccd446eSAtari911- Subtle shadows (NO glow)
118739ccd446eSAtari911- Corporate aesthetic
118749ccd446eSAtari911
118759ccd446eSAtari911**�� Pink Bling** (NEW!):
118769ccd446eSAtari911- Hot pink (#ff1493)
118779ccd446eSAtari911- MAXIMUM sparkle & glow
118789ccd446eSAtari911- Glamorous aesthetic ✨��
118799ccd446eSAtari911
118809ccd446eSAtari911### Technical Implementation
118819ccd446eSAtari911
118829ccd446eSAtari911**Theme Added To**:
118839ccd446eSAtari911- `getSidebarThemeStyles()` - color definitions
118849ccd446eSAtari911- `getSidebarTheme()` - validation
118859ccd446eSAtari911- `saveSidebarTheme()` - admin save
118869ccd446eSAtari911- Admin panel - UI with preview
118879ccd446eSAtari911- All shadow/glow calculations
118889ccd446eSAtari911- JavaScript theme colors
118899ccd446eSAtari911- Clicked day panel colors
118909ccd446eSAtari911
118919ccd446eSAtari911**Perfect for users who want FABULOUS pink calendars!** ��✨
118929ccd446eSAtari911
118939ccd446eSAtari911## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY
118949ccd446eSAtari911
118959ccd446eSAtari911### �� Text Glow Refinement
118969ccd446eSAtari911- **Changed:** Reduced text glow from 3px to 2px (less intense)
118979ccd446eSAtari911- **Fixed:** Clicked day panel now has same text glow as sections
118989ccd446eSAtari911
118999ccd446eSAtari911### Text Glow Reduction
119009ccd446eSAtari911
119019ccd446eSAtari911**Before**: Text glow was too strong (3px)
119029ccd446eSAtari911```php
119039ccd446eSAtari911// Sections:
119049ccd446eSAtari911text-shadow: 0 0 3px #00cc07; // Too bright!
119059ccd446eSAtari911
119069ccd446eSAtari911// Clicked day panel:
119079ccd446eSAtari911text-shadow: 0 0 3px #00cc07; // Too bright!
119089ccd446eSAtari911```
119099ccd446eSAtari911
119109ccd446eSAtari911**After**: Subtler text glow (2px)
119119ccd446eSAtari911```php
119129ccd446eSAtari911// Sections:
119139ccd446eSAtari911text-shadow: 0 0 2px #00cc07; // Just right ✓
119149ccd446eSAtari911
119159ccd446eSAtari911// Clicked day panel:
119169ccd446eSAtari911text-shadow: 0 0 2px #00cc07; // Just right ✓
119179ccd446eSAtari911```
119189ccd446eSAtari911
119199ccd446eSAtari911**Visual Impact**:
119209ccd446eSAtari911- **Matrix**: Softer green glow, easier to read
119219ccd446eSAtari911- **Purple**: Softer purple glow, more elegant
119229ccd446eSAtari911- **Professional**: Still no glow (clean)
119239ccd446eSAtari911
119249ccd446eSAtari911### Consistency Fix
119259ccd446eSAtari911
119269ccd446eSAtari911**Before**: Sections had glow, clicked day panel had NO glow
119279ccd446eSAtari911
119289ccd446eSAtari911**After**: Both sections AND clicked day panel have matching subtle glow
119299ccd446eSAtari911
119309ccd446eSAtari911**Where Glow Appears**:
119319ccd446eSAtari911- ✅ Today section event text
119329ccd446eSAtari911- ✅ Tomorrow section event text
119339ccd446eSAtari911- ✅ Important section event text
119349ccd446eSAtari911- ✅ **Clicked day panel event text** ← NOW CONSISTENT!
119359ccd446eSAtari911
119369ccd446eSAtari911**Result**:
119379ccd446eSAtari911- Glow is less intense and easier on eyes ✓
119389ccd446eSAtari911- All event text has consistent styling ✓
119399ccd446eSAtari911- Matrix/Purple themes more refined ✓
119409ccd446eSAtari911
119419ccd446eSAtari911### Technical Details
119429ccd446eSAtari911
119439ccd446eSAtari911**PHP (Sections)**:
119449ccd446eSAtari911```php
119459ccd446eSAtari911$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';';
119469ccd446eSAtari911```
119479ccd446eSAtari911
119489ccd446eSAtari911**JavaScript (Clicked Day Panel)**:
119499ccd446eSAtari911```javascript
119509ccd446eSAtari911themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple
119519ccd446eSAtari911eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'";
119529ccd446eSAtari911```
119539ccd446eSAtari911
119549ccd446eSAtari911**Perfect consistency and subtle elegance!** ✨
119559ccd446eSAtari911
119569ccd446eSAtari911## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY
119579ccd446eSAtari911
119589ccd446eSAtari911### ✨ Important Events Enhancement
119599ccd446eSAtari911- **Changed:** Important events now show from next 2 weeks (not just current week)
119609ccd446eSAtari911- **Fixed:** Important events on Sunday after current week now visible
119619ccd446eSAtari911- **Changed:** Events loaded 2 weeks into future for Important section
119629ccd446eSAtari911
119639ccd446eSAtari911### �� Background Cleanup
119649ccd446eSAtari911- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections
119659ccd446eSAtari911- **Removed:** Grey backgrounds from individual events
119669ccd446eSAtari911- **Result:** Clean transparent backgrounds, original dark Matrix look restored
119679ccd446eSAtari911
119689ccd446eSAtari911### Important Events - Future Coverage
119699ccd446eSAtari911
119709ccd446eSAtari911**Before**: Only showed Important events from current week
119719ccd446eSAtari911```php
119729ccd446eSAtari911if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
119739ccd446eSAtari911    $importantEvents[] = $event;
119749ccd446eSAtari911}
119759ccd446eSAtari911```
119769ccd446eSAtari911
119779ccd446eSAtari911**After**: Shows Important events from today through next 2 weeks
119789ccd446eSAtari911```php
119799ccd446eSAtari911// Load events 2 weeks out
119809ccd446eSAtari911$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days'));
119819ccd446eSAtari911
119829ccd446eSAtari911// Show all important events from today forward
119839ccd446eSAtari911if ($isImportant && $dateKey >= $todayStr) {
119849ccd446eSAtari911    $importantEvents[] = $event;
119859ccd446eSAtari911}
119869ccd446eSAtari911```
119879ccd446eSAtari911
119889ccd446eSAtari911**Example**:
119899ccd446eSAtari911- Today: Saturday Feb 7
119909ccd446eSAtari911- Current week: Sun Feb 1 → Sat Feb 7
119919ccd446eSAtari911- Important events shown: Feb 7 → Feb 21 (today + 14 days)
119929ccd446eSAtari911
119939ccd446eSAtari911**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓
119949ccd446eSAtari911
119959ccd446eSAtari911### Background Removal
119969ccd446eSAtari911
119979ccd446eSAtari911**Before**: Light grey/white backgrounds added
119989ccd446eSAtari911```php
119999ccd446eSAtari911// Section background:
120009ccd446eSAtari911$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay
120019ccd446eSAtari911
120029ccd446eSAtari911// Event background:
120039ccd446eSAtari911$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay
120049ccd446eSAtari911```
120059ccd446eSAtari911
120069ccd446eSAtari911**After**: No backgrounds (transparent)
120079ccd446eSAtari911```php
120089ccd446eSAtari911// Section: No background property
120099ccd446eSAtari911<div style="padding:4px 0;">
120109ccd446eSAtari911
120119ccd446eSAtari911// Event: No background property
120129ccd446eSAtari911<div style="padding:4px 6px; ...">
120139ccd446eSAtari911```
120149ccd446eSAtari911
120159ccd446eSAtari911**Result**:
120169ccd446eSAtari911- Clean, dark Matrix aesthetic restored ✓
120179ccd446eSAtari911- Purple theme darker and more elegant ✓
120189ccd446eSAtari911- Professional theme still has its light grey sidebar bg ✓
120199ccd446eSAtari911- Events stand out with just color bars and borders ✓
120209ccd446eSAtari911
120219ccd446eSAtari911### What Changed:
120229ccd446eSAtari911
120239ccd446eSAtari911**Sections (Today/Tomorrow/Important)**:
120249ccd446eSAtari911- ❌ No more grey overlay
120259ccd446eSAtari911- ✓ Transparent background
120269ccd446eSAtari911- ✓ Colored borders & glows remain
120279ccd446eSAtari911
120289ccd446eSAtari911**Individual Events**:
120299ccd446eSAtari911- ❌ No more grey overlay
120309ccd446eSAtari911- ✓ Transparent background
120319ccd446eSAtari911- ✓ Colored bars & borders remain
120329ccd446eSAtari911
120339ccd446eSAtari911**Perfect! Back to the original clean dark look with future Important events!** ��
120349ccd446eSAtari911
120359ccd446eSAtari911## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR
120369ccd446eSAtari911
120379ccd446eSAtari911### �� Final Theme Polish
120389ccd446eSAtari911- **Fixed:** Today/Tomorrow/Important section shadows now match theme
120399ccd446eSAtari911- **Fixed:** Event description text color now uses theme dim color
120409ccd446eSAtari911
120419ccd446eSAtari911### Section Shadow Fix
120429ccd446eSAtari911
120439ccd446eSAtari911**Problem**: Sections always had green glow regardless of theme
120449ccd446eSAtari911
120459ccd446eSAtari911**Before**:
120469ccd446eSAtari911```php
120479ccd446eSAtari911// Hardcoded green:
120489ccd446eSAtari911box-shadow: 0 0 5px rgba(0, 204, 7, 0.2);
120499ccd446eSAtari911```
120509ccd446eSAtari911
120519ccd446eSAtari911**After**:
120529ccd446eSAtari911```php
120539ccd446eSAtari911// Theme-aware:
120549ccd446eSAtari911$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' :
120559ccd446eSAtari911                ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' :
120569ccd446eSAtari911                '0 2px 4px rgba(0, 0, 0, 0.1)');
120579ccd446eSAtari911```
120589ccd446eSAtari911
120599ccd446eSAtari911**Result**:
120609ccd446eSAtari911- **Matrix**: Green glow around sections ✓
120619ccd446eSAtari911- **Purple**: Purple glow around sections ✓
120629ccd446eSAtari911- **Professional**: Subtle grey shadow (no glow) ✓
120639ccd446eSAtari911
120649ccd446eSAtari911### Description Color Fix
120659ccd446eSAtari911
120669ccd446eSAtari911**Problem**: Description text always green in clicked day panel
120679ccd446eSAtari911
120689ccd446eSAtari911**Before**:
120699ccd446eSAtari911```javascript
120709ccd446eSAtari911color: #00aa00; // Always green
120719ccd446eSAtari911```
120729ccd446eSAtari911
120739ccd446eSAtari911**After**:
120749ccd446eSAtari911```javascript
120759ccd446eSAtari911color: themeColors.text_dim; // Theme dim color
120769ccd446eSAtari911```
120779ccd446eSAtari911
120789ccd446eSAtari911**Result**:
120799ccd446eSAtari911- **Matrix**: Dim green (#00aa00) ✓
120809ccd446eSAtari911- **Purple**: Dim purple (#8e7ab8) ✓
120819ccd446eSAtari911- **Professional**: Grey (#7f8c8d) ✓
120829ccd446eSAtari911
120839ccd446eSAtari911### Now 100% Theme Consistent
120849ccd446eSAtari911
120859ccd446eSAtari911Every single visual element respects theme:
120869ccd446eSAtari911- ✅ Sidebar background & border
120879ccd446eSAtari911- ✅ Header colors & shadows
120889ccd446eSAtari911- ✅ Week grid & cells
120899ccd446eSAtari911- ✅ Add Event button
120909ccd446eSAtari911- ✅ Section borders & **shadows** ← Fixed!
120919ccd446eSAtari911- ✅ Event titles & times
120929ccd446eSAtari911- ✅ Event **descriptions** ← Fixed!
120939ccd446eSAtari911- ✅ Clicked day panel
120949ccd446eSAtari911- ✅ Event bars & glows
120959ccd446eSAtari911
120969ccd446eSAtari911**Absolute perfection across all three themes!** ��✨
120979ccd446eSAtari911
120989ccd446eSAtari911## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND
120999ccd446eSAtari911
121009ccd446eSAtari911### �� Theme Improvements
121019ccd446eSAtari911- **Fixed:** Clicked day panel now uses correct theme colors
121029ccd446eSAtari911- **Changed:** Professional Blue background now light grey (not white)
121039ccd446eSAtari911- **Added:** Theme colors passed to JavaScript for dynamic rendering
121049ccd446eSAtari911
121059ccd446eSAtari911### Clicked Day Panel Theming
121069ccd446eSAtari911
121079ccd446eSAtari911**Before**: Always blue regardless of theme
121089ccd446eSAtari911```javascript
121099ccd446eSAtari911// Hardcoded blue:
121109ccd446eSAtari911color:#00cc07;  // Always green
121119ccd446eSAtari911background:#3498db;  // Always blue
121129ccd446eSAtari911```
121139ccd446eSAtari911
121149ccd446eSAtari911**After**: Theme-aware colors
121159ccd446eSAtari911```php
121169ccd446eSAtari911// PHP passes theme to JavaScript:
121179ccd446eSAtari911window.themeColors_XXX = {
121189ccd446eSAtari911    text_primary: '#00cc07' or '#b19cd9' or '#2c3e50',
121199ccd446eSAtari911    text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2',
121209ccd446eSAtari911    text_shadow: '0 0 3px ...' or '',
121219ccd446eSAtari911    event_bg: 'rgba(...)',
121229ccd446eSAtari911    border_color: 'rgba(...)',
121239ccd446eSAtari911    bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)'
121249ccd446eSAtari911};
121259ccd446eSAtari911
121269ccd446eSAtari911// JavaScript uses theme colors:
121279ccd446eSAtari911color: themeColors.text_primary;
121289ccd446eSAtari911background: themeColors.event_bg;
121299ccd446eSAtari911```
121309ccd446eSAtari911
121319ccd446eSAtari911**Result**:
121329ccd446eSAtari911- Matrix: Green panel with green glow ✓
121339ccd446eSAtari911- Purple: Purple panel with purple glow ✓
121349ccd446eSAtari911- Professional: Blue panel, no glow, clean ✓
121359ccd446eSAtari911
121369ccd446eSAtari911### Professional Theme Background Change
121379ccd446eSAtari911
121389ccd446eSAtari911**Before**: Almost white (#f5f7fa, #ffffff)
121399ccd446eSAtari911```php
121409ccd446eSAtari911'bg' => '#f5f7fa',           // Very light
121419ccd446eSAtari911'cell_bg' => '#ffffff',      // Pure white
121429ccd446eSAtari911```
121439ccd446eSAtari911
121449ccd446eSAtari911**After**: Light grey tones
121459ccd446eSAtari911```php
121469ccd446eSAtari911'bg' => '#e8ecf1',           // Soft grey-blue
121479ccd446eSAtari911'cell_bg' => '#f5f7fa',      // Light grey
121489ccd446eSAtari911'grid_bg' => '#d5dbe3',      // Medium grey
121499ccd446eSAtari911'cell_today_bg' => '#dce8f7' // Highlighted grey-blue
121509ccd446eSAtari911```
121519ccd446eSAtari911
121529ccd446eSAtari911**Visual Impact**:
121539ccd446eSAtari911- Sidebar: Light grey-blue background (#e8ecf1)
121549ccd446eSAtari911- Week cells: Lighter grey (#f5f7fa)
121559ccd446eSAtari911- Today cell: Highlighted blue-grey (#dce8f7)
121569ccd446eSAtari911- More depth and contrast ✓
121579ccd446eSAtari911- Professional appearance ✓
121589ccd446eSAtari911
121599ccd446eSAtari911### All Theme Elements Now Consistent
121609ccd446eSAtari911
121619ccd446eSAtari911**Matrix (Green)**:
121629ccd446eSAtari911- Sidebar: Dark (#242424)
121639ccd446eSAtari911- Clicked panel: Dark with green
121649ccd446eSAtari911- Text: Green with glow
121659ccd446eSAtari911
121669ccd446eSAtari911**Purple Dream**:
121679ccd446eSAtari911- Sidebar: Dark purple (#2a2030)
121689ccd446eSAtari911- Clicked panel: Dark with purple
121699ccd446eSAtari911- Text: Purple with glow
121709ccd446eSAtari911
121719ccd446eSAtari911**Professional Blue**:
121729ccd446eSAtari911- Sidebar: Light grey (#e8ecf1)
121739ccd446eSAtari911- Clicked panel: Light with blue
121749ccd446eSAtari911- Text: Dark grey, no glow
121759ccd446eSAtari911
121769ccd446eSAtari911**Perfect theme consistency everywhere!** ��
121779ccd446eSAtari911
121789ccd446eSAtari911## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING
121799ccd446eSAtari911
121809ccd446eSAtari911### �� Critical Fixes
121819ccd446eSAtari911- **Fixed:** Tomorrow events not loaded when outside current week
121829ccd446eSAtari911- **Fixed:** `&amp;` showing instead of `&` (double HTML encoding)
121839ccd446eSAtari911
121849ccd446eSAtari911### Issue 1: Tomorrow Not Loading
121859ccd446eSAtari911
121869ccd446eSAtari911**Problem**: Sidebar only loaded events for current week
121879ccd446eSAtari911- Today (Saturday): Week ends today
121889ccd446eSAtari911- Tomorrow (Sunday): Start of NEXT week
121899ccd446eSAtari911- Tomorrow events never loaded from data files!
121909ccd446eSAtari911
121919ccd446eSAtari911**Before**:
121929ccd446eSAtari911```php
121939ccd446eSAtari911// Only load current week
121949ccd446eSAtari911$end = new DateTime($weekEnd);
121959ccd446eSAtari911$end->modify('+1 day');
121969ccd446eSAtari911$period = new DatePeriod($start, $interval, $end);
121979ccd446eSAtari911// If tomorrow > weekEnd, it's not in period!
121989ccd446eSAtari911```
121999ccd446eSAtari911
122009ccd446eSAtari911**After**:
122019ccd446eSAtari911```php
122029ccd446eSAtari911// Check if tomorrow is outside week
122039ccd446eSAtari911$tomorrowDate = date('Y-m-d', strtotime('+1 day'));
122049ccd446eSAtari911if ($tomorrowDate > $weekEnd) {
122059ccd446eSAtari911    // Extend to include tomorrow
122069ccd446eSAtari911    $end = new DateTime($tomorrowDate);
122079ccd446eSAtari911}
122089ccd446eSAtari911$end->modify('+1 day');
122099ccd446eSAtari911$period = new DatePeriod($start, $interval, $end);
122109ccd446eSAtari911```
122119ccd446eSAtari911
122129ccd446eSAtari911**Result**: Tomorrow events now loaded even at week boundary! ✓
122139ccd446eSAtari911
122149ccd446eSAtari911### Issue 2: Double HTML Encoding
122159ccd446eSAtari911
122169ccd446eSAtari911**Problem**: `&` characters showing as `&amp;`
122179ccd446eSAtari911
122189ccd446eSAtari911**Cause**: Double encoding on line 2625 and 2681
122199ccd446eSAtari911```php
122209ccd446eSAtari911// Line 2625:
122219ccd446eSAtari911$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee &amp; Tea"
122229ccd446eSAtari911
122239ccd446eSAtari911// Line 2681:
122249ccd446eSAtari911$html .= htmlspecialchars($title); // "Coffee &amp; Tea" → "Coffee &amp;amp; Tea" ❌
122259ccd446eSAtari911```
122269ccd446eSAtari911
122279ccd446eSAtari911**Fixed**:
122289ccd446eSAtari911```php
122299ccd446eSAtari911// Line 2625:
122309ccd446eSAtari911$title = htmlspecialchars($event['title']); // Encode once
122319ccd446eSAtari911
122329ccd446eSAtari911// Line 2681:
122339ccd446eSAtari911$html .= $title; // Use already-encoded value ✓
122349ccd446eSAtari911```
122359ccd446eSAtari911
122369ccd446eSAtari911**Result**: `&` displays correctly! ✓
122379ccd446eSAtari911
122389ccd446eSAtari911### Both Fixes Critical
122399ccd446eSAtari911
122409ccd446eSAtari911These were **two separate bugs**:
122419ccd446eSAtari9111. **Loading bug**: Tomorrow events not read from files
122429ccd446eSAtari9112. **Display bug**: Double-encoding text
122439ccd446eSAtari911
122449ccd446eSAtari911Both needed fixing for Tomorrow section to work properly!
122459ccd446eSAtari911
122469ccd446eSAtari911## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY
122479ccd446eSAtari911
122489ccd446eSAtari911### �� Critical Fix
122499ccd446eSAtari911- **Fixed:** Tomorrow section missing when tomorrow is outside current week
122509ccd446eSAtari911- **Fixed:** Today section now always shows regardless of week boundaries
122519ccd446eSAtari911- **Changed:** Today/Tomorrow processed BEFORE week boundary checks
122529ccd446eSAtari911
122539ccd446eSAtari911### The Problem
122549ccd446eSAtari911
122559ccd446eSAtari911**Scenario**: Today is Saturday (last day of week)
122569ccd446eSAtari911- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today
122579ccd446eSAtari911- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week**
122589ccd446eSAtari911
122599ccd446eSAtari911**BROKEN Logic** (v4.2.2):
122609ccd446eSAtari911```php
122619ccd446eSAtari911foreach ($events as $dateKey => $dayEvents) {
122629ccd446eSAtari911    if ($dateKey < $weekStart) continue; // Skip old events
122639ccd446eSAtari911
122649ccd446eSAtari911    // ...week processing...
122659ccd446eSAtari911
122669ccd446eSAtari911    if ($dateKey === $tomorrowStr) {  // ← Never reached!
122679ccd446eSAtari911        $tomorrowEvents[] = $event;   //   Tomorrow > weekEnd
122689ccd446eSAtari911    }
122699ccd446eSAtari911}
122709ccd446eSAtari911```
122719ccd446eSAtari911
122729ccd446eSAtari911**Result**: Tomorrow events never added because loop skipped them! ❌
122739ccd446eSAtari911
122749ccd446eSAtari911### The Fix
122759ccd446eSAtari911
122769ccd446eSAtari911**Process Today/Tomorrow FIRST**:
122779ccd446eSAtari911```php
122789ccd446eSAtari911foreach ($events as $dateKey => $dayEvents) {
122799ccd446eSAtari911    $eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
122809ccd446eSAtari911
122819ccd446eSAtari911    foreach ($eventsWithConflicts as $event) {
122829ccd446eSAtari911        // ALWAYS process Today and Tomorrow first!
122839ccd446eSAtari911        if ($dateKey === $todayStr) {
122849ccd446eSAtari911            $todayEvents[] = $event; // ✓ Always shows
122859ccd446eSAtari911        }
122869ccd446eSAtari911        if ($dateKey === $tomorrowStr) {
122879ccd446eSAtari911            $tomorrowEvents[] = $event; // ✓ Always shows
122889ccd446eSAtari911        }
122899ccd446eSAtari911
122909ccd446eSAtari911        // THEN check week boundaries for grid
122919ccd446eSAtari911        if ($dateKey >= $weekStart && $dateKey <= $weekEnd) {
122929ccd446eSAtari911            $weekEvents[$dateKey][] = $event;
122939ccd446eSAtari911        }
122949ccd446eSAtari911
122959ccd446eSAtari911        // Important events still week-only
122969ccd446eSAtari911        if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
122979ccd446eSAtari911            $importantEvents[] = $event;
122989ccd446eSAtari911        }
122999ccd446eSAtari911    }
123009ccd446eSAtari911}
123019ccd446eSAtari911```
123029ccd446eSAtari911
123039ccd446eSAtari911### What Changed
123049ccd446eSAtari911
123059ccd446eSAtari911**Before**:
123069ccd446eSAtari9111. Skip events < weekStart ❌
123079ccd446eSAtari9112. Process week grid
123089ccd446eSAtari9113. Try to add Today/Tomorrow ← **Failed if outside week**
123099ccd446eSAtari9114. Add Important events
123109ccd446eSAtari911
123119ccd446eSAtari911**After**:
123129ccd446eSAtari9111. **Always add Today events** ✓
123139ccd446eSAtari9112. **Always add Tomorrow events** ✓
123149ccd446eSAtari9113. Add to week grid if in range
123159ccd446eSAtari9114. Add Important events if in range
123169ccd446eSAtari911
123179ccd446eSAtari911**Result**:
123189ccd446eSAtari911- Today section: ✓ Always shows
123199ccd446eSAtari911- Tomorrow section: ✓ Always shows (even at week boundary!)
123209ccd446eSAtari911- Week grid: ✓ Only current week
123219ccd446eSAtari911- Important: ✓ Only current week
123229ccd446eSAtari911
123239ccd446eSAtari911### Edge Cases Fixed
123249ccd446eSAtari911
123259ccd446eSAtari911**Saturday → Sunday transition**:
123269ccd446eSAtari911- Today (Sat): Shows in Today section ✓
123279ccd446eSAtari911- Tomorrow (Sun): Shows in Tomorrow section ✓
123289ccd446eSAtari911- Week grid: Only shows Sat (today) ✓
123299ccd446eSAtari911
123309ccd446eSAtari911**Sunday → Monday transition**:
123319ccd446eSAtari911- Today (Sun): Shows in Today section ✓
123329ccd446eSAtari911- Tomorrow (Mon): Shows in Tomorrow section ✓
123339ccd446eSAtari911- Week grid: Shows both Sun and Mon ✓
123349ccd446eSAtari911
123359ccd446eSAtari911**Perfect! Tomorrow section now always works!** ��
123369ccd446eSAtari911
123379ccd446eSAtari911## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY!
123389ccd446eSAtari911
123399ccd446eSAtari911### �� Corrected Week Options
123409ccd446eSAtari911- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!)
123419ccd446eSAtari911- **Changed:** Default is **Sunday** (US/Canada standard)
123429ccd446eSAtari911- **Fixed:** Day names array for Sunday start: S M T W T F S
123439ccd446eSAtari911
123449ccd446eSAtari911### �� Correct Week Start Options
123459ccd446eSAtari911
123469ccd446eSAtari911**Sunday Start** (Default):
123479ccd446eSAtari911- Grid shows: **S M T W T F S**
123489ccd446eSAtari911- Week: Sunday → Saturday
123499ccd446eSAtari911- US/Canada standard
123509ccd446eSAtari911- Most common worldwide
123519ccd446eSAtari911
123529ccd446eSAtari911**Monday Start**:
123539ccd446eSAtari911- Grid shows: **M T W T F S S**
123549ccd446eSAtari911- Week: Monday → Sunday
123559ccd446eSAtari911- ISO 8601 standard
123569ccd446eSAtari911- Common in Europe
123579ccd446eSAtari911
123589ccd446eSAtari911### Technical Changes
123599ccd446eSAtari911
123609ccd446eSAtari911**All References Updated**:
123619ccd446eSAtari911```php
123629ccd446eSAtari911// Changed from 'saturday' to 'sunday' in:
123639ccd446eSAtari911- Admin validation
123649ccd446eSAtari911- Week calculation logic
123659ccd446eSAtari911- Day names array
123669ccd446eSAtari911- Default value
123679ccd446eSAtari911- Comments
123689ccd446eSAtari911```
123699ccd446eSAtari911
123709ccd446eSAtari911**Sunday Calculation** (when today is Saturday):
123719ccd446eSAtari911```php
123729ccd446eSAtari911$today = date('w'); // 0=Sun, 6=Sat
123739ccd446eSAtari911if ($today == 0) {
123749ccd446eSAtari911    $weekStart = date('Y-m-d'); // Today!
123759ccd446eSAtari911} else {
123769ccd446eSAtari911    // Go back $today days to last Sunday
123779ccd446eSAtari911    $weekStart = date('Y-m-d', strtotime('-' . $today . ' days'));
123789ccd446eSAtari911}
123799ccd446eSAtari911```
123809ccd446eSAtari911
123819ccd446eSAtari911**Examples**:
123829ccd446eSAtari911- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7
123839ccd446eSAtari911- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14
123849ccd446eSAtari911
123859ccd446eSAtari911**Sorry for the confusion - it's Sunday not Saturday!** ��
123869ccd446eSAtari911
123879ccd446eSAtari911## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY
123889ccd446eSAtari911
123899ccd446eSAtari911### �� Critical Fix
123909ccd446eSAtari911- **Fixed:** Week calculation broken when today is Saturday
123919ccd446eSAtari911- **Fixed:** Events not showing in Today/Important sections
123929ccd446eSAtari911- **Fixed:** Week grid event bars missing
123939ccd446eSAtari911- **Changed:** Default week start is Saturday (matches main calendar)
123949ccd446eSAtari911
123959ccd446eSAtari911### Technical Details
123969ccd446eSAtari911
123979ccd446eSAtari911**The Bug**:
123989ccd446eSAtari911```php
123999ccd446eSAtari911// BROKEN (v4.2.0):
124009ccd446eSAtari911$weekStart = date('Y-m-d', strtotime('saturday this week'));
124019ccd446eSAtari911// When TODAY is Saturday, this is ambiguous and fails!
124029ccd446eSAtari911
124039ccd446eSAtari911// FIXED (v4.2.1):
124049ccd446eSAtari911$today = date('w'); // 0 (Sun) to 6 (Sat)
124059ccd446eSAtari911if ($today == 6) {
124069ccd446eSAtari911    $weekStart = date('Y-m-d'); // Today!
124079ccd446eSAtari911} else {
124089ccd446eSAtari911    $daysBack = ($today == 0) ? 1 : ($today + 1);
124099ccd446eSAtari911    $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days'));
124109ccd446eSAtari911}
124119ccd446eSAtari911$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days'));
124129ccd446eSAtari911```
124139ccd446eSAtari911
124149ccd446eSAtari911**Why It Failed**:
124159ccd446eSAtari911- `strtotime('saturday this week')` is ambiguous when run ON a Saturday
124169ccd446eSAtari911- PHP may interpret it as "next Saturday" or fail
124179ccd446eSAtari911- Result: Week range was wrong, events filtered out
124189ccd446eSAtari911
124199ccd446eSAtari911**The Fix**:
124209ccd446eSAtari911- Explicit calculation using day-of-week math
124219ccd446eSAtari911- Saturday (day 6): weekStart = today
124229ccd446eSAtari911- Sunday (day 0): weekStart = yesterday
124239ccd446eSAtari911- Monday-Friday: calculate days back to last Saturday
124249ccd446eSAtari911
124259ccd446eSAtari911**Result**: Works reliably every day of the week!
124269ccd446eSAtari911
124279ccd446eSAtari911**Default Changed**: Saturday start (was Monday in 4.2.0)
124289ccd446eSAtari911- Matches main calendar behavior
124299ccd446eSAtari911- Users can still switch to Monday in settings
124309ccd446eSAtari911
124319ccd446eSAtari911## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR
124329ccd446eSAtari911
124339ccd446eSAtari911### ✨ New Feature
124349ccd446eSAtari911- **Added:** Week start day selector in Themes tab
124359ccd446eSAtari911- **Added:** Choose between Monday (ISO standard) or Saturday week start
124369ccd446eSAtari911- **Added:** Week grid and all events now respect the selected start day
124379ccd446eSAtari911- **Changed:** Themes tab renamed to "Sidebar Widget Settings"
124389ccd446eSAtari911
124399ccd446eSAtari911### �� Week Start Options
124409ccd446eSAtari911
124419ccd446eSAtari911**Monday Start** (Default):
124429ccd446eSAtari911- Grid shows: M T W T F S S
124439ccd446eSAtari911- Week runs: Monday → Sunday
124449ccd446eSAtari911- ISO 8601 standard
124459ccd446eSAtari911- Common in Europe, most of world
124469ccd446eSAtari911
124479ccd446eSAtari911**Saturday Start**:
124489ccd446eSAtari911- Grid shows: S S M T W T F
124499ccd446eSAtari911- Week runs: Saturday → Friday
124509ccd446eSAtari911- Common in Middle East
124519ccd446eSAtari911- Sabbath-observant communities
124529ccd446eSAtari911
124539ccd446eSAtari911### Technical Details
124549ccd446eSAtari911
124559ccd446eSAtari911**Configuration**:
124569ccd446eSAtari911```php
124579ccd446eSAtari911// Saved in: data/meta/calendar_week_start.txt
124589ccd446eSAtari911// Values: 'monday' or 'saturday'
124599ccd446eSAtari911
124609ccd446eSAtari911// Week calculation:
124619ccd446eSAtari911if ($weekStartDay === 'saturday') {
124629ccd446eSAtari911    $weekStart = date('Y-m-d', strtotime('saturday this week'));
124639ccd446eSAtari911    $weekEnd = date('Y-m-d', strtotime('friday next week'));
124649ccd446eSAtari911} else {
124659ccd446eSAtari911    $weekStart = date('Y-m-d', strtotime('monday this week'));
124669ccd446eSAtari911    $weekEnd = date('Y-m-d', strtotime('sunday this week'));
124679ccd446eSAtari911}
124689ccd446eSAtari911```
124699ccd446eSAtari911
124709ccd446eSAtari911**Day Names Array**:
124719ccd446eSAtari911```php
124729ccd446eSAtari911// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S']
124739ccd446eSAtari911// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F']
124749ccd446eSAtari911```
124759ccd446eSAtari911
124769ccd446eSAtari911**What Changes**:
124779ccd446eSAtari911- Week grid day letters
124789ccd446eSAtari911- Week grid date sequence
124799ccd446eSAtari911- Today/Tomorrow/Important event date ranges
124809ccd446eSAtari911- Week event grouping
124819ccd446eSAtari911
124829ccd446eSAtari911**What Stays Same**:
124839ccd446eSAtari911- All themes still work
124849ccd446eSAtari911- Event data unchanged
124859ccd446eSAtari911- Main calendar unaffected
124869ccd446eSAtari911
124879ccd446eSAtari911### How to Change:
124889ccd446eSAtari911
124899ccd446eSAtari9111. Admin → Calendar → �� Themes tab
124909ccd446eSAtari9112. Under "Week Start Day" section
124919ccd446eSAtari9113. Select Monday or Saturday
124929ccd446eSAtari9114. Click "Save Settings"
124939ccd446eSAtari9115. Refresh sidebar to see changes
124949ccd446eSAtari911
124959ccd446eSAtari911**Perfect for international users or religious observances!** ��
124969ccd446eSAtari911
124979ccd446eSAtari911## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS
124989ccd446eSAtari911
124999ccd446eSAtari911### ��️ Calendar Improvements
125009ccd446eSAtari911- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar)
125019ccd446eSAtari911- **Changed:** Event section backgrounds much lighter (almost white)
125029ccd446eSAtari911- **Changed:** Individual event backgrounds lighter and more readable
125039ccd446eSAtari911- **Changed:** Event borders now theme-colored
125049ccd446eSAtari911
125059ccd446eSAtari911### Technical Details
125069ccd446eSAtari911
125079ccd446eSAtari911**Week Start Change**:
125089ccd446eSAtari911```php
125099ccd446eSAtari911// Before:
125109ccd446eSAtari911$weekStart = date('Y-m-d', strtotime('monday this week'));
125119ccd446eSAtari911$weekEnd = date('Y-m-d', strtotime('sunday this week'));
125129ccd446eSAtari911$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
125139ccd446eSAtari911
125149ccd446eSAtari911// After:
125159ccd446eSAtari911$weekStart = date('Y-m-d', strtotime('sunday this week'));
125169ccd446eSAtari911$weekEnd = date('Y-m-d', strtotime('saturday this week'));
125179ccd446eSAtari911$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
125189ccd446eSAtari911```
125199ccd446eSAtari911
125209ccd446eSAtari911**Background Colors**:
125219ccd446eSAtari911```php
125229ccd446eSAtari911// Section backgrounds (Today, Tomorrow, Important):
125239ccd446eSAtari911Matrix: rgba(255, 255, 255, 0.05)    // Very light overlay
125249ccd446eSAtari911Purple: rgba(255, 255, 255, 0.08)    // Slightly lighter
125259ccd446eSAtari911Professional: rgba(255, 255, 255, 0.95)  // Almost white!
125269ccd446eSAtari911
125279ccd446eSAtari911// Individual event backgrounds:
125289ccd446eSAtari911Matrix: rgba(255, 255, 255, 0.03)    // Subtle
125299ccd446eSAtari911Purple: rgba(255, 255, 255, 0.05)    // Light
125309ccd446eSAtari911Professional: rgba(255, 255, 255, 0.5)   // Semi-transparent white
125319ccd446eSAtari911```
125329ccd446eSAtari911
125339ccd446eSAtari911**Event Borders**:
125349ccd446eSAtari911```php
125359ccd446eSAtari911Matrix: rgba(0, 204, 7, 0.2)         // Green
125369ccd446eSAtari911Purple: rgba(155, 89, 182, 0.2)      // Purple
125379ccd446eSAtari911Professional: rgba(74, 144, 226, 0.2) // Blue
125389ccd446eSAtari911```
125399ccd446eSAtari911
125409ccd446eSAtari911### Visual Result:
125419ccd446eSAtari911
125429ccd446eSAtari911**Before**: Dark backgrounds made text hard to read
125439ccd446eSAtari911**After**: Light backgrounds make events pop and text very readable
125449ccd446eSAtari911
125459ccd446eSAtari911**Week Grid**:
125469ccd446eSAtari911```
125479ccd446eSAtari911Before: [M][T][W][T][F][S][S]
125489ccd446eSAtari911After:  [S][M][T][W][T][F][S]  ← Now matches main calendar!
125499ccd446eSAtari911```
125509ccd446eSAtari911
125519ccd446eSAtari911## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS
125529ccd446eSAtari911
125539ccd446eSAtari911### �� Final Theme Polish
125549ccd446eSAtari911- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors
125559ccd446eSAtari911- **Fixed:** Event times now use theme bright color
125569ccd446eSAtari911- **Fixed:** Event dates use theme dim color
125579ccd446eSAtari911- **Fixed:** Task checkboxes use theme bright color
125589ccd446eSAtari911- **Fixed:** Event color bars use theme-appropriate shadows
125599ccd446eSAtari911- **Fixed:** No text shadows on Professional theme
125609ccd446eSAtari911
125619ccd446eSAtari911### Technical Details
125629ccd446eSAtari911
125639ccd446eSAtari911**Event Text Colors**:
125649ccd446eSAtari911```php
125659ccd446eSAtari911// Matrix:
125669ccd446eSAtari911- Title: #00cc07 (green)
125679ccd446eSAtari911- Time: #00dd00 (bright green)
125689ccd446eSAtari911- Date: #00aa00 (dim green)
125699ccd446eSAtari911- Text shadow: 0 0 3px (glow)
125709ccd446eSAtari911
125719ccd446eSAtari911// Purple:
125729ccd446eSAtari911- Title: #b19cd9 (lavender)
125739ccd446eSAtari911- Time: #d4a5ff (bright purple)
125749ccd446eSAtari911- Date: #8e7ab8 (dim purple)
125759ccd446eSAtari911- Text shadow: 0 0 3px (glow)
125769ccd446eSAtari911
125779ccd446eSAtari911// Professional:
125789ccd446eSAtari911- Title: #2c3e50 (dark grey)
125799ccd446eSAtari911- Time: #4a90e2 (blue)
125809ccd446eSAtari911- Date: #7f8c8d (grey)
125819ccd446eSAtari911- Text shadow: none (clean)
125829ccd446eSAtari911```
125839ccd446eSAtari911
125849ccd446eSAtari911**Color Bar Shadows**:
125859ccd446eSAtari911```php
125869ccd446eSAtari911// Matrix & Purple: Glow effect
125879ccd446eSAtari911box-shadow: 0 0 3px [event-color];
125889ccd446eSAtari911
125899ccd446eSAtari911// Professional: Subtle shadow
125909ccd446eSAtari911box-shadow: 0 1px 2px rgba(0,0,0,0.2);
125919ccd446eSAtari911```
125929ccd446eSAtari911
125939ccd446eSAtari911### What's Now Fully Themed:
125949ccd446eSAtari911
125959ccd446eSAtari911✅ Sidebar background & border
125969ccd446eSAtari911✅ Header (clock box) background, border, text
125979ccd446eSAtari911✅ Week grid background, borders, cells
125989ccd446eSAtari911✅ Week grid day letters & numbers
125999ccd446eSAtari911✅ Week grid event bars & "+N more" text
126009ccd446eSAtari911✅ Add Event button background & text
126019ccd446eSAtari911Today/Tomorrow/Important event titles
126029ccd446eSAtari911✅ Event times
126039ccd446eSAtari911✅ Event dates (Important section)
126049ccd446eSAtari911✅ Task checkboxes
126059ccd446eSAtari911✅ Event color bars
126069ccd446eSAtari911✅ All text shadows (glow vs none)
126079ccd446eSAtari911
126089ccd446eSAtari911**Every single element now respects the theme!** ��
126099ccd446eSAtari911
126109ccd446eSAtari911## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION
126119ccd446eSAtari911
126129ccd446eSAtari911### �� Theme Improvements
126139ccd446eSAtari911- **Fixed:** Week calendar grid now uses theme colors (purple/blue)
126149ccd446eSAtari911- **Fixed:** Add Event button now uses theme colors
126159ccd446eSAtari911- **Fixed:** Clock box border now matches theme
126169ccd446eSAtari911- **Fixed:** All text shadows respect theme (no glow on professional)
126179ccd446eSAtari911- **Fixed:** Event bars use theme-appropriate shadows
126189ccd446eSAtari911
126199ccd446eSAtari911### Technical Details
126209ccd446eSAtari911
126219ccd446eSAtari911**Week Grid Theming**:
126229ccd446eSAtari911```php
126239ccd446eSAtari911// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders
126249ccd446eSAtari911// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders
126259ccd446eSAtari911// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders
126269ccd446eSAtari911```
126279ccd446eSAtari911
126289ccd446eSAtari911**Add Event Button**:
126299ccd446eSAtari911```php
126309ccd446eSAtari911// Matrix: Dark green (#006400) with bright green text
126319ccd446eSAtari911// Purple: Purple (#7d3c98) with lavender text
126329ccd446eSAtari911// Professional: Blue (#3498db) with white text
126339ccd446eSAtari911```
126349ccd446eSAtari911
126359ccd446eSAtari911**Text Shadows**:
126369ccd446eSAtari911```php
126379ccd446eSAtari911// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color)
126389ccd446eSAtari911// Professional: No glow (clean look)
126399ccd446eSAtari911```
126409ccd446eSAtari911
126419ccd446eSAtari911**CSS Overrides**:
126429ccd446eSAtari911```css
126439ccd446eSAtari911/* Purple theme */
126449ccd446eSAtari911.sidebar-purple .eventlist-today-header {
126459ccd446eSAtari911    border-color: #9b59b6;
126469ccd446eSAtari911    box-shadow: 0 0 8px rgba(155, 89, 182, 0.2);
126479ccd446eSAtari911}
126489ccd446eSAtari911
126499ccd446eSAtari911/* Professional theme */
126509ccd446eSAtari911.sidebar-professional .eventlist-today-header {
126519ccd446eSAtari911    border-color: #4a90e2;
126529ccd446eSAtari911    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
126539ccd446eSAtari911}
126549ccd446eSAtari911```
126559ccd446eSAtari911
126569ccd446eSAtari911### What Changed Per Theme:
126579ccd446eSAtari911
126589ccd446eSAtari911**Purple Dream**:
126599ccd446eSAtari911- Week grid: Purple borders and dark purple background
126609ccd446eSAtari911- Add Event: Purple button with lavender text
126619ccd446eSAtari911- Clock box: Purple border with purple glow
126629ccd446eSAtari911- Event bars: Purple glow instead of green
126639ccd446eSAtari911- All text: Purple/lavender shades
126649ccd446eSAtari911
126659ccd446eSAtari911**Professional Blue**:
126669ccd446eSAtari911- Week grid: Blue borders and light grey background
126679ccd446eSAtari911- Add Event: Blue button with white text
126689ccd446eSAtari911- Clock box: Blue border with subtle shadow (no glow)
126699ccd446eSAtari911- Event bars: Subtle shadows (no glow)
126709ccd446eSAtari911- All text: Dark grey and blue shades
126719ccd446eSAtari911
126729ccd446eSAtari911**Matrix Edition**: Unchanged (still perfect green theme!)
126739ccd446eSAtari911
126749ccd446eSAtari911## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING
126759ccd446eSAtari911
126769ccd446eSAtari911### ✨ New Features
126779ccd446eSAtari911- **Added:** �� Themes tab in admin for sidebar widget theming
126789ccd446eSAtari911- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey)
126799ccd446eSAtari911- **Added:** Theme selector with live previews
126809ccd446eSAtari911- **Added:** Theme persistence across page loads
126819ccd446eSAtari911
126829ccd446eSAtari911### �� Available Themes
126839ccd446eSAtari911
126849ccd446eSAtari911**Matrix Edition** (Default):
126859ccd446eSAtari911- Dark background (#242424)
126869ccd446eSAtari911- Green accents (#00cc07)
126879ccd446eSAtari911- Neon glow effects
126889ccd446eSAtari911- Original Matrix styling
126899ccd446eSAtari911
126909ccd446eSAtari911**Purple Dream**:
126919ccd446eSAtari911- Dark purple background (#2a2030)
126929ccd446eSAtari911- Purple/violet accents (#9b59b6)
126939ccd446eSAtari911- Elegant purple glow
126949ccd446eSAtari911- Rich purple color scheme
126959ccd446eSAtari911
126969ccd446eSAtari911**Professional Blue**:
126979ccd446eSAtari911- Light grey background (#f5f7fa)
126989ccd446eSAtari911- Blue accents (#4a90e2)
126999ccd446eSAtari911- Clean professional look
127009ccd446eSAtari911- Subtle shadows instead of glow
127019ccd446eSAtari911
127029ccd446eSAtari911### �� Bug Fix
127039ccd446eSAtari911- **Fixed:** Tooltips now go UP and to the LEFT (was going right)
127049ccd446eSAtari911- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px`
127059ccd446eSAtari911
127069ccd446eSAtari911### Technical Details
127079ccd446eSAtari911
127089ccd446eSAtari911**Theme System**:
127099ccd446eSAtari911```php
127109ccd446eSAtari911// Saved in: data/meta/calendar_theme.txt
127119ccd446eSAtari911// Applied dynamically in syntax.php
127129ccd446eSAtari911$theme = $this->getSidebarTheme();  // 'matrix', 'purple', or 'professional'
127139ccd446eSAtari911$styles = $this->getSidebarThemeStyles($theme);
127149ccd446eSAtari911
127159ccd446eSAtari911// Styles include:
127169ccd446eSAtari911- bg, border, shadow
127179ccd446eSAtari911- header_bg, header_border, header_shadow
127189ccd446eSAtari911- text_primary, text_bright, text_dim
127199ccd446eSAtari911- grid_bg, grid_border
127209ccd446eSAtari911- cell_bg, cell_today_bg
127219ccd446eSAtari911```
127229ccd446eSAtari911
127239ccd446eSAtari911**Theme Changes**:
127249ccd446eSAtari911- Header background gradient
127259ccd446eSAtari911- Border colors
127269ccd446eSAtari911- Text colors
127279ccd446eSAtari911- Shadow/glow effects
127289ccd446eSAtari911- Grid colors
127299ccd446eSAtari911
127309ccd446eSAtari911**How to Change**:
127319ccd446eSAtari9111. Admin → Calendar → �� Themes tab
127329ccd446eSAtari9112. Select desired theme
127339ccd446eSAtari9113. Click "Save Theme"
127349ccd446eSAtari9114. Refresh page to see changes
127359ccd446eSAtari911
127369ccd446eSAtari911### Notes
127379ccd446eSAtari911- Themes only affect sidebar widget appearance
127389ccd446eSAtari911- Main calendar view unchanged
127399ccd446eSAtari911- Theme setting stored in `data/meta/calendar_theme.txt`
127409ccd446eSAtari911- Safe to switch themes - no data affected
127419ccd446eSAtari911
127429ccd446eSAtari911## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING
127439ccd446eSAtari911
127449ccd446eSAtari911### �� Bug Fixes
127459ccd446eSAtari911- **Fixed:** Events now sort chronologically by time (was using string comparison)
127469ccd446eSAtari911- **Fixed:** Tooltip positioning using JavaScript like system tooltips
127479ccd446eSAtari911- **Fixed:** All-day events appear first, then events in time order
127489ccd446eSAtari911
127499ccd446eSAtari911### Technical Details
127509ccd446eSAtari911
127519ccd446eSAtari911**Event Sorting Fix**:
127529ccd446eSAtari911```php
127539ccd446eSAtari911// BROKEN (v4.0.9):
127549ccd446eSAtari911return strcmp($aTime, $bTime);
127559ccd446eSAtari911// String comparison: "10:00" < "8:00" because "1" < "8"
127569ccd446eSAtari911// Result: 10:00 AM shown BEFORE 8:00 AM ❌
127579ccd446eSAtari911
127589ccd446eSAtari911// FIXED (v4.1.0):
127599ccd446eSAtari911$aMinutes = $this->timeToMinutes($aTime);  // 8:00 = 480
127609ccd446eSAtari911$bMinutes = $this->timeToMinutes($bTime);  // 10:00 = 600
127619ccd446eSAtari911return $aMinutes - $bMinutes;
127629ccd446eSAtari911// Result: 8:00 AM shown BEFORE 10:00 AM ✓
127639ccd446eSAtari911```
127649ccd446eSAtari911
127659ccd446eSAtari911**Example Before Fix**:
127669ccd446eSAtari911```
127679ccd446eSAtari911�� Weekend Ticket Duty (all-day)
127689ccd446eSAtari9118:00 AM START TICKETS
127699ccd446eSAtari91110:00 AM Soul Winning    ← Wrong!
127709ccd446eSAtari9119:45 AM Coffee           ← Should be before 10:00 AM
127719ccd446eSAtari911```
127729ccd446eSAtari911
127739ccd446eSAtari911**Example After Fix**:
127749ccd446eSAtari911```
127759ccd446eSAtari911�� Weekend Ticket Duty (all-day)
127769ccd446eSAtari9118:00 AM START TICKETS
127779ccd446eSAtari9119:45 AM Coffee           ← Correct!
127789ccd446eSAtari91110:00 AM Soul Winning
127799ccd446eSAtari911```
127809ccd446eSAtari911
127819ccd446eSAtari911**Tooltip Positioning**:
127829ccd446eSAtari911- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()`
127839ccd446eSAtari911- Uses CSS custom properties `--tooltip-left` and `--tooltip-top`
127849ccd446eSAtari911- Positioned on `mouseenter` event
127859ccd446eSAtari911- Matches system tooltip implementation (no cutoff)
127869ccd446eSAtari911
127879ccd446eSAtari911**JavaScript Implementation**:
127889ccd446eSAtari911```javascript
127899ccd446eSAtari911element.addEventListener("mouseenter", function() {
127909ccd446eSAtari911    const rect = element.getBoundingClientRect();
127919ccd446eSAtari911    element.style.setProperty("--tooltip-left", (rect.right - 10) + "px");
127929ccd446eSAtari911    element.style.setProperty("--tooltip-top", (rect.top - 30) + "px");
127939ccd446eSAtari911});
127949ccd446eSAtari911```
127959ccd446eSAtari911
127969ccd446eSAtari911**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically!
127979ccd446eSAtari911
127989ccd446eSAtari911## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX
127999ccd446eSAtari911
128009ccd446eSAtari911### �� UI Improvements
128019ccd446eSAtari911- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge
128029ccd446eSAtari911- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar
128039ccd446eSAtari911- **Changed:** Main calendar conflict tooltip now much smaller (was too big)
128049ccd446eSAtari911
128059ccd446eSAtari911### Technical Details
128069ccd446eSAtari911
128079ccd446eSAtari911**Sidebar Overflow Fix**:
128089ccd446eSAtari911```php
128099ccd446eSAtari911// Before (line 2005):
128109ccd446eSAtari911style="...overflow:hidden..."  // ← Blocked tooltips!
128119ccd446eSAtari911
128129ccd446eSAtari911// After:
128139ccd446eSAtari911style="...overflow:visible..."  // ← Tooltips extend beyond!
128149ccd446eSAtari911```
128159ccd446eSAtari911
128169ccd446eSAtari911**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important`
128179ccd446eSAtari911
128189ccd446eSAtari911**Main Calendar Tooltip Size**:
128199ccd446eSAtari911```css
128209ccd446eSAtari911/* Before: */
128219ccd446eSAtari911.conflict-tooltip {
128229ccd446eSAtari911    border: 2px solid #ff9800;
128239ccd446eSAtari911    border-radius: 6px;
128249ccd446eSAtari911    padding: 8px 12px;
128259ccd446eSAtari911    font-size: 12px;
128269ccd446eSAtari911    min-width: 200px;
128279ccd446eSAtari911    max-width: 350px;
128289ccd446eSAtari911}
128299ccd446eSAtari911
128309ccd446eSAtari911/* After: */
128319ccd446eSAtari911.conflict-tooltip {
128329ccd446eSAtari911    border: 1px solid #ff9800;  /* Thinner */
128339ccd446eSAtari911    border-radius: 3px;          /* Smaller */
128349ccd446eSAtari911    padding: 4px 8px;            /* Less padding */
128359ccd446eSAtari911    font-size: 10px;             /* Smaller header */
128369ccd446eSAtari911    min-width: 120px;            /* Narrower */
128379ccd446eSAtari911    max-width: 200px;            /* Narrower */
128389ccd446eSAtari911}
128399ccd446eSAtari911
128409ccd446eSAtari911.conflict-tooltip-body {
128419ccd446eSAtari911    padding: 6px 8px;  /* Was 10px 12px */
128429ccd446eSAtari911    font-size: 9px;    /* Was 11px */
128439ccd446eSAtari911    line-height: 1.4;  /* Was 1.6 */
128449ccd446eSAtari911}
128459ccd446eSAtari911
128469ccd446eSAtari911.conflict-item {
128479ccd446eSAtari911    padding: 2px 0;  /* Was 4px */
128489ccd446eSAtari911    font-size: 9px;  /* Added smaller font */
128499ccd446eSAtari911}
128509ccd446eSAtari911```
128519ccd446eSAtari911
128529ccd446eSAtari911**Result**:
128539ccd446eSAtari911- Main calendar tooltip ~50% smaller
128549ccd446eSAtari911- Sidebar tooltips now extend beyond borders
128559ccd446eSAtari911- Both tooltips compact and readable
128569ccd446eSAtari911
128579ccd446eSAtari911## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP
128589ccd446eSAtari911
128599ccd446eSAtari911### �� Bug Fix
128609ccd446eSAtari911- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text)
128619ccd446eSAtari911- **Changed:** Using HTML entity `&#10;` for newlines instead of `\n`
128629ccd446eSAtari911
128639ccd446eSAtari911### Technical Details
128649ccd446eSAtari911
128659ccd446eSAtari911**The Problem**:
128669ccd446eSAtari911```php
128679ccd446eSAtari911// Before (v4.0.7):
128689ccd446eSAtari911$conflictTooltip = 'Conflicts with:\n';  // Literal \n showed in tooltip
128699ccd446eSAtari911
128709ccd446eSAtari911// Displayed as:
128719ccd446eSAtari911"Conflicts with:\n• Event 1\n• Event 2"  // ← Literal backslash-n
128729ccd446eSAtari911```
128739ccd446eSAtari911
128749ccd446eSAtari911**The Fix**:
128759ccd446eSAtari911```php
128769ccd446eSAtari911// After (v4.0.8):
128779ccd446eSAtari911$conflictTooltip = "Conflicts with:&#10;";  // HTML entity for newline
128789ccd446eSAtari911
128799ccd446eSAtari911// Displays as:
128809ccd446eSAtari911Conflicts with:
128819ccd446eSAtari911• Event 1
128829ccd446eSAtari911• Event 2
128839ccd446eSAtari911```
128849ccd446eSAtari911
128859ccd446eSAtari911**Why `&#10;` Works**:
128869ccd446eSAtari911- HTML entity for line feed character
128879ccd446eSAtari911- Works in data attributes
128889ccd446eSAtari911- CSS `white-space: pre-line` preserves the newlines
128899ccd446eSAtari911- Renders as actual line breaks in tooltip
128909ccd446eSAtari911
128919ccd446eSAtari911**Applied to**:
128929ccd446eSAtari911- PHP rendering (sidebar Today/Tomorrow/Important)
128939ccd446eSAtari911- JavaScript rendering (clicked day events)
128949ccd446eSAtari911
128959ccd446eSAtari911## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX
128969ccd446eSAtari911
128979ccd446eSAtari911### �� UI Improvements
128989ccd446eSAtari911- **Changed:** Tooltip size reduced significantly (much more compact)
128999ccd446eSAtari911- **Fixed:** Tooltip now overflows sidebar borders (not cut off)
129009ccd446eSAtari911- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px)
129019ccd446eSAtari911- **Changed:** Narrower width (120-200px vs 200-300px)
129029ccd446eSAtari911
129039ccd446eSAtari911### Technical Details
129049ccd446eSAtari911
129059ccd446eSAtari911**Tooltip Size Reduction**:
129069ccd446eSAtari911```css
129079ccd446eSAtari911/* Before (v4.0.6):
129089ccd446eSAtari911padding: 6px 10px;
129099ccd446eSAtari911font-size: 11px;
129109ccd446eSAtari911min-width: 200px;
129119ccd446eSAtari911max-width: 300px;
129129ccd446eSAtari911
129139ccd446eSAtari911/* After (v4.0.7): */
129149ccd446eSAtari911padding: 3px 6px;
129159ccd446eSAtari911font-size: 9px;
129169ccd446eSAtari911min-width: 120px;
129179ccd446eSAtari911max-width: 200px;
129189ccd446eSAtari911```
129199ccd446eSAtari911
129209ccd446eSAtari911**Overflow Fix**:
129219ccd446eSAtari911```css
129229ccd446eSAtari911/* Allow tooltip to extend beyond sidebar */
129239ccd446eSAtari911.sidebar-widget,
129249ccd446eSAtari911.sidebar-matrix {
129259ccd446eSAtari911    overflow: visible !important;
129269ccd446eSAtari911}
129279ccd446eSAtari911
129289ccd446eSAtari911/* Position tooltip outside */
129299ccd446eSAtari911[data-tooltip]:before {
129309ccd446eSAtari911    bottom: 120%;  /* Further above */
129319ccd446eSAtari911    right: -10px;  /* Can extend beyond edge */
129329ccd446eSAtari911    z-index: 10000; /* Always on top */
129339ccd446eSAtari911}
129349ccd446eSAtari911```
129359ccd446eSAtari911
129369ccd446eSAtari911**Visual Result**:
129379ccd446eSAtari911- Tooltip is ~40% smaller
129389ccd446eSAtari911- Extends beyond sidebar border if needed
129399ccd446eSAtari911- Still readable, just more compact
129409ccd446eSAtari911- Better for small screens
129419ccd446eSAtari911
129429ccd446eSAtari911## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING
129439ccd446eSAtari911
129449ccd446eSAtari911### �� Critical Fix
129459ccd446eSAtari911- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly
129469ccd446eSAtari911- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names
129479ccd446eSAtari911- **Fixed:** Events without end time now treated as zero-duration (not +1 hour)
129489ccd446eSAtari911- **Fixed:** Now matches what you see in main calendar view
129499ccd446eSAtari911
129509ccd446eSAtari911### ✨ UI Improvement
129519ccd446eSAtari911- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right)
129529ccd446eSAtari911- **Added:** Custom CSS tooltip with data-tooltip attribute
129539ccd446eSAtari911- **Improved:** Better tooltip positioning - doesn't overflow screen edges
129549ccd446eSAtari911
129559ccd446eSAtari911### Technical Details
129569ccd446eSAtari911
129579ccd446eSAtari911**The Problem - Field Name Mismatch**:
129589ccd446eSAtari911```php
129599ccd446eSAtari911// Main calendar (line 697):
129609ccd446eSAtari911$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase)
129619ccd446eSAtari911
129629ccd446eSAtari911// Sidebar (before fix):
129639ccd446eSAtari911$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case)
129649ccd446eSAtari911```
129659ccd446eSAtari911
129669ccd446eSAtari911**The Problem - Duration Logic**:
129679ccd446eSAtari911```php
129689ccd446eSAtari911// Main calendar (line 697):
129699ccd446eSAtari911$end1 = isset($evt1['endTime']) && !empty($evt1['endTime'])
129709ccd446eSAtari911    ? $evt1['endTime']
129719ccd446eSAtari911    : $evt1['time'];  // ← Uses START time (zero duration)
129729ccd446eSAtari911
129739ccd446eSAtari911// Sidebar (before fix):
129749ccd446eSAtari911$endTime = ... ? ... : $this->addHoursToTime($startTime, 1);  // ← Added 1 hour!
129759ccd446eSAtari911```
129769ccd446eSAtari911
129779ccd446eSAtari911**The Fix**:
129789ccd446eSAtari911```php
129799ccd446eSAtari911// Now checks BOTH field names:
129809ccd446eSAtari911if (isset($event['end_time']) && $event['end_time'] !== '') {
129819ccd446eSAtari911    $endTime = $event['end_time'];
129829ccd446eSAtari911} elseif (isset($event['endTime']) && $event['endTime'] !== '') {
129839ccd446eSAtari911    $endTime = $event['endTime'];
129849ccd446eSAtari911} else {
129859ccd446eSAtari911    $endTime = $startTime;  // ← Matches main calendar!
129869ccd446eSAtari911}
129879ccd446eSAtari911```
129889ccd446eSAtari911
129899ccd446eSAtari911**Tooltip Positioning**:
129909ccd446eSAtari911- Uses `data-tooltip` attribute instead of `title`
129919ccd446eSAtari911- CSS positions tooltip ABOVE badge (`bottom: 100%`)
129929ccd446eSAtari911- Aligns to RIGHT edge (`right: 0`)
129939ccd446eSAtari911- Arrow points down to badge
129949ccd446eSAtari911- Black background with white text
129959ccd446eSAtari911- Max width 300px
129969ccd446eSAtari911
129979ccd446eSAtari911### Example
129989ccd446eSAtari911
129999ccd446eSAtari911**6:00 PM Evening Service** (no end time):
130009ccd446eSAtari911- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌
130019ccd446eSAtari911- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar!
130029ccd446eSAtari911
130039ccd446eSAtari911**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**:
130049ccd446eSAtari911- Zero-duration events at 6:00 PM don't overlap with anything
130059ccd446eSAtari911- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict
130069ccd446eSAtari911
130079ccd446eSAtari911**Tooltip appears**:
130089ccd446eSAtari911```
130099ccd446eSAtari911        ┌────────────────────┐
130109ccd446eSAtari911        │ Conflicts with:    │
130119ccd446eSAtari911        │ • Super Bowl       │
130129ccd446eSAtari911        │   (3:30 PM-7:00 PM)│
130139ccd446eSAtari911        └─────────┬──────────┘
130149ccd446eSAtari911130159ccd446eSAtari911130169ccd446eSAtari911```
130179ccd446eSAtari911
130189ccd446eSAtari911## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING
130199ccd446eSAtari911
130209ccd446eSAtari911### �� Bug Fix
130219ccd446eSAtari911- **Fixed:** Events without end_time now properly get 1-hour default duration
130229ccd446eSAtari911- **Fixed:** Empty string end_time values now treated as missing (was causing issues)
130239ccd446eSAtari911- **Improved:** More robust checking for `end_time` field (checks both isset and not empty)
130249ccd446eSAtari911
130259ccd446eSAtari911### Technical Details
130269ccd446eSAtari911
130279ccd446eSAtari911**The Problem**:
130289ccd446eSAtari911```php
130299ccd446eSAtari911// Before (broken):
130309ccd446eSAtari911$endTime = isset($event['end_time']) ? $event['end_time'] : default;
130319ccd446eSAtari911
130329ccd446eSAtari911// If end_time exists but is empty string "":
130339ccd446eSAtari911isset($event['end_time']) = TRUE
130349ccd446eSAtari911$endTime = ""  // ← Empty string, not default!
130359ccd446eSAtari911```
130369ccd446eSAtari911
130379ccd446eSAtari911**The Fix**:
130389ccd446eSAtari911```php
130399ccd446eSAtari911// After (fixed):
130409ccd446eSAtari911$endTime = (isset($event['end_time']) && $event['end_time'] !== '')
130419ccd446eSAtari911    ? $event['end_time']
130429ccd446eSAtari911    : $this->addHoursToTime($startTime, 1);
130439ccd446eSAtari911
130449ccd446eSAtari911// Now empty string gets the default 1-hour duration
130459ccd446eSAtari911```
130469ccd446eSAtari911
130479ccd446eSAtari911**Why This Matters**:
130489ccd446eSAtari911Events 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.
130499ccd446eSAtari911
130509ccd446eSAtari911**Example**:
130519ccd446eSAtari911```
130529ccd446eSAtari911Super Bowl: 3:30 PM - 7:00 PM
130539ccd446eSAtari911Evening Service: 6:00 PM - ??? (should be 7:00 PM)
130549ccd446eSAtari911
130559ccd446eSAtari911If end_time = "" (empty string):
130569ccd446eSAtari911  Old code: Uses "" → conflict detection fails
130579ccd446eSAtari911  New code: Uses 7:00 PM → conflict detected ✓
130589ccd446eSAtari911```
130599ccd446eSAtari911
130609ccd446eSAtari911### Testing
130619ccd446eSAtari911If you're still not seeing the conflict on the 6:00 PM service:
130629ccd446eSAtari9111. Check if the event has `end_time` set in the JSON
130639ccd446eSAtari9112. Clear cache (Admin → Manage Events → Clear Cache)
130649ccd446eSAtari9113. The conflict should now appear
130659ccd446eSAtari911
130669ccd446eSAtari911## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS
130679ccd446eSAtari911
130689ccd446eSAtari911### ✨ Feature Added
130699ccd446eSAtari911- **Added:** Hover over ⚠ badge to see which events are conflicting
130709ccd446eSAtari911- **Added:** Tooltip shows conflicting event titles and times
130719ccd446eSAtari911- **Added:** Works in both sidebar sections and clicked day events
130729ccd446eSAtari911
130739ccd446eSAtari911### Technical Details
130749ccd446eSAtari911
130759ccd446eSAtari911**Conflict Tracking Enhanced**:
130769ccd446eSAtari911```php
130779ccd446eSAtari911// Now tracks WHICH events conflict:
130789ccd446eSAtari911$event['conflictingWith'] = [
130799ccd446eSAtari911    ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'],
130809ccd446eSAtari911    ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30']
130819ccd446eSAtari911];
130829ccd446eSAtari911```
130839ccd446eSAtari911
130849ccd446eSAtari911**Tooltip Format**:
130859ccd446eSAtari911```
130869ccd446eSAtari911Conflicts with:
130879ccd446eSAtari911• Meeting (10:00 AM-11:00 AM)
130889ccd446eSAtari911• Call (10:30 AM-11:30 PM)
130899ccd446eSAtari911```
130909ccd446eSAtari911
130919ccd446eSAtari911**Where It Works**:
130929ccd446eSAtari911- ✅ Today section (sidebar)
130939ccd446eSAtari911- ✅ Tomorrow section (sidebar)
130949ccd446eSAtari911- ✅ Important Events section (sidebar)
130959ccd446eSAtari911- ✅ Clicked day events (week grid)
130969ccd446eSAtari911
130979ccd446eSAtari911**Cursor**: Changes to `help` cursor on hover to indicate tooltip
130989ccd446eSAtari911
130999ccd446eSAtari911### Note on Multi-Day Events
131009ccd446eSAtari911The 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.
131019ccd446eSAtari911
131029ccd446eSAtari911## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC
131039ccd446eSAtari911
131049ccd446eSAtari911### �� Bug Fixes
131059ccd446eSAtari911- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections
131069ccd446eSAtari911- **Fixed:** Important Events now shows events even if they're today or tomorrow
131079ccd446eSAtari911- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular)
131089ccd446eSAtari911
131099ccd446eSAtari911### Technical Details
131109ccd446eSAtari911
131119ccd446eSAtari911**Conflict Badge Issue**:
131129ccd446eSAtari911```php
131139ccd446eSAtari911// BROKEN (line 2511):
131149ccd446eSAtari911$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']);
131159ccd446eSAtari911// ↑ Checking 'conflicts' (plural)
131169ccd446eSAtari911
131179ccd446eSAtari911// But detectTimeConflicts() sets:
131189ccd446eSAtari911$event['conflict'] = true/false;
131199ccd446eSAtari911// ↑ Setting 'conflict' (singular)
131209ccd446eSAtari911
131219ccd446eSAtari911// FIXED:
131229ccd446eSAtari911$hasConflict = isset($event['conflict']) && $event['conflict'];
131239ccd446eSAtari911```
131249ccd446eSAtari911
131259ccd446eSAtari911**Result**: Badge now shows for ALL conflicting events in sidebar sections
131269ccd446eSAtari911
131279ccd446eSAtari911**Important Events Logic Issue**:
131289ccd446eSAtari911```php
131299ccd446eSAtari911// BROKEN:
131309ccd446eSAtari911if ($dateKey === $todayStr) {
131319ccd446eSAtari911    $todayEvents[] = ...;
131329ccd446eSAtari911} elseif ($dateKey === $tomorrowStr) {
131339ccd446eSAtari911    $tomorrowEvents[] = ...;
131349ccd446eSAtari911} else {  // ← Only checked if NOT today/tomorrow!
131359ccd446eSAtari911    if ($isImportant) {
131369ccd446eSAtari911        $importantEvents[] = ...;
131379ccd446eSAtari911    }
131389ccd446eSAtari911}
131399ccd446eSAtari911
131409ccd446eSAtari911// FIXED:
131419ccd446eSAtari911if ($dateKey === $todayStr) {
131429ccd446eSAtari911    $todayEvents[] = ...;
131439ccd446eSAtari911}
131449ccd446eSAtari911if ($dateKey === $tomorrowStr) {
131459ccd446eSAtari911    $tomorrowEvents[] = ...;
131469ccd446eSAtari911}
131479ccd446eSAtari911// ↑ Changed to separate 'if' statements
131489ccd446eSAtari911if ($isImportant && $dateKey in this week) {
131499ccd446eSAtari911    $importantEvents[] = ...;  // ← Now includes today/tomorrow too!
131509ccd446eSAtari911}
131519ccd446eSAtari911```
131529ccd446eSAtari911
131539ccd446eSAtari911**Result**: Important namespace events now show in Important section even if they're today or tomorrow
131549ccd446eSAtari911
131559ccd446eSAtari911### Conflict Badge Display
131569ccd446eSAtari911- Simplified to just ⚠ icon (no count)
131579ccd446eSAtari911- Orange color (#ff9800)
131589ccd446eSAtari911- 10px font size
131599ccd446eSAtari911- Hover shows "Time conflict detected"
131609ccd446eSAtari911
131619ccd446eSAtari911## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY
131629ccd446eSAtari911
131639ccd446eSAtari911### �� Bug Fix
131649ccd446eSAtari911- **Fixed:** Important Events section now displays all events correctly
131659ccd446eSAtari911- **Fixed:** Single-event days now get conflict flag (was returning early without flag)
131669ccd446eSAtari911- **Fixed:** Conflict detection no longer causes events to disappear from Important section
131679ccd446eSAtari911
131689ccd446eSAtari911### Technical Details
131699ccd446eSAtari911
131709ccd446eSAtari911**The Problem**:
131719ccd446eSAtari911- `detectTimeConflicts()` returned early if only 1 event on a day
131729ccd446eSAtari911- Returned original array without adding 'conflict' field
131739ccd446eSAtari911- This inconsistency caused issues in event categorization
131749ccd446eSAtari911
131759ccd446eSAtari911**The Solution**:
131769ccd446eSAtari911```php
131779ccd446eSAtari911// Before (broken):
131789ccd446eSAtari911if (empty($dayEvents) || count($dayEvents) < 2) {
131799ccd446eSAtari911    return $dayEvents;  // No 'conflict' field added!
131809ccd446eSAtari911}
131819ccd446eSAtari911
131829ccd446eSAtari911// After (fixed):
131839ccd446eSAtari911if (count($dayEvents) === 1) {
131849ccd446eSAtari911    return [array_merge($dayEvents[0], ['conflict' => false])];  // Always add flag
131859ccd446eSAtari911}
131869ccd446eSAtari911```
131879ccd446eSAtari911
131889ccd446eSAtari911**Result**:
131899ccd446eSAtari911- All events now have 'conflict' field consistently
131909ccd446eSAtari911- Single events: conflict = false
131919ccd446eSAtari911- Multiple events: conflict = true/false based on overlap
131929ccd446eSAtari911- Important Events section displays correctly
131939ccd446eSAtari911
131949ccd446eSAtari911## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES
131959ccd446eSAtari911
131969ccd446eSAtari911### �� Bug Fixes
131979ccd446eSAtari911- **Fixed:** Conflict badge (⚠) now displays in clicked day events
131989ccd446eSAtari911- **Fixed:** Recurring events edit now updates time and end_time correctly
131999ccd446eSAtari911- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit
132009ccd446eSAtari911
132019ccd446eSAtari911### ✨ Features Added
132029ccd446eSAtari911- **Added:** Time conflict detection for overlapping events
132039ccd446eSAtari911- **Added:** detectTimeConflicts() function checks all events on same day
132049ccd446eSAtari911- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions
132059ccd446eSAtari911- **Added:** Events now have 'conflict' flag set automatically
132069ccd446eSAtari911
132079ccd446eSAtari911### �� UI Changes
132089ccd446eSAtari911- **Changed:** Admin tab order: �� Manage Events (first), �� Update Plugin, ⚙️ Outlook Sync
132099ccd446eSAtari911- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin")
132109ccd446eSAtari911- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars)
132119ccd446eSAtari911
132129ccd446eSAtari911### Technical Details
132139ccd446eSAtari911
132149ccd446eSAtari911**Conflict Detection**:
132159ccd446eSAtari911```php
132169ccd446eSAtari911// Automatically detects overlapping events on same day
132179ccd446eSAtari911// Sets 'conflict' flag to true if event overlaps with another
132189ccd446eSAtari911$eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
132199ccd446eSAtari911```
132209ccd446eSAtari911
132219ccd446eSAtari911**Logic**:
132229ccd446eSAtari911- All-day events never conflict (no time set)
132239ccd446eSAtari911- Timed events check for overlap with other timed events
132249ccd446eSAtari911- Overlap = start1 < end2 AND start2 < end1
132259ccd446eSAtari911- Default duration is 60 minutes if no end_time
132269ccd446eSAtari911
132279ccd446eSAtari911**Recurring Events Fix**:
132289ccd446eSAtari911- Old: Updated `$event['start']` and `$event['end']` (wrong fields)
132299ccd446eSAtari911- New: Updates `$event['time']` and `$event['end_time']` (correct fields)
132309ccd446eSAtari911- Now edits actually save and update the events
132319ccd446eSAtari911
132329ccd446eSAtari911**Week View Bars**:
132339ccd446eSAtari911- Shows 4 colored bars instead of 3
132349ccd446eSAtari911- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc.
132359ccd446eSAtari911
13236231d0edbSAtari911## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE ��
13237231d0edbSAtari911
13238231d0edbSAtari911**Major Release**: Complete Matrix-themed calendar plugin with advanced features!
13239231d0edbSAtari911
13240231d0edbSAtari911### �� Major Features
13241231d0edbSAtari911
13242231d0edbSAtari911#### Sidebar Widget
13243231d0edbSAtari911- **Week Grid**: Interactive 7-day calendar with click-to-view events
13244231d0edbSAtari911- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips
13245231d0edbSAtari911- **Live Clock**: Updates every second with date display
13246231d0edbSAtari911- **Real-time Weather**: Geolocation-based temperature with icon
13247231d0edbSAtari911- **Event Sections**: Today (orange), Tomorrow (green), Important (purple)
13248231d0edbSAtari911- **Add Event Button**: Dark green bar opens full event creation dialog
13249231d0edbSAtari911- **Matrix Theme**: Green glow effects throughout
13250231d0edbSAtari911
13251231d0edbSAtari911#### Event Management
13252231d0edbSAtari911- **Single Color Bars**: Clean 3px bars showing event's assigned color
13253231d0edbSAtari911- **All-Day Events First**: Then sorted chronologically by time
13254231d0edbSAtari911- **Conflict Detection**: Orange ⚠ badge on overlapping events
13255231d0edbSAtari911- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//)
13256231d0edbSAtari911- **HTML Rendering**: Pre-rendered for JavaScript display
13257231d0edbSAtari911- **Click-to-View**: Click week grid days to expand event details
13258231d0edbSAtari911
13259231d0edbSAtari911#### Admin Interface
13260231d0edbSAtari911- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button
13261231d0edbSAtari911- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings
13262231d0edbSAtari911- **Manage Events Tab**: Browse, edit, delete, move events across namespaces
13263231d0edbSAtari911
13264231d0edbSAtari911#### Outlook Sync
13265231d0edbSAtari911- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook
13266231d0edbSAtari911- **Category Mapping**: Map colors to Outlook categories
13267231d0edbSAtari911- **Conflict Resolution**: Time conflict detection
13268231d0edbSAtari911- **Import/Export Config**: Encrypted configuration files
13269231d0edbSAtari911
13270231d0edbSAtari911### �� Design
13271231d0edbSAtari911- **Matrix Theme**: Authentic green glow aesthetic
13272231d0edbSAtari911- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections
13273231d0edbSAtari911- **Color Scheme**:
13274231d0edbSAtari911  - Today: Orange #ff9800
13275231d0edbSAtari911  - Tomorrow: Green #4caf50
13276231d0edbSAtari911  - Important: Purple #9b59b6
13277231d0edbSAtari911  - Add Event: Dark green #006400
13278231d0edbSAtari911  - System bars: Green/Purple/Orange
13279231d0edbSAtari911
13280231d0edbSAtari911### �� Technical Highlights
13281231d0edbSAtari911- **Zero-margin Design**: Perfect flush alignment throughout
13282231d0edbSAtari911- **Flexbox Layout**: Modern, responsive structure
13283231d0edbSAtari911- **AJAX Operations**: No page reloads needed
13284231d0edbSAtari911- **Smart Sorting**: All-day events first, then chronological
13285231d0edbSAtari911- **Tooltip System**: Detailed stats on hover (working correctly)
13286231d0edbSAtari911- **Event Dialog**: Full form with drag support
13287231d0edbSAtari911- **Cache Management**: One-click cache clearing
13288231d0edbSAtari911
13289231d0edbSAtari911### �� Breaking Changes from v3.x
13290231d0edbSAtari911- Removed dual color bars (now single event color bar only)
13291231d0edbSAtari911- Add Event button moved to between header and week grid
13292231d0edbSAtari911- All-day events now appear FIRST (not last)
13293231d0edbSAtari911- Update Plugin tab is now the default admin tab
13294231d0edbSAtari911
13295231d0edbSAtari911### �� Bug Fixes (v3.10.x → v4.0.0)
13296231d0edbSAtari911- ✅ Fixed color bars not showing (align-self:stretch vs height:100%)
13297231d0edbSAtari911- ✅ Fixed tooltip function naming (sanitized calId for JavaScript)
13298231d0edbSAtari911- ✅ Fixed weather display (added updateWeather function)
13299231d0edbSAtari911- ✅ Fixed HTML rendering in events (title_html/description_html fields)
13300231d0edbSAtari911- ✅ Fixed Add Event dialog (null check for calendar element)
13301231d0edbSAtari911- ✅ Fixed text positioning in Add Event button
13302231d0edbSAtari911- ✅ Fixed spacing throughout sidebar widget
13303231d0edbSAtari911
13304231d0edbSAtari911### �� Complete Feature List
13305231d0edbSAtari911- Full calendar view (month grid)
13306231d0edbSAtari911- Sidebar widget (week view)
13307231d0edbSAtari911- Event panel (standalone)
13308231d0edbSAtari911- Event list (date ranges)
13309231d0edbSAtari911- Namespace support
13310231d0edbSAtari911- Color coding
13311231d0edbSAtari911- Time conflict detection
13312231d0edbSAtari911- DokuWiki syntax in events
13313231d0edbSAtari911- Outlook synchronization
13314231d0edbSAtari911- System monitoring
13315231d0edbSAtari911- Weather display
13316231d0edbSAtari911- Live clock
13317231d0edbSAtari911- Admin interface
13318231d0edbSAtari911- Cache management
13319231d0edbSAtari911- Draggable dialogs
13320231d0edbSAtari911- AJAX save/edit/delete
13321231d0edbSAtari911- Import/export config
13322231d0edbSAtari911
13323231d0edbSAtari911### �� Usage
13324231d0edbSAtari911
13325231d0edbSAtari911**Sidebar Widget**:
13326231d0edbSAtari911```
13327231d0edbSAtari911{{calendar sidebar}}
13328231d0edbSAtari911{{calendar sidebar namespace=team}}
13329231d0edbSAtari911```
13330231d0edbSAtari911
13331231d0edbSAtari911**Full Calendar**:
13332231d0edbSAtari911```
13333231d0edbSAtari911{{calendar}}
13334231d0edbSAtari911{{calendar year=2026 month=6 namespace=team}}
13335231d0edbSAtari911```
13336231d0edbSAtari911
13337231d0edbSAtari911**Event Panel**:
13338231d0edbSAtari911```
13339231d0edbSAtari911{{eventpanel}}
13340231d0edbSAtari911```
13341231d0edbSAtari911
13342231d0edbSAtari911**Event List**:
13343231d0edbSAtari911```
13344231d0edbSAtari911{{eventlist daterange=2026-01-01:2026-01-31}}
13345231d0edbSAtari911```
13346231d0edbSAtari911
13347231d0edbSAtari911### �� Stats
13348231d0edbSAtari911- **40+ versions** developed during v3.x iterations
13349231d0edbSAtari911- **3.10.0 → 3.11.4**: Polish and refinement
13350231d0edbSAtari911- **4.0.0**: Production-ready Matrix Edition
13351231d0edbSAtari911
13352231d0edbSAtari911### �� Credits
13353231d0edbSAtari911Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration.
13354231d0edbSAtari911
13355231d0edbSAtari911---
13356231d0edbSAtari911
13357231d0edbSAtari911## Previous Versions (v3.11.4 and earlier)
13358231d0edbSAtari911
13359231d0edbSAtari911## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING
13360231d0edbSAtari911- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px)
13361231d0edbSAtari911- **Improved:** Small breathing room between system stats bars and Add Event button
13362231d0edbSAtari911- **Visual:** Better spacing for cleaner appearance
13363231d0edbSAtari911
13364231d0edbSAtari911### CSS Change:
13365231d0edbSAtari911**eventlist-today-header**:
13366231d0edbSAtari911- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px`
13367231d0edbSAtari911
13368231d0edbSAtari911### Visual Result:
13369231d0edbSAtari911```
13370231d0edbSAtari911│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats bars
13371231d0edbSAtari911│                       │  ← 2px space (restored)
13372231d0edbSAtari911├───────────────────────┤
13373231d0edbSAtari911│  + ADD EVENT          │  ← Add Event bar
13374231d0edbSAtari911├───────────────────────┤
13375231d0edbSAtari911```
13376231d0edbSAtari911
13377231d0edbSAtari911**Before (v3.11.3)**: No space, bars directly touch Add Event button
13378231d0edbSAtari911**After (v3.11.4)**: 2px breathing room for better visual hierarchy
13379231d0edbSAtari911
13380231d0edbSAtari911## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION
13381231d0edbSAtari911- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset
13382231d0edbSAtari911- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error
13383231d0edbSAtari911- **Changed:** Add Event text moved up 1px (position:relative; top:-1px)
13384231d0edbSAtari911- **Changed:** Line-height reduced from 12px to 10px for better text centering
13385231d0edbSAtari911- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets
13386231d0edbSAtari911
13387231d0edbSAtari911### JavaScript Fix:
13388231d0edbSAtari911**Problem**: Line 1084-1085 in calendar-main.js
13389231d0edbSAtari911```javascript
13390231d0edbSAtari911const calendar = document.getElementById(calId);
13391231d0edbSAtari911const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error!
13392231d0edbSAtari911```
13393231d0edbSAtari911
13394231d0edbSAtari911**Solution**: Added null check
13395231d0edbSAtari911```javascript
13396231d0edbSAtari911const calendar = document.getElementById(calId);
13397231d0edbSAtari911const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null;
13398231d0edbSAtari911```
13399231d0edbSAtari911
13400231d0edbSAtari911**Why This Happened**:
13401231d0edbSAtari911- Regular calendar has element with id=calId
13402231d0edbSAtari911- Sidebar widget doesn't have this element (different structure)
13403231d0edbSAtari911- Code tried to read .dataset on null, causing error
13404231d0edbSAtari911
13405231d0edbSAtari911### Text Position Fix:
13406231d0edbSAtari911**Before**:
13407231d0edbSAtari911- line-height: 12px
13408231d0edbSAtari911- vertical-align: middle
13409231d0edbSAtari911- Text slightly low
13410231d0edbSAtari911
13411231d0edbSAtari911**After**:
13412231d0edbSAtari911- line-height: 10px
13413231d0edbSAtari911- position: relative; top: -1px
13414231d0edbSAtari911- Text perfectly centered
13415231d0edbSAtari911
13416231d0edbSAtari911### What Works Now:
13417231d0edbSAtari911✅ Click "+ ADD EVENT" in sidebar → Dialog opens
13418231d0edbSAtari911✅ No console errors
13419231d0edbSAtari911✅ Text properly centered vertically
13420231d0edbSAtari911✅ Form pre-filled with today's date
13421231d0edbSAtari911✅ Save works correctly
13422231d0edbSAtari911
13423231d0edbSAtari911## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR
13424231d0edbSAtari911- **Added:** Event dialog to sidebar widget (same as regular calendar)
13425231d0edbSAtari911- **Changed:** Add Event button now opens proper event form dialog
13426231d0edbSAtari911- **Added:** renderEventDialog() called in renderSidebarWidget()
13427231d0edbSAtari911- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date
13428231d0edbSAtari911- **Improved:** Can now add events directly from sidebar widget
13429231d0edbSAtari911
13430231d0edbSAtari911### Add Event Button Behavior:
13431231d0edbSAtari911**Before (v3.11.1)**: Showed alert with instructions
13432231d0edbSAtari911**After (v3.11.2)**: Opens full event creation dialog
13433231d0edbSAtari911
13434231d0edbSAtari911**Dialog Features**:
13435231d0edbSAtari911- Date field (defaults to today)
13436231d0edbSAtari911- Title field (required)
13437231d0edbSAtari911- Time field (optional)
13438231d0edbSAtari911- End time field (optional)
13439231d0edbSAtari911- Color picker
13440231d0edbSAtari911- Category field
13441231d0edbSAtari911- Description field
13442231d0edbSAtari911- Save and Cancel buttons
13443231d0edbSAtari911- Draggable dialog
13444231d0edbSAtari911
13445231d0edbSAtari911### Technical Changes:
13446231d0edbSAtari911- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget()
13447231d0edbSAtari911- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')`
13448231d0edbSAtari911- Dialog uses same structure as regular calendar
13449231d0edbSAtari911- Uses existing openAddEvent() and saveEventCompact() JavaScript functions
13450231d0edbSAtari911
13451231d0edbSAtari911### User Flow:
13452231d0edbSAtari9111. User clicks "+ ADD EVENT" green bar
13453231d0edbSAtari9112. Event dialog opens with today's date pre-filled
13454231d0edbSAtari9113. User fills in event details
13455231d0edbSAtari9114. User clicks Save
13456231d0edbSAtari9115. Event saved via AJAX
13457231d0edbSAtari9116. Dialog closes
13458231d0edbSAtari9117. Sidebar refreshes to show new event
13459231d0edbSAtari911
13460231d0edbSAtari911## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG
13461231d0edbSAtari911- **Fixed:** Removed bottom padding from header (was 2px, now 0)
13462231d0edbSAtari911- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0)
13463231d0edbSAtari911- **Fixed:** Add Event bar now flush against header with zero gap
13464231d0edbSAtari911- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin
13465231d0edbSAtari911- **Improved:** Alert provides clear instructions on how to add events
13466231d0edbSAtari911
13467231d0edbSAtari911### CSS Changes:
13468231d0edbSAtari911**eventlist-today-header**:
13469231d0edbSAtari911- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom)
13470231d0edbSAtari911
13471231d0edbSAtari911**eventlist-stats-container**:
13472231d0edbSAtari911- `margin-top: 2px` → `margin: 0` (removed all margins)
13473231d0edbSAtari911
13474231d0edbSAtari911### Add Event Button Behavior:
13475231d0edbSAtari911**Before**: Clicked → Navigated to Admin → Manage Events tab
13476231d0edbSAtari911**After**: Clicked → Shows alert with instructions
13477231d0edbSAtari911
13478231d0edbSAtari911**Alert Message**:
13479231d0edbSAtari911```
13480231d0edbSAtari911To add an event, go to:
13481231d0edbSAtari911Admin → Calendar Management → Manage Events tab
13482231d0edbSAtari911or use the full calendar view {{calendar}}
13483231d0edbSAtari911```
13484231d0edbSAtari911
13485231d0edbSAtari911### Visual Result:
13486231d0edbSAtari911```
13487231d0edbSAtari911│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats (no margin-bottom)
13488231d0edbSAtari911├────────────────────────┤
13489231d0edbSAtari911│  + ADD EVENT           │  ← Perfectly flush!
13490231d0edbSAtari911├────────────────────────┤
13491231d0edbSAtari911```
13492231d0edbSAtari911
13493231d0edbSAtari911No gaps, perfectly aligned!
13494231d0edbSAtari911
13495231d0edbSAtari911## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE
13496231d0edbSAtari911- **Moved:** Add Event bar back to original position (between header and week grid)
13497231d0edbSAtari911- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff)
13498231d0edbSAtari911- **Changed:** Letter spacing reduced from 0.5px to 0.4px
13499231d0edbSAtari911- **Fixed:** Text now fully visible without being cut off
13500231d0edbSAtari911- **Final:** Optimal position and size determined
13501231d0edbSAtari911
13502231d0edbSAtari911### Final Layout:
13503231d0edbSAtari911```
13504231d0edbSAtari911┌─────────────────────────────┐
13505231d0edbSAtari911│  Clock | Weather | Stats    │  ← Header
13506231d0edbSAtari911├─────────────────────────────┤
13507231d0edbSAtari911│  + ADD EVENT                 │  ← Bar (back here, smaller text)
13508231d0edbSAtari911├─────────────────────────────┤
13509231d0edbSAtari911│  M  T  W  T  F  S  S        │  ← Week Grid
13510231d0edbSAtari911│  3  4  5  6  7  8  9        │
13511231d0edbSAtari911├─────────────────────────────┤
13512231d0edbSAtari911│  Today                       │  ← Event sections
13513231d0edbSAtari911└─────────────────────────────┘
13514231d0edbSAtari911```
13515231d0edbSAtari911
13516231d0edbSAtari911### Text Size Changes:
13517231d0edbSAtari911**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off
13518231d0edbSAtari911**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible
13519231d0edbSAtari911
13520231d0edbSAtari911### Why This Position:
13521231d0edbSAtari911- Separates header from calendar
13522231d0edbSAtari911- Natural action point after viewing stats
13523231d0edbSAtari911- Users see stats → decide to add event → view calendar
13524231d0edbSAtari911- Consistent with original design intent
13525231d0edbSAtari911
13526231d0edbSAtari911## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID
13527231d0edbSAtari911- **Moved:** Add Event bar repositioned from between header/grid to below week grid
13528231d0edbSAtari911- **Improved:** Better visual flow - header → stats → grid → add button → events
13529231d0edbSAtari911- **Changed:** Add Event bar now acts as separator between calendar and event sections
13530231d0edbSAtari911
13531231d0edbSAtari911### New Layout:
13532231d0edbSAtari911```
13533231d0edbSAtari911┌─────────────────────────────┐
13534231d0edbSAtari911│  Clock | Weather | Stats    │  ← Header
13535231d0edbSAtari911├─────────────────────────────┤
13536231d0edbSAtari911│  M  T  W  T  F  S  S        │  ← Week Grid
13537231d0edbSAtari911│  3  4  5  6  7  8  9        │
13538231d0edbSAtari911├─────────────────────────────┤
13539231d0edbSAtari911│  + ADD EVENT                 │  ← Add bar (moved here!)
13540231d0edbSAtari911├─────────────────────────────┤
13541231d0edbSAtari911│  Today                       │  ← Event sections
13542231d0edbSAtari911│  Tomorrow                    │
13543231d0edbSAtari911│  Important Events            │
13544231d0edbSAtari911└─────────────────────────────┘
13545231d0edbSAtari911```
13546231d0edbSAtari911
13547231d0edbSAtari911### Visual Flow:
13548231d0edbSAtari911**Before (v3.10.8)**:
13549231d0edbSAtari9111. Header (clock, weather, stats)
13550231d0edbSAtari9112. **+ ADD EVENT** bar
13551231d0edbSAtari9113. Week grid
13552231d0edbSAtari9114. Event sections
13553231d0edbSAtari911
13554231d0edbSAtari911**After (v3.10.9)**:
13555231d0edbSAtari9111. Header (clock, weather, stats)
13556231d0edbSAtari9112. Week grid (calendar days)
13557231d0edbSAtari9113. **+ ADD EVENT** bar
13558231d0edbSAtari9114. Event sections
13559231d0edbSAtari911
13560231d0edbSAtari911### Benefits:
13561231d0edbSAtari911- Natural reading flow: View calendar → Add event → See events
13562231d0edbSAtari911- Add button positioned between calendar and event list
13563231d0edbSAtari911- Acts as visual separator
13564231d0edbSAtari911- More logical action placement
13565231d0edbSAtari911
13566231d0edbSAtari911## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR
13567231d0edbSAtari911- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color
13568231d0edbSAtari911- **Changed:** Events now display with single 3px color bar (event's assigned color only)
13569231d0edbSAtari911- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly
13570231d0edbSAtari911- **Simplified:** Cleaner visual with one color bar instead of two
13571231d0edbSAtari911- **Improved:** More space for event content without extra bar
13572231d0edbSAtari911
13573231d0edbSAtari911### Visual Changes:
13574231d0edbSAtari911
13575231d0edbSAtari911**Before (v3.10.7)** - Dual color bars:
13576231d0edbSAtari911```
13577231d0edbSAtari911├─ [Orange][Green]  Event Title
13578231d0edbSAtari911├─ [Blue][Purple]   Event Title
13579231d0edbSAtari911```
13580231d0edbSAtari911
13581231d0edbSAtari911**After (v3.10.8)** - Single color bar:
13582231d0edbSAtari911```
13583231d0edbSAtari911├─ [Green]  Event Title    ← Only event color!
13584231d0edbSAtari911├─ [Purple] Event Title    ← Only event color!
13585231d0edbSAtari911```
13586231d0edbSAtari911
13587231d0edbSAtari911### Add Bar Changes:
13588231d0edbSAtari911- Added `margin:0` to eliminate gaps
13589231d0edbSAtari911- Now flush against header (no space above)
13590231d0edbSAtari911- Now flush against week grid (no space below)
13591231d0edbSAtari911- Perfect seamless connection
13592231d0edbSAtari911
13593231d0edbSAtari911### Technical Changes:
13594231d0edbSAtari911**renderSidebarEvent()**:
13595231d0edbSAtari911- Removed section color bar (4px)
13596231d0edbSAtari911- Kept only event color bar (3px)
13597231d0edbSAtari911
13598231d0edbSAtari911**showDayEvents() JavaScript**:
13599231d0edbSAtari911- Removed section color bar (4px blue)
13600231d0edbSAtari911- Kept only event color bar (3px)
13601231d0edbSAtari911
13602231d0edbSAtari911**Add Event bar**:
13603231d0edbSAtari911- Added `margin:0` inline style
13604231d0edbSAtari911- Removed all top/bottom margins
13605231d0edbSAtari911
13606231d0edbSAtari911## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR
13607231d0edbSAtari911- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day)
13608231d0edbSAtari911- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%`
13609231d0edbSAtari911- **Changed:** Add Event bar color from orange to dark green (#006400)
13610231d0edbSAtari911- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off)
13611231d0edbSAtari911- **Changed:** Add Event bar text now bright green (#00ff00) with green glow
13612231d0edbSAtari911- **Changed:** Add Event bar font size increased from 7px to 9px
13613231d0edbSAtari911- **Changed:** Add Event bar letter spacing increased to 0.5px
13614231d0edbSAtari911- **Improved:** Hover effect on Add Event bar now darker green (#004d00)
13615231d0edbSAtari911
13616231d0edbSAtari911### Color Bar Fix Details:
13617231d0edbSAtari911**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars
13618231d0edbSAtari911**Solution**: Applied same fix as clicked day events:
13619231d0edbSAtari911- Changed parent div: `align-items:start` → `align-items:stretch`
13620231d0edbSAtari911- Added `min-height:20px` to parent
13621231d0edbSAtari911- Changed bars: `height:100%` → `align-self:stretch`
13622231d0edbSAtari911- Bars now properly fill vertical space in ALL sections
13623231d0edbSAtari911
13624231d0edbSAtari911### Add Event Bar Changes:
13625231d0edbSAtari911**Before**:
13626231d0edbSAtari911- Background: Orange (#ff9800)
13627231d0edbSAtari911- Text: Black (#000)
13628231d0edbSAtari911- Height: 6px (text cut off)
13629231d0edbSAtari911- Font: 7px
13630231d0edbSAtari911
13631231d0edbSAtari911**After**:
13632231d0edbSAtari911- Background: Dark green (#006400)
13633231d0edbSAtari911- Text: Bright green (#00ff00) with green glow
13634231d0edbSAtari911- Height: 12px (text fully visible)
13635231d0edbSAtari911- Font: 9px
13636231d0edbSAtari911- Hover: Darker green (#004d00)
13637231d0edbSAtari911- Matrix-themed green aesthetic
13638231d0edbSAtari911
13639231d0edbSAtari911## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE
13640231d0edbSAtari911- **Fixed:** Event color bars now display correctly in clicked day events
13641231d0edbSAtari911- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events
13642231d0edbSAtari911- **Added:** Conflict badge (⚠) appears on right side of conflicting events
13643231d0edbSAtari911- **Updated:** Complete README.md rewrite with full Matrix theme documentation
13644231d0edbSAtari911- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering)
13645231d0edbSAtari911- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px`
13646231d0edbSAtari911- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning
13647231d0edbSAtari911
13648231d0edbSAtari911### Color Bar Fix:
13649231d0edbSAtari911**Problem**: Bars had `height:100%` but parent had no explicit height
13650231d0edbSAtari911**Solution**:
13651231d0edbSAtari911- Changed to `align-self:stretch` on bars
13652231d0edbSAtari911- Parent uses `align-items:stretch`
13653231d0edbSAtari911- Added `min-height:20px` to parent
13654231d0edbSAtari911- Bars now properly fill vertical space
13655231d0edbSAtari911
13656231d0edbSAtari911### Sorting Change:
13657231d0edbSAtari911**Before**: Timed events first → All-day events last
13658231d0edbSAtari911**After**: All-day events FIRST → Timed events chronologically
13659231d0edbSAtari911
13660231d0edbSAtari911**Example**:
13661231d0edbSAtari911```
13662231d0edbSAtari911Monday, Feb 5
13663231d0edbSAtari911├─ All Day - Project Deadline       ← All-day first
13664231d0edbSAtari911├─ 8:00 AM - Morning Standup        ← Earliest time
13665231d0edbSAtari911├─ 10:30 AM - Coffee with Bob
13666231d0edbSAtari911└─ 2:00 PM - Team Meeting           ← Latest time
13667231d0edbSAtari911```
13668231d0edbSAtari911
13669231d0edbSAtari911### Conflict Badge:
13670231d0edbSAtari911- Orange warning triangle (⚠) on right side
13671231d0edbSAtari911- 10px font size
13672231d0edbSAtari911- Only appears if `event.conflict` is true
13673231d0edbSAtari911- Title attribute shows "Time conflict detected"
13674231d0edbSAtari911- Small and unobtrusive
13675231d0edbSAtari911
13676231d0edbSAtari911### README Update:
13677231d0edbSAtari911- Complete rewrite with Matrix theme focus
13678231d0edbSAtari911- Full usage instructions for all features
13679231d0edbSAtari911- Admin interface documentation
13680231d0edbSAtari911- Outlook sync setup guide
13681231d0edbSAtari911- System monitoring details
13682231d0edbSAtari911- Troubleshooting section
13683231d0edbSAtari911- Color scheme reference
13684231d0edbSAtari911- File structure documentation
13685231d0edbSAtari911- Performance tips
13686231d0edbSAtari911- Security notes
13687231d0edbSAtari911- Quick start examples
13688231d0edbSAtari911
136891d05cddcSAtari911## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR
136901d05cddcSAtari911- **Added:** Events now sorted by time when clicking week grid days
136911d05cddcSAtari911- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px)
136921d05cddcSAtari911- **Improved:** Events with times appear first, sorted chronologically
136931d05cddcSAtari911- **Improved:** All-day events appear after timed events
136941d05cddcSAtari911- **Changed:** Add Event bar font size reduced to 7px (from 10px)
136951d05cddcSAtari911- **Changed:** Add Event bar now has 0 padding and fixed 6px height
136961d05cddcSAtari911
136971d05cddcSAtari911### Sorting Logic:
136981d05cddcSAtari911- Events with times sorted by time (earliest first)
136991d05cddcSAtari911- All-day events (no time) appear at the end
137001d05cddcSAtari911- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare
137011d05cddcSAtari911- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event
137021d05cddcSAtari911
137031d05cddcSAtari911### Add Event Bar Changes:
137041d05cddcSAtari911- **Height**: 6px (was ~12px with padding)
137051d05cddcSAtari911- **Padding**: 0 (was 4px top/bottom)
137061d05cddcSAtari911- **Font Size**: 7px (was 10px)
137071d05cddcSAtari911- **Letter Spacing**: 0.3px (was 0.5px)
137081d05cddcSAtari911- **Line Height**: 6px to match height
137091d05cddcSAtari911- **Vertical Align**: Middle for text centering
137101d05cddcSAtari911
137111d05cddcSAtari911## Version 3.10.4 (2026-02-06) - ADD EVENT BAR
137121d05cddcSAtari911- **Added:** Thin orange "Add Event" bar between header and week grid
137131d05cddcSAtari911- **Added:** Quick access to event creation from sidebar widget
137141d05cddcSAtari911- **Styled:** Sleek design with hover effects and glow
137151d05cddcSAtari911- **Interactive:** Clicks navigate to Manage Events tab in admin
137161d05cddcSAtari911- **Improved:** User workflow for adding events from sidebar
137171d05cddcSAtari911
137181d05cddcSAtari911### Visual Design:
137191d05cddcSAtari911- Orange background (#ff9800) matching Today section color
137201d05cddcSAtari911- 4px top/bottom padding for thin, sleek appearance
137211d05cddcSAtari911- Black text with white text-shadow for visibility
137221d05cddcSAtari911- Hover effect: Darkens to #ff7700 with enhanced glow
137231d05cddcSAtari911- Orange glow effect (box-shadow) matching Matrix theme
137241d05cddcSAtari911- Centered "+ ADD EVENT" text (10px, bold, letter-spacing)
137251d05cddcSAtari911
137261d05cddcSAtari911### Technical Changes:
137271d05cddcSAtari911- Added between header close and renderWeekGrid() call
137281d05cddcSAtari911- Inline onclick handler navigates to admin manage tab
137291d05cddcSAtari911- Inline onmouseover/onmouseout for hover effects
137301d05cddcSAtari911- Smooth 0.2s transition on all style changes
137311d05cddcSAtari911
137321d05cddcSAtari911## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION
137331d05cddcSAtari911- **Changed:** Update Plugin tab is now the default tab when opening admin
137341d05cddcSAtari911- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab
137351d05cddcSAtari911- **Improved:** Clear Cache button now larger and more prominent with helpful description
137361d05cddcSAtari911- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events
137371d05cddcSAtari911- **Removed:** Debug console.log statements from day event display
137381d05cddcSAtari911- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab
137391d05cddcSAtari911
137401d05cddcSAtari911### UI Changes:
137411d05cddcSAtari911- Update Plugin tab opens by default (was Config/Outlook Sync tab)
137421d05cddcSAtari911- Clear Cache button prominently displayed at top of Update Plugin tab
137431d05cddcSAtari911- Orange ��️ button (10px 20px padding) with confirmation dialog
137441d05cddcSAtari911- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin"
137451d05cddcSAtari911- Success/error messages display on Update Plugin tab after cache clear
137461d05cddcSAtari911- Tab navigation reordered to put Update first
137471d05cddcSAtari911
137481d05cddcSAtari911### Technical Changes:
137491d05cddcSAtari911- Default tab changed from 'config' to 'update' in html() method
137501d05cddcSAtari911- Tab navigation HTML reordered to show Update Plugin tab first
137511d05cddcSAtari911- clearCache() method now redirects with 'update' tab parameter
137521d05cddcSAtari911- Removed Clear Cache button from renderConfigTab()
137531d05cddcSAtari911- Added Clear Cache button to renderUpdateTab() with message display
137541d05cddcSAtari911
137551d05cddcSAtari911## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX
137561d05cddcSAtari911- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days
137571d05cddcSAtari911- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML
137581d05cddcSAtari911- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields
137591d05cddcSAtari911- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events
137601d05cddcSAtari911
137611d05cddcSAtari911### Technical Changes:
137621d05cddcSAtari911- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render()
137631d05cddcSAtari911- Events added to weekEvents now include pre-rendered HTML versions
137641d05cddcSAtari911- title_html and description_html fields populated before json_encode()
137651d05cddcSAtari911- JavaScript now receives properly formatted HTML content
137661d05cddcSAtari911
137671d05cddcSAtari911## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON
137681d05cddcSAtari911- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123)
137691d05cddcSAtari911- **Fixed:** HTML event handlers now call correctly sanitized function names
137701d05cddcSAtari911- **Fixed:** Weather temperature now updates correctly in sidebar widget
137711d05cddcSAtari911- **Added:** Weather update function to sidebar widget JavaScript
137721d05cddcSAtari911- **Added:** "Clear Cache" button in admin panel for easy cache refresh
137731d05cddcSAtari911- **Added:** Default weather location set to Irvine, CA when geolocation unavailable
137741d05cddcSAtari911- **Improved:** All tooltip functions now work correctly on system status bars
137751d05cddcSAtari911
137761d05cddcSAtari911### Technical Changes:
137771d05cddcSAtari911- Changed tooltip function names to use $jsCalId instead of $calId
137781d05cddcSAtari911- Changed HTML onmouseover/onmouseout to use $jsCalId
137791d05cddcSAtari911- Added updateWeather() function to sidebar widget
137801d05cddcSAtari911- Added getWeatherIcon() function to sidebar widget
137811d05cddcSAtari911- Added clearCache() method in admin.php
137821d05cddcSAtari911- Added recursiveDelete() helper method in admin.php
137831d05cddcSAtari911- Admin UI now has ��️ Clear Cache button alongside Export/Import
137841d05cddcSAtari911
137851d05cddcSAtari911## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES
137861d05cddcSAtari911- **Fixed:** JavaScript syntax error "Missing initializer in const declaration"
137871d05cddcSAtari911- **Fixed:** Event links and formatting not displaying in clicked day events
137881d05cddcSAtari911- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores
137891d05cddcSAtari911- **Changed:** Event titles now use `title_html` field to preserve HTML formatting
137901d05cddcSAtari911- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting
137911d05cddcSAtari911- **Improved:** All JavaScript variable names now use valid syntax
137921d05cddcSAtari911- **Improved:** Links, bold, italic, and other HTML formatting preserved in events
137931d05cddcSAtari911
137941d05cddcSAtari911### Technical Changes:
137951d05cddcSAtari911- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);`
137961d05cddcSAtari911- JavaScript variables now use underscores instead of dashes
137971d05cddcSAtari911- Event HTML rendering preserves DokuWiki formatting
137981d05cddcSAtari911- Fixed "showTooltip_sidebar is not defined" errors
137991d05cddcSAtari911- Fixed "showDayEvents_cal is not defined" errors
138001d05cddcSAtari911
138011d05cddcSAtari911## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX
138021d05cddcSAtari911- **Fixed:** Critical JavaScript loading order issue causing ReferenceError
138031d05cddcSAtari911- **Fixed:** Functions now defined BEFORE HTML that uses them
138041d05cddcSAtari911- **Changed:** Consolidated all JavaScript into single comprehensive script block
138051d05cddcSAtari911- **Removed:** ~290 lines of duplicate JavaScript code
138061d05cddcSAtari911- **Added:** Shared state management with `sharedState_[calId]` object
138071d05cddcSAtari911- **Improved:** System tooltip functions now work correctly
138081d05cddcSAtari911- **Improved:** Week grid click events now work correctly
138091d05cddcSAtari911
138101d05cddcSAtari911### Technical Changes:
138111d05cddcSAtari911- Moved all JavaScript to beginning of widget (before HTML)
138121d05cddcSAtari911- Removed duplicate script blocks
138131d05cddcSAtari911- Unified tooltip and stats functions
138141d05cddcSAtari911- Shared latestStats and cpuHistory state
138151d05cddcSAtari911- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined"
138161d05cddcSAtari911
138171d05cddcSAtari911## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS
138181d05cddcSAtari911- **Added:** Dual color bars on events (section color + event color)
138191d05cddcSAtari911- **Added:** Click week grid days to view events (replaced hover tooltips)
138201d05cddcSAtari911- **Added:** Expandable section below week grid for selected day events
138211d05cddcSAtari911- **Added:** Blue theme for selected day section
138221d05cddcSAtari911- **Changed:** Week grid days now clickable instead of tooltips
138231d05cddcSAtari911- **Changed:** Section bar: 4px wide (left)
138241d05cddcSAtari911- **Changed:** Event bar: 3px wide (right)
138251d05cddcSAtari911- **Increased:** Gap between color bars from 3px to 6px
138261d05cddcSAtari911- **Improved:** Click is more reliable and mobile-friendly than hover tooltips
138271d05cddcSAtari911
138281d05cddcSAtari911### Visual Changes:
138291d05cddcSAtari911- Each event shows TWO color bars side-by-side
138301d05cddcSAtari911- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue)
138311d05cddcSAtari911- Right bar (3px): Individual event's assigned color
138321d05cddcSAtari911- Click any day in week grid to expand event list
138331d05cddcSAtari911- X button to close selected day events
138341d05cddcSAtari911
138351d05cddcSAtari911## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY
138361d05cddcSAtari911- **Increased:** Event color bar width from 2px to 3px
138371d05cddcSAtari911- **Increased:** Gap between section and event bars from 3px to 6px
138381d05cddcSAtari911- **Improved:** Event color bars now more visible alongside section bars
138391d05cddcSAtari911- **Note:** Dual color bar system already in place from v3.9.6
138401d05cddcSAtari911
138411d05cddcSAtari911## Version 3.9.6 (2026-02-05) - UI REFINEMENTS
138421d05cddcSAtari911- **Changed:** Date in Important Events moved below event name (was above)
138431d05cddcSAtari911- **Changed:** Section headers now 9px font size (was 10px)
138441d05cddcSAtari911- **Changed:** Section headers now normal case (was ALL CAPS)
138451d05cddcSAtari911- **Changed:** Letter spacing reduced from 0.8px to 0.3px
138461d05cddcSAtari911- **Improved:** More natural reading flow with date below event name
138471d05cddcSAtari911- **Improved:** Cleaner, more subtle section headers
138481d05cddcSAtari911
138491d05cddcSAtari911### Header Changes:
138501d05cddcSAtari911- "TODAY" → "Today"
138511d05cddcSAtari911- "TOMORROW" → "Tomorrow"
138521d05cddcSAtari911- "IMPORTANT EVENTS" → "Important Events"
138531d05cddcSAtari911
138541d05cddcSAtari911## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN
138551d05cddcSAtari911- **Redesigned:** Complete overhaul of `sidebar` parameter
138561d05cddcSAtari911- **Added:** Compact week-at-a-glance itinerary view (200px wide)
138571d05cddcSAtari911- **Added:** Live clock widget at top of sidebar
138581d05cddcSAtari911- **Added:** 7-cell week grid showing event bars
138591d05cddcSAtari911- **Added:** Today section with orange header and left border
138601d05cddcSAtari911- **Added:** Tomorrow section with green header and left border
138611d05cddcSAtari911- **Added:** Important Events section with purple header and left border
138621d05cddcSAtari911- **Added:** Admin setting to configure important namespaces
138631d05cddcSAtari911- **Added:** Time conflict badges in sidebar events
138641d05cddcSAtari911- **Added:** Task checkboxes in sidebar events
138651d05cddcSAtari911- **Changed:** Sidebar now optimized for narrow spaces (200px)
138661d05cddcSAtari911- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets
138671d05cddcSAtari911
138681d05cddcSAtari911### New Features:
138691d05cddcSAtari911- Clock updates every second showing current time
138701d05cddcSAtari911- Week grid shows Mon-Sun with colored event bars
138711d05cddcSAtari911- Today/Tomorrow sections show full event details
138721d05cddcSAtari911- Important events highlighted in purple (configurable namespaces)
138731d05cddcSAtari911- All badges (conflict, time, etc.) shown in compact format
138741d05cddcSAtari911- Automatic time conflict detection
138751d05cddcSAtari911
138761d05cddcSAtari911## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP
138771d05cddcSAtari911- **Removed:** 16 unused/debug/backup files
138781d05cddcSAtari911- **Removed:** 69 console.log() debug statements
138791d05cddcSAtari911- **Removed:** 3 orphaned object literals from console.log removal
138801d05cddcSAtari911- **Removed:** Temporary comments and markers
138811d05cddcSAtari911- **Fixed:** JavaScript syntax errors from cleanup
138821d05cddcSAtari911- **Improved:** Code quality and maintainability
138831d05cddcSAtari911- **Improved:** Reduced plugin size by removing unnecessary files
138841d05cddcSAtari911- **Status:** Production-ready, fully cleaned codebase
138851d05cddcSAtari911
138861d05cddcSAtari911### Files Removed:
138871d05cddcSAtari911- style.css.backup, script.js.backup
138881d05cddcSAtari911- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php
138891d05cddcSAtari911- debug_events.php, debug_html.php, cleanup_events.php
138901d05cddcSAtari911- fix_corrupted_json.php, fix_wildcard_namespaces.php
138911d05cddcSAtari911- find_outlook_duplicates.php, update_namespace.php
138921d05cddcSAtari911- validate_calendar_json.php, admin.js
138931d05cddcSAtari911- test_date_field.html
138941d05cddcSAtari911
138951d05cddcSAtari911## Version 3.7.5 (2026-02-05)
138961d05cddcSAtari911- **Fixed:** PHP syntax error (duplicate foreach loop removed)
138971d05cddcSAtari911- **Fixed:** Time variable handling in grace period logic
138981d05cddcSAtari911
138991d05cddcSAtari911## Version 3.7.4 (2026-02-05)
139001d05cddcSAtari911- **Added:** 15-minute grace period for timed events
139011d05cddcSAtari911- **Changed:** Events with times now stay visible for 15 minutes after their start time
139021d05cddcSAtari911- **Changed:** Prevents events from immediately disappearing when they start
139031d05cddcSAtari911- **Improved:** Better user experience for ongoing events
139041d05cddcSAtari911- **Fixed:** Events from earlier today now properly handled with grace period
139051d05cddcSAtari911
139061d05cddcSAtari911## Version 3.7.3 (2026-02-05)
139071d05cddcSAtari911- **Changed:** Complete redesign of cleanup section for compact, sleek layout
139081d05cddcSAtari911- **Changed:** Radio buttons now in single row at top
139091d05cddcSAtari911- **Changed:** All options visible with grayed-out inactive states (opacity 0.4)
139101d05cddcSAtari911- **Changed:** Inline controls - no more grid layout or wrapper boxes
139111d05cddcSAtari911- **Changed:** Namespace filter now compact single-line input
139121d05cddcSAtari911- **Changed:** Smaller buttons and tighter spacing throughout
139131d05cddcSAtari911- **Improved:** More professional, space-efficient design
139141d05cddcSAtari911
139151d05cddcSAtari911## Version 3.7.2 (2026-02-04)
139161d05cddcSAtari911- **Fixed:** Strange boxes under cleanup options - now properly hidden
139171d05cddcSAtari911- **Changed:** Unified color scheme across all admin sections
139181d05cddcSAtari911- **Changed:** Green (#00cc07) - Primary actions and main theme
139191d05cddcSAtari911- **Changed:** Orange (#ff9800) - Warnings and cleanup features
139201d05cddcSAtari911- **Changed:** Purple (#7b1fa2) - Secondary actions and accents
139211d05cddcSAtari911- **Improved:** Consistent visual design throughout admin interface
139221d05cddcSAtari911
139231d05cddcSAtari911## Version 3.7.1 (2026-02-04)
139241d05cddcSAtari911- **Fixed:** Cleanup section background changed from orange to white
139251d05cddcSAtari911- **Fixed:** Event cleanup now properly scans all calendar directories
139261d05cddcSAtari911- **Added:** Debug info display when preview finds no events
139271d05cddcSAtari911- **Improved:** Better directory scanning logic matching other features
139281d05cddcSAtari911
139291d05cddcSAtari911## Version 3.7.0 (2026-02-04)
139301d05cddcSAtari911- **Added:** Event cleanup feature in Events Manager
139311d05cddcSAtari911- **Added:** Delete old events by age (months/years old)
139321d05cddcSAtari911- **Added:** Delete events by status (completed tasks, past events)
139331d05cddcSAtari911- **Added:** Delete events by date range
139341d05cddcSAtari911- **Added:** Namespace filter for targeted cleanup
139351d05cddcSAtari911- **Added:** Preview function to see what will be deleted
139361d05cddcSAtari911- **Added:** Automatic backup creation before cleanup
139371d05cddcSAtari911- **Changed:** Reduced changelog viewer height to 100px (was 400px)
139381d05cddcSAtari911
139391d05cddcSAtari911## Version 3.6.3 (2026-02-04)
139401d05cddcSAtari911- **Fixed:** Conflict tooltips now work properly after navigating between months
139411d05cddcSAtari911- **Added:** Changelog display in Update Plugin tab
139421d05cddcSAtari911- **Added:** CHANGELOG.md file with version history
139431d05cddcSAtari911- **Improved:** Changelog shows last 10 versions with color-coded change types
139441d05cddcSAtari911- **Fixed:** Removed debug console.log statements
139451d05cddcSAtari911
139461d05cddcSAtari911## Version 3.6.2 (2026-02-04)
139471d05cddcSAtari911- **Fixed:** Month title now updates correctly when navigating between months
139481d05cddcSAtari911- **Changed:** All eventpanel header elements reduced by 10% for more compact design
139491d05cddcSAtari911- **Changed:** Reduced header height from 78px to 70px
139501d05cddcSAtari911
139511d05cddcSAtari911## Version 3.6.1 (2026-02-04)
139521d05cddcSAtari911- **Changed:** Complete redesign of eventpanel header with practical two-row layout
139531d05cddcSAtari911- **Fixed:** Improved layout for narrow widths (~500px)
139541d05cddcSAtari911- **Changed:** Simplified color scheme (removed purple gradient)
139551d05cddcSAtari911
139561d05cddcSAtari911## Version 3.6.0 (2026-02-04)
139571d05cddcSAtari911- **Changed:** Redesigned eventpanel header with gradient background
139581d05cddcSAtari911- **Changed:** Consolidated multiple header rows into compact single-row design
139591d05cddcSAtari911
139601d05cddcSAtari911## Version 3.5.1 (2026-02-04)
139611d05cddcSAtari911- **Changed:** Moved event search bar into header row next to + Add button
139621d05cddcSAtari911- **Improved:** More compact UI with search integrated into header
139631d05cddcSAtari911
139641d05cddcSAtari911## Version 3.5.0 (2026-02-04)
139651d05cddcSAtari911- **Added:** Event search functionality in sidebar and eventpanel
139661d05cddcSAtari911- **Added:** Real-time filtering as you type
139671d05cddcSAtari911- **Added:** Clear button (✕) appears when searching
139681d05cddcSAtari911- **Added:** "No results" message when search returns nothing
139691d05cddcSAtari911
139701d05cddcSAtari911## Version 3.4.7 (2026-02-04)
139711d05cddcSAtari911- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding)
139721d05cddcSAtari911- **Fixed:** Removed debug logging from console
139731d05cddcSAtari911- **Changed:** Updated export version number to match plugin version
139741d05cddcSAtari911
139751d05cddcSAtari911## Version 3.4.6 (2026-02-04)
139761d05cddcSAtari911- **Added:** Debug logging to diagnose conflict detection issues
139771d05cddcSAtari911- **Development:** Extensive console logging for troubleshooting
139781d05cddcSAtari911
139791d05cddcSAtari911## Version 3.4.5 (2026-02-04)
139801d05cddcSAtari911- **Added:** Debug logging to showDayPopup and conflict detection
139811d05cddcSAtari911- **Development:** Added logging to trace conflict detection flow
139821d05cddcSAtari911
139831d05cddcSAtari911## Version 3.4.4 (2026-02-04)
139841d05cddcSAtari911- **Fixed:** Conflict detection now persists across page refreshes (PHP-based)
139851d05cddcSAtari911- **Fixed:** Conflict tooltips now appear on hover
139861d05cddcSAtari911- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation)
139871d05cddcSAtari911- **Added:** Conflict badges in both future and past events sections
139881d05cddcSAtari911
139891d05cddcSAtari911## Version 3.4.3 (2026-02-04)
139901d05cddcSAtari911- **Added:** Custom styled conflict tooltips with hover functionality
139911d05cddcSAtari911- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2)
139921d05cddcSAtari911- **Improved:** Beautiful tooltip design with orange header and clean formatting
139931d05cddcSAtari911
139941d05cddcSAtari911## Version 3.4.2 (2026-02-04)
139951d05cddcSAtari911- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3)
139961d05cddcSAtari911
139971d05cddcSAtari911## Version 3.4.1 (2026-02-04)
139981d05cddcSAtari911- **Fixed:** End time field now properly saves to database
139991d05cddcSAtari911- **Fixed:** End time dropdown now filters to show only valid times after start time
140001d05cddcSAtari911- **Added:** Smart dropdown behavior - expands on focus, filters invalid options
140011d05cddcSAtari911- **Improved:** End time auto-suggests +1 hour when start time selected
140021d05cddcSAtari911
140031d05cddcSAtari911## Version 3.4.0 (2026-02-04)
140041d05cddcSAtari911- **Added:** End time support for events (start and end times)
140051d05cddcSAtari911- **Added:** Automatic time conflict detection
140061d05cddcSAtari911- **Added:** Conflict warning badges (⚠️) on events with overlapping times
140071d05cddcSAtari911- **Added:** Conflict tooltips showing which events conflict
140081d05cddcSAtari911- **Added:** Visual conflict indicators with pulse animation
140091d05cddcSAtari911- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM")
140101d05cddcSAtari911
140111d05cddcSAtari911## Version 3.3.77 (2026-02-04)
140121d05cddcSAtari911- **Fixed:** Namespace badge onclick handlers restored after clearing filter
140131d05cddcSAtari911- **Fixed:** Namespace filtering works infinitely (filter → clear → filter)
140141d05cddcSAtari911
140151d05cddcSAtari911## Version 3.3.76 (2026-02-04)
140161d05cddcSAtari911- **Fixed:** Namespace badges now clickable after clearing namespace filter
140171d05cddcSAtari911
140181d05cddcSAtari911## Version 3.3.75 (2026-02-04)
140191d05cddcSAtari911- **Fixed:** Form resubmission warnings eliminated
140201d05cddcSAtari911- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303
140211d05cddcSAtari911- **Changed:** All admin redirects now use absolute URLs
140221d05cddcSAtari911
140231d05cddcSAtari911## Version 3.3.74 (2026-02-04)
140241d05cddcSAtari911- **Fixed:** Clearing namespace filter now restores original namespace instead of default
140251d05cddcSAtari911- **Added:** data-original-namespace attribute to preserve initial namespace setting
140261d05cddcSAtari911- **Improved:** Console logging for namespace filter debugging
140271d05cddcSAtari911
140281d05cddcSAtari911## Version 3.3.73 (2026-02-03)
140291d05cddcSAtari911- **Added:** Dynamic namespace filtering banner with clear button
140301d05cddcSAtari911- **Fixed:** JavaScript function accessibility issues
140311d05cddcSAtari911- **Fixed:** Namespace badge click handlers in event lists
140321d05cddcSAtari911- **Improved:** Persistent namespace filtering across views
140331d05cddcSAtari911
140341d05cddcSAtari911## Earlier Versions
140351d05cddcSAtari911See previous transcripts for complete history through v3.3.73, including:
140361d05cddcSAtari911- Recurring events with Outlook sync
140371d05cddcSAtari911- Multi-namespace support
140381d05cddcSAtari911- Event categories and mapping
140391d05cddcSAtari911- Backup/restore functionality
140401d05cddcSAtari911- System statistics bar
140411d05cddcSAtari911- Namespace selector with fuzzy search
140421d05cddcSAtari911- Events Manager with import/export
140431d05cddcSAtari911- And much more...
14044