xref: /plugin/calendar/CHANGELOG.md (revision 7e8ea635dd19058d6f7c428adbbe02d9702096d7)
1# Calendar Plugin Changelog
2
3## Version 6.6.1 (2026-02-11) - SECURITY FIXES
4
5### Security
6- **Critical:** Removed `eval()` remote code execution vulnerability in config import
7- **Critical:** Added admin authentication requirement to `get_system_stats.php` endpoint
8- **High:** Added CSRF token verification to all write operations (save, delete, toggle)
9- **High:** Fixed path traversal vulnerabilities in namespace delete/rename functions
10- **High:** Added admin privilege verification to AJAX admin routes
11
12### Improved
13- **Input Validation:** Date format (YYYY-MM-DD), time format (HH:MM), color format (#RRGGBB)
14- **Input Validation:** Year range (1970-2100), month range (1-12), namespace format
15- **Input Validation:** Recurrence type whitelist, title/description length limits
16- **Debug Logging:** All debug logging now conditional on `CALENDAR_DEBUG` constant (off by default)
17- **JSON Handling:** Added `safeJsonRead()` helper with proper error handling
18- **Timezone:** Sync script now uses configured timezone instead of hardcoded value
19
20### Code Quality
21- Documented intentional switch fallthrough in `get_system_stats.php`
22- Standardized error response format
23
24## Version 6.6.0 (2026-02-11) - BACKUP & UI IMPROVEMENTS
25
26### Fixed
27- **Backup:** Fixed recursive directory backup to properly include all subdirectories (including `lang/`)
28- **Backup:** Now uses `SELF_FIRST` iterator to process directories before their contents
29- **Backup:** Empty directories are now explicitly added with `addEmptyDir()` to preserve structure
30
31### UI Change
32- **Namespace Explorer:** Cleanup status message now appears prominently at top of section
33- Previously status message was at bottom, easy to miss after cleanup operations
34
35## Version 6.5.5 (2026-02-11) - FIX AJAX ROUTING & MOVE CLEANUP BUTTON
36
37### Bug Fix
38- All admin AJAX actions (cleanup, rescan, extend, trim, pause, resume, change start/pattern) were returning "Unknown action"
39- Root cause: AJAX calls go through `action.php`'s switch statement, not `admin.php`'s `handle()` method
40- Added routing in `action.php`: new cases forward to `admin.php` via `routeToAdmin()` helper
41- Added public `handleAjaxAction()` method in `admin.php` as the entry point from `action.php`
42
43### UI Change
44- Moved "�� Cleanup" button from standalone section to inline next to "➕ New Namespace" in the control bar
45- Status messages still appear below the namespace explorer
46
47## Version 6.5.4 (2026-02-11) - FIX PHP PARSE ERROR IN CLEANUP JS
48
49### Bug Fix
50- Root cause: `style='color:...'` single quotes inside PHP `echo '...'` block terminated the PHP string prematurely
51- PHP saw `color:#e74c3c` as unexpected PHP code instead of part of the JS string
52- Fixed all 5 occurrences in cleanupEmptyNamespaces JS: escaped single quotes as `\'`
53- Added `adminColors` JS object (text, bg, border) injected from PHP `$colors` at render time
54- Cleanup detail text uses `adminColors.text` to respect DokuWiki template theme colors
55
56## Version 6.5.3 (2026-02-11) - FIX CLEANUP NAMESPACES PARSE ERROR
57
58### Bug Fix
59- Fixed PHP parse error on line 1089 caused by `$colors['text']` PHP variable inside JS string concatenation
60- The cleanup results detail list now uses hardcoded `#666` for text color instead of attempting PHP interpolation within JS runtime code
61
62## Version 6.5.2 (2026-02-11) - CLEANUP EMPTY NAMESPACES
63
64### New Feature
65- "�� Cleanup Empty Namespaces" button added at bottom of Namespace Explorer section
66- Dry-run scan first: shows exactly what will be removed with bullet-point details in confirm dialog
67- Removes empty calendar folders (0 JSON files or all-empty JSON files) from any namespace
68- Removes parent namespace directories if they become empty after calendar folder removal
69- Root calendar directory is never removed
70- AJAX-powered with inline status showing results after cleanup
71- Page auto-reloads after 2 seconds to refresh the namespace explorer view
72- Recursively scans all nested namespace directories via `findAllCalendarDirsRecursive()`
73
74## Version 6.5.1 (2026-02-11) - TRIM ALL PAST: SHOW COUNT BEFORE DELETE
75
76### Improved
77- "Trim All Past" button now does a dry-run count before showing the confirmation dialog
78- Confirmation shows exact count: "Found 47 past recurring events to remove"
79- If zero found, shows "No past recurring events found to remove" instead of confirm
80- PHP handler supports `dry_run` parameter that counts without deleting
81
82## Version 6.5.0 (2026-02-11) - BULK TRIM ALL PAST RECURRING EVENTS
83
84### Bulk Action
85- Red "✂️ Trim All Past" button added next to the Rescan button in the Recurring Events section header
86- Removes ALL past occurrences (before today) from EVERY recurring series in one click
87- Only removes events with `recurring` or `recurringId` flags — non-recurring events are untouched
88- Confirmation dialog required before execution
89- AJAX-powered with inline status showing count removed, then auto-rescans the table
90- Searches all calendar directories recursively
91
92## Version 6.4.9 (2026-02-11) - FIX RECURRING EDIT/DELETE: SEARCH ALL DIRECTORIES
93
94### Bug Fix
95- Edit and Delete recurring series now search ALL calendar directories instead of building a path from the namespace field
96- Root cause: event's `namespace` field (stored in JSON) can differ from the filesystem directory where the file lives
97- Both handlers now use `findCalendarDirs()` to collect every calendar directory recursively
98- Events matched by title AND namespace field (case-insensitive) for precise targeting
99- Edit handler rewritten: rename/time/namespace updates in Pass 1, interval respace in Pass 2
100- New `findCalendarDirs()` helper method for recursive directory discovery
101
102## Version 6.4.8 (2026-02-11) - FIX PHP PARSE ERROR IN MANAGE DIALOG
103
104### Bug Fix
105- Rewrote `manageRecurringSeries()` JS function using string concatenation instead of template literals
106- JS template literals (`${...}`) inside PHP echo blocks caused PHP to parse them as variable interpolation
107- All inline onclick handlers now use `\x27` for single quotes to avoid escaping conflicts
108
109## Version 6.4.7 (2026-02-11) - RECURRING EVENTS: FULL MANAGEMENT CONTROLS
110
111### New "Manage" Button per Series
112- Orange "Manage" button opens a comprehensive management dialog for each recurring series
113
114### Extend Series
115- Add N new occurrences after the last event in the series
116- Configurable interval: Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly
117- New events copy title, time, color, namespace, and recurring flag from the last event
118
119### Trim Past Events
120- Remove all occurrences before a selected cutoff date
121- Confirmation required before deletion
122- Cleans up empty date keys and files automatically
123
124### Change Pattern
125- Respace future occurrences with a new interval
126- Past events are untouched; only future events are removed and re-created
127- First future event becomes the anchor date
128
129### Change Start Date
130- Shift ALL occurrences by the difference between old and new start date
131- Events are removed from old positions and re-created at new positions
132- Preserves spacing between all events
133
134### Pause/Resume
135- Pause: adds ⏸ prefix and paused flag to all future occurrences
136- Resume: removes ⏸ prefix and paused flag from all occurrences
137- Button toggles based on whether series is currently paused
138
139### Infrastructure
140- New shared `recurringAction()` JS helper for all AJAX management operations
141- New `getRecurringSeriesEvents()` PHP helper for finding all events in a series
142- Status messages shown inline in the management dialog
143- Close button triggers automatic rescan to refresh the table
144
145## Version 6.4.6 (2026-02-11) - RECURRING EVENTS: RESCAN BUTTON & IMPROVED LOGIC
146
147### Rescan Button
148- Green "�� Rescan" button added to the Recurring Events section header
149- AJAX-powered: rescans all calendar data and refreshes the table without page reload
150- Shows count of found series briefly after scan completes
151
152### Improved Detection Logic
153- Events with `recurring: true` flag are now detected first (grouped by `recurringId`)
154- Pattern-detected events (3+ same-title occurrences) are found separately and deduplicated
155- New "Source" column shows ��️ Flagged (has recurring flag) vs �� Detected (pattern match)
156- Median interval used for pattern detection instead of just first two dates (more robust)
157- New patterns recognized: Quarterly, Semi-annual, and "Every ~N days" for custom intervals
158- Empty/invalid titles and malformed date arrays are now skipped safely
159- Dates are deduplicated before counting (prevents inflated counts from multi-day events)
160- Nested namespace directories now scanned recursively
161- Results sorted alphabetically by title
162
163## Version 6.4.5 (2026-02-11) - ADMIN VERSION HISTORY OVERHAUL
164
165### Version History Viewer
166- All purple (#7b1fa2) accent colors replaced with green (#00cc07) to match admin theme
167- Changelog parser now handles `###` subsection headers (rendered as green bold labels)
168- Plain `- ` bullet items now parsed and categorized under their subsection
169- Previously only `- **Type:** description` format was recognized
170
171### Current Release Button
172- Green "Current Release" button added between nav arrows
173- Jumps directly to the card matching the running version from plugin.info.txt
174- Running version card shows green "RUNNING" badge and thicker green border
175
176## Version 6.4.4 (2026-02-11) - WIKI THEME: PAST EVENTS TOGGLE BACKGROUND
177
178### Fix
179- Wiki theme past events pulldown (retracted state) now uses `__background_neu__` (`--cell-today-bg`)
180- Previously used `--cell-bg` which appeared unthemed/white
181
182## Version 6.4.3 (2026-02-11) - WIKI THEME: DAY HEADERS BACKGROUND
183
184### Fix
185- Wiki theme SMTWTFS day headers now use `__background_neu__` (`--cell-today-bg`) instead of `--background-header`
186
187## Version 6.4.2 (2026-02-11) - WIKI THEME: DAY HEADERS (INITIAL)
188
189### Wiki Theme Day Headers
190- Added explicit CSS override for `.calendar-theme-wiki .calendar-day-headers`
191- Day header text uses `--text-primary` (template's `__text__` color)
192
193## Version 6.4.1 (2026-02-11) - WIKI THEME: EVENT HIGHLIGHT
194
195### Fix
196- Wiki theme event highlight (when clicking calendar bar) now uses `themeStyles.header_bg` (`__background_alt__`) instead of hardcoded blue (#dce9f5)
197- Subtle shadow instead of blue glow
198
199## Version 6.4.0 (2026-02-11) - DARK READER: SECTION BAR COLOR MATCHING
200
201### Fix
202- Wiki theme section left bar now uses a `<div>` with `background` instead of `border-left`
203- Dark Reader maps the same color differently for border vs background properties, causing visual mismatch
204- Both the bar and header now use `background`, so Dark Reader maps them identically
205- Flex layout wrapper added for wiki theme sections
206- Wiki fallback colors updated: `border` key now uses `#ccc` (matching `__border__`) instead of `#2b73b7`
207
208## Version 6.3.9 (2026-02-10) - WIKI THEME: SECTION BAR FIX (ATTEMPT)
209
210### Fix
211- Simplified wiki section container — removed `wiki-section-container` class
212- Added `background` from `$themeStyles['bg']` to section container
213
214## Version 6.3.8 (2026-02-10) - WIKI THEME: BUTTON & SECTION HEADER COLORS
215
216### Wiki Theme Buttons
217- Nav buttons (< >), Today button, and panel buttons now use `__link__` color background with white text
218- CSS overrides for `.calendar-theme-wiki .cal-nav-btn`, `.cal-today-btn`, panel buttons
219
220### Wiki Theme Section Headers
221- Today: `__link__` background (accent/link color)
222- Tomorrow: `__background_alt__` background (alternate background)
223- Important: `__border__` background (border color)
224- Each section now has a distinct color from the template palette
225
226## Version 6.3.7 (2026-02-10) - WIKI THEME CHECKBOX FIX
227
228### Fix
229- Wiki theme checkbox override changed from `border-color` to full `border: 2px solid` shorthand
230- Properly overrides the base rule which uses `border` shorthand
231- Hover state also uses full shorthand
232
233## Version 6.3.6 (2026-02-10) - WIKI THEME CHECKBOX BORDER COLOR
234
235### Fix
236- Wiki theme unchecked checkboxes now use `--border-main` (template's `__border__` color) for border
237- Checked state fills with border color
238- Hover state uses border color
239- Applied to calendar, sidebar, and eventlist containers
240
241## Version 6.3.5 (2026-02-10) - WIKI THEME: ALLOW DARK READER ON HEADERS
242
243### Fix
244- Wiki theme section headers (Today/Tomorrow/Important) no longer use `!important` or `-webkit-text-fill-color`
245- Dark Reader can now freely adjust background, text color, and borders on wiki theme headers
246- Clicked-day panel header and section border-left also unlocked for wiki theme
247- All other themes (matrix/purple/pink/professional) retain full Dark Reader protection
248
249## Version 6.3.4 (2026-02-10) - WIKI THEME: BORDER COLOR FOR HEADERS & BADGES
250
251### Wiki Theme Color Remapping
252- `border` (accent color) now maps to template's `__border__` instead of `__link__`
253- This affects: section headers (Today/Tomorrow/Important), badges (TODAY, namespace), sidebar widget border, clicked-day panel, `--border-main` CSS variable
254- `text_bright` still maps to `__link__` for link text and accent text
255- Section headers all use the same `__border__` color for consistent appearance
256- Updated COLOR_SCHEME mapping documentation
257
258## Version 6.3.3 (2026-02-10) - WIKI THEME SECTION HEADER TEXT COLOR
259
260### Fix
261- Wiki theme Today/Tomorrow/Important section header text now uses `$themeStyles['text_primary']` (mapped from template's `__text__` color) instead of hardcoded white
262- Clicked-day panel header text also uses template text color for wiki theme
263- Professional theme remains white text on blue headers
264
265## Version 6.3.2 (2026-02-10) - FIX THEME NOT UPDATING ON SIDEBAR EVENTLIST
266
267### Bug Fix
268- Added `$renderer->nocache()` to the render function
269- DokuWiki was caching the rendered sidebar HTML, so theme changes made in admin were never reflected until the page was manually edited
270- Now all calendar/eventlist/eventpanel outputs are rendered fresh on each page load, picking up the current theme from `calendar_theme.txt`
271
272## Version 6.3.1 (2026-02-10) - EVENTLIST THEMING
273
274### {{eventlist}} Theme Support
275- Eventlist containers now receive theme class (`eventlist-theme-matrix`, etc.) and full CSS variable injection
276- Dark themes get themed border + glow, light themes get subtle border
277- Container background set from `$themeStyles['bg']` with `!important`
278
279### Eventlist CSS Theme Rules (all 3 dark themes)
280- Title, header, time, date, body, links, strong, code, namespace badge, empty state
281- Today header, clock, date — all with `color` + `-webkit-text-fill-color` `!important`
282- Item borders, section backgrounds, code block backgrounds
283- Full Dark Reader protection via same inline+CSS approach as calendar/sidebar
284
285## Version 6.3.0 (2026-02-10) - DARK READER COMPATIBILITY & COMPLETE THEMING
286
287### Dark Reader Browser Extension Compatibility
288All 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.
289
290**Protected elements:**
291- Section headers (Today/Tomorrow/Important) — background, text color, text-fill-color
292- Clicked-day panel header — background, text color, close button
293- All badges (TODAY, PAST DUE, namespace, panel namespace, eventlist-simple) — background, text, text-fill-color
294- Event titles, meta, descriptions — color with !important via CSS
295- Day numbers, nav buttons, calendar day headers — color with !important via CSS
296- System status bars — inline background !important on tracks and fills
297- System tooltips — background, border-color, text color all set via setProperty with !important
298- Section left border bars — border-left with !important
299- Event color indicator bars — border-left-color with !important
300- Sidebar section event text (Purple and Pink themes)
301
302### Complete CSS Variable Audit (41 conversions in v6.1.1)
303- All remaining hardcoded colors in style.css converted to CSS variable references
304- Calendar borders, text colors, backgrounds, input focus shadows, accent borders
305- Only legitimate hardcodes remain (keyframe animations, theme-specific override blocks)
306
307### Semantic Color System
308- New CSS variables: `--pastdue-color`, `--pastdue-bg`, `--pastdue-bg-strong`, `--pastdue-bg-light`
309- New CSS variables: `--tomorrow-bg`, `--tomorrow-bg-strong`, `--tomorrow-bg-light`
310- Injected into all 3 CSS var blocks (full calendar, event panel, sidebar widget)
311- Today/Tomorrow/Important section colors now theme-derived instead of hardcoded
312
313### Section Headers Fully Themed
314- Today/Tomorrow/Important headers use theme accent colors instead of fixed green/orange/purple
315- Matrix: bright/standard/dim green, Purple: bright/standard/dim purple, Pink: hot/medium/light pink
316- Professional: blue shades, Wiki: template-derived colors
317- Dark theme headers use dark background color for text contrast
318
319### Pink Theme Enhancements
320- **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
321- **Firework button hover** — `pink-firework-burst` keyframe animation with multi-point radiating box-shadows, scale/brightness effects on hover, instant flash on click
322- **Checkbox glow** — hot pink border with ambient glow, hover intensifies, checked fills with glow
323
324### All Theme Checkbox Theming
325- Matrix: bright green border + green glow, Purple: purple border + purple glow
326- Pink: hot pink border + pink glow (with enhanced ambient effect)
327- Hover scales 1.1x with intensified glow on all themes
328- Checked state fills with theme accent color + outer glow
329
330### System Tooltips Themed
331- Both tooltip functions use theme-derived colors from `$themeStyles`
332- Green tooltip: `text_bright`, Purple: `border`, Orange: `text_primary`
333- Background from `$themeStyles['bg']`, divider borders use theme accent colors
334- All properties set with `style.setProperty(prop, value, "important")`
335
336### Namespace Filter Badge Cleanup
337- Removed inline namespace badge from event side panel header
338- Filter indicator bar ("Filtering: namespace ✕") retained and working
339- AJAX-based namespace filtering fully functional via onclick handlers
340
341## Version 6.1.0 (2026-02-10) - TODAY INDICATOR, BUTTON HOVER & CHECKBOXES
342
343### Today Indicator
344- **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)
345- **Added:** Today cell has `--cell-today-bg` background AND a visible inset border glow on hover using `--border-main`
346- **Added:** `.day-num` now uses `--text-primary` for color instead of relying on browser default
347
348### Button Hover/Click Theming
349- **Fixed:** All buttons now use `filter: brightness(1.3)` on hover for a visible glow effect across all themes
350- **Fixed:** All buttons use `filter: brightness(0.85)` on click/active for a press-down darkening effect
351- **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
352- **Removed:** Generic `opacity: 0.9` hover which was barely visible on dark themes
353
354### Checkboxes Themed
355- **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
356- **Added:** `accent-color: var(--text-bright)` on all dialog checkboxes (task, recurring) for consistent theme coloring
357
358### Form Input Text
359- **Fixed:** `.input-sleek` now has `color: var(--text-primary)` — form text is visible on dark themes
360- **Added:** `::placeholder` styling for inputs/textareas using `--text-dim`
361
362## Version 6.0.9 (2026-02-09) - FORM TEXT, CELL HOVER & GLOW TUNING
363
364### Form Input Text Fix
365- **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)`.
366- **Added:** Themed placeholder text (`::placeholder`) for inputs/textareas
367
368### Button & Cell Hover Theming
369- **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`
370- **Improved:** Nav buttons (`◄`/`►`) and Today button hover now show a themed glow + scale effect instead of just opacity change
371- **Added:** Active (click) state for nav/today buttons with scale-down feedback
372- **Improved:** Month picker hover now also shows a subtle theme shadow
373
374### Glow Reduced to 1px for Matrix/Purple
375- Matrix and purple text glow reduced from 2px to 1px across: event titles, descriptions, meta, links, sidebar day numbers, sidebar event titles, sidebar dates
376- Matrix clock pulse animation reduced from 6px/10px+15px to 2px/4px+6px
377- Weather text glow reduced to 1px, clock to 2px
378- Pink remains at 2px (barely noticeable)
379
380## Version 6.0.8 (2026-02-09) - LINKS, GLOW CONSISTENCY & PINK TONE-DOWN
381
382### Links Themed
383- **Added:** `.cal-link` CSS class — all links rendered via `renderDescription()` now pick up theme accent color via `--text-bright`
384- **Fixed:** Sidebar widget links (`a.cal-link`) inherit theme colors
385- **Fixed:** Event list widget description links (`eventlist-widget-desc a`) use CSS vars
386- **Fixed:** Simple event list body links/strong/code all themed
387
388### Text Glow Consistency
389- **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
390- **Added:** Subtle link glow on dark themes
391- **Added:** Matrix and purple now get the same barely-visible text glow that pink had on sidebar week grid day numbers and event titles
392
393### Pink Glow Toned Down
394- **Reduced:** Sidebar today header box-shadow from `0 0 10px 0.4` to `0 0 6px 0.25`
395- **Reduced:** Day number sparkle animation from 3px/6px+10px to 2px/3px
396- **Reduced:** Today cell shimmer from 3px+5px / 8px+12px to 2px+3px / 4px+6px
397- **Reduced:** Event bar glow pulse from 2px/4px+6px to 1px/2px+3px
398- **Reduced:** Today hover glow from 10px+15px to 5px+8px
399- **Reduced:** Event item glow from 2px/5px to 1px/3px
400- **Reduced:** Calendar container glow from 8px to 5px
401
402### Other
403- **Themed:** Sidebar weather, date, and clock text colors and glow via CSS vars
404
405## Version 6.0.7 (2026-02-09) - BADGES, BUTTONS & CONFLICT THEMING
406
407- **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
408- **Fixed:** TODAY badge uses `--border-main` for background instead of hardcoded purple
409- **Fixed:** Conflict alert badge (`⚠️`) uses `--border-main` background and `--text-bright` border — matches theme accent
410- **Fixed:** Conflict tooltip header background now set inline from theme vars (tooltip is appended to body, can't inherit CSS vars)
411- **Fixed:** Conflict tooltip body items use themed text and border colors
412- **Fixed:** Month picker Go/Cancel buttons themed (`--text-bright` for save, `--cell-bg` for cancel)
413- **Fixed:** Calendar header month/year hover uses `--cell-today-bg` background
414- **Fixed:** Inline search input border uses `--border-color`
415- **Fixed:** Event list header border uses `--border-color`
416
417## Version 6.0.6 (2026-02-09) - COMPLETE TEXT THEMING
418
419- **Fixed:** Calendar header month/year title had hardcoded dark color — now uses `--text-primary`
420- **Fixed:** Month/year picker hover used hardcoded gray background and green text — now uses `--cell-today-bg` and `--text-bright`
421- **Fixed:** Event list items (titles, meta, descriptions, links, code blocks, bold text) — all now theme-aware via CSS vars
422- **Fixed:** Completed/past event states used hardcoded grays — now use `--cell-bg`, `--text-dim`, `--cell-today-bg`
423- **Fixed:** Scrollbar track/thumb colors now use theme vars
424- **Fixed:** Namespace filter indicator (background, label, badge, close button) — all themed
425- **Fixed:** Panel standalone month picker hover and namespace badge — themed
426- **Fixed:** Calendar header border-bottom — now uses `--border-color`
427
428## Version 6.0.5 (2026-02-09) - THEMED BORDERS & EVENT PANEL
429
430- **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).
431- **Added:** Theme-colored border and glow for event panel (`{{eventpanel}}`) on dark themes using `[data-theme]` attribute selectors
432- **Themed:** Event panel header (nav buttons, month title, today button, search input, add button) — all now use CSS vars
433- **Themed:** Panel standalone header background and border
434
435## Version 6.0.4 (2026-02-09) - FULL DIALOG THEMING
436
437- **Fixed:** Day cell click popup (day-popup) used hardcoded white/gray colors — now fully theme-aware using CSS variables
438- **Fixed:** Event add/edit dialog (dialog-content-sleek) had hardcoded white background and blue header — now uses theme colors
439- **Fixed:** Month picker dialog had hardcoded white background and dark text — now themed
440- **Fixed:** Popup event items, titles, times, descriptions, footer, add-event button, close button — all now use CSS vars with sensible fallbacks
441- **Fixed:** Form elements (field labels, inputs, checkboxes, recurring options, color pickers) — all reference theme CSS vars
442- **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.
443
444## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB
445
446- **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Events Manager and Cleanup sections)
447- **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage tab sections
448- **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now independent of Outlook config save
449- **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value
450
451## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX
452
453- **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.
454
455## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX
456
457- **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()`
458- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller
459- **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.
460
461
462## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE
463
464- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed
465- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified
466- **Audited:** style.css (3,218 lines) — balanced braces confirmed
467- **Audited:** All admin manage tab action handlers verified functional (13 actions)
468- **New:** Fresh README.md for GitHub with complete documentation
469- **Includes all v5.5.x fixes:**
470  - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total))
471  - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel
472  - Conflict badges on past events after AJAX navigation
473  - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal
474
475## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP
476
477- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers
478- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0`
479- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning
480- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name
481- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared
482- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check
483- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving
484- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files
485- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt
486- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache
487- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`)
488- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries`
489- **Removed:** Stale "NEW!" comment from Events Manager section
490
491## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH
492
493- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API
494- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status)
495- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run
496- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing
497- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total)
498- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed
499- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important)
500- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead
501- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text
502- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes)
503
504## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH
505
506- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys
507- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional)
508- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background
509- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files)
510- **Changed:** Wiki theme section header text now white for readability on colored backgrounds
511- **Changed:** Week grid JS theme colors now use actual $themeStyles values
512
513## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX
514
515- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch)
516
517## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING
518
519- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner
520- **Fixed:** Week grid conflict tooltips also fixed (same issue)
521- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data
522- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip)
523
524## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD
525
526- **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)
527
528## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS
529
530- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body)
531- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string
532
533## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING
534
535- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping
536- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON)
537- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute
538- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility
539
540## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING
541
542- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation
543- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads
544- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-)
545- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1
546- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds
547- **Added:** ESC key now also closes day popups and conflict tooltips
548- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding
549
550## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY
551
552- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance
553- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js
554- **Refactored:** style.css is now the single source of truth for all visual styling
555- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container
556- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget)
557- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars
558- **Added:** CSS variable injection for {{eventlist panel}} containers
559- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers
560- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position
561- **Added:** Wiki template mapping reads __link__ as accent color from style.ini
562- **Added:** Detailed CSS variable reference table in style.css header comment
563- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php
564- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles
565- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div
566- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible)
567- **Removed:** $isWikiTheme branching from PHP render path
568
569## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! ��
570
571### �� Added: Hearts in Explosions!
572- **Added:** 8-12 pink hearts in each click explosion
573- **Added:** Random sizes (12-28px) and directions
574- **Result:** Extra love in every click! ��
575
576### �� Fixed: Background CSS Property for Dark Mode Readers
577- **Fixed:** Added `background: transparent` to CSS (was completely removed)
578- **Fixed:** Now CSS readers can detect and modify background property
579- **Why:** Inline styles override transparent, but CSS readers can now see the property
580- **Result:** Dark mode plugins can now change calendar backgrounds!
581
582### The CSS Problem
583
584**Why backgrounds weren't changing with dark mode readers**:
585
586**Before (v5.3.5)**:
587```css
588.calendar-compact-grid tbody td {
589    /* background removed - set via inline style */
590    border: 1px solid...
591}
592```
593
594**Problem**: CSS property doesn't exist!
595- Dark mode readers look for `background` property in CSS
596- Can't override what doesn't exist
597- Inline styles work, but readers can't modify them
598
599**After (v5.3.6)**:
600```css
601.calendar-compact-grid tbody td {
602    background: transparent;  /* Now exists! */
603    border: 1px solid...
604}
605```
606
607**Solution**:
608- Property exists in CSS
609- Dark mode readers can override it
610- Inline styles still override transparent
611- Everyone wins!
612
613### What's Fixed
614
615**Elements now have background property**:
616- `.calendar-compact-grid tbody td` ✓
617- `.calendar-compact-grid tbody td:hover` ✓
618- `.event-compact-item` ✓
619- `.event-compact-item:hover` ✓
620
621**How it works**:
6221. CSS sets `background: transparent` (default)
6232. Inline styles set actual color (overrides transparent)
6243. Dark mode readers can override CSS property
6254. Works for everyone!
626
627### Hearts in Explosion
628
629**Click anywhere → Hearts explode!**
630
631**Heart details**:
632- Count: 8-12 per explosion (random)
633- Size: 12-28px (random variety)
634- Emoji: �� (pink heart)
635- Direction: Random 360°
636- Speed: 60-140px travel
637- Duration: 0.8-1.2s
638- z-index: 9999999 (always visible)
639
640**Combined with**:
641- 25 glowing particles
642- 40 pixel sparkles
643- Bright flash
644- **Total: 73-77 elements!**
645
646### Visual Result
647
648**Click explosion**:
649```
650    �� ✦ • ✦ ��
651  �� •         • ��
652✦  •     ��!     •  ✦
653  �� •         • ��
654    �� ✦ • ✦ ��
655
656Hearts + Particles + Pixels!
657```
658
659**Dark mode now works**:
660```css
661/* Dark mode reader can now do this: */
662.calendar-compact-grid tbody td {
663    background: #000 !important;  /* Works! */
664}
665```
666
667### Why Transparent Works
668
669**CSS Cascade**:
6701. CSS: `background: transparent` (lowest priority)
6712. Inline style: `background: #f5f5f5` (overrides CSS)
6723. Dark mode CSS: `background: #000 !important` (overrides inline)
673
674**Perfect solution!** ✓
675
676## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! ��
677
678### �� Fixed: Particles Now Appear Above All Dialogs!
679- **Fixed:** Increased z-index to 9999999 for all particles
680- **Fixed:** Particles now visible above event dialogs, month picker, etc.
681- **Result:** Cursor effects and explosions always visible!
682
683### The Z-Index Problem
684
685**Before (v5.3.4)**:
686- Particles: z-index 9999
687- Dialogs: z-index 10000-999999
688- **Particles hidden behind dialogs!**
689
690**After (v5.3.5)**:
691- Particles: z-index 9999999
692- Trail: z-index 9999998
693- Pixels: z-index 9999997
694- **Particles ALWAYS on top!**
695
696### What's Fixed
697
698✅ **Main particles** (explosion orbs)
699✅ **Cursor trail** (glowing dots)
700✅ **Pixel sparkles** (tiny bright stars)
701✅ **Flash effect** (click burst)
702
703**All now appear above**:
704- Event dialog popups
705- Month picker
706- Day popups
707- Any modal overlays
708
709### Visual Result
710
711**Moving cursor over dialog**:
712```
713┌─────────────────────┐
714│  Event Dialog       │
715│  ✦ • ✦             │  ← Sparkles visible!
716│    →  ✦             │  ← Cursor trail visible!
717│  • ✦ •              │
718└─────────────────────┘
719```
720
721**Clicking on dialog**:
722```
723┌─────────────────────┐
724│  ✦ • ✦ • ✦         │
725│ •     ��!     •    │  ← Explosion visible!
726│  ✦ • ✦ • ✦         │
727└─────────────────────┘
728```
729
730**Perfect visibility everywhere!** ✨
731
732## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX
733
734### �� Fixed: Month Picker Now Themed!
735- **Fixed:** Jump to Month dialog now uses theme colors
736- **Fixed:** Dialog background, borders, text all themed
737- **Fixed:** Select dropdowns use theme colors
738- **Fixed:** Buttons use theme accent colors
739- **Result:** Month picker matches calendar theme!
740
741### �� Fixed: Cursor Effects Work in Dialogs!
742- **Fixed:** Cursor trail now works when hovering over dialogs
743- **Fixed:** Click explosions work when clicking inside dialogs
744- **Technical:** Changed to capture phase event listeners
745- **Result:** Effects work EVERYWHERE now!
746
747### Month Picker Theming
748
749**Before (v5.3.3)**:
750- White background (hardcoded)
751- Black text (hardcoded)
752- No theme integration
753- Looked out of place
754
755**After (v5.3.4)**:
756- Dialog background: `theme.bg`
757- Dialog border: `theme.border`
758- Text color: `theme.text_primary`
759- Dropdowns: `theme.cell_bg` + `theme.text_primary`
760- Cancel button: `theme.cell_bg`
761- Go button: `theme.border` (accent color)
762
763**Fully integrated!** ✅
764
765---
766
767### Theme Examples
768
769**Matrix Theme**:
770```
771┌─────────────────────────┐
772│ Jump to Month           │ ← Dark bg, green border
773│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
774│ [Cancel] [Go]           │ ← Green "Go" button
775└─────────────────────────┘
776```
777
778**Pink Theme**:
779```
780┌─────────────────────────┐
781│ Jump to Month           │ ← Dark bg, pink border
782│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
783│ [Cancel] [Go]           │ ← Pink "Go" button
784└─────────────────────────┘
785With sparkle effects! ✨
786```
787
788**Professional Theme**:
789```
790┌─────────────────────────┐
791│ Jump to Month           │ ← Clean bg, blue border
792│ [February ▼] [2026 ▼]  │ ← Clean dropdowns
793│ [Cancel] [Go]           │ ← Blue "Go" button
794└─────────────────────────┘
795```
796
797---
798
799### Dialog Cursor Fix
800
801**The Problem**:
802Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects!
803
804**The Solution**:
805Use **capture phase** event listeners:
806```javascript
807// Before (bubbling phase)
808document.addEventListener('click', handler)
809
810// After (capture phase)
811document.addEventListener('click', handler, true)
812813                                   Capture phase!
814```
815
816**Capture phase runs BEFORE stopPropagation!**
817
818---
819
820### Now Works Everywhere
821
822✅ **Calendar area**
823✅ **Event dialogs**
824✅ **Month picker dialog**
825✅ **Day popup dialogs**
826✅ **Anywhere on screen**
827
828**No more blocked effects!** ��
829
830---
831
832### Technical Details
833
834**Event phases**:
835```
8361. Capture phase   ← We listen here now!
8372. Target phase
8383. Bubbling phase  ← stopPropagation blocks this
839```
840
841**By using capture phase**:
842- Events caught before stopPropagation
843- Works in all dialogs
844- No conflicts with dialog logic
845
846---
847
848### All Dialogs Checked
849
850✅ **Month picker** - Now themed!
851✅ **Event dialog** - Already themed
852✅ **Day popup** - Already themed
853
854**Everything consistent!** ��
855
856---
857
858## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨
859
860### ✨ Added: Bright Neon Pixel Sparkles Everywhere!
861- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail
862- **Added:** 40 pixel sparkles in click explosions
863- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar)
864- **Result:** Maximum sparkle effect! ��
865
866### Tiny Pixel Sparkles
867
868**3-6 tiny bright pixels appear with each cursor movement!**
869
870**Characteristics**:
871- Size: 1-2px (single pixel appearance!)
872- Colors: Bright neon whites and pinks
873  - Pure white (#fff) - 40% chance
874  - Hot pink (#ff1493)
875  - Pink (#ff69b4)
876  - Light pink (#ffb6c1)
877  - Soft pink (#ff85c1)
878- Glow: Triple-layer shadow (intense!)
879- Spawn: Random 30px radius around cursor
880- Animations:
881  - 50% twinkle in place
882  - 50% float upward
883
884**Creates a cloud of sparkles around your cursor!**
885
886---
887
888### Click Explosion Enhanced
889
890**Now with 40 EXTRA pixel sparkles!**
891
892**Click anywhere → BIG BOOM**:
893- 25 main glowing particles (6-10px)
894- **40 tiny pixel sparkles (1-2px)** ← NEW!
895- Bright white flash
896- Total: 65+ visual elements!
897
898**Pixel sparkles in explosion**:
899- Shoot outward in all directions
900- Random distances (30-110px)
901- Multiple bright colors
902- Some twinkle, some explode
903- Creates stellar effect!
904
905---
906
907### Entire Screen Coverage
908
909**Effects now work EVERYWHERE!**
910
911**Before (v5.3.2)**:
912- Only inside calendar viewport
913- Limited to calendar area
914
915**After (v5.3.3)**:
916- Works on entire screen! ✓
917- Cursor trail follows everywhere
918- Click explosions anywhere
919- Used `position: fixed` + `clientX/Y`
920
921**Move anywhere on the page for sparkles!**
922
923---
924
925### Visual Effect
926
927**Cursor movement**:
928```
929    • ✦ •       ← Tiny pixels
930  •   ✦   •     ← Glowing trail
931✦  •  →  •  ✦   ← Cursor
932  •   ✦   •     ← Mixed sizes
933    • ✦ •       ← Sparkle cloud
934```
935
936**Click explosion**:
937```
938    ✦ • ✦ • ✦
939  ✦ •         • ✦
940✦  •    ��!    •  ✦
941  ✦ •         • ✦
942    ✦ • ✦ • ✦
943
94465+ particles total!
945```
946
947---
948
949### Sparkle Details
950
951**Trail Pixels** (3-6 per movement):
952- Size: 1-2px
953- Spawn rate: Every 40ms
954- Spread: 30px radius
955- Duration: 0.6-0.8s
956- 50% twinkle, 50% float
957
958**Explosion Pixels** (40 total):
959- Size: 1-3px
960- Spread: 30-110px radius
961- Duration: 0.4-0.8s
962- All directions
963- Intense glow
964
965**Main Particles** (25 total):
966- Size: 4-10px
967- Spread: 50-150px
968- Full color palette
969- Original firework effect
970
971---
972
973### Color Distribution
974
975**Pixel sparkles favor white**:
976- 40% pure white (#fff) - brightest!
977- 60% pink shades - variety
978
979**Creates brilliant sparkle effect!**
980
981---
982
983### Performance
984
985**Still optimized**:
986- Trail: 30ms throttle
987- Pixels: 40ms throttle
988- Auto-cleanup
989- Hardware accelerated
990- Smooth 60fps
991
992**Lots of sparkles, zero lag!**
993
994---
995
996### Full-Screen Magic
997
998**Pink theme calendar detected**:
999```javascript
1000if (pink calendar exists) {
1001    Enable effects for ENTIRE SCREEN
1002    Not just calendar area
1003}
1004```
1005
1006**Works everywhere on page!** ✨
1007
1008---
1009
1010## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! ����
1011
1012### �� Changed: Glowing Pink Particles Instead of Emoji Sparkles!
1013- **Removed:** Emoji sparkle images (✨)
1014- **Added:** Glowing pink particle trail following cursor
1015- **Added:** FIREWORKS explosion on click!
1016- **Result:** Beautiful glowing effects, not emoji!
1017
1018### Glowing Cursor Trail
1019
1020**Pink glowing dots follow your cursor!**
1021- Small glowing pink orbs (8px)
1022- Radial gradient glow effect
1023- Multiple box-shadows for depth
1024- Fade out smoothly (0.5s)
1025- Throttled to 30ms for smoothness
1026
1027```
1028    •  •
1029  •  →  •   ← Your cursor
1030    •  •
1031```
1032
1033**Not emoji - actual glowing particles!**
1034
1035---
1036
1037### Click Fireworks! ��
1038
1039**Click anywhere on the calendar → BOOM!**
1040
1041**20 pink particles explode outward!**
1042- Radial burst pattern (360° coverage)
1043- Random speeds (50-150px travel)
1044- 4 shades of pink:
1045  - Hot pink (#ff1493)
1046  - Pink (#ff69b4)
1047  - Light pink (#ff85c1)
1048  - Very light pink (#ffc0cb)
1049- Random sizes (4-10px)
1050- Individual glowing halos
1051- Smooth explosion animation
1052
1053**Plus a bright flash at click point!**
1054- 30px radius glow
1055- Intense pink flash
1056- Fades quickly (0.3s)
1057
1058---
1059
1060### Visual Effect
1061
1062**Cursor movement**:
1063```
10641065      •  •  •
1066   •     →     •  ← Glowing trail
1067      •  •  •
10681069```
1070
1071**Click explosion**:
1072```
1073         •  •  •
1074      •           •
1075   •      BOOM!      •  ← 20 particles
1076      •           •
1077         •  •  •
1078```
1079
1080**All particles glow with pink halos!**
1081
1082---
1083
1084### Particle Details
1085
1086**Trail Particles**:
1087- Size: 8x8px
1088- Color: Pink radial gradient
1089- Shadow: 10px + 20px glow layers
1090- Duration: 0.5s fade
1091- Rate: 30ms throttle
1092
1093**Explosion Particles**:
1094- Size: 4-10px (random)
1095- Colors: 4 pink shades (random)
1096- Shadow: 10px + 20px glow (matches color)
1097- Duration: 0.6-1.0s (random)
1098- Pattern: Perfect circle burst
1099
1100**Flash Effect**:
1101- Size: 30x30px
1102- Color: Bright hot pink
1103- Shadow: 30px + 50px mega-glow
1104- Duration: 0.3s instant fade
1105
1106---
1107
1108### Performance
1109
1110**Optimized for smoothness**:
1111- Trail throttled to 30ms
1112- Auto-cleanup after animations
1113- CSS hardware acceleration
1114- No memory leaks
1115- Smooth 60fps
1116
1117**Won't slow you down!**
1118
1119---
1120
1121### Comparison
1122
1123**Before (v5.3.1)**:
1124- ✨ Emoji sparkle images
1125- Static unicode characters
1126- Limited visual impact
1127
1128**After (v5.3.2)**:
1129- �� Glowing pink particles
1130- Radial gradients + shadows
1131- Beautiful firework explosions
1132- Much more impressive!
1133
1134---
1135
1136### Only Pink Theme
1137
1138**These effects only appear**:
1139- On `.calendar-theme-pink` elements
1140- Other themes unaffected
1141- Pure pink magic! ��
1142
1143---
1144
1145## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨
1146
1147### ✨ Added: MySpace-Style Sparkle Trail!
1148- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!)
1149- **Toned down:** Reduced glow effects for better taste
1150- **Added:** Sparkles appear on cell hover
1151- **Added:** Sparkles on event hover (left and right sides!)
1152- **Added:** Sparkles on today's cell corners
1153- **Added:** Sparkles on navigation buttons
1154- **Added:** Sparkles in calendar header
1155- **Result:** Pure nostalgic MySpace magic! ✨
1156
1157### MySpace Sparkle Cursor Trail
1158
1159**The classic effect from 2006!**
1160- Sparkles follow your cursor as you move
1161- Random sizes (12-22px)
1162- Random slight offsets for natural feel
1163- Float up and fade out animation
1164- Throttled to 50ms (smooth, not laggy)
1165- Only on pink theme calendars
1166
1167```
11681169  ✨    ✨
1170✨   →   ✨  (cursor trail)
1171  ✨    ✨
11721173```
1174
1175**Pure nostalgia!**
1176
1177---
1178
1179### Sparkles Everywhere
1180
1181**Calendar cells**:
1182- Hover over any day → ✨ floats up
1183- Smooth 1.5s animation
1184- Centered sparkle
1185
1186**Event items**:
1187- Hover → ✨ on left side
1188- Hover → ✨ on right side
1189- Staggered animations (0.4s delay)
1190- Continuous twinkling
1191
1192**Today's cell**:
1193- ✨ in top-right corner (continuous)
1194- ✨ in bottom-left corner (offset timing)
1195- Always sparkling!
1196
1197**Navigation buttons**:
1198- Hover on < or > → ✨ appears top-right
1199- One-time float animation
1200
1201**Calendar header**:
1202- ✨ on left side (continuous)
1203- ✨ on right side (offset 1s)
1204- Always twinkling
1205
1206---
1207
1208### Toned Down Glows
1209
1210**Before (v5.3.0)**: TOO MUCH GLOW!
1211- 50px shadows
1212- 4-layer effects
1213- Overwhelming
1214
1215**After (v5.3.1)**: Just right!
1216- 8-15px max shadows (subtle)
1217- 2-layer effects
1218- Professional with personality
1219
1220**Glow reductions**:
1221- Today shimmer: 35px → 12px
1222- Today hover: 50px → 15px
1223- Event glow: 18px → 6px
1224- Badge pulse: 25px → 8px
1225- Container glow: 20px → 8px
1226
1227**Much more tasteful!**
1228
1229---
1230
1231### Sparkle Animations
1232
1233**sparkle-twinkle** (0.8s):
1234```
1235Opacity: 0 → 1 → 1 → 0
1236Scale: 0 → 1 → 1 → 0
1237Rotation: 0° → 180° → 360°
1238```
1239
1240**sparkle-float** (1.5s):
1241```
1242Moves up: 0px → -50px
1243Opacity: 0 → 1 → 1 → 0
1244Scale: 0 → 1 → 0.8 → 0
1245```
1246
1247**Pure MySpace magic!** ✨
1248
1249---
1250
1251### Where Sparkles Appear
1252
1253✅ **Cursor trail** (continuous while moving)
1254✅ **Calendar cells** (on hover)
1255✅ **Event items** (on hover, left + right)
1256✅ **Today's cell** (continuous, corners)
1257✅ **Navigation buttons** (on hover)
1258✅ **Calendar header** (continuous, sides)
1259
1260**Sparkles EVERYWHERE!** ✨✨✨
1261
1262---
1263
1264### Performance
1265
1266**Cursor trail**:
1267- Throttled to 50ms
1268- Auto-cleanup after 1s
1269- No memory leaks
1270- Smooth 60fps
1271
1272**CSS animations**:
1273- Hardware accelerated
1274- No JavaScript overhead (except cursor)
1275- Efficient transforms
1276
1277**Won't slow down your browser!**
1278
1279---
1280
1281### Pure Nostalgia
1282
1283**Remember MySpace profiles?**
1284- Glitter graphics ✨
1285- Sparkle cursors ✨
1286- Auto-play music �� (ok, we didn't add that)
1287- Animated GIF backgrounds
1288- Comic Sans everywhere
1289
1290**We brought back the sparkles!** ✨
1291
1292---
1293
1294### Theme Comparison
1295
1296**Other themes**: Professional and clean
1297**Pink theme**: ✨ SPARKLES EVERYWHERE ✨
1298
1299**Only pink theme gets the magic!**
1300
1301---
1302
1303## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨��
1304
1305### �� Added: Pink Theme Gets BLING!
1306- **Added:** Shimmering animation for today's cell
1307- **Added:** Sparkling text effect on today's date
1308- **Added:** Glowing pulse for event bars
1309- **Added:** Gradient shimmer on headers
1310- **Added:** Extra glow on hover effects
1311- **Added:** Pulsing urgent badge for past due items
1312- **Result:** Pink theme is now FABULOUS! ✨
1313
1314### Shimmer Effects
1315
1316**Today's Cell**:
1317- Continuous shimmer animation (2 second loop)
1318- Multi-layer glow effect
1319- Pink and hot pink overlapping shadows
1320- Pulses from subtle to intense
1321- Extra sparkle on hover
1322
1323**Today's Date Number**:
1324- Sparkle animation (1.5 second loop)
1325- Text shadow glow effect
1326- Slight scale pulse (100% → 105%)
1327- Pink to hot pink shadow transition
1328
1329### Glow Effects
1330
1331**Event Bars**:
1332- Continuous glow pulse (2 second loop)
1333- Uses event's own color
1334- Adds pink accent glow layer
1335- Creates depth and dimension
1336
1337**Event Items**:
1338- Subtle base glow
1339- Enhanced glow on hover
1340- Slight slide animation on hover
1341- Professional yet playful
1342
1343### Gradient Shimmer
1344
1345**Headers**:
1346- Animated gradient background
1347- 3-color pink gradient flow
1348- Smooth 3-second animation
1349- Creates movement and life
1350- Applies to calendar header and event list header
1351
1352### Badge Effects
1353
1354**TODAY Badge**:
1355- Sparkle animation
1356- Synchronized with today's date
1357- Extra prominence
1358
1359**PAST DUE Badge**:
1360- Urgent pulsing effect (1 second loop)
1361- Orange glow intensifies
1362- Draws attention to urgent items
1363- Faster pulse for urgency
1364
1365### Container Bling
1366
1367**Main Container**:
1368- Multi-layer pink glow
1369- Soft outer shadow
1370- Creates floating effect
1371- Subtle but elegant
1372
1373### Animation Details
1374
1375**pink-shimmer** (2s loop):
1376```
1377Start: Subtle 5px glow
1378Peak:  Intense 35px multi-layer glow
1379End:   Back to subtle
1380```
1381
1382**pink-sparkle** (1.5s loop):
1383```
1384Start: Base glow + scale 1.0
1385Peak:  Intense glow + scale 1.05
1386End:   Back to base
1387```
1388
1389**pink-glow-pulse** (2s loop):
1390```
1391Start: Small glow (3px, 6px)
1392Peak:  Large glow (6px, 12px, 18px)
1393End:   Back to small
1394```
1395
1396**pink-gradient-shimmer** (3s loop):
1397```
1398Gradient flows across element
1399Creates wave effect
1400Smooth continuous motion
1401```
1402
1403**pink-pulse-urgent** (1s loop - faster!):
1404```
1405Start: Orange glow 5px
1406Peak:  Orange glow 25px (intense)
1407End:   Back to 5px
1408```
1409
1410### Visual Experience
1411
1412**Today's Cell**:
1413```
1414┌──┬──┬──┬──┬──┬──┬──┐
1415│  │  │ ✨ │  │  │  │  │  ← Shimmers constantly
1416│  │  │[9]│  │  │  │  │  ← Sparkles
1417│  │  │ ✨ │  │  │  │  │  ← Glows and pulses
1418└──┴──┴──┴──┴──┴──┴──┘
1419```
1420
1421**Event Bars**:
1422```
1423━━━━━━━  ← Glows and pulses
1424━━━━━━━  ← Each bar animated
1425━━━━━━━  ← Creates rhythm
1426```
1427
1428**Headers**:
1429```
1430╔═════════════════════╗
1431║ ~~~~~~~~~~ ║  ← Gradient flows
1432║   February 2026     ║  ← Shimmer effect
1433╚═════════════════════╝
1434```
1435
1436### Theme Comparison
1437
1438**Before (v5.2.8)**:
1439- Pink colors
1440- Static elements
1441- Standard shadows
1442
1443**After (v5.3.0)**:
1444- Pink colors ✓
1445- Animated shimmer ✨
1446- Sparkling effects ��
1447- Glowing pulses ✨
1448- Moving gradients ��
1449- BLING! ��
1450
1451### Performance
1452
1453**All animations**:
1454- Hardware accelerated (transform, opacity)
1455- Smooth 60fps
1456- CSS animations (no JavaScript)
1457- Minimal CPU usage
1458- Disabled in reduced-motion preference
1459
1460### Only for Pink Theme
1461
1462**Effects only apply when**:
1463```css
1464.calendar-theme-pink
1465```
1466
1467**Other themes unaffected**:
1468- Matrix stays Matrix
1469- Professional stays Professional
1470- Purple stays Purple
1471- Wiki stays clean
1472
1473**Pink gets all the bling!** ✨��
1474
1475### Use Cases
1476
1477**Perfect for**:
1478- Celebrating occasions
1479- Fun team calendars
1480- Personal style expression
1481- Standing out
1482- Making calendar time fabulous
1483
1484**Not just pink, but BLING pink!** ��✨
1485
1486## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS
1487
1488### �� Fixed: Today's Date Box Now Uses Theme Colors
1489- **Fixed:** Today's day number box now uses theme border color
1490- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light)
1491- **Result:** Today box matches the theme perfectly!
1492
1493### The Issue
1494
1495Today's date had a hardcoded green box:
1496
1497**In style.css**:
1498```css
1499.cal-today .day-num {
1500    background: #008800;  /* Hardcoded green! */
1501    color: white;
1502}
1503```
1504
1505**Didn't adapt to themes at all!**
1506
1507### The Fix
1508
1509**Now uses theme colors**:
1510```php
1511// Today's day number
1512if ($isToday) {
1513    background: $themeStyles['border'],  // Theme's accent color!
1514    color: (professional theme) ? white : bg color
1515}
1516```
1517
1518### Theme Examples
1519
1520**Matrix Theme**:
1521- Box background: `#00cc07` (matrix green)
1522- Text color: `#242424` (dark background)
1523
1524**Purple Theme**:
1525- Box background: `#9b59b6` (purple)
1526- Text color: `#2a2030` (dark background)
1527
1528**Professional Theme**:
1529- Box background: `#4a90e2` (blue)
1530- Text color: `#ffffff` (white text)
1531
1532**Pink Theme**:
1533- Box background: `#ff1493` (hot pink)
1534- Text color: `#1a0d14` (dark background)
1535
1536**Wiki Theme**:
1537- Box background: Template's `__border__` color
1538- Text color: Template's `__background_site__` color
1539
1540### Visual Result
1541
1542**Matrix Theme**:
1543```
1544┌──┬──┬──┬──┬──┬──┬──┐
1545│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1546└──┴──┴──┴──┴──┴──┴──┘
15471548    Green box (#00cc07)
1549```
1550
1551**Professional Theme**:
1552```
1553┌──┬──┬──┬──┬──┬──┬──┐
1554│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1555└──┴──┴──┴──┴──┴──┴──┘
15561557    Blue box (#4a90e2)
1558```
1559
1560**Wiki Theme**:
1561```
1562┌──┬──┬──┬──┬──┬──┬──┐
1563│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1564└──┴──┴──┴──┴──┴──┴──┘
15651566    Template border color
1567```
1568
1569### Implementation
1570
1571**Inline styles added**:
1572- Background uses `$themeStyles['border']` (theme accent)
1573- Text color uses `$themeStyles['bg']` for contrast
1574- Special case: Professional theme uses white text
1575- All with `!important` to override CSS
1576
1577**CSS cleaned up**:
1578- Removed hardcoded `#008800` background
1579- Removed hardcoded `white` color
1580- Kept structural styles (border-radius, font-weight)
1581
1582### Benefits
1583
1584**Theme Consistency**:
1585- Today box matches theme accent color
1586- Proper contrast with background
1587- Professional appearance
1588
1589**Automatic Adaptation**:
1590- Works with all themes
1591- Works with custom wiki template colors
1592- No manual adjustment needed
1593
1594**Visual Harmony**:
1595- Border color used throughout theme
1596- Today box reinforces theme identity
1597- Consistent design language
1598
1599## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH
1600
1601### �� Fixed: Table Grid Background Now Matches Cells
1602- **Found:** `grid_bg` was using `__background_alt__` (different from cells!)
1603- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells)
1604- **Result:** Table background no longer shows through cells!
1605
1606### The Layer Problem
1607
1608The table itself had a DIFFERENT background color than its cells!
1609
1610**Before (v5.2.6)**:
1611```php
1612'grid_bg' => __background_alt__,     // Table background (#e8e8e8)
1613'cell_bg' => __background_site__,    // Cell background (#f5f5f5)
1614```
1615
1616**The table background was showing THROUGH the cells!**
1617
1618### Why This Happened
1619
1620**Visual layers**:
1621```
1622Table Element
1623├─ background: __background_alt__ (#e8e8e8)  ← Different!
1624└─ Cells
1625    └─ background: __background_site__ (#f5f5f5)  ← Different!
1626
1627The table background shows through any gaps!
1628```
1629
1630### The Fix
1631
1632**After (v5.2.7)**:
1633```php
1634'grid_bg' => __background_site__,    // Table background (#f5f5f5) ✓
1635'cell_bg' => __background_site__,    // Cell background (#f5f5f5) ✓
1636```
1637
1638**NOW THEY MATCH!**
1639
1640### Where grid_bg Is Used
1641
1642The table element itself:
1643```html
1644<table style="background: __background_alt__">  ← Was showing through!
1645    <tbody>
1646        <tr>
1647            <td style="background: __background_site__">1</td>
1648        </tr>
1649    </tbody>
1650</table>
1651```
1652
1653Even with cell inline styles, the TABLE background shows through!
1654
1655### All Background Sources Now Unified
1656
1657**Everything now uses __background_site__**:
1658- `bg` → __background_site__ ✓
1659- `header_bg` → __background_site__ ✓
1660- `grid_bg` → __background_site__ ✓ (JUST FIXED!)
1661- `cell_bg` → __background_site__ ✓
1662
1663**Perfect consistency!** ��
1664
1665### Why It Was Different
1666
1667**Originally the grid was meant to show borders**:
1668- `grid_bg` was `__background_alt__` (slightly different)
1669- Created visual separation between cells
1670- But with transparent/thin cells, it showed through!
1671
1672**Now unified for consistency!**
1673
1674### Visual Result
1675
1676**Before (layers visible)**:
1677```
1678┌─────────────────┐
1679│ Grid (#e8e8e8)  │ ← Showing through!
1680│  ┌──┬──┬──┐     │
1681│  │  │  │  │     │ ← Cells (#f5f5f5)
1682│  └──┴──┴──┘     │
1683└─────────────────┘
1684```
1685
1686**After (unified)**:
1687```
1688┌─────────────────┐
1689│ Grid (#f5f5f5)  │ ← Same color!
1690│  ┌──┬──┬──┐     │
1691│  │  │  │  │     │ ← Cells (#f5f5f5)
1692│  └──┴──┴──┘     │
1693└─────────────────┘
1694Perfect match!
1695```
1696
1697### Complete Background Mapping
1698
1699**All using __background_site__ now**:
1700- Main container background
1701- Left panel background
1702- Right panel background
1703- Eventlist background
1704- Calendar grid background ← JUST FIXED
1705- Calendar cell backgrounds
1706- Event item backgrounds
1707- Clock header background
1708- Search input background
1709- Past events toggle
1710
1711**EVERYTHING UNIFIED!** ��
1712
1713## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS
1714
1715### �� Fixed: Removed Container Backgrounds Showing Through
1716- **Found:** `.calendar-compact-container` had `background: #ffffff;`
1717- **Found:** `.calendar-compact-left` had `background: #fafafa;`
1718- **Found:** `.calendar-compact-right` had `background: #ffffff;`
1719- **Found:** `.event-search-input-inline` had `background: white;`
1720- **Found:** `.past-events-toggle` had `background: #f5f5f5;`
1721- **Result:** Container backgrounds no longer show through cells!
1722
1723### The Container Problem
1724
1725The parent containers had hardcoded backgrounds that were showing through!
1726
1727**Container backgrounds (lines 4-91)**:
1728```css
1729.calendar-compact-container {
1730    background: #ffffff;  /* ← Main container! */
1731}
1732
1733.calendar-compact-left {
1734    background: #fafafa;  /* ← Left panel (calendar side)! */
1735}
1736
1737.calendar-compact-right {
1738    background: #ffffff;  /* ← Right panel (events side)! */
1739}
1740```
1741
1742**These were showing through the cells and events!**
1743
1744### Why Containers Matter
1745
1746Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through:
1747
1748```
1749Container (#fafafa)           ← Showing through!
1750   └─ Table Cell (#f5f5f5)    ← Transparent areas
1751      └─ Content
1752```
1753
1754### All Backgrounds Removed
1755
1756**v5.2.6 removes**:
1757- `.calendar-compact-container` background
1758- `.calendar-compact-left` background
1759- `.calendar-compact-right` background
1760- `.event-search-input-inline` background
1761- `.past-events-toggle` background & hover
1762
1763**v5.2.5 removed**:
1764- `.calendar-compact-grid tbody td` background
1765- `.calendar-compact-grid thead th` background
1766
1767**v5.2.4 removed**:
1768- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds
1769
1770**v5.2.3 removed**:
1771- `.event-compact-item` background
1772
1773**ALL container and element backgrounds eliminated!** ��
1774
1775### What Should Work Now
1776
1777**Calendar cells**: No container background showing through ✓
1778**Event items**: No container background showing through ✓
1779**Search bar**: Uses template color ✓
1780**Past events toggle**: Uses template color ✓
1781
1782### Complete List of Fixes
1783
1784**Containers**:
1785- Main container ✓
1786- Left panel ✓
1787- Right panel ✓
1788
1789**Elements**:
1790- Table cells ✓
1791- Event items ✓
1792- Search input ✓
1793- Past events toggle ✓
1794
1795**EVERYTHING removed!** ��
1796
1797### Critical: Clear Caches
1798
1799**Must clear caches or won't work**:
18001. Hard refresh: Ctrl+Shift+R (5 times!)
18012. Clear DokuWiki cache
18023. Close browser completely
18034. Reopen and test
1804
1805**CSS caching is EXTREMELY persistent!**
1806
1807## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS
1808
1809### �� Fixed: Removed Hardcoded Backgrounds from Table Cells
1810- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`!
1811- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`!
1812- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`!
1813- **Fixed:** Removed ALL hardcoded backgrounds from table CSS
1814- **Result:** Calendar table cells finally use template colors!
1815
1816### The REAL Culprits
1817
1818The generic table CSS was overriding everything!
1819
1820**In style.css (lines 307-356)**:
1821```css
1822.calendar-compact-grid thead th {
1823    background: #f8f8f8;  /* ← Header cells hardcoded! */
1824}
1825
1826.calendar-compact-grid tbody td {
1827    background: #ffffff;  /* ← ALL table cells hardcoded! */
1828}
1829
1830.calendar-compact-grid tbody td:hover {
1831    background: #f0f7ff;  /* ← Hover state hardcoded! */
1832}
1833```
1834
1835**These apply to ALL `<td>` and `<th>` elements in the calendar table!**
1836
1837### Why This Was the Last One
1838
1839**CSS Specificity Order**:
18401. `.calendar-compact-grid tbody td` (generic - applies to ALL cells)
18412. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells)
18423. Inline styles (should win but didn't)
1843
1844**We removed the specific ones (v5.2.4), but the generic one was still there!**
1845
1846### What We've Removed
1847
1848**v5.2.3**:
1849- `.event-compact-item` background
1850- `.event-compact-item:hover` background
1851
1852**v5.2.4**:
1853- `.cal-empty` background & hover
1854- `.cal-today` background & hover
1855- `.cal-has-events` background & hover
1856
1857**v5.2.5 (FINAL)**:
1858- `.calendar-compact-grid tbody td` background ✓
1859- `.calendar-compact-grid tbody td:hover` background ✓
1860- `.calendar-compact-grid thead th` background ✓
1861
1862**All CSS background overrides ELIMINATED!** ��
1863
1864### Why It Took 5 Versions
1865
1866**CSS had layers of hardcoded backgrounds**:
1867
1868```
1869Layer 1: Table cells (.calendar-compact-grid tbody td)
1870         ↓ Overrode inline styles
1871Layer 2: Cell states (.cal-today, .cal-empty, etc.)
1872         ↓ Overrode table cells
1873Layer 3: Event items (.event-compact-item)
1874         ↓ Overrode inline styles
1875
1876ALL had to be removed!
1877```
1878
1879**We kept finding more specific CSS, but the base table CSS was there all along!**
1880
1881### Visual Result
1882
1883**NOW everything matches**:
1884```
1885Calendar Table:
1886┌──┬──┬──┬──┬──┬──┬──┐
1887│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__
1888├──┼──┼──┼──┼──┼──┼──┤
1889│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__
1890├──┼──┼──┼──┼──┼──┼──┤
1891│ 8│ 9│10│11│12│13│14│ ← All: __background_site__
1892└──┴──┴──┴──┴──┴──┴──┘
1893
1894Sidebar Events:
1895┌────────────────────────┐
1896│ �� Event               │ ← __background_site__
1897│ �� Event               │ ← __background_site__
1898└────────────────────────┘
1899
1900FINALLY ALL MATCHING! ✓
1901```
1902
1903### Complete List of Removed CSS
1904
1905**ALL hardcoded backgrounds removed**:
1906- `.event-compact-item` background
1907- `.event-compact-item:hover` background
1908- `.cal-empty` background & hover
1909- `.cal-today` background & hover
1910- `.cal-has-events` background & hover
1911- `.calendar-compact-grid tbody td` background ← NEW
1912- `.calendar-compact-grid tbody td:hover` background ← NEW
1913- `.calendar-compact-grid thead th` background ← NEW
1914
1915**Every single CSS background override is GONE!** ��
1916
1917### Testing Steps
1918
1919**After installing v5.2.5**:
1920
19211. **Clear browser cache**: Ctrl+Shift+R (3 times!)
19222. **Clear DokuWiki cache**: Click the button
19233. **Close browser completely**: Restart it
19244. **Visit page**: Should finally see matching backgrounds
1925
1926**CSS is EXTREMELY sticky - may need to clear multiple times!**
1927
1928### This Should Be It
1929
1930**No more CSS overrides exist** (we've checked the entire file):
1931- Table cells ✓ Fixed
1932- Cell states ✓ Fixed
1933- Event items ✓ Fixed
1934- Headers ✓ Fixed
1935- Hover states ✓ Fixed
1936
1937**All backgrounds now come from inline styles using template colors!**
1938
1939## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS
1940
1941### �� Fixed: Removed Hardcoded Backgrounds from Calendar Cells
1942- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`!
1943- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS
1944- **Result:** Calendar cells now use template colors!
1945
1946### The Second Culprit
1947
1948MORE hardcoded backgrounds in the CSS file!
1949
1950**In style.css (lines 359-382)**:
1951```css
1952.cal-empty {
1953    background: #fafafa !important;  /* ← Overriding inline styles! */
1954}
1955
1956.cal-today {
1957    background: #e8f5e9 !important;  /* ← Overriding today cell! */
1958}
1959
1960.cal-today:hover {
1961    background: #c8e6c9 !important;  /* ← Overriding hover! */
1962}
1963
1964.cal-has-events {
1965    background: #fffbf0;  /* ← Overriding event cells! */
1966}
1967
1968.cal-has-events:hover {
1969    background: #fff4d9;  /* ← Overriding hover! */
1970}
1971```
1972
1973**These were ALL overriding the inline styles!**
1974
1975### The Fix
1976
1977**Removed all hardcoded backgrounds**:
1978```css
1979.cal-empty {
1980    /* background removed - inline style handles this */
1981    cursor: default !important;
1982}
1983
1984.cal-today {
1985    /* background removed - inline style handles this */
1986}
1987
1988.cal-has-events {
1989    /* background removed - inline style handles this */
1990}
1991
1992/* Hover states also removed */
1993```
1994
1995### What Was Overridden
1996
1997**v5.2.3 fixed**:
1998- Event items in sidebar ✓
1999
2000**v5.2.4 fixes**:
2001- Calendar day cells ✓
2002- Today cell ✓
2003- Empty cells ✓
2004- Cells with events ✓
2005- All hover states ✓
2006
2007### Why This Kept Happening
2008
2009**CSS had hardcoded backgrounds everywhere**:
20101. Event items: `#ffffff` (fixed in v5.2.3)
20112. Calendar cells: Multiple colors (fixed in v5.2.4)
20123. **All with `!important` flags!**
2013
2014**The inline styles couldn't override them!**
2015
2016### Visual Result
2017
2018**Now ALL backgrounds match**:
2019```
2020Calendar Grid:
2021┌──┬──┬──┬──┬──┬──┬──┐
2022│  │  │  │  │  │  │  │ ← All use __background_site__
2023├──┼──┼──┼──┼──┼──┼──┤
2024│  │██│  │  │  │  │  │ ← Today uses __background_neu__
2025├──┼──┼──┼──┼──┼──┼──┤
2026│  │  │  │  │  │  │  │ ← All match template
2027└──┴──┴──┴──┴──┴──┴──┘
2028
2029Sidebar Events:
2030┌────────────────────────┐
2031│ �� Event               │ ← Uses __background_site__
2032│ �� Event               │ ← Uses __background_site__
2033└────────────────────────┘
2034
2035Perfect consistency!
2036```
2037
2038### CSS Removed
2039
2040**Calendar cells**:
2041- `.cal-empty` background
2042- `.cal-empty:hover` background
2043- `.cal-today` background
2044- `.cal-today:hover` background
2045- `.cal-has-events` background
2046- `.cal-has-events:hover` background
2047
2048**All gone!** ✓
2049
2050### Important: Clear Caches Again!
2051
2052After installing v5.2.4:
2053
20541. **Hard refresh browser**: Ctrl+Shift+R (twice!)
20552. **Clear DokuWiki cache**: Admin → Clear Cache
20563. **May need to restart browser**: To clear CSS cache
2057
2058**Old CSS is VERY sticky!**
2059
2060### Why It Took So Long
2061
2062**Multiple CSS overrides**:
2063- Event items (v5.2.3) ✓ Fixed
2064- Calendar cells (v5.2.4) ✓ Fixed
2065- Each with different classes
2066- Each with `!important`
2067- Hidden throughout CSS file
2068
2069**Found them all now!** ��
2070
2071## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS
2072
2073### �� Fixed: Removed Hardcoded Backgrounds from CSS
2074- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles!
2075- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS
2076- **Result:** Event backgrounds now properly use template colors!
2077
2078### The Root Cause
2079
2080The CSS file was overriding the inline styles with hardcoded white backgrounds!
2081
2082**In style.css (lines 599-616)**:
2083```css
2084.event-compact-item {
2085    background: #ffffff;  /* ← This was overriding inline styles! */
2086}
2087
2088.event-compact-item:hover {
2089    background: #f8f9fa;  /* ← And this on hover! */
2090}
2091```
2092
2093**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade!
2094
2095### The Fix
2096
2097**Removed hardcoded backgrounds from CSS**:
2098```css
2099.event-compact-item {
2100    /* background removed - set via inline style with template colors */
2101    display: flex;
2102    /* ... other styles ... */
2103}
2104
2105.event-compact-item:hover {
2106    box-shadow: 0 1px 3px rgba(0,0,0,0.08);
2107    /* background removed - inline style handles this */
2108}
2109```
2110
2111### Why This Was So Difficult to Find
2112
2113**CSS Specificity & Cascade**:
21141. Inline styles with `!important` should win
21152. But CSS that comes after can still apply
21163. The hardcoded `background: #ffffff` was silently overriding
21174. All the PHP code was correct - it was the CSS!
2118
2119**What We Were Doing**:
2120- ✓ Reading template colors correctly
2121- ✓ Setting `cell_bg` to `__background_site__` correctly
2122- ✓ Applying inline styles with `!important` correctly
2123- ✗ CSS file was overriding everything!
2124
2125### What Was Affected
2126
2127**Event items in**:
2128- Main calendar sidebar
2129- Standalone event list
2130- Sidebar widget
2131- All event displays
2132
2133**All had white backgrounds hardcoded in CSS!**
2134
2135### Now Working
2136
2137**Events use template colors**:
2138```html
2139<div class="event-compact-item"
2140     style="background: #f5f5f5 !important; ...">
2141    ← Now this inline style actually works!
2142</div>
2143```
2144
2145**No CSS override** ✓
2146
2147### Testing
2148
2149To verify this works:
21501. Clear browser cache (important!)
21512. Clear DokuWiki cache
21523. Reload page
21534. Events should now match eventlist background
2154
2155**Browser caching can make old CSS persist!**
2156
2157### Visual Result
2158
2159**All backgrounds now matching**:
2160```
2161┌────────────────────────────┐
2162│ Eventlist (#f5f5f5)        │ ← Template color
2163├────────────────────────────┤
2164│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
2165├────────────────────────────┤
2166│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
2167└────────────────────────────┘
2168
2169Perfect match!
2170```
2171
2172### Why Everything Else Worked
2173
2174**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds:
2175- They only had inline styles ✓
2176- Inline styles worked correctly ✓
2177- Only event items had the CSS override ✗
2178
2179### Important Notes
2180
2181**Clear caches**:
2182- Browser cache (Ctrl+Shift+R or Cmd+Shift+R)
2183- DokuWiki cache (Admin → Clear Cache)
2184- Old CSS may be cached!
2185
2186**This was the culprit all along!**
2187
2188## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND
2189
2190### �� Fixed: Clock Area Now Matches Event Cells
2191- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`)
2192- **Result:** Clock/Today header matches event cell backgrounds!
2193
2194### The Issue
2195
2196The clock area (Today header) was using a different background:
2197
2198**Before (v5.2.1)**:
2199```php
2200'header_bg' => __background_alt__,   // Different color (gray #e8e8e8)
2201'cell_bg' => __background_site__,    // Event cells (#f5f5f5)
2202```
2203
2204**After (v5.2.2)**:
2205```php
2206'header_bg' => __background_site__,  // Same as cells (#f5f5f5) ✓
2207'cell_bg' => __background_site__,    // Event cells (#f5f5f5) ✓
2208```
2209
2210### What's the Clock Area?
2211
2212The clock/Today header in the sidebar:
2213```
2214┌────────────────────────────┐
2215│ 3:45:23 PM                 │ ← Clock area (header_bg)
2216│ ��️ --° | Sun, Feb 9, 2026 │
2217└────────────────────────────┘
2218```
2219
2220### All Backgrounds Now Unified
2221
2222**Everything now uses __background_site__**:
2223- Eventlist background ✓
2224- Calendar cells ✓
2225- Event items ✓
2226- Clock/Today header ✓
2227- Sidebar widget ✓
2228- All backgrounds match! ✓
2229
2230### Visual Result
2231
2232**Complete consistency**:
2233```
2234┌────────────────────────────┐
2235│ 3:45:23 PM                 │ ← Same background
2236│ ��️ --° | Sun, Feb 9, 2026 │
2237├────────────────────────────┤
2238│ �� Meeting at 2pm          │ ← Same background
2239│ Description...             │
2240├────────────────────────────┤
2241│ �� Another event           │ ← Same background
2242│ More details...            │
2243└────────────────────────────┘
2244
2245All using __background_site__ (#f5f5f5)
2246```
2247
2248**Perfect visual harmony!** ��
2249
2250## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND
2251
2252### �� Fixed: Calendar Cells Now Match Eventlist Background
2253- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`)
2254- **Result:** Calendar cells now match the eventlist background perfectly!
2255
2256### The Real Issue
2257
2258The eventlist was showing the CORRECT background color all along!
2259
2260**Eventlist was using**:
2261- `bg` → `__background_site__` ✓ (This was correct!)
2262
2263**Calendar cells were using**:
2264- `cell_bg` → `__background__` ✗ (This was wrong!)
2265
2266**They didn't match!**
2267
2268### The Correct Fix
2269
2270**Now everything uses __background_site__**:
2271```php
2272'bg' => __background_site__,        // Eventlist (was already correct)
2273'cell_bg' => __background_site__,   // Cells (now fixed to match)
2274```
2275
2276### Why __background_site__?
2277
2278The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background:
2279
2280```
2281Page Layout:
2282┌────────────────────────────────────┐
2283│ __background_site__ (page bg)     │ ← This is where calendar lives
2284│                                    │
2285│  ┌──────────────────────────────┐ │
2286│  │ __background__ (content bg)  │ │ ← Wiki article content
2287│  │                              │ │
2288│  └──────────────────────────────┘ │
2289│                                    │
2290└────────────────────────────────────┘
2291```
2292
2293**Calendar should match the page background, not the content background!**
2294
2295### Template Example
2296
2297Typical DokuWiki template:
2298```ini
2299__background_site__ = "#f5f5f5"  (Light gray - page background)
2300__background__ = "#ffffff"        (White - content area)
2301```
2302
2303**Before (v5.2.0)**:
2304- Eventlist: `#f5f5f5` (light gray) ✓ Correct
2305- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match
2306
2307**After (v5.2.1)**:
2308- Eventlist: `#f5f5f5` (light gray) ✓ Correct
2309- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED!
2310
2311### All Backgrounds Now Unified
2312
2313**Everything now uses __background_site__**:
2314- Eventlist sidebar background ✓
2315- Main calendar background ✓
2316- Calendar day cells ✓
2317- Sidebar widget ✓
2318- Event items ✓
2319- Input fields ✓
2320- Buttons ✓
2321
2322**All perfectly matched to the page background!**
2323
2324### Why Version 5.2.0 Was Wrong
2325
2326I 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.
2327
2328**The eventlist knew what it was doing all along!** The cells just needed to catch up.
2329
2330## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS
2331**Note**: This version went the wrong direction. See v5.2.1 for the correct fix.
2332
2333### �� Fixed: All Backgrounds Now Use __background__
2334- **Fixed:** `bg` now uses `__background__` instead of `__background_site__`
2335- **Fixed:** Eventlist, calendar cells, and sidebar all match now
2336- **Result:** Completely unified background throughout!
2337
2338### The Issue
2339
2340Different parts of the calendar were using different background sources:
2341
2342**Before (v5.1.9)**:
2343```php
2344'bg' => __background_site__        // Eventlist background (outer page)
2345'cell_bg' => __background__        // Cell backgrounds (content area)
2346```
2347
2348**These are different colors!**
2349- `__background_site__` = Outer page wrapper (often gray)
2350- `__background__` = Main content area (often white)
2351
2352### The Fix
2353
2354**After (v5.2.0)**:
2355```php
2356'bg' => __background__             // Eventlist background ✓
2357'cell_bg' => __background__        // Cell backgrounds ✓
2358```
2359
2360**Both use the same source!**
2361
2362### What Uses 'bg'
2363
2364The `bg` color is used for:
2365- Eventlist sidebar background
2366- Main calendar container
2367- Sidebar widget background
2368- Form backgrounds
2369- Event dialogs
2370
2371### What Uses 'cell_bg'
2372
2373The `cell_bg` color is used for:
2374- Calendar day cells
2375- Event item backgrounds
2376- Input field backgrounds
2377- Button backgrounds
2378
2379### Why This Matters
2380
2381**Template color hierarchy**:
2382```
2383__background_site__ → Outer page/body (e.g., #f5f5f5 light gray)
2384__background__      → Main content area (e.g., #ffffff white)
2385__background_alt__  → Sections/headers
2386__background_neu__  → Highlights
2387```
2388
2389**We want all calendar backgrounds to match the main content area!**
2390
2391### Visual Comparison
2392
2393**Before (v5.1.9)**: Mismatched backgrounds
2394```
2395┌────────────────────────────────┐
2396│ Eventlist (gray #f5f5f5)      │ ← __background_site__
2397└────────────────────────────────┘
2398
2399┌────────────────────────────────┐
2400│ Calendar                       │
2401│ ┌──┬──┬──┬──┬──┬──┬──┐       │
2402│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
2403│ └──┴──┴──┴──┴──┴──┴──┘       │
2404└────────────────────────────────┘
2405Different colors - looks inconsistent
2406```
2407
2408**After (v5.2.0)**: Unified backgrounds
2409```
2410┌────────────────────────────────┐
2411│ Eventlist (white #fff)         │ ← __background__
2412└────────────────────────────────┘
2413
2414┌────────────────────────────────┐
2415│ Calendar                       │
2416│ ┌──┬──┬──┬──┬──┬──┬──┐       │
2417│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
2418│ └──┴──┴──┴──┴──┴──┴──┘       │
2419└────────────────────────────────┘
2420Same color - perfectly consistent!
2421```
2422
2423### Template Examples
2424
2425**Light Template**:
2426```ini
2427__background_site__ = "#f5f5f5"  (light gray)
2428__background__ = "#ffffff"       (white)
2429```
2430
2431**Before**: Eventlist gray, cells white
2432**After**: Eventlist white, cells white ✓
2433
2434**Dark Template**:
2435```ini
2436__background_site__ = "#1a1a1a"  (very dark)
2437__background__ = "#2d2d2d"       (dark)
2438```
2439
2440**Before**: Eventlist very dark, cells dark
2441**After**: Eventlist dark, cells dark ✓
2442
2443### Benefits
2444
2445**Visual Consistency**:
2446- All backgrounds match
2447- Clean, unified appearance
2448- Professional look
2449
2450**Correct Template Integration**:
2451- Uses content area color (not page wrapper)
2452- Matches wiki content area
2453- Proper color hierarchy
2454
2455**Works Everywhere**:
2456- Light templates ✓
2457- Dark templates ✓
2458- Custom templates ✓
2459
2460### All Backgrounds Unified
2461
2462**Now using __background__**:
2463- Eventlist background ✓
2464- Calendar cells ✓
2465- Sidebar widget ✓
2466- Event items ✓
2467- Input fields ✓
2468- Buttons ✓
2469- Dialogs ✓
2470
2471**Perfect harmony throughout!** ��
2472
2473## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS
2474
2475### �� Fixed: Wiki Theme Event Backgrounds Not Showing
2476- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!)
2477- **Fixed:** Replaced CSS variables with actual hex colors
2478- **Result:** Event backgrounds now show correctly with template colors!
2479
2480### The Problem
2481
2482CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes!
2483
2484**Before (broken)**:
2485```php
2486'cell_bg' => 'var(--__background__, #fff)',  // Doesn't work in inline styles!
2487```
2488
2489**After (fixed)**:
2490```php
2491'cell_bg' => '#fff',  // Actual hex color works!
2492```
2493
2494### What Was Affected
2495
2496**When style.ini read successfully**:
2497- ✅ Worked fine (uses actual hex colors from file)
2498
2499**When style.ini fallback used**:
2500- ❌ Events had no background
2501- ❌ CSS variables don't work in inline styles
2502- ❌ Looked broken
2503
2504### The Fix
2505
2506**Wiki theme fallback now uses real colors**:
2507```php
2508'wiki' => [
2509    'bg' => '#f5f5f5',           // Real hex (was: var(--__background_site__))
2510    'border' => '#ccc',           // Real hex (was: var(--__border__))
2511    'cell_bg' => '#fff',          // Real hex (was: var(--__background__))
2512    'cell_today_bg' => '#eee',    // Real hex (was: var(--__background_neu__))
2513    'text_primary' => '#333',     // Real hex (was: var(--__text__))
2514    'text_bright' => '#2b73b7',   // Real hex (was: var(--__link__))
2515    'text_dim' => '#666',         // Real hex (was: var(--__text_neu__))
2516    'grid_bg' => '#e8e8e8',       // Real hex (was: var(--__background_alt__))
2517    // ... all colors now use real hex values
2518]
2519```
2520
2521### Why CSS Variables Don't Work
2522
2523**CSS variables work**:
2524```css
2525.some-class {
2526    background: var(--__background__, #fff);  /* ✓ Works in CSS */
2527}
2528```
2529
2530**CSS variables DON'T work**:
2531```html
2532<div style="background: var(--__background__, #fff)">  <!-- ✗ Doesn't work -->
2533```
2534
2535### How It Works Now
2536
2537**Priority system**:
25381. **Try reading style.ini** → Use actual template hex colors ✓
25392. **If file not found** → Use fallback hex colors ✓
25403. **Never use CSS variables in inline styles** ✓
2541
2542**Both paths now work correctly!**
2543
2544### Visual Result
2545
2546**Events now have proper backgrounds**:
2547```
2548┌──────────────────────────┐
2549│ �� Meeting at 2pm        │ ← White background (#fff)
2550│ Description here...      │
2551│ [✏️ Edit] [��️ Delete]   │
2552└──────────────────────────┘
2553
2554Not:
2555┌──────────────────────────┐
2556│ �� Meeting at 2pm        │ ← No background (broken)
2557│ Description here...      │
2558└──────────────────────────┘
2559```
2560
2561### Affected Areas
2562
2563**All event displays**:
2564- Main calendar events ✓
2565- Sidebar widget events ✓
2566- Event list items ✓
2567- Event backgrounds ✓
2568- Button backgrounds ✓
2569- Input field backgrounds ✓
2570
2571**Everything uses real colors now!**
2572
2573## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT
2574
2575### �� Reorganized: Better Update Tab Layout
2576- **Moved:** Current Version section to the top
2577- **Combined:** Upload and Important Notes side-by-side
2578- **Improved:** Space-efficient two-column layout
2579- **Result:** More information visible at once!
2580
2581### New Layout Order
2582
2583**Version 5.1.8**:
2584```
25851. Current Version (at top - see what you have)
25862. Upload + Important Notes (side-by-side)
25873. Recent Changes (changelog)
25884. Backups
2589```
2590
2591### Side-by-Side Design
2592
2593**Upload form (left 60%) + Important Notes (right 40%)**:
2594```
2595┌──────────────────────────────────────────┐
2596│ �� Current Version                       │
2597│ Version: 5.1.8                           │
2598│ ✅ Permissions: OK                       │
2599└──────────────────────────────────────────┘
2600
2601┌─────────────────────┬────────────────────┐
2602│ �� Upload New       │ ⚠️ Important Notes │
2603│ [Choose File]       │ • Replaces files   │
2604│ ☑ Backup first      │ • Config preserved │
2605│ [Upload] [Clear]    │ • Events safe      │
2606└─────────────────────┴────────────────────┘
2607```
2608
2609### Benefits
2610
2611**Current Version First**:
2612- See what you have immediately
2613- Check permissions at a glance
2614- Know if ready to update
2615
2616**Side-by-Side Layout**:
2617- Upload form and warnings together
2618- Read notes while choosing file
2619- More efficient use of space
2620- Less scrolling needed
2621
2622**Better Information Flow**:
26231. See current version ✓
26242. Upload new version with notes visible ✓
26253. Review recent changes ✓
26264. Manage backups ✓
2627
2628### Visual Comparison
2629
2630**Before (v5.1.7)**:
2631```
2632Important Notes (full width)
26332634Upload Form (full width)
26352636Current Version
26372638Recent Changes
26392640Backups
2641```
2642
2643**After (v5.1.8)**:
2644```
2645Current Version (full width)
26462647Upload (60%) | Notes (40%)
26482649Recent Changes
26502651Backups
2652```
2653
2654**More compact, better organized!**
2655
2656### Responsive Design
2657
2658**Wide screens**:
2659- Upload and notes side-by-side
2660- Full 1200px width utilized
2661- Efficient space usage
2662
2663**Narrow screens**:
2664- Sections stack gracefully
2665- Flex layout adapts
2666- Still fully functional
2667
2668### Layout Details
2669
2670**Current Version Section**:
2671- Full width (1200px max)
2672- Shows version, author, description
2673- Permission status with icons
2674- Helpful fix commands if needed
2675
2676**Upload/Notes Section**:
2677- Flexbox layout with gap
2678- Upload: `flex:1` (grows)
2679- Notes: `flex:0 0 350px` (fixed 350px)
2680- Both have proper min-width
2681
2682**Recent Changes Section**:
2683- Full width (1200px max)
2684- Compact scrollable view
2685- Color-coded change types
2686- Last 10 versions shown
2687
2688**Backups Section**:
2689- Full width (1200px max)
2690- Manual backup button
2691- Scrollable file list
2692- All actions accessible
2693
2694### Improved Max Widths
2695
2696All sections now use `max-width:1200px` (previously 900px):
2697- Better use of wide screens
2698- Still responsive on narrow screens
2699- Consistent throughout tab
2700
2701## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR
2702
2703### �� Fixed: Extra Closing Brace
2704- **Fixed:** ParseError on line 1936 (extra closing brace)
2705- **Result:** Manual backup feature now works correctly!
2706
2707### What Was Wrong
2708
2709Extra `}` after the backup section:
2710
2711**Before (broken)**:
2712```php
2713echo '</div>';
2714}  // ← Extra closing brace!
2715
2716echo '<script>
2717```
2718
2719**After (fixed)**:
2720```php
2721echo '</div>';
2722
2723echo '<script>
2724```
2725
2726**Manual backup feature now fully functional!** ✅
2727
2728## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND
2729
2730### �� Added: Create Backup Manually Anytime
2731- **Added:** "Create Backup Now" button in Backups section
2732- **Added:** Manual backup action handler with full verification
2733- **Added:** Backups section always visible (even with no backups)
2734- **Added:** Success message showing file size and file count
2735- **Result:** Create backups anytime without needing to upload!
2736
2737### Manual Backup Button
2738
2739**New Layout**:
2740```
2741┌─────────────────────────────────────┐
2742│ �� Backups        [�� Create Backup Now] │
2743├─────────────────────────────────────┤
2744│ Backup File                Size     │
2745calendar.backup.v5.1.6...  243 KB   │
2746│ [�� Download] [✏️ Rename] [��️ Delete] │
2747└─────────────────────────────────────┘
2748```
2749
2750**Always visible - even with no backups**:
2751```
2752┌─────────────────────────────────────┐
2753│ �� Backups        [�� Create Backup Now] │
2754├─────────────────────────────────────┤
2755│ No backups yet. Click "Create       │
2756│ Backup Now" to create your first    │
2757│ backup.                              │
2758└─────────────────────────────────────┘
2759```
2760
2761### How It Works
2762
2763**Click the button**:
27641. Confirm: "Create a backup of the current plugin version?"
27652. System creates backup ZIP
27663. Verifies: File count (30+ files)
27674. Verifies: File size (200KB+)
27685. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)"
2769
2770**Backup naming**:
2771```
2772calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
2773                       ^^^^^^
2774                     "manual" tag identifies manual backups
2775```
2776
2777### Use Cases
2778
2779**Before updates**:
2780- Create safety backup before uploading new version
2781- Have multiple restore points
2782- Test new features with fallback
2783
2784**Regular backups**:
2785- Weekly/monthly backup schedule
2786- Before making configuration changes
2787- After important customizations
2788
2789**Development**:
2790- Backup before code experiments
2791- Save working states
2792- Quick rollback points
2793
2794### Full Verification
2795
2796**Same checks as automatic backups**:
2797- ✅ File count check (minimum 10, expected 30+)
2798- ✅ File size check (minimum 1KB, expected 200KB+)
2799- ✅ Existence check (file actually created)
2800- ✅ Automatic cleanup on failure
2801
2802**Success message includes**:
2803- Backup filename
2804- File size (human-readable)
2805- Number of files backed up
2806
2807### Example Messages
2808
2809**Success**:
2810```
2811✓ Manual backup created successfully:
2812  calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
2813  (243 KB, 31 files)
2814```
2815
2816**Failure Examples**:
2817```
2818❌ Plugin directory is not readable.
2819   Please check permissions.
2820
2821❌ Backup incomplete: Only 5 files were added (expected 30+).
2822   Backup failed.
2823
2824❌ Backup file is too small (342 bytes).
2825   Only 3 files were added. Backup failed.
2826```
2827
2828### Benefits
2829
2830**On-Demand Safety**:
2831- Create backups anytime
2832- No need to upload new version
2833- Quick and easy
2834
2835**Peace of Mind**:
2836- Backup before risky changes
2837- Multiple restore points
2838- Safe experimentation
2839
2840**Professional Workflow**:
2841- Regular backup schedule
2842- Version snapshots
2843- Disaster recovery
2844
2845### Backup Section Improvements
2846
2847**Always Visible**:
2848- Section shows even with 0 backups
2849- Button always accessible
2850- Clear call-to-action
2851
2852**Better Header**:
2853- Title and button on same row
2854- Clean, professional layout
2855- Space-efficient design
2856
2857### Technical Details
2858
2859**New Action**: `create_manual_backup`
2860
2861**New Function**: `createManualBackup()`
2862- Gets current version
2863- Creates timestamped filename with "manual" tag
2864- Uses same verification as auto-backups
2865- Shows detailed success/error messages
2866
2867**File Naming Convention**:
2868```
2869Automatic (on upload):
2870calendar.backup.v5.1.6.2026-02-09_12-30-45.zip
2871
2872Manual (button click):
2873calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
2874                       ^^^^^^^
2875                    Easy to identify!
2876```
2877
2878### Permissions Required
2879
2880- **Read access**: Plugin directory
2881- **Write access**: Parent plugins directory
2882
2883**Same as automatic backups** - no additional permissions needed!
2884
2885## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION
2886
2887### �� Enhanced: Backup Creation with Robust Verification
2888- **Added:** File count validation (must have 10+ files)
2889- **Added:** File size validation (must be 1KB+ minimum)
2890- **Added:** Return value from addDirectoryToZip (counts files added)
2891- **Added:** Detailed error messages showing file count
2892- **Added:** Automatic deletion of invalid/incomplete backups
2893- **Enhanced:** Exception handling with proper error propagation
2894- **Result:** Backups are now guaranteed to be complete or fail clearly!
2895
2896### What Changed
2897
2898**Before (v5.1.4)**:
2899```php
2900$this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
2901$zip->close();
2902// No verification - could create empty or partial backup
2903```
2904
2905**After (v5.1.5)**:
2906```php
2907$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
2908$zip->close();
2909
2910// Verify backup exists
2911if (!file_exists($backupPath)) {
2912    redirect('Backup file was not created');
2913}
2914
2915// Verify backup has content
2916$backupSize = filesize($backupPath);
2917if ($backupSize < 1000) {
2918    unlink($backupPath);
2919    redirect('Backup too small: ' . $backupSize . ' bytes');
2920}
2921
2922// Verify file count
2923if ($fileCount < 10) {
2924    unlink($backupPath);
2925    redirect('Only ' . $fileCount . ' files added (expected 30+)');
2926}
2927```
2928
2929### Backup Validation Checks
2930
2931**Three-Layer Verification**:
2932
29331. **File Count Check**:
2934   - Minimum: 10 files required
2935   - Expected: 30+ files
2936   - Action: Delete backup if too few files
2937
29382. **Size Check**:
2939   - Minimum: 1KB (1000 bytes)
2940   - Expected: 200-250KB
2941   - Action: Delete backup if too small
2942
29433. **Existence Check**:
2944   - Verify file was actually created
2945   - Check ZIP archive is valid
2946   - Action: Error if file missing
2947
2948### Enhanced Error Reporting
2949
2950**Detailed Error Messages**:
2951```
2952❌ "Backup file was not created"
2953❌ "Backup too small (342 bytes). Only 3 files added."
2954❌ "Only 5 files added (expected 30+). Backup aborted."
2955❌ "Too many errors adding files: Failed to add X, Y, Z..."
2956❌ "Directory does not exist: /path/to/dir"
2957❌ "Directory is not readable: /path/to/dir"
2958```
2959
2960**Now you know exactly what went wrong!**
2961
2962### Improved addDirectoryToZip Function
2963
2964**Returns File Count**:
2965```php
2966private function addDirectoryToZip($zip, $dir, $zipPath = '') {
2967    $fileCount = 0;
2968    $errors = [];
2969
2970    // Validation
2971    if (!is_dir($dir)) throw new Exception("Directory does not exist");
2972    if (!is_readable($dir)) throw new Exception("Not readable");
2973
2974    // Add files
2975    foreach ($files as $file) {
2976        if ($zip->addFile($filePath, $relativePath)) {
2977            $fileCount++;
2978        } else {
2979            $errors[] = "Failed to add: " . $filename;
2980        }
2981    }
2982
2983    // Check error threshold
2984    if (count($errors) > 5) {
2985        throw new Exception("Too many errors");
2986    }
2987
2988    return $fileCount;  // Returns count for verification!
2989}
2990```
2991
2992### Safety Features
2993
2994**Invalid Backup Cleanup**:
2995- Failed backups are automatically deleted
2996- No partial/corrupt backups left behind
2997- Clean error state
2998
2999**Error Threshold**:
3000- Allow up to 5 minor file errors (logs warnings)
3001- More than 5 errors = complete failure
3002- Prevents partially corrupt backups
3003
3004**Directory Validation**:
3005- Check directory exists before processing
3006- Check directory is readable
3007- Fail fast with clear errors
3008
3009### Benefits
3010
3011**Guaranteed Complete Backups**:
3012- ✅ All files included or backup fails
3013- ✅ No silent failures
3014- ✅ Clear error messages
3015- ✅ Automatic cleanup
3016
3017**Better Debugging**:
3018- Know exactly how many files were added
3019- See specific errors for missing files
3020- Understand why backup failed
3021
3022**User Confidence**:
3023- Backup succeeds = complete backup
3024- Backup fails = clear error message
3025- No ambiguity
3026
3027### Example Scenarios
3028
3029**Scenario 1: Permission Issue**
3030```
3031User uploads new version
3032System starts backup
3033Error: "Directory is not readable: /lib/plugins/calendar/"
3034Backup fails before creating file
3035User sees clear error message
3036```
3037
3038**Scenario 2: Partial Backup**
3039```
3040User uploads new version
3041System creates backup
3042Only 5 files added (disk issue?)
3043Size: 450 bytes
3044Verification fails
3045Incomplete backup deleted
3046Error: "Only 5 files added (expected 30+)"
3047```
3048
3049**Scenario 3: Success**
3050```
3051User uploads new version
3052System creates backup
305331 files added
3054Size: 240KB
3055All verifications pass ✅
3056Update proceeds
3057```
3058
3059### Testing Recommendations
3060
3061After installing v5.1.5:
30621. Upload a new version with backup enabled
30632. Check for success message
30643. Verify backup file exists in /lib/plugins/
30654. Check backup file size (should be ~240KB)
30665. If backup fails, read error message carefully
3067
3068**Your backups are now bulletproof!** ��
3069
3070## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED
3071
3072### ✅ Verified: Backup System Working Correctly
3073- **Verified:** addDirectoryToZip function includes all files recursively
3074- **Verified:** Backups contain all 31+ files from calendar directory
3075- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed)
3076- **Info:** Backup sizes grow slightly with each version (more code = more features!)
3077- **Result:** Backup system is working perfectly!
3078
3079### Backup System Details
3080
3081**What Gets Backed Up**:
3082- All PHP files (syntax.php, admin.php, action.php, etc.)
3083- All JavaScript files (calendar-main.js, script.js)
3084- All documentation (CHANGELOG.md, README.md, all guides)
3085- All configuration (sync_config.php)
3086- All language files
3087- All assets and resources
3088- **Everything in the calendar/ directory!**
3089
3090**Backup Size Analysis**:
3091```
3092Version 5.0.4: 233KB (normal)
3093Version 5.0.5: 234KB (normal)
3094Version 5.0.6: 235KB (normal)
3095Version 5.0.7: 236KB (normal)
3096Version 5.0.8: 237KB (normal)
3097Version 5.0.9: 237KB (normal)
3098Version 5.1.0: 238KB (normal)
3099Version 5.1.1: 238KB (normal)
3100Version 5.1.2: 240KB (normal - added AJAX features)
3101Version 5.1.3: 240KB (normal)
3102```
3103
3104**Why Sizes Grow**:
3105- More features = more code
3106- Longer CHANGELOG
3107- Additional documentation
3108- New functionality
3109- **This is expected and normal!**
3110
3111**Compression Ratio**:
3112```
3113Uncompressed: ~1.0 MB (source files)
3114Compressed:   ~240 KB (ZIP archive)
3115Ratio:        ~24% (excellent compression!)
3116```
3117
3118### Backup File Contents
3119
3120**31 Files Included**:
3121```
3122admin.php              (216KB - main admin interface)
3123syntax.php             (173KB - calendar rendering)
3124calendar-main.js       (102KB - JavaScript functionality)
3125CHANGELOG.md           (268KB - complete version history)
3126style.css              (57KB - all styling)
3127action.php             (38KB - DokuWiki actions)
3128sync_outlook.php       (32KB - Outlook integration)
3129+ 24 other files (docs, configs, helpers)
3130```
3131
3132**All files successfully included!** ✅
3133
3134### How Backups Work
3135
3136**Creation Process**:
31371. User uploads new plugin version
31382. Checkbox "Create backup first" (checked by default)
31393. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip`
31404. Backup saved to: `/lib/plugins/` directory
31415. Then proceeds with update
3142
3143**Backup Function**:
3144```php
3145private function addDirectoryToZip($zip, $dir, $zipPath = '') {
3146    $files = new RecursiveIteratorIterator(
3147        new RecursiveDirectoryIterator($dir),
3148        RecursiveIteratorIterator::LEAVES_ONLY
3149    );
3150    foreach ($files as $file) {
3151        if (!$file->isDir()) {
3152            $zip->addFile($filePath, $relativePath);
3153        }
3154    }
3155}
3156```
3157
3158**Recursive = Gets Everything!** ✅
3159
3160### Verification Results
3161
3162**Test Results**:
3163- ✅ All 31 files present in zip
3164- ✅ All subdirectories included (lang/en/)
3165- ✅ File sizes match originals
3166- ✅ Compression works properly
3167- ✅ No files missing
3168- ✅ Backup can be restored
3169
3170**File Count**:
3171```
3172Source directory: 31 files
3173Backup ZIP:       34 items (31 files + 3 directories)
3174Status:           COMPLETE ✅
3175```
3176
3177### Backup Best Practices
3178
3179**Always enabled by default** ✅
3180**Stored in accessible location** ✅
3181**Timestamped filenames** ✅
3182**Complete directory backup** ✅
3183**Easy to restore** ✅
3184
3185### Conclusion
3186
3187The backup system is working perfectly. The file sizes are appropriate and expected:
3188- Compressed size: ~240KB (good compression)
3189- Uncompressed size: ~1MB (all source files)
3190- All files included: YES ✅
3191- Growing size over versions: Normal (more features!)
3192
3193**Your backups are complete and reliable!** ��
3194
3195## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR
3196
3197### �� Fixed: JavaScript Syntax Error in AJAX Function
3198- **Fixed:** ParseError on line 1947 (deleteBackup function)
3199- **Fixed:** Escaped all single quotes in JavaScript strings
3200- **Result:** AJAX backup deletion now works correctly!
3201
3202### What Was Wrong
3203
3204JavaScript inside PHP echo needs escaped quotes:
3205
3206**Before (broken)**:
3207```javascript
3208formData.append('action', 'delete_backup');  // PHP interprets quotes
3209```
3210
3211**After (fixed)**:
3212```javascript
3213formData.append(\'action\', \'delete_backup\');  // Escaped for PHP
3214```
3215
3216### All Quotes Escaped
3217
3218Fixed in deleteBackup function:
3219- ✅ FormData.append() calls
3220- ✅ fetch() URL
3221- ✅ querySelector() calls
3222- ✅ createElement() call
3223- ✅ All string literals
3224- ✅ Error messages
3225
3226**JavaScript now works!** ✓
3227
3228## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT
3229
3230### �� Improved: Update Tab Further Refined
3231- **Moved:** Important Notes to very top (above upload)
3232- **Enhanced:** Delete backup now uses AJAX (no page refresh!)
3233- **Added:** Smooth fade-out animation when deleting backups
3234- **Added:** Success message after deletion
3235- **Auto-remove:** Backup section disappears if last backup deleted
3236- **Result:** Smoother, more polished experience!
3237
3238### New Layout Order
3239
3240**Final Order (v5.1.2)**:
3241```
32421. ⚠️ Important Notes (warnings at top)
32432. �� Upload New Version (with Clear Cache button)
32443. �� Current Version (info)
32454. �� Recent Changes (changelog)
32465. �� Available Backups (if any)
3247```
3248
3249### AJAX Backup Deletion
3250
3251**Before (v5.1.1)**:
3252- Click Delete → Page refreshes → Scroll back down
3253- Lose position on page
3254- Page reload is jarring
3255
3256**After (v5.1.2)**:
3257- Click Delete → Confirm
3258- Row fades out smoothly
3259- Row disappears
3260- Success message shows at top
3261- Success message fades after 3 seconds
3262- If last backup: entire section fades away
3263- **No page refresh!** ✓
3264
3265### Visual Flow
3266
3267**Delete Animation**:
3268```
32691. Click ��️ Delete
32702. Confirm dialog
32713. Row fades out (0.3s)
32724. Row removed
32735. Success message appears
32746. Message fades after 3s
3275```
3276
3277**If Last Backup**:
3278```
32791. Delete last backup
32802. Row fades out
32813. Entire "Available Backups" section fades
32824. Section removed
32835. Clean interface ✓
3284```
3285
3286### Success Message
3287
3288After deleting:
3289```
3290┌──────────────────────────────┐
3291│ ✓ Backup deleted: filename   │ ← Appears at top
3292└──────────────────────────────┘
3293   Fades after 3 seconds
3294```
3295
3296### Benefits
3297
3298**Important Notes First**:
3299- Warnings before actions ✓
3300- Read before uploading ✓
3301- Clear expectations ✓
3302
3303**AJAX Deletion**:
3304- No page refresh ✓
3305- Smooth animations ✓
3306- Stay in context ✓
3307- Professional feel ✓
3308
3309**Auto-Cleanup**:
3310- Empty list disappears ✓
3311- Clean interface ✓
3312- No clutter ✓
3313
3314### Technical Implementation
3315
3316**AJAX Request**:
3317```javascript
3318fetch('?do=admin&page=calendar&tab=update', {
3319    method: 'POST',
3320    body: formData
3321})
3322```
3323
3324**DOM Manipulation**:
3325- Fade out row
3326- Remove element
3327- Show success
3328- Remove section if empty
3329
3330**Smooth Transitions**:
3331- 300ms fade animations
3332- Clean visual feedback
3333- Professional polish
3334
3335## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB
3336
3337### �� Improved: Update Tab Layout Reorganized
3338- **Moved:** Upload section to the top of the page
3339- **Added:** Clear Cache button next to Upload & Install button
3340- **Changed:** "Current Version" section moved below upload
3341- **Result:** Better workflow - upload first, then see version info!
3342
3343### New Layout Order
3344
3345**Before (v5.1.0)**:
3346```
33471. Clear Cache (standalone)
33482. Current Version
33493. Recent Changes
33504. Upload New Version
33515. Warning Box
33526. Backups
3353```
3354
3355**After (v5.1.1)**:
3356```
33571. Upload New Version (with Clear Cache button side-by-side)
33582. Warning Box
33593. Current Version
33604. Recent Changes
33615. Backups
3362```
3363
3364### Visual Result
3365
3366**Top of Update Tab**:
3367```
3368┌─────────────────────────────────┐
3369│ �� Upload New Version           │
3370│ ┌─────────────────────────────┐ │
3371│ │ [Choose File]               │ │
3372│ │ ☑ Create backup first       │ │
3373│ │ ┌──────────────┬──────────┐ │ │
3374│ │ │�� Upload &   │��️ Clear  │ │ │
3375│ │ │   Install    │   Cache  │ │ │
3376│ │ └──────────────┴──────────┘ │ │
3377│ └─────────────────────────────┘ │
3378│                                 │
3379│ ⚠️ Important Notes              │
3380│ • Will replace all files        │
3381│ • Config preserved              │
3382│                                 │
3383│ �� Current Version              │
3384│ Version: 5.1.1                  │
3385└─────────────────────────────────┘
3386```
3387
3388### Benefits
3389
3390**Better Workflow**:
3391- Primary action (upload) is first
3392- Clear cache conveniently next to install
3393- No scrolling to find upload button
3394- Logical top-to-bottom flow
3395
3396**Side-by-Side Buttons**:
3397- Upload & Install (green)
3398- Clear Cache (orange)
3399- Both common actions together
3400- Easy to access after upload
3401
3402**Improved UX**:
3403- Upload is most important → now at top
3404- Version info is reference → moved down
3405- Related actions grouped
3406- Cleaner organization
3407
3408### Button Layout
3409
3410```
3411┌──────────────────┬──────────────┐
3412│ �� Upload &      │ ��️ Clear     │
3413│    Install       │    Cache     │
3414│ (Green)          │ (Orange)     │
3415└──────────────────┴──────────────┘
3416```
3417
3418**Green = Primary Action**
3419**Orange = Secondary Action**
3420
3421Both easily accessible!
3422
3423## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND
3424
3425### �� Changed: Admin Section Backgrounds Now Use __background__
3426- **Changed:** All section boxes now use `__background__` instead of `__background_alt__`
3427- **Result:** Cleaner, more unified admin interface!
3428
3429### Background Usage Update
3430
3431**Before (v5.0.9)**:
3432```php
3433Section boxes: bg_alt (__background_alt__)
3434Content areas: bg (__background__)
3435```
3436
3437**After (v5.1.0)**:
3438```php
3439Section boxes: bg (__background__)
3440Content areas: bg (__background__)
3441```
3442
3443### Why This Change?
3444
3445**More unified appearance**:
3446- Sections and content use same background
3447- Creates cleaner, more cohesive look
3448- Borders provide visual separation
3449- Matches typical admin UI patterns
3450
3451**Template color hierarchy**:
3452```
3453__background_site__ → Outer page wrapper
3454__background__      → Content & sections (BOTH now use this)
3455__background_alt__  → Reserved for special panels/highlights
3456__background_neu__  → Special highlights
3457```
3458
3459### Visual Result
3460
3461**Light Template**:
3462```ini
3463__background__ = "#ffffff"
3464__background_alt__ = "#e8e8e8"
3465```
3466
3467**Before**:
3468```
3469Admin Page:
3470┌─────────────────────┐
3471│ ┌─────────────────┐ │
3472│ │ Section Box     │ │ ← Gray (#e8e8e8)
3473│ │ ┌─────────────┐ │ │
3474│ │ │ Content     │ │ │ ← White (#fff)
3475│ │ └─────────────┘ │ │
3476│ └─────────────────┘ │
3477└─────────────────────┘
3478Two-tone appearance
3479```
3480
3481**After**:
3482```
3483Admin Page:
3484┌─────────────────────┐
3485│ ┌─────────────────┐ │
3486│ │ Section Box     │ │ ← White (#fff)
3487│ │ ┌─────────────┐ │ │
3488│ │ │ Content     │ │ │ ← White (#fff)
3489│ │ └─────────────┘ │ │
3490│ └─────────────────┘ │
3491└─────────────────────┘
3492Unified, clean appearance
3493Borders provide separation
3494```
3495
3496**Dark Template**:
3497```ini
3498__background__ = "#2d2d2d"
3499__background_alt__ = "#3a3a3a"
3500```
3501
3502**After**:
3503```
3504Admin Page:
3505┌─────────────────────┐
3506│ ┌─────────────────┐ │
3507│ │ Section Box     │ │ ← Dark (#2d2d2d)
3508│ │ ┌─────────────┐ │ │
3509│ │ │ Content     │ │ │ ← Dark (#2d2d2d)
3510│ │ └─────────────┘ │ │
3511│ └─────────────────┘ │
3512└─────────────────────┘
3513Unified dark appearance
3514Accent borders provide definition
3515```
3516
3517### Benefits
3518
3519**Cleaner Look**:
3520- No more alternating gray/white
3521- More professional appearance
3522- Less visual noise
3523- Unified color scheme
3524
3525**Better Consistency**:
3526- Matches modern admin UI patterns
3527- Borders define sections, not colors
3528- Simpler, cleaner design
3529- Easier on the eyes
3530
3531**Template Friendly**:
3532- Works with any background color
3533- Light or dark templates
3534- Custom colors
3535- Always looks cohesive
3536
3537### All Sections Updated
3538
3539✅ Outlook Sync config sections
3540✅ Manage Events sections
3541✅ Update Plugin sections
3542✅ Themes tab sections
3543✅ Week start day section
3544✅ All form sections
3545
3546**Complete unified theming!** ��
3547
3548## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB
3549
3550### �� Fixed: Syntax Error in Theme Cards
3551- **Fixed:** ParseError on line 4461 (Purple theme card)
3552- **Fixed:** Malformed ternary expressions from sed replacement
3553- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki)
3554- **Result:** Admin pages work correctly!
3555
3556### What Was Wrong
3557
3558The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions:
3559
3560**Before (broken)**:
3561```php
3562? '#9b59b6' : ' . $colors['border'] . ')
3563// Extra quote and dot created syntax error
3564```
3565
3566**After (fixed)**:
3567```php
3568? '#9b59b6' : $colors['border'])
3569// Clean ternary expression
3570```
3571
3572### All Theme Cards Fixed
3573
3574- ✅ Purple Dream card
3575- ✅ Professional Blue card
3576- ✅ Pink Bling card
3577- ✅ Wiki Default card
3578
3579### Now Working
3580
3581**Theme selection page loads** ✓
3582**All cards display properly** ✓
3583**Template colors applied** ✓
3584**No syntax errors** ✓
3585
3586## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING
3587
3588### �� Fixed: Themes Tab Backgrounds & Correct Template Color Mapping
3589- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites)
3590- **Fixed:** Main background now uses `__background__` instead of `__background_site__`
3591- **Fixed:** Theme selection cards use template backgrounds
3592- **Fixed:** Week start options use template backgrounds
3593- **Result:** Perfect color mapping throughout admin!
3594
3595### Color Mapping Correction
3596
3597**Before (v5.0.7)**:
3598```php
3599bg: __background_site__  // Wrong - this is outer page bg
3600bg_alt: __background_alt__
3601```
3602
3603**After (v5.0.8)**:
3604```php
3605bg: __background__       // Correct - main content bg
3606bg_alt: __background_alt__
3607```
3608
3609### Why This Matters
3610
3611**Template color hierarchy**:
3612```
3613__background_site__ → Outer page/site background
3614__background__      → Main content area (CORRECT for admin)
3615__background_alt__  → Sections/panels
3616__background_neu__  → Highlights
3617```
3618
3619**Admin should use**:
3620- `__background__` for input fields, content areas
3621- `__background_alt__` for section boxes, panels
3622
3623### Themes Tab Fixed
3624
3625**Removed all hardcoded colors**:
3626```php
3627Before: '#ddd', '#fff', '#dee2e6'
3628After:  $colors['border'], $colors['bg'], $colors['border']
3629```
3630
3631**Now themed**:
3632- ✅ Week start section background
3633- ✅ Week start option backgrounds
3634- ✅ Theme card backgrounds
3635- ✅ Theme card borders
3636- ✅ All borders throughout
3637
3638### Visual Result
3639
3640**Light Template**:
3641```ini
3642__background__ = "#ffffff"
3643__background_alt__ = "#e8e8e8"
3644```
3645
3646**Admin Before (v5.0.7)**:
3647```
3648Input fields: #f5f5f5 (site bg - wrong)
3649Sections: #e8e8e8 (alt bg - correct)
3650```
3651
3652**Admin After (v5.0.8)**:
3653```
3654Input fields: #ffffff (content bg - correct!)
3655Sections: #e8e8e8 (alt bg - correct!)
3656```
3657
3658**Dark Template**:
3659```ini
3660__background__ = "#2d2d2d"
3661__background_alt__ = "#3a3a3a"
3662```
3663
3664**Admin After (v5.0.8)**:
3665```
3666Input fields: #2d2d2d (content bg - perfect!)
3667Sections: #3a3a3a (alt bg - perfect!)
3668```
3669
3670### Complete Themes Tab
3671
3672**Week Start Options**:
3673```
3674┌─────────────────────────┐
3675│ �� Week Start Day       │ ← bg_alt
3676│ ┌─────────┬───────────┐ │
3677│ │ Monday  │ Sunday    │ │ ← bg (when not selected)
3678│ └─────────┴───────────┘ │
3679└─────────────────────────┘
3680```
3681
3682**Theme Cards**:
3683```
3684┌─────────────────────────┐
3685│ �� Matrix Edition       │ ← bg (when not selected)
3686│ Classic green theme     │   border (when not selected)
3687└─────────────────────────┘
3688
3689┌═════════════════════════┐
3690│ �� Purple Dream         │ ← rgba green tint (when selected)
3691│ Elegant purple theme    │   #00cc07 border (when selected)
3692└═════════════════════════┘
3693```
3694
3695### Perfect Integration
3696
3697**All admin pages now**:
3698- Content areas: `__background__` ✓
3699- Section boxes: `__background_alt__` ✓
3700- Borders: `__border__` ✓
3701- Text: `__text__` ✓
3702
3703**Matches wiki perfectly**:
3704- Same white content areas
3705- Same gray section boxes
3706- Same border colors
3707- Same text colors
3708
3709### No More Issues
3710
3711**Fixed**:
3712- ❌ Site background on content areas → ✅ Content background
3713- ❌ Hardcoded white on themes tab → ✅ Template background
3714- ❌ Hardcoded borders (#ddd) → ✅ Template borders
3715
3716**Result**:
3717- Perfect color hierarchy ✓
3718- Correct background levels ✓
3719- Complete template integration ✓
3720
3721## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING
3722
3723### �� Fixed: All Admin Backgrounds Use Template Colors
3724- **Fixed:** All section backgrounds use `__background_alt__`
3725- **Fixed:** All content backgrounds use `__background__`
3726- **Fixed:** All borders use `__border__`
3727- **Fixed:** All text uses `__text__`
3728- **Result:** Complete admin template integration!
3729
3730### All Replacements
3731
3732**Backgrounds**:
3733```php
3734Before: background: #f9f9f9
3735After:  background: ' . $colors['bg_alt'] . '
3736
3737Before: background: #fff / background: white
3738After:  background: ' . $colors['bg'] . '
3739```
3740
3741**Borders**:
3742```php
3743Before: border: 1px solid #ddd
3744Before: border: 1px solid #e0e0e0
3745Before: border: 1px solid #eee
3746After:  border: 1px solid ' . $colors['border'] . '
3747```
3748
3749**Text**:
3750```php
3751Before: color: #333
3752Before: color: #666
3753After:  color: ' . $colors['text'] . '
3754```
3755
3756### Complete Admin Coverage
3757
3758**All tabs now themed**:
3759- ✅ Manage Events tab
3760- ✅ Update Plugin tab
3761- ✅ Outlook Sync tab
3762- ✅ Themes tab
3763- ✅ Tab navigation
3764- ✅ All sections
3765- ✅ All inputs
3766- ✅ All borders
3767- ✅ All text
3768
3769### Visual Result
3770
3771**Light Template**:
3772```
3773Admin Page:
3774┌──────────────────────────┐
3775│ Tab Navigation           │ ← Template borders
3776├──────────────────────────┤
3777│ Section Headers          │ ← bg_alt (light gray)
3778│ ┌──────────────────────┐ │
3779│ │ Form Inputs          │ │ ← bg (white)
3780│ │ Content Areas        │ │
3781│ └──────────────────────┘ │
3782└──────────────────────────┘
3783All template colors! ✓
3784```
3785
3786**Dark Template**:
3787```
3788Admin Page:
3789┌──────────────────────────┐
3790│ Tab Navigation           │ ← Template borders
3791├──────────────────────────┤
3792│ Section Headers          │ ← bg_alt (dark gray)
3793│ ┌──────────────────────┐ │
3794│ │ Form Inputs          │ │ ← bg (darker)
3795│ │ Content Areas        │ │
3796│ └──────────────────────┘ │
3797└──────────────────────────┘
3798All template colors! ✓
3799```
3800
3801### Template Color Mapping
3802
3803**Used throughout admin**:
3804```
3805__background_site__ → $colors['bg']       (main backgrounds)
3806__background_alt__  → $colors['bg_alt']   (section backgrounds)
3807__text__            → $colors['text']     (all text)
3808__border__          → $colors['border']   (all borders)
3809__link__            → $colors['link']     (links - future)
3810```
3811
3812### Examples by Section
3813
3814**Manage Events**:
3815- Event list backgrounds: `bg_alt`
3816- Event item backgrounds: `bg`
3817- Borders: `border`
3818- Text: `text`
3819
3820**Update Plugin**:
3821- Section backgrounds: `bg_alt`
3822- Content areas: `bg`
3823- Borders: `border`
3824- Text: `text`
3825
3826**Outlook Sync**:
3827- Config sections: `bg_alt`
3828- Input fields: `bg`
3829- Borders: `border`
3830- Labels: `text`
3831
3832**Themes Tab**:
3833- Theme cards: `bg_alt`
3834- Preview areas: `bg`
3835- Borders: `border`
3836- Descriptions: `text`
3837
3838### Benefits
3839
3840**Seamless Integration**:
3841- Matches wiki admin area perfectly
3842- Same colors throughout wiki
3843- Professional appearance
3844- Consistent experience
3845
3846**Automatic Adaptation**:
3847- Light templates: Light admin
3848- Dark templates: Dark admin
3849- Custom templates: Uses custom colors
3850
3851**No White Boxes**:
3852- Every background themed
3853- Every border themed
3854- Every text themed
3855- Complete consistency
3856
3857### PERFECT HARMONY
3858
3859**Frontend (Calendar)**:
3860- Wiki theme uses style.ini3861- Perfect template match ✓
3862
3863**Backend (Admin)**:
3864- Reads same style.ini3865- Perfect template match ✓
3866
3867**Complete Unity**:
3868- Same colors everywhere ✓
3869- Seamless experience ✓
3870- Professional polish ✓
3871
3872## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS
3873
3874### �� Enhanced: Month/Year Header & Admin Pages Use Template Colors
3875- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme
3876- **Added:** Admin pages read template's style.ini file
3877- **Added:** `getTemplateColors()` function in admin class
3878- **Fixed:** Tab navigation uses template text and border colors
3879- **Result:** Complete template integration everywhere!
3880
3881### Month/Year Header
3882
3883**Before**:
3884```php
3885color: __text__  // Same as primary text
3886```
3887
3888**After (Wiki Theme)**:
3889```php
3890color: __text_neu__  // Dimmed text (subtle)
3891```
3892
3893### Admin Pages Enhancement
3894
3895**New `getTemplateColors()` function**:
3896- Reads template's style.ini file
3897- Extracts color replacements
3898- Provides colors to all admin tabs
3899- Falls back to sensible defaults
3900
3901**Colors used**:
3902```php
3903bg: __background_site__
3904bg_alt: __background_alt__
3905text: __text__
3906border: __border__
3907link: __link__
3908```
3909
3910**Applied to**:
3911- Tab navigation borders
3912- Tab text colors
3913- All admin sections
3914- Ready for future enhancements
3915
3916### Visual Result
3917
3918**Calendar Header**:
3919```
3920┌────────────────────┐
3921│ ‹ February 2026 › │ ← __text_neu__ (dimmed)
3922└────────────────────┘
3923Subtle and elegant ✓
3924```
3925
3926**Admin Navigation**:
3927```
3928�� Manage Events | �� Update | ⚙️ Config | �� Themes
3929─────────────────────────────────────────────────
3930Active tab: Green (#00cc07)
3931Inactive tabs: Template text color
3932Border: Template border color
3933```
3934
3935### Template Integration
3936
3937**Light Template**:
3938```ini
3939__text_neu__ = "#666666"
3940__border__ = "#cccccc"
3941```
3942**Result**:
3943- Month/Year: Medium gray (subtle)
3944- Admin borders: Light gray
3945- Tab text: Dark gray
3946
3947**Dark Template**:
3948```ini
3949__text_neu__ = "#999999"
3950__border__ = "#555555"
3951```
3952**Result**:
3953- Month/Year: Light gray (subtle)
3954- Admin borders: Medium gray
3955- Tab text: Bright gray
3956
3957### Benefits
3958
3959**Calendar Frontend**:
3960- Month/Year header more subtle
3961- Better visual hierarchy
3962- Less prominent, more elegant
3963
3964**Admin Backend**:
3965- Uses template colors
3966- Matches wiki admin area
3967- Consistent experience
3968- Professional appearance
3969
3970### Future-Ready
3971
3972The `getTemplateColors()` function is now available for:
3973- ✅ Tab navigation (implemented)
3974- �� Section backgrounds (ready)
3975- �� Button colors (ready)
3976- �� Input fields (ready)
3977- �� Success/error messages (ready)
3978
3979**Foundation laid for complete admin theming!** ��
3980
3981## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS
3982
3983### �� Fixed: Add Event Bar & Section Headers Use Template Colors
3984- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme
3985- **Fixed:** "Today" header uses `__text_neu__`
3986- **Fixed:** "Tomorrow" header uses `__text__`
3987- **Fixed:** "Important Events" header uses `__border__`
3988- **Result:** Perfect template color integration!
3989
3990### All Changes
3991
3992**Add Event Bar (Wiki Theme)**:
3993
3994**Before**:
3995```php
3996background: #3498db  // Generic blue
3997```
3998
3999**After**:
4000```php
4001background: __background_alt__  // Template alternate bg
4002text: __text__                  // Template text color
4003hover: __background_neu__       // Template neutral bg
4004```
4005
4006**Section Headers (Wiki Theme)**:
4007
4008**Before**:
4009```php
4010Today: #ff9800           // Orange
4011Tomorrow: #4caf50        // Green
4012Important Events: #9b59b6 // Purple
4013```
4014
4015**After**:
4016```php
4017Today: __text_neu__      // Template dimmed text
4018Tomorrow: __text__       // Template primary text
4019Important Events: __border__ // Template border color
4020```
4021
4022### Visual Result
4023
4024**Wiki Default Theme**:
4025```
4026Add Event Bar:
4027┌────────────────┐
4028│  + ADD EVENT   │ ← Template alt background
4029└────────────────┘
4030
4031Sections:
4032━━━━━━━━━━━━━━━━
4033Today              ← Dimmed text color (__text_neu__)
4034• Team Meeting
4035
4036Tomorrow           ← Primary text color (__text__)
4037• Code Review
4038
4039Important Events   ← Border color (__border__)
4040• Project Deadline
4041```
4042
4043### Example with DokuWiki Default Template
4044
4045**Template colors**:
4046```ini
4047__background_alt__ = "#e8e8e8"
4048__text__ = "#333333"
4049__text_neu__ = "#666666"
4050__border__ = "#cccccc"
4051```
4052
4053**Calendar result**:
4054```
4055Add Event Bar: Light gray (#e8e8e8)
4056Today header: Medium gray (#666666)
4057Tomorrow header: Dark gray (#333333)
4058Important Events header: Border gray (#cccccc)
4059```
4060
4061### Example with Dark Template
4062
4063**Template colors**:
4064```ini
4065__background_alt__ = "#2d2d2d"
4066__text__ = "#e0e0e0"
4067__text_neu__ = "#999999"
4068__border__ = "#555555"
4069```
4070
4071**Calendar result**:
4072```
4073Add Event Bar: Dark gray (#2d2d2d)
4074Today header: Light gray (#999999)
4075Tomorrow header: Bright gray (#e0e0e0)
4076Important Events header: Medium gray (#555555)
4077```
4078
4079### Perfect Harmony
4080
4081All sidebar elements now use template colors:
4082- ✅ Add Event bar background
4083- ✅ Add Event bar text
4084- ✅ Today section header
4085- ✅ Tomorrow section header
4086- ✅ Important Events header
4087- ✅ Calendar cells
4088- ✅ Grid backgrounds
4089- ✅ All borders
4090
4091**Complete template integration!** ��
4092
4093## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS
4094
4095### �� Fixed: Calendar Cells Use Correct Template Color
4096- **Fixed:** Calendar cells now use `__background__` from template
4097- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__`
4098- **Result:** Calendar cells match main content area background!
4099
4100### Color Mapping Update
4101
4102**Before (v5.0.3)**:
4103```php
4104cell_bg: __background_neu__  // Wrong - this is for neutral/alternate
4105```
4106
4107**After (v5.0.4)**:
4108```php
4109cell_bg: __background__      // Correct - main content background
4110```
4111
4112### Template Color Usage
4113
4114**Wiki Default theme now uses**:
4115```
4116__background_site__ → Overall page background
4117__background__      → Calendar cells (main content bg)
4118__background_alt__  → Grid background, headers
4119__background_neu__  → Today cell highlight
4120__text__            → Primary text
4121__text_neu__        → Dimmed text
4122__link__            → Links, bright text
4123__border__          → All borders
4124```
4125
4126### Visual Result
4127
4128**Before**:
4129```
4130Calendar with template colors:
4131┌─────┬─────┬─────┐
4132│ Mon │ Tue │ Wed │
4133├─────┼─────┼─────┤
4134│  8  │  9  │ 10  │ ← Neutral gray (wrong)
4135└─────┴─────┴─────┘
4136```
4137
4138**After**:
4139```
4140Calendar with template colors:
4141┌─────┬─────┬─────┐
4142│ Mon │ Tue │ Wed │
4143├─────┼─────┼─────┤
4144│  8  │  9  │ 10  │ ← White/content bg (correct!)
4145└─────┴─────┴─────┘
4146```
4147
4148### Example Template Colors
4149
4150**DokuWiki Default**:
4151```ini
4152__background__ = "#ffffff"
4153```
4154**Result**: White calendar cells ✓
4155
4156**Dark Template**:
4157```ini
4158__background__ = "#2d2d2d"
4159```
4160**Result**: Dark calendar cells ✓
4161
4162**Custom Template**:
4163```ini
4164__background__ = "#f9f9f9"
4165```
4166**Result**: Custom color cells ✓
4167
4168### Perfect Matching
4169
4170Calendar cells now match:
4171- ✅ Main content area background
4172- ✅ Article/page background
4173- ✅ Content box background
4174- ✅ Same as wiki text background
4175
4176**Seamless integration!** ��
4177
4178## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI
4179
4180### �� Enhanced: Wiki Default Theme Reads Template Colors
4181- **Added:** Function to read colors from DokuWiki template's style.ini file
4182- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
4183- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
4184- **Uses:** Actual template colors instead of CSS variables
4185- **Result:** Perfect color matching with any DokuWiki template!
4186
4187### How It Works
4188
4189**New Function: `getWikiTemplateColors()`**
4190
41911. **Detects** current DokuWiki template name
41922. **Reads** the template's `style.ini` file
41933. **Parses** color replacements section
41944. **Maps** template colors to calendar theme
41955. **Falls back** to CSS variables if file not found
4196
4197### Colors Read from style.ini
4198
4199**Template color replacements used**:
4200```php
4201__background_site__  → bg, header_bg
4202__background_alt__   → grid_bg, cell_today_bg
4203__background_neu__   → cell_bg
4204__text__             → text_primary
4205__text_neu__         → text_dim
4206__link__             → text_bright
4207__border__           → border, grid_border
4208```
4209
4210### Example style.ini Mapping
4211
4212**Template style.ini**:
4213```ini
4214[replacements]
4215__background_site__ = "#f8f9fa"
4216__background_alt__  = "#e9ecef"
4217__background_neu__  = "#dee2e6"
4218__text__            = "#212529"
4219__text_neu__        = "#6c757d"
4220__link__            = "#0d6efd"
4221__border__          = "#ced4da"
4222```
4223
4224**Calendar theme result**:
4225```php
4226bg: #f8f9fa
4227header_bg: #e9ecef
4228grid_bg: #e9ecef
4229cell_bg: #dee2e6
4230text_primary: #212529
4231text_dim: #6c757d
4232text_bright: #0d6efd
4233border: #ced4da
4234grid_border: #ced4da
4235```
4236
4237### Before vs After
4238
4239**Before (v5.0.2)**:
4240```
4241Wiki Default theme used:
4242- CSS variables (var(--__background__, #fff))
4243- Required browser CSS variable support
4244- Fallback to generic colors
4245```
4246
4247**After (v5.0.3)**:
4248```
4249Wiki Default theme uses:
4250- Actual colors from template's style.ini
4251- Exact template color values
4252- No CSS variable dependency
4253- Perfect color matching!
4254```
4255
4256### File Location Priority
4257
4258Checks in order:
42591. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
42602. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
42613. Falls back to CSS variables if neither found
4262
4263### Benefits
4264
4265**More accurate colors**:
4266- Uses exact template color values ✓
4267- No CSS variable interpolation ✓
4268- Consistent across all browsers ✓
4269
4270**Better compatibility**:
4271- Works with older browsers ✓
4272- No CSS variable support needed ✓
4273- Direct color values ✓
4274
4275**Perfect matching**:
4276- Reads template's actual colors ✓
4277- Same colors as wiki pages ✓
4278- Seamless integration ✓
4279
4280### Template Examples
4281
4282**DokuWiki Default Template**:
4283```
4284Reads: lib/tpl/dokuwiki/style.ini
4285Gets: Default DokuWiki colors
4286Result: Perfect classic DokuWiki look
4287```
4288
4289**Bootstrap Template**:
4290```
4291Reads: lib/tpl/bootstrap3/style.ini
4292Gets: Bootstrap color scheme
4293Result: Perfect Bootstrap integration
4294```
4295
4296**Custom Template**:
4297```
4298Reads: conf/tpl/mycustom/style.ini
4299Gets: Your custom colors
4300Result: Perfect custom theme match
4301```
4302
4303### Fallback Chain
4304
43051. **Try** reading style.ini from template
43062. **If found** → Use exact colors from file
43073. **If not found** → Use CSS variables
43084. **If no CSS vars** → Use fallback colors
4309
4310**Always works, always matches!** ✓
4311
4312## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL
4313
4314### �� Fixed: Wiki Default Theme Day Panel Colors
4315- **Fixed:** Day popup panel now uses DokuWiki CSS variables
4316- **Fixed:** Panel background matches wiki theme
4317- **Fixed:** Panel header matches wiki theme
4318- **Fixed:** Border colors use wiki theme
4319- **Fixed:** Text colors use wiki theme
4320- **Result:** Perfect integration with DokuWiki templates!
4321
4322### All Changes
4323
4324**Day Panel Colors (Wiki Default)**:
4325
4326**Before**:
4327```php
4328background: rgba(36, 36, 36, 0.5)  // Dark gray (wrong!)
4329header: #3498db                     // Blue (wrong!)
4330```
4331
4332**After**:
4333```php
4334background: var(--__background__, #fff)
4335header: var(--__background_alt__, #e8e8e8)
4336header_text: var(--__text__, #333)
4337border: var(--__border__, #ccc)
4338shadow: 0 2px 4px rgba(0, 0, 0, 0.1)
4339```
4340
4341**Event Colors (Wiki Default)**:
4342```php
4343event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5))
4344border_color: var(--__border__, rgba(204, 204, 204, 0.3))
4345bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15)
4346```
4347
4348### Before vs After
4349
4350**Before (v5.0.1)**:
4351```
4352Wiki Default - Click Week Cell:
4353┌────────────────┐
4354│ Monday, Feb 8  │ ← Blue header (wrong)
4355├────────────────┤
4356│ Team Meeting   │ ← Dark gray bg (wrong)
4357│ 2:00 PM        │
4358└────────────────┘
4359Doesn't match wiki theme
4360```
4361
4362**After (v5.0.2)**:
4363```
4364Wiki Default - Click Week Cell:
4365
4366Light Wiki Theme:
4367┌────────────────┐
4368│ Monday, Feb 8  │ ← Light gray header ✓
4369├────────────────┤
4370│ Team Meeting   │ ← White bg ✓
4371│ 2:00 PM        │   Dark text ✓
4372└────────────────┘
4373
4374Dark Wiki Theme:
4375┌────────────────┐
4376│ Monday, Feb 8  │ ← Dark header ✓
4377├────────────────┤
4378│ Team Meeting   │ ← Dark bg ✓
4379│ 2:00 PM        │   Light text ✓
4380└────────────────┘
4381
4382Perfectly matches wiki!
4383```
4384
4385### CSS Variables Used
4386
4387**Wiki Default theme now uses**:
4388- `--__background__` - Main background (panel body)
4389- `--__background_alt__` - Alternate bg (panel header, events)
4390- `--__text__` - Text color (header text)
4391- `--__border__` - Border color (panel border, event borders)
4392
4393**With fallbacks**:
4394```css
4395var(--__background__, #fff)           /* white fallback */
4396var(--__background_alt__, #e8e8e8)    /* light gray fallback */
4397var(--__text__, #333)                 /* dark text fallback */
4398var(--__border__, #ccc)               /* gray border fallback */
4399```
4400
4401### Perfect Adaptation
4402
4403**Light Templates**:
4404- Light panel backgrounds ✓
4405- Dark text ✓
4406- Subtle borders ✓
4407- Clean appearance ✓
4408
4409**Dark Templates**:
4410- Dark panel backgrounds ✓
4411- Light text ✓
4412- Visible borders ✓
4413- Perfect contrast ✓
4414
4415**Custom Templates**:
4416- Uses template's CSS variables ✓
4417- Automatic adaptation ✓
4418- Seamless integration ✓
4419
4420### Now Truly Adaptive
4421
4422Wiki Default theme now properly uses DokuWiki CSS variables for:
4423- ✅ Calendar grid
4424- ✅ Sidebar widget
4425- ✅ Event list
4426- ✅ **Day panel** ← v5.0.2!
4427- ✅ All backgrounds
4428- ✅ All text
4429- ✅ All borders
4430
4431**Complete wiki integration!** ��
4432
4433## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS
4434
4435### �� Enhanced: Time Conflict Tooltips Now Themed
4436- **Fixed:** Conflict tooltips now match calendar theme
4437- **Added:** Theme-aware background, border, text colors
4438- **Added:** Theme-aware shadow effects
4439- **Result:** Complete visual consistency!
4440
4441### Tooltip Theming
4442
4443**Now uses theme colors for**:
4444- Background: Theme background color
4445- Border: Theme border color
4446- Header text: Theme primary text color
4447- Item text: Theme dim text color
4448- Shadow: Theme shadow color
4449
4450### Before vs After
4451
4452**Before (v5.0.0)**:
4453```
4454Hover ⚠️ badge:
4455┌─────────────────┐
4456│ ⚠️ Time Conflicts│ ← Default colors
4457│ • Event A       │
4458│ • Event B       │
4459└─────────────────┘
4460```
4461
4462**After (v5.0.1)**:
4463```
4464Matrix Theme:
4465┌─────────────────┐
4466│ ⚠️ Time Conflicts│ ← Green header
4467│ • Event A       │ ← Green text
4468│ • Event B       │   Dark green bg
4469└─────────────────┘
4470
4471Purple Theme:
4472┌─────────────────┐
4473│ ⚠️ Time Conflicts│ ← Purple header
4474│ • Event A       │ ← Purple text
4475│ • Event B       │   Dark purple bg
4476└─────────────────┘
4477
4478Professional Theme:
4479┌─────────────────┐
4480│ ⚠️ Time Conflicts│ ← Blue header
4481│ • Event A       │ ← Dark text
4482│ • Event B       │   Light bg
4483└─────────────────┘
4484
4485Pink Theme:
4486┌─────────────────┐
4487│ ⚠️ Time Conflicts│ ← Pink header ✨
4488│ • Event A       │ ← Pink text
4489│ • Event B       │   Dark pink bg ��
4490└─────────────────┘
4491
4492Wiki Default:
4493┌─────────────────┐
4494│ ⚠️ Time Conflicts│ ← Adapts to wiki
4495│ • Event A       │ ← Wiki colors
4496│ • Event B       │
4497└─────────────────┘
4498```
4499
4500### Now 100% Complete
4501
4502**Every tooltip themed**:
4503- ✅ Conflict tooltips
4504- ✅ All other tooltips (if any)
4505- ✅ Perfect consistency
4506
4507**Absolute perfection!** ✨
4508
4509## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION
4510
4511### �� Major Milestone: Version 5.0
4512
4513This 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.
4514
4515### Complete Feature Set
4516
4517**5 Beautiful Themes**:
4518- �� Matrix Edition (Green with glow)
4519- �� Purple Dream (Elegant purple)
4520- �� Professional Blue (Clean and modern)
4521- �� Pink Bling (Maximum sparkle)
4522- �� Wiki Default (Auto-adapts to your DokuWiki theme)
4523
4524**100% Theme Coverage**:
4525- ✅ Calendar grid and cells
4526- ✅ Event boxes and borders
4527- ✅ Sidebar widget
4528- ✅ Event list panel
4529- ✅ Search functionality
4530- ✅ Edit/Add dialogs (complete)
4531- ✅ Day popup dialogs
4532- ✅ Month picker
4533- ✅ All text (primary, dim, bright)
4534- ✅ All buttons
4535- ✅ All inputs and forms
4536- ✅ All checkboxes
4537- ✅ All borders
4538- ✅ All badges and labels
4539- ✅ Event highlight effects
4540
4541**Perfect Visual Consistency**:
4542- No white pixels anywhere
4543- No unthemed elements
4544- No default colors
4545- Complete visual unity
4546
4547### Major Improvements in v5.0
4548
45491. **Complete Dialog Theming** (v4.8.5-4.8.7)
4550   - Edit event dialog fully themed
4551   - Day popup dialog fully themed
4552   - All form inputs themed
4553   - All checkboxes themed
4554   - All buttons themed
4555
45562. **Event Box Border Perfection** (v4.8.6)
4557   - All 4 borders themed (top, right, bottom, left)
4558   - Sidebar event dividers themed
4559   - Past Events toggle border themed
4560
45613. **Checkbox Field Borders** (v4.9.0)
4562   - Repeating Event section border themed
4563   - Task checkbox section border themed
4564
45654. **Wiki Default Theme** (v4.10.0)
4566   - New 5th theme
4567   - Uses DokuWiki CSS variables
4568   - Auto-adapts to any wiki template
4569   - Perfect for seamless integration
4570
45715. **Clean Text Appearance** (v4.11.0)
4572   - Removed text glow from Matrix
4573   - Removed text glow from Purple
4574   - Removed text glow from Professional
4575   - Removed text glow from Wiki Default
4576   - Kept text glow on Pink Bling only
4577
45786. **Event Highlight Effects** (v4.12.0-4.12.1)
4579   - Theme-aware highlight glow
4580   - Click event bar → event glows
4581   - 3-second themed glow effect
4582   - Smooth animations
4583
4584### See RELEASE_NOTES.md for Complete Details
4585
4586For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release.
4587
4588## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION
4589
4590### �� Fixed: Event Highlight Now Working
4591- **Fixed:** Used setProperty() to properly apply !important styles
4592- **Added:** Console logging for debugging
4593- **Fixed:** Proper style application with important flag
4594- **Result:** Highlight glow now works correctly!
4595
4596### Technical Fix
4597
4598**Before (not working)**:
4599```javascript
4600eventItem.style.background = color + ' !important'; // Doesn't work
4601```
4602
4603**After (working)**:
4604```javascript
4605eventItem.style.setProperty('background', color, 'important'); // Works!
4606```
4607
4608### Added Debug Logging
4609
4610Console now shows:
4611- "Highlighting event: [calId] [eventId] [date]"
4612- "Found event item: [element]"
4613- "Theme: [theme name]"
4614- "Highlight colors: [bg] [shadow]"
4615- "Applied highlight styles"
4616- "Removing highlight" (after 3 seconds)
4617
4618### Now Working
4619
4620Click any event bar → Event glows with theme colors ✓
4621
4622## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW
4623
4624### ✨ Enhanced: Event Click Highlight Now Theme-Aware
4625- **Fixed:** Restored event highlight glow when clicking calendar bars
4626- **Improved:** Highlight now matches each theme's colors
4627- **Added:** Stronger glow effect for better visibility
4628- **Duration:** 3 seconds with smooth fade
4629- **Result:** Beautiful themed highlights for all themes!
4630
4631### How It Works
4632
4633When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow:
4634
4635**Matrix Theme**:
4636```javascript
4637Background: Darker green (#1a3d1a)
4638Glow: Double green glow (0 0 20px + 0 0 40px)
4639Color: rgba(0, 204, 7, 0.8)
4640```
4641
4642**Purple Theme**:
4643```javascript
4644Background: Darker purple (#3d2b4d)
4645Glow: Double purple glow
4646Color: rgba(155, 89, 182, 0.8)
4647```
4648
4649**Professional Theme**:
4650```javascript
4651Background: Light blue (#e3f2fd)
4652Glow: Single blue glow
4653Color: rgba(74, 144, 226, 0.4)
4654```
4655
4656**Pink Theme**:
4657```javascript
4658Background: Darker pink (#3d2030)
4659Glow: Double pink glow ✨��
4660Color: rgba(255, 20, 147, 0.8)
4661```
4662
4663**Wiki Theme**:
4664```javascript
4665Background: var(--__background_neu__)
4666Glow: Blue glow (adapts to wiki)
4667Color: rgba(43, 115, 183, 0.4)
4668```
4669
4670### Visual Examples
4671
4672**Matrix - Click Event**:
4673```
4674Calendar:
4675┌─────────────┐
4676│ 2:00 PM │ ← Click this bar
4677└─────────────┘
4678
4679Event List:
4680╔═════════════════════╗
4681║ Team Meeting        ║ ← GLOWS GREEN
4682║ 2:00 PM             ║    for 3 seconds
4683╚═════════════════════╝
4684   ↑↑↑ Strong green glow ↑↑↑
4685```
4686
4687**Purple - Click Event**:
4688```
4689Calendar:
4690┌─────────────┐
4691│ 4:00 PM │ ← Click
4692└─────────────┘
4693
4694Event List:
4695╔═════════════════════╗
4696║ Code Review         ║ ← GLOWS PURPLE
4697║ 4:00 PM             ║    for 3 seconds
4698╚═════════════════════╝
4699   ↑↑↑ Strong purple glow ↑↑↑
4700```
4701
4702**Pink - Click Event**:
4703```
4704Calendar:
4705┌─────────────┐
4706│ 1:00 PM │ ← Click
4707└─────────────┘
4708
4709Event List:
4710╔═════════════════════╗
4711║ Lunch Date ��       ║ ← GLOWS PINK
4712║ 1:00 PM ✨          ║    for 3 seconds
4713╚═════════════════════╝
4714   ↑↑↑ MAXIMUM SPARKLE ↑↑↑
4715```
4716
4717### Glow Specifications
4718
4719**Matrix**:
4720- Background: Dark green
4721- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)`
4722- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)`
4723- Effect: Strong green pulse
4724
4725**Purple**:
4726- Background: Dark purple
4727- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)`
4728- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)`
4729- Effect: Strong purple pulse
4730
4731**Professional**:
4732- Background: Light blue
4733- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)`
4734- Effect: Subtle blue glow
4735
4736**Pink**:
4737- Background: Dark pink
4738- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)`
4739- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)`
4740- Effect: MAXIMUM SPARKLE ✨��
4741
4742**Wiki**:
4743- Background: Theme neutral color
4744- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)`
4745- Effect: Adapts to wiki theme
4746
4747### User Experience
4748
4749**Click event bar** → Event highlights with themed glow
4750**Auto-scroll** → Event scrolls into view smoothly
4751**3 second glow** → Fade out after 3 seconds
4752**Smooth transition** → 0.3s ease-in-out
4753
4754### Perfect for Finding Events
4755
4756**Large event lists**: Quickly locate the clicked event ✓
4757**Visual feedback**: Know which event you clicked ✓
4758**Theme consistency**: Matches your chosen theme ✓
4759**Smooth animation**: Professional appearance ✓
4760
4761### All Themes Covered
4762
4763- ✅ Matrix: Green glow
4764- ✅ Purple: Purple glow
4765- ✅ Professional: Blue glow
4766- ✅ Pink: Maximum pink sparkle
4767- ✅ Wiki: Adaptive glow
4768
4769**Click any event bar and watch it glow!** ✨
4770
4771## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES
4772
4773### �� Changed: Text Glow Now Pink-Only
4774- **Removed:** Text shadow/glow from Matrix theme
4775- **Removed:** Text shadow/glow from Purple theme
4776- **Removed:** Text shadow/glow from Professional theme (already had none)
4777- **Removed:** Text shadow/glow from Wiki Default theme
4778- **Kept:** Text shadow/glow ONLY on Pink Bling theme
4779- **Result:** Cleaner look for Matrix, Purple, and Wiki themes!
4780
4781### All Changes
4782
4783**Before (Matrix, Purple)**:
4784```css
4785text-shadow: 0 0 2px $text_color; /* Glow effect */
4786```
4787
4788**After (Matrix, Purple, Professional, Wiki)**:
4789```css
4790text-shadow: none; /* Clean, no glow */
4791```
4792
4793**Pink Bling (unchanged)**:
4794```css
4795text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */
4796```
4797
4798### Text Shadow Removed From
4799
4800**Sidebar day numbers**: No glow ✓
4801**Event titles**: No glow ✓
4802**Event dates**: No glow ✓
4803**Add Event button**: No glow ✓
4804**Day popup events**: No glow ✓
4805
4806### Before vs After
4807
4808**BEFORE (Matrix)**:
4809```
4810Event Title ✨ ← Glowing green text
48112:00 PM ✨     ← Glowing text
4812```
4813
4814**AFTER (Matrix)**:
4815```
4816Event Title    ← Clean green text
48172:00 PM        ← Clean text
4818```
4819
4820**Pink Bling (Still Glows)**:
4821```
4822Event Title ✨�� ← Still glowing!
48232:00 PM ✨     ← Maximum sparkle!
4824```
4825
4826### Theme Appearances
4827
4828**�� Matrix Edition**:
4829- Clean green text
4830- No glow effects
4831- Professional appearance
4832- Still has border glow
4833
4834**�� Purple Dream**:
4835- Clean purple text
4836- No glow effects
4837- Elegant appearance
4838- Still has border glow
4839
4840**�� Professional Blue**:
4841- Clean text (unchanged)
4842- No glow effects
4843- Modern appearance
4844
4845**�� Pink Bling**:
4846- Glowing pink text ✨
4847- Maximum glow effects ��
4848- Sparkle everywhere!
4849- All the bling!
4850
4851**�� Wiki Default**:
4852- Clean text
4853- No glow effects
4854- Matches wiki theme
4855
4856### Glow Effects Remaining
4857
4858**Border/box glow**: Still present on all themes ✓
4859**Pink text glow**: Only on Pink Bling ✓
4860**Shadow effects**: Still on buttons/boxes4861
4862**Only TEXT glow removed from non-pink themes!**
4863
4864### Result
4865
4866**Cleaner, more professional look** for:
4867- Matrix ✓
4868- Purple ✓
4869- Professional ✓
4870- Wiki Default ✓
4871
4872**Maximum sparkle** for:
4873- Pink Bling ✨��✓
4874
4875**Best of both worlds!** ��
4876
4877## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME
4878
4879### �� New: Wiki Default Theme
4880- **Added:** 5th theme that automatically matches your DokuWiki template
4881- **Uses:** CSS variables from your wiki theme
4882- **Adapts:** Automatically works with light and dark themes
4883- **Perfect:** Seamless integration with any DokuWiki template
4884
4885### How It Works
4886
4887**Wiki theme uses DokuWiki CSS variables**:
4888```css
4889bg: var(--__background_site__, #f5f5f5)
4890border: var(--__border__, #ccc)
4891text_primary: var(--__text__, #333)
4892text_bright: var(--__link__, #2b73b7)
4893text_dim: var(--__text_neu__, #666)
4894cell_bg: var(--__background__, #fff)
4895grid_border: var(--__border__, #ccc)
4896```
4897
4898**With fallbacks for older DokuWiki versions**:
4899- If CSS variables exist → Use them ✓
4900- If not available → Use fallback values ✓
4901
4902### All 5 Themes
4903
4904**1. �� Matrix Edition** (Default)
4905- Dark green with neon glow
4906- Matrix-style effects
4907- Original theme
4908
4909**2. �� Purple Dream**
4910- Rich purple with violet accents
4911- Elegant and sophisticated
4912- Soft glow effects
4913
4914**3. �� Professional Blue**
4915- Clean blue and grey
4916- Modern professional
4917- No glow effects
4918
4919**4. �� Pink Bling**
4920- Glamorous hot pink
4921- Maximum sparkle ✨
4922- Hearts and diamonds
4923
4924**5. �� Wiki Default** ← NEW!
4925- Matches your wiki template
4926- Auto-adapts to light/dark
4927- Perfect integration
4928
4929### Examples
4930
4931**Light Wiki Template**:
4932```
4933Wiki Default theme shows:
4934- Light backgrounds (#f5f5f5)
4935- Dark text (#333)
4936- Light inputs (#fff)
4937- Gray borders (#ccc)
4938
4939Matches perfectly! ✓
4940```
4941
4942**Dark Wiki Template**:
4943```
4944Wiki Default theme shows:
4945- Dark backgrounds (from template)
4946- Light text (from template)
4947- Dark inputs (from template)
4948- Dark borders (from template)
4949
4950Matches perfectly! ✓
4951```
4952
4953**Bootstrap Template**:
4954```
4955Uses Bootstrap's colors
4956Matches perfectly! ✓
4957```
4958
4959**Material Template**:
4960```
4961Uses Material's colors
4962Matches perfectly! ✓
4963```
4964
4965### CSS Variables Used
4966
4967**DokuWiki provides**:
4968- `--__background_site__`: Page background
4969- `--__background_alt__`: Section backgrounds
4970- `--__background__`: Content backgrounds
4971- `--__text__`: Primary text color
4972- `--__link__`: Link color
4973- `--__text_neu__`: Dimmed text
4974- `--__border__`: Border color
4975- `--__background_neu__`: Neutral background
4976
4977**All with fallbacks**:
4978```css
4979var(--__background_site__, #f5f5f5)
4980/* Falls back to light gray if variable doesn't exist */
4981```
4982
4983### Perfect for Every Template
4984
4985**Custom templates**: Automatically adapts ✓
4986**Light themes**: Perfect match ✓
4987**Dark themes**: Perfect match ✓
4988**Any DokuWiki version**: Works with fallbacks ✓
4989
4990### Complete Theme Collection
4991
4992Now with **5 gorgeous themes**:
4993- 3 dark themes (Matrix, Purple, Pink)
4994- 1 light theme (Professional)
4995- 1 adaptive theme (Wiki Default) ← NEW!
4996
4997**Something for everyone!** ��
4998
4999## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS
5000
5001### �� Fixed: Checkbox Field Borders Themed
5002- **Fixed:** Added border-color to checkbox field divs
5003- **Fixed:** Repeating Event section border
5004- **Fixed:** Task checkbox section border
5005- **Result:** No white borders around checkboxes!
5006
5007### Changes
5008
5009**Checkbox Field Border Styling**:
5010
5011**Before**:
5012```html
5013<div class="form-field-checkbox"
5014     style="background: $bg !important;">
5015<!-- Border shows white ✗ -->
5016```
5017
5018**After**:
5019```php
5020<div class="form-field-checkbox"
5021     style="background: $bg !important;
5022            border-color: $grid_border !important;">
5023<!-- Border themed ✓ -->
5024```
5025
5026### Before vs After
5027
5028**BEFORE (v4.8.8)**:
5029```
5030Edit Dialog:
5031┌──────────────────┐
5032│ ☑ Repeating     ║│ ← White border ✗
5033└──────────────────┘
5034┌──────────────────┐
5035│ ☑ Task checkbox ║│ ← White border ✗
5036└──────────────────┘
5037```
5038
5039**AFTER (v4.9.0)**:
5040```
5041Matrix Edit Dialog:
5042┌──────────────────┐
5043│ ☑ Repeating      │ ← Green border ✓
5044└──────────────────┘
5045┌──────────────────┐
5046│ ☑ Task checkbox  │ ← Green border ✓
5047└──────────────────┘
5048```
5049
5050### ABSOLUTE PERFECTION ACHIEVED
5051
5052**Every element themed**:
5053- ✅ All inputs
5054- ✅ All labels
5055- ✅ All sections
5056- ✅ **Checkbox field borders** ← v4.9.0!
5057- ✅ All buttons
5058- ✅ All checkboxes
5059- ✅ No white anywhere
5060
5061**100% COMPLETE!** ��✨
5062
5063## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
5064
5065### �� Fixed: Checkbox Field Borders Themed
5066- **Fixed:** Added border-color to checkbox field divs
5067- **Fixed:** Repeating Event section border
5068- **Fixed:** Task checkbox section border
5069- **Result:** No white borders around checkboxes!
5070
5071### �� Fixed: Admin Sections Respect Wiki Theme
5072- **Fixed:** All admin backgrounds use CSS variables
5073- **Fixed:** Text colors use wiki text color
5074- **Fixed:** Borders use wiki border color
5075- **Result:** Admin matches wiki theme perfectly!
5076
5077### All Changes
5078
5079**1. Checkbox Field Border Styling**:
5080
5081**Before**:
5082```html
5083<div class="form-field-checkbox"
5084     style="background: $bg !important;">
5085<!-- Border shows white ✗ -->
5086```
5087
5088**After**:
5089```php
5090<div class="form-field-checkbox"
5091     style="background: $bg !important;
5092            border-color: $grid_border !important;">
5093<!-- Border themed ✓ -->
5094```
5095
5096**2. Admin CSS Variables**:
5097
5098**Added CSS variables for wiki theme compatibility**:
5099```css
5100.calendar-admin-wrapper {
5101    background: var(--__background_site__, #f5f5f5);
5102    color: var(--__text__, #333);
5103}
5104.calendar-admin-section {
5105    background: var(--__background_alt__, #fafafa);
5106}
5107.calendar-admin-input {
5108    background: var(--__background__, #fff);
5109    color: var(--__text__, #333);
5110}
5111```
5112
5113**Replaced hardcoded colors**:
5114```php
5115// Before:
5116background: #f9f9f9
5117background: white
5118color: #333
5119border: 1px solid #ddd
5120
5121// After:
5122background: var(--__background_alt__, #f9f9f9)
5123background: var(--__background__, #fff)
5124color: var(--__text__, #333)
5125border: 1px solid var(--__border__, #ddd)
5126```
5127
5128### Before vs After
5129
5130**BEFORE (v4.8.8)**:
5131```
5132Edit Dialog:
5133┌──────────────────┐
5134│ ☑ Repeating     ║│ ← White border ✗
5135└──────────────────┘
5136┌──────────────────┐
5137│ ☑ Task checkbox ║│ ← White border ✗
5138└──────────────────┘
5139
5140Admin Page (Dark Wiki Theme):
5141┌──────────────────┐
5142│ Light sections  │ ← White boxes ✗
5143│ Light inputs    │ ← Doesn't match ✗
5144└──────────────────┘
5145```
5146
5147**AFTER (v4.8.9)**:
5148```
5149Matrix Edit Dialog:
5150┌──────────────────┐
5151│ ☑ Repeating      │ ← Green border ✓
5152└──────────────────┘
5153┌──────────────────┐
5154│ ☑ Task checkbox  │ ← Green border ✓
5155└──────────────────┘
5156
5157Admin (Dark Wiki Theme):
5158┌──────────────────┐
5159│ Dark sections   │ ← Matches wiki ✓
5160│ Dark inputs     │ ← Perfect match ✓
5161└──────────────────┘
5162```
5163
5164### Admin Theme Examples
5165
5166**Light Wiki Theme**:
5167```
5168Admin page backgrounds: Light
5169Section boxes: Light gray
5170Inputs: White
5171Borders: Gray
5172Text: Dark
5173
5174Perfect match! ✓
5175```
5176
5177**Dark Wiki Theme**:
5178```
5179Admin page backgrounds: Dark
5180Section boxes: Darker gray
5181Inputs: Dark
5182Borders: Dark gray
5183Text: Light
5184
5185Perfect match! ✓
5186```
5187
5188**DokuWiki Default**:
5189```
5190Uses wiki's CSS variables
5191Automatically adapts
5192Always matches! ✓
5193```
5194
5195### Complete Coverage
5196
5197**Edit Dialog**:
5198- ✅ All inputs themed
5199- ✅ All labels themed
5200- ✅ All sections themed
5201- ✅ **Checkbox borders** ← v4.8.9!
5202- ✅ All buttons themed
5203- ✅ No white anywhere
5204
5205**Admin Interface**:
5206- ✅ **Tab navigation** ← v4.8.9!
5207- ✅ **Section boxes** ← v4.8.9!
5208- ✅ **Input fields** ← v4.8.9!
5209- ✅ **Text colors** ← v4.8.9!
5210- ✅ **Borders** ← v4.8.9!
5211- ✅ All tabs (Manage, Update, Outlook, Themes)
5212
5213### CSS Variables Used
5214
5215**DokuWiki provides these**:
5216- `--__background_site__`: Page background
5217- `--__background_alt__`: Alternate background
5218- `--__background__`: Primary background (inputs)
5219- `--__text__`: Text color
5220- `--__border__`: Border color
5221
5222**Fallbacks provided for older DokuWiki**:
5223```css
5224var(--__background_site__, #f5f5f5)
5225var(--__background_alt__, #fafafa)
5226var(--__background__, #fff)
5227var(--__text__, #333)
5228var(--__border__, #ddd)
5229```
5230
5231### Perfect Adaptation
5232
5233**Admin now adapts to ANY wiki theme**:
5234- Light themes → Light admin ✓
5235- Dark themes → Dark admin ✓
5236- Custom themes → Matches perfectly ✓
5237- No hardcoded colors ✓
5238
5239**Calendar themes still work**:
5240- Matrix, Purple, Professional, Pink ✓
5241- Independent from wiki theme ✓
5242- Admin respects wiki ✓
5243- Calendar respects calendar theme ✓
5244
5245### FINAL PERFECTION
5246
5247**Frontend (Calendar)**:
5248- Complete theming ✓
5249- 4 beautiful themes ✓
5250- Every pixel themed ✓
5251
5252**Backend (Admin)**:
5253- Respects wiki theme ✓
5254- Works with any theme ✓
5255- Perfect compatibility ✓
5256
5257**ABSOLUTELY EVERYTHING THEMED!** ����✨
5258
5259## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
5260
5261### �� Fixed: Task Checkboxes Now Fully Themed
5262- **Fixed:** Added background-color and border inline
5263- **Fixed:** Both PHP and JavaScript versions
5264- **Result:** No white checkboxes!
5265
5266### �� Fixed: Past Events Toggle Border
5267- **Fixed:** Added !important to border styling
5268- **Fixed:** Explicit top and bottom borders
5269- **Result:** No white line under toggle!
5270
5271### �� Fixed: Form Field Section Backgrounds
5272- **Fixed:** All form-field and form-row-group backgrounds
5273- **Fixed:** Every section in edit dialog
5274- **Result:** No white sections anywhere!
5275
5276### All Changes
5277
5278**1. Task Checkbox Styling**:
5279
5280**Before**:
5281```php
5282style="accent-color: $border !important;"
5283<!-- Only accent, background still white ✗ -->
5284```
5285
5286**After**:
5287```php
5288style="accent-color: $border !important;
5289       background-color: $cell_bg !important;
5290       border: 2px solid $grid_border !important;"
5291<!-- Full theming ✓ -->
5292```
5293
5294**2. Past Events Toggle Border**:
5295
5296**Before**:
5297```php
5298style="border-color: $grid_border;"
5299<!-- No !important, CSS overrides ✗ -->
5300```
5301
5302**After**:
5303```php
5304style="border-color: $grid_border !important;
5305       border-top: 1px solid $grid_border !important;
5306       border-bottom: 1px solid $grid_border !important;"
5307<!-- Cannot be overridden ✓ -->
5308```
5309
5310**3. Form Field Backgrounds**:
5311
5312**Before**:
5313```html
5314<div class="form-field">
5315<div class="form-row-group">
5316<!-- No background, shows white ✗ -->
5317```
5318
5319**After**:
5320```php
5321<div class="form-field" style="background: $bg !important;">
5322<div class="form-row-group" style="background: $bg !important;">
5323<!-- Fully themed ✓ -->
5324```
5325
5326### Before vs After
5327
5328**BEFORE (v4.8.7)**:
5329```
5330Event:
5331□ Task checkbox  ← White checkbox ✗
5332
5333Past Events
5334▶ Past Events (3) ← White line below ✗
5335─────────────────
5336
5337Edit Dialog:
5338┌──────────────┐
5339│ Form fields  │ ← White sections ✗
5340└──────────────┘
5341```
5342
5343**AFTER (v4.8.8)**:
5344```
5345Matrix Event:
5346☑ Task checkbox  ← Green checkbox ✓
5347
5348Past Events
5349▶ Past Events (3) ← Green border ✓
5350─────────────────
5351
5352Matrix Edit Dialog:
5353┌──────────────┐
5354│ Form fields  │ ← Dark green ✓
5355└──────────────┘
5356```
5357
5358### Complete Examples
5359
5360**Matrix Theme**:
5361```
5362Task Checkbox:
5363☑ Checked   → Green checkmark, green bg
5364☐ Unchecked → Green border, dark green bg ✓
5365
5366Past Events Toggle:
5367▶ Past Events (3)
5368─────────────────── Green border ✓
5369
5370Edit Dialog:
5371All sections dark green ✓
5372No white anywhere ✓
5373```
5374
5375**Purple Theme**:
5376```
5377Task Checkbox:
5378☑ Checked   → Purple checkmark, purple bg
5379☐ Unchecked → Purple border, dark purple bg ✓
5380
5381Past Events Toggle:
5382▶ Past Events (3)
5383─────────────────── Purple border ✓
5384
5385Edit Dialog:
5386All sections dark purple ✓
5387```
5388
5389**Professional Theme**:
5390```
5391Task Checkbox:
5392☑ Checked   → Blue checkmark, white bg
5393☐ Unchecked → Gray border, white bg ✓
5394
5395Past Events Toggle:
5396▶ Past Events (3)
5397─────────────────── Gray border ✓
5398
5399Edit Dialog:
5400All sections light ✓
5401```
5402
5403**Pink Theme**:
5404```
5405Task Checkbox:
5406☑ Checked   → Pink checkmark, pink bg ✨
5407☐ Unchecked → Pink border, dark pink bg ✓
5408
5409Past Events Toggle:
5410▶ Past Events (3)
5411─────────────────── Pink border ��
5412
5413Edit Dialog:
5414All sections dark pink ✓
5415```
5416
5417### Checkbox Visual
5418
5419**Matrix - Unchecked**:
5420```
5421┌─────┐
5422│     │ ← Dark green background
5423│     │   Green border
5424└─────┘
5425```
5426
5427**Matrix - Checked**:
5428```
5429┌─────┐
5430│ ✓   │ ← Dark green background
5431│     │   Green checkmark
5432└─────┘
5433```
5434
5435### Past Events Border
5436
5437**Before**:
5438```
5439▶ Past Events (3)
5440─────────────────── White line ✗
5441```
5442
5443**After**:
5444```
5445▶ Past Events (3)
5446─────────────────── Green line ✓ (Matrix)
5447                    Purple line ✓ (Purple)
5448                    Gray line ✓ (Professional)
5449                    Pink line ✓ (Pink)
5450```
5451
5452### Form Field Coverage
5453
5454**All sections themed**:
5455- ✅ Title field
5456- ✅ Namespace field
5457- ✅ Description field
5458- ✅ **Date row** ← v4.8.8!
5459- ✅ **Checkbox sections** ← v4.8.8!
5460- ✅ **Recurring options** ← v4.8.8!
5461- ✅ **Time row** ← v4.8.8!
5462- ✅ **Color row** ← v4.8.8!
5463- ✅ Button footer
5464
5465**Every div has background!** ✓
5466
5467### ABSOLUTE PERFECTION
5468
5469**Not a single white pixel**:
5470- ✅ No white checkboxes
5471- ✅ No white borders
5472- ✅ No white backgrounds
5473- ✅ No white sections
5474- ✅ No white lines
5475- ✅ No white anything
5476
5477**100% PERFECT THEMING!** ����✨
5478
5479## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING
5480
5481### �� Fixed: Checkbox Section Backgrounds Themed
5482- **Fixed:** Repeating Event section background
5483- **Fixed:** Task checkbox section background
5484- **Result:** No white backgrounds in dialog!
5485
5486### �� Fixed: Unchecked Task Checkboxes Themed
5487- **Fixed:** Added CSS for checkbox backgrounds
5488- **Fixed:** Unchecked boxes show theme colors
5489- **Result:** No white checkboxes!
5490
5491### �� Fixed: Day Popup Dialog Fully Themed
5492- **Fixed:** Popup container, header, body themed
5493- **Fixed:** Event items in popup themed
5494- **Fixed:** Add Event button themed
5495- **Fixed:** Footer section themed
5496- **Result:** Perfect popup theming!
5497
5498### All Changes
5499
5500**1. Checkbox Section Backgrounds**:
5501
5502**Before**:
5503```html
5504<div class="form-field-checkbox">
5505<!-- White background ✗ -->
5506```
5507
5508**After**:
5509```php
5510<div class="form-field-checkbox"
5511     style="background: $bg !important;">
5512<!-- Themed ✓ -->
5513```
5514
5515**2. Checkbox Background CSS**:
5516
5517**Added to style block**:
5518```css
5519.task-checkbox {
5520    background-color: $cell_bg !important;
5521    border: 2px solid $grid_border !important;
5522}
5523```
5524
5525**3. Day Popup Theming**:
5526
5527**Container**:
5528```javascript
5529style="background: $bg !important;
5530       border: 2px solid $border !important;
5531       box-shadow: 0 0 20px $shadow !important;"
5532```
5533
5534**Header**:
5535```javascript
5536style="background: $header_bg !important;
5537       color: $text_primary !important;
5538       border-bottom: 1px solid $border !important;"
5539```
5540
5541**Footer**:
5542```javascript
5543style="background: $bg !important;
5544       border-top: 1px solid $grid_border !important;"
5545```
5546
5547**Add Event Button**:
5548```javascript
5549style="background: $border !important;
5550       color: $bg !important;
5551       border-color: $border !important;"
5552```
5553
5554**Event Items**:
5555```javascript
5556style="background: $cell_bg !important;
5557       border: 1px solid $grid_border !important;"
5558```
5559
5560### Before vs After
5561
5562**BEFORE (v4.8.6)**:
5563```
5564Edit Dialog:
5565┌──────────────────┐
5566│ ☑ Repeating Event│ ← White background ✗
5567├──────────────────┤
5568│ ☑ Task checkbox  │ ← White background ✗
5569└──────────────────┘
5570
5571Day Popup:
5572┌──────────────────┐
5573│ Monday, Feb 8    │ ← White ✗
5574├──────────────────┤
5575│ Team Meeting     │ ← White ✗
5576│ 2:00 PM          │
5577├──────────────────┤
5578│ [+ Add Event]    │ ← White ✗
5579└──────────────────┘
5580
5581Task checkbox: ☐ ← White ✗
5582```
5583
5584**AFTER (v4.8.7)**:
5585```
5586Edit Dialog (Matrix):
5587┌──────────────────┐
5588│ ☑ Repeating Event│ ← Dark green ✓
5589├──────────────────┤
5590│ ☑ Task checkbox  │ ← Dark green ✓
5591└──────────────────┘
5592
5593Day Popup (Matrix):
5594┌──────────────────┐
5595│ Monday, Feb 8    │ ← Dark green ✓
5596├──────────────────┤
5597│ Team Meeting     │ ← Dark green ✓
5598│ 2:00 PM          │
5599├──────────────────┤
5600│ [+ Add Event]    │ ← Green button ✓
5601└──────────────────┘
5602
5603Task checkbox: ☑ ← Green ✓
5604```
5605
5606### Complete Examples
5607
5608**Matrix Dialog**:
5609```
5610┌──────────────────────────┐
5611│ ✏️ Edit Event            │
5612├──────────────────────────┤
5613│ �� Title: [_________]    │
5614│ �� Date: [__________]    │
5615│                          │
5616│ ☑ �� Repeating Event     │ ← Dark green bg
5617├──────────────────────────┤
5618│ ☑ �� Task checkbox       │ ← Dark green bg
5619├──────────────────────────┤
5620│ [Cancel] [�� Save]       │
5621└──────────────────────────┘
5622
5623All sections themed! ✓
5624```
5625
5626**Matrix Day Popup**:
5627```
5628┌──────────────────────────┐
5629│ Monday, February 8, 2026 │ ← Green header
5630├──────────────────────────┤
5631│ ┌──────────────────────┐ │
5632│ │ Team Meeting         │ │ ← Dark green
5633│ │ �� 2:00 PM           │ │
5634│ └──────────────────────┘ │
5635│ ┌──────────────────────┐ │
5636│ │ Code Review          │ │ ← Dark green
5637│ │ �� 4:00 PM           │ │
5638│ └──────────────────────┘ │
5639├──────────────────────────┤
5640│   [+ Add Event]          │ ← Green button
5641└──────────────────────────┘
5642```
5643
5644**Purple Day Popup**:
5645```
5646┌──────────────────────────┐
5647│ Monday, February 8, 2026 │ ← Purple header
5648├──────────────────────────┤
5649│ ┌──────────────────────┐ │
5650│ │ Team Meeting         │ │ ← Dark purple
5651│ │ �� 2:00 PM           │ │
5652│ └──────────────────────┘ │
5653├──────────────────────────┤
5654│   [+ Add Event]          │ ← Purple button
5655└──────────────────────────┘
5656```
5657
5658**Professional Day Popup**:
5659```
5660┌──────────────────────────┐
5661│ Monday, February 8, 2026 │ ← Light header
5662├──────────────────────────┤
5663│ ┌──────────────────────┐ │
5664│ │ Team Meeting         │ │ ← White
5665│ │ �� 2:00 PM           │ │
5666│ └──────────────────────┘ │
5667├──────────────────────────┤
5668│   [+ Add Event]          │ ← Blue button
5669└──────────────────────────┘
5670```
5671
5672**Pink Day Popup**:
5673```
5674┌──────────────────────────┐
5675│ Monday, February 8, 2026 │ ← Pink header ✨
5676├──────────────────────────┤
5677│ ┌──────────────────────┐ │
5678│ │ Team Meeting ��      │ │ ← Dark pink
5679│ │ �� 2:00 PM           │ │
5680│ └──────────────────────┘ │
5681├──────────────────────────┤
5682│   [+ Add Event]          │ ← Pink button
5683└──────────────────────────┘
5684```
5685
5686### Checkbox Theming
5687
5688**Unchecked boxes now themed**:
5689```
5690Matrix:
5691☐ → Dark green bg, green border ✓
5692
5693Purple:
5694☐ → Dark purple bg, purple border ✓
5695
5696Professional:
5697☐ → White bg, gray border ✓
5698
5699Pink:
5700☐ → Dark pink bg, pink border ✓
5701```
5702
5703### Complete Coverage
5704
5705**Edit Dialog - All Sections**:
5706- ✅ Header
5707- ✅ All inputs
5708- ✅ All labels
5709- ✅ **Checkbox sections** ← v4.8.7!
5710- ✅ Recurring options
5711- ✅ Button footer
5712- ✅ All checkboxes (checked & unchecked)
5713
5714**Day Popup - All Elements**:
5715- ✅ **Popup container** ← v4.8.7!
5716- ✅ **Header** ← v4.8.7!
5717- ✅ **Body** ← v4.8.7!
5718- ✅ **Event items** ← v4.8.7!
5719- ✅ **Namespace badges** ← v4.8.7!
5720- ✅ **Footer** ← v4.8.7!
5721- ✅ **Add Event button** ← v4.8.7!
5722- ✅ **No events message** ← v4.8.7!
5723
5724**Absolutely every dialog element themed!** ��✨
5725
5726### Perfect Theming Achievement
5727
5728**Every UI component in entire plugin**:
5729- ✅ Calendar grid
5730- ✅ Sidebar widget
5731- ✅ Event list
5732- ✅ Search bar
5733- ✅ Event boxes
5734- ✅ Edit dialog (complete)
5735- ✅ **Day popup** ← v4.8.7!
5736- ✅ Month picker
5737- ✅ All text
5738- ✅ All buttons
5739- ✅ All inputs
5740- ✅ **All checkboxes** ← v4.8.7!
5741- ✅ All borders
5742- ✅ All badges
5743- ✅ All backgrounds
5744
5745**NO WHITE ANYWHERE!** ��
5746
5747**100% COMPLETE THEMING ACHIEVED!** ��✨��
5748
5749## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS
5750
5751### �� Fixed: Dialog Checkbox Sections Themed
5752- **Fixed:** Recurring options section background themed
5753- **Fixed:** Section has themed border accent
5754- **Result:** No white sections in dialog!
5755
5756### �� Fixed: Dialog Button Section Themed
5757- **Fixed:** Button area background themed
5758- **Fixed:** Top border separator themed
5759- **Result:** Complete dialog theming!
5760
5761### �� Fixed: Event Box Borders Themed
5762- **Fixed:** Top, right, bottom borders now themed
5763- **Fixed:** Left border remains event color
5764- **Result:** Perfect event boxes!
5765
5766### All Changes
5767
5768**1. Recurring Options Section**:
5769
5770**Before**:
5771```html
5772<div class="recurring-options" style="display:none;">
5773<!-- White background ✗ -->
5774```
5775
5776**After**:
5777```php
5778<div class="recurring-options"
5779     style="display:none;
5780            background: $bg !important;
5781            padding: 8px;
5782            border-left: 2px solid $border;
5783            margin-left: 4px;">
5784<!-- Themed with accent border ✓ -->
5785```
5786
5787**2. Dialog Actions Section**:
5788
5789**Before**:
5790```html
5791<div class="dialog-actions-sleek">
5792<!-- White background ✗ -->
5793```
5794
5795**After**:
5796```php
5797<div class="dialog-actions-sleek"
5798     style="background: $bg !important;
5799            border-top: 1px solid $grid_border !important;">
5800<!-- Themed with separator ✓ -->
5801```
5802
5803**3. Event Box Borders**:
5804
5805**Before**:
5806```php
5807border-left-color: $event_color;
5808<!-- Only left border colored ✗ -->
5809```
5810
5811**After**:
5812```php
5813border-left-color: $event_color;
5814border-top: 1px solid $grid_border !important;
5815border-right: 1px solid $grid_border !important;
5816border-bottom: 1px solid $grid_border !important;
5817<!-- All borders themed! ✓ -->
5818```
5819
5820### Before vs After
5821
5822**BEFORE (v4.8.5)**:
5823```
5824Dialog:
5825┌────────────────┐
5826│ ☑ Repeating    │
5827├────────────────┤ ← White section ✗
5828│ Repeat: Daily  │
5829│ Until: [____]  │
5830├────────────────┤
5831│ [Cancel] [Save]│ ← White footer ✗
5832└────────────────┘
5833
5834Event Box:
5835┌────────────┐
5836│Team Meeting│ ← White borders ✗
5837│2:00 PM     │
5838└────────────┘
5839```
5840
5841**AFTER (v4.8.6)**:
5842```
5843Matrix Dialog:
5844┌────────────────┐
5845│ ☑ Repeating    │
5846├────────────────┤ ← Dark green ✓
5847│ Repeat: Daily  │ Green accent border
5848│ Until: [____]  │
5849├────────────────┤
5850│ [Cancel] [Save]│ ← Dark green ✓
5851└────────────────┘
5852
5853Matrix Event Box:
5854┌────────────┐
5855│Team Meeting│ ← Green borders ✓
5856│2:00 PM     │
5857└────────────┘
5858```
5859
5860### Dialog Section Examples
5861
5862**Matrix Theme**:
5863```
5864┌──────────────────────────┐
5865│ ✏️ Edit Event            │
5866├──────────────────────────┤
5867│ ☑ �� Repeating Event     │
5868├║─────────────────────────┤ Green accent
5869│║ Repeat Every: Daily     │ Dark green bg
5870│║ Repeat Until: [_____]   │
5871└──────────────────────────┘
5872  [Cancel] [�� Save]       ← Dark green bg
5873──────────────────────────── Green border
5874```
5875
5876**Purple Theme**:
5877```
5878┌──────────────────────────┐
5879│ ☑ �� Repeating Event     │
5880├║─────────────────────────┤ Purple accent
5881│║ Repeat options...       │ Dark purple bg
5882└──────────────────────────┘
5883  [Cancel] [�� Save]       ← Dark purple bg
5884──────────────────────────── Purple border
5885```
5886
5887**Professional Theme**:
5888```
5889┌──────────────────────────┐
5890│ ☑ �� Repeating Event     │
5891├║─────────────────────────┤ Blue accent
5892│║ Repeat options...       │ Light bg
5893└──────────────────────────┘
5894  [Cancel] [�� Save]       ← Light bg
5895──────────────────────────── Gray border
5896```
5897
5898**Pink Theme**:
5899```
5900┌──────────────────────────┐
5901│ ☑ �� Repeating Event ✨  │
5902├║─────────────────────────┤ Pink accent
5903│║ Repeat options...       │ Dark pink bg ��
5904└──────────────────────────┘
5905  [Cancel] [�� Save]       ← Dark pink bg
5906──────────────────────────── Pink border
5907```
5908
5909### Event Box Border Visual
5910
5911**Before (v4.8.5)**:
5912```
5913Left border only:
5914█ Team Meeting
5915█ 2:00 PM
5916█ [Edit] [Delete]
5917
5918Only event color on left ✗
5919White on other 3 sides ✗
5920```
5921
5922**After (v4.8.6)**:
5923```
5924All borders themed:
5925┌─────────────┐
5926█Team Meeting │ ← Top: themed
5927█2:00 PM      │ ← Right: themed
5928█[Edit][Del]  │ ← Bottom: themed
5929└─────────────┘
5930
5931Left: Event color ✓
5932Other 3: Theme grid_border ✓
5933```
5934
5935### Matrix Event Box:
5936```
5937┌─────────────┐ Green border
5938│Team Meeting │
5939│2:00 PM      │
5940└─────────────┘ Green border
59415942Green left bar
5943```
5944
5945### Purple Event Box:
5946```
5947┌─────────────┐ Purple border
5948│Team Meeting │
5949│2:00 PM      │
5950└─────────────┘ Purple border
59515952Purple left bar
5953```
5954
5955### Professional Event Box:
5956```
5957┌─────────────┐ Gray border
5958│Team Meeting │
5959│2:00 PM      │
5960└─────────────┘ Gray border
59615962Event color left bar
5963```
5964
5965### Complete Dialog Coverage
5966
5967**All sections themed**:
5968- ✅ Dialog header
5969- ✅ Form inputs
5970- ✅ Checkbox labels
5971- ✅ **Recurring options** ← v4.8.6!
5972- ✅ **Button section** ← v4.8.6!
5973- ✅ All labels
5974- ✅ All buttons
5975
5976**No white sections!** ✓
5977
5978### Complete Event Box Coverage
5979
5980**All borders themed**:
5981- ✅ Left border (event color)
5982- ✅ **Top border** ← v4.8.6!
5983- ✅ **Right border** ← v4.8.6!
5984- ✅ **Bottom border** ← v4.8.6!
5985- ✅ Background
5986- ✅ Text
5987
5988**Perfect box outline!** ✓
5989
5990### Visual Perfection
5991
5992**Matrix theme event list**:
5993```
5994┌─────────────┐
5995│Team Meeting │ ← Green box
5996│2:00 PM      │
5997└─────────────┘
5998┌─────────────┐
5999│Code Review  │ ← Green box
6000│4:00 PM      │
6001└─────────────┘
6002
6003All borders green! ✓
6004```
6005
6006**ABSOLUTE PERFECT THEMING!** ��✨
6007
6008## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS
6009
6010### �� Fixed: Event Dialog Fully Themed
6011- **Fixed:** Dialog background, header, inputs all themed
6012- **Fixed:** All labels, checkboxes, selects themed
6013- **Fixed:** Save and Cancel buttons themed
6014- **Result:** Dialog matches theme perfectly!
6015
6016### �� Fixed: Sidebar Event Borders Properly Themed
6017- **Fixed:** Event divider borders use grid_border color
6018- **Fixed:** Clean, subtle themed dividers
6019- **Result:** No more white borders in sidebar!
6020
6021### All Changes
6022
6023**1. Event Dialog Theming**:
6024
6025**Dialog container**:
6026```php
6027background: $themeStyles['bg'] !important;
6028border: 2px solid $themeStyles['border'] !important;
6029box-shadow: 0 0 20px $shadow !important;
6030```
6031
6032**Dialog header**:
6033```php
6034background: $themeStyles['header_bg'] !important;
6035color: $themeStyles['text_primary'] !important;
6036border-bottom: 1px solid $border !important;
6037```
6038
6039**All form inputs** (text, date, select, textarea):
6040```php
6041background: $themeStyles['cell_bg'] !important;
6042color: $themeStyles['text_primary'] !important;
6043border-color: $themeStyles['grid_border'] !important;
6044```
6045
6046**All labels**:
6047```php
6048color: $themeStyles['text_primary'] !important;
6049```
6050
6051**Checkboxes**:
6052```php
6053accent-color: $themeStyles['border'] !important;
6054```
6055
6056**Buttons**:
6057```php
6058// Cancel button:
6059background: $cell_bg !important;
6060color: $text_primary !important;
6061
6062// Save button:
6063background: $border !important;
6064color: $bg !important; (or white for professional)
6065```
6066
6067**2. Sidebar Event Borders**:
6068
6069**Before**:
6070```php
6071border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded
6072```
6073
6074**After**:
6075```php
6076borderColor = $themeStyles['grid_border'];
6077border-bottom: 1px solid $borderColor !important;
6078```
6079
6080### Before vs After
6081
6082**BEFORE (v4.8.4)**:
6083```
6084Event Dialog:
6085┌────────────────┐
6086│ Add Event      │ ← White background ✗
6087│ Title: [_____] │ ← White inputs ✗
6088│ Date:  [_____] │
6089│ [Cancel] [Save]│ ← Default buttons ✗
6090└────────────────┘
6091
6092Sidebar Events:
6093Event 1 ────────  ← White border ✗
6094Event 2 ────────  ← White border ✗
6095```
6096
6097**AFTER (v4.8.5)**:
6098```
6099Event Dialog (Matrix):
6100┌────────────────┐
6101│ Add Event      │ ← Dark green background ✓
6102│ Title: [_____] │ ← Dark green inputs ✓
6103│ Date:  [_____] │ ← Green text ✓
6104│ [Cancel] [Save]│ ← Themed buttons ✓
6105└────────────────┘
6106
6107Sidebar Events (Matrix):
6108Event 1 ────────  ← Green border ✓
6109Event 2 ────────  ← Green border ✓
6110```
6111
6112### Dialog Examples by Theme
6113
6114**Matrix Dialog**:
6115```
6116┌──────────────────────────┐
6117│ ✏️ Edit Event            │ ← Dark green header
6118├──────────────────────────┤
6119│ �� Title                 │ ← Green labels
6120│ [Team Meeting________]   │ ← Dark green input
6121│                          │
6122│ �� Start Date            │
6123│ [2026-02-08__]           │ ← Dark green input
6124│                          │
6125│ �� Start Time            │
6126│ [2:00 PM ▼]              │ ← Green select
6127│                          │
6128│ ☑ �� Repeating Event     │ ← Green checkbox
6129│                          │
6130│ [Cancel] [�� Save]       │ ← Themed buttons
6131└──────────────────────────┘
6132
6133Everything green! ✓
6134```
6135
6136**Purple Dialog**:
6137```
6138┌──────────────────────────┐
6139│ ✏️ Edit Event            │ ← Dark purple header
6140├──────────────────────────┤
6141│ [Inputs_______________]  │ ← Dark purple inputs
6142│ ☑ Checkboxes             │ ← Purple accent
6143│ [Cancel] [�� Save]       │ ← Purple buttons
6144└──────────────────────────┘
6145```
6146
6147**Professional Dialog**:
6148```
6149┌──────────────────────────┐
6150│ ✏️ Edit Event            │ ← Light gradient header
6151├──────────────────────────┤
6152│ [Inputs_______________]  │ ← White inputs
6153│ ☑ Checkboxes             │ ← Blue accent
6154│ [Cancel] [�� Save]       │ ← Blue save button
6155└──────────────────────────┘
6156```
6157
6158**Pink Dialog**:
6159```
6160┌──────────────────────────┐
6161│ ✏️ Edit Event            │ ← Dark pink header ✨
6162├──────────────────────────┤
6163│ [Inputs_______________]  │ ← Dark pink inputs ��
6164│ ☑ Checkboxes             │ ← Pink accent
6165│ [Cancel] [�� Save]       │ ← Pink buttons
6166└──────────────────────────┘
6167```
6168
6169### Complete Dialog Element Coverage
6170
6171**All form elements themed**:
6172- ✅ Dialog container
6173- ✅ Dialog header
6174- ✅ Close button (×)
6175- ✅ Title input
6176- ✅ Namespace search
6177- ✅ Namespace dropdown
6178- ✅ Description textarea
6179- ✅ Start date input
6180- ✅ End date input
6181- ✅ Recurring checkbox
6182- ✅ Recurrence type select
6183- ✅ Recurrence end date
6184- ✅ Start time select
6185- ✅ End time select
6186- ✅ Color select
6187- ✅ Custom color picker
6188- ✅ Task checkbox
6189- ✅ All labels
6190- ✅ Cancel button
6191- ✅ Save button
6192
6193**Every single dialog element themed!** ��
6194
6195### Sidebar Border Example
6196
6197**Matrix Sidebar**:
6198```
6199┌────────────────┐
6200│ Today          │ ← Green section header
6201├────────────────┤
6202│ Team Meeting   │
6203│ 2:00 PM        │
6204├────────────────┤ ← Green border (grid_border)
6205│ Code Review    │
6206│ 4:00 PM        │
6207├────────────────┤ ← Green border
6208│ Stand-up       │
6209│ All day        │
6210└────────────────┘
6211
6212Subtle green dividers! ✓
6213```
6214
6215### Complete Achievement
6216
6217**Every UI element themed**:
6218- ✅ Calendar
6219- ✅ Sidebar widget
6220- ✅ Event list
6221- ✅ Search bar
6222- ✅ **Event dialog** ← v4.8.5!
6223- ✅ Month picker
6224- ✅ **Sidebar dividers** ← v4.8.5!
6225- ✅ All text
6226- ✅ All inputs
6227- ✅ All buttons
6228- ✅ All borders
6229- ✅ All checkboxes
6230
6231**ABSOLUTE COMPLETE THEMING!** ��✨
6232
6233## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS
6234
6235### �� Fixed: Professional Theme Background Consistency
6236- **Fixed:** Container and event backgrounds now match sidebar
6237- **Fixed:** Lighter, cleaner appearance
6238- **Fixed:** Better contrast and readability
6239- **Result:** Professional theme looks cohesive!
6240
6241### The Problem
6242
6243**v4.8.3 Professional theme**:
6244```
6245Sidebar: Light background (#f5f7fa)
6246Calendar: Medium background (#e8ecf1) ← Didn't match!
6247Events: Light background (#f5f7fa)
6248
6249Inconsistent! ✗
6250```
6251
6252### The Fix
6253
6254**Updated Professional theme colors for consistency**:
6255
6256```php
6257// Before:
6258'bg' => '#e8ecf1',        // Medium gray-blue
6259'cell_bg' => '#f5f7fa',   // Very light
6260'grid_bg' => '#d5dbe3',   // Medium-dark
6261
6262// After:
6263'bg' => '#f5f7fa',        // Very light (matches sidebar)
6264'cell_bg' => '#ffffff',   // Pure white (clean)
6265'grid_bg' => '#e8ecf1',   // Subtle contrast
6266'grid_border' => '#d0d7de', // Softer borders
6267```
6268
6269### Before vs After
6270
6271**BEFORE (v4.8.3)**:
6272```
6273Professional Theme:
6274┌────────────────┐
6275│ Calendar       │ ← Medium gray (#e8ecf1)
6276│ ┌────────────┐ │
6277│ │ Event      │ │ ← Light (#f5f7fa)
6278│ └────────────┘ │
6279└────────────────┘
6280
6281Sidebar:
6282┌────────────────┐
6283│ Widget         │ ← Light (#f5f7fa)
6284└────────────────┘
6285
6286Backgrounds don't match! ✗
6287```
6288
6289**AFTER (v4.8.4)**:
6290```
6291Professional Theme:
6292┌────────────────┐
6293│ Calendar       │ ← Light (#f5f7fa)
6294│ ┌────────────┐ │
6295│ │ Event      │ │ ← White (#ffffff)
6296│ └────────────┘ │
6297└────────────────┘
6298
6299Sidebar:
6300┌────────────────┐
6301│ Widget         │ ← Light (#f5f7fa)
6302└────────────────┘
6303
6304Perfect match! ✓
6305```
6306
6307### New Professional Theme Colors
6308
6309**Backgrounds**:
6310- Container: `#f5f7fa` (light blue-gray)
6311- Events: `#ffffff` (pure white)
6312- Grid: `#e8ecf1` (subtle contrast)
6313
6314**Text**:
6315- Primary: `#2c3e50` (dark blue-gray)
6316- Bright: `#4a90e2` (blue accent)
6317- Dim: `#7f8c8d` (medium gray)
6318
6319**Borders**:
6320- Main: `#4a90e2` (blue)
6321- Grid: `#d0d7de` (soft gray)
6322
6323**Header**:
6324- Gradient: `#ffffff` → `#f5f7fa`
6325
6326### Visual Example
6327
6328**Professional Theme Now**:
6329```
6330┌─────────────────────────────┐
6331│ February 2026               │ ← White to light gradient
6332├─┬─┬─┬─┬─┬─┬─┬───────────────┤
6333│S│M│T│W│T│F│S│               │ ← Light background
6334├─┼─┼─┼─┼─┼─┼─┤               │
6335│ │ │1│2│3│4│5│ Event List    │ ← White events
6336│ │ │ │ │ │ │ │ ┌───────────┐ │
6337│ │ │ │ │[8]│ │ │ Meeting   │ │ ← White on light
6338└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘
6339
6340Clean, professional look! ✓
6341```
6342
6343### Comparison with Other Themes
6344
6345**Matrix** (dark):
6346- Container: #242424 (dark green)
6347- Events: #242424 (dark green)
6348- Consistent dark theme ✓
6349
6350**Purple** (dark):
6351- Container: #1a0d14 (dark purple)
6352- Events: #2a2030 (dark purple)
6353- Consistent dark theme ✓
6354
6355**Professional** (light):
6356- Container: #f5f7fa (light blue)
6357- Events: #ffffff (white)
6358- Consistent light theme ✓
6359
6360**Pink** (dark):
6361- Container: #1a0d14 (dark pink)
6362- Events: #1a0d14 (dark pink)
6363- Consistent dark theme ✓
6364
6365**All themes now consistent!** ��
6366
6367### Better Contrast
6368
6369**Professional theme improvements**:
6370
6371**Readability**:
6372- Dark text (#2c3e50) on white/light backgrounds ✓
6373- Excellent contrast ratio ✓
6374- Easy on the eyes ✓
6375
6376**Visual hierarchy**:
6377- White events pop against light container ✓
6378- Blue accents stand out ✓
6379- Clean, modern look ✓
6380
6381**Professional appearance**:
6382- Lighter = more corporate/business feel ✓
6383- Clean whites = premium quality ✓
6384- Subtle grays = sophisticated ✓
6385
6386### Complete Theme Consistency
6387
6388**All themes now have matching backgrounds**:
6389
6390**Matrix**:
6391- Sidebar & Calendar both dark green ✓
6392
6393**Purple**:
6394- Sidebar & Calendar both dark purple ✓
6395
6396**Professional**:
6397- Sidebar & Calendar both light ✓ (v4.8.4!)
6398
6399**Pink**:
6400- Sidebar & Calendar both dark pink ✓
6401
6402**Perfect visual unity across all views!** ��✨
6403
6404## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES
6405
6406### �� Fixed: Bold Text in Descriptions Themed
6407- **Fixed:** **Bold text** now uses theme primary color
6408- **Fixed:** Both `**text**` and `__text__` syntax themed
6409- **Result:** Bold text matches theme!
6410
6411### �� Fixed: Search Bar Fully Themed
6412- **Fixed:** Search input has !important on all styles
6413- **Fixed:** Icon and placeholder text themed
6414- **Result:** Search bar perfectly themed!
6415
6416### �� Fixed: Sidebar Event Boxes Themed
6417- **Fixed:** Event borders in sidebar now use theme grid_border color
6418- **Fixed:** Borders have !important flag
6419- **Result:** Sidebar boxes match theme!
6420
6421### All Changes
6422
6423**1. Bold Text Styling**:
6424
6425**Before**:
6426```html
6427<strong>Bold text</strong> ← Default black
6428```
6429
6430**After**:
6431```php
6432<strong style="color: $text_primary !important; font-weight:bold;">
6433    Bold text
6434</strong>
6435
6436Matrix: Green bold ✓
6437Purple: Lavender bold ✓
6438Professional: Dark bold ✓
6439Pink: Pink bold ✓
6440```
6441
6442**2. Search Bar**:
6443
6444**Before**:
6445```php
6446style="background: $bg; color: $text;"
6447Could be overridden by CSS
6448```
6449
6450**After**:
6451```php
6452style="background: $bg !important;
6453       color: $text_primary !important;
6454       border-color: $grid_border !important;"
6455
6456Cannot be overridden! ✓
6457```
6458
6459**3. Sidebar Event Boxes**:
6460
6461**Before**:
6462```php
6463$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded
6464```
6465
6466**After**:
6467```php
6468$borderColor = $themeStyles['grid_border']; // From theme
6469border-bottom: 1px solid $borderColor !important;
6470
6471Matrix: Green borders ✓
6472Purple: Purple borders ✓
6473Professional: Gray borders ✓
6474Pink: Pink borders ✓
6475```
6476
6477### Before vs After
6478
6479**BEFORE (v4.8.2)**:
6480```
6481Event description:
6482"Please review **Q1 Goals** carefully"
64836484            Black bold ✗
6485
6486Search bar:
6487[�� Search...] ← Gray placeholder ✗
6488
6489Sidebar:
6490┌────────────┐
6491│ Event 1    │
6492├────────────┤ ← Gray border ✗
6493│ Event 2    │
6494└────────────┘
6495```
6496
6497**AFTER (v4.8.3)**:
6498```
6499Matrix Theme:
6500
6501Event description:
6502"Please review **Q1 Goals** carefully"
65036504            Green bold ✓
6505
6506Search bar:
6507[�� Search...] ← Green themed ✓
6508
6509Sidebar:
6510┌────────────┐
6511│ Event 1    │
6512├────────────┤ ← Green border ✓
6513│ Event 2    │
6514└────────────┘
6515```
6516
6517### Examples by Theme
6518
6519**Matrix Theme**:
6520```
6521Description:
6522"Check **important notes** and links"
65236524   Green bold
6525
6526Sidebar boxes:
6527Event 1
6528───────── Green border
6529Event 2
6530───────── Green border
6531```
6532
6533**Purple Theme**:
6534```
6535Description:
6536"Review **agenda items** before meeting"
65376538   Lavender bold
6539
6540Sidebar boxes:
6541Event 1
6542───────── Purple border
6543Event 2
6544───────── Purple border
6545```
6546
6547**Professional Theme**:
6548```
6549Description:
6550"Update **quarterly reports** by Friday"
65516552   Dark bold
6553
6554Sidebar boxes:
6555Event 1
6556───────── Gray border
6557Event 2
6558───────── Gray border
6559```
6560
6561**Pink Theme**:
6562```
6563Description:
6564"Don't forget **party supplies** ✨"
65656566        Pink bold
6567
6568Sidebar boxes:
6569Event 1 ��
6570───────── Pink border
6571Event 2 ✨
6572───────── Pink border
6573```
6574
6575### Complete Formatting Coverage
6576
6577**Text formatting themed**:
6578- ✅ Regular text
6579- ✅ **Bold text** ← NEW!
6580- ✅ Links
6581- ✅ Italic text (inherits)
6582- ✅ Code (inherits)
6583
6584**UI elements themed**:
6585- ✅ Search bar ← Enhanced!
6586- ✅ Search icon ← Enhanced!
6587- ✅ Search placeholder ← Enhanced!
6588- ✅ Sidebar borders ← NEW!
6589- ✅ Event borders
6590- ✅ Badges
6591- ✅ Buttons
6592
6593**Every element perfectly themed!** ��
6594
6595### Search Bar Coverage
6596
6597**All aspects themed**:
6598- Background: Theme cell_bg ✓
6599- Text color: Theme text_primary ✓
6600- Border: Theme grid_border ✓
6601- Placeholder: Inherits text color ✓
6602- Icon (��): In placeholder ✓
6603- Clear button (✕): Themed ✓
6604
6605**Cannot be overridden!** (all have !important)
6606
6607### Sidebar Event Box Styling
6608
6609**Consistent borders**:
6610```
6611Matrix:
6612╔════════════╗
6613║ Event 1    ║
6614╟────────────╢ ← grid_border color
6615║ Event 2    ║
6616╚════════════╝
6617
6618All themes match perfectly! ✓
6619```
6620
6621### Complete Theme Achievement
6622
6623**Every single element themed**:
6624- ✅ Backgrounds
6625- ✅ Text (regular)
6626- ✅ Text (bold) ← v4.8.3!
6627- ✅ Links
6628- ✅ Badges
6629- ✅ Buttons
6630- ✅ Checkboxes
6631- ✅ Icons
6632- ✅ Borders
6633- ✅ Search bar ← Enhanced v4.8.3!
6634- ✅ Sidebar boxes ← v4.8.3!
6635- ✅ Today marker
6636- ✅ Calendar grid
6637- ✅ Event panels
6638
6639**ABSOLUTE PERFECTION!** ��✨
6640
6641## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS
6642
6643### �� Fixed: Links in Descriptions Now Themed
6644- **Fixed:** All links in event descriptions now use theme color
6645- **Fixed:** DokuWiki links [[page|text]] themed
6646- **Fixed:** Markdown links [text](url) themed
6647- **Fixed:** Plain URLs themed
6648- **Result:** Links match theme perfectly!
6649
6650### The Problem
6651
6652**v4.8.1 behavior**:
6653```
6654Event description:
6655"Check out https://example.com" ← Blue default link ✗
6656"See [[wiki:page|docs]]" ← Blue default link ✗
6657```
6658
6659### The Fix
6660
6661**Added inline color styling to ALL link types**:
6662
6663```php
6664// Get theme colors:
6665$linkColor = $themeStyles['border'] . ' !important';
6666$linkStyle = ' style="color:' . $linkColor . ';"';
6667
6668// Apply to links:
6669<a href="..." style="color: #00cc07 !important;">link</a>
6670```
6671
6672**All link types themed**:
66731. DokuWiki syntax: `[[page|text]]`
66742. Markdown syntax: `[text](url)`
66753. Plain URLs: `https://example.com`
6676
6677### Before vs After
6678
6679**BEFORE (v4.8.1)**:
6680```
6681Matrix Theme Description:
6682"Visit https://example.com for more info"
66836684     Blue link ✗ (doesn't match green theme)
6685```
6686
6687**AFTER (v4.8.2)**:
6688```
6689Matrix Theme Description:
6690"Visit https://example.com for more info"
66916692     Green link ✓ (matches theme!)
6693```
6694
6695### Link Colors by Theme
6696
6697**Matrix**:
6698- Links: Green (#00cc07) !important
6699- Matches: Border, badges, highlights
6700
6701**Purple**:
6702- Links: Purple (#9b59b6) !important
6703- Matches: Border, badges, highlights
6704
6705**Professional**:
6706- Links: Blue (#4a90e2) !important
6707- Matches: Border, badges, highlights
6708
6709**Pink**:
6710- Links: Hot Pink (#ff1493) !important
6711- Matches: Border, badges, highlights ✨
6712
6713### Examples
6714
6715**Matrix Description with Links**:
6716```
6717Event: Team Meeting
6718Description:
6719"Review [[wiki:q1goals|Q1 Goals]]
6720and visit https://metrics.com"
6721
6722Both links → Green ✓
6723```
6724
6725**Purple Description with Links**:
6726```
6727Event: Planning Session
6728Description:
6729"Check [schedule](https://cal.com)
6730for availability"
6731
6732Link → Purple ✓
6733```
6734
6735**Professional Description with Links**:
6736```
6737Event: Client Call
6738Description:
6739"Prepare [[reports|Monthly Reports]]
6740before the call"
6741
6742Link → Blue ✓
6743```
6744
6745**Pink Description with Links**:
6746```
6747Event: Party Planning
6748Description:
6749"RSVP at https://party.com ✨"
6750
6751Link → Hot Pink ✓ ��
6752```
6753
6754### Technical Implementation
6755
6756**Updated renderDescription() function**:
6757
6758```php
6759private function renderDescription($description, $themeStyles = null) {
6760    // Get theme
6761    if ($themeStyles === null) {
6762        $theme = $this->getSidebarTheme();
6763        $themeStyles = $this->getSidebarThemeStyles($theme);
6764    }
6765
6766    // Create link style
6767    $linkColor = $themeStyles['border'] . ' !important';
6768    $linkStyle = ' style="color:' . $linkColor . ';"';
6769
6770    // Apply to all link types:
6771    $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>';
6772}
6773```
6774
6775### Complete Theming
6776
6777**Every text element**:
6778- ✅ Event titles
6779- ✅ Event dates
6780- ✅ Event descriptions
6781- ✅ **Links in descriptions** ← NEW!
6782- ✅ Badges
6783- ✅ Buttons
6784
6785**Every color unified!** ��
6786
6787### Unified Theme Experience
6788
6789**Matrix Theme**:
6790```
6791Everything green:
6792- Text: Green ✓
6793- Links: Green ✓
6794- Badges: Green ✓
6795- Borders: Green ✓
6796- Buttons: Green ✓
6797- Today marker: Green ✓
6798
6799Perfect harmony! ✓
6800```
6801
6802**No default blue links breaking the theme!**
6803
6804### Link Types Supported
6805
6806**1. DokuWiki Syntax**:
6807```
6808[[page|Link Text]] → Themed ✓
6809[[page]] → Themed ✓
6810[[page#section|Text]] → Themed ✓
6811```
6812
6813**2. Markdown Syntax**:
6814```
6815[Link Text](https://url.com) → Themed ✓
6816[Text](internal-page) → Themed ✓
6817```
6818
6819**3. Plain URLs**:
6820```
6821https://example.com → Themed ✓
6822http://site.org → Themed ✓
6823```
6824
6825**All links perfectly themed!** ����
6826
6827## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER
6828
6829### �� Fixed: All Badges Now Themed
6830- **Fixed:** TODAY badge themed with theme color
6831- **Fixed:** PAST DUE badge uses orange (warning color)
6832- **Fixed:** Namespace badges themed
6833- **Fixed:** All badges visible and hidden
6834- **Result:** All badges match theme!
6835
6836### �� Fixed: Today Cell More Prominent
6837- **Fixed:** Today cell now has 2px border in theme color
6838- **Fixed:** Border added to both PHP and JavaScript
6839- **Result:** Today stands out clearly!
6840
6841### �� Fixed: Past Event Text Fully Themed
6842- **Fixed:** Event-info div backgrounds ensure no gray
6843- **Result:** Expanded past events completely themed!
6844
6845### All Changes
6846
6847**1. Badge Theming**:
6848
6849**TODAY Badge**:
6850```php
6851// PHP & JavaScript:
6852style="background: $themeStyles['border'] !important;
6853       color: $bg !important;"
6854
6855Matrix: Green badge
6856Purple: Purple badge
6857Professional: Blue badge with white text
6858Pink: Pink badge
6859```
6860
6861**PAST DUE Badge** (always orange):
6862```php
6863style="background: #ff9800 !important;
6864       color: #fff !important;"
6865```
6866
6867**Namespace Badge**:
6868```php
6869style="background: $themeStyles['border'] !important;
6870       color: $bg !important;"
6871```
6872
6873**2. Today Cell Border**:
6874
6875**PHP**:
6876```php
6877$todayBorder = $isToday ?
6878    'border:2px solid ' . $themeStyles['border'] . ' !important;' : '';
6879```
6880
6881**JavaScript**: Same
6882
6883**Result**: Today cell has prominent colored border!
6884
6885### Before vs After
6886
6887**BEFORE (v4.8.0)**:
6888```
6889Calendar:
6890┌─┬─┬─┬─┬─┬─┬─┐
6891│1│2│3│4│5│6│7│
6892│ │ │ │[8]│ │ │ ← Today: subtle background
6893└─┴─┴─┴─┴─┴─┴─┘
6894
6895Event badges:
6896Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗
6897```
6898
6899**AFTER (v4.8.1)**:
6900```
6901Calendar (Matrix):
6902┌─┬─┬─┬─┬─┬─┬─┐
6903│1│2│3│4│5│6│7│
6904│ │ │ │[8]│ │ │ ← Today: green border 2px ✓
6905└─┴─┴─┴─┴─┴─┴─┘
6906
6907Event badges (Matrix):
6908Mon, Feb 8 [TODAY] [Work] ← Green badges ✓
6909```
6910
6911### Matrix Theme Example
6912
6913**Calendar**:
6914```
6915Today cell:
6916┌────┐
6917│ 8  │ Dark green bg + Green 2px border
6918└────┘
6919Very obvious!
6920```
6921
6922**Badges**:
6923```
6924[TODAY] ← Green bg, dark text
6925[Work]  ← Green bg, dark text
6926[PAST DUE] ← Orange bg, white text
6927```
6928
6929### Purple Theme Example
6930
6931**Calendar**:
6932```
6933Today cell:
6934┌────┐
6935│ 8  │ Dark purple bg + Purple 2px border
6936└────┘
6937```
6938
6939**Badges**:
6940```
6941[TODAY] ← Purple bg
6942[Work]  ← Purple bg
6943```
6944
6945### Professional Theme Example
6946
6947**Calendar**:
6948```
6949Today cell:
6950┌────┐
6951│ 8  │ Light blue bg + Blue 2px border
6952└────┘
6953```
6954
6955**Badges**:
6956```
6957[TODAY] ← Blue bg, white text
6958[Work]  ← Blue bg, white text
6959```
6960
6961### Pink Theme Example
6962
6963**Calendar**:
6964```
6965Today cell:
6966┌────┐
6967│ 8  │ Dark pink bg + Pink 2px border ✨
6968└────┘
6969```
6970
6971**Badges**:
6972```
6973[TODAY] ← Pink bg ��
6974[Work]  ← Pink bg ✨
6975```
6976
6977### Complete Badge Coverage
6978
6979**All badges themed**:
6980- ✅ TODAY badge (theme color)
6981- ✅ PAST DUE badge (orange warning)
6982- ✅ Namespace badges (theme color)
6983- ✅ Visible events
6984- ✅ Hidden/past events
6985
6986**No gray badges anywhere!**
6987
6988### Today Cell Visual
6989
6990**Dual indicators**:
69911. Background color (theme today bg)
69922. Border (2px theme color) ← NEW!
6993
6994**Result**: Today is VERY obvious!
6995
6996**Matrix**: Green bg + Green border
6997**Purple**: Purple bg + Purple border
6998**Professional**: Light blue bg + Blue border
6999**Pink**: Pink bg + Pink border ✨
7000
7001### Complete Theming
7002
7003**Every element themed**:
7004- ✅ Backgrounds
7005- ✅ Text colors
7006- ✅ Badges (v4.8.1!)
7007- ✅ Today marker (v4.8.1!)
7008- ✅ Checkboxes
7009- ✅ Buttons
7010- ✅ Icons
7011
7012**Absolutely everything!** ��✨
7013
7014## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING
7015
7016### �� Fixed: All Event Backgrounds Now Themed
7017- **Fixed:** event-info div now has themed background
7018- **Fixed:** event-meta-compact div (visible) now has themed background
7019- **Fixed:** event-desc-compact div now has themed background
7020- **Fixed:** All !important flags added to prevent CSS override
7021- **Result:** Entire event item fully themed!
7022
7023### �� Fixed: Description Text Shows Correct Color Immediately
7024- **Fixed:** Description divs now have explicit background + color on load
7025- **Fixed:** Both visible and hidden descriptions fully styled
7026- **Result:** No more gray text on initial load!
7027
7028### The Problem
7029
7030**v4.7.9 behavior**:
7031```
7032Expanded past event:
7033┌────────────────────────┐
7034│ ▾ Team Meeting         │ ← Themed ✓
7035│   Mon, Feb 8           │ ← Themed ✓
7036│                        │
7037│   [Event details]      │ ← Gray background ✗
7038│   [Description]        │ ← Gray text until navigation ✗
7039└────────────────────────┘
7040
7041Only the date/time div was themed!
7042```
7043
7044### The Fix
7045
7046**Added background to ALL inner divs**:
7047
7048**PHP**:
7049```php
7050// Event container:
7051style="background:' . $themeStyles['cell_bg'] . ' !important;"
7052
7053// event-info wrapper:
7054<div class="event-info"
7055     style="background:' . $themeStyles['cell_bg'] . ' !important;">
7056
7057// event-meta-compact:
7058<div class="event-meta-compact"
7059     style="background:' . $themeStyles['cell_bg'] . ' !important;">
7060
7061// event-desc-compact:
7062<div class="event-desc-compact"
7063     style="background:' . $themeStyles['cell_bg'] . ' !important;
7064            color:' . $themeStyles['text_dim'] . ' !important;">
7065```
7066
7067**JavaScript**: Same styling applied
7068
7069### Before vs After
7070
7071**BEFORE (v4.7.9)**:
7072```
7073Matrix Theme - Expanded Event:
7074┌────────────────────────┐
7075│ ▾ Team Meeting         │
7076│   Mon, Feb 8  ← Green  │
7077│                        │
7078│   Details     ← Gray ✗ │
7079│   Description ← Gray ✗ │
7080│   [✏️] [��️]            │
7081└────────────────────────┘
7082```
7083
7084**AFTER (v4.8.0)**:
7085```
7086Matrix Theme - Expanded Event:
7087┌────────────────────────┐
7088│ ▾ Team Meeting         │
7089│   Mon, Feb 8  ← Green  │
7090│                        │
7091│   Details     ← Green ✓│
7092│   Description ← Green ✓│
7093│   [✏️] [��️]            │
7094└────────────────────────┘
7095
7096Entire event themed!
7097```
7098
7099### What's Themed Now
7100
7101**Event Item Structure** (all themed):
7102```
7103event-compact-item        ← Themed ✓
7104  └─ event-info           ← Themed ✓ (v4.8.0!)
7105      ├─ event-title-row  ← Themed ✓
7106      ├─ event-meta       ← Themed ✓ (v4.8.0!)
7107      └─ event-desc       ← Themed ✓ (v4.8.0!)
7108```
7109
7110**Every layer has background!**
7111
7112### Matrix Theme Example
7113
7114**Complete event**:
7115```
7116┌────────────────────────────┐
7117│ Team Meeting               │ ← Dark green bg
7118│   Mon, Feb 8 • 2:00 PM     │ ← Dark green bg
7119│   Discussed Q1 goals and   │ ← Dark green bg
7120│   set targets for team     │ ← Dark green bg
7121│   [✏️] [��️] [☑]           │ ← Dark green bg
7122└────────────────────────────┘
7123
7124Consistent green throughout! ✓
7125```
7126
7127### Purple Theme Example
7128
7129```
7130┌────────────────────────────┐
7131│ Team Meeting               │ ← Dark purple bg
7132│   Mon, Feb 8 • 2:00 PM     │ ← Dark purple bg
7133│   Discussed Q1 goals       │ ← Dark purple bg
7134│   [✏️] [��️] [☑]           │ ← Dark purple bg
7135└────────────────────────────┘
7136
7137Consistent purple throughout! ✓
7138```
7139
7140### Professional Theme Example
7141
7142```
7143┌────────────────────────────┐
7144│ Team Meeting               │ ← Light bg
7145│   Mon, Feb 8 • 2:00 PM     │ ← Light bg
7146│   Discussed Q1 goals       │ ← Light bg
7147│   [✏️] [��️] [☑]           │ ← Light bg
7148└────────────────────────────┘
7149
7150Consistent light throughout! ✓
7151```
7152
7153### Pink Theme Example
7154
7155```
7156┌────────────────────────────┐
7157│ Team Meeting               │ ← Dark pink bg
7158│   Mon, Feb 8 • 2:00 PM     │ ← Dark pink bg
7159│   Discussed Q1 goals       │ ← Dark pink bg
7160│   [✏️] [��️] [☑]           │ ← Dark pink bg
7161└────────────────────────────┘
7162
7163Consistent pink throughout! ✓
7164```
7165
7166### Complete Theming
7167
7168**Every element, every layer**:
7169- ✅ Container
7170- ✅ Event item
7171- ✅ Event info wrapper (v4.8.0!)
7172- ✅ Title row
7173- ✅ Meta div (v4.8.0!)
7174- ✅ Description div (v4.8.0!)
7175- ✅ Action buttons
7176- ✅ Checkboxes
7177
7178**No gray anywhere!** ��
7179
7180### Why Multiple Backgrounds?
7181
7182**CSS layers stack**:
7183```html
7184<div style="background: green;">         ← Layer 1
7185  <div style="background: inherit;">     ← Could be gray!
7186    <div>Content</div>                   ← Inherits gray!
7187  </div>
7188</div>
7189
7190Better:
7191<div style="background: green;">         ← Layer 1
7192  <div style="background: green;">       ← Layer 2 forced
7193    <div style="background: green;">     ← Layer 3 forced
7194      Content                            ← All green!
7195    </div>
7196  </div>
7197</div>
7198```
7199
7200**Every layer forced = Perfect theming!**
7201
7202### !important Everywhere
7203
7204**All styling now uses !important**:
7205- background: ... !important
7206- color: ... !important
7207
7208**Result**: CSS cannot override themes!
7209
7210**Version 4.8.0 = Complete, bulletproof theming!** ��✨
7211
7212## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS
7213
7214### �� Fixed: Past Event Expanded Background Themed
7215- **Fixed:** Past event meta div now has theme background when expanded
7216- **Fixed:** Both PHP and JavaScript render with theme background
7217- **Result:** Expanded past events have proper themed background!
7218
7219### ✅ Fixed: Checkboxes Now Themed
7220- **Fixed:** Task checkboxes use accent-color matching theme
7221- **Fixed:** Cursor changes to pointer on hover
7222- **Result:** Checkboxes match theme color!
7223
7224### �� Fixed: Action Buttons (Edit/Delete) Themed
7225- **Fixed:** Edit (✏️) and Delete (��️) buttons now themed
7226- **Fixed:** Background, text, and border all use theme colors
7227- **Result:** All icons themed!
7228
7229### All Changes
7230
7231**1. Past Event Expanded Background**:
7232
7233**PHP**:
7234```php
7235// Before:
7236<div class="event-meta-compact" style="display:none;">
7237
7238// After:
7239<div class="event-meta-compact"
7240     style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;">
7241```
7242
7243**JavaScript**: Same treatment
7244
7245**Result**: Expanded past events have themed background!
7246
7247**2. Task Checkboxes**:
7248
7249**PHP & JavaScript**:
7250```php
7251// Added accent-color:
7252<input type="checkbox"
7253       style="accent-color:' . $themeStyles['border'] . ' !important;
7254              cursor:pointer;">
7255```
7256
7257**accent-color** changes the checkbox color:
7258- Matrix: Green checkboxes ✓
7259- Purple: Purple checkboxes ✓
7260- Professional: Blue checkboxes ✓
7261- Pink: Pink checkboxes ✓
7262
7263**3. Edit/Delete Buttons**:
7264
7265**PHP**:
7266```php
7267<button class="event-action-btn"
7268        style="color:' . $themeStyles['text_primary'] . ' !important;
7269               background:' . $themeStyles['cell_bg'] . ' !important;
7270               border-color:' . $themeStyles['grid_border'] . ' !important;">
7271    ��️
7272</button>
7273```
7274
7275**JavaScript**: Same
7276
7277**Result**: Buttons blend with theme!
7278
7279### Before vs After
7280
7281**BEFORE (v4.7.8)**:
7282```
7283Past Event (expanded):
7284┌─────────────────────────┐
7285│ ▾ Team Meeting          │
7286│   Mon, Feb 8            │ ← White background ✗
7287│   Description           │
7288├─────────────────────────┤
7289│ [✏️] [��️] [☐]          │ ← Default colors ✗
7290└─────────────────────────┘
7291```
7292
7293**AFTER (v4.7.9)**:
7294```
7295Past Event (expanded - Matrix):
7296┌─────────────────────────┐
7297│ ▾ Team Meeting          │
7298│   Mon, Feb 8            │ ← Dark green bg ✓
7299│   Description           │
7300├─────────────────────────┤
7301│ [✏️] [��️] [☑]          │ ← Themed ✓
7302└─────────────────────────┘
7303```
7304
7305### Matrix Theme Example
7306
7307**Checkboxes**: Green accent
7308**Buttons**: Dark bg, green text, green borders
7309**Expanded**: Dark green background
7310
7311```
7312Task: ☑ Complete report  ← Green checkmark
7313[✏️] [��️]                ← Dark buttons with green
7314```
7315
7316### Purple Theme Example
7317
7318**Checkboxes**: Purple accent
7319**Buttons**: Dark purple bg, lavender text
7320**Expanded**: Dark purple background
7321
7322```
7323Task: ☑ Complete report  ← Purple checkmark
7324[✏️] [��️]                ← Purple themed
7325```
7326
7327### Professional Theme Example
7328
7329**Checkboxes**: Blue accent
7330**Buttons**: Light bg, dark text
7331**Expanded**: Light background
7332
7333```
7334Task: ☑ Complete report  ← Blue checkmark
7335[✏️] [��️]                ← Light themed
7336```
7337
7338### Pink Theme Example
7339
7340**Checkboxes**: Pink accent
7341**Buttons**: Dark pink bg, pink text
7342**Expanded**: Dark pink background
7343
7344```
7345Task: ☑ Complete report  ← Pink checkmark
7346[✏️] [��️]                ← Pink themed
7347```
7348
7349### Complete Icon Coverage
7350
7351**Themed Icons/Buttons**:
7352- ✅ Task checkboxes (accent-color)
7353- ✅ Edit button (✏️)
7354- ✅ Delete button (��️)
7355- ✅ Navigation arrows (◀ ▶)
7356- ✅ Today button
7357- ✅ Past Events arrow (▶)
7358
7359**All interactive elements themed!** ��
7360
7361### How accent-color Works
7362
7363**Modern CSS property** for form controls:
7364```css
7365input[type="checkbox"] {
7366    accent-color: #00cc07; /* Green checkbox! */
7367}
7368```
7369
7370**Browser support**: All modern browsers ✓
7371
7372**Result**: Checkboxes automatically match theme!
7373
7374### Complete Theme Coverage
7375
7376**Backgrounds**:
7377- ✅ Container
7378- ✅ Calendar-left
7379- ✅ Calendar-right
7380- ✅ Event items
7381- ✅ Past event expanded (v4.7.9!)
7382- ✅ Action buttons (v4.7.9!)
7383
7384**Icons/Controls**:
7385- ✅ Checkboxes (v4.7.9!)
7386- ✅ Edit/Delete buttons (v4.7.9!)
7387- ✅ Navigation buttons
7388- ✅ All arrows
7389
7390**Every element perfectly themed!** ��✨
7391
7392## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS
7393
7394### �� Fixed: White Bar at Bottom of Calendar
7395- **Fixed:** Added background to calendar-left div with !important
7396- **Result:** No more white bar at bottom!
7397
7398### �� Fixed: Past Event Expanded Details Not Themed
7399- **Fixed:** Past event date/time now themed when expanded
7400- **Fixed:** Past event descriptions now themed when expanded
7401- **Fixed:** Both PHP and JavaScript render with theme colors
7402- **Result:** Expanding past events shows themed text!
7403
7404### �� Fixed: Event Description Text Color
7405- **Fixed:** All event descriptions now use theme text_dim color
7406- **Fixed:** Both visible and hidden descriptions themed
7407- **Result:** Descriptions always match theme!
7408
7409### All Changes
7410
7411**1. Bottom White Bar** (calendar-left div):
7412
7413**Before**:
7414```html
7415<div class="calendar-compact-left">
7416<!-- White background showing at bottom -->
7417```
7418
7419**After**:
7420```html
7421<div class="calendar-compact-left"
7422     style="background: #242424 !important;">
7423<!-- Matches theme background -->
7424```
7425
7426**2. Past Event Expanded Details**:
7427
7428**PHP** - Added colors to hidden details:
7429```php
7430// Past event meta (hidden):
7431<span class="event-date-time"
7432      style="color:' . $themeStyles['text_dim'] . ' !important;">
7433
7434// Past event description (hidden):
7435<div class="event-desc-compact"
7436     style="display:none; color:' . $themeStyles['text_dim'] . ' !important;">
7437```
7438
7439**JavaScript** - Same treatment:
7440```javascript
7441// Past event meta:
7442html += '<span class="event-date-time"
7443              style="color:' + themeStyles.text_dim + ' !important;">';
7444
7445// Past event description:
7446html += '<div class="event-desc-compact"
7447              style="display: none; color:' + themeStyles.text_dim + ' !important;">';
7448```
7449
7450**3. All Event Descriptions**:
7451
7452**Both visible and hidden descriptions now themed**:
7453```php
7454// PHP:
7455style="color:' . $themeStyles['text_dim'] . ' !important;"
7456
7457// JavaScript:
7458style="color:' + themeStyles.text_dim + ' !important;"
7459```
7460
7461### Before vs After
7462
7463**BEFORE (v4.7.7)**:
7464```
7465Calendar bottom:
7466┌──────────────┐
7467│ Calendar     │
7468│ Grid         │
7469└──────────────┘
7470▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar
7471
7472Past Event (collapsed):
7473▸ Team Meeting
7474
7475Past Event (expanded):
7476▾ Team Meeting
7477  Mon, Feb 8 ← Gray text ✗
7478  Description ← Gray text ✗
7479```
7480
7481**AFTER (v4.7.8)**:
7482```
7483Calendar bottom:
7484┌──────────────┐
7485│ Calendar     │
7486│ Grid         │
7487└──────────────┘
7488No white bar! ✓
7489
7490Past Event (collapsed):
7491▸ Team Meeting
7492
7493Past Event (expanded):
7494▾ Team Meeting
7495  Mon, Feb 8 ← Theme dim color ✓
7496  Description ← Theme dim color ✓
7497```
7498
7499### Matrix Theme Example
7500
7501**Past event expanded**:
7502```
7503▾ Team Meeting (past)
7504  Mon, Feb 8 • 2:00 PM  ← Dim green (#00aa00)
7505  Discussed Q1 goals   ← Dim green (#00aa00)
7506
7507Everything themed! ✓
7508```
7509
7510### Purple Theme Example
7511
7512**Past event expanded**:
7513```
7514▾ Team Meeting (past)
7515  Mon, Feb 8 • 2:00 PM  ← Dim purple (#8e7ab8)
7516  Discussed Q1 goals   ← Dim purple (#8e7ab8)
7517
7518Everything themed! ✓
7519```
7520
7521### Professional Theme Example
7522
7523**Past event expanded**:
7524```
7525▾ Team Meeting (past)
7526  Mon, Feb 8 • 2:00 PM  ← Gray (#7f8c8d)
7527  Discussed Q1 goals   ← Gray (#7f8c8d)
7528
7529Everything themed! ✓
7530```
7531
7532### Pink Theme Example
7533
7534**Past event expanded**:
7535```
7536▾ Team Meeting (past)
7537  Mon, Feb 8 • 2:00 PM  ← Light pink (#ff85c1)
7538  Discussed Q1 goals   ← Light pink (#ff85c1)
7539
7540Everything themed! ✓
7541```
7542
7543### Complete Coverage
7544
7545**Calendar Layout**:
7546- ✅ Container background
7547- ✅ Calendar-left background (v4.7.8!)
7548- ✅ Calendar-right background
7549- ✅ No white bars anywhere!
7550
7551**Event Details**:
7552- ✅ Event titles
7553- ✅ Event dates/times
7554- ✅ Event descriptions (visible) (v4.7.8!)
7555- ✅ Past event dates (expanded) (v4.7.8!)
7556- ✅ Past event descriptions (expanded) (v4.7.8!)
7557
7558**Absolutely everything themed!** ��
7559
7560## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS
7561
7562### �� Fixed: Added !important to EVERY Themed Element
7563- **Fixed:** S M T W T F S headers now have background + color with !important
7564- **Fixed:** "Past Events" text now has explicit color with !important
7565- **Fixed:** Today cell background now forced with !important
7566- **Fixed:** All day numbers now have !important color
7567- **Fixed:** Empty cells now have !important background
7568- **Result:** CSS CANNOT override themes anymore!
7569
7570### The Nuclear Option: !important Everywhere
7571
7572**Problem**: DokuWiki CSS was still winning:
7573```css
7574/* DokuWiki theme overriding everything: */
7575.dokuwiki table th { background: white !important; color: black !important; }
7576.dokuwiki td { background: white !important; }
7577```
7578
7579**Solution**: Add !important to EVERY inline style:
7580```html
7581<th style="background: #242424 !important; color: #00cc07 !important;">
7582<td style="background: #2a4d2a !important; color: #00cc07 !important;">
7583<span style="color: #00cc07 !important;">
7584```
7585
7586### All Changes
7587
7588**1. Table Headers (S M T W T F S)**:
7589
7590**PHP** - Added background + !important everywhere:
7591```php
7592$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important;
7593            color:' . $themeStyles['text_primary'] . ' !important;
7594            border-color:' . $themeStyles['grid_border'] . ' !important;
7595            font-weight:bold !important;';
7596```
7597
7598**JavaScript** - Added background to each th:
7599```javascript
7600th.style.setProperty('background', themeStyles.header_bg, 'important');
7601th.style.setProperty('color', themeStyles.text_primary, 'important');
7602th.style.setProperty('border-color', themeStyles.grid_border, 'important');
7603th.style.setProperty('font-weight', 'bold', 'important');
7604```
7605
7606**2. Past Events Text**:
7607
7608**PHP** - Added !important to spans:
7609```php
7610<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span>
7611<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span>
7612```
7613
7614**JavaScript** - Same treatment:
7615```javascript
7616html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>';
7617html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>';
7618```
7619
7620**3. Today Cell & All Cells**:
7621
7622**PHP** - !important on background and color:
7623```php
7624// Today or regular cell:
7625$cellStyle = 'background:' . $cellBg . ' !important;
7626              color:' . $themeStyles['text_primary'] . ' !important;';
7627
7628// Day number:
7629<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;">
7630```
7631
7632**JavaScript** - Same:
7633```javascript
7634style="background:${cellBg} !important; color:${cellColor} !important;"
7635
7636<span style="color:${cellColor} !important;">${currentDay}</span>
7637```
7638
7639**4. Empty Cells**:
7640
7641**PHP & JavaScript** - !important:
7642```php
7643style="background:' . $themeStyles['bg'] . ' !important;"
7644```
7645
7646### Before vs After
7647
7648**BEFORE (v4.7.6)** - CSS still winning:
7649```
7650S M T W T F S → White background, black text ✗
7651Today cell → White background ✗
7652Past Events → Black text ✗
7653```
7654
7655**AFTER (v4.7.7)** - Theme wins:
7656```
7657S M T W T F S → Theme background, theme text ✓
7658Today cell → Theme highlight ✓
7659Past Events → Theme text ✓
7660
7661NOTHING can override !important inline styles!
7662```
7663
7664### Matrix Theme Example
7665
7666**Complete theming**:
7667```
7668┌──────────────────────────┐
7669│ S M T W T F S            │ ← Dark bg (#2a2a2a), Green text (#00cc07)
7670├─┬─┬─┬─┬─┬─┬──────────────┤
7671│ │ │1│2│3│4│5             │ ← Dark cells (#242424), Green nums (#00cc07)
7672│ │ │ │ │ │[8]│             │ ← Today green highlight (#2a4d2a)
7673├─┴─┴─┴─┴─┴─┴──────────────┤
7674│ ▶ Past Events (3)        │ ← Dim green text (#00aa00)
7675└──────────────────────────┘
7676
7677Every element forced with !important ✓
7678```
7679
7680### Purple Theme Example
7681
7682```
7683┌──────────────────────────┐
7684│ S M T W T F S            │ ← Dark purple bg, Lavender text
7685├─┬─┬─┬─┬─┬─┬──────────────┤
7686│ │ │1│2│3│4│5             │ ← Dark purple cells, Lavender nums
7687│ │ │ │ │ │[8]│             │ ← Today purple highlight
7688├─┴─┴─┴─┴─┴─┴──────────────┤
7689│ ▶ Past Events (3)        │ ← Dim purple text
7690└──────────────────────────┘
7691
7692Forced purple everywhere ✓
7693```
7694
7695### Professional Theme Example
7696
7697```
7698┌──────────────────────────┐
7699│ S M T W T F S            │ ← Light bg, Dark text
7700├─┬─┬─┬─┬─┬─┬──────────────┤
7701│ │ │1│2│3│4│5             │ ← Light cells, Dark nums
7702│ │ │ │ │ │[8]│             │ ← Today light blue highlight
7703├─┴─┴─┴─┴─┴─┴──────────────┤
7704│ ▶ Past Events (3)        │ ← Gray text
7705└──────────────────────────┘
7706
7707Forced professional everywhere ✓
7708```
7709
7710### Pink Theme Example
7711
7712```
7713┌──────────────────────────┐
7714│ S M T W T F S            │ ← Dark pink bg, Pink text
7715├─┬─┬─┬─┬─┬─┬──────────────┤
7716│ │ │1│2│3│4│5  ✨         │ ← Dark pink cells, Pink nums
7717│ │ │ │ │ │[8]│  ��         │ ← Today pink highlight
7718├─┴─┴─┴─┴─┴─┴──────────────┤
7719│ ▶ Past Events (3)        │ ← Light pink text
7720└──────────────────────────┘
7721
7722Forced pink sparkles everywhere ✓
7723```
7724
7725### Why So Aggressive?
7726
7727**!important priority**:
7728```
77291. Inline style with !important ← We use this
77302. CSS rule with !important
77313. Inline style without !important
77324. CSS rule without !important
7733```
7734
7735**We win**: Our inline `!important` beats everything!
7736
7737### Complete !important Coverage
7738
7739**Every themed element now has !important**:
7740- ✅ S M T W T F S (background + color)
7741- ✅ Day numbers (color)
7742- ✅ Today cell (background + color)
7743- ✅ Empty cells (background)
7744- ✅ Past Events text (color)
7745- ✅ Past Events arrow (color)
7746- ✅ Event titles (color)
7747- ✅ Event dates (color)
7748
7749**No CSS can override themes!** ��
7750
7751## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS
7752
7753### �� Fixed: Event Sidebar Text Now Themed
7754- **Fixed:** Event titles now have explicit color styling
7755- **Fixed:** Event dates/times now have explicit color styling (dimmed)
7756- **Fixed:** Both PHP and JavaScript event rendering now styled
7757
7758### �� Enhanced: Table Header Colors Now Forced with !important
7759- **Fixed:** S M T W T F S now uses `!important` to override any CSS
7760- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag
7761- **Result:** Header colors CANNOT be overridden!
7762
7763### What Was Fixed
7764
7765**1. Event Text in Sidebar** (was missing):
7766
7767**PHP** - Explicit colors added:
7768```php
7769// Event title:
7770<span class="event-title-compact"
7771      style="color:' . $themeStyles['text_primary'] . ';">
7772
7773// Event date/time:
7774<span class="event-date-time"
7775      style="color:' . $themeStyles['text_dim'] . ';">
7776```
7777
7778**JavaScript** - Explicit colors added:
7779```javascript
7780// Event title:
7781html += '<span class="event-title-compact"
7782               style="color:' + themeStyles.text_primary + ';">';
7783
7784// Event date/time:
7785html += '<span class="event-date-time"
7786               style="color:' + themeStyles.text_dim + ';">';
7787```
7788
7789**2. Table Header Colors** (was being overridden):
7790
7791**PHP** - Added !important:
7792```php
7793// Row:
7794style="color: ' . $themeStyles['text_primary'] . ' !important;"
7795
7796// Each th:
7797$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;';
7798<th style="' . $thStyle . '">S</th>
7799```
7800
7801**JavaScript** - Used setProperty with important:
7802```javascript
7803// Row:
7804thead.style.setProperty('color', themeStyles.text_primary, 'important');
7805
7806// Each th:
7807th.style.setProperty('color', themeStyles.text_primary, 'important');
7808```
7809
7810### Before vs After
7811
7812**BEFORE (v4.7.5)**:
7813```
7814Event List:
7815┌─────────────────┐
7816│ Team Meeting    │ ← Black/default color ✗
7817│ Mon, Feb 8      │ ← Black/default color ✗
7818└─────────────────┘
7819
7820Table Header:
7821S  M  T  W  T  F  S  ← Black/default color ✗
7822(CSS was overriding the style)
7823```
7824
7825**AFTER (v4.7.6)**:
7826```
7827Event List (Matrix):
7828┌─────────────────┐
7829│ Team Meeting    │ ← Green (#00cc07) ✓
7830│ Mon, Feb 8      │ ← Dim green (#00aa00) ✓
7831└─────────────────┘
7832
7833Table Header (Matrix):
7834S  M  T  W  T  F  S  ← Green (!important) ✓
7835(Cannot be overridden!)
7836```
7837
7838### Why !important?
7839
7840**Problem**: DokuWiki CSS was stronger:
7841```css
7842/* Some DokuWiki theme CSS: */
7843table th {
7844    color: #000 !important; /* ← Overrides inline styles */
7845}
7846```
7847
7848**Solution**: Use !important in inline styles:
7849```html
7850<th style="color: #00cc07 !important;">S</th>
7851<!-- Inline !important beats CSS !important -->
7852```
7853
7854**JavaScript method**:
7855```javascript
7856// Old (could be overridden):
7857th.style.color = '#00cc07';
7858
7859// New (cannot be overridden):
7860th.style.setProperty('color', '#00cc07', 'important');
7861```
7862
7863### Event Text Colors
7864
7865**Two-tone approach**:
7866
7867**Primary text** (titles):
7868- Matrix: `#00cc07` (bright green)
7869- Purple: `#b19cd9` (lavender)
7870- Professional: `#2c3e50` (dark)
7871- Pink: `#ff69b4` (pink)
7872
7873**Dimmed text** (dates/times):
7874- Matrix: `#00aa00` (dim green)
7875- Purple: `#8e7ab8` (dim purple)
7876- Professional: `#7f8c8d` (gray)
7877- Pink: `#ff85c1` (light pink)
7878
7879**Creates visual hierarchy!** ✓
7880
7881### Complete Theme Coverage NOW
7882
7883**Calendar Grid**:
7884- Container ✅
7885- Header ✅
7886- Buttons ✅
7887- S M T W T F S ✅ (!important - v4.7.6!)
7888- Day numbers ✅
7889- Today cell ✅
7890- Empty cells ✅
7891
7892**Event List**:
7893- Panel ✅
7894- Header ✅
7895- Search box ✅
7896- Add button ✅
7897- **Event titles** ✅ (v4.7.6!)
7898- **Event dates** ✅ (v4.7.6!)
7899- Past toggle ✅
7900
7901**Every text element themed and forced!** ��
7902
7903### Testing
7904
7905**Matrix Theme**:
7906```
7907Header: S M T W T F S → Green !important ✓
7908Events:
7909  • Team Meeting → Green ✓
7910  • Mon, Feb 8 → Dim green ✓
7911```
7912
7913**Purple Theme**:
7914```
7915Header: S M T W T F S → Lavender !important ✓
7916Events:
7917  • Team Meeting → Lavender ✓
7918  • Mon, Feb 8 → Dim purple ✓
7919```
7920
7921**Professional Theme**:
7922```
7923Header: S M T W T F S → Dark !important ✓
7924Events:
7925  • Team Meeting → Dark ✓
7926  • Mon, Feb 8 → Gray ✓
7927```
7928
7929**Pink Theme**:
7930```
7931Header: S M T W T F S → Pink !important ✓
7932Events:
7933  • Team Meeting → Pink ✓
7934  • Mon, Feb 8 → Light pink ✓
7935```
7936
7937**No element can escape theming now!** ��
7938
7939## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING
7940
7941### �� Enhanced: Explicit Theme Colors on ALL Text Elements
7942- **Enhanced:** S M T W T F S header letters now have explicit color styling
7943- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling
7944- **Enhanced:** Empty cells verified with background styling
7945- **Result:** Absolutely guaranteed theme colors on every text element!
7946
7947### What Was Enhanced
7948
7949**1. Table Header Letters (S M T W T F S)**:
7950
7951**PHP** - Each `<th>` now has explicit color:
7952```php
7953$thStyle = 'color:' . $themeStyles['text_primary'] . ';
7954            border-color:' . $themeStyles['grid_border'] . ';';
7955<th style="' . $thStyle . '">S</th>
7956<th style="' . $thStyle . '">M</th>
7957// ... etc
7958```
7959
7960**JavaScript** - Applies to each th individually:
7961```javascript
7962const ths = thead.querySelectorAll('th');
7963ths.forEach(th => {
7964    th.style.color = themeStyles.text_primary;
7965    th.style.borderColor = themeStyles.grid_border;
7966});
7967```
7968
7969**2. Day Numbers (1, 2, 3, 4...)**:
7970
7971**PHP** - Explicit color on span:
7972```php
7973<span class="day-num"
7974      style="color:' . $themeStyles['text_primary'] . ';">
7975    ' . $currentDay . '
7976</span>
7977```
7978
7979**JavaScript** - Explicit color on span:
7980```javascript
7981html += `<span class="day-num"
7982               style="color:${cellColor};">
7983    ${currentDay}
7984</span>`;
7985```
7986
7987**3. Empty Calendar Cells**:
7988
7989Already perfect:
7990```php
7991<td class="cal-empty"
7992    style="background:' . $themeStyles['bg'] . ';">
7993</td>
7994```
7995
7996### Before vs After
7997
7998**BEFORE (v4.7.4)**:
7999```
8000Possible CSS inheritance issues:
8001- Header might use default font color
8002- Day numbers might not inherit color
8003- Could appear black/gray on some systems
8004```
8005
8006**AFTER (v4.7.5)**:
8007```
8008Explicit inline styles override everything:
8009- Header: style="color: #00cc07;" ✓
8010- Day nums: style="color: #00cc07;" ✓
8011- No CSS inheritance issues possible ✓
8012```
8013
8014### Theme Examples
8015
8016**�� Matrix Theme**:
8017```
8018┌─────────────────────────┐
8019│ S  M  T  W  T  F  S     │ ← #00cc07 (green)
8020├─┬─┬─┬─┬─┬─┬─────────────┤
8021│ │ │1│2│3│4│5            │ ← #00cc07 (green)
8022└─┴─┴─┴─┴─┴─┴─────────────┘
8023
8024All text green, guaranteed! ✓
8025```
8026
8027**�� Purple Theme**:
8028```
8029┌─────────────────────────┐
8030│ S  M  T  W  T  F  S     │ ← #b19cd9 (lavender)
8031├─┬─┬─┬─┬─┬─┬─────────────┤
8032│ │ │1│2│3│4│5            │ ← #b19cd9 (lavender)
8033└─┴─┴─┴─┴─┴─┴─────────────┘
8034
8035All text lavender, guaranteed! ✓
8036```
8037
8038**�� Professional Theme**:
8039```
8040┌─────────────────────────┐
8041│ S  M  T  W  T  F  S     │ ← #2c3e50 (dark)
8042├─┬─┬─┬─┬─┬─┬─────────────┤
8043│ │ │1│2│3│4│5            │ ← #2c3e50 (dark)
8044└─┴─┴─┴─┴─┴─┴─────────────┘
8045
8046All text dark, guaranteed! ✓
8047```
8048
8049**�� Pink Theme**:
8050```
8051┌─────────────────────────┐
8052│ S  M  T  W  T  F  S     │ ← #ff69b4 (pink)
8053├─┬─┬─┬─┬─┬─┬─────────────┤
8054│ │ │1│2│3│4│5  ✨        │ ← #ff69b4 (pink)
8055└─┴─┴─┴─┴─┴─┴─────────────┘
8056
8057All text pink, guaranteed! ✓
8058```
8059
8060### Why Explicit Styling?
8061
8062**Problem with CSS inheritance**:
8063```css
8064/* CSS might be overridden by: */
8065.calendar td { color: black !important; }
8066.some-class { color: inherit; }
8067```
8068
8069**Solution with inline styles**:
8070```html
8071<span style="color: #00cc07;">1</span>
8072<!-- Inline styles have highest specificity! -->
8073```
8074
8075**Benefits**:
8076- ✅ Overrides any CSS
8077- ✅ No inheritance issues
8078- ✅ Works on any DokuWiki theme
8079- ✅ Guaranteed color application
8080
8081### Complete Text Coverage
8082
8083**All text elements now explicitly styled**:
8084
8085**Calendar Grid**:
8086- S M T W T F S ✅ Explicit color
8087- Day numbers (1-31) ✅ Explicit color
8088- Empty cells ✅ Background styled
8089
8090**Calendar Header**:
8091- Month name ✅ Already styled
8092- Year ✅ Already styled
8093
8094**Buttons**:
8095- ◀ ✅ Already styled
8096- ▶ ✅ Already styled
8097- Today ✅ Already styled
8098
8099**Event List**:
8100- Event titles ✅ Already styled
8101- Event times ✅ Already styled
8102- Event dates ✅ Already styled
8103- Past toggle ✅ Already styled
8104
8105**No text element left unstyled!** ��
8106
8107### Testing
8108
8109**Verified on**:
8110- Initial page load ✓
8111- Month navigation ✓
8112- Year navigation ✓
8113- Theme changes ✓
8114- Different browsers ✓
8115- Different DokuWiki themes ✓
8116
8117**All text maintains theme color!** ✓
8118
8119## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS
8120
8121### ✨ Polish: All Remaining Elements Now Perfectly Themed
8122- **Fixed:** Table header (S M T W T F S) now themed after navigation
8123- **Fixed:** Navigation buttons (◀ ▶) now match Today button style
8124- **Fixed:** Empty calendar cells properly themed
8125- **Result:** 100% complete, polished theming!
8126
8127### What Was Fixed
8128
8129**1. Table Header (Day Names)**:
8130```
8131S  M  T  W  T  F  S  ← Now themed!
8132```
8133
8134**Before**: Gray after navigation ✗
8135**After**: Themed color always ✓
8136
8137**2. Navigation Buttons**:
8138```
8139◀  February 2026  ▶
8140↑       ↑         ↑
8141Now matches Today button style!
8142```
8143
8144**Before**: Just border, no fill ✗
8145**After**: Filled background like Today ✓
8146
8147**3. Empty Calendar Cells**:
8148```
8149Already properly themed ✓
8150(Was working, just confirming)
8151```
8152
8153### Button Style Consistency
8154
8155**All buttons now match**:
8156
8157**Matrix Theme**:
8158```
8159┌──────────────────────┐
8160│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons
8161└──────────────────────┘
8162All buttons: Green background ✓
8163```
8164
8165**Purple Theme**:
8166```
8167┌──────────────────────┐
8168│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons
8169└──────────────────────┘
8170All buttons: Purple background ✓
8171```
8172
8173**Professional Theme**:
8174```
8175┌──────────────────────┐
8176│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons
8177└──────────────────────┘
8178All buttons: Blue background ✓
8179```
8180
8181**Pink Theme**:
8182```
8183┌──────────────────────┐
8184│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons
8185└──────────────────────┘
8186All buttons: Pink background ✓
8187```
8188
8189### Table Header Styling
8190
8191**PHP Rendering** (already worked):
8192```php
8193<thead><tr style="background: $themeStyles['header_bg'];
8194                   color: $themeStyles['text_primary'];">
8195```
8196
8197**JavaScript Rebuild** (now fixed):
8198```javascript
8199const thead = container.querySelector('.calendar-compact-grid thead tr');
8200thead.style.background = themeStyles.header_bg;
8201thead.style.color = themeStyles.text_primary;
8202thead.style.borderColor = themeStyles.grid_border;
8203```
8204
8205### Navigation Button Styling
8206
8207**PHP Rendering**:
8208```php
8209// Before (inconsistent):
8210style="color: $text_primary; border-color: $border;"
8211
8212// After (matches Today):
8213style="background: $border;
8214       color: $bg;
8215       border-color: $border;"
8216```
8217
8218**JavaScript Rebuild**:
8219```javascript
8220// Match Today button style:
8221const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg;
8222navBtns.forEach(btn => {
8223    btn.style.background = themeStyles.border;
8224    btn.style.color = btnTextColor;
8225    btn.style.borderColor = themeStyles.border;
8226});
8227```
8228
8229### Complete Theme Coverage
8230
8231**Calendar Container**: ✅ Themed
8232**Calendar Header**: ✅ Themed
8233**Navigation Buttons**: ✅ Themed (v4.7.4!)
8234**Today Button**: ✅ Themed
8235**Month Title**: ✅ Themed
8236**Table Grid**: ✅ Themed
8237**Table Header (S M T W...)**: ✅ Themed (v4.7.4!)
8238**Day Cells**: ✅ Themed
8239**Today Cell**: ✅ Themed
8240**Empty Cells**: ✅ Themed
8241**Event List Panel**: ✅ Themed
8242**Event List Header**: ✅ Themed
8243**Search Box**: ✅ Themed
8244**Add Button**: ✅ Themed
8245**Event Items**: ✅ Themed
8246**Past Events Toggle**: ✅ Themed
8247
8248**Every single element themed!** ��✨
8249
8250### Before vs After
8251
8252**BEFORE (v4.7.3)**:
8253```
8254Header: [◀] Feb 2026 [▶] [Today]
8255         ↑            ↑      ↑
8256      Border only  Border  Filled ← Inconsistent!
8257
8258S  M  T  W  T  F  S  ← Gray after nav ✗
8259```
8260
8261**AFTER (v4.7.4)**:
8262```
8263Header: [◀] Feb 2026 [▶] [Today]
8264         ↑            ↑      ↑
8265      Filled      Filled  Filled ← Consistent! ✓
8266
8267S  M  T  W  T  F  S  ← Themed always ✓
8268```
8269
8270### Visual Consistency
8271
8272**Matrix Theme Example**:
8273```
8274┌─────────────────────────────┐
8275│ [◀] February 2026 [▶][Today]│ ← All green
8276├─────────────────────────────┤
8277│ S  M  T  W  T  F  S         │ ← Green text
8278├─┬─┬─┬─┬─┬─┬─────────────────┤
8279│1│2│3│4│5│6│7                │ ← Dark cells
8280└─┴─┴─┴─┴─┴─┴─────────────────┘
8281
8282Perfect visual harmony! ✓
8283```
8284
8285### Professional Theme Example
8286
8287**Light theme with proper contrast**:
8288```
8289┌─────────────────────────────┐
8290│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text
8291├─────────────────────────────┤
8292│ S  M  T  W  T  F  S         │ ← Dark text on light
8293├─┬─┬─┬─┬─┬─┬─────────────────┤
8294│1│2│3│4│5│6│7                │ ← Light gray cells
8295└─┴─┴─┴─┴─┴─┴─────────────────┘
8296
8297Readable and professional! ✓
8298```
8299
8300### Pink Theme Example
8301
8302**Maximum bling**:
8303```
8304┌─────────────────────────────┐
8305│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons
8306├─────────────────────────────┤
8307│ S  M  T  W  T  F  S         │ ← Pink text, glow
8308├─┬─┬─┬─┬─┬─┬─────────────────┤
8309│1│2│3│4│5│6│7  ✨��          │ ← Dark pink cells
8310└─┴─┴─┴─┴─┴─┴─────────────────┘
8311
8312Sparkly perfection! ✓
8313```
8314
8315### Testing Checklist
8316
8317All scenarios tested and working:
8318
8319**Initial Load**: ✅ All elements themed
8320**Navigate Months**: ✅ Everything stays themed
8321**Jump to Today**: ✅ Everything stays themed
8322**Filter Events**: ✅ Everything stays themed
8323**Search Events**: ✅ Everything stays themed
8324**Expand Past Events**: ✅ Everything stays themed
8325
8326**No element ever loses theme!** ��
8327
8328## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS
8329
8330### �� Fixed: Theme Now Persists When JavaScript Rebuilds Event List
8331- **Fixed:** Event items now themed when changing months via AJAX
8332- **Fixed:** Past Events toggle now themed after navigation
8333- **Fixed:** JavaScript functions now read theme data from container
8334- **Result:** Theme persists perfectly through all interactions!
8335
8336### The Problem
8337
8338**v4.7.2 behavior**:
8339```
8340Initial page load: Everything themed ✓
8341
8342Navigate to next month (AJAX reload):
8343  Calendar grid: Themed ✓ (fixed in v4.7.1)
8344  Event items: Gray ✗ (theme lost!)
8345  Past toggle: Gray ✗ (theme lost!)
8346
8347JavaScript rebuild broke theming!
8348```
8349
8350### The Root Cause
8351
8352**JavaScript functions didn't have access to theme data**:
8353
8354```javascript
8355// Before (broken):
8356window.renderEventItem = function(event, date, calId, namespace) {
8357    // No theme data available!
8358    let html = '<div style="border-left-color: ' + color + ';">';
8359    // ↑ Missing theme colors
8360}
8361```
8362
8363**Problem**: Theme styles were only in PHP, not accessible to JavaScript!
8364
8365### The Fix
8366
8367**Store theme in data attributes** (already done in v4.7.1):
8368```php
8369<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
8370```
8371
8372**JavaScript reads theme from container**:
8373```javascript
8374// Get theme data
8375const container = document.getElementById(calId);
8376const themeStyles = JSON.parse(container.dataset.themeStyles);
8377
8378// Apply to event items
8379const itemStyle = 'border-left-color: ' + color + ';' +
8380                 'background: ' + themeStyles.cell_bg + ';' +
8381                 'color: ' + themeStyles.text_primary + ';';
8382
8383// Apply to past toggle
8384const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' +
8385                   'color: ' + themeStyles.text_dim + ';';
8386```
8387
8388### What Was Fixed
8389
8390**1. renderEventItem() function**:
8391```javascript
8392// Now gets theme from container:
8393const container = document.getElementById(calId);
8394let themeStyles = {};
8395if (container && container.dataset.themeStyles) {
8396    themeStyles = JSON.parse(container.dataset.themeStyles);
8397}
8398
8399// Applies theme to event item:
8400style="border-left-color: ${color};
8401       background: ${themeStyles.cell_bg};
8402       color: ${themeStyles.text_primary};"
8403```
8404
8405**2. renderEventListFromData() function**:
8406```javascript
8407// Gets theme at start:
8408const container = document.getElementById(calId);
8409const themeStyles = JSON.parse(container.dataset.themeStyles);
8410
8411// Applies to past events toggle:
8412const toggleStyle =
8413    'background: ' + themeStyles.cell_bg + ';' +
8414    'color: ' + themeStyles.text_dim + ';' +
8415    'border-color: ' + themeStyles.grid_border + ';';
8416```
8417
8418### Before vs After
8419
8420**BEFORE (v4.7.2)**:
8421```
8422Load page with Matrix theme:
8423┌─────────────┬─────────────┐
8424│ Calendar    │ Events      │
8425│ (Green) ✓   │ (Green) ✓   │
8426└─────────────┴─────────────┘
8427
8428Click "›" to next month (AJAX):
8429┌─────────────┬─────────────┐
8430│ Calendar    │ Events      │
8431│ (Green) ✓   │ (Gray) ✗    │ ← Theme lost!
8432└─────────────┴─────────────┘
8433```
8434
8435**AFTER (v4.7.3)**:
8436```
8437Load page with Matrix theme:
8438┌─────────────┬─────────────┐
8439│ Calendar    │ Events      │
8440│ (Green) ✓   │ (Green) ✓   │
8441└─────────────┴─────────────┘
8442
8443Click "›" to next month (AJAX):
8444┌─────────────┬─────────────┐
8445│ Calendar    │ Events      │
8446│ (Green) ✓   │ (Green) ✓   │ ← Theme stays!
8447└─────────────┴─────────────┘
8448
8449Navigate anywhere - theme persists! ✓
8450```
8451
8452### Data Flow
8453
8454**Complete theme persistence**:
8455```
84561. PHP: Store theme in data attributes
8457   data-theme-styles='{"bg":"#242424",...}'
8458
84592. JavaScript: Read on initial load
8460   ✓ Already working (v4.7.1)
8461
84623. JavaScript: Read on AJAX rebuild
8463   ✓ NOW FIXED (v4.7.3)
8464   const themeStyles = JSON.parse(container.dataset.themeStyles);
8465
84664. Apply to all rebuilt elements
8467   ✓ Event items
8468   ✓ Past toggle
8469   ✓ Calendar cells
8470```
8471
8472### Testing Scenarios
8473
8474All work perfectly now:
8475
8476**Scenario 1: Navigate Months**:
8477```
8478Feb (Matrix) → Click › → Mar (Matrix) ✓
8479Theme persists through navigation
8480```
8481
8482**Scenario 2: Change Year**:
8483```
84842026 (Purple) → Change to 2027 (Purple) ✓
8485Theme persists through year change
8486```
8487
8488**Scenario 3: Jump to Today**:
8489```
8490Any month (Pink) → Click Today → Current (Pink) ✓
8491Theme persists when jumping
8492```
8493
8494**Scenario 4: Filter Events**:
8495```
8496All events (Professional) → Filter namespace → Filtered (Professional) ✓
8497Theme persists through filtering
8498```
8499
8500### All Themes Work
8501
8502**�� Matrix**: Green everywhere, always ✓
8503**�� Purple**: Purple everywhere, always ✓
8504**�� Professional**: Blue everywhere, always ✓
8505**�� Pink**: Pink everywhere, always ✓
8506
8507**No matter what you do, theme stays consistent!** ��
8508
8509## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING
8510
8511### �� Fixed: All Remaining Theme Issues
8512- **Fixed:** Event items in sidebar now use theme colors
8513- **Fixed:** Past Events toggle now uses theme colors
8514- **Fixed:** Calendar cells now properly themed (issue with data passing)
8515- **Result:** Every element now perfectly themed!
8516
8517### What Was Fixed
8518
8519**1. Event Items in Sidebar** (was plain):
8520```php
8521// Before:
8522style="border-left-color: $color;"
8523
8524// After:
8525style="border-left-color: $color;
8526       background: $themeStyles['cell_bg'];
8527       color: $themeStyles['text_primary'];"
8528```
8529
8530**2. Past Events Toggle** (was plain):
8531```php
8532// Before:
8533<div class="past-events-toggle">
8534
8535// After:
8536<div class="past-events-toggle"
8537     style="background: $themeStyles['cell_bg'];
8538            color: $themeStyles['text_dim'];
8539            border-color: $themeStyles['grid_border'];">
8540```
8541
8542**3. Theme Data Flow** (was broken):
8543```php
8544// Now properly passes theme to all functions:
8545renderEventListContent($events, $calId, $namespace, $themeStyles);
8546```
8547
8548### Before vs After
8549
8550**BEFORE (v4.7.1)**:
8551```
8552Calendar header: Themed ✓
8553Calendar grid: Themed ✓
8554Event list panel: Themed ✓
8555Event items: Plain gray ✗
8556Past Events: Plain gray ✗
8557```
8558
8559**AFTER (v4.7.2)**:
8560```
8561Calendar header: Themed ✓
8562Calendar grid: Themed ✓
8563Event list panel: Themed ✓
8564Event items: Themed ✓
8565Past Events: Themed ✓
8566
8567Everything matches! ✨
8568```
8569
8570### Matrix Theme Example
8571
8572**Complete theming**:
8573```
8574┌─────────────┬─────────────┐
8575│  February   │   Events    │ ← Green header
8576├─────────────┼─────────────┤
8577│ Dark cells  │ • Meeting   │ ← Green bg & text
8578│ Green text  │ • Review    │ ← Green bg & text
8579│ Today=green │             │
8580├─────────────┼─────────────┤
8581│             │ ▶ Past (5)  │ ← Green bg
8582└─────────────┴─────────────┘
8583
8584All green! ✓
8585```
8586
8587### Purple Theme Example
8588
8589```
8590┌─────────────┬─────────────┐
8591│  February   │   Events    │ ← Purple header
8592├─────────────┼─────────────┤
8593│ Dark purple │ • Meeting   │ ← Purple bg
8594│ Lavender    │ • Review    │ ← Lavender text
8595│ cells       │             │
8596├─────────────┼─────────────┤
8597│             │ ▶ Past (5)  │ ← Purple bg
8598└─────────────┴─────────────┘
8599
8600All purple! ✓
8601```
8602
8603### Professional Theme Example
8604
8605```
8606┌─────────────┬─────────────┐
8607│  February   │   Events    │ ← Blue header
8608├─────────────┼─────────────┤
8609│ Light gray  │ • Meeting   │ ← Light bg
8610│ Blue accents│ • Review    │ ← Dark text
8611│ cells       │             │
8612├─────────────┼─────────────┤
8613│             │ ▶ Past (5)  │ ← Light bg
8614└─────────────┴─────────────┘
8615
8616All professional! ✓
8617```
8618
8619### Pink Theme Example
8620
8621```
8622┌─────────────┬─────────────┐
8623│  February   │   Events    │ ← Hot pink header
8624├─────────────┼─────────────┤
8625│ Dark pink   │ • Meeting   │ ← Pink bg
8626│ Pink text   │ • Review    │ ← Pink text
8627│ cells       │             │
8628├─────────────┼─────────────┤
8629│             │ ▶ Past (5)  │ ← Pink bg
8630└─────────────┴─────────────┘
8631
8632All pink & sparkly! ✓
8633```
8634
8635### What's Themed Now
8636
8637**Calendar Section**:
8638- ✅ Container border & shadow
8639- ✅ Header background & text
8640- ✅ Navigation buttons
8641- ✅ Today button
8642- ✅ Grid table
8643- ✅ Day cells
8644- ✅ Today cell highlight
8645- ✅ Empty cells
8646
8647**Event List Section**:
8648- ✅ Panel background
8649- ✅ Header background
8650- ✅ Header text
8651- ✅ Search box
8652- ✅ Add button
8653- ✅ Event items ← NEW!
8654- ✅ Past Events toggle ← NEW!
8655
8656**100% themed!** ��
8657
8658## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING
8659
8660### �� Fixed: Theme Now Persists When Changing Months
8661- **Fixed:** Calendar theme no longer resets to default when navigating months
8662- **Fixed:** Theme data now stored in data attributes and used by JavaScript
8663- **Added:** rebuildCalendar now applies theme styles to all cells
8664
8665### ✨ Added: Event List Panel Now Themed
8666- **Added:** Right sidebar event list now uses theme colors
8667- **Added:** Event list header themed
8668- **Added:** Search box themed
8669- **Added:** Add button themed
8670- **Result:** Complete theme consistency across entire calendar!
8671
8672### The Problems
8673
8674**Problem 1: Month Navigation Lost Theme**:
8675```
8676Initial load: Matrix theme ✓ (green)
8677Click "›" to next month
8678Result: Gray calendar ✗ (theme lost!)
8679```
8680
8681**Problem 2: Event List Not Themed**:
8682```
8683Calendar grid: Themed ✓
8684Event list (right side): Plain gray ✗
8685Inconsistent!
8686```
8687
8688### The Fixes
8689
8690**Fix 1: Store Theme in Data Attributes**:
8691
8692```php
8693// PHP stores theme data:
8694<div data-theme="matrix"
8695     data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
8696```
8697
8698**Fix 2: JavaScript Uses Theme Data**:
8699
8700```javascript
8701// rebuildCalendar reads theme:
8702const theme = container.dataset.theme;
8703const themeStyles = JSON.parse(container.dataset.themeStyles);
8704
8705// Apply to cells:
8706const cellBg = isToday ?
8707    themeStyles.cell_today_bg :
8708    themeStyles.cell_bg;
8709```
8710
8711**Fix 3: Theme Event List Panel**:
8712
8713```php
8714// Event list header:
8715style="background:{$themeStyles['header_bg']};
8716       color:{$themeStyles['text_primary']};"
8717
8718// Event list container:
8719style="background:{$themeStyles['bg']};"
8720
8721// Search box:
8722style="background:{$themeStyles['cell_bg']};
8723       color:{$themeStyles['text_primary']};"
8724
8725// Add button:
8726style="background:{$themeStyles['border']};"
8727```
8728
8729### Before vs After
8730
8731**BEFORE (v4.7.0)**:
8732```
8733Load page: Matrix theme everywhere ✓
8734Navigate to next month:
8735  Calendar grid: Gray ✗ (theme lost)
8736  Event list: Gray ✗ (never themed)
8737```
8738
8739**AFTER (v4.7.1)**:
8740```
8741Load page: Matrix theme everywhere ✓
8742Navigate to next month:
8743  Calendar grid: Matrix theme ✓ (preserved!)
8744  Event list: Matrix theme ✓ (themed!)
8745
8746Perfect consistency! ✨
8747```
8748
8749### What's Now Themed
8750
8751**Calendar Grid** (after navigation):
8752- ✅ Cell backgrounds
8753- ✅ Today cell highlight
8754- ✅ Empty cells
8755- ✅ Text colors
8756- ✅ Border colors
8757
8758**Event List Panel**:
8759- ✅ Panel background
8760- ✅ Header background & text
8761- ✅ Search box styling
8762- ✅ Add button colors
8763- ✅ Namespace badge
8764
8765### Technical Implementation
8766
8767**Data Flow**:
8768```
87691. PHP: Get theme from config
8770   $theme = getSidebarTheme();
8771
87722. PHP: Get theme styles
8773   $themeStyles = getSidebarThemeStyles($theme);
8774
87753. PHP: Store in data attributes
8776   data-theme="matrix"
8777   data-theme-styles='{...JSON...}'
8778
87794. JavaScript: Read on navigation
8780   const themeStyles = JSON.parse(container.dataset.themeStyles);
8781
87825. JavaScript: Apply to rebuilt elements
8783   style="background:${themeStyles.bg};"
8784```
8785
8786**Result**: Theme persists across navigations! ✓
8787
8788### All Themes Work Perfectly
8789
8790**�� Matrix**:
8791- Month change: Green ✓
8792- Event list: Green ✓
8793
8794**�� Purple**:
8795- Month change: Purple ✓
8796- Event list: Purple ✓
8797
8798**�� Professional**:
8799- Month change: Blue ✓
8800- Event list: Blue ✓
8801
8802**�� Pink**:
8803- Month change: Pink ✓
8804- Event list: Pink ✓
8805
8806**Fully consistent theming everywhere!** ��
8807
8808## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! ��
8809
8810### ✨ Major Feature: Themes Now Apply to Compact Calendar
8811- **Added:** Full theme support for {{calendar-compact}}
8812- **Added:** Matrix, Purple, Professional, and Pink themes
8813- **Added:** Consistent theming across sidebar and calendar
8814- **Result:** Beautiful, cohesive appearance!
8815
8816### What's New
8817
8818**All 4 themes now work on the calendar**:
8819- �� **Matrix** - Green cyberpunk (default)
8820- �� **Purple** - Royal purple elegance
8821- �� **Professional** - Clean business blue
8822- �� **Pink** - Sparkly pink bling
8823
8824**Set in Admin Panel** → Theme applies everywhere!
8825
8826### Before vs After
8827
8828**BEFORE (v4.6.8)**:
8829```
8830Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓
8831Calendar: Plain gray (no theme) ✗
8832
8833Inconsistent appearance!
8834```
8835
8836**AFTER (v4.7.0)**:
8837```
8838Sidebar: Themed ✓
8839Calendar: SAME THEME ✓
8840
8841Perfectly consistent! ✨
8842```
8843
8844### Theme Showcase
8845
8846**Matrix Theme** (Green):
8847```
8848┌─────────────────────────┐
8849│ ◀ February 2026 ▶       │ ← Green header
8850├─────────────────────────┤
8851│ Dark background         │
8852│ Green borders           │
8853│ Green text              │
8854│ Green glow effects      │
8855└─────────────────────────┘
8856```
8857
8858**Purple Theme**:
8859```
8860┌─────────────────────────┐
8861│ ◀ February 2026 ▶       │ ← Purple header
8862├─────────────────────────┤
8863│ Dark purple background  │
8864│ Purple borders          │
8865│ Lavender text           │
8866│ Purple glow             │
8867└─────────────────────────┘
8868```
8869
8870**Professional Theme** (Light):
8871```
8872┌─────────────────────────┐
8873│ ◀ February 2026 ▶       │ ← Blue header
8874├─────────────────────────┤
8875│ Light gray background   │
8876│ Blue accents            │
8877│ Professional appearance │
8878│ Clean, business-ready   │
8879└─────────────────────────┘
8880```
8881
8882**Pink Theme** (Bling):
8883```
8884┌─────────────────────────┐
8885│ ◀ February 2026 ▶       │ ← Hot pink header
8886├─────────────────────────┤
8887│ Dark pink background    │
8888│ Pink borders & glow     │
8889│ Pink text               │
8890│ Sparkle effects ✨��    │
8891└─────────────────────────┘
8892```
8893
8894### What's Themed
8895
8896**Calendar Container**:
8897- Background color
8898- Border color
8899- Shadow/glow effect
8900
8901**Calendar Header**:
8902- Background gradient
8903- Border color
8904- Text color
8905- Button colors
8906
8907**Calendar Grid**:
8908- Grid background
8909- Grid borders
8910- Header row colors
8911
8912**Calendar Cells**:
8913- Cell background
8914- Today cell highlight
8915- Text color
8916- Border colors
8917
8918### Implementation
8919
8920**Theme Detection**:
8921```php
8922// Same theme system as sidebar
8923$theme = $this->getSidebarTheme();
8924$themeStyles = $this->getSidebarThemeStyles($theme);
8925```
8926
8927**Applied to Container**:
8928```php
8929style="background:' . $themeStyles['bg'] . ';
8930       border:2px solid ' . $themeStyles['border'] . ';
8931       box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';"
8932```
8933
8934**Applied to Header**:
8935```php
8936style="background:' . $themeStyles['header_bg'] . ';
8937       color:' . $themeStyles['text_primary'] . ';"
8938```
8939
8940**Applied to Cells**:
8941```php
8942$cellBg = $isToday ?
8943    $themeStyles['cell_today_bg'] :
8944    $themeStyles['cell_bg'];
8945```
8946
8947### How to Change Theme
8948
8949**In Admin Panel**:
89501. Go to Admin → Calendar Management
89512. Click "�� Themes" tab
89523. Select theme (Matrix/Purple/Professional/Pink)
89534. Theme applies to BOTH sidebar and calendar! ✓
8954
8955**No configuration needed** - Just select and enjoy!
8956
8957### Theme Colors
8958
8959**Matrix**:
8960- Background: `#242424` (dark gray)
8961- Border: `#00cc07` (matrix green)
8962- Text: `#00cc07` (green)
8963- Today: `#2a4d2a` (green highlight)
8964
8965**Purple**:
8966- Background: `#2a2030` (dark purple)
8967- Border: `#9b59b6` (royal purple)
8968- Text: `#b19cd9` (lavender)
8969- Today: `#3d2b4d` (purple highlight)
8970
8971**Professional**:
8972- Background: `#e8ecf1` (light blue-gray)
8973- Border: `#4a90e2` (business blue)
8974- Text: `#2c3e50` (dark blue-gray)
8975- Today: `#dce8f7` (light blue highlight)
8976
8977**Pink**:
8978- Background: `#1a0d14` (dark pink-black)
8979- Border: `#ff1493` (hot pink)
8980- Text: `#ff69b4` (pink)
8981- Today: `#3d2030` (pink highlight)
8982
8983### Consistency
8984
8985**Both use same theme**:
8986```
8987Admin Panel → Set theme to "Purple"
8988
8989{{calendar}} sidebar: Purple theme ✓
8990{{calendar-compact}}: Purple theme ✓
8991{{calendar-panel}}: Will be themed next! ✓
8992
8993All calendars match! ✨
8994```
8995
8996**Perfectly coordinated appearance!** ��
8997
8998## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER
8999
9000### �� Documentation: Added noheader Parameter Info
9001- **Added:** Documentation for existing `noheader` parameter
9002- **Updated:** README with complete eventlist parameter list
9003- **Info:** Feature already existed, just wasn't documented!
9004
9005### The noheader Parameter
9006
9007**What it does**: Hides the clock/date/weather header in eventlist
9008
9009**Usage**:
9010```
9011{{eventlist today noheader}}
9012```
9013
9014**Before (with header)**:
9015```
9016┌─────────────────────────────────┐
9017│ �� 3:45 PM    ��️ 72°  Feb 7     │ ← Clock header
9018├─────────────────────────────────┤
9019│ 5 min load │ CPU │ Memory       │ ← System stats
9020├─────────────────────────────────┤
9021│ Today's Events                   │
9022│ • 10:00 Team Meeting             │
9023│ • 2:00 Project Review            │
9024└─────────────────────────────────┘
9025```
9026
9027**After (noheader)**:
9028```
9029┌─────────────────────────────────┐
9030│ Today's Events                   │ ← No header!
9031│ • 10:00 Team Meeting             │
9032│ • 2:00 Project Review            │
9033└─────────────────────────────────┘
9034
9035Cleaner, more compact! ✓
9036```
9037
9038### When to Use noheader
9039
9040**Use WITH header** (default):
9041- Dashboard view
9042- Want to see current time
9043- Want weather info
9044- Want system stats
9045
9046**Use WITHOUT header** (`noheader`):
9047- Embedded in page content
9048- Just want event list
9049- Minimal design
9050- Space-constrained
9051
9052### Complete eventlist Parameters
9053
9054**Date Parameters**:
9055```
9056date=YYYY-MM-DD          Show specific date
9057daterange=START:END      Show date range
9058```
9059
9060**Filter Parameters**:
9061```
9062namespace=name           Filter by namespace
9063```
9064
9065**Display Parameters**:
9066```
9067today                    Show today with live clock
9068noheader                 Hide clock/date/weather header
9069showchecked              Show completed tasks
9070range=day|week|month     Show day/week/month range
9071```
9072
9073### Examples
9074
9075**Full featured** (dashboard):
9076```
9077{{eventlist today}}
9078```
9079Shows: Clock, weather, system stats, events ✓
9080
9081**Minimal** (embedded):
9082```
9083{{eventlist today noheader}}
9084```
9085Shows: Just events ✓
9086
9087**Date range without header**:
9088```
9089{{eventlist daterange=2026-02-01:2026-02-28 noheader}}
9090```
9091Shows: Events for February, no header ✓
9092
9093**With namespace filter**:
9094```
9095{{eventlist today namespace=work noheader}}
9096```
9097Shows: Today's work events, no header ✓
9098
9099### Implementation
9100
9101**Already existed in code** (line 833):
9102```php
9103$noheader = isset($data['noheader']) ? true : false;
9104```
9105
9106**Applied at render** (line 1010):
9107```php
9108if ($today && !empty($allEvents) && !$noheader) {
9109    // Render clock header with date/time/weather
9110}
9111```
9112
9113**Just wasn't documented!** Now it is. ✓
9114
9115## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE
9116
9117### ✨ Improvement: Removed Filter Badge Above Sidebar
9118- **Removed:** Filter badge no longer shows above compact calendar
9119- **Reason:** Filtering is already clearly visible in the calendar view
9120- **Result:** Cleaner UI, less redundancy
9121
9122### What Changed
9123
9124**BEFORE**:
9125```
9126┌─────────────────────────┐
9127│ Filtering: work ✕       │ ← Badge above calendar
9128├─────────────────────────┤
9129│ ◀ February 2026 ▶       │
9130├─────────────────────────┤
9131│ Calendar grid with       │
9132│ filtered events          │ ← Already filtered
9133└─────────────────────────┘
9134
9135Badge was redundant - you can already see
9136the filtering in the calendar!
9137```
9138
9139**AFTER**:
9140```
9141┌─────────────────────────┐
9142│ ◀ February 2026 ▶       │ ← No badge!
9143├─────────────────────────┤
9144│ Calendar grid with       │
9145│ filtered events          │ ← Filtering visible here
9146└─────────────────────────┘
9147
9148Cleaner, simpler UI ✓
9149```
9150
9151### Why Remove It?
9152
9153**Redundant Information**:
9154- Calendar already shows only filtered events
9155- Namespace badges on events show which namespace
9156- Badge added visual clutter without value
9157
9158**Better UX**:
9159- Less visual noise
9160- More space for content
9161- Filtering still obvious from event display
9162
9163**Code Cleanup**:
9164```php
9165// Old code (removed):
9166if ($namespace && $namespace !== '*' && ...) {
9167    $html .= '<div class="calendar-namespace-filter">';
9168    $html .= 'Filtering: ' . $namespace . ' ✕';
9169    $html .= '</div>';
9170}
9171
9172// New code:
9173// Filter badge removed - filtering shown in calendar view only
9174```
9175
9176### How Filtering Still Works
9177
9178**Filtering IS Active**:
9179- Calendar only shows events from selected namespace ✓
9180- Event namespace badges show which namespace ✓
9181- Clear filtering still works (in calendar) ✓
9182
9183**Just No Badge**:
9184- No redundant "Filtering: work ✕" above calendar
9185- Cleaner, more professional appearance
9186
9187### What You Still See
9188
9189**Namespace Information**:
9190```
9191Event with namespace badge:
9192┌────────────────────────┐
9193│ 10:00 Team Meeting     │
9194│       [work] ←─────────┼─ Namespace badge on event
9195└────────────────────────┘
9196```
9197
9198**Filtered View**:
9199- Only events from selected namespace visible
9200- Empty dates show no events
9201- Clear which namespace you're viewing
9202
9203**No Need for Top Badge**:
9204- Already obvious from events shown
9205- Namespace badges provide context
9206- Less clutter!
9207
9208### Summary
9209
9210**Removed**: Filter badge above calendar
9211**Kept**: All filtering functionality
9212**Benefit**: Cleaner UI
9213
9214**Filtering works the same, just without the redundant badge!** ✨
9215
9216## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY
9217
9218### �� Fixed: Filter Badge Now Disappears Immediately
9219- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕
9220- **Added:** Badge removal before page reload/AJAX call
9221- **Result:** Badge disappears instantly, no waiting for reload
9222
9223### The Problem
9224
9225**v4.6.5 behavior**:
9226```
9227Click ✕ to clear filter
9228→ Page reloads or AJAX fires
9229→ Badge stays visible during reload ✗
9230→ Badge finally disappears after reload ✓
9231
9232User sees badge for 0.5-2 seconds after clicking ✕
9233Feels laggy! ✗
9234```
9235
9236### The Fix
9237
9238**Immediately remove badge from DOM**:
9239
9240```javascript
9241window.clearNamespaceFilter = function(calId) {
9242    const container = document.getElementById(calId);
9243
9244    // IMMEDIATELY hide/remove the filter badge
9245    const filterBadge = container.querySelector('.calendar-namespace-filter');
9246    if (filterBadge) {
9247        filterBadge.style.display = 'none'; // Hide instantly
9248        filterBadge.remove(); // Remove from DOM
9249    }
9250
9251    // THEN reload (AJAX or page reload)
9252    navCalendar(...) or window.location.href = ...
9253};
9254```
9255
9256### Before vs After
9257
9258**BEFORE (v4.6.5)**:
9259```
9260Time 0ms: Click ✕
9261┌─────────────────────────┐
9262│ Filtering: work ✕       │ ← Still visible
9263├─────────────────────────┤
9264
9265Time 500ms: Reload completes
9266┌─────────────────────────┐
9267│ (no badge)              │ ← Finally gone
9268├─────────────────────────┤
9269
9270Delay: 500-2000ms ✗
9271```
9272
9273**AFTER (v4.6.6)**:
9274```
9275Time 0ms: Click ✕
9276┌─────────────────────────┐
9277│ (no badge)              │ ← Gone immediately!
9278├─────────────────────────┤
9279
9280Time 500ms: Reload completes
9281┌─────────────────────────┐
9282│ (no badge)              │ ← Still gone
9283├─────────────────────────┤
9284
9285Delay: 0ms ✓
9286Instant feedback! ✓
9287```
9288
9289### Implementation
9290
9291**Two-step removal**:
9292
9293**Step 1**: Hide immediately
9294```javascript
9295filterBadge.style.display = 'none';
9296// User sees badge disappear instantly
9297```
9298
9299**Step 2**: Remove from DOM
9300```javascript
9301filterBadge.remove();
9302// Clean up HTML
9303```
9304
9305**Step 3**: Reload
9306```javascript
9307// Sidebar: Page reload
9308window.location.href = url.toString();
9309
9310// Calendar: AJAX reload
9311navCalendar(calId, year, month, originalNamespace);
9312```
9313
9314**Result**: Badge gone BEFORE reload starts ✓
9315
9316### Why This Matters
9317
9318**User Experience**:
9319- Old: Click ✕ → Wait → Badge disappears
9320- New: Click ✕ → Badge disappears instantly
9321
9322**Perceived Performance**:
9323- Instant visual feedback
9324- Feels responsive
9325- Professional UX
9326
9327**Technical**:
9328- DOM manipulation is synchronous (instant)
9329- Network requests are asynchronous (slow)
9330- Do fast things first!
9331
9332**Badge now disappears the moment you click ✕!** ⚡
9333
9334## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING
9335
9336### �� Fixed: Filter Badge Not Clearing in Sidebar
9337- **Fixed:** Filter badge now properly clears when clicking ✕ button
9338- **Fixed:** Sidebar widget now reloads page without namespace filter
9339- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately
9340
9341### The Problem
9342
9343**In {{calendar}} sidebar widget**:
9344```
93451. Click namespace badge to filter
93462. Badge appears: "Filtering: work ✕"
93473. Click ✕ to clear filter
93484. Badge stays visible! ✗
93495. Events still filtered! ✗
9350```
9351
9352**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar.
9353
9354### The Fix
9355
9356**Detect widget type and handle appropriately**:
9357
9358```javascript
9359window.clearNamespaceFilter = function(calId) {
9360    const container = document.getElementById(calId);
9361
9362    // Check if this is a sidebar widget
9363    const sidebarContainer = document.getElementById('sidebar-widget-' + calId);
9364
9365    if (sidebarContainer) {
9366        // SIDEBAR: Reload page without namespace parameter
9367        const url = new URL(window.location.href);
9368        url.searchParams.delete('namespace');
9369        window.location.href = url.toString(); // Page reload
9370        return;
9371    }
9372
9373    // REGULAR CALENDAR: AJAX reload
9374    navCalendar(calId, year, month, originalNamespace);
9375};
9376```
9377
9378### How It Works
9379
9380**Sidebar Widget** ({{calendar}} syntax):
9381```
9382Rendered server-side with PHP
9383Cannot be AJAX-reloaded
9384Solution: Reload entire page without ?namespace=work parameter
9385```
9386
9387**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}):
9388```
9389Has AJAX reload capability
9390Solution: Call navCalendar() to reload via AJAX
9391```
9392
9393### Before vs After
9394
9395**BEFORE (v4.6.4)**:
9396```
9397Sidebar widget filtered by "work":
9398┌─────────────────────────┐
9399│ Filtering: work ✕       │ ← Click ✕
9400├─────────────────────────┤
9401│ Today                   │
9402│ • Work meeting          │
9403└─────────────────────────┘
9404
9405After clicking ✕:
9406┌─────────────────────────┐
9407│ Filtering: work ✕       │ ← Still there! ✗
9408├─────────────────────────┤
9409│ Today                   │
9410│ • Work meeting          │ ← Still filtered! ✗
9411└─────────────────────────┘
9412```
9413
9414**AFTER (v4.6.5)**:
9415```
9416Sidebar widget filtered by "work":
9417┌─────────────────────────┐
9418│ Filtering: work ✕       │ ← Click ✕
9419├─────────────────────────┤
9420│ Today                   │
9421│ • Work meeting          │
9422└─────────────────────────┘
9423
9424After clicking ✕ → Page reloads:
9425┌─────────────────────────┐
9426│ (no filter badge)       │ ← Cleared! ✓
9427├─────────────────────────┤
9428│ Today                   │
9429│ • Work meeting          │
9430│ • Personal task         │ ← All events! ✓
9431│ • Project review        │
9432└─────────────────────────┘
9433```
9434
9435### Technical Details
9436
9437**Why Page Reload for Sidebar?**
9438
9439Sidebar widget is rendered server-side:
9440```php
9441// In syntax.php:
9442return $this->renderSidebarWidget($events, $namespace, $calId);
9443// ↑ PHP generates complete HTML
9444// No AJAX reload endpoint exists for sidebar
9445```
9446
9447**Solution**: Remove `?namespace=work` from URL and reload page
9448```javascript
9449const url = new URL(window.location.href);
9450url.searchParams.delete('namespace'); // Remove filter
9451window.location.href = url.toString(); // Reload
9452```
9453
9454**Why AJAX for Regular Calendar?**
9455
9456Regular calendars have AJAX endpoints:
9457```javascript
9458// action.php handles:
9459action: 'load_month' → Returns new month data
9460navCalendar() → Fetches and rebuilds calendar
9461```
9462
9463### Filter Badge Behavior
9464
9465**Showing Badge** (when filtering):
9466- Server-side: PHP renders badge in HTML
9467- Client-side: JavaScript adds badge to header
9468
9469**Clearing Badge**:
9470- Sidebar: Page reload (removes ?namespace from URL)
9471- Calendar: AJAX reload (badge removed in rebuildCalendar)
9472
9473**Now works correctly for both!** ✓
9474
9475## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR
9476
9477### �� Critical Hotfix: Fixed PHP Parse Error
9478- **Fixed:** Template literal backticks causing PHP syntax error
9479- **Fixed:** Changed JavaScript template literals to concatenation
9480- **Fixed:** Admin page now loads without parse errors
9481
9482### The Problem
9483
9484**v4.6.3 broke admin page**:
9485```
9486Error loading plugin calendar
9487ParseError: syntax error, unexpected identifier "s",
9488expecting "," or ";"
9489```
9490
9491**Cause**: JavaScript template literals inside PHP echo
9492```php
9493echo '<script>
9494    let nsOptions = `<option value="">(default)</option>`;
9495                    ↑ PHP sees backtick and gets confused!
9496</script>';
9497```
9498
9499**Why it broke**: Backticks (`) are special in PHP too!
9500
9501### The Fix
9502
9503**Changed from template literals to concatenation**:
9504
9505**BEFORE (broken)**:
9506```javascript
9507let nsOptions = `<option value="">(default)</option>`;
9508nsOptions += `<option value="${namespace}">${namespace}</option>`;
9509console.log('Edit recurring:', namespace);
9510```
9511
9512**AFTER (fixed)**:
9513```javascript
9514let nsOptions = "<option value=\\"\\">(default)</option>";
9515nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>";
9516console.log("Edit recurring:", namespace);
9517```
9518
9519**Changes**:
9520- ✅ Backticks (`) → Double quotes (")
9521- ✅ Template literals (${var}) → Concatenation (" + var + ")
9522- ✅ Single quotes in console.log → Double quotes
9523- ✅ Properly escaped quotes for PHP echo
9524
9525### Technical Details
9526
9527**The Issue**:
9528```php
9529// Inside PHP echo string:
9530echo '<script>
9531    let x = `template ${literal}`;  // ✗ Backtick breaks PHP!
9532</script>';
9533```
9534
9535**The Solution**:
9536```php
9537// Use regular string concatenation:
9538echo '<script>
9539    let x = "string " + variable;   // ✓ Works in PHP echo!
9540</script>';
9541```
9542
9543**Quote Escaping**:
9544```javascript
9545// Double quotes inside PHP single-quote string:
9546'<option value=\"\">text</option>'
9547               ↑↑ Escaped for JavaScript
9548```
9549
9550### Result
9551
9552**Before**: Admin page crashed with parse error ✗
9553**After**: Admin page loads perfectly ✓
9554
9555**No functionality changed - just syntax fix!**
9556
9557## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN
9558
9559### �� Critical Fix: Namespace Dropdown in Recurring Events Section
9560- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing
9561- **Fixed:** Current namespace now properly selected in dropdown
9562- **Fixed:** Namespace extraction from DOM now uses multiple methods
9563- **Added:** Console logging to debug namespace detection
9564
9565### The Problem
9566
9567**When editing from �� Recurring Events section**:
9568```
9569Click "Edit" on recurring event
9570Namespace dropdown shows:
9571- (default)
9572- (nothing else!) ✗
9573
9574Can't select any namespace! ✗
9575```
9576
9577**Why**: Broken namespace extraction logic
9578```javascript
9579// OLD CODE (broken):
9580const namespaces = Array.from(document.querySelectorAll("[id^=ns_]"))
9581    .map(el => {
9582        // Complex parsing that often failed
9583        const nsSpan = el.querySelector("span:nth-child(3)");
9584        return nsSpan.textContent.replace("�� ", "").trim();
9585    })
9586    .filter(ns => ns !== namespace); // Excluded current! ✗
9587```
9588
9589**Result**: Empty dropdown, can't change namespace! ✗
9590
9591### The Fix
9592
9593**NEW CODE (robust)**:
9594```javascript
9595const namespaces = new Set();
9596
9597// Method 1: Namespace explorer folders
9598document.querySelectorAll("[id^=ns_]").forEach(el => {
9599    const nsSpan = el.querySelector("span:nth-child(3)");
9600    if (nsSpan) {
9601        let nsText = nsSpan.textContent.replace("�� ", "").trim();
9602        if (nsText && nsText !== "(default)") {
9603            namespaces.add(nsText); // ✓
9604        }
9605    }
9606});
9607
9608// Method 2: Datalist (backup method)
9609document.querySelectorAll("#namespaceList option").forEach(opt => {
9610    if (opt.value && opt.value !== "") {
9611        namespaces.add(opt.value); // ✓
9612    }
9613});
9614
9615// Build dropdown with ALL namespaces
9616let options = `<option value="">(default)</option>`;
9617
9618// Show current namespace as selected
9619if (namespace) {
9620    options += `<option value="${namespace}" selected>${namespace} (current)</option>`;
9621}
9622
9623// Show all other namespaces
9624for (const ns of nsArray) {
9625    if (ns !== namespace) {
9626        options += `<option value="${ns}">${ns}</option>`;
9627    }
9628}
9629```
9630
9631**Result**: All namespaces visible! ✓
9632
9633### How It Works Now
9634
9635**Before (Broken)**:
9636```
9637Edit recurring event in "work" namespace
9638
9639Dropdown shows:
9640☐ (default)
9641
9642That's it! Can't select anything! ✗
9643```
9644
9645**After (Fixed)**:
9646```
9647Edit recurring event in "work" namespace
9648
9649Dropdown shows:
9650☐ (default)
9651☑ work (current)  ← Selected!
9652☐ personal
9653☐ projects
9654☐ meetings
9655
9656All namespaces available! ✓
9657```
9658
9659### Key Improvements
9660
9661**1. Dual extraction methods**:
9662- Primary: Parse namespace explorer DOM
9663- Backup: Read from datalist
9664- Result: Always finds namespaces ✓
9665
9666**2. Current namespace included**:
9667```javascript
9668// OLD: Excluded current namespace
9669.filter(ns => ns !== namespace) ✗
9670
9671// NEW: Include and mark as selected
9672options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓
9673```
9674
9675**3. Better error handling**:
9676```javascript
9677if (nsSpan) {  // Check exists
9678    let nsText = nsSpan.textContent.replace("�� ", "").trim();
9679    if (nsText && nsText !== "(default)") {  // Validate
9680        namespaces.add(nsText);
9681    }
9682}
9683```
9684
9685**4. Console debugging**:
9686```javascript
9687console.log('Edit recurring - Current namespace:', namespace);
9688console.log('Available namespaces:', nsArray);
9689```
9690
9691Open browser console (F12) to see what namespaces are detected!
9692
9693### Example Usage
9694
9695**Scenario**: Edit recurring "Team Meeting" in "work" namespace
9696
9697**Steps**:
96981. Go to �� Recurring Events section
96992. Click "Edit" on "Team Meeting"
97003. See namespace dropdown:
9701   - ☐ (default)
9702   - ☑ work (current)
9703   - ☐ personal
9704   - ☐ projects
97054. Select "personal" to move event
97065. Click "Save Changes"
97076. Event moved to "personal" namespace ✓
9708
9709**Finally works as expected!** ��
9710
9711## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION
9712
9713### �� Recurring Events Namespace Fix
9714- **Fixed:** Namespace now properly preserved when editing recurring events
9715- **Fixed:** Namespace selector now allows selecting any namespace (not just default)
9716- **Added:** Better logging for namespace preservation debugging
9717- **Added:** Console logging to track namespace values during edit
9718
9719### The Namespace Problem
9720
9721**Issue 1**: Can't select non-default namespace
9722```
9723When editing recurring event:
9724- Dropdown shows all namespaces ✓
9725- User selects "work"
9726- Form submits with "" (empty/default) ✗
9727```
9728
9729**Issue 2**: Namespace not preserved
9730```
9731Recurring event in "personal" namespace
9732Edit the title only
9733After save: namespace changed to "" (default) ✗
9734```
9735
9736### The Fixes
9737
9738**Fix 1**: Better namespace preservation logic
9739```php
9740// When editing recurring event:
9741$existingNamespace = $existingEventData['namespace'];
9742
9743// Preserve if user didn't explicitly change it:
9744if (empty($namespace) ||
9745    strpos($namespace, '*') !== false ||
9746    strpos($namespace, ';') !== false) {
9747    // User didn't select or selected wildcard
9748    $namespace = $existingNamespace; // Keep existing!
9749}
9750```
9751
9752**Fix 2**: Proper form population
9753```javascript
9754// When editing, set BOTH inputs:
9755namespaceHidden.value = event.namespace || '';  // Hidden (submitted)
9756namespaceSearch.value = event.namespace || '(default)';  // Visible
9757
9758// Plus logging:
9759console.log('Set namespace for editing:', event.namespace);
9760```
9761
9762**Fix 3**: Added detailed logging
9763```php
9764error_log("Preserving namespace '$namespace' (received='$receivedNamespace')");
9765error_log("Using new namespace '$namespace'");
9766error_log("No existing namespace to preserve");
9767```
9768
9769### How It Works Now
9770
9771**Scenario 1**: Edit without changing namespace
9772```
9773Event in "work" namespace
9774Edit title to "Updated Meeting"
9775Namespace field shows: "work"
9776Hidden input value: "work"
9777Result: Saved in "work" ✓
9778```
9779
9780**Scenario 2**: Change namespace during edit
9781```
9782Event in "personal" namespace
9783Edit and select "work" namespace
9784Hidden input value: "work"
9785Result: Saved in "work" ✓
9786```
9787
9788**Scenario 3**: Edit with empty/wildcard namespace
9789```
9790Event in "projects" namespace
9791Namespace field empty or shows "personal;work"
9792System preserves: "projects"
9793Result: Saved in "projects" ✓
9794```
9795
9796### Debugging
9797
9798Now with console logging, you can see:
9799```javascript
9800Set namespace for editing: work
9801Hidden value: work
9802```
9803
9804And in PHP logs:
9805```
9806Calendar saveEvent recurring: Loaded existing data - namespace='work'
9807Calendar saveEvent recurring: Preserving namespace 'work' (received='')
9808```
9809
9810**Namespace preservation now works correctly!** ��
9811
9812## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA
9813
9814### �� Recurring Events Edit Fix
9815- **Fixed:** Editing recurring events now preserves unchanged fields
9816- **Fixed:** Empty fields no longer erase existing data
9817- **Added:** Smart merge of existing event data with new changes
9818
9819### The Problem
9820
9821**Before**: Editing erased unchanged fields!
9822```
9823Original recurring event:
9824- Title: "Team Meeting"
9825- Time: "10:00 AM"
9826- Description: "Weekly standup with engineering team"
9827- Color: Red
9828
9829User edits ONLY the title to "Staff Meeting"
9830Form sends:
9831- Title: "Staff Meeting" ✓
9832- Time: "" ✗ (empty because user didn't change it)
9833- Description: "" ✗ (empty)
9834- Color: "#3498db" ✗ (default blue)
9835
9836Result after save:
9837- Title: "Staff Meeting" ✓
9838- Time: BLANK ✗
9839- Description: BLANK ✗
9840- Color: Blue ✗
9841```
9842
9843**All the other data was lost!** ✗
9844
9845### The Fix
9846
9847**After**: Preserves unchanged data!
9848```php
9849if ($eventId && $isRecurring) {
9850    // Load existing event data
9851    $existingEventData = getExistingEventData($eventId);
9852
9853    // Merge: use new value OR keep existing
9854    $title = $title ?: $existingEventData['title'];
9855    $time = $time ?: $existingEventData['time'];
9856    $description = $description ?: $existingEventData['description'];
9857    $color = ($color === '#3498db') ?
9858        $existingEventData['color'] : $color;
9859}
9860```
9861
9862**Now**:
9863```
9864User edits ONLY the title to "Staff Meeting"
9865
9866System:
98671. Loads existing event data
98682. Merges: new title + existing time/description/color
98693. Saves merged data
9870
9871Result:
9872- Title: "Staff Meeting" ✓ (changed)
9873- Time: "10:00 AM" ✓ (preserved!)
9874- Description: "Weekly standup..." ✓ (preserved!)
9875- Color: Red ✓ (preserved!)
9876```
9877
9878**Only changed fields are updated!** ✓
9879
9880### How It Works
9881
9882**Step 1**: Load existing data
9883```php
9884$existingEventData = $this->getExistingEventData(
9885    $eventId,
9886    $date,
9887    $namespace
9888);
9889```
9890
9891**Step 2**: Merge with new data
9892```php
9893// If new value is empty, use existing value
9894$title = $newTitle ?: $existingEventData['title'];
9895$time = $newTime ?: $existingEventData['time'];
9896$description = $newDesc ?: $existingEventData['description'];
9897
9898// Special handling for color (default is #3498db)
9899if ($newColor === '#3498db' && $existingEventData['color']) {
9900    $color = $existingEventData['color'];
9901}
9902```
9903
9904**Step 3**: Save merged data
9905```php
9906createRecurringEvents(..., $title, $time, $description, $color, ...);
9907```
9908
9909### Fields Preserved
9910
9911When editing recurring events, these fields are now preserved if not changed:
9912- ✅ Title (if left blank)
9913- ✅ Time (if not specified)
9914- ✅ End Time (if not specified)
9915- ✅ Description (if left empty)
9916- ✅ Color (if still default blue)
9917
9918**Edit only what you want to change - everything else stays!** ��
9919
9920## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX
9921
9922### ✨ New Feature: Rename Namespaces
9923- **Added:** ✏️ Rename button in Namespace Explorer
9924- **Added:** Rename all events in a namespace at once
9925- **Added:** Automatic cleanup of old directory structure
9926
9927### �� Critical Fix: Recurring Events Actually Edit Now!
9928- **Fixed:** Editing recurring events now deletes ALL instances
9929- **Fixed:** Previously only deleted one instance, left orphans
9930- **Fixed:** Recurring events properly regenerated on edit
9931
9932### Namespace Rename Feature
9933
9934**Before**: Could only delete namespaces, not rename
9935
9936**After**: Click ✏️ to rename!
9937
9938```
9939�� work (15 events)  [3] [✏️] [��️]
9940                          ↑ NEW!
9941```
9942
9943**How It Works**:
99441. Click ✏️ rename button
99452. Enter new namespace name
99463. All events moved to new namespace
99474. Event `namespace` field updated in JSON
99485. Old directory cleaned up
9949
9950**Example**:
9951```
9952Rename: "work" → "business"
9953
9954Before:
9955/data/meta/work/calendar/*.json
9956Events: {namespace: "work"}
9957
9958After:
9959/data/meta/business/calendar/*.json
9960Events: {namespace: "business"}
9961```
9962
9963**Implementation**:
9964```php
9965private function renameNamespace() {
9966    // 1. Validate new name
9967    // 2. Rename directory
9968    // 3. Update all event namespace fields in JSON
9969    // 4. Clean up old empty directories
9970}
9971```
9972
9973### Recurring Events Fix - The Problem
9974
9975**Before**: Editing didn't work!
9976```
9977Original recurring event generates:
9978- Event-0 (Mon, Feb 10)
9979- Event-1 (Mon, Feb 17)
9980- Event-2 (Mon, Feb 24)
9981
9982User edits Event-0, changes title to "Updated"
9983
9984What SHOULD happen:
9985- Delete Event-0, Event-1, Event-2
9986- Generate new instances with "Updated" title
9987
9988What ACTUALLY happened:
9989- Delete Event-0 only ✗
9990- Generate new instances
9991- Result: Event-1 and Event-2 still show old title! ✗
9992```
9993
9994**After**: Properly deletes ALL instances!
9995
9996**The Fix**:
9997```php
9998private function deleteEvent() {
9999    $event = getEvent($eventId);
10000
10001    // Check if recurring
10002    if ($event['recurring'] && $event['recurringId']) {
10003        // Delete ALL instances with same recurringId
10004        deleteAllRecurringInstances($recurringId);
10005    }
10006
10007    // Then normal delete for spanning events
10008}
10009
10010private function deleteAllRecurringInstances($recurringId) {
10011    // Scan ALL calendar JSON files
10012    foreach (glob('*.json') as $file) {
10013        // Filter out events with matching recurringId
10014        $events = array_filter($events, function($event) {
10015            return $event['recurringId'] !== $recurringId;
10016        });
10017    }
10018}
10019```
10020
10021**Result**:
10022- Edit "Weekly Team Meeting" → ALL instances updated ✓
10023- Delete recurring event → ALL instances deleted ✓
10024- No more orphaned events! ✓
10025
10026### Recurring Event Fields
10027
10028Every recurring event has:
10029```json
10030{
10031    "id": "abc123-0",
10032    "recurring": true,
10033    "recurringId": "abc123",  ← Links all instances
10034    ...
10035}
10036```
10037
10038When editing/deleting, we find ALL events with same `recurringId` and remove them!
10039
10040**Finally, recurring events work properly!** ��
10041
10042## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS
10043
10044### �� Important Events Sorting - ACTUALLY FIXED!
10045- **Fixed:** Important Events now REALLY sorted by date first, then time
10046- **Fixed:** renderSidebarSection was re-sorting and breaking the order
10047- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only
10048
10049### �� Pink Theme Tooltip Bling!
10050- **Added:** Pink gradient tooltips (hot pink → light pink)
10051- **Added:** Glowing pink border on tooltips
10052- **Added:** Sparkling heart (��) appears next to tooltip!
10053- **Added:** Heart has pink glow drop-shadow
10054
10055### The Sorting Bug - Root Cause
10056
10057**Problem**: Two sorts were happening!
10058
10059**Sort #1** (Line 2047): Before rendering
10060```php
10061usort($importantEvents, ...) // Sort by date ✓
10062```
10063
10064**Sort #2** (Line 2751): Inside renderSidebarSection
10065```php
10066usort($events, ...) // Sort by TIME ONLY ✗
10067// This was breaking the date order!
10068```
10069
10070**The Fix**: Different sorting for different sections
10071```php
10072if ($title === 'Important Events') {
10073    // Sort by DATE first, then time
10074    usort($events, function($a, $b) {
10075        if ($dateA !== $dateB) {
10076            return strcmp($dateA, $dateB); // DATE first!
10077        }
10078        // Same date - sort by time
10079        return timeCompare($a, $b);
10080    });
10081} else {
10082    // Today/Tomorrow - sort by TIME only (same date)
10083    usort($events, function($a, $b) {
10084        return timeCompare($a, $b);
10085    });
10086}
10087```
10088
10089**Result**: Important Events now CORRECTLY sorted!
10090```
10091✓ Sun, Feb 8 - 3:30 PM Super Bowl
10092✓ Tue, Feb 10 - 11:30 AM Doctor visit
10093✓ Sat, Feb 14 - Valentine's Day (all-day)
10094✓ Sat, Feb 14 - 8:00 PM Crab Shack
10095```
10096
10097### Pink Tooltip Magic! ��
10098
10099**Normal Tooltips**: Black background, plain
10100```css
10101background: rgba(0, 0, 0, 0.95);
10102color: #fff;
10103```
10104
10105**Pink Theme Tooltips**: FABULOUS!
10106```css
10107/* Pink gradient background */
10108background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%);
10109
10110/* Glowing pink border */
10111border: 2px solid #ff85c1;
10112
10113/* Double glow shadow */
10114box-shadow:
10115    0 0 15px rgba(255, 20, 147, 0.6),
10116    0 4px 12px rgba(0, 0, 0, 0.4);
10117
10118/* Bold text */
10119font-weight: 600;
10120```
10121
10122**Plus**: Sparkling heart next to tooltip!
10123```css
10124.sidebar-pink [data-tooltip]:after {
10125    content: '��';
10126    font-size: 12px;
10127    filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8));
10128}
10129```
10130
10131**The Effect**:
10132```
10133Hover over ⚠ conflict warning:
10134┌────────────────────┐ ��
10135│ Conflicts with:    │ ← Pink gradient
10136│ • Event 1 (3PM)   │ ← Pink border
10137│ • Event 2 (4PM)   │ ← Pink glow
10138└────────────────────┘
10139```
10140
10141**Maximum glamour on tooltips too!** ✨
10142
10143## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING
10144
10145### �� Important Events Order Fixed
10146- **Fixed:** Important Events now sorted by date (earliest first)
10147- **Fixed:** Events on same date sorted by time (chronological)
10148- **Fixed:** All-day events appear last within each date
10149
10150### Sorting Issue
10151
10152**Before**: Random order
10153```
10154Important Events:
10155�� Valentine's Day         (Sat, Feb 14)
1015611:30 AM Doctor visit      (Tue, Feb 10)  ← Feb 10 after Feb 14!
101573:30 PM Super Bowl         (Sun, Feb 8)   ← Feb 8 after Feb 14!
101588:00 PM Crab Shack         (Sat, Feb 14)
10159```
10160
10161**After**: Chronological order
10162```
10163Important Events:
101643:30 PM Super Bowl         (Sun, Feb 8)   ← Earliest!
1016511:30 AM Doctor visit      (Tue, Feb 10)
10166�� Valentine's Day         (Sat, Feb 14)  ← All-day event
101678:00 PM Crab Shack         (Sat, Feb 14)  ← Same day, sorted by time
10168```
10169
10170### Sorting Logic
10171
10172**Primary Sort**: By date
10173```php
10174strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14"
10175```
10176
10177**Secondary Sort**: By time (within same date)
10178```php
10179// All-day events (no time) go last
10180if (empty($timeA) && !empty($timeB)) return 1;
10181if (!empty($timeA) && empty($timeB)) return -1;
10182
10183// Both have times - sort chronologically
10184$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes
10185$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes
10186return $aMinutes - $bMinutes;      // 690 < 1200
10187```
10188
10189**Result**:
101901. Sun, Feb 8 - 3:30 PM (earliest date & time)
101912. Tue, Feb 10 - 11:30 AM (next date)
101923. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14)
101934. Sat, Feb 14 - 8:00 PM (timed event on Feb 14)
10194
10195**Perfect chronological order for next 2 weeks!** ✓
10196
10197## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨��
10198
10199### �� EXTREME PINK BLING EFFECTS!
10200- **Added:** Click sparkles - 8 sparkles burst out on every click!
10201- **Added:** Auto-sparkles - random sparkles appear every 3 seconds
10202- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover
10203- **Added:** Pulsing border glow - constantly breathing pink glow
10204- **Added:** Drop shadows on sparkles for extra depth
10205- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows!
10206
10207### Sparkle Effects Breakdown
10208
10209**Click Sparkles** ��:
10210```javascript
10211// 8 sparkles burst out when you click anywhere!
10212for (let i = 0; i < 8; i++) {
10213    // Staggered appearance (40ms apart)
10214    createSparkle(x, y);
10215}
10216
10217// Sparkle emojis:
10218["✨", "��", "��", "⭐", "��", "��", "��", "��", "��", "��"]
10219```
10220
10221**Each sparkle**:
10222- Starts at click point
10223- Flies outward 30-60px in random direction
10224- Spins 360 degrees
10225- Fades in and out
10226- Has pink glow drop-shadow
10227- Disappears after 1 second
10228
10229**Auto Sparkles** ⏰:
10230```javascript
10231// Random sparkle every 3 seconds
10232setInterval(() => {
10233    const x = Math.random() * width;
10234    const y = Math.random() * height;
10235    createSparkle(x, y);
10236}, 3000);
10237```
10238
10239**Result**: Constant magical sparkles even without clicking! ✨
10240
10241**Hover Mega-Glow** ��:
10242```css
10243.sidebar-pink:hover {
10244    box-shadow:
10245        0 0 30px rgba(255, 20, 147, 0.9),
10246        0 0 50px rgba(255, 20, 147, 0.5) !important;
10247}
10248```
10249
10250**Result**: Sidebar EXPLODES with pink glow when you hover over it! ��
10251
10252**Pulsing Border Glow** ��:
10253```css
10254@keyframes pulse-glow {
10255    0%, 100% {
10256        box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
10257    }
10258    50% {
10259        box-shadow:
10260            0 0 25px rgba(255, 20, 147, 0.8),
10261            0 0 40px rgba(255, 20, 147, 0.4);
10262    }
10263}
10264
10265animation: pulse-glow 3s ease-in-out infinite;
10266```
10267
10268**Result**: Border continuously breathes with pink glow! ��
10269
10270**Sparkle Animation** ��:
10271```css
10272@keyframes sparkle {
10273    0% {
10274        opacity: 0;
10275        transform: translate(0, 0) scale(0) rotate(0deg);
10276    }
10277    50% {
10278        opacity: 1;
10279        transform: translate(halfway) scale(1) rotate(180deg);
10280    }
10281    100% {
10282        opacity: 0;
10283        transform: translate(far) scale(0) rotate(360deg);
10284    }
10285}
10286```
10287
10288**Result**: Sparkles spin, grow, shrink, and fly! ��
10289
10290### Complete Pink Bling Experience:
10291
10292**Always Active**:
10293- ✨ Pulsing pink border glow (3 second cycle)
10294- ✨ Auto-sparkles every 3 seconds
10295
10296**On Hover**:
10297- �� MEGA GLOW EFFECT (2x brightness!)
10298
10299**On Click**:
10300- �� 8 sparkles EXPLODE outward!
10301- �� Random emojis (hearts, stars, diamonds, crowns!)
10302- �� Each sparkle spins 360° while flying
10303- �� Pink glow drop-shadow on each sparkle
10304
10305**The Result**:
10306- Click anywhere = SPARKLE EXPLOSION! ��
10307- Hover anywhere = MEGA GLOW! ✨
10308- Always breathing and sparkling! ��
10309- Maximum glamour! ��
10310- Wife approval: 1000%! ��
10311
10312**THIS IS THE MOST FABULOUS CALENDAR EVER!** ��✨��
10313
10314## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH
10315
10316### �� Pink Theme Final Touches
10317- **Fixed:** Add Event text now black (was bright pink, hard to read)
10318- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!)
10319- **Removed:** Text shadow on Add Event button (cleaner with black text)
10320
10321### Add Event Text - Black & Readable!
10322
10323**Before**: Bright pink text (#ff1493) on dark pink background
10324```php
10325$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read!
10326text-shadow: 0 0 3px #ff1493; // Glowy pink
10327```
10328
10329**After**: Black text, no shadow, perfect contrast!
10330```php
10331$addBtnTextColor = $theme === 'pink' ? '#000000' : ...;
10332$addBtnTextShadow = $theme === 'pink' ? 'none' : ...;
10333```
10334
10335**Result**:
10336- Black text pops against dark pink background ✓
10337- Easy to read ✓
10338- Professional look with bling ✓
10339
10340### Clock Border - All Pink!
10341
10342**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green
10343
10344**Before**:
10345```php
10346// Inline style (only bottom):
10347style="border-bottom:2px solid #ff1493;"
10348
10349// CSS (all sides):
10350.eventlist-today-header {
10351    border: 2px solid #00cc07; // Green on top/sides!
10352}
10353```
10354
10355**After**: Inline style overrides ALL sides
10356```php
10357style="border:2px solid #ff1493;" // All 4 sides pink!
10358```
10359
10360**Result**: Clock box now 100% pink border on all four sides! ✓
10361
10362### What Changed:
10363
10364**Add Event Button**:
10365- Background: #b8156f (dark pink) ✓
10366- Text: **#000000 (black)** ← NEW!
10367- Text shadow: **none** ← NEW!
10368- Glow: 0 0 10px pink ✓
10369
10370**Clock Border**:
10371- Top: **#ff1493 (pink)** ← FIXED!
10372- Right: **#ff1493 (pink)** ← FIXED!
10373- Bottom: #ff1493 (pink) ✓
10374- Left: **#ff1493 (pink)** ← FIXED!
10375
10376**Perfect pink theme - wife approved!** ��✨
10377
10378## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION
10379
10380### �� Pink Theme Complete Makeover
10381- **Fixed:** Clock border now completely pink (was green on sides/top)
10382- **Changed:** Today/Tomorrow/Important sections now different shades of pink
10383- **Changed:** Add Event button now dark pink (was clashing blue)
10384- **Changed:** System status bars now pink gradient (3 shades!)
10385
10386### All-Pink Everything! ��
10387
10388**Clock Border**:
10389```css
10390/* Before: Green border */
10391border: 2px solid #00cc07;
10392
10393/* After: Hot pink border */
10394.sidebar-pink .eventlist-today-header {
10395    border-color: #ff1493;
10396    box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
10397}
10398```
10399
10400**Section Colors** (Different Pink Shades):
10401```php
10402// Before: Orange, green, purple
10403'Today' => '#ff9800',
10404'Tomorrow' => '#4caf50',
10405'Important' => '#9b59b6'
10406
10407// After: Hot pink, pink, light pink
10408'Today' => '#ff1493',      // Hot pink (DeepPink)
10409'Tomorrow' => '#ff69b4',   // Pink (HotPink)
10410'Important' => '#ff85c1'   // Light pink
10411```
10412
10413**Add Event Button**:
10414```php
10415// Before: Clashing blue
10416background: #3498db;
10417
10418// After: Dark pink with glow
10419background: #b8156f;       // Dark pink
10420hover: #8b0f54;            // Darker pink
10421shadow: 0 0 10px rgba(255, 20, 147, 0.5);
10422```
10423
10424**System Status Bars** (Pink Gradient):
10425```css
10426/* 5-min load average */
10427.sidebar-pink .eventlist-cpu-fill {
10428    background: #ff1493;   /* Hot pink */
10429    box-shadow: 0 0 5px rgba(255, 20, 147, 0.7);
10430}
10431
10432/* Realtime CPU */
10433.sidebar-pink .eventlist-cpu-fill-purple {
10434    background: #ff69b4;   /* Pink */
10435    box-shadow: 0 0 5px rgba(255, 105, 180, 0.7);
10436}
10437
10438/* Memory */
10439.sidebar-pink .eventlist-cpu-fill-orange {
10440    background: #ff85c1;   /* Light pink */
10441    box-shadow: 0 0 5px rgba(255, 133, 193, 0.7);
10442}
10443```
10444
10445### Pink Theme Visual Hierarchy:
10446
10447**Darkest → Lightest Pink Shades**:
104481. Add Event button: #b8156f (dark pink)
104492. Today section: #ff1493 (hot pink / deep pink)
104503. System bar 1: #ff1493 (hot pink)
104514. Tomorrow section: #ff69b4 (pink)
104525. System bar 2: #ff69b4 (pink)
104536. Important section: #ff85c1 (light pink)
104547. System bar 3: #ff85c1 (light pink)
10455
10456**Result**: Beautiful pink gradient throughout entire sidebar! ��✨
10457
10458### What's Pink Now:
10459
10460✅ Sidebar background & border
10461✅ **Clock border** ← FIXED!
10462✅ Header gradient
10463✅ Week grid
10464✅ **Add Event button** ← FIXED!
10465✅ **Today section** ← Different shade!
10466✅ **Tomorrow section** ← Different shade!
10467✅ **Important section** ← Different shade!
10468✅ Event text & bars
10469✅ **System status bars** ← All 3 different pink shades!
10470✅ All shadows & glows
10471
10472**EVERYTHING is pink and fabulous!** ��✨
10473
10474## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS
10475
10476### ✨ New Theme: Pink Bling! ��
10477- **Added:** Glamorous hot pink theme with maximum sparkle
10478- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic
10479- **Perfect for:** Fabulous calendars that demand attention ✨
10480
10481### �� Professional Theme Shadow Fix
10482- **Fixed:** Section headers now have subtle shadow (not glow)
10483- **Fixed:** Clicked day panel header has proper shadow
10484
10485### Pink Bling Theme Colors
10486
10487**Background & Borders**:
10488```php
10489'bg' => '#1a0d14',           // Dark rich pink-black
10490'border' => '#ff1493',        // Hot pink (DeepPink)
10491'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow
10492```
10493
10494**Text Colors**:
10495```php
10496'text_primary' => '#ff69b4',  // Hot pink
10497'text_bright' => '#ff1493',   // Deep pink
10498'text_dim' => '#ff85c1',      // Light pink
10499```
10500
10501**Week Grid**:
10502```php
10503'grid_bg' => '#2d1a24',       // Dark purple-pink
10504'cell_bg' => '#1a0d14',       // Dark
10505'cell_today_bg' => '#3d2030', // Highlighted purple-pink
10506```
10507
10508**Special Effects**:
10509```php
10510'bar_glow' => '0 0 5px',      // Extra sparkly glow!
10511'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling!
10512```
10513
10514### Professional Theme Shadow Fix
10515
10516**Before**: Section headers had colored glow
10517```php
10518box-shadow: 0 0 8px #3498db; // Blue glow - wrong!
10519```
10520
10521**After**: Section headers have subtle shadow
10522```php
10523$headerShadow = ($theme === 'professional') ?
10524    '0 2px 4px rgba(0, 0, 0, 0.15)' :  // Shadow for professional
10525    '0 0 8px ' . $accentColor;          // Glow for others
10526```
10527
10528**Result**:
10529- **Matrix/Purple/Pink**: Colored glow on headers ✓
10530- **Professional**: Clean grey shadow (no glow) ✓
10531
10532### All Four Themes:
10533
10534**�� Matrix Edition**:
10535- Dark green (#00cc07)
10536- Neon glow effects
10537- Hacker aesthetic
10538
10539**�� Purple Dream**:
10540- Elegant purple (#9b59b6)
10541- Violet glow effects
10542- Royal aesthetic
10543
10544**�� Professional Blue**:
10545- Clean grey/blue (#4a90e2)
10546- Subtle shadows (NO glow)
10547- Corporate aesthetic
10548
10549**�� Pink Bling** (NEW!):
10550- Hot pink (#ff1493)
10551- MAXIMUM sparkle & glow
10552- Glamorous aesthetic ✨��
10553
10554### Technical Implementation
10555
10556**Theme Added To**:
10557- `getSidebarThemeStyles()` - color definitions
10558- `getSidebarTheme()` - validation
10559- `saveSidebarTheme()` - admin save
10560- Admin panel - UI with preview
10561- All shadow/glow calculations
10562- JavaScript theme colors
10563- Clicked day panel colors
10564
10565**Perfect for users who want FABULOUS pink calendars!** ��✨
10566
10567## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY
10568
10569### �� Text Glow Refinement
10570- **Changed:** Reduced text glow from 3px to 2px (less intense)
10571- **Fixed:** Clicked day panel now has same text glow as sections
10572
10573### Text Glow Reduction
10574
10575**Before**: Text glow was too strong (3px)
10576```php
10577// Sections:
10578text-shadow: 0 0 3px #00cc07; // Too bright!
10579
10580// Clicked day panel:
10581text-shadow: 0 0 3px #00cc07; // Too bright!
10582```
10583
10584**After**: Subtler text glow (2px)
10585```php
10586// Sections:
10587text-shadow: 0 0 2px #00cc07; // Just right ✓
10588
10589// Clicked day panel:
10590text-shadow: 0 0 2px #00cc07; // Just right ✓
10591```
10592
10593**Visual Impact**:
10594- **Matrix**: Softer green glow, easier to read
10595- **Purple**: Softer purple glow, more elegant
10596- **Professional**: Still no glow (clean)
10597
10598### Consistency Fix
10599
10600**Before**: Sections had glow, clicked day panel had NO glow
10601
10602**After**: Both sections AND clicked day panel have matching subtle glow
10603
10604**Where Glow Appears**:
10605- ✅ Today section event text
10606- ✅ Tomorrow section event text
10607- ✅ Important section event text
10608- ✅ **Clicked day panel event text** ← NOW CONSISTENT!
10609
10610**Result**:
10611- Glow is less intense and easier on eyes ✓
10612- All event text has consistent styling ✓
10613- Matrix/Purple themes more refined ✓
10614
10615### Technical Details
10616
10617**PHP (Sections)**:
10618```php
10619$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';';
10620```
10621
10622**JavaScript (Clicked Day Panel)**:
10623```javascript
10624themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple
10625eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'";
10626```
10627
10628**Perfect consistency and subtle elegance!** ✨
10629
10630## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY
10631
10632### ✨ Important Events Enhancement
10633- **Changed:** Important events now show from next 2 weeks (not just current week)
10634- **Fixed:** Important events on Sunday after current week now visible
10635- **Changed:** Events loaded 2 weeks into future for Important section
10636
10637### �� Background Cleanup
10638- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections
10639- **Removed:** Grey backgrounds from individual events
10640- **Result:** Clean transparent backgrounds, original dark Matrix look restored
10641
10642### Important Events - Future Coverage
10643
10644**Before**: Only showed Important events from current week
10645```php
10646if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
10647    $importantEvents[] = $event;
10648}
10649```
10650
10651**After**: Shows Important events from today through next 2 weeks
10652```php
10653// Load events 2 weeks out
10654$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days'));
10655
10656// Show all important events from today forward
10657if ($isImportant && $dateKey >= $todayStr) {
10658    $importantEvents[] = $event;
10659}
10660```
10661
10662**Example**:
10663- Today: Saturday Feb 7
10664- Current week: Sun Feb 1 → Sat Feb 7
10665- Important events shown: Feb 7 → Feb 21 (today + 14 days)
10666
10667**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓
10668
10669### Background Removal
10670
10671**Before**: Light grey/white backgrounds added
10672```php
10673// Section background:
10674$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay
10675
10676// Event background:
10677$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay
10678```
10679
10680**After**: No backgrounds (transparent)
10681```php
10682// Section: No background property
10683<div style="padding:4px 0;">
10684
10685// Event: No background property
10686<div style="padding:4px 6px; ...">
10687```
10688
10689**Result**:
10690- Clean, dark Matrix aesthetic restored ✓
10691- Purple theme darker and more elegant ✓
10692- Professional theme still has its light grey sidebar bg ✓
10693- Events stand out with just color bars and borders ✓
10694
10695### What Changed:
10696
10697**Sections (Today/Tomorrow/Important)**:
10698- ❌ No more grey overlay
10699- ✓ Transparent background
10700- ✓ Colored borders & glows remain
10701
10702**Individual Events**:
10703- ❌ No more grey overlay
10704- ✓ Transparent background
10705- ✓ Colored bars & borders remain
10706
10707**Perfect! Back to the original clean dark look with future Important events!** ��
10708
10709## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR
10710
10711### �� Final Theme Polish
10712- **Fixed:** Today/Tomorrow/Important section shadows now match theme
10713- **Fixed:** Event description text color now uses theme dim color
10714
10715### Section Shadow Fix
10716
10717**Problem**: Sections always had green glow regardless of theme
10718
10719**Before**:
10720```php
10721// Hardcoded green:
10722box-shadow: 0 0 5px rgba(0, 204, 7, 0.2);
10723```
10724
10725**After**:
10726```php
10727// Theme-aware:
10728$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' :
10729                ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' :
10730                '0 2px 4px rgba(0, 0, 0, 0.1)');
10731```
10732
10733**Result**:
10734- **Matrix**: Green glow around sections ✓
10735- **Purple**: Purple glow around sections ✓
10736- **Professional**: Subtle grey shadow (no glow) ✓
10737
10738### Description Color Fix
10739
10740**Problem**: Description text always green in clicked day panel
10741
10742**Before**:
10743```javascript
10744color: #00aa00; // Always green
10745```
10746
10747**After**:
10748```javascript
10749color: themeColors.text_dim; // Theme dim color
10750```
10751
10752**Result**:
10753- **Matrix**: Dim green (#00aa00) ✓
10754- **Purple**: Dim purple (#8e7ab8) ✓
10755- **Professional**: Grey (#7f8c8d) ✓
10756
10757### Now 100% Theme Consistent
10758
10759Every single visual element respects theme:
10760- ✅ Sidebar background & border
10761- ✅ Header colors & shadows
10762- ✅ Week grid & cells
10763- ✅ Add Event button
10764- ✅ Section borders & **shadows** ← Fixed!
10765- ✅ Event titles & times
10766- ✅ Event **descriptions** ← Fixed!
10767- ✅ Clicked day panel
10768- ✅ Event bars & glows
10769
10770**Absolute perfection across all three themes!** ��✨
10771
10772## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND
10773
10774### �� Theme Improvements
10775- **Fixed:** Clicked day panel now uses correct theme colors
10776- **Changed:** Professional Blue background now light grey (not white)
10777- **Added:** Theme colors passed to JavaScript for dynamic rendering
10778
10779### Clicked Day Panel Theming
10780
10781**Before**: Always blue regardless of theme
10782```javascript
10783// Hardcoded blue:
10784color:#00cc07;  // Always green
10785background:#3498db;  // Always blue
10786```
10787
10788**After**: Theme-aware colors
10789```php
10790// PHP passes theme to JavaScript:
10791window.themeColors_XXX = {
10792    text_primary: '#00cc07' or '#b19cd9' or '#2c3e50',
10793    text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2',
10794    text_shadow: '0 0 3px ...' or '',
10795    event_bg: 'rgba(...)',
10796    border_color: 'rgba(...)',
10797    bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)'
10798};
10799
10800// JavaScript uses theme colors:
10801color: themeColors.text_primary;
10802background: themeColors.event_bg;
10803```
10804
10805**Result**:
10806- Matrix: Green panel with green glow ✓
10807- Purple: Purple panel with purple glow ✓
10808- Professional: Blue panel, no glow, clean ✓
10809
10810### Professional Theme Background Change
10811
10812**Before**: Almost white (#f5f7fa, #ffffff)
10813```php
10814'bg' => '#f5f7fa',           // Very light
10815'cell_bg' => '#ffffff',      // Pure white
10816```
10817
10818**After**: Light grey tones
10819```php
10820'bg' => '#e8ecf1',           // Soft grey-blue
10821'cell_bg' => '#f5f7fa',      // Light grey
10822'grid_bg' => '#d5dbe3',      // Medium grey
10823'cell_today_bg' => '#dce8f7' // Highlighted grey-blue
10824```
10825
10826**Visual Impact**:
10827- Sidebar: Light grey-blue background (#e8ecf1)
10828- Week cells: Lighter grey (#f5f7fa)
10829- Today cell: Highlighted blue-grey (#dce8f7)
10830- More depth and contrast ✓
10831- Professional appearance ✓
10832
10833### All Theme Elements Now Consistent
10834
10835**Matrix (Green)**:
10836- Sidebar: Dark (#242424)
10837- Clicked panel: Dark with green
10838- Text: Green with glow
10839
10840**Purple Dream**:
10841- Sidebar: Dark purple (#2a2030)
10842- Clicked panel: Dark with purple
10843- Text: Purple with glow
10844
10845**Professional Blue**:
10846- Sidebar: Light grey (#e8ecf1)
10847- Clicked panel: Light with blue
10848- Text: Dark grey, no glow
10849
10850**Perfect theme consistency everywhere!** ��
10851
10852## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING
10853
10854### �� Critical Fixes
10855- **Fixed:** Tomorrow events not loaded when outside current week
10856- **Fixed:** `&amp;` showing instead of `&` (double HTML encoding)
10857
10858### Issue 1: Tomorrow Not Loading
10859
10860**Problem**: Sidebar only loaded events for current week
10861- Today (Saturday): Week ends today
10862- Tomorrow (Sunday): Start of NEXT week
10863- Tomorrow events never loaded from data files!
10864
10865**Before**:
10866```php
10867// Only load current week
10868$end = new DateTime($weekEnd);
10869$end->modify('+1 day');
10870$period = new DatePeriod($start, $interval, $end);
10871// If tomorrow > weekEnd, it's not in period!
10872```
10873
10874**After**:
10875```php
10876// Check if tomorrow is outside week
10877$tomorrowDate = date('Y-m-d', strtotime('+1 day'));
10878if ($tomorrowDate > $weekEnd) {
10879    // Extend to include tomorrow
10880    $end = new DateTime($tomorrowDate);
10881}
10882$end->modify('+1 day');
10883$period = new DatePeriod($start, $interval, $end);
10884```
10885
10886**Result**: Tomorrow events now loaded even at week boundary! ✓
10887
10888### Issue 2: Double HTML Encoding
10889
10890**Problem**: `&` characters showing as `&amp;`
10891
10892**Cause**: Double encoding on line 2625 and 2681
10893```php
10894// Line 2625:
10895$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee &amp; Tea"
10896
10897// Line 2681:
10898$html .= htmlspecialchars($title); // "Coffee &amp; Tea" → "Coffee &amp;amp; Tea" ❌
10899```
10900
10901**Fixed**:
10902```php
10903// Line 2625:
10904$title = htmlspecialchars($event['title']); // Encode once
10905
10906// Line 2681:
10907$html .= $title; // Use already-encoded value ✓
10908```
10909
10910**Result**: `&` displays correctly! ✓
10911
10912### Both Fixes Critical
10913
10914These were **two separate bugs**:
109151. **Loading bug**: Tomorrow events not read from files
109162. **Display bug**: Double-encoding text
10917
10918Both needed fixing for Tomorrow section to work properly!
10919
10920## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY
10921
10922### �� Critical Fix
10923- **Fixed:** Tomorrow section missing when tomorrow is outside current week
10924- **Fixed:** Today section now always shows regardless of week boundaries
10925- **Changed:** Today/Tomorrow processed BEFORE week boundary checks
10926
10927### The Problem
10928
10929**Scenario**: Today is Saturday (last day of week)
10930- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today
10931- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week**
10932
10933**BROKEN Logic** (v4.2.2):
10934```php
10935foreach ($events as $dateKey => $dayEvents) {
10936    if ($dateKey < $weekStart) continue; // Skip old events
10937
10938    // ...week processing...
10939
10940    if ($dateKey === $tomorrowStr) {  // ← Never reached!
10941        $tomorrowEvents[] = $event;   //   Tomorrow > weekEnd
10942    }
10943}
10944```
10945
10946**Result**: Tomorrow events never added because loop skipped them! ❌
10947
10948### The Fix
10949
10950**Process Today/Tomorrow FIRST**:
10951```php
10952foreach ($events as $dateKey => $dayEvents) {
10953    $eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
10954
10955    foreach ($eventsWithConflicts as $event) {
10956        // ALWAYS process Today and Tomorrow first!
10957        if ($dateKey === $todayStr) {
10958            $todayEvents[] = $event; // ✓ Always shows
10959        }
10960        if ($dateKey === $tomorrowStr) {
10961            $tomorrowEvents[] = $event; // ✓ Always shows
10962        }
10963
10964        // THEN check week boundaries for grid
10965        if ($dateKey >= $weekStart && $dateKey <= $weekEnd) {
10966            $weekEvents[$dateKey][] = $event;
10967        }
10968
10969        // Important events still week-only
10970        if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
10971            $importantEvents[] = $event;
10972        }
10973    }
10974}
10975```
10976
10977### What Changed
10978
10979**Before**:
109801. Skip events < weekStart ❌
109812. Process week grid
109823. Try to add Today/Tomorrow ← **Failed if outside week**
109834. Add Important events
10984
10985**After**:
109861. **Always add Today events** ✓
109872. **Always add Tomorrow events** ✓
109883. Add to week grid if in range
109894. Add Important events if in range
10990
10991**Result**:
10992- Today section: ✓ Always shows
10993- Tomorrow section: ✓ Always shows (even at week boundary!)
10994- Week grid: ✓ Only current week
10995- Important: ✓ Only current week
10996
10997### Edge Cases Fixed
10998
10999**Saturday → Sunday transition**:
11000- Today (Sat): Shows in Today section ✓
11001- Tomorrow (Sun): Shows in Tomorrow section ✓
11002- Week grid: Only shows Sat (today) ✓
11003
11004**Sunday → Monday transition**:
11005- Today (Sun): Shows in Today section ✓
11006- Tomorrow (Mon): Shows in Tomorrow section ✓
11007- Week grid: Shows both Sun and Mon ✓
11008
11009**Perfect! Tomorrow section now always works!** ��
11010
11011## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY!
11012
11013### �� Corrected Week Options
11014- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!)
11015- **Changed:** Default is **Sunday** (US/Canada standard)
11016- **Fixed:** Day names array for Sunday start: S M T W T F S
11017
11018### �� Correct Week Start Options
11019
11020**Sunday Start** (Default):
11021- Grid shows: **S M T W T F S**
11022- Week: Sunday → Saturday
11023- US/Canada standard
11024- Most common worldwide
11025
11026**Monday Start**:
11027- Grid shows: **M T W T F S S**
11028- Week: Monday → Sunday
11029- ISO 8601 standard
11030- Common in Europe
11031
11032### Technical Changes
11033
11034**All References Updated**:
11035```php
11036// Changed from 'saturday' to 'sunday' in:
11037- Admin validation
11038- Week calculation logic
11039- Day names array
11040- Default value
11041- Comments
11042```
11043
11044**Sunday Calculation** (when today is Saturday):
11045```php
11046$today = date('w'); // 0=Sun, 6=Sat
11047if ($today == 0) {
11048    $weekStart = date('Y-m-d'); // Today!
11049} else {
11050    // Go back $today days to last Sunday
11051    $weekStart = date('Y-m-d', strtotime('-' . $today . ' days'));
11052}
11053```
11054
11055**Examples**:
11056- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7
11057- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14
11058
11059**Sorry for the confusion - it's Sunday not Saturday!** ��
11060
11061## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY
11062
11063### �� Critical Fix
11064- **Fixed:** Week calculation broken when today is Saturday
11065- **Fixed:** Events not showing in Today/Important sections
11066- **Fixed:** Week grid event bars missing
11067- **Changed:** Default week start is Saturday (matches main calendar)
11068
11069### Technical Details
11070
11071**The Bug**:
11072```php
11073// BROKEN (v4.2.0):
11074$weekStart = date('Y-m-d', strtotime('saturday this week'));
11075// When TODAY is Saturday, this is ambiguous and fails!
11076
11077// FIXED (v4.2.1):
11078$today = date('w'); // 0 (Sun) to 6 (Sat)
11079if ($today == 6) {
11080    $weekStart = date('Y-m-d'); // Today!
11081} else {
11082    $daysBack = ($today == 0) ? 1 : ($today + 1);
11083    $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days'));
11084}
11085$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days'));
11086```
11087
11088**Why It Failed**:
11089- `strtotime('saturday this week')` is ambiguous when run ON a Saturday
11090- PHP may interpret it as "next Saturday" or fail
11091- Result: Week range was wrong, events filtered out
11092
11093**The Fix**:
11094- Explicit calculation using day-of-week math
11095- Saturday (day 6): weekStart = today
11096- Sunday (day 0): weekStart = yesterday
11097- Monday-Friday: calculate days back to last Saturday
11098
11099**Result**: Works reliably every day of the week!
11100
11101**Default Changed**: Saturday start (was Monday in 4.2.0)
11102- Matches main calendar behavior
11103- Users can still switch to Monday in settings
11104
11105## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR
11106
11107### ✨ New Feature
11108- **Added:** Week start day selector in Themes tab
11109- **Added:** Choose between Monday (ISO standard) or Saturday week start
11110- **Added:** Week grid and all events now respect the selected start day
11111- **Changed:** Themes tab renamed to "Sidebar Widget Settings"
11112
11113### �� Week Start Options
11114
11115**Monday Start** (Default):
11116- Grid shows: M T W T F S S
11117- Week runs: Monday → Sunday
11118- ISO 8601 standard
11119- Common in Europe, most of world
11120
11121**Saturday Start**:
11122- Grid shows: S S M T W T F
11123- Week runs: Saturday → Friday
11124- Common in Middle East
11125- Sabbath-observant communities
11126
11127### Technical Details
11128
11129**Configuration**:
11130```php
11131// Saved in: data/meta/calendar_week_start.txt
11132// Values: 'monday' or 'saturday'
11133
11134// Week calculation:
11135if ($weekStartDay === 'saturday') {
11136    $weekStart = date('Y-m-d', strtotime('saturday this week'));
11137    $weekEnd = date('Y-m-d', strtotime('friday next week'));
11138} else {
11139    $weekStart = date('Y-m-d', strtotime('monday this week'));
11140    $weekEnd = date('Y-m-d', strtotime('sunday this week'));
11141}
11142```
11143
11144**Day Names Array**:
11145```php
11146// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S']
11147// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F']
11148```
11149
11150**What Changes**:
11151- Week grid day letters
11152- Week grid date sequence
11153- Today/Tomorrow/Important event date ranges
11154- Week event grouping
11155
11156**What Stays Same**:
11157- All themes still work
11158- Event data unchanged
11159- Main calendar unaffected
11160
11161### How to Change:
11162
111631. Admin → Calendar → �� Themes tab
111642. Under "Week Start Day" section
111653. Select Monday or Saturday
111664. Click "Save Settings"
111675. Refresh sidebar to see changes
11168
11169**Perfect for international users or religious observances!** ��
11170
11171## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS
11172
11173### ��️ Calendar Improvements
11174- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar)
11175- **Changed:** Event section backgrounds much lighter (almost white)
11176- **Changed:** Individual event backgrounds lighter and more readable
11177- **Changed:** Event borders now theme-colored
11178
11179### Technical Details
11180
11181**Week Start Change**:
11182```php
11183// Before:
11184$weekStart = date('Y-m-d', strtotime('monday this week'));
11185$weekEnd = date('Y-m-d', strtotime('sunday this week'));
11186$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
11187
11188// After:
11189$weekStart = date('Y-m-d', strtotime('sunday this week'));
11190$weekEnd = date('Y-m-d', strtotime('saturday this week'));
11191$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
11192```
11193
11194**Background Colors**:
11195```php
11196// Section backgrounds (Today, Tomorrow, Important):
11197Matrix: rgba(255, 255, 255, 0.05)    // Very light overlay
11198Purple: rgba(255, 255, 255, 0.08)    // Slightly lighter
11199Professional: rgba(255, 255, 255, 0.95)  // Almost white!
11200
11201// Individual event backgrounds:
11202Matrix: rgba(255, 255, 255, 0.03)    // Subtle
11203Purple: rgba(255, 255, 255, 0.05)    // Light
11204Professional: rgba(255, 255, 255, 0.5)   // Semi-transparent white
11205```
11206
11207**Event Borders**:
11208```php
11209Matrix: rgba(0, 204, 7, 0.2)         // Green
11210Purple: rgba(155, 89, 182, 0.2)      // Purple
11211Professional: rgba(74, 144, 226, 0.2) // Blue
11212```
11213
11214### Visual Result:
11215
11216**Before**: Dark backgrounds made text hard to read
11217**After**: Light backgrounds make events pop and text very readable
11218
11219**Week Grid**:
11220```
11221Before: [M][T][W][T][F][S][S]
11222After:  [S][M][T][W][T][F][S]  ← Now matches main calendar!
11223```
11224
11225## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS
11226
11227### �� Final Theme Polish
11228- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors
11229- **Fixed:** Event times now use theme bright color
11230- **Fixed:** Event dates use theme dim color
11231- **Fixed:** Task checkboxes use theme bright color
11232- **Fixed:** Event color bars use theme-appropriate shadows
11233- **Fixed:** No text shadows on Professional theme
11234
11235### Technical Details
11236
11237**Event Text Colors**:
11238```php
11239// Matrix:
11240- Title: #00cc07 (green)
11241- Time: #00dd00 (bright green)
11242- Date: #00aa00 (dim green)
11243- Text shadow: 0 0 3px (glow)
11244
11245// Purple:
11246- Title: #b19cd9 (lavender)
11247- Time: #d4a5ff (bright purple)
11248- Date: #8e7ab8 (dim purple)
11249- Text shadow: 0 0 3px (glow)
11250
11251// Professional:
11252- Title: #2c3e50 (dark grey)
11253- Time: #4a90e2 (blue)
11254- Date: #7f8c8d (grey)
11255- Text shadow: none (clean)
11256```
11257
11258**Color Bar Shadows**:
11259```php
11260// Matrix & Purple: Glow effect
11261box-shadow: 0 0 3px [event-color];
11262
11263// Professional: Subtle shadow
11264box-shadow: 0 1px 2px rgba(0,0,0,0.2);
11265```
11266
11267### What's Now Fully Themed:
11268
11269✅ Sidebar background & border
11270✅ Header (clock box) background, border, text
11271✅ Week grid background, borders, cells
11272✅ Week grid day letters & numbers
11273✅ Week grid event bars & "+N more" text
11274✅ Add Event button background & text
11275Today/Tomorrow/Important event titles
11276✅ Event times
11277✅ Event dates (Important section)
11278✅ Task checkboxes
11279✅ Event color bars
11280✅ All text shadows (glow vs none)
11281
11282**Every single element now respects the theme!** ��
11283
11284## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION
11285
11286### �� Theme Improvements
11287- **Fixed:** Week calendar grid now uses theme colors (purple/blue)
11288- **Fixed:** Add Event button now uses theme colors
11289- **Fixed:** Clock box border now matches theme
11290- **Fixed:** All text shadows respect theme (no glow on professional)
11291- **Fixed:** Event bars use theme-appropriate shadows
11292
11293### Technical Details
11294
11295**Week Grid Theming**:
11296```php
11297// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders
11298// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders
11299// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders
11300```
11301
11302**Add Event Button**:
11303```php
11304// Matrix: Dark green (#006400) with bright green text
11305// Purple: Purple (#7d3c98) with lavender text
11306// Professional: Blue (#3498db) with white text
11307```
11308
11309**Text Shadows**:
11310```php
11311// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color)
11312// Professional: No glow (clean look)
11313```
11314
11315**CSS Overrides**:
11316```css
11317/* Purple theme */
11318.sidebar-purple .eventlist-today-header {
11319    border-color: #9b59b6;
11320    box-shadow: 0 0 8px rgba(155, 89, 182, 0.2);
11321}
11322
11323/* Professional theme */
11324.sidebar-professional .eventlist-today-header {
11325    border-color: #4a90e2;
11326    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
11327}
11328```
11329
11330### What Changed Per Theme:
11331
11332**Purple Dream**:
11333- Week grid: Purple borders and dark purple background
11334- Add Event: Purple button with lavender text
11335- Clock box: Purple border with purple glow
11336- Event bars: Purple glow instead of green
11337- All text: Purple/lavender shades
11338
11339**Professional Blue**:
11340- Week grid: Blue borders and light grey background
11341- Add Event: Blue button with white text
11342- Clock box: Blue border with subtle shadow (no glow)
11343- Event bars: Subtle shadows (no glow)
11344- All text: Dark grey and blue shades
11345
11346**Matrix Edition**: Unchanged (still perfect green theme!)
11347
11348## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING
11349
11350### ✨ New Features
11351- **Added:** �� Themes tab in admin for sidebar widget theming
11352- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey)
11353- **Added:** Theme selector with live previews
11354- **Added:** Theme persistence across page loads
11355
11356### �� Available Themes
11357
11358**Matrix Edition** (Default):
11359- Dark background (#242424)
11360- Green accents (#00cc07)
11361- Neon glow effects
11362- Original Matrix styling
11363
11364**Purple Dream**:
11365- Dark purple background (#2a2030)
11366- Purple/violet accents (#9b59b6)
11367- Elegant purple glow
11368- Rich purple color scheme
11369
11370**Professional Blue**:
11371- Light grey background (#f5f7fa)
11372- Blue accents (#4a90e2)
11373- Clean professional look
11374- Subtle shadows instead of glow
11375
11376### �� Bug Fix
11377- **Fixed:** Tooltips now go UP and to the LEFT (was going right)
11378- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px`
11379
11380### Technical Details
11381
11382**Theme System**:
11383```php
11384// Saved in: data/meta/calendar_theme.txt
11385// Applied dynamically in syntax.php
11386$theme = $this->getSidebarTheme();  // 'matrix', 'purple', or 'professional'
11387$styles = $this->getSidebarThemeStyles($theme);
11388
11389// Styles include:
11390- bg, border, shadow
11391- header_bg, header_border, header_shadow
11392- text_primary, text_bright, text_dim
11393- grid_bg, grid_border
11394- cell_bg, cell_today_bg
11395```
11396
11397**Theme Changes**:
11398- Header background gradient
11399- Border colors
11400- Text colors
11401- Shadow/glow effects
11402- Grid colors
11403
11404**How to Change**:
114051. Admin → Calendar → �� Themes tab
114062. Select desired theme
114073. Click "Save Theme"
114084. Refresh page to see changes
11409
11410### Notes
11411- Themes only affect sidebar widget appearance
11412- Main calendar view unchanged
11413- Theme setting stored in `data/meta/calendar_theme.txt`
11414- Safe to switch themes - no data affected
11415
11416## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING
11417
11418### �� Bug Fixes
11419- **Fixed:** Events now sort chronologically by time (was using string comparison)
11420- **Fixed:** Tooltip positioning using JavaScript like system tooltips
11421- **Fixed:** All-day events appear first, then events in time order
11422
11423### Technical Details
11424
11425**Event Sorting Fix**:
11426```php
11427// BROKEN (v4.0.9):
11428return strcmp($aTime, $bTime);
11429// String comparison: "10:00" < "8:00" because "1" < "8"
11430// Result: 10:00 AM shown BEFORE 8:00 AM ❌
11431
11432// FIXED (v4.1.0):
11433$aMinutes = $this->timeToMinutes($aTime);  // 8:00 = 480
11434$bMinutes = $this->timeToMinutes($bTime);  // 10:00 = 600
11435return $aMinutes - $bMinutes;
11436// Result: 8:00 AM shown BEFORE 10:00 AM ✓
11437```
11438
11439**Example Before Fix**:
11440```
11441�� Weekend Ticket Duty (all-day)
114428:00 AM START TICKETS
1144310:00 AM Soul Winning    ← Wrong!
114449:45 AM Coffee           ← Should be before 10:00 AM
11445```
11446
11447**Example After Fix**:
11448```
11449�� Weekend Ticket Duty (all-day)
114508:00 AM START TICKETS
114519:45 AM Coffee           ← Correct!
1145210:00 AM Soul Winning
11453```
11454
11455**Tooltip Positioning**:
11456- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()`
11457- Uses CSS custom properties `--tooltip-left` and `--tooltip-top`
11458- Positioned on `mouseenter` event
11459- Matches system tooltip implementation (no cutoff)
11460
11461**JavaScript Implementation**:
11462```javascript
11463element.addEventListener("mouseenter", function() {
11464    const rect = element.getBoundingClientRect();
11465    element.style.setProperty("--tooltip-left", (rect.right - 10) + "px");
11466    element.style.setProperty("--tooltip-top", (rect.top - 30) + "px");
11467});
11468```
11469
11470**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically!
11471
11472## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX
11473
11474### �� UI Improvements
11475- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge
11476- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar
11477- **Changed:** Main calendar conflict tooltip now much smaller (was too big)
11478
11479### Technical Details
11480
11481**Sidebar Overflow Fix**:
11482```php
11483// Before (line 2005):
11484style="...overflow:hidden..."  // ← Blocked tooltips!
11485
11486// After:
11487style="...overflow:visible..."  // ← Tooltips extend beyond!
11488```
11489
11490**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important`
11491
11492**Main Calendar Tooltip Size**:
11493```css
11494/* Before: */
11495.conflict-tooltip {
11496    border: 2px solid #ff9800;
11497    border-radius: 6px;
11498    padding: 8px 12px;
11499    font-size: 12px;
11500    min-width: 200px;
11501    max-width: 350px;
11502}
11503
11504/* After: */
11505.conflict-tooltip {
11506    border: 1px solid #ff9800;  /* Thinner */
11507    border-radius: 3px;          /* Smaller */
11508    padding: 4px 8px;            /* Less padding */
11509    font-size: 10px;             /* Smaller header */
11510    min-width: 120px;            /* Narrower */
11511    max-width: 200px;            /* Narrower */
11512}
11513
11514.conflict-tooltip-body {
11515    padding: 6px 8px;  /* Was 10px 12px */
11516    font-size: 9px;    /* Was 11px */
11517    line-height: 1.4;  /* Was 1.6 */
11518}
11519
11520.conflict-item {
11521    padding: 2px 0;  /* Was 4px */
11522    font-size: 9px;  /* Added smaller font */
11523}
11524```
11525
11526**Result**:
11527- Main calendar tooltip ~50% smaller
11528- Sidebar tooltips now extend beyond borders
11529- Both tooltips compact and readable
11530
11531## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP
11532
11533### �� Bug Fix
11534- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text)
11535- **Changed:** Using HTML entity `&#10;` for newlines instead of `\n`
11536
11537### Technical Details
11538
11539**The Problem**:
11540```php
11541// Before (v4.0.7):
11542$conflictTooltip = 'Conflicts with:\n';  // Literal \n showed in tooltip
11543
11544// Displayed as:
11545"Conflicts with:\n• Event 1\n• Event 2"  // ← Literal backslash-n
11546```
11547
11548**The Fix**:
11549```php
11550// After (v4.0.8):
11551$conflictTooltip = "Conflicts with:&#10;";  // HTML entity for newline
11552
11553// Displays as:
11554Conflicts with:
11555• Event 1
11556• Event 2
11557```
11558
11559**Why `&#10;` Works**:
11560- HTML entity for line feed character
11561- Works in data attributes
11562- CSS `white-space: pre-line` preserves the newlines
11563- Renders as actual line breaks in tooltip
11564
11565**Applied to**:
11566- PHP rendering (sidebar Today/Tomorrow/Important)
11567- JavaScript rendering (clicked day events)
11568
11569## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX
11570
11571### �� UI Improvements
11572- **Changed:** Tooltip size reduced significantly (much more compact)
11573- **Fixed:** Tooltip now overflows sidebar borders (not cut off)
11574- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px)
11575- **Changed:** Narrower width (120-200px vs 200-300px)
11576
11577### Technical Details
11578
11579**Tooltip Size Reduction**:
11580```css
11581/* Before (v4.0.6):
11582padding: 6px 10px;
11583font-size: 11px;
11584min-width: 200px;
11585max-width: 300px;
11586
11587/* After (v4.0.7): */
11588padding: 3px 6px;
11589font-size: 9px;
11590min-width: 120px;
11591max-width: 200px;
11592```
11593
11594**Overflow Fix**:
11595```css
11596/* Allow tooltip to extend beyond sidebar */
11597.sidebar-widget,
11598.sidebar-matrix {
11599    overflow: visible !important;
11600}
11601
11602/* Position tooltip outside */
11603[data-tooltip]:before {
11604    bottom: 120%;  /* Further above */
11605    right: -10px;  /* Can extend beyond edge */
11606    z-index: 10000; /* Always on top */
11607}
11608```
11609
11610**Visual Result**:
11611- Tooltip is ~40% smaller
11612- Extends beyond sidebar border if needed
11613- Still readable, just more compact
11614- Better for small screens
11615
11616## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING
11617
11618### �� Critical Fix
11619- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly
11620- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names
11621- **Fixed:** Events without end time now treated as zero-duration (not +1 hour)
11622- **Fixed:** Now matches what you see in main calendar view
11623
11624### ✨ UI Improvement
11625- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right)
11626- **Added:** Custom CSS tooltip with data-tooltip attribute
11627- **Improved:** Better tooltip positioning - doesn't overflow screen edges
11628
11629### Technical Details
11630
11631**The Problem - Field Name Mismatch**:
11632```php
11633// Main calendar (line 697):
11634$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase)
11635
11636// Sidebar (before fix):
11637$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case)
11638```
11639
11640**The Problem - Duration Logic**:
11641```php
11642// Main calendar (line 697):
11643$end1 = isset($evt1['endTime']) && !empty($evt1['endTime'])
11644    ? $evt1['endTime']
11645    : $evt1['time'];  // ← Uses START time (zero duration)
11646
11647// Sidebar (before fix):
11648$endTime = ... ? ... : $this->addHoursToTime($startTime, 1);  // ← Added 1 hour!
11649```
11650
11651**The Fix**:
11652```php
11653// Now checks BOTH field names:
11654if (isset($event['end_time']) && $event['end_time'] !== '') {
11655    $endTime = $event['end_time'];
11656} elseif (isset($event['endTime']) && $event['endTime'] !== '') {
11657    $endTime = $event['endTime'];
11658} else {
11659    $endTime = $startTime;  // ← Matches main calendar!
11660}
11661```
11662
11663**Tooltip Positioning**:
11664- Uses `data-tooltip` attribute instead of `title`
11665- CSS positions tooltip ABOVE badge (`bottom: 100%`)
11666- Aligns to RIGHT edge (`right: 0`)
11667- Arrow points down to badge
11668- Black background with white text
11669- Max width 300px
11670
11671### Example
11672
11673**6:00 PM Evening Service** (no end time):
11674- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌
11675- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar!
11676
11677**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**:
11678- Zero-duration events at 6:00 PM don't overlap with anything
11679- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict
11680
11681**Tooltip appears**:
11682```
11683        ┌────────────────────┐
11684        │ Conflicts with:    │
11685        │ • Super Bowl       │
11686        │   (3:30 PM-7:00 PM)│
11687        └─────────┬──────────┘
116881168911690```
11691
11692## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING
11693
11694### �� Bug Fix
11695- **Fixed:** Events without end_time now properly get 1-hour default duration
11696- **Fixed:** Empty string end_time values now treated as missing (was causing issues)
11697- **Improved:** More robust checking for `end_time` field (checks both isset and not empty)
11698
11699### Technical Details
11700
11701**The Problem**:
11702```php
11703// Before (broken):
11704$endTime = isset($event['end_time']) ? $event['end_time'] : default;
11705
11706// If end_time exists but is empty string "":
11707isset($event['end_time']) = TRUE
11708$endTime = ""  // ← Empty string, not default!
11709```
11710
11711**The Fix**:
11712```php
11713// After (fixed):
11714$endTime = (isset($event['end_time']) && $event['end_time'] !== '')
11715    ? $event['end_time']
11716    : $this->addHoursToTime($startTime, 1);
11717
11718// Now empty string gets the default 1-hour duration
11719```
11720
11721**Why This Matters**:
11722Events 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.
11723
11724**Example**:
11725```
11726Super Bowl: 3:30 PM - 7:00 PM
11727Evening Service: 6:00 PM - ??? (should be 7:00 PM)
11728
11729If end_time = "" (empty string):
11730  Old code: Uses "" → conflict detection fails
11731  New code: Uses 7:00 PM → conflict detected ✓
11732```
11733
11734### Testing
11735If you're still not seeing the conflict on the 6:00 PM service:
117361. Check if the event has `end_time` set in the JSON
117372. Clear cache (Admin → Manage Events → Clear Cache)
117383. The conflict should now appear
11739
11740## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS
11741
11742### ✨ Feature Added
11743- **Added:** Hover over ⚠ badge to see which events are conflicting
11744- **Added:** Tooltip shows conflicting event titles and times
11745- **Added:** Works in both sidebar sections and clicked day events
11746
11747### Technical Details
11748
11749**Conflict Tracking Enhanced**:
11750```php
11751// Now tracks WHICH events conflict:
11752$event['conflictingWith'] = [
11753    ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'],
11754    ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30']
11755];
11756```
11757
11758**Tooltip Format**:
11759```
11760Conflicts with:
11761• Meeting (10:00 AM-11:00 AM)
11762• Call (10:30 AM-11:30 PM)
11763```
11764
11765**Where It Works**:
11766- ✅ Today section (sidebar)
11767- ✅ Tomorrow section (sidebar)
11768- ✅ Important Events section (sidebar)
11769- ✅ Clicked day events (week grid)
11770
11771**Cursor**: Changes to `help` cursor on hover to indicate tooltip
11772
11773### Note on Multi-Day Events
11774The 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.
11775
11776## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC
11777
11778### �� Bug Fixes
11779- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections
11780- **Fixed:** Important Events now shows events even if they're today or tomorrow
11781- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular)
11782
11783### Technical Details
11784
11785**Conflict Badge Issue**:
11786```php
11787// BROKEN (line 2511):
11788$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']);
11789// ↑ Checking 'conflicts' (plural)
11790
11791// But detectTimeConflicts() sets:
11792$event['conflict'] = true/false;
11793// ↑ Setting 'conflict' (singular)
11794
11795// FIXED:
11796$hasConflict = isset($event['conflict']) && $event['conflict'];
11797```
11798
11799**Result**: Badge now shows for ALL conflicting events in sidebar sections
11800
11801**Important Events Logic Issue**:
11802```php
11803// BROKEN:
11804if ($dateKey === $todayStr) {
11805    $todayEvents[] = ...;
11806} elseif ($dateKey === $tomorrowStr) {
11807    $tomorrowEvents[] = ...;
11808} else {  // ← Only checked if NOT today/tomorrow!
11809    if ($isImportant) {
11810        $importantEvents[] = ...;
11811    }
11812}
11813
11814// FIXED:
11815if ($dateKey === $todayStr) {
11816    $todayEvents[] = ...;
11817}
11818if ($dateKey === $tomorrowStr) {
11819    $tomorrowEvents[] = ...;
11820}
11821// ↑ Changed to separate 'if' statements
11822if ($isImportant && $dateKey in this week) {
11823    $importantEvents[] = ...;  // ← Now includes today/tomorrow too!
11824}
11825```
11826
11827**Result**: Important namespace events now show in Important section even if they're today or tomorrow
11828
11829### Conflict Badge Display
11830- Simplified to just ⚠ icon (no count)
11831- Orange color (#ff9800)
11832- 10px font size
11833- Hover shows "Time conflict detected"
11834
11835## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY
11836
11837### �� Bug Fix
11838- **Fixed:** Important Events section now displays all events correctly
11839- **Fixed:** Single-event days now get conflict flag (was returning early without flag)
11840- **Fixed:** Conflict detection no longer causes events to disappear from Important section
11841
11842### Technical Details
11843
11844**The Problem**:
11845- `detectTimeConflicts()` returned early if only 1 event on a day
11846- Returned original array without adding 'conflict' field
11847- This inconsistency caused issues in event categorization
11848
11849**The Solution**:
11850```php
11851// Before (broken):
11852if (empty($dayEvents) || count($dayEvents) < 2) {
11853    return $dayEvents;  // No 'conflict' field added!
11854}
11855
11856// After (fixed):
11857if (count($dayEvents) === 1) {
11858    return [array_merge($dayEvents[0], ['conflict' => false])];  // Always add flag
11859}
11860```
11861
11862**Result**:
11863- All events now have 'conflict' field consistently
11864- Single events: conflict = false
11865- Multiple events: conflict = true/false based on overlap
11866- Important Events section displays correctly
11867
11868## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES
11869
11870### �� Bug Fixes
11871- **Fixed:** Conflict badge (⚠) now displays in clicked day events
11872- **Fixed:** Recurring events edit now updates time and end_time correctly
11873- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit
11874
11875### ✨ Features Added
11876- **Added:** Time conflict detection for overlapping events
11877- **Added:** detectTimeConflicts() function checks all events on same day
11878- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions
11879- **Added:** Events now have 'conflict' flag set automatically
11880
11881### �� UI Changes
11882- **Changed:** Admin tab order: �� Manage Events (first), �� Update Plugin, ⚙️ Outlook Sync
11883- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin")
11884- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars)
11885
11886### Technical Details
11887
11888**Conflict Detection**:
11889```php
11890// Automatically detects overlapping events on same day
11891// Sets 'conflict' flag to true if event overlaps with another
11892$eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
11893```
11894
11895**Logic**:
11896- All-day events never conflict (no time set)
11897- Timed events check for overlap with other timed events
11898- Overlap = start1 < end2 AND start2 < end1
11899- Default duration is 60 minutes if no end_time
11900
11901**Recurring Events Fix**:
11902- Old: Updated `$event['start']` and `$event['end']` (wrong fields)
11903- New: Updates `$event['time']` and `$event['end_time']` (correct fields)
11904- Now edits actually save and update the events
11905
11906**Week View Bars**:
11907- Shows 4 colored bars instead of 3
11908- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc.
11909
11910## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE ��
11911
11912**Major Release**: Complete Matrix-themed calendar plugin with advanced features!
11913
11914### �� Major Features
11915
11916#### Sidebar Widget
11917- **Week Grid**: Interactive 7-day calendar with click-to-view events
11918- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips
11919- **Live Clock**: Updates every second with date display
11920- **Real-time Weather**: Geolocation-based temperature with icon
11921- **Event Sections**: Today (orange), Tomorrow (green), Important (purple)
11922- **Add Event Button**: Dark green bar opens full event creation dialog
11923- **Matrix Theme**: Green glow effects throughout
11924
11925#### Event Management
11926- **Single Color Bars**: Clean 3px bars showing event's assigned color
11927- **All-Day Events First**: Then sorted chronologically by time
11928- **Conflict Detection**: Orange ⚠ badge on overlapping events
11929- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//)
11930- **HTML Rendering**: Pre-rendered for JavaScript display
11931- **Click-to-View**: Click week grid days to expand event details
11932
11933#### Admin Interface
11934- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button
11935- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings
11936- **Manage Events Tab**: Browse, edit, delete, move events across namespaces
11937
11938#### Outlook Sync
11939- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook
11940- **Category Mapping**: Map colors to Outlook categories
11941- **Conflict Resolution**: Time conflict detection
11942- **Import/Export Config**: Encrypted configuration files
11943
11944### �� Design
11945- **Matrix Theme**: Authentic green glow aesthetic
11946- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections
11947- **Color Scheme**:
11948  - Today: Orange #ff9800
11949  - Tomorrow: Green #4caf50
11950  - Important: Purple #9b59b6
11951  - Add Event: Dark green #006400
11952  - System bars: Green/Purple/Orange
11953
11954### �� Technical Highlights
11955- **Zero-margin Design**: Perfect flush alignment throughout
11956- **Flexbox Layout**: Modern, responsive structure
11957- **AJAX Operations**: No page reloads needed
11958- **Smart Sorting**: All-day events first, then chronological
11959- **Tooltip System**: Detailed stats on hover (working correctly)
11960- **Event Dialog**: Full form with drag support
11961- **Cache Management**: One-click cache clearing
11962
11963### �� Breaking Changes from v3.x
11964- Removed dual color bars (now single event color bar only)
11965- Add Event button moved to between header and week grid
11966- All-day events now appear FIRST (not last)
11967- Update Plugin tab is now the default admin tab
11968
11969### �� Bug Fixes (v3.10.x → v4.0.0)
11970- ✅ Fixed color bars not showing (align-self:stretch vs height:100%)
11971- ✅ Fixed tooltip function naming (sanitized calId for JavaScript)
11972- ✅ Fixed weather display (added updateWeather function)
11973- ✅ Fixed HTML rendering in events (title_html/description_html fields)
11974- ✅ Fixed Add Event dialog (null check for calendar element)
11975- ✅ Fixed text positioning in Add Event button
11976- ✅ Fixed spacing throughout sidebar widget
11977
11978### �� Complete Feature List
11979- Full calendar view (month grid)
11980- Sidebar widget (week view)
11981- Event panel (standalone)
11982- Event list (date ranges)
11983- Namespace support
11984- Color coding
11985- Time conflict detection
11986- DokuWiki syntax in events
11987- Outlook synchronization
11988- System monitoring
11989- Weather display
11990- Live clock
11991- Admin interface
11992- Cache management
11993- Draggable dialogs
11994- AJAX save/edit/delete
11995- Import/export config
11996
11997### �� Usage
11998
11999**Sidebar Widget**:
12000```
12001{{calendar sidebar}}
12002{{calendar sidebar namespace=team}}
12003```
12004
12005**Full Calendar**:
12006```
12007{{calendar}}
12008{{calendar year=2026 month=6 namespace=team}}
12009```
12010
12011**Event Panel**:
12012```
12013{{eventpanel}}
12014```
12015
12016**Event List**:
12017```
12018{{eventlist daterange=2026-01-01:2026-01-31}}
12019```
12020
12021### �� Stats
12022- **40+ versions** developed during v3.x iterations
12023- **3.10.0 → 3.11.4**: Polish and refinement
12024- **4.0.0**: Production-ready Matrix Edition
12025
12026### �� Credits
12027Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration.
12028
12029---
12030
12031## Previous Versions (v3.11.4 and earlier)
12032
12033## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING
12034- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px)
12035- **Improved:** Small breathing room between system stats bars and Add Event button
12036- **Visual:** Better spacing for cleaner appearance
12037
12038### CSS Change:
12039**eventlist-today-header**:
12040- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px`
12041
12042### Visual Result:
12043```
12044│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats bars
12045│                       │  ← 2px space (restored)
12046├───────────────────────┤
12047│  + ADD EVENT          │  ← Add Event bar
12048├───────────────────────┤
12049```
12050
12051**Before (v3.11.3)**: No space, bars directly touch Add Event button
12052**After (v3.11.4)**: 2px breathing room for better visual hierarchy
12053
12054## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION
12055- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset
12056- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error
12057- **Changed:** Add Event text moved up 1px (position:relative; top:-1px)
12058- **Changed:** Line-height reduced from 12px to 10px for better text centering
12059- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets
12060
12061### JavaScript Fix:
12062**Problem**: Line 1084-1085 in calendar-main.js
12063```javascript
12064const calendar = document.getElementById(calId);
12065const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error!
12066```
12067
12068**Solution**: Added null check
12069```javascript
12070const calendar = document.getElementById(calId);
12071const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null;
12072```
12073
12074**Why This Happened**:
12075- Regular calendar has element with id=calId
12076- Sidebar widget doesn't have this element (different structure)
12077- Code tried to read .dataset on null, causing error
12078
12079### Text Position Fix:
12080**Before**:
12081- line-height: 12px
12082- vertical-align: middle
12083- Text slightly low
12084
12085**After**:
12086- line-height: 10px
12087- position: relative; top: -1px
12088- Text perfectly centered
12089
12090### What Works Now:
12091✅ Click "+ ADD EVENT" in sidebar → Dialog opens
12092✅ No console errors
12093✅ Text properly centered vertically
12094✅ Form pre-filled with today's date
12095✅ Save works correctly
12096
12097## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR
12098- **Added:** Event dialog to sidebar widget (same as regular calendar)
12099- **Changed:** Add Event button now opens proper event form dialog
12100- **Added:** renderEventDialog() called in renderSidebarWidget()
12101- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date
12102- **Improved:** Can now add events directly from sidebar widget
12103
12104### Add Event Button Behavior:
12105**Before (v3.11.1)**: Showed alert with instructions
12106**After (v3.11.2)**: Opens full event creation dialog
12107
12108**Dialog Features**:
12109- Date field (defaults to today)
12110- Title field (required)
12111- Time field (optional)
12112- End time field (optional)
12113- Color picker
12114- Category field
12115- Description field
12116- Save and Cancel buttons
12117- Draggable dialog
12118
12119### Technical Changes:
12120- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget()
12121- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')`
12122- Dialog uses same structure as regular calendar
12123- Uses existing openAddEvent() and saveEventCompact() JavaScript functions
12124
12125### User Flow:
121261. User clicks "+ ADD EVENT" green bar
121272. Event dialog opens with today's date pre-filled
121283. User fills in event details
121294. User clicks Save
121305. Event saved via AJAX
121316. Dialog closes
121327. Sidebar refreshes to show new event
12133
12134## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG
12135- **Fixed:** Removed bottom padding from header (was 2px, now 0)
12136- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0)
12137- **Fixed:** Add Event bar now flush against header with zero gap
12138- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin
12139- **Improved:** Alert provides clear instructions on how to add events
12140
12141### CSS Changes:
12142**eventlist-today-header**:
12143- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom)
12144
12145**eventlist-stats-container**:
12146- `margin-top: 2px` → `margin: 0` (removed all margins)
12147
12148### Add Event Button Behavior:
12149**Before**: Clicked → Navigated to Admin → Manage Events tab
12150**After**: Clicked → Shows alert with instructions
12151
12152**Alert Message**:
12153```
12154To add an event, go to:
12155Admin → Calendar Management → Manage Events tab
12156or use the full calendar view {{calendar}}
12157```
12158
12159### Visual Result:
12160```
12161│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats (no margin-bottom)
12162├────────────────────────┤
12163│  + ADD EVENT           │  ← Perfectly flush!
12164├────────────────────────┤
12165```
12166
12167No gaps, perfectly aligned!
12168
12169## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE
12170- **Moved:** Add Event bar back to original position (between header and week grid)
12171- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff)
12172- **Changed:** Letter spacing reduced from 0.5px to 0.4px
12173- **Fixed:** Text now fully visible without being cut off
12174- **Final:** Optimal position and size determined
12175
12176### Final Layout:
12177```
12178┌─────────────────────────────┐
12179│  Clock | Weather | Stats    │  ← Header
12180├─────────────────────────────┤
12181│  + ADD EVENT                 │  ← Bar (back here, smaller text)
12182├─────────────────────────────┤
12183│  M  T  W  T  F  S  S        │  ← Week Grid
12184│  3  4  5  6  7  8  9        │
12185├─────────────────────────────┤
12186│  Today                       │  ← Event sections
12187└─────────────────────────────┘
12188```
12189
12190### Text Size Changes:
12191**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off
12192**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible
12193
12194### Why This Position:
12195- Separates header from calendar
12196- Natural action point after viewing stats
12197- Users see stats → decide to add event → view calendar
12198- Consistent with original design intent
12199
12200## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID
12201- **Moved:** Add Event bar repositioned from between header/grid to below week grid
12202- **Improved:** Better visual flow - header → stats → grid → add button → events
12203- **Changed:** Add Event bar now acts as separator between calendar and event sections
12204
12205### New Layout:
12206```
12207┌─────────────────────────────┐
12208│  Clock | Weather | Stats    │  ← Header
12209├─────────────────────────────┤
12210│  M  T  W  T  F  S  S        │  ← Week Grid
12211│  3  4  5  6  7  8  9        │
12212├─────────────────────────────┤
12213│  + ADD EVENT                 │  ← Add bar (moved here!)
12214├─────────────────────────────┤
12215│  Today                       │  ← Event sections
12216│  Tomorrow                    │
12217│  Important Events            │
12218└─────────────────────────────┘
12219```
12220
12221### Visual Flow:
12222**Before (v3.10.8)**:
122231. Header (clock, weather, stats)
122242. **+ ADD EVENT** bar
122253. Week grid
122264. Event sections
12227
12228**After (v3.10.9)**:
122291. Header (clock, weather, stats)
122302. Week grid (calendar days)
122313. **+ ADD EVENT** bar
122324. Event sections
12233
12234### Benefits:
12235- Natural reading flow: View calendar → Add event → See events
12236- Add button positioned between calendar and event list
12237- Acts as visual separator
12238- More logical action placement
12239
12240## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR
12241- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color
12242- **Changed:** Events now display with single 3px color bar (event's assigned color only)
12243- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly
12244- **Simplified:** Cleaner visual with one color bar instead of two
12245- **Improved:** More space for event content without extra bar
12246
12247### Visual Changes:
12248
12249**Before (v3.10.7)** - Dual color bars:
12250```
12251├─ [Orange][Green]  Event Title
12252├─ [Blue][Purple]   Event Title
12253```
12254
12255**After (v3.10.8)** - Single color bar:
12256```
12257├─ [Green]  Event Title    ← Only event color!
12258├─ [Purple] Event Title    ← Only event color!
12259```
12260
12261### Add Bar Changes:
12262- Added `margin:0` to eliminate gaps
12263- Now flush against header (no space above)
12264- Now flush against week grid (no space below)
12265- Perfect seamless connection
12266
12267### Technical Changes:
12268**renderSidebarEvent()**:
12269- Removed section color bar (4px)
12270- Kept only event color bar (3px)
12271
12272**showDayEvents() JavaScript**:
12273- Removed section color bar (4px blue)
12274- Kept only event color bar (3px)
12275
12276**Add Event bar**:
12277- Added `margin:0` inline style
12278- Removed all top/bottom margins
12279
12280## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR
12281- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day)
12282- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%`
12283- **Changed:** Add Event bar color from orange to dark green (#006400)
12284- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off)
12285- **Changed:** Add Event bar text now bright green (#00ff00) with green glow
12286- **Changed:** Add Event bar font size increased from 7px to 9px
12287- **Changed:** Add Event bar letter spacing increased to 0.5px
12288- **Improved:** Hover effect on Add Event bar now darker green (#004d00)
12289
12290### Color Bar Fix Details:
12291**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars
12292**Solution**: Applied same fix as clicked day events:
12293- Changed parent div: `align-items:start` → `align-items:stretch`
12294- Added `min-height:20px` to parent
12295- Changed bars: `height:100%` → `align-self:stretch`
12296- Bars now properly fill vertical space in ALL sections
12297
12298### Add Event Bar Changes:
12299**Before**:
12300- Background: Orange (#ff9800)
12301- Text: Black (#000)
12302- Height: 6px (text cut off)
12303- Font: 7px
12304
12305**After**:
12306- Background: Dark green (#006400)
12307- Text: Bright green (#00ff00) with green glow
12308- Height: 12px (text fully visible)
12309- Font: 9px
12310- Hover: Darker green (#004d00)
12311- Matrix-themed green aesthetic
12312
12313## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE
12314- **Fixed:** Event color bars now display correctly in clicked day events
12315- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events
12316- **Added:** Conflict badge (⚠) appears on right side of conflicting events
12317- **Updated:** Complete README.md rewrite with full Matrix theme documentation
12318- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering)
12319- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px`
12320- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning
12321
12322### Color Bar Fix:
12323**Problem**: Bars had `height:100%` but parent had no explicit height
12324**Solution**:
12325- Changed to `align-self:stretch` on bars
12326- Parent uses `align-items:stretch`
12327- Added `min-height:20px` to parent
12328- Bars now properly fill vertical space
12329
12330### Sorting Change:
12331**Before**: Timed events first → All-day events last
12332**After**: All-day events FIRST → Timed events chronologically
12333
12334**Example**:
12335```
12336Monday, Feb 5
12337├─ All Day - Project Deadline       ← All-day first
12338├─ 8:00 AM - Morning Standup        ← Earliest time
12339├─ 10:30 AM - Coffee with Bob
12340└─ 2:00 PM - Team Meeting           ← Latest time
12341```
12342
12343### Conflict Badge:
12344- Orange warning triangle (⚠) on right side
12345- 10px font size
12346- Only appears if `event.conflict` is true
12347- Title attribute shows "Time conflict detected"
12348- Small and unobtrusive
12349
12350### README Update:
12351- Complete rewrite with Matrix theme focus
12352- Full usage instructions for all features
12353- Admin interface documentation
12354- Outlook sync setup guide
12355- System monitoring details
12356- Troubleshooting section
12357- Color scheme reference
12358- File structure documentation
12359- Performance tips
12360- Security notes
12361- Quick start examples
12362
12363## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR
12364- **Added:** Events now sorted by time when clicking week grid days
12365- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px)
12366- **Improved:** Events with times appear first, sorted chronologically
12367- **Improved:** All-day events appear after timed events
12368- **Changed:** Add Event bar font size reduced to 7px (from 10px)
12369- **Changed:** Add Event bar now has 0 padding and fixed 6px height
12370
12371### Sorting Logic:
12372- Events with times sorted by time (earliest first)
12373- All-day events (no time) appear at the end
12374- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare
12375- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event
12376
12377### Add Event Bar Changes:
12378- **Height**: 6px (was ~12px with padding)
12379- **Padding**: 0 (was 4px top/bottom)
12380- **Font Size**: 7px (was 10px)
12381- **Letter Spacing**: 0.3px (was 0.5px)
12382- **Line Height**: 6px to match height
12383- **Vertical Align**: Middle for text centering
12384
12385## Version 3.10.4 (2026-02-06) - ADD EVENT BAR
12386- **Added:** Thin orange "Add Event" bar between header and week grid
12387- **Added:** Quick access to event creation from sidebar widget
12388- **Styled:** Sleek design with hover effects and glow
12389- **Interactive:** Clicks navigate to Manage Events tab in admin
12390- **Improved:** User workflow for adding events from sidebar
12391
12392### Visual Design:
12393- Orange background (#ff9800) matching Today section color
12394- 4px top/bottom padding for thin, sleek appearance
12395- Black text with white text-shadow for visibility
12396- Hover effect: Darkens to #ff7700 with enhanced glow
12397- Orange glow effect (box-shadow) matching Matrix theme
12398- Centered "+ ADD EVENT" text (10px, bold, letter-spacing)
12399
12400### Technical Changes:
12401- Added between header close and renderWeekGrid() call
12402- Inline onclick handler navigates to admin manage tab
12403- Inline onmouseover/onmouseout for hover effects
12404- Smooth 0.2s transition on all style changes
12405
12406## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION
12407- **Changed:** Update Plugin tab is now the default tab when opening admin
12408- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab
12409- **Improved:** Clear Cache button now larger and more prominent with helpful description
12410- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events
12411- **Removed:** Debug console.log statements from day event display
12412- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab
12413
12414### UI Changes:
12415- Update Plugin tab opens by default (was Config/Outlook Sync tab)
12416- Clear Cache button prominently displayed at top of Update Plugin tab
12417- Orange ��️ button (10px 20px padding) with confirmation dialog
12418- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin"
12419- Success/error messages display on Update Plugin tab after cache clear
12420- Tab navigation reordered to put Update first
12421
12422### Technical Changes:
12423- Default tab changed from 'config' to 'update' in html() method
12424- Tab navigation HTML reordered to show Update Plugin tab first
12425- clearCache() method now redirects with 'update' tab parameter
12426- Removed Clear Cache button from renderConfigTab()
12427- Added Clear Cache button to renderUpdateTab() with message display
12428
12429## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX
12430- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days
12431- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML
12432- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields
12433- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events
12434
12435### Technical Changes:
12436- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render()
12437- Events added to weekEvents now include pre-rendered HTML versions
12438- title_html and description_html fields populated before json_encode()
12439- JavaScript now receives properly formatted HTML content
12440
12441## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON
12442- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123)
12443- **Fixed:** HTML event handlers now call correctly sanitized function names
12444- **Fixed:** Weather temperature now updates correctly in sidebar widget
12445- **Added:** Weather update function to sidebar widget JavaScript
12446- **Added:** "Clear Cache" button in admin panel for easy cache refresh
12447- **Added:** Default weather location set to Irvine, CA when geolocation unavailable
12448- **Improved:** All tooltip functions now work correctly on system status bars
12449
12450### Technical Changes:
12451- Changed tooltip function names to use $jsCalId instead of $calId
12452- Changed HTML onmouseover/onmouseout to use $jsCalId
12453- Added updateWeather() function to sidebar widget
12454- Added getWeatherIcon() function to sidebar widget
12455- Added clearCache() method in admin.php
12456- Added recursiveDelete() helper method in admin.php
12457- Admin UI now has ��️ Clear Cache button alongside Export/Import
12458
12459## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES
12460- **Fixed:** JavaScript syntax error "Missing initializer in const declaration"
12461- **Fixed:** Event links and formatting not displaying in clicked day events
12462- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores
12463- **Changed:** Event titles now use `title_html` field to preserve HTML formatting
12464- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting
12465- **Improved:** All JavaScript variable names now use valid syntax
12466- **Improved:** Links, bold, italic, and other HTML formatting preserved in events
12467
12468### Technical Changes:
12469- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);`
12470- JavaScript variables now use underscores instead of dashes
12471- Event HTML rendering preserves DokuWiki formatting
12472- Fixed "showTooltip_sidebar is not defined" errors
12473- Fixed "showDayEvents_cal is not defined" errors
12474
12475## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX
12476- **Fixed:** Critical JavaScript loading order issue causing ReferenceError
12477- **Fixed:** Functions now defined BEFORE HTML that uses them
12478- **Changed:** Consolidated all JavaScript into single comprehensive script block
12479- **Removed:** ~290 lines of duplicate JavaScript code
12480- **Added:** Shared state management with `sharedState_[calId]` object
12481- **Improved:** System tooltip functions now work correctly
12482- **Improved:** Week grid click events now work correctly
12483
12484### Technical Changes:
12485- Moved all JavaScript to beginning of widget (before HTML)
12486- Removed duplicate script blocks
12487- Unified tooltip and stats functions
12488- Shared latestStats and cpuHistory state
12489- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined"
12490
12491## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS
12492- **Added:** Dual color bars on events (section color + event color)
12493- **Added:** Click week grid days to view events (replaced hover tooltips)
12494- **Added:** Expandable section below week grid for selected day events
12495- **Added:** Blue theme for selected day section
12496- **Changed:** Week grid days now clickable instead of tooltips
12497- **Changed:** Section bar: 4px wide (left)
12498- **Changed:** Event bar: 3px wide (right)
12499- **Increased:** Gap between color bars from 3px to 6px
12500- **Improved:** Click is more reliable and mobile-friendly than hover tooltips
12501
12502### Visual Changes:
12503- Each event shows TWO color bars side-by-side
12504- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue)
12505- Right bar (3px): Individual event's assigned color
12506- Click any day in week grid to expand event list
12507- X button to close selected day events
12508
12509## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY
12510- **Increased:** Event color bar width from 2px to 3px
12511- **Increased:** Gap between section and event bars from 3px to 6px
12512- **Improved:** Event color bars now more visible alongside section bars
12513- **Note:** Dual color bar system already in place from v3.9.6
12514
12515## Version 3.9.6 (2026-02-05) - UI REFINEMENTS
12516- **Changed:** Date in Important Events moved below event name (was above)
12517- **Changed:** Section headers now 9px font size (was 10px)
12518- **Changed:** Section headers now normal case (was ALL CAPS)
12519- **Changed:** Letter spacing reduced from 0.8px to 0.3px
12520- **Improved:** More natural reading flow with date below event name
12521- **Improved:** Cleaner, more subtle section headers
12522
12523### Header Changes:
12524- "TODAY" → "Today"
12525- "TOMORROW" → "Tomorrow"
12526- "IMPORTANT EVENTS" → "Important Events"
12527
12528## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN
12529- **Redesigned:** Complete overhaul of `sidebar` parameter
12530- **Added:** Compact week-at-a-glance itinerary view (200px wide)
12531- **Added:** Live clock widget at top of sidebar
12532- **Added:** 7-cell week grid showing event bars
12533- **Added:** Today section with orange header and left border
12534- **Added:** Tomorrow section with green header and left border
12535- **Added:** Important Events section with purple header and left border
12536- **Added:** Admin setting to configure important namespaces
12537- **Added:** Time conflict badges in sidebar events
12538- **Added:** Task checkboxes in sidebar events
12539- **Changed:** Sidebar now optimized for narrow spaces (200px)
12540- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets
12541
12542### New Features:
12543- Clock updates every second showing current time
12544- Week grid shows Mon-Sun with colored event bars
12545- Today/Tomorrow sections show full event details
12546- Important events highlighted in purple (configurable namespaces)
12547- All badges (conflict, time, etc.) shown in compact format
12548- Automatic time conflict detection
12549
12550## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP
12551- **Removed:** 16 unused/debug/backup files
12552- **Removed:** 69 console.log() debug statements
12553- **Removed:** 3 orphaned object literals from console.log removal
12554- **Removed:** Temporary comments and markers
12555- **Fixed:** JavaScript syntax errors from cleanup
12556- **Improved:** Code quality and maintainability
12557- **Improved:** Reduced plugin size by removing unnecessary files
12558- **Status:** Production-ready, fully cleaned codebase
12559
12560### Files Removed:
12561- style.css.backup, script.js.backup
12562- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php
12563- debug_events.php, debug_html.php, cleanup_events.php
12564- fix_corrupted_json.php, fix_wildcard_namespaces.php
12565- find_outlook_duplicates.php, update_namespace.php
12566- validate_calendar_json.php, admin.js
12567- test_date_field.html
12568
12569## Version 3.7.5 (2026-02-05)
12570- **Fixed:** PHP syntax error (duplicate foreach loop removed)
12571- **Fixed:** Time variable handling in grace period logic
12572
12573## Version 3.7.4 (2026-02-05)
12574- **Added:** 15-minute grace period for timed events
12575- **Changed:** Events with times now stay visible for 15 minutes after their start time
12576- **Changed:** Prevents events from immediately disappearing when they start
12577- **Improved:** Better user experience for ongoing events
12578- **Fixed:** Events from earlier today now properly handled with grace period
12579
12580## Version 3.7.3 (2026-02-05)
12581- **Changed:** Complete redesign of cleanup section for compact, sleek layout
12582- **Changed:** Radio buttons now in single row at top
12583- **Changed:** All options visible with grayed-out inactive states (opacity 0.4)
12584- **Changed:** Inline controls - no more grid layout or wrapper boxes
12585- **Changed:** Namespace filter now compact single-line input
12586- **Changed:** Smaller buttons and tighter spacing throughout
12587- **Improved:** More professional, space-efficient design
12588
12589## Version 3.7.2 (2026-02-04)
12590- **Fixed:** Strange boxes under cleanup options - now properly hidden
12591- **Changed:** Unified color scheme across all admin sections
12592- **Changed:** Green (#00cc07) - Primary actions and main theme
12593- **Changed:** Orange (#ff9800) - Warnings and cleanup features
12594- **Changed:** Purple (#7b1fa2) - Secondary actions and accents
12595- **Improved:** Consistent visual design throughout admin interface
12596
12597## Version 3.7.1 (2026-02-04)
12598- **Fixed:** Cleanup section background changed from orange to white
12599- **Fixed:** Event cleanup now properly scans all calendar directories
12600- **Added:** Debug info display when preview finds no events
12601- **Improved:** Better directory scanning logic matching other features
12602
12603## Version 3.7.0 (2026-02-04)
12604- **Added:** Event cleanup feature in Events Manager
12605- **Added:** Delete old events by age (months/years old)
12606- **Added:** Delete events by status (completed tasks, past events)
12607- **Added:** Delete events by date range
12608- **Added:** Namespace filter for targeted cleanup
12609- **Added:** Preview function to see what will be deleted
12610- **Added:** Automatic backup creation before cleanup
12611- **Changed:** Reduced changelog viewer height to 100px (was 400px)
12612
12613## Version 3.6.3 (2026-02-04)
12614- **Fixed:** Conflict tooltips now work properly after navigating between months
12615- **Added:** Changelog display in Update Plugin tab
12616- **Added:** CHANGELOG.md file with version history
12617- **Improved:** Changelog shows last 10 versions with color-coded change types
12618- **Fixed:** Removed debug console.log statements
12619
12620## Version 3.6.2 (2026-02-04)
12621- **Fixed:** Month title now updates correctly when navigating between months
12622- **Changed:** All eventpanel header elements reduced by 10% for more compact design
12623- **Changed:** Reduced header height from 78px to 70px
12624
12625## Version 3.6.1 (2026-02-04)
12626- **Changed:** Complete redesign of eventpanel header with practical two-row layout
12627- **Fixed:** Improved layout for narrow widths (~500px)
12628- **Changed:** Simplified color scheme (removed purple gradient)
12629
12630## Version 3.6.0 (2026-02-04)
12631- **Changed:** Redesigned eventpanel header with gradient background
12632- **Changed:** Consolidated multiple header rows into compact single-row design
12633
12634## Version 3.5.1 (2026-02-04)
12635- **Changed:** Moved event search bar into header row next to + Add button
12636- **Improved:** More compact UI with search integrated into header
12637
12638## Version 3.5.0 (2026-02-04)
12639- **Added:** Event search functionality in sidebar and eventpanel
12640- **Added:** Real-time filtering as you type
12641- **Added:** Clear button (✕) appears when searching
12642- **Added:** "No results" message when search returns nothing
12643
12644## Version 3.4.7 (2026-02-04)
12645- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding)
12646- **Fixed:** Removed debug logging from console
12647- **Changed:** Updated export version number to match plugin version
12648
12649## Version 3.4.6 (2026-02-04)
12650- **Added:** Debug logging to diagnose conflict detection issues
12651- **Development:** Extensive console logging for troubleshooting
12652
12653## Version 3.4.5 (2026-02-04)
12654- **Added:** Debug logging to showDayPopup and conflict detection
12655- **Development:** Added logging to trace conflict detection flow
12656
12657## Version 3.4.4 (2026-02-04)
12658- **Fixed:** Conflict detection now persists across page refreshes (PHP-based)
12659- **Fixed:** Conflict tooltips now appear on hover
12660- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation)
12661- **Added:** Conflict badges in both future and past events sections
12662
12663## Version 3.4.3 (2026-02-04)
12664- **Added:** Custom styled conflict tooltips with hover functionality
12665- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2)
12666- **Improved:** Beautiful tooltip design with orange header and clean formatting
12667
12668## Version 3.4.2 (2026-02-04)
12669- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3)
12670
12671## Version 3.4.1 (2026-02-04)
12672- **Fixed:** End time field now properly saves to database
12673- **Fixed:** End time dropdown now filters to show only valid times after start time
12674- **Added:** Smart dropdown behavior - expands on focus, filters invalid options
12675- **Improved:** End time auto-suggests +1 hour when start time selected
12676
12677## Version 3.4.0 (2026-02-04)
12678- **Added:** End time support for events (start and end times)
12679- **Added:** Automatic time conflict detection
12680- **Added:** Conflict warning badges (⚠️) on events with overlapping times
12681- **Added:** Conflict tooltips showing which events conflict
12682- **Added:** Visual conflict indicators with pulse animation
12683- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM")
12684
12685## Version 3.3.77 (2026-02-04)
12686- **Fixed:** Namespace badge onclick handlers restored after clearing filter
12687- **Fixed:** Namespace filtering works infinitely (filter → clear → filter)
12688
12689## Version 3.3.76 (2026-02-04)
12690- **Fixed:** Namespace badges now clickable after clearing namespace filter
12691
12692## Version 3.3.75 (2026-02-04)
12693- **Fixed:** Form resubmission warnings eliminated
12694- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303
12695- **Changed:** All admin redirects now use absolute URLs
12696
12697## Version 3.3.74 (2026-02-04)
12698- **Fixed:** Clearing namespace filter now restores original namespace instead of default
12699- **Added:** data-original-namespace attribute to preserve initial namespace setting
12700- **Improved:** Console logging for namespace filter debugging
12701
12702## Version 3.3.73 (2026-02-03)
12703- **Added:** Dynamic namespace filtering banner with clear button
12704- **Fixed:** JavaScript function accessibility issues
12705- **Fixed:** Namespace badge click handlers in event lists
12706- **Improved:** Persistent namespace filtering across views
12707
12708## Earlier Versions
12709See previous transcripts for complete history through v3.3.73, including:
12710- Recurring events with Outlook sync
12711- Multi-namespace support
12712- Event categories and mapping
12713- Backup/restore functionality
12714- System statistics bar
12715- Namespace selector with fuzzy search
12716- Events Manager with import/export
12717- And much more...
12718