xref: /plugin/calendar/CHANGELOG.md (revision 22228b0ea77db31a6d52d5b3db63727729c1a5e0)
1# Calendar Plugin Changelog
2
3## Version 6.11.4 (2026-02-13) - JAVASCRIPT LOCALIZATION
4
5### JavaScript Localization (calendar-main.js)
6- Added `getCalendarLang()` helper to read embedded language strings
7- Added `getMonthNames()` and `getMonthNamesShort()` helpers for localized arrays
8- Localized all month names (full and abbreviated)
9- Localized dialog titles: "Add Event" / "Edit Event"
10- Localized "Delete this event?" confirmation
11- Localized "Events" header
12- Localized "Past Events (X)" toggle
13- Localized "No events this month" / "No events on this day" messages
14- Localized "+ Add Event" buttons
15- Localized "Important" tooltip
16- Localized "PAST DUE" and "TODAY" badges
17
18### Language Strings Integration
19- Added `getJsLangStrings()` method to syntax.php
20- Embedded JSON language data in all calendar render functions:
21  - Main calendar (renderCompactCalendar)
22  - Event panel (renderEventPanelOnly)
23  - Sidebar widget (renderSidebarWidget)
24
25### New Language Strings
26- Month names (full): January-December
27- Month names (short): Jan-Dec
28- Badge labels: PAST DUE, TODAY
29- Additional: no_events_week, no_events_month, add_event_short
30
31---
32
33## Version 6.11.3 (2026-02-13) - SIDEBAR WIDGET LOCALIZATION
34
35### Fixed
36- **Fixed newline issue in confirmation dialogs** - Changed all `\n` in single-quoted PHP strings to double-quoted strings so JavaScript receives proper newlines
37- **Localized "Runs every X minutes"** - Cron interval descriptions now use language strings
38
39### Sidebar Widget Localization (syntax.php)
40- Today/Tomorrow/Important section headers
41- Event dialog: all labels, placeholders, options
42- Day names (short and full)
43- Ordinal positions (First, Second, Third...)
44- Color names (Blue, Green, Red...)
45- Recurring event options (Day(s), Week(s), Month(s)...)
46- Buttons (Save, Cancel, Add)
47- Search placeholder and tooltips
48
49### New Language Strings Added
50- ~70 new sidebar/frontend strings per language file
51- Full German translations for all frontend UI
52
53---
54
55## Version 6.11.2 (2026-02-13) - ADMIN LOCALIZATION COMPLETE
56
57### Complete Admin Backend Localization
58- **Total getLang() calls increased from ~287 to 508**
59- All AJAX JSON response messages now localized
60- All redirect messages now localized
61- Fixed: Cache cleared/not found messages
62- Fixed: Recurring event deleted/updated messages
63- Fixed: Event management messages (moved, not found, file errors)
64- Fixed: Namespace management (create, delete, rename, validation errors)
65- Fixed: Sync process messages (script not found, log file errors, completion/failure)
66- Fixed: Config import/export messages (encryption, validation, success/error)
67- Fixed: Theme saved message
68- Fixed: Backup/restore messages (creation, deletion, rename, restore errors)
69- Fixed: intervalToPattern function returns localized pattern names
70
71### Language Strings Added
72- English: ~100 new strings
73- German: ~100 new translated strings
74
75---
76
77## Version 6.11.1 (2026-02-13) - CONFIG IMPORT FIX
78
79### Fixed Config Import
80- **Bug Fix:** Import config now accepts both `return [` (short syntax) and `return array(` (long syntax)
81- **Bug Fix:** Added trim to handle whitespace in encrypted config data
82- **Improved:** Better error messages when decryption fails (indicates different DokuWiki installation)
83- **Improved:** Additional validation with trim on decrypted content
84
85---
86
87## Version 6.11.0 (2026-02-13) - COMPLETE GERMAN LOCALIZATION
88
89### Complete Localization of All Admin Tabs
90
91**Edit Recurring Dialog (editRecurringSeries function):**
92- Dialog header: "Edit Recurring Event" → "Wiederkehrenden Termin bearbeiten"
93- All field labels (Title, Start Time, End Time, Namespace)
94- "Changes apply to ALL occurrences of:" → "Änderungen gelten für ALLE Vorkommen von:"
95- Recurrence pattern section (Repeat every, On these days, Repeat on)
96- Day of month / Weekday pattern options
97- Repeat Until with hint text
98- Cancel / Save Changes buttons
99- Day names (short and full) from language files
100- Ordinal labels (First, Second, Third, etc.)
101- Recurrence type options (Day(s), Week(s), Month(s), Year(s))
102
103**Update Plugin Tab:**
104- "Update Plugin" → "Plugin aktualisieren"
105- "Current Version" → "Aktuelle Version"
106- All labels (Version, Author, Description, Location)
107- Permissions section with status messages
108- "Upload New Version" → "Neue Version hochladen"
109- "Create backup before updating" → "Backup vor Aktualisierung erstellen"
110- "Upload & Install" → "Hochladen & Installieren"
111- "Clear Cache" → "Cache leeren"
112- All Important Notes items
113- "Version History" → "Versionsgeschichte"
114- "Current Release" button → "Aktuelle Version"
115- "RUNNING" label → "AKTIV"
116- "Backups" → "Backups"
117- All backup table headers and action buttons (Download, Restore, Rename)
118
119**Outlook Sync Tab:**
120- "Outlook Sync Configuration" → "Outlook-Sync-Konfiguration"
121- "Export Config" / "Import Config" buttons
122- "Microsoft Azure App Credentials" → "Microsoft Azure App-Anmeldedaten"
123- All field labels (Tenant ID, Client ID, Client Secret, etc.)
124- "Outlook Settings" → "Outlook-Einstellungen"
125- "Sync Options" → "Sync-Optionen"
126- Checkbox labels for sync options
127- "Namespace → Category" mapping section
128- "Event Color → Category" mapping section
129- "Save Configuration" → "Konfiguration speichern"
130
131**Themes Tab:**
132- "Sidebar Widget Settings" → "Seitenleisten-Widget-Einstellungen"
133- "Week Start Day" section with Monday/Sunday options
134- "Itinerary Section" with Expanded/Collapsed options
135- "Visual Theme" → "Visuelles Design"
136- All theme names and descriptions
137- "Save Settings" → "Einstellungen speichern"
138
139### Added 120+ New Language Strings
140Comprehensive vocabulary for all admin interface elements in both English and German.
141
142### Technical Implementation
143- Extended $jsAdminLang object with additional Edit Recurring Dialog strings
144- Updated editRecurringSeries JavaScript function to use adminLang.* variables
145- All PHP echo statements now use $this->getLang() calls
146- Theme descriptions kept consistent with visual preview styling
147
148---
149
150## Version 6.10.6 (2026-02-13) - MANAGE RECURRING DIALOG LOCALIZATION
151
152### Localized Manage Recurring Series Dialog
153Complete translation of the "Manage" button dialog for recurring events:
154
155**Section Headers:**
156- "Manage Recurring Series" → "Wiederkehrende Serie verwalten"
157- "Extend Series" → "Serie erweitern"
158- "Trim Past Events" → "Vergangene Termine kürzen"
159- "Change Pattern" → "Muster ändern"
160- "Change Start Date" → "Startdatum ändern"
161- "Pause Series" / "Resume Series" → "Serie pausieren" / "Serie fortsetzen"
162
163**Labels & Buttons:**
164- All field labels (Add occurrences, Days apart, Remove before, New interval, etc.)
165- Action buttons (Extend, Trim, Change, Shift, Pause, Resume, Close)
166- Interval dropdown options (Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly)
167- Help text and notes
168
169**Confirmation Dialogs:**
170- Trim confirmation with date
171- Respace confirmation
172- Shift confirmation
173
174### Added 60+ Language Strings for Dialogs
175Complete vocabulary for recurring event management in both English and German.
176
177### Note on Browser Validation Messages
178"Please fill out this field" is a browser-native message controlled by the browser's language setting, not our plugin.
179
180## Version 6.10.5 (2026-02-13) - DIALOG LOCALIZATION
181
182### Localized All JavaScript Dialogs
183
184**New Namespace Dialog:**
185- Prompt text with examples now in German
186- Invalid namespace error message
187
188**Rename Namespace Dialog:**
189- Prompt text with current name
190
191**Delete Confirmations:**
192- Delete selected events confirmation
193- Delete namespace confirmation
194- Delete recurring series confirmation
195
196**Trim Recurring Events:**
197- "Counting..." / "Zähle..."
198- "Trimming..." / "Kürze..."
199- "No past recurring events found" message
200- "Found X past recurring events" confirmation
201- Button text resets
202
203### Added 15+ New Dialog Strings
204Both English and German translations for all interactive prompts and confirmations.
205
206## Version 6.10.4 (2026-02-13) - COMPLETE MANAGE TAB LOCALIZATION
207
208### Fixed Remaining English Strings
209
210**Namespace Explorer Control Bar:**
211- "➡️ Move" → "➡️ Verschieben"
212- "➕ New Namespace" → "➕ Neuer Namensraum"
213- "�� Cleanup" → "�� Bereinigen"
214- "0 selected" → "0 ausgewählt"
215- "%d selected" → "%d ausgewählt"
216
217**Recurring Events Button Tooltips:**
218- "Edit title, time, namespace, pattern" → "Titel, Zeit, Namensraum, Muster bearbeiten"
219- "Extend, trim, pause, change dates" → "Erweitern, kürzen, pausieren, Daten ändern"
220- "Delete all occurrences" → "Alle Vorkommen löschen"
221
222**JavaScript Confirmation Messages:**
223- "No events selected" → "Keine Termine ausgewählt"
224- Delete confirmation with count
225- Delete namespace confirmation
226- "Scanning..." → "Scanne..."
227- "Cleaning..." → "Bereinige..."
228- "No empty namespaces found" message
229- "Found X item(s) to clean up" → "X Element(e) zum Bereinigen gefunden"
230- "Proceed with cleanup?" → "Mit Bereinigung fortfahren?"
231
232### Technical
233- Added adminLang JavaScript object with all translatable strings
234- All dynamic JavaScript messages now use language system
235
236## Version 6.10.3 (2026-02-13) - RECURRING EVENTS & DROP TARGET LOCALIZATION
237
238### Additional Localization for Manage Events Tab
239
240**Recurring Events Table:**
241- Search placeholder: "Wiederkehrende Termine suchen..."
242- Table headers: Titel, Namensraum, Muster, Zeitraum, Anzahl, Quelle, Aktionen
243- Source labels: Markiert / Erkannt (was Flagged / Detected)
244- Action buttons: Bearb. / Verwalten / Lö. (was Edit / Manage / Del)
245- Pattern badges: Täglich, Wöchentlich, Monatlich, Jährlich, Benutzerdefiniert
246- Footer: "Gesamt: X Serien" (was "Total: X series")
247- No results message
248
249**Namespace Explorer Drop Zones:**
250- Header: "�� Zielbereich" (was "Drop Target")
251- Drop hint: "Hier ablegen" (was "Drop here")
252- Default namespace label consistent
253
254### Added 25+ New Language Strings
255- Recurring table columns and labels
256- Pattern translations
257- Action button labels
258- Drop zone labels
259
260## Version 6.10.2 (2026-02-13) - MANAGE EVENTS TAB LOCALIZATION
261
262### Localized: Manage Events Tab (Complete)
263All text in the Manage Events admin tab now uses the language system:
264
265**Events Manager Section:**
266- Page title, section header, description
267- Statistics labels (Total Events, Namespaces, JSON Files, Recurring)
268- "Last scanned" timestamp label
269- Button labels (Re-scan Events, Export All Events, Import Events)
270- "View Breakdown by Namespace" expandable section
271- Table headers (Namespace, Events, Files)
272
273**Important Namespaces Section:**
274- Section header and description
275- Visual Effects descriptions (Calendar Grid, Event Sidebar, Sidebar Widget, Day Popup)
276- Save button and hint text
277
278**Cleanup Old Events Section:**
279- Section header and description
280- Radio button labels (By Age, By Status, By Date Range)
281- Age options (Delete events older than, months, years)
282- Status options (Completed tasks, Past events)
283- Date range labels (From, To)
284- Namespace filter label and placeholder
285- Preview and Delete button labels
286- JavaScript confirmation messages
287- Loading/error states
288
289**Recurring Events Section:**
290- Section header
291- Button labels (Trim All Past, Rescan)
292
293**Namespace Explorer Section:**
294- Section header and description
295- Search placeholder
296- Control bar buttons (All, None, Delete, Move to)
297- Datalist placeholder
298
299### Added 60+ New Language Strings
300Both English and German language files expanded with comprehensive admin terminology.
301
302## Version 6.10.1 (2026-02-13) - LANGUAGE SYSTEM FIX
303
304### Bug Fix: Language Files Not Working
305- Fixed `getMenuText()` to use `$this->getLang('menu')` instead of hardcoded string
306- Admin menu now correctly shows "Kalenderverwaltung" in German
307- Admin tabs now use language system:
308  - "Manage Events" → "Termine verwalten"
309  - "Update Plugin" → "Plugin aktualisieren"
310  - "Outlook Sync" → "Outlook-Sync"
311  - "Themes" → "Designs"
312
313### Added More Language Strings
314- Admin tab labels
315- Admin section headers (Event Browser, Important Namespaces, etc.)
316- Sync settings labels
317- Common button labels (Run Now, Download, Upload, Delete, etc.)
318
319## Version 6.10.0 (2026-02-13) - GERMAN LANGUAGE SUPPORT
320
321### New Feature: German Language Translation
322- Added complete German (de) language file
323- Expanded English language file with comprehensive translatable strings
324- Both files include 100+ translation strings covering:
325  - General terms (calendar, events, dates)
326  - Event fields (title, description, time, etc.)
327  - Actions (add, edit, delete, save, cancel)
328  - Task-related terms
329  - Recurring event options
330  - Days of week and months
331  - User messages and confirmations
332  - Search functionality
333  - Sync status messages
334  - Admin section labels
335  - Sidebar widget labels
336  - Time conflict warnings
337
338### Note
339The language strings are now available for future implementation throughout the plugin UI. Currently the admin menu uses the language system; other strings can be integrated as needed.
340
341## Version 6.9.9 (2026-02-13) - CRITICAL SEARCH FIX
342
343### Bug Fix: Month Search Not Working
344- **Root cause:** Function name collision - there were two `fuzzyMatch` functions
345  - `window.fuzzyMatch` (for namespace search autocomplete) returns a score number or `null`
346  - Local `fuzzyMatch` (for event search) returns `true`/`false`
347- When filtering events, the wrong function was being called, returning `null` for all events
348- **Fix:** Renamed event search functions to `eventSearchNormalize` and `eventSearchMatch`
349- Month search now works correctly on first load and after navigation
350
351### Also in this version
352- Fixed jumpToDate to properly hide search clear button after navigation
353- Removed debug logging from production code
354
355## Version 6.9.8 (2026-02-12) - SEARCH & UI FIXES
356
357### Bug Fixes
358
359**All-Dates Search Navigation Fixed**
360- Clicking a search result now properly navigates to that event's month
361- Opens the day popup showing the event details
362- Was calling non-existent `loadMonth()` - now uses correct `navCalendar()`
363- Clears search results and restores normal event list view
364
365**"No Events" Message Fixed**
366- No longer shows "No events match your search" when in all-dates mode
367- All-dates mode has its own results display; the month-mode message was incorrectly appearing
368
369**Add Button Layout Fixed**
370- Search bar no longer pushes the "+ Add" button off the right edge
371- Search container has constrained max-width (160px) and proper flex settings
372- Header has overflow:hidden to prevent layout issues
373
374**Important Event Stars Fixed**
375- Stars now appear on initial page load (PHP rendering added)
376- Stars positioned outside the bar using CSS ::before pseudo-element
377- Added overflow:visible to event-indicators and event-bar containers
378- Bar remains full width; star sits in the left margin area
379
380### Technical
381- Star uses `event-bar-has-star` class for first-day-only display
382- jumpToDate() properly cleans up search state before navigation
383
384## Version 6.9.7 (2026-02-12) - IMPORTANT NAMESPACE IMPROVEMENTS
385
386### Bug Fix
387- **AJAX refresh now preserves important namespace highlighting**
388  - Important namespaces list now passed to JavaScript via data attribute
389  - Highlighting persists when navigating between months
390  - Works in both main calendar sidebar and standalone event panels
391
392### New Feature: Calendar Grid Star Icons
393- **Important events now show ⭐ on their color bars** in the calendar grid
394  - Small star appears on the first day of important events
395  - Tooltip prefixed with ⭐ for important events
396  - Visual distinction without cluttering the compact grid view
397
398### Admin Section Update
399- **Improved Important Namespaces description** in Admin → Calendar → Manage Events
400  - Now explains all visual effects:
401    - Calendar Grid: ⭐ star on event bars
402    - Event Sidebar: ⭐ star + highlighted background + accent border
403    - Sidebar Widget: Dedicated "Important Events" section
404    - Day Popup: Events shown with full details
405  - Better example placeholder text
406
407### Technical
408- Fixed PHP syntax error in fuzzy search (curly quotes replaced with escape sequences)
409- Important namespaces loaded once and stored in container dataset for JavaScript access
410
411## Version 6.9.6 (2026-02-12) - FUZZY SEARCH & SIDEBAR HIGHLIGHTING
412
413### Fuzzy Search
414- **Improved search matching:** Search is now more forgiving of punctuation differences
415  - "fathers day" matches "Father's Day"
416  - "new years" matches "New Year's Eve"
417  - Smart quotes, apostrophes, dashes, and common punctuation are ignored
418- **Multi-word search:** All words must be present but in any order
419  - "birthday john" matches "John's Birthday Party"
420- Works in both "this month" and "all dates" search modes
421
422### Important Namespace Highlighting (Calendar Sidebar)
423- Events from important namespaces now highlighted in the main calendar's event list sidebar
424- Same visual treatment as the itinerary sidebar widget:
425  - Subtle theme-colored background tint
426  - Right border accent bar
427  - ⭐ star icon before event title
428- Theme-specific colors:
429  - Matrix: green tint
430  - Purple: purple tint
431  - Pink: pink tint
432  - Professional: blue tint
433  - Wiki: light blue tint
434- Configure important namespaces in Admin → Calendar → Sync Settings
435
436## Version 6.9.5 (2026-02-12) - SEARCH MODE TOGGLE
437
438### New Feature: Search Scope Toggle
439- **Search mode button** (��/��) added next to search input in both calendar views
440- **Default mode** (��): Search only the current month's events (fast, local filtering)
441- **All dates mode** (��): Search across ALL calendar data via AJAX
442  - Click the �� button to toggle to �� (green highlight when active)
443  - Requires at least 2 characters to search
444  - Shows results with date, time, and namespace
445  - Click any result to jump to that date and open the day popup
446  - Limited to 50 results for performance
447- Search placeholder text updates to indicate current mode
448- Compact button design takes minimal space
449
450### UI Details
451- Button sits flush with search input (no gap)
452- Green highlight when "all dates" mode is active
453- Results show full date (e.g., "Mon, Feb 12, 2026")
454- Namespace badge shown for multi-namespace setups
455
456## Version 6.9.4 (2026-02-12) - POPUP IMPROVEMENTS & IMPORTANT HIGHLIGHTING
457
458### Features
459- **Draggable Day Popup:** Calendar day popup window is now draggable by its header
460  - Click and drag the header to move the popup
461  - Header shows move cursor on hover
462  - Clicking the close button (×) still closes normally
463
464- **Important Namespace Highlighting in Sidebar:**
465  - Events from "important" namespaces (defined in Admin → Sync Settings) now have subtle highlighting
466  - Theme-aware background tint (green for Matrix, purple for Purple, pink for Pink, blue for Professional/Wiki)
467  - Right border accent bar for visual distinction
468  - ⭐ star icon appears before event title
469  - Works in Today, Tomorrow, and Important Events sections
470
471### Bug Fix
472- **Fixed event display in day popup:** Long titles no longer cut off the edit/delete buttons
473  - Event title now wraps to multiple lines instead of truncating
474  - Actions buttons always visible
475  - Time, date range, and namespace badges wrap properly
476  - Improved flex layout for better responsiveness
477
478## Version 6.9.3 (2026-02-12) - ADMIN EDIT DIALOG CONSISTENCY
479
480### UI Improvement
481- **Edit Recurring Event dialog** in Admin section now matches the main event editor exactly:
482  - Same dark theme styling (#1e1e1e background, #2c3e50 header)
483  - Same header layout with close button (×) in top-right corner
484  - Same input styling (dark inputs with green accent borders)
485  - Same footer with Cancel/Save buttons layout
486  - Same recurrence options box styling
487  - Consistent spacing, fonts, and colors throughout
488
489## Version 6.9.2 (2026-02-12) - MOBILE DIALOG FIX
490
491### Bug Fix
492- **Fixed:** Description textarea now extends full width on mobile/phone view
493  - Reduced form padding from 12px to 8px on screens ≤480px
494  - Added explicit `width: 100%` and `box-sizing: border-box` to textarea
495  - Ensured all form inputs/selects use full available width on mobile
496
497## Version 6.9.1 (2026-02-11) - ADMIN RECURRING EVENTS INTEGRATION
498
499### Admin Panel Updates
500- **Enhanced Recurring Events Table:**
501  - Pattern column now shows color-coded badges (daily=blue, weekly=green, monthly=orange, yearly=pink)
502  - "First" column renamed to "Range" showing full date span (e.g., "Feb 1, 2026 → Dec 15, 2026")
503  - Patterns now read from stored metadata when available, with smart fallback to detection
504
505- **Edit Recurring Series Dialog:**
506  - Full recurrence pattern editing (not just simple intervals)
507  - "Repeat every [N] [period]" with dropdown for Daily/Weekly/Monthly/Yearly
508  - Weekly: Day-of-week checkboxes (Sun-Sat) with current days pre-selected
509  - Monthly: Radio choice between "Day of month" or "Weekday pattern"
510  - Ordinal weekday selector (First/Second/Third/Fourth/Fifth/Last + day dropdown)
511  - Pre-populates all fields from stored recurrence metadata
512  - Properly reschedules future events using new pattern
513
514- **Manage Series Dialog:**
515  - Updated summary to show date range
516  - Extend/trim/change pattern functions work with new patterns
517
518### Technical Updates
519- `findRecurringEvents()` captures all recurrence metadata from events
520- `formatRecurrencePattern()` generates human-readable pattern descriptions
521- `detectRecurrencePattern()` enhanced to detect more interval variations
522- `editRecurringSeries()` PHP handler processes new recurrence parameters
523- `generateRecurrenceDates()` creates dates matching complex patterns
524- Recurrence metadata preserved and updated across all event occurrences
525
526## Version 6.9.0 (2026-02-11) - ADVANCED RECURRING EVENTS
527
528### New Features
529- **Enhanced Recurring Event Options:**
530  - **Interval support:** Repeat every N days/weeks/months/years (e.g., every 3 months)
531  - **Weekly day selection:** Choose specific days of the week (e.g., Mon, Wed, Fri)
532  - **Monthly options:**
533    - Day of month: Repeat on specific day (e.g., 15th of each month)
534    - Ordinal weekday: Repeat on pattern (e.g., 2nd Wednesday, Last Friday)
535  - **Examples now possible:**
536    - Every 2 weeks on Monday and Thursday
537    - Every 3 months on the 15th
538    - Every other month on the 2nd Wednesday
539    - Every year on the same date
540    - Last Friday of every month
541
542### UI Changes
543- Redesigned recurring options section with bordered container
544- "Repeat every [N] [period]" input with interval number field
545- Day-of-week checkboxes for weekly recurrence
546- Radio buttons for monthly: "Day of month" vs "Weekday pattern"
547- Ordinal dropdown (First/Second/Third/Fourth/Fifth/Last)
548- Day dropdown (Sunday through Saturday)
549- Helper text for end date field
550
551### Technical Details
552- New parameters: recurrenceInterval, weekDays, monthlyType, monthDay, ordinalWeek, ordinalDay
553- Recurrence pattern stored in event data for reference
554- Maximum 365 occurrences (up from 100) to support daily events for a year
555- Smart date iteration for complex patterns
556
557## Version 6.8.1 (2026-02-11) - ITINERARY DEFAULT STATE SETTING
558
559### New Feature
560- **Added:** Option to set itinerary default state (expanded or collapsed)
561  - New setting in Admin → Calendar → �� Sidebar Widget Settings
562  - "�� Itinerary Section" with two options:
563    - **Expanded** (default) - Show itinerary sections by default
564    - **Collapsed** - Hide itinerary sections by default (click bar to expand)
565  - Setting persists across page loads
566  - Arrow indicator and content state reflect the saved preference on page load
567
568## Version 6.8.0 (2026-02-11) - COLLAPSIBLE ITINERARY
569
570### New Feature
571- **Added:** Collapsible Itinerary bar in sidebar week view
572  - New "ITINERARY" bar below the week calendar (styled like +ADD EVENT bar)
573  - Click to collapse/expand the Today, Tomorrow, and Important Events sections
574  - Arrow indicator shows expanded (▼) or collapsed (►) state
575  - Smooth animation when collapsing/expanding
576  - Clicking a day in the week grid shows that day's events ABOVE the Itinerary bar
577  - Selected day events remain visible whether itinerary is expanded or collapsed
578  - Shows "No upcoming events" message when there are no itinerary items
579
580### UI Layout (top to bottom)
5811. Header with clock/system stats
5822. +ADD EVENT bar
5833. Week grid (7 days)
5844. Selected day's events (appears when clicking a day)
5855. ITINERARY bar (click to collapse/expand)
5866. Today section (collapsible)
5877. Tomorrow section (collapsible)
5888. Important Events section (collapsible)
589
590## Version 6.7.9 (2026-02-11) - FIX EVENTS MANAGER STATISTICS
591
592### Bug Fixes
593- **Fixed:** �� Events Manager showing inflated count (1195 instead of ~605)
594  - The `scanDirectoryForStats()` function was counting ALL entries in JSON files
595  - Now properly filters to only count date keys (`YYYY-MM-DD` format)
596  - Now validates events have `id` and `title` before counting
597  - Click "�� Rescan" to update the statistics with correct count
598
599## Version 6.7.8 (2026-02-11) - FILTER INVALID EVENTS
600
601### Bug Fixes
602- **Fixed:** Event Manager showing "(untitled)" and "mapping" entries
603  - Root cause: Calendar JSON files contain metadata keys (like "mapping") that were being parsed as events
604  - Added date format validation (`YYYY-MM-DD`) to skip non-date keys
605  - Added validation to require `id` and `title` fields for events
606  - Applied fix to all event-reading functions:
607    - `getEventsByNamespace()` - main event listing
608    - `scanNamespaceRecursive()` - namespace scanning
609    - `searchEvents()` - event search
610    - `findEventsByTitle()` - title lookup
611    - `deleteRecurringSeries()` - recurring deletion
612    - `renameRecurringSeries()` - recurring rename
613    - Recurring events scanner
614    - Recurring cleanup function
615
616### Technical Details
617- Date keys must match pattern `/^\d{4}-\d{2}-\d{2}$/`
618- Events must have non-empty `id` and `title` fields
619- All other entries in JSON files are now skipped
620
621## Version 6.7.7 (2026-02-11) - FIX PHP PATH & CLEAR LOG
622
623### Bug Fixes
624- **Fixed:** "sh: 1: '/usr/bin/php': not found" error - removed escapeshellarg() which was adding quotes around the PHP path
625- **Fixed:** "Could not clear log file" - added better error messages showing exact issue
626- **Improved:** findPhpBinary() now uses is_executable() and `which php` for detection
627- **Improved:** clearLogFile() now shows specific error (file not found, not writable, etc.)
628
629## Version 6.7.6 (2026-02-11) - FIX SYNC CONTROLS & LOGGING
630
631### Bug Fixes
632- **Fixed:** Double log entries - sync script logs internally, removed redundant stdout capture
633- **Fixed:** Manual sync not appearing in log - removed `--verbose` flag since script logs directly
634- **Fixed:** Better error messages when sync fails
635
636### Improvements
637- **Improved:** Sync now runs without `--verbose` flag - script logs to file internally
638- **Improved:** Crontab warning if `>>` redirect is detected (causes duplicate entries)
639- **Improved:** Log viewer now shows full path to log file
640- **Improved:** Better pre-flight checks (directory creation, file permissions)
641- **Improved:** PHP binary path is now properly escaped
642
643### Crontab Update Required
644If your crontab has `>> sync.log 2>&1`, remove it to prevent duplicate log entries:
645
646**Before (causes duplicates):**
647```
648*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php >> /var/www/html/dokuwiki/data/meta/calendar/sync.log 2>&1
649```
650
651**After (correct):**
652```
653*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php
654```
655
656The script automatically logs to `data/meta/calendar/sync.log`.
657
658## Version 6.7.5 (2026-02-11) - FIX SYNC LOG OUTPUT
659
660### Bug Fixes
661- **Fixed:** Sync log not showing output when running sync from admin panel
662  - Added `--verbose` flag to sync command so output is captured
663  - Sync output is now captured and written to the log file
664  - Log directory is created if it doesn't exist
665  - Better error handling if log directory isn't writable
666  - Command being executed is logged for debugging
667
668### Changes
669- Sync now runs in verbose mode when triggered from admin panel
670- All sync output (stdout/stderr) is written to the log file
671- Pre-flight check ensures log directory exists and is writable
672
673## Version 6.7.4 (2026-02-11) - FIX MANUAL SYNC EXECUTION
674
675### Bug Fix
676- **Fixed:** "Could not open input file: sync_outlook.php" when running manual sync
677  - The `$pluginDir` variable was missing from `runSync()` function
678  - Added `$pluginDir = DOKU_PLUGIN . 'calendar'` before building the command
679  - Sync now properly changes to the plugin directory before executing
680
681## Version 6.7.3 (2026-02-11) - FIX ADDITIONAL COUNT TYPE ERRORS
682
683### Bug Fix
684- **Fixed:** Additional TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given"
685  - Fixed in `scanDirectoryForStats()` (line 5453)
686  - Fixed in namespace delete function (line 4137)
687  - Fixed in export function (line 5516)
688  - Fixed in import function (line 5636)
689  - All locations now check `is_array()` before calling `count()`
690
691## Version 6.7.2 (2026-02-11) - FIX EVENT MANAGER TYPE ERROR
692
693### Bug Fix
694- **Fixed:** TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given"
695  - Added array type checks when iterating over calendar event data
696  - Protects against corrupted JSON data where event lists may not be arrays
697  - Added safeguards in `getEventsByNamespace()` and `scanNamespaceRecursive()`
698
699## Version 6.7.1 (2026-02-11) - BULK DELETE FOR BACKUPS
700
701### Changed
702- **Improved:** Backup management now uses bulk selection and delete
703  - Added checkboxes next to each backup file
704  - Added "Select All" checkbox in the action bar
705  - Added "��️ Delete Selected" button (appears when backups are selected)
706  - Removed individual delete buttons from each row
707  - Shows count of selected backups
708  - Backups are deleted sequentially with visual feedback
709
710### UI
711- Clean action bar at top of backup table with selection controls
712- Selected count updates in real-time
713- Rows fade out smoothly when deleted
714
715## Version 6.7.0 (2026-02-11) - IMPROVED RESTORE FUNCTION
716
717### Changed
718- **Improved:** Restore function now uses DokuWiki's Extension Manager API
719  - Uses `helper_plugin_extension_extension` for proper installation
720  - Handles permissions correctly through DokuWiki's standard plugin installation process
721  - Falls back to manual instructions if Extension Manager is not available
722
723### How It Works
724When you click "�� Restore" on a backup:
7251. The plugin loads DokuWiki's extension helper
7262. Calls `installFromLocal()` with the backup ZIP file
7273. DokuWiki's Extension Manager handles file extraction and installation
7284. This ensures proper permissions and follows DokuWiki standards
729
730### Fallback
731If the Extension Manager helper is not available, you'll be prompted to:
732- Download the backup ZIP
733- Go to Admin → Extension Manager → Install
734- Upload the ZIP file manually
735
736## Version 6.6.9 (2026-02-11) - REMOVE RESTORE FUNCTION
737
738### Removed
739- **Removed:** "Restore" button from backup management
740- **Removed:** `restoreBackup()` PHP method
741- **Removed:** `restoreBackup()` JavaScript function
742
743### Added
744- **Added:** Informational note in backup section explaining how to restore:
745  - Download the backup ZIP file
746  - Go to Admin → Extension Manager → Install
747  - Upload the ZIP file there
748  - DokuWiki's extension manager handles installation safely with proper permissions
749
750### Reason
751The restore function required write access to the plugin directory, which web servers typically don't have (and shouldn't have) for security reasons. Using DokuWiki's built-in Extension Manager is the safer and more reliable approach.
752
753## Version 6.6.8 (2026-02-11) - FIX THEME KEYS & FILE PERMISSIONS
754
755### Bug Fixes
756- **Fixed:** "Undefined array key" warnings for wiki theme (pastdue_color, pastdue_bg, tomorrow_bg, etc.)
757  - Added missing theme keys to `getWikiTemplateColors()` return array
758
759- **Fixed:** "Permission denied" errors for sync.log and sync_state.json
760  - Moved sync files from plugin directory to `data/meta/calendar/` (writable location)
761  - Updated sync_outlook.php, admin.php to use new paths
762  - sync_config.php remains in plugin directory (must be manually configured)
763
764- **Fixed:** `findEventNamespace` now returns the actual DIRECTORY where event file lives
765  - This ensures deletion works correctly when stored namespace differs from file location
766
767### Note on lang.php Permission Error
768If you see a permission error for lang/en/lang.php, this occurs when trying to restore/update the plugin via admin panel and the web server doesn't have write access to the plugin directory. This is normal security - update via command line or FTP instead.
769
770## Version 6.6.7 (2026-02-11) - FIX NAMESPACE CHANGE BUG (PART 2)
771
772### Bug Fix
773- **Fixed:** Events in the DEFAULT namespace (no namespace) could not be moved to other namespaces
774  - Root cause: The comparison `$oldNamespace !== ''` was always FALSE for default namespace events
775  - Changed to `$oldNamespace !== null` to properly distinguish between "event not found" (null) and "event in default namespace" ('')
776  - This allows moving events FROM the default namespace TO any other namespace
777  - Also fixed null coalescing for recurring events: `$oldNamespace ?? $namespace` instead of `$oldNamespace ?: $namespace`
778
779## Version 6.6.6 (2026-02-11) - FIX NAMESPACE CHANGE & DELETE BUGS
780
781### Bug Fixes
782- **Fixed:** Changing an event's namespace now properly moves the event instead of creating a duplicate
783  - Root cause: `findEventNamespace()` was searching in the NEW namespace instead of ALL namespaces
784  - Now uses wildcard search `'*'` to find the existing event regardless of its current namespace
785
786- **Fixed:** Deleting an event no longer causes the calendar to filter by the deleted event's namespace
787  - Root cause: After deletion, `reloadCalendarData()` was called with the deleted event's namespace
788  - Now retrieves the calendar's original namespace from `container.dataset.namespace`
789  - Also fixed in `saveEventCompact()` and `toggleTaskComplete()` for consistency
790
791## Version 6.6.5 (2026-02-11) - ADD AUTOCOMPLETE ATTRIBUTES
792
793### Improved
794- Added `autocomplete="new-password"` to client secret input field
795- Added `autocomplete="email"` to user email input field
796- Added `autocomplete="off"` to client ID input field
797- Follows browser best practices for form inputs
798
799## Version 6.6.4 (2026-02-11) - FIX GEOLOCATION VIOLATION
800
801### Bug Fix
802- **Fixed:** Browser violation "Only request geolocation information in response to a user gesture"
803- Weather widget now uses Sacramento as the default location on page load
804- Geolocation is only requested when user **clicks** on the weather icon
805- Click the weather icon to get your local weather (browser will prompt for permission)
806- Weather icon shows tooltip "Click for local weather" and has pointer cursor
807
808## Version 6.6.3 (2026-02-11) - FIX MUTATIONOBSERVER ERROR
809
810### Bug Fix
811- **Fixed:** `Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'` error
812- Root cause: MutationObserver tried to observe `document.body` before DOM was ready
813- Added `setupMutationObserver()` function that waits for DOMContentLoaded before attaching observer
814
815## Version 6.6.2 (2026-02-11) - FIX CONFLICT TOOLTIP JAVASCRIPT LOADING
816
817### Bug Fix
818- **Critical:** Fixed `showConflictTooltip is not defined` and `hideConflictTooltip is not defined` errors
819- Root cause: `addAssets()` in action.php was loading empty `script.js` instead of `calendar-main.js`
820- Changed `addAssets()` to load `calendar-main.js` directly
821- Updated `script.js` to dynamically load `calendar-main.js` as a fallback mechanism
822
823## Version 6.6.1 (2026-02-11) - SECURITY FIXES
824
825### Security
826- **Critical:** Removed `eval()` remote code execution vulnerability in config import
827- **Critical:** Added admin authentication requirement to `get_system_stats.php` endpoint
828- **High:** Added CSRF token verification to all write operations (save, delete, toggle)
829- **High:** Fixed path traversal vulnerabilities in namespace delete/rename functions
830- **High:** Added admin privilege verification to AJAX admin routes
831
832### Improved
833- **Input Validation:** Date format (YYYY-MM-DD), time format (HH:MM), color format (#RRGGBB)
834- **Input Validation:** Year range (1970-2100), month range (1-12), namespace format
835- **Input Validation:** Recurrence type whitelist, title/description length limits
836- **Debug Logging:** All debug logging now conditional on `CALENDAR_DEBUG` constant (off by default)
837- **JSON Handling:** Added `safeJsonRead()` helper with proper error handling
838- **Timezone:** Sync script now uses configured timezone instead of hardcoded value
839
840### Code Quality
841- Documented intentional switch fallthrough in `get_system_stats.php`
842- Standardized error response format
843
844## Version 6.6.0 (2026-02-11) - BACKUP & UI IMPROVEMENTS
845
846### Fixed
847- **Backup:** Fixed recursive directory backup to properly include all subdirectories (including `lang/`)
848- **Backup:** Now uses `SELF_FIRST` iterator to process directories before their contents
849- **Backup:** Empty directories are now explicitly added with `addEmptyDir()` to preserve structure
850
851### UI Change
852- **Namespace Explorer:** Cleanup status message now appears prominently at top of section
853- Previously status message was at bottom, easy to miss after cleanup operations
854
855## Version 6.5.5 (2026-02-11) - FIX AJAX ROUTING & MOVE CLEANUP BUTTON
856
857### Bug Fix
858- All admin AJAX actions (cleanup, rescan, extend, trim, pause, resume, change start/pattern) were returning "Unknown action"
859- Root cause: AJAX calls go through `action.php`'s switch statement, not `admin.php`'s `handle()` method
860- Added routing in `action.php`: new cases forward to `admin.php` via `routeToAdmin()` helper
861- Added public `handleAjaxAction()` method in `admin.php` as the entry point from `action.php`
862
863### UI Change
864- Moved "�� Cleanup" button from standalone section to inline next to "➕ New Namespace" in the control bar
865- Status messages still appear below the namespace explorer
866
867## Version 6.5.4 (2026-02-11) - FIX PHP PARSE ERROR IN CLEANUP JS
868
869### Bug Fix
870- Root cause: `style='color:...'` single quotes inside PHP `echo '...'` block terminated the PHP string prematurely
871- PHP saw `color:#e74c3c` as unexpected PHP code instead of part of the JS string
872- Fixed all 5 occurrences in cleanupEmptyNamespaces JS: escaped single quotes as `\'`
873- Added `adminColors` JS object (text, bg, border) injected from PHP `$colors` at render time
874- Cleanup detail text uses `adminColors.text` to respect DokuWiki template theme colors
875
876## Version 6.5.3 (2026-02-11) - FIX CLEANUP NAMESPACES PARSE ERROR
877
878### Bug Fix
879- Fixed PHP parse error on line 1089 caused by `$colors['text']` PHP variable inside JS string concatenation
880- The cleanup results detail list now uses hardcoded `#666` for text color instead of attempting PHP interpolation within JS runtime code
881
882## Version 6.5.2 (2026-02-11) - CLEANUP EMPTY NAMESPACES
883
884### New Feature
885- "�� Cleanup Empty Namespaces" button added at bottom of Namespace Explorer section
886- Dry-run scan first: shows exactly what will be removed with bullet-point details in confirm dialog
887- Removes empty calendar folders (0 JSON files or all-empty JSON files) from any namespace
888- Removes parent namespace directories if they become empty after calendar folder removal
889- Root calendar directory is never removed
890- AJAX-powered with inline status showing results after cleanup
891- Page auto-reloads after 2 seconds to refresh the namespace explorer view
892- Recursively scans all nested namespace directories via `findAllCalendarDirsRecursive()`
893
894## Version 6.5.1 (2026-02-11) - TRIM ALL PAST: SHOW COUNT BEFORE DELETE
895
896### Improved
897- "Trim All Past" button now does a dry-run count before showing the confirmation dialog
898- Confirmation shows exact count: "Found 47 past recurring events to remove"
899- If zero found, shows "No past recurring events found to remove" instead of confirm
900- PHP handler supports `dry_run` parameter that counts without deleting
901
902## Version 6.5.0 (2026-02-11) - BULK TRIM ALL PAST RECURRING EVENTS
903
904### Bulk Action
905- Red "✂️ Trim All Past" button added next to the Rescan button in the Recurring Events section header
906- Removes ALL past occurrences (before today) from EVERY recurring series in one click
907- Only removes events with `recurring` or `recurringId` flags — non-recurring events are untouched
908- Confirmation dialog required before execution
909- AJAX-powered with inline status showing count removed, then auto-rescans the table
910- Searches all calendar directories recursively
911
912## Version 6.4.9 (2026-02-11) - FIX RECURRING EDIT/DELETE: SEARCH ALL DIRECTORIES
913
914### Bug Fix
915- Edit and Delete recurring series now search ALL calendar directories instead of building a path from the namespace field
916- Root cause: event's `namespace` field (stored in JSON) can differ from the filesystem directory where the file lives
917- Both handlers now use `findCalendarDirs()` to collect every calendar directory recursively
918- Events matched by title AND namespace field (case-insensitive) for precise targeting
919- Edit handler rewritten: rename/time/namespace updates in Pass 1, interval respace in Pass 2
920- New `findCalendarDirs()` helper method for recursive directory discovery
921
922## Version 6.4.8 (2026-02-11) - FIX PHP PARSE ERROR IN MANAGE DIALOG
923
924### Bug Fix
925- Rewrote `manageRecurringSeries()` JS function using string concatenation instead of template literals
926- JS template literals (`${...}`) inside PHP echo blocks caused PHP to parse them as variable interpolation
927- All inline onclick handlers now use `\x27` for single quotes to avoid escaping conflicts
928
929## Version 6.4.7 (2026-02-11) - RECURRING EVENTS: FULL MANAGEMENT CONTROLS
930
931### New "Manage" Button per Series
932- Orange "Manage" button opens a comprehensive management dialog for each recurring series
933
934### Extend Series
935- Add N new occurrences after the last event in the series
936- Configurable interval: Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly
937- New events copy title, time, color, namespace, and recurring flag from the last event
938
939### Trim Past Events
940- Remove all occurrences before a selected cutoff date
941- Confirmation required before deletion
942- Cleans up empty date keys and files automatically
943
944### Change Pattern
945- Respace future occurrences with a new interval
946- Past events are untouched; only future events are removed and re-created
947- First future event becomes the anchor date
948
949### Change Start Date
950- Shift ALL occurrences by the difference between old and new start date
951- Events are removed from old positions and re-created at new positions
952- Preserves spacing between all events
953
954### Pause/Resume
955- Pause: adds ⏸ prefix and paused flag to all future occurrences
956- Resume: removes ⏸ prefix and paused flag from all occurrences
957- Button toggles based on whether series is currently paused
958
959### Infrastructure
960- New shared `recurringAction()` JS helper for all AJAX management operations
961- New `getRecurringSeriesEvents()` PHP helper for finding all events in a series
962- Status messages shown inline in the management dialog
963- Close button triggers automatic rescan to refresh the table
964
965## Version 6.4.6 (2026-02-11) - RECURRING EVENTS: RESCAN BUTTON & IMPROVED LOGIC
966
967### Rescan Button
968- Green "�� Rescan" button added to the Recurring Events section header
969- AJAX-powered: rescans all calendar data and refreshes the table without page reload
970- Shows count of found series briefly after scan completes
971
972### Improved Detection Logic
973- Events with `recurring: true` flag are now detected first (grouped by `recurringId`)
974- Pattern-detected events (3+ same-title occurrences) are found separately and deduplicated
975- New "Source" column shows ��️ Flagged (has recurring flag) vs �� Detected (pattern match)
976- Median interval used for pattern detection instead of just first two dates (more robust)
977- New patterns recognized: Quarterly, Semi-annual, and "Every ~N days" for custom intervals
978- Empty/invalid titles and malformed date arrays are now skipped safely
979- Dates are deduplicated before counting (prevents inflated counts from multi-day events)
980- Nested namespace directories now scanned recursively
981- Results sorted alphabetically by title
982
983## Version 6.4.5 (2026-02-11) - ADMIN VERSION HISTORY OVERHAUL
984
985### Version History Viewer
986- All purple (#7b1fa2) accent colors replaced with green (#00cc07) to match admin theme
987- Changelog parser now handles `###` subsection headers (rendered as green bold labels)
988- Plain `- ` bullet items now parsed and categorized under their subsection
989- Previously only `- **Type:** description` format was recognized
990
991### Current Release Button
992- Green "Current Release" button added between nav arrows
993- Jumps directly to the card matching the running version from plugin.info.txt
994- Running version card shows green "RUNNING" badge and thicker green border
995
996## Version 6.4.4 (2026-02-11) - WIKI THEME: PAST EVENTS TOGGLE BACKGROUND
997
998### Fix
999- Wiki theme past events pulldown (retracted state) now uses `__background_neu__` (`--cell-today-bg`)
1000- Previously used `--cell-bg` which appeared unthemed/white
1001
1002## Version 6.4.3 (2026-02-11) - WIKI THEME: DAY HEADERS BACKGROUND
1003
1004### Fix
1005- Wiki theme SMTWTFS day headers now use `__background_neu__` (`--cell-today-bg`) instead of `--background-header`
1006
1007## Version 6.4.2 (2026-02-11) - WIKI THEME: DAY HEADERS (INITIAL)
1008
1009### Wiki Theme Day Headers
1010- Added explicit CSS override for `.calendar-theme-wiki .calendar-day-headers`
1011- Day header text uses `--text-primary` (template's `__text__` color)
1012
1013## Version 6.4.1 (2026-02-11) - WIKI THEME: EVENT HIGHLIGHT
1014
1015### Fix
1016- Wiki theme event highlight (when clicking calendar bar) now uses `themeStyles.header_bg` (`__background_alt__`) instead of hardcoded blue (#dce9f5)
1017- Subtle shadow instead of blue glow
1018
1019## Version 6.4.0 (2026-02-11) - DARK READER: SECTION BAR COLOR MATCHING
1020
1021### Fix
1022- Wiki theme section left bar now uses a `<div>` with `background` instead of `border-left`
1023- Dark Reader maps the same color differently for border vs background properties, causing visual mismatch
1024- Both the bar and header now use `background`, so Dark Reader maps them identically
1025- Flex layout wrapper added for wiki theme sections
1026- Wiki fallback colors updated: `border` key now uses `#ccc` (matching `__border__`) instead of `#2b73b7`
1027
1028## Version 6.3.9 (2026-02-10) - WIKI THEME: SECTION BAR FIX (ATTEMPT)
1029
1030### Fix
1031- Simplified wiki section container — removed `wiki-section-container` class
1032- Added `background` from `$themeStyles['bg']` to section container
1033
1034## Version 6.3.8 (2026-02-10) - WIKI THEME: BUTTON & SECTION HEADER COLORS
1035
1036### Wiki Theme Buttons
1037- Nav buttons (< >), Today button, and panel buttons now use `__link__` color background with white text
1038- CSS overrides for `.calendar-theme-wiki .cal-nav-btn`, `.cal-today-btn`, panel buttons
1039
1040### Wiki Theme Section Headers
1041- Today: `__link__` background (accent/link color)
1042- Tomorrow: `__background_alt__` background (alternate background)
1043- Important: `__border__` background (border color)
1044- Each section now has a distinct color from the template palette
1045
1046## Version 6.3.7 (2026-02-10) - WIKI THEME CHECKBOX FIX
1047
1048### Fix
1049- Wiki theme checkbox override changed from `border-color` to full `border: 2px solid` shorthand
1050- Properly overrides the base rule which uses `border` shorthand
1051- Hover state also uses full shorthand
1052
1053## Version 6.3.6 (2026-02-10) - WIKI THEME CHECKBOX BORDER COLOR
1054
1055### Fix
1056- Wiki theme unchecked checkboxes now use `--border-main` (template's `__border__` color) for border
1057- Checked state fills with border color
1058- Hover state uses border color
1059- Applied to calendar, sidebar, and eventlist containers
1060
1061## Version 6.3.5 (2026-02-10) - WIKI THEME: ALLOW DARK READER ON HEADERS
1062
1063### Fix
1064- Wiki theme section headers (Today/Tomorrow/Important) no longer use `!important` or `-webkit-text-fill-color`
1065- Dark Reader can now freely adjust background, text color, and borders on wiki theme headers
1066- Clicked-day panel header and section border-left also unlocked for wiki theme
1067- All other themes (matrix/purple/pink/professional) retain full Dark Reader protection
1068
1069## Version 6.3.4 (2026-02-10) - WIKI THEME: BORDER COLOR FOR HEADERS & BADGES
1070
1071### Wiki Theme Color Remapping
1072- `border` (accent color) now maps to template's `__border__` instead of `__link__`
1073- This affects: section headers (Today/Tomorrow/Important), badges (TODAY, namespace), sidebar widget border, clicked-day panel, `--border-main` CSS variable
1074- `text_bright` still maps to `__link__` for link text and accent text
1075- Section headers all use the same `__border__` color for consistent appearance
1076- Updated COLOR_SCHEME mapping documentation
1077
1078## Version 6.3.3 (2026-02-10) - WIKI THEME SECTION HEADER TEXT COLOR
1079
1080### Fix
1081- Wiki theme Today/Tomorrow/Important section header text now uses `$themeStyles['text_primary']` (mapped from template's `__text__` color) instead of hardcoded white
1082- Clicked-day panel header text also uses template text color for wiki theme
1083- Professional theme remains white text on blue headers
1084
1085## Version 6.3.2 (2026-02-10) - FIX THEME NOT UPDATING ON SIDEBAR EVENTLIST
1086
1087### Bug Fix
1088- Added `$renderer->nocache()` to the render function
1089- DokuWiki was caching the rendered sidebar HTML, so theme changes made in admin were never reflected until the page was manually edited
1090- Now all calendar/eventlist/eventpanel outputs are rendered fresh on each page load, picking up the current theme from `calendar_theme.txt`
1091
1092## Version 6.3.1 (2026-02-10) - EVENTLIST THEMING
1093
1094### {{eventlist}} Theme Support
1095- Eventlist containers now receive theme class (`eventlist-theme-matrix`, etc.) and full CSS variable injection
1096- Dark themes get themed border + glow, light themes get subtle border
1097- Container background set from `$themeStyles['bg']` with `!important`
1098
1099### Eventlist CSS Theme Rules (all 3 dark themes)
1100- Title, header, time, date, body, links, strong, code, namespace badge, empty state
1101- Today header, clock, date — all with `color` + `-webkit-text-fill-color` `!important`
1102- Item borders, section backgrounds, code block backgrounds
1103- Full Dark Reader protection via same inline+CSS approach as calendar/sidebar
1104
1105## Version 6.3.0 (2026-02-10) - DARK READER COMPATIBILITY & COMPLETE THEMING
1106
1107### Dark Reader Browser Extension Compatibility
1108All 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.
1109
1110**Protected elements:**
1111- Section headers (Today/Tomorrow/Important) — background, text color, text-fill-color
1112- Clicked-day panel header — background, text color, close button
1113- All badges (TODAY, PAST DUE, namespace, panel namespace, eventlist-simple) — background, text, text-fill-color
1114- Event titles, meta, descriptions — color with !important via CSS
1115- Day numbers, nav buttons, calendar day headers — color with !important via CSS
1116- System status bars — inline background !important on tracks and fills
1117- System tooltips — background, border-color, text color all set via setProperty with !important
1118- Section left border bars — border-left with !important
1119- Event color indicator bars — border-left-color with !important
1120- Sidebar section event text (Purple and Pink themes)
1121
1122### Complete CSS Variable Audit (41 conversions in v6.1.1)
1123- All remaining hardcoded colors in style.css converted to CSS variable references
1124- Calendar borders, text colors, backgrounds, input focus shadows, accent borders
1125- Only legitimate hardcodes remain (keyframe animations, theme-specific override blocks)
1126
1127### Semantic Color System
1128- New CSS variables: `--pastdue-color`, `--pastdue-bg`, `--pastdue-bg-strong`, `--pastdue-bg-light`
1129- New CSS variables: `--tomorrow-bg`, `--tomorrow-bg-strong`, `--tomorrow-bg-light`
1130- Injected into all 3 CSS var blocks (full calendar, event panel, sidebar widget)
1131- Today/Tomorrow/Important section colors now theme-derived instead of hardcoded
1132
1133### Section Headers Fully Themed
1134- Today/Tomorrow/Important headers use theme accent colors instead of fixed green/orange/purple
1135- Matrix: bright/standard/dim green, Purple: bright/standard/dim purple, Pink: hot/medium/light pink
1136- Professional: blue shades, Wiki: template-derived colors
1137- Dark theme headers use dark background color for text contrast
1138
1139### Pink Theme Enhancements
1140- **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
1141- **Firework button hover** — `pink-firework-burst` keyframe animation with multi-point radiating box-shadows, scale/brightness effects on hover, instant flash on click
1142- **Checkbox glow** — hot pink border with ambient glow, hover intensifies, checked fills with glow
1143
1144### All Theme Checkbox Theming
1145- Matrix: bright green border + green glow, Purple: purple border + purple glow
1146- Pink: hot pink border + pink glow (with enhanced ambient effect)
1147- Hover scales 1.1x with intensified glow on all themes
1148- Checked state fills with theme accent color + outer glow
1149
1150### System Tooltips Themed
1151- Both tooltip functions use theme-derived colors from `$themeStyles`
1152- Green tooltip: `text_bright`, Purple: `border`, Orange: `text_primary`
1153- Background from `$themeStyles['bg']`, divider borders use theme accent colors
1154- All properties set with `style.setProperty(prop, value, "important")`
1155
1156### Namespace Filter Badge Cleanup
1157- Removed inline namespace badge from event side panel header
1158- Filter indicator bar ("Filtering: namespace ✕") retained and working
1159- AJAX-based namespace filtering fully functional via onclick handlers
1160
1161## Version 6.1.0 (2026-02-10) - TODAY INDICATOR, BUTTON HOVER & CHECKBOXES
1162
1163### Today Indicator
1164- **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)
1165- **Added:** Today cell has `--cell-today-bg` background AND a visible inset border glow on hover using `--border-main`
1166- **Added:** `.day-num` now uses `--text-primary` for color instead of relying on browser default
1167
1168### Button Hover/Click Theming
1169- **Fixed:** All buttons now use `filter: brightness(1.3)` on hover for a visible glow effect across all themes
1170- **Fixed:** All buttons use `filter: brightness(0.85)` on click/active for a press-down darkening effect
1171- **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
1172- **Removed:** Generic `opacity: 0.9` hover which was barely visible on dark themes
1173
1174### Checkboxes Themed
1175- **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
1176- **Added:** `accent-color: var(--text-bright)` on all dialog checkboxes (task, recurring) for consistent theme coloring
1177
1178### Form Input Text
1179- **Fixed:** `.input-sleek` now has `color: var(--text-primary)` — form text is visible on dark themes
1180- **Added:** `::placeholder` styling for inputs/textareas using `--text-dim`
1181
1182## Version 6.0.9 (2026-02-09) - FORM TEXT, CELL HOVER & GLOW TUNING
1183
1184### Form Input Text Fix
1185- **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)`.
1186- **Added:** Themed placeholder text (`::placeholder`) for inputs/textareas
1187
1188### Button & Cell Hover Theming
1189- **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`
1190- **Improved:** Nav buttons (`◄`/`►`) and Today button hover now show a themed glow + scale effect instead of just opacity change
1191- **Added:** Active (click) state for nav/today buttons with scale-down feedback
1192- **Improved:** Month picker hover now also shows a subtle theme shadow
1193
1194### Glow Reduced to 1px for Matrix/Purple
1195- Matrix and purple text glow reduced from 2px to 1px across: event titles, descriptions, meta, links, sidebar day numbers, sidebar event titles, sidebar dates
1196- Matrix clock pulse animation reduced from 6px/10px+15px to 2px/4px+6px
1197- Weather text glow reduced to 1px, clock to 2px
1198- Pink remains at 2px (barely noticeable)
1199
1200## Version 6.0.8 (2026-02-09) - LINKS, GLOW CONSISTENCY & PINK TONE-DOWN
1201
1202### Links Themed
1203- **Added:** `.cal-link` CSS class — all links rendered via `renderDescription()` now pick up theme accent color via `--text-bright`
1204- **Fixed:** Sidebar widget links (`a.cal-link`) inherit theme colors
1205- **Fixed:** Event list widget description links (`eventlist-widget-desc a`) use CSS vars
1206- **Fixed:** Simple event list body links/strong/code all themed
1207
1208### Text Glow Consistency
1209- **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
1210- **Added:** Subtle link glow on dark themes
1211- **Added:** Matrix and purple now get the same barely-visible text glow that pink had on sidebar week grid day numbers and event titles
1212
1213### Pink Glow Toned Down
1214- **Reduced:** Sidebar today header box-shadow from `0 0 10px 0.4` to `0 0 6px 0.25`
1215- **Reduced:** Day number sparkle animation from 3px/6px+10px to 2px/3px
1216- **Reduced:** Today cell shimmer from 3px+5px / 8px+12px to 2px+3px / 4px+6px
1217- **Reduced:** Event bar glow pulse from 2px/4px+6px to 1px/2px+3px
1218- **Reduced:** Today hover glow from 10px+15px to 5px+8px
1219- **Reduced:** Event item glow from 2px/5px to 1px/3px
1220- **Reduced:** Calendar container glow from 8px to 5px
1221
1222### Other
1223- **Themed:** Sidebar weather, date, and clock text colors and glow via CSS vars
1224
1225## Version 6.0.7 (2026-02-09) - BADGES, BUTTONS & CONFLICT THEMING
1226
1227- **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
1228- **Fixed:** TODAY badge uses `--border-main` for background instead of hardcoded purple
1229- **Fixed:** Conflict alert badge (`⚠️`) uses `--border-main` background and `--text-bright` border — matches theme accent
1230- **Fixed:** Conflict tooltip header background now set inline from theme vars (tooltip is appended to body, can't inherit CSS vars)
1231- **Fixed:** Conflict tooltip body items use themed text and border colors
1232- **Fixed:** Month picker Go/Cancel buttons themed (`--text-bright` for save, `--cell-bg` for cancel)
1233- **Fixed:** Calendar header month/year hover uses `--cell-today-bg` background
1234- **Fixed:** Inline search input border uses `--border-color`
1235- **Fixed:** Event list header border uses `--border-color`
1236
1237## Version 6.0.6 (2026-02-09) - COMPLETE TEXT THEMING
1238
1239- **Fixed:** Calendar header month/year title had hardcoded dark color — now uses `--text-primary`
1240- **Fixed:** Month/year picker hover used hardcoded gray background and green text — now uses `--cell-today-bg` and `--text-bright`
1241- **Fixed:** Event list items (titles, meta, descriptions, links, code blocks, bold text) — all now theme-aware via CSS vars
1242- **Fixed:** Completed/past event states used hardcoded grays — now use `--cell-bg`, `--text-dim`, `--cell-today-bg`
1243- **Fixed:** Scrollbar track/thumb colors now use theme vars
1244- **Fixed:** Namespace filter indicator (background, label, badge, close button) — all themed
1245- **Fixed:** Panel standalone month picker hover and namespace badge — themed
1246- **Fixed:** Calendar header border-bottom — now uses `--border-color`
1247
1248## Version 6.0.5 (2026-02-09) - THEMED BORDERS & EVENT PANEL
1249
1250- **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).
1251- **Added:** Theme-colored border and glow for event panel (`{{eventpanel}}`) on dark themes using `[data-theme]` attribute selectors
1252- **Themed:** Event panel header (nav buttons, month title, today button, search input, add button) — all now use CSS vars
1253- **Themed:** Panel standalone header background and border
1254
1255## Version 6.0.4 (2026-02-09) - FULL DIALOG THEMING
1256
1257- **Fixed:** Day cell click popup (day-popup) used hardcoded white/gray colors — now fully theme-aware using CSS variables
1258- **Fixed:** Event add/edit dialog (dialog-content-sleek) had hardcoded white background and blue header — now uses theme colors
1259- **Fixed:** Month picker dialog had hardcoded white background and dark text — now themed
1260- **Fixed:** Popup event items, titles, times, descriptions, footer, add-event button, close button — all now use CSS vars with sensible fallbacks
1261- **Fixed:** Form elements (field labels, inputs, checkboxes, recurring options, color pickers) — all reference theme CSS vars
1262- **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.
1263
1264## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB
1265
1266- **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Events Manager and Cleanup sections)
1267- **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage tab sections
1268- **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now independent of Outlook config save
1269- **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value
1270
1271## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX
1272
1273- **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.
1274
1275## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX
1276
1277- **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()`
1278- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller
1279- **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.
1280
1281
1282## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE
1283
1284- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed
1285- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified
1286- **Audited:** style.css (3,218 lines) — balanced braces confirmed
1287- **Audited:** All admin manage tab action handlers verified functional (13 actions)
1288- **New:** Fresh README.md for GitHub with complete documentation
1289- **Includes all v5.5.x fixes:**
1290  - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total))
1291  - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel
1292  - Conflict badges on past events after AJAX navigation
1293  - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal
1294
1295## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP
1296
1297- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers
1298- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0`
1299- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning
1300- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name
1301- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared
1302- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check
1303- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving
1304- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files
1305- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt
1306- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache
1307- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`)
1308- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries`
1309- **Removed:** Stale "NEW!" comment from Events Manager section
1310
1311## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH
1312
1313- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API
1314- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status)
1315- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run
1316- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing
1317- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total)
1318- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed
1319- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important)
1320- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead
1321- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text
1322- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes)
1323
1324## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH
1325
1326- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys
1327- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional)
1328- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background
1329- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files)
1330- **Changed:** Wiki theme section header text now white for readability on colored backgrounds
1331- **Changed:** Week grid JS theme colors now use actual $themeStyles values
1332
1333## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX
1334
1335- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch)
1336
1337## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING
1338
1339- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner
1340- **Fixed:** Week grid conflict tooltips also fixed (same issue)
1341- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data
1342- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip)
1343
1344## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD
1345
1346- **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)
1347
1348## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS
1349
1350- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body)
1351- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string
1352
1353## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING
1354
1355- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping
1356- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON)
1357- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute
1358- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility
1359
1360## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING
1361
1362- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation
1363- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads
1364- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-)
1365- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1
1366- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds
1367- **Added:** ESC key now also closes day popups and conflict tooltips
1368- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding
1369
1370## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY
1371
1372- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance
1373- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js
1374- **Refactored:** style.css is now the single source of truth for all visual styling
1375- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container
1376- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget)
1377- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars
1378- **Added:** CSS variable injection for {{eventlist panel}} containers
1379- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers
1380- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position
1381- **Added:** Wiki template mapping reads __link__ as accent color from style.ini
1382- **Added:** Detailed CSS variable reference table in style.css header comment
1383- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php
1384- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles
1385- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div
1386- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible)
1387- **Removed:** $isWikiTheme branching from PHP render path
1388
1389## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! ��
1390
1391### �� Added: Hearts in Explosions!
1392- **Added:** 8-12 pink hearts in each click explosion
1393- **Added:** Random sizes (12-28px) and directions
1394- **Result:** Extra love in every click! ��
1395
1396### �� Fixed: Background CSS Property for Dark Mode Readers
1397- **Fixed:** Added `background: transparent` to CSS (was completely removed)
1398- **Fixed:** Now CSS readers can detect and modify background property
1399- **Why:** Inline styles override transparent, but CSS readers can now see the property
1400- **Result:** Dark mode plugins can now change calendar backgrounds!
1401
1402### The CSS Problem
1403
1404**Why backgrounds weren't changing with dark mode readers**:
1405
1406**Before (v5.3.5)**:
1407```css
1408.calendar-compact-grid tbody td {
1409    /* background removed - set via inline style */
1410    border: 1px solid...
1411}
1412```
1413
1414**Problem**: CSS property doesn't exist!
1415- Dark mode readers look for `background` property in CSS
1416- Can't override what doesn't exist
1417- Inline styles work, but readers can't modify them
1418
1419**After (v5.3.6)**:
1420```css
1421.calendar-compact-grid tbody td {
1422    background: transparent;  /* Now exists! */
1423    border: 1px solid...
1424}
1425```
1426
1427**Solution**:
1428- Property exists in CSS
1429- Dark mode readers can override it
1430- Inline styles still override transparent
1431- Everyone wins!
1432
1433### What's Fixed
1434
1435**Elements now have background property**:
1436- `.calendar-compact-grid tbody td` ✓
1437- `.calendar-compact-grid tbody td:hover` ✓
1438- `.event-compact-item` ✓
1439- `.event-compact-item:hover` ✓
1440
1441**How it works**:
14421. CSS sets `background: transparent` (default)
14432. Inline styles set actual color (overrides transparent)
14443. Dark mode readers can override CSS property
14454. Works for everyone!
1446
1447### Hearts in Explosion
1448
1449**Click anywhere → Hearts explode!**
1450
1451**Heart details**:
1452- Count: 8-12 per explosion (random)
1453- Size: 12-28px (random variety)
1454- Emoji: �� (pink heart)
1455- Direction: Random 360°
1456- Speed: 60-140px travel
1457- Duration: 0.8-1.2s
1458- z-index: 9999999 (always visible)
1459
1460**Combined with**:
1461- 25 glowing particles
1462- 40 pixel sparkles
1463- Bright flash
1464- **Total: 73-77 elements!**
1465
1466### Visual Result
1467
1468**Click explosion**:
1469```
1470    �� ✦ • ✦ ��
1471  �� •         • ��
1472✦  •     ��!     •  ✦
1473  �� •         • ��
1474    �� ✦ • ✦ ��
1475
1476Hearts + Particles + Pixels!
1477```
1478
1479**Dark mode now works**:
1480```css
1481/* Dark mode reader can now do this: */
1482.calendar-compact-grid tbody td {
1483    background: #000 !important;  /* Works! */
1484}
1485```
1486
1487### Why Transparent Works
1488
1489**CSS Cascade**:
14901. CSS: `background: transparent` (lowest priority)
14912. Inline style: `background: #f5f5f5` (overrides CSS)
14923. Dark mode CSS: `background: #000 !important` (overrides inline)
1493
1494**Perfect solution!** ✓
1495
1496## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! ��
1497
1498### �� Fixed: Particles Now Appear Above All Dialogs!
1499- **Fixed:** Increased z-index to 9999999 for all particles
1500- **Fixed:** Particles now visible above event dialogs, month picker, etc.
1501- **Result:** Cursor effects and explosions always visible!
1502
1503### The Z-Index Problem
1504
1505**Before (v5.3.4)**:
1506- Particles: z-index 9999
1507- Dialogs: z-index 10000-999999
1508- **Particles hidden behind dialogs!**
1509
1510**After (v5.3.5)**:
1511- Particles: z-index 9999999
1512- Trail: z-index 9999998
1513- Pixels: z-index 9999997
1514- **Particles ALWAYS on top!**
1515
1516### What's Fixed
1517
1518✅ **Main particles** (explosion orbs)
1519✅ **Cursor trail** (glowing dots)
1520✅ **Pixel sparkles** (tiny bright stars)
1521✅ **Flash effect** (click burst)
1522
1523**All now appear above**:
1524- Event dialog popups
1525- Month picker
1526- Day popups
1527- Any modal overlays
1528
1529### Visual Result
1530
1531**Moving cursor over dialog**:
1532```
1533┌─────────────────────┐
1534│  Event Dialog       │
1535│  ✦ • ✦             │  ← Sparkles visible!
1536│    →  ✦             │  ← Cursor trail visible!
1537│  • ✦ •              │
1538└─────────────────────┘
1539```
1540
1541**Clicking on dialog**:
1542```
1543┌─────────────────────┐
1544│  ✦ • ✦ • ✦         │
1545│ •     ��!     •    │  ← Explosion visible!
1546│  ✦ • ✦ • ✦         │
1547└─────────────────────┘
1548```
1549
1550**Perfect visibility everywhere!** ✨
1551
1552## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX
1553
1554### �� Fixed: Month Picker Now Themed!
1555- **Fixed:** Jump to Month dialog now uses theme colors
1556- **Fixed:** Dialog background, borders, text all themed
1557- **Fixed:** Select dropdowns use theme colors
1558- **Fixed:** Buttons use theme accent colors
1559- **Result:** Month picker matches calendar theme!
1560
1561### �� Fixed: Cursor Effects Work in Dialogs!
1562- **Fixed:** Cursor trail now works when hovering over dialogs
1563- **Fixed:** Click explosions work when clicking inside dialogs
1564- **Technical:** Changed to capture phase event listeners
1565- **Result:** Effects work EVERYWHERE now!
1566
1567### Month Picker Theming
1568
1569**Before (v5.3.3)**:
1570- White background (hardcoded)
1571- Black text (hardcoded)
1572- No theme integration
1573- Looked out of place
1574
1575**After (v5.3.4)**:
1576- Dialog background: `theme.bg`
1577- Dialog border: `theme.border`
1578- Text color: `theme.text_primary`
1579- Dropdowns: `theme.cell_bg` + `theme.text_primary`
1580- Cancel button: `theme.cell_bg`
1581- Go button: `theme.border` (accent color)
1582
1583**Fully integrated!** ✅
1584
1585---
1586
1587### Theme Examples
1588
1589**Matrix Theme**:
1590```
1591┌─────────────────────────┐
1592│ Jump to Month           │ ← Dark bg, green border
1593│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
1594│ [Cancel] [Go]           │ ← Green "Go" button
1595└─────────────────────────┘
1596```
1597
1598**Pink Theme**:
1599```
1600┌─────────────────────────┐
1601│ Jump to Month           │ ← Dark bg, pink border
1602│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
1603│ [Cancel] [Go]           │ ← Pink "Go" button
1604└─────────────────────────┘
1605With sparkle effects! ✨
1606```
1607
1608**Professional Theme**:
1609```
1610┌─────────────────────────┐
1611│ Jump to Month           │ ← Clean bg, blue border
1612│ [February ▼] [2026 ▼]  │ ← Clean dropdowns
1613│ [Cancel] [Go]           │ ← Blue "Go" button
1614└─────────────────────────┘
1615```
1616
1617---
1618
1619### Dialog Cursor Fix
1620
1621**The Problem**:
1622Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects!
1623
1624**The Solution**:
1625Use **capture phase** event listeners:
1626```javascript
1627// Before (bubbling phase)
1628document.addEventListener('click', handler)
1629
1630// After (capture phase)
1631document.addEventListener('click', handler, true)
16321633                                   Capture phase!
1634```
1635
1636**Capture phase runs BEFORE stopPropagation!**
1637
1638---
1639
1640### Now Works Everywhere
1641
1642✅ **Calendar area**
1643✅ **Event dialogs**
1644✅ **Month picker dialog**
1645✅ **Day popup dialogs**
1646✅ **Anywhere on screen**
1647
1648**No more blocked effects!** ��
1649
1650---
1651
1652### Technical Details
1653
1654**Event phases**:
1655```
16561. Capture phase   ← We listen here now!
16572. Target phase
16583. Bubbling phase  ← stopPropagation blocks this
1659```
1660
1661**By using capture phase**:
1662- Events caught before stopPropagation
1663- Works in all dialogs
1664- No conflicts with dialog logic
1665
1666---
1667
1668### All Dialogs Checked
1669
1670✅ **Month picker** - Now themed!
1671✅ **Event dialog** - Already themed
1672✅ **Day popup** - Already themed
1673
1674**Everything consistent!** ��
1675
1676---
1677
1678## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨
1679
1680### ✨ Added: Bright Neon Pixel Sparkles Everywhere!
1681- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail
1682- **Added:** 40 pixel sparkles in click explosions
1683- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar)
1684- **Result:** Maximum sparkle effect! ��
1685
1686### Tiny Pixel Sparkles
1687
1688**3-6 tiny bright pixels appear with each cursor movement!**
1689
1690**Characteristics**:
1691- Size: 1-2px (single pixel appearance!)
1692- Colors: Bright neon whites and pinks
1693  - Pure white (#fff) - 40% chance
1694  - Hot pink (#ff1493)
1695  - Pink (#ff69b4)
1696  - Light pink (#ffb6c1)
1697  - Soft pink (#ff85c1)
1698- Glow: Triple-layer shadow (intense!)
1699- Spawn: Random 30px radius around cursor
1700- Animations:
1701  - 50% twinkle in place
1702  - 50% float upward
1703
1704**Creates a cloud of sparkles around your cursor!**
1705
1706---
1707
1708### Click Explosion Enhanced
1709
1710**Now with 40 EXTRA pixel sparkles!**
1711
1712**Click anywhere → BIG BOOM**:
1713- 25 main glowing particles (6-10px)
1714- **40 tiny pixel sparkles (1-2px)** ← NEW!
1715- Bright white flash
1716- Total: 65+ visual elements!
1717
1718**Pixel sparkles in explosion**:
1719- Shoot outward in all directions
1720- Random distances (30-110px)
1721- Multiple bright colors
1722- Some twinkle, some explode
1723- Creates stellar effect!
1724
1725---
1726
1727### Entire Screen Coverage
1728
1729**Effects now work EVERYWHERE!**
1730
1731**Before (v5.3.2)**:
1732- Only inside calendar viewport
1733- Limited to calendar area
1734
1735**After (v5.3.3)**:
1736- Works on entire screen! ✓
1737- Cursor trail follows everywhere
1738- Click explosions anywhere
1739- Used `position: fixed` + `clientX/Y`
1740
1741**Move anywhere on the page for sparkles!**
1742
1743---
1744
1745### Visual Effect
1746
1747**Cursor movement**:
1748```
1749    • ✦ •       ← Tiny pixels
1750  •   ✦   •     ← Glowing trail
1751✦  •  →  •  ✦   ← Cursor
1752  •   ✦   •     ← Mixed sizes
1753    • ✦ •       ← Sparkle cloud
1754```
1755
1756**Click explosion**:
1757```
1758    ✦ • ✦ • ✦
1759  ✦ •         • ✦
1760✦  •    ��!    •  ✦
1761  ✦ •         • ✦
1762    ✦ • ✦ • ✦
1763
176465+ particles total!
1765```
1766
1767---
1768
1769### Sparkle Details
1770
1771**Trail Pixels** (3-6 per movement):
1772- Size: 1-2px
1773- Spawn rate: Every 40ms
1774- Spread: 30px radius
1775- Duration: 0.6-0.8s
1776- 50% twinkle, 50% float
1777
1778**Explosion Pixels** (40 total):
1779- Size: 1-3px
1780- Spread: 30-110px radius
1781- Duration: 0.4-0.8s
1782- All directions
1783- Intense glow
1784
1785**Main Particles** (25 total):
1786- Size: 4-10px
1787- Spread: 50-150px
1788- Full color palette
1789- Original firework effect
1790
1791---
1792
1793### Color Distribution
1794
1795**Pixel sparkles favor white**:
1796- 40% pure white (#fff) - brightest!
1797- 60% pink shades - variety
1798
1799**Creates brilliant sparkle effect!**
1800
1801---
1802
1803### Performance
1804
1805**Still optimized**:
1806- Trail: 30ms throttle
1807- Pixels: 40ms throttle
1808- Auto-cleanup
1809- Hardware accelerated
1810- Smooth 60fps
1811
1812**Lots of sparkles, zero lag!**
1813
1814---
1815
1816### Full-Screen Magic
1817
1818**Pink theme calendar detected**:
1819```javascript
1820if (pink calendar exists) {
1821    Enable effects for ENTIRE SCREEN
1822    Not just calendar area
1823}
1824```
1825
1826**Works everywhere on page!** ✨
1827
1828---
1829
1830## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! ����
1831
1832### �� Changed: Glowing Pink Particles Instead of Emoji Sparkles!
1833- **Removed:** Emoji sparkle images (✨)
1834- **Added:** Glowing pink particle trail following cursor
1835- **Added:** FIREWORKS explosion on click!
1836- **Result:** Beautiful glowing effects, not emoji!
1837
1838### Glowing Cursor Trail
1839
1840**Pink glowing dots follow your cursor!**
1841- Small glowing pink orbs (8px)
1842- Radial gradient glow effect
1843- Multiple box-shadows for depth
1844- Fade out smoothly (0.5s)
1845- Throttled to 30ms for smoothness
1846
1847```
1848    •  •
1849  •  →  •   ← Your cursor
1850    •  •
1851```
1852
1853**Not emoji - actual glowing particles!**
1854
1855---
1856
1857### Click Fireworks! ��
1858
1859**Click anywhere on the calendar → BOOM!**
1860
1861**20 pink particles explode outward!**
1862- Radial burst pattern (360° coverage)
1863- Random speeds (50-150px travel)
1864- 4 shades of pink:
1865  - Hot pink (#ff1493)
1866  - Pink (#ff69b4)
1867  - Light pink (#ff85c1)
1868  - Very light pink (#ffc0cb)
1869- Random sizes (4-10px)
1870- Individual glowing halos
1871- Smooth explosion animation
1872
1873**Plus a bright flash at click point!**
1874- 30px radius glow
1875- Intense pink flash
1876- Fades quickly (0.3s)
1877
1878---
1879
1880### Visual Effect
1881
1882**Cursor movement**:
1883```
18841885      •  •  •
1886   •     →     •  ← Glowing trail
1887      •  •  •
18881889```
1890
1891**Click explosion**:
1892```
1893         •  •  •
1894      •           •
1895   •      BOOM!      •  ← 20 particles
1896      •           •
1897         •  •  •
1898```
1899
1900**All particles glow with pink halos!**
1901
1902---
1903
1904### Particle Details
1905
1906**Trail Particles**:
1907- Size: 8x8px
1908- Color: Pink radial gradient
1909- Shadow: 10px + 20px glow layers
1910- Duration: 0.5s fade
1911- Rate: 30ms throttle
1912
1913**Explosion Particles**:
1914- Size: 4-10px (random)
1915- Colors: 4 pink shades (random)
1916- Shadow: 10px + 20px glow (matches color)
1917- Duration: 0.6-1.0s (random)
1918- Pattern: Perfect circle burst
1919
1920**Flash Effect**:
1921- Size: 30x30px
1922- Color: Bright hot pink
1923- Shadow: 30px + 50px mega-glow
1924- Duration: 0.3s instant fade
1925
1926---
1927
1928### Performance
1929
1930**Optimized for smoothness**:
1931- Trail throttled to 30ms
1932- Auto-cleanup after animations
1933- CSS hardware acceleration
1934- No memory leaks
1935- Smooth 60fps
1936
1937**Won't slow you down!**
1938
1939---
1940
1941### Comparison
1942
1943**Before (v5.3.1)**:
1944- ✨ Emoji sparkle images
1945- Static unicode characters
1946- Limited visual impact
1947
1948**After (v5.3.2)**:
1949- �� Glowing pink particles
1950- Radial gradients + shadows
1951- Beautiful firework explosions
1952- Much more impressive!
1953
1954---
1955
1956### Only Pink Theme
1957
1958**These effects only appear**:
1959- On `.calendar-theme-pink` elements
1960- Other themes unaffected
1961- Pure pink magic! ��
1962
1963---
1964
1965## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨
1966
1967### ✨ Added: MySpace-Style Sparkle Trail!
1968- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!)
1969- **Toned down:** Reduced glow effects for better taste
1970- **Added:** Sparkles appear on cell hover
1971- **Added:** Sparkles on event hover (left and right sides!)
1972- **Added:** Sparkles on today's cell corners
1973- **Added:** Sparkles on navigation buttons
1974- **Added:** Sparkles in calendar header
1975- **Result:** Pure nostalgic MySpace magic! ✨
1976
1977### MySpace Sparkle Cursor Trail
1978
1979**The classic effect from 2006!**
1980- Sparkles follow your cursor as you move
1981- Random sizes (12-22px)
1982- Random slight offsets for natural feel
1983- Float up and fade out animation
1984- Throttled to 50ms (smooth, not laggy)
1985- Only on pink theme calendars
1986
1987```
19881989  ✨    ✨
1990✨   →   ✨  (cursor trail)
1991  ✨    ✨
19921993```
1994
1995**Pure nostalgia!**
1996
1997---
1998
1999### Sparkles Everywhere
2000
2001**Calendar cells**:
2002- Hover over any day → ✨ floats up
2003- Smooth 1.5s animation
2004- Centered sparkle
2005
2006**Event items**:
2007- Hover → ✨ on left side
2008- Hover → ✨ on right side
2009- Staggered animations (0.4s delay)
2010- Continuous twinkling
2011
2012**Today's cell**:
2013- ✨ in top-right corner (continuous)
2014- ✨ in bottom-left corner (offset timing)
2015- Always sparkling!
2016
2017**Navigation buttons**:
2018- Hover on < or > → ✨ appears top-right
2019- One-time float animation
2020
2021**Calendar header**:
2022- ✨ on left side (continuous)
2023- ✨ on right side (offset 1s)
2024- Always twinkling
2025
2026---
2027
2028### Toned Down Glows
2029
2030**Before (v5.3.0)**: TOO MUCH GLOW!
2031- 50px shadows
2032- 4-layer effects
2033- Overwhelming
2034
2035**After (v5.3.1)**: Just right!
2036- 8-15px max shadows (subtle)
2037- 2-layer effects
2038- Professional with personality
2039
2040**Glow reductions**:
2041- Today shimmer: 35px → 12px
2042- Today hover: 50px → 15px
2043- Event glow: 18px → 6px
2044- Badge pulse: 25px → 8px
2045- Container glow: 20px → 8px
2046
2047**Much more tasteful!**
2048
2049---
2050
2051### Sparkle Animations
2052
2053**sparkle-twinkle** (0.8s):
2054```
2055Opacity: 0 → 1 → 1 → 0
2056Scale: 0 → 1 → 1 → 0
2057Rotation: 0° → 180° → 360°
2058```
2059
2060**sparkle-float** (1.5s):
2061```
2062Moves up: 0px → -50px
2063Opacity: 0 → 1 → 1 → 0
2064Scale: 0 → 1 → 0.8 → 0
2065```
2066
2067**Pure MySpace magic!** ✨
2068
2069---
2070
2071### Where Sparkles Appear
2072
2073✅ **Cursor trail** (continuous while moving)
2074✅ **Calendar cells** (on hover)
2075✅ **Event items** (on hover, left + right)
2076✅ **Today's cell** (continuous, corners)
2077✅ **Navigation buttons** (on hover)
2078✅ **Calendar header** (continuous, sides)
2079
2080**Sparkles EVERYWHERE!** ✨✨✨
2081
2082---
2083
2084### Performance
2085
2086**Cursor trail**:
2087- Throttled to 50ms
2088- Auto-cleanup after 1s
2089- No memory leaks
2090- Smooth 60fps
2091
2092**CSS animations**:
2093- Hardware accelerated
2094- No JavaScript overhead (except cursor)
2095- Efficient transforms
2096
2097**Won't slow down your browser!**
2098
2099---
2100
2101### Pure Nostalgia
2102
2103**Remember MySpace profiles?**
2104- Glitter graphics ✨
2105- Sparkle cursors ✨
2106- Auto-play music �� (ok, we didn't add that)
2107- Animated GIF backgrounds
2108- Comic Sans everywhere
2109
2110**We brought back the sparkles!** ✨
2111
2112---
2113
2114### Theme Comparison
2115
2116**Other themes**: Professional and clean
2117**Pink theme**: ✨ SPARKLES EVERYWHERE ✨
2118
2119**Only pink theme gets the magic!**
2120
2121---
2122
2123## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨��
2124
2125### �� Added: Pink Theme Gets BLING!
2126- **Added:** Shimmering animation for today's cell
2127- **Added:** Sparkling text effect on today's date
2128- **Added:** Glowing pulse for event bars
2129- **Added:** Gradient shimmer on headers
2130- **Added:** Extra glow on hover effects
2131- **Added:** Pulsing urgent badge for past due items
2132- **Result:** Pink theme is now FABULOUS! ✨
2133
2134### Shimmer Effects
2135
2136**Today's Cell**:
2137- Continuous shimmer animation (2 second loop)
2138- Multi-layer glow effect
2139- Pink and hot pink overlapping shadows
2140- Pulses from subtle to intense
2141- Extra sparkle on hover
2142
2143**Today's Date Number**:
2144- Sparkle animation (1.5 second loop)
2145- Text shadow glow effect
2146- Slight scale pulse (100% → 105%)
2147- Pink to hot pink shadow transition
2148
2149### Glow Effects
2150
2151**Event Bars**:
2152- Continuous glow pulse (2 second loop)
2153- Uses event's own color
2154- Adds pink accent glow layer
2155- Creates depth and dimension
2156
2157**Event Items**:
2158- Subtle base glow
2159- Enhanced glow on hover
2160- Slight slide animation on hover
2161- Professional yet playful
2162
2163### Gradient Shimmer
2164
2165**Headers**:
2166- Animated gradient background
2167- 3-color pink gradient flow
2168- Smooth 3-second animation
2169- Creates movement and life
2170- Applies to calendar header and event list header
2171
2172### Badge Effects
2173
2174**TODAY Badge**:
2175- Sparkle animation
2176- Synchronized with today's date
2177- Extra prominence
2178
2179**PAST DUE Badge**:
2180- Urgent pulsing effect (1 second loop)
2181- Orange glow intensifies
2182- Draws attention to urgent items
2183- Faster pulse for urgency
2184
2185### Container Bling
2186
2187**Main Container**:
2188- Multi-layer pink glow
2189- Soft outer shadow
2190- Creates floating effect
2191- Subtle but elegant
2192
2193### Animation Details
2194
2195**pink-shimmer** (2s loop):
2196```
2197Start: Subtle 5px glow
2198Peak:  Intense 35px multi-layer glow
2199End:   Back to subtle
2200```
2201
2202**pink-sparkle** (1.5s loop):
2203```
2204Start: Base glow + scale 1.0
2205Peak:  Intense glow + scale 1.05
2206End:   Back to base
2207```
2208
2209**pink-glow-pulse** (2s loop):
2210```
2211Start: Small glow (3px, 6px)
2212Peak:  Large glow (6px, 12px, 18px)
2213End:   Back to small
2214```
2215
2216**pink-gradient-shimmer** (3s loop):
2217```
2218Gradient flows across element
2219Creates wave effect
2220Smooth continuous motion
2221```
2222
2223**pink-pulse-urgent** (1s loop - faster!):
2224```
2225Start: Orange glow 5px
2226Peak:  Orange glow 25px (intense)
2227End:   Back to 5px
2228```
2229
2230### Visual Experience
2231
2232**Today's Cell**:
2233```
2234┌──┬──┬──┬──┬──┬──┬──┐
2235│  │  │ ✨ │  │  │  │  │  ← Shimmers constantly
2236│  │  │[9]│  │  │  │  │  ← Sparkles
2237│  │  │ ✨ │  │  │  │  │  ← Glows and pulses
2238└──┴──┴──┴──┴──┴──┴──┘
2239```
2240
2241**Event Bars**:
2242```
2243━━━━━━━  ← Glows and pulses
2244━━━━━━━  ← Each bar animated
2245━━━━━━━  ← Creates rhythm
2246```
2247
2248**Headers**:
2249```
2250╔═════════════════════╗
2251║ ~~~~~~~~~~ ║  ← Gradient flows
2252║   February 2026     ║  ← Shimmer effect
2253╚═════════════════════╝
2254```
2255
2256### Theme Comparison
2257
2258**Before (v5.2.8)**:
2259- Pink colors
2260- Static elements
2261- Standard shadows
2262
2263**After (v5.3.0)**:
2264- Pink colors ✓
2265- Animated shimmer ✨
2266- Sparkling effects ��
2267- Glowing pulses ✨
2268- Moving gradients ��
2269- BLING! ��
2270
2271### Performance
2272
2273**All animations**:
2274- Hardware accelerated (transform, opacity)
2275- Smooth 60fps
2276- CSS animations (no JavaScript)
2277- Minimal CPU usage
2278- Disabled in reduced-motion preference
2279
2280### Only for Pink Theme
2281
2282**Effects only apply when**:
2283```css
2284.calendar-theme-pink
2285```
2286
2287**Other themes unaffected**:
2288- Matrix stays Matrix
2289- Professional stays Professional
2290- Purple stays Purple
2291- Wiki stays clean
2292
2293**Pink gets all the bling!** ✨��
2294
2295### Use Cases
2296
2297**Perfect for**:
2298- Celebrating occasions
2299- Fun team calendars
2300- Personal style expression
2301- Standing out
2302- Making calendar time fabulous
2303
2304**Not just pink, but BLING pink!** ��✨
2305
2306## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS
2307
2308### �� Fixed: Today's Date Box Now Uses Theme Colors
2309- **Fixed:** Today's day number box now uses theme border color
2310- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light)
2311- **Result:** Today box matches the theme perfectly!
2312
2313### The Issue
2314
2315Today's date had a hardcoded green box:
2316
2317**In style.css**:
2318```css
2319.cal-today .day-num {
2320    background: #008800;  /* Hardcoded green! */
2321    color: white;
2322}
2323```
2324
2325**Didn't adapt to themes at all!**
2326
2327### The Fix
2328
2329**Now uses theme colors**:
2330```php
2331// Today's day number
2332if ($isToday) {
2333    background: $themeStyles['border'],  // Theme's accent color!
2334    color: (professional theme) ? white : bg color
2335}
2336```
2337
2338### Theme Examples
2339
2340**Matrix Theme**:
2341- Box background: `#00cc07` (matrix green)
2342- Text color: `#242424` (dark background)
2343
2344**Purple Theme**:
2345- Box background: `#9b59b6` (purple)
2346- Text color: `#2a2030` (dark background)
2347
2348**Professional Theme**:
2349- Box background: `#4a90e2` (blue)
2350- Text color: `#ffffff` (white text)
2351
2352**Pink Theme**:
2353- Box background: `#ff1493` (hot pink)
2354- Text color: `#1a0d14` (dark background)
2355
2356**Wiki Theme**:
2357- Box background: Template's `__border__` color
2358- Text color: Template's `__background_site__` color
2359
2360### Visual Result
2361
2362**Matrix Theme**:
2363```
2364┌──┬──┬──┬──┬──┬──┬──┐
2365│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
2366└──┴──┴──┴──┴──┴──┴──┘
23672368    Green box (#00cc07)
2369```
2370
2371**Professional Theme**:
2372```
2373┌──┬──┬──┬──┬──┬──┬──┐
2374│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
2375└──┴──┴──┴──┴──┴──┴──┘
23762377    Blue box (#4a90e2)
2378```
2379
2380**Wiki Theme**:
2381```
2382┌──┬──┬──┬──┬──┬──┬──┐
2383│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
2384└──┴──┴──┴──┴──┴──┴──┘
23852386    Template border color
2387```
2388
2389### Implementation
2390
2391**Inline styles added**:
2392- Background uses `$themeStyles['border']` (theme accent)
2393- Text color uses `$themeStyles['bg']` for contrast
2394- Special case: Professional theme uses white text
2395- All with `!important` to override CSS
2396
2397**CSS cleaned up**:
2398- Removed hardcoded `#008800` background
2399- Removed hardcoded `white` color
2400- Kept structural styles (border-radius, font-weight)
2401
2402### Benefits
2403
2404**Theme Consistency**:
2405- Today box matches theme accent color
2406- Proper contrast with background
2407- Professional appearance
2408
2409**Automatic Adaptation**:
2410- Works with all themes
2411- Works with custom wiki template colors
2412- No manual adjustment needed
2413
2414**Visual Harmony**:
2415- Border color used throughout theme
2416- Today box reinforces theme identity
2417- Consistent design language
2418
2419## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH
2420
2421### �� Fixed: Table Grid Background Now Matches Cells
2422- **Found:** `grid_bg` was using `__background_alt__` (different from cells!)
2423- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells)
2424- **Result:** Table background no longer shows through cells!
2425
2426### The Layer Problem
2427
2428The table itself had a DIFFERENT background color than its cells!
2429
2430**Before (v5.2.6)**:
2431```php
2432'grid_bg' => __background_alt__,     // Table background (#e8e8e8)
2433'cell_bg' => __background_site__,    // Cell background (#f5f5f5)
2434```
2435
2436**The table background was showing THROUGH the cells!**
2437
2438### Why This Happened
2439
2440**Visual layers**:
2441```
2442Table Element
2443├─ background: __background_alt__ (#e8e8e8)  ← Different!
2444└─ Cells
2445    └─ background: __background_site__ (#f5f5f5)  ← Different!
2446
2447The table background shows through any gaps!
2448```
2449
2450### The Fix
2451
2452**After (v5.2.7)**:
2453```php
2454'grid_bg' => __background_site__,    // Table background (#f5f5f5) ✓
2455'cell_bg' => __background_site__,    // Cell background (#f5f5f5) ✓
2456```
2457
2458**NOW THEY MATCH!**
2459
2460### Where grid_bg Is Used
2461
2462The table element itself:
2463```html
2464<table style="background: __background_alt__">  ← Was showing through!
2465    <tbody>
2466        <tr>
2467            <td style="background: __background_site__">1</td>
2468        </tr>
2469    </tbody>
2470</table>
2471```
2472
2473Even with cell inline styles, the TABLE background shows through!
2474
2475### All Background Sources Now Unified
2476
2477**Everything now uses __background_site__**:
2478- `bg` → __background_site__ ✓
2479- `header_bg` → __background_site__ ✓
2480- `grid_bg` → __background_site__ ✓ (JUST FIXED!)
2481- `cell_bg` → __background_site__ ✓
2482
2483**Perfect consistency!** ��
2484
2485### Why It Was Different
2486
2487**Originally the grid was meant to show borders**:
2488- `grid_bg` was `__background_alt__` (slightly different)
2489- Created visual separation between cells
2490- But with transparent/thin cells, it showed through!
2491
2492**Now unified for consistency!**
2493
2494### Visual Result
2495
2496**Before (layers visible)**:
2497```
2498┌─────────────────┐
2499│ Grid (#e8e8e8)  │ ← Showing through!
2500│  ┌──┬──┬──┐     │
2501│  │  │  │  │     │ ← Cells (#f5f5f5)
2502│  └──┴──┴──┘     │
2503└─────────────────┘
2504```
2505
2506**After (unified)**:
2507```
2508┌─────────────────┐
2509│ Grid (#f5f5f5)  │ ← Same color!
2510│  ┌──┬──┬──┐     │
2511│  │  │  │  │     │ ← Cells (#f5f5f5)
2512│  └──┴──┴──┘     │
2513└─────────────────┘
2514Perfect match!
2515```
2516
2517### Complete Background Mapping
2518
2519**All using __background_site__ now**:
2520- Main container background
2521- Left panel background
2522- Right panel background
2523- Eventlist background
2524- Calendar grid background ← JUST FIXED
2525- Calendar cell backgrounds
2526- Event item backgrounds
2527- Clock header background
2528- Search input background
2529- Past events toggle
2530
2531**EVERYTHING UNIFIED!** ��
2532
2533## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS
2534
2535### �� Fixed: Removed Container Backgrounds Showing Through
2536- **Found:** `.calendar-compact-container` had `background: #ffffff;`
2537- **Found:** `.calendar-compact-left` had `background: #fafafa;`
2538- **Found:** `.calendar-compact-right` had `background: #ffffff;`
2539- **Found:** `.event-search-input-inline` had `background: white;`
2540- **Found:** `.past-events-toggle` had `background: #f5f5f5;`
2541- **Result:** Container backgrounds no longer show through cells!
2542
2543### The Container Problem
2544
2545The parent containers had hardcoded backgrounds that were showing through!
2546
2547**Container backgrounds (lines 4-91)**:
2548```css
2549.calendar-compact-container {
2550    background: #ffffff;  /* ← Main container! */
2551}
2552
2553.calendar-compact-left {
2554    background: #fafafa;  /* ← Left panel (calendar side)! */
2555}
2556
2557.calendar-compact-right {
2558    background: #ffffff;  /* ← Right panel (events side)! */
2559}
2560```
2561
2562**These were showing through the cells and events!**
2563
2564### Why Containers Matter
2565
2566Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through:
2567
2568```
2569Container (#fafafa)           ← Showing through!
2570   └─ Table Cell (#f5f5f5)    ← Transparent areas
2571      └─ Content
2572```
2573
2574### All Backgrounds Removed
2575
2576**v5.2.6 removes**:
2577- `.calendar-compact-container` background
2578- `.calendar-compact-left` background
2579- `.calendar-compact-right` background
2580- `.event-search-input-inline` background
2581- `.past-events-toggle` background & hover
2582
2583**v5.2.5 removed**:
2584- `.calendar-compact-grid tbody td` background
2585- `.calendar-compact-grid thead th` background
2586
2587**v5.2.4 removed**:
2588- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds
2589
2590**v5.2.3 removed**:
2591- `.event-compact-item` background
2592
2593**ALL container and element backgrounds eliminated!** ��
2594
2595### What Should Work Now
2596
2597**Calendar cells**: No container background showing through ✓
2598**Event items**: No container background showing through ✓
2599**Search bar**: Uses template color ✓
2600**Past events toggle**: Uses template color ✓
2601
2602### Complete List of Fixes
2603
2604**Containers**:
2605- Main container ✓
2606- Left panel ✓
2607- Right panel ✓
2608
2609**Elements**:
2610- Table cells ✓
2611- Event items ✓
2612- Search input ✓
2613- Past events toggle ✓
2614
2615**EVERYTHING removed!** ��
2616
2617### Critical: Clear Caches
2618
2619**Must clear caches or won't work**:
26201. Hard refresh: Ctrl+Shift+R (5 times!)
26212. Clear DokuWiki cache
26223. Close browser completely
26234. Reopen and test
2624
2625**CSS caching is EXTREMELY persistent!**
2626
2627## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS
2628
2629### �� Fixed: Removed Hardcoded Backgrounds from Table Cells
2630- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`!
2631- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`!
2632- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`!
2633- **Fixed:** Removed ALL hardcoded backgrounds from table CSS
2634- **Result:** Calendar table cells finally use template colors!
2635
2636### The REAL Culprits
2637
2638The generic table CSS was overriding everything!
2639
2640**In style.css (lines 307-356)**:
2641```css
2642.calendar-compact-grid thead th {
2643    background: #f8f8f8;  /* ← Header cells hardcoded! */
2644}
2645
2646.calendar-compact-grid tbody td {
2647    background: #ffffff;  /* ← ALL table cells hardcoded! */
2648}
2649
2650.calendar-compact-grid tbody td:hover {
2651    background: #f0f7ff;  /* ← Hover state hardcoded! */
2652}
2653```
2654
2655**These apply to ALL `<td>` and `<th>` elements in the calendar table!**
2656
2657### Why This Was the Last One
2658
2659**CSS Specificity Order**:
26601. `.calendar-compact-grid tbody td` (generic - applies to ALL cells)
26612. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells)
26623. Inline styles (should win but didn't)
2663
2664**We removed the specific ones (v5.2.4), but the generic one was still there!**
2665
2666### What We've Removed
2667
2668**v5.2.3**:
2669- `.event-compact-item` background
2670- `.event-compact-item:hover` background
2671
2672**v5.2.4**:
2673- `.cal-empty` background & hover
2674- `.cal-today` background & hover
2675- `.cal-has-events` background & hover
2676
2677**v5.2.5 (FINAL)**:
2678- `.calendar-compact-grid tbody td` background ✓
2679- `.calendar-compact-grid tbody td:hover` background ✓
2680- `.calendar-compact-grid thead th` background ✓
2681
2682**All CSS background overrides ELIMINATED!** ��
2683
2684### Why It Took 5 Versions
2685
2686**CSS had layers of hardcoded backgrounds**:
2687
2688```
2689Layer 1: Table cells (.calendar-compact-grid tbody td)
2690         ↓ Overrode inline styles
2691Layer 2: Cell states (.cal-today, .cal-empty, etc.)
2692         ↓ Overrode table cells
2693Layer 3: Event items (.event-compact-item)
2694         ↓ Overrode inline styles
2695
2696ALL had to be removed!
2697```
2698
2699**We kept finding more specific CSS, but the base table CSS was there all along!**
2700
2701### Visual Result
2702
2703**NOW everything matches**:
2704```
2705Calendar Table:
2706┌──┬──┬──┬──┬──┬──┬──┐
2707│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__
2708├──┼──┼──┼──┼──┼──┼──┤
2709│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__
2710├──┼──┼──┼──┼──┼──┼──┤
2711│ 8│ 9│10│11│12│13│14│ ← All: __background_site__
2712└──┴──┴──┴──┴──┴──┴──┘
2713
2714Sidebar Events:
2715┌────────────────────────┐
2716│ �� Event               │ ← __background_site__
2717│ �� Event               │ ← __background_site__
2718└────────────────────────┘
2719
2720FINALLY ALL MATCHING! ✓
2721```
2722
2723### Complete List of Removed CSS
2724
2725**ALL hardcoded backgrounds removed**:
2726- `.event-compact-item` background
2727- `.event-compact-item:hover` background
2728- `.cal-empty` background & hover
2729- `.cal-today` background & hover
2730- `.cal-has-events` background & hover
2731- `.calendar-compact-grid tbody td` background ← NEW
2732- `.calendar-compact-grid tbody td:hover` background ← NEW
2733- `.calendar-compact-grid thead th` background ← NEW
2734
2735**Every single CSS background override is GONE!** ��
2736
2737### Testing Steps
2738
2739**After installing v5.2.5**:
2740
27411. **Clear browser cache**: Ctrl+Shift+R (3 times!)
27422. **Clear DokuWiki cache**: Click the button
27433. **Close browser completely**: Restart it
27444. **Visit page**: Should finally see matching backgrounds
2745
2746**CSS is EXTREMELY sticky - may need to clear multiple times!**
2747
2748### This Should Be It
2749
2750**No more CSS overrides exist** (we've checked the entire file):
2751- Table cells ✓ Fixed
2752- Cell states ✓ Fixed
2753- Event items ✓ Fixed
2754- Headers ✓ Fixed
2755- Hover states ✓ Fixed
2756
2757**All backgrounds now come from inline styles using template colors!**
2758
2759## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS
2760
2761### �� Fixed: Removed Hardcoded Backgrounds from Calendar Cells
2762- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`!
2763- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS
2764- **Result:** Calendar cells now use template colors!
2765
2766### The Second Culprit
2767
2768MORE hardcoded backgrounds in the CSS file!
2769
2770**In style.css (lines 359-382)**:
2771```css
2772.cal-empty {
2773    background: #fafafa !important;  /* ← Overriding inline styles! */
2774}
2775
2776.cal-today {
2777    background: #e8f5e9 !important;  /* ← Overriding today cell! */
2778}
2779
2780.cal-today:hover {
2781    background: #c8e6c9 !important;  /* ← Overriding hover! */
2782}
2783
2784.cal-has-events {
2785    background: #fffbf0;  /* ← Overriding event cells! */
2786}
2787
2788.cal-has-events:hover {
2789    background: #fff4d9;  /* ← Overriding hover! */
2790}
2791```
2792
2793**These were ALL overriding the inline styles!**
2794
2795### The Fix
2796
2797**Removed all hardcoded backgrounds**:
2798```css
2799.cal-empty {
2800    /* background removed - inline style handles this */
2801    cursor: default !important;
2802}
2803
2804.cal-today {
2805    /* background removed - inline style handles this */
2806}
2807
2808.cal-has-events {
2809    /* background removed - inline style handles this */
2810}
2811
2812/* Hover states also removed */
2813```
2814
2815### What Was Overridden
2816
2817**v5.2.3 fixed**:
2818- Event items in sidebar ✓
2819
2820**v5.2.4 fixes**:
2821- Calendar day cells ✓
2822- Today cell ✓
2823- Empty cells ✓
2824- Cells with events ✓
2825- All hover states ✓
2826
2827### Why This Kept Happening
2828
2829**CSS had hardcoded backgrounds everywhere**:
28301. Event items: `#ffffff` (fixed in v5.2.3)
28312. Calendar cells: Multiple colors (fixed in v5.2.4)
28323. **All with `!important` flags!**
2833
2834**The inline styles couldn't override them!**
2835
2836### Visual Result
2837
2838**Now ALL backgrounds match**:
2839```
2840Calendar Grid:
2841┌──┬──┬──┬──┬──┬──┬──┐
2842│  │  │  │  │  │  │  │ ← All use __background_site__
2843├──┼──┼──┼──┼──┼──┼──┤
2844│  │██│  │  │  │  │  │ ← Today uses __background_neu__
2845├──┼──┼──┼──┼──┼──┼──┤
2846│  │  │  │  │  │  │  │ ← All match template
2847└──┴──┴──┴──┴──┴──┴──┘
2848
2849Sidebar Events:
2850┌────────────────────────┐
2851│ �� Event               │ ← Uses __background_site__
2852│ �� Event               │ ← Uses __background_site__
2853└────────────────────────┘
2854
2855Perfect consistency!
2856```
2857
2858### CSS Removed
2859
2860**Calendar cells**:
2861- `.cal-empty` background
2862- `.cal-empty:hover` background
2863- `.cal-today` background
2864- `.cal-today:hover` background
2865- `.cal-has-events` background
2866- `.cal-has-events:hover` background
2867
2868**All gone!** ✓
2869
2870### Important: Clear Caches Again!
2871
2872After installing v5.2.4:
2873
28741. **Hard refresh browser**: Ctrl+Shift+R (twice!)
28752. **Clear DokuWiki cache**: Admin → Clear Cache
28763. **May need to restart browser**: To clear CSS cache
2877
2878**Old CSS is VERY sticky!**
2879
2880### Why It Took So Long
2881
2882**Multiple CSS overrides**:
2883- Event items (v5.2.3) ✓ Fixed
2884- Calendar cells (v5.2.4) ✓ Fixed
2885- Each with different classes
2886- Each with `!important`
2887- Hidden throughout CSS file
2888
2889**Found them all now!** ��
2890
2891## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS
2892
2893### �� Fixed: Removed Hardcoded Backgrounds from CSS
2894- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles!
2895- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS
2896- **Result:** Event backgrounds now properly use template colors!
2897
2898### The Root Cause
2899
2900The CSS file was overriding the inline styles with hardcoded white backgrounds!
2901
2902**In style.css (lines 599-616)**:
2903```css
2904.event-compact-item {
2905    background: #ffffff;  /* ← This was overriding inline styles! */
2906}
2907
2908.event-compact-item:hover {
2909    background: #f8f9fa;  /* ← And this on hover! */
2910}
2911```
2912
2913**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade!
2914
2915### The Fix
2916
2917**Removed hardcoded backgrounds from CSS**:
2918```css
2919.event-compact-item {
2920    /* background removed - set via inline style with template colors */
2921    display: flex;
2922    /* ... other styles ... */
2923}
2924
2925.event-compact-item:hover {
2926    box-shadow: 0 1px 3px rgba(0,0,0,0.08);
2927    /* background removed - inline style handles this */
2928}
2929```
2930
2931### Why This Was So Difficult to Find
2932
2933**CSS Specificity & Cascade**:
29341. Inline styles with `!important` should win
29352. But CSS that comes after can still apply
29363. The hardcoded `background: #ffffff` was silently overriding
29374. All the PHP code was correct - it was the CSS!
2938
2939**What We Were Doing**:
2940- ✓ Reading template colors correctly
2941- ✓ Setting `cell_bg` to `__background_site__` correctly
2942- ✓ Applying inline styles with `!important` correctly
2943- ✗ CSS file was overriding everything!
2944
2945### What Was Affected
2946
2947**Event items in**:
2948- Main calendar sidebar
2949- Standalone event list
2950- Sidebar widget
2951- All event displays
2952
2953**All had white backgrounds hardcoded in CSS!**
2954
2955### Now Working
2956
2957**Events use template colors**:
2958```html
2959<div class="event-compact-item"
2960     style="background: #f5f5f5 !important; ...">
2961    ← Now this inline style actually works!
2962</div>
2963```
2964
2965**No CSS override** ✓
2966
2967### Testing
2968
2969To verify this works:
29701. Clear browser cache (important!)
29712. Clear DokuWiki cache
29723. Reload page
29734. Events should now match eventlist background
2974
2975**Browser caching can make old CSS persist!**
2976
2977### Visual Result
2978
2979**All backgrounds now matching**:
2980```
2981┌────────────────────────────┐
2982│ Eventlist (#f5f5f5)        │ ← Template color
2983├────────────────────────────┤
2984│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
2985├────────────────────────────┤
2986│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
2987└────────────────────────────┘
2988
2989Perfect match!
2990```
2991
2992### Why Everything Else Worked
2993
2994**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds:
2995- They only had inline styles ✓
2996- Inline styles worked correctly ✓
2997- Only event items had the CSS override ✗
2998
2999### Important Notes
3000
3001**Clear caches**:
3002- Browser cache (Ctrl+Shift+R or Cmd+Shift+R)
3003- DokuWiki cache (Admin → Clear Cache)
3004- Old CSS may be cached!
3005
3006**This was the culprit all along!**
3007
3008## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND
3009
3010### �� Fixed: Clock Area Now Matches Event Cells
3011- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`)
3012- **Result:** Clock/Today header matches event cell backgrounds!
3013
3014### The Issue
3015
3016The clock area (Today header) was using a different background:
3017
3018**Before (v5.2.1)**:
3019```php
3020'header_bg' => __background_alt__,   // Different color (gray #e8e8e8)
3021'cell_bg' => __background_site__,    // Event cells (#f5f5f5)
3022```
3023
3024**After (v5.2.2)**:
3025```php
3026'header_bg' => __background_site__,  // Same as cells (#f5f5f5) ✓
3027'cell_bg' => __background_site__,    // Event cells (#f5f5f5) ✓
3028```
3029
3030### What's the Clock Area?
3031
3032The clock/Today header in the sidebar:
3033```
3034┌────────────────────────────┐
3035│ 3:45:23 PM                 │ ← Clock area (header_bg)
3036│ ��️ --° | Sun, Feb 9, 2026 │
3037└────────────────────────────┘
3038```
3039
3040### All Backgrounds Now Unified
3041
3042**Everything now uses __background_site__**:
3043- Eventlist background ✓
3044- Calendar cells ✓
3045- Event items ✓
3046- Clock/Today header ✓
3047- Sidebar widget ✓
3048- All backgrounds match! ✓
3049
3050### Visual Result
3051
3052**Complete consistency**:
3053```
3054┌────────────────────────────┐
3055│ 3:45:23 PM                 │ ← Same background
3056│ ��️ --° | Sun, Feb 9, 2026 │
3057├────────────────────────────┤
3058│ �� Meeting at 2pm          │ ← Same background
3059│ Description...             │
3060├────────────────────────────┤
3061│ �� Another event           │ ← Same background
3062│ More details...            │
3063└────────────────────────────┘
3064
3065All using __background_site__ (#f5f5f5)
3066```
3067
3068**Perfect visual harmony!** ��
3069
3070## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND
3071
3072### �� Fixed: Calendar Cells Now Match Eventlist Background
3073- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`)
3074- **Result:** Calendar cells now match the eventlist background perfectly!
3075
3076### The Real Issue
3077
3078The eventlist was showing the CORRECT background color all along!
3079
3080**Eventlist was using**:
3081- `bg` → `__background_site__` ✓ (This was correct!)
3082
3083**Calendar cells were using**:
3084- `cell_bg` → `__background__` ✗ (This was wrong!)
3085
3086**They didn't match!**
3087
3088### The Correct Fix
3089
3090**Now everything uses __background_site__**:
3091```php
3092'bg' => __background_site__,        // Eventlist (was already correct)
3093'cell_bg' => __background_site__,   // Cells (now fixed to match)
3094```
3095
3096### Why __background_site__?
3097
3098The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background:
3099
3100```
3101Page Layout:
3102┌────────────────────────────────────┐
3103│ __background_site__ (page bg)     │ ← This is where calendar lives
3104│                                    │
3105│  ┌──────────────────────────────┐ │
3106│  │ __background__ (content bg)  │ │ ← Wiki article content
3107│  │                              │ │
3108│  └──────────────────────────────┘ │
3109│                                    │
3110└────────────────────────────────────┘
3111```
3112
3113**Calendar should match the page background, not the content background!**
3114
3115### Template Example
3116
3117Typical DokuWiki template:
3118```ini
3119__background_site__ = "#f5f5f5"  (Light gray - page background)
3120__background__ = "#ffffff"        (White - content area)
3121```
3122
3123**Before (v5.2.0)**:
3124- Eventlist: `#f5f5f5` (light gray) ✓ Correct
3125- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match
3126
3127**After (v5.2.1)**:
3128- Eventlist: `#f5f5f5` (light gray) ✓ Correct
3129- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED!
3130
3131### All Backgrounds Now Unified
3132
3133**Everything now uses __background_site__**:
3134- Eventlist sidebar background ✓
3135- Main calendar background ✓
3136- Calendar day cells ✓
3137- Sidebar widget ✓
3138- Event items ✓
3139- Input fields ✓
3140- Buttons ✓
3141
3142**All perfectly matched to the page background!**
3143
3144### Why Version 5.2.0 Was Wrong
3145
3146I 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.
3147
3148**The eventlist knew what it was doing all along!** The cells just needed to catch up.
3149
3150## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS
3151**Note**: This version went the wrong direction. See v5.2.1 for the correct fix.
3152
3153### �� Fixed: All Backgrounds Now Use __background__
3154- **Fixed:** `bg` now uses `__background__` instead of `__background_site__`
3155- **Fixed:** Eventlist, calendar cells, and sidebar all match now
3156- **Result:** Completely unified background throughout!
3157
3158### The Issue
3159
3160Different parts of the calendar were using different background sources:
3161
3162**Before (v5.1.9)**:
3163```php
3164'bg' => __background_site__        // Eventlist background (outer page)
3165'cell_bg' => __background__        // Cell backgrounds (content area)
3166```
3167
3168**These are different colors!**
3169- `__background_site__` = Outer page wrapper (often gray)
3170- `__background__` = Main content area (often white)
3171
3172### The Fix
3173
3174**After (v5.2.0)**:
3175```php
3176'bg' => __background__             // Eventlist background ✓
3177'cell_bg' => __background__        // Cell backgrounds ✓
3178```
3179
3180**Both use the same source!**
3181
3182### What Uses 'bg'
3183
3184The `bg` color is used for:
3185- Eventlist sidebar background
3186- Main calendar container
3187- Sidebar widget background
3188- Form backgrounds
3189- Event dialogs
3190
3191### What Uses 'cell_bg'
3192
3193The `cell_bg` color is used for:
3194- Calendar day cells
3195- Event item backgrounds
3196- Input field backgrounds
3197- Button backgrounds
3198
3199### Why This Matters
3200
3201**Template color hierarchy**:
3202```
3203__background_site__ → Outer page/body (e.g., #f5f5f5 light gray)
3204__background__      → Main content area (e.g., #ffffff white)
3205__background_alt__  → Sections/headers
3206__background_neu__  → Highlights
3207```
3208
3209**We want all calendar backgrounds to match the main content area!**
3210
3211### Visual Comparison
3212
3213**Before (v5.1.9)**: Mismatched backgrounds
3214```
3215┌────────────────────────────────┐
3216│ Eventlist (gray #f5f5f5)      │ ← __background_site__
3217└────────────────────────────────┘
3218
3219┌────────────────────────────────┐
3220│ Calendar                       │
3221│ ┌──┬──┬──┬──┬──┬──┬──┐       │
3222│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
3223│ └──┴──┴──┴──┴──┴──┴──┘       │
3224└────────────────────────────────┘
3225Different colors - looks inconsistent
3226```
3227
3228**After (v5.2.0)**: Unified backgrounds
3229```
3230┌────────────────────────────────┐
3231│ Eventlist (white #fff)         │ ← __background__
3232└────────────────────────────────┘
3233
3234┌────────────────────────────────┐
3235│ Calendar                       │
3236│ ┌──┬──┬──┬──┬──┬──┬──┐       │
3237│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
3238│ └──┴──┴──┴──┴──┴──┴──┘       │
3239└────────────────────────────────┘
3240Same color - perfectly consistent!
3241```
3242
3243### Template Examples
3244
3245**Light Template**:
3246```ini
3247__background_site__ = "#f5f5f5"  (light gray)
3248__background__ = "#ffffff"       (white)
3249```
3250
3251**Before**: Eventlist gray, cells white
3252**After**: Eventlist white, cells white ✓
3253
3254**Dark Template**:
3255```ini
3256__background_site__ = "#1a1a1a"  (very dark)
3257__background__ = "#2d2d2d"       (dark)
3258```
3259
3260**Before**: Eventlist very dark, cells dark
3261**After**: Eventlist dark, cells dark ✓
3262
3263### Benefits
3264
3265**Visual Consistency**:
3266- All backgrounds match
3267- Clean, unified appearance
3268- Professional look
3269
3270**Correct Template Integration**:
3271- Uses content area color (not page wrapper)
3272- Matches wiki content area
3273- Proper color hierarchy
3274
3275**Works Everywhere**:
3276- Light templates ✓
3277- Dark templates ✓
3278- Custom templates ✓
3279
3280### All Backgrounds Unified
3281
3282**Now using __background__**:
3283- Eventlist background ✓
3284- Calendar cells ✓
3285- Sidebar widget ✓
3286- Event items ✓
3287- Input fields ✓
3288- Buttons ✓
3289- Dialogs ✓
3290
3291**Perfect harmony throughout!** ��
3292
3293## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS
3294
3295### �� Fixed: Wiki Theme Event Backgrounds Not Showing
3296- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!)
3297- **Fixed:** Replaced CSS variables with actual hex colors
3298- **Result:** Event backgrounds now show correctly with template colors!
3299
3300### The Problem
3301
3302CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes!
3303
3304**Before (broken)**:
3305```php
3306'cell_bg' => 'var(--__background__, #fff)',  // Doesn't work in inline styles!
3307```
3308
3309**After (fixed)**:
3310```php
3311'cell_bg' => '#fff',  // Actual hex color works!
3312```
3313
3314### What Was Affected
3315
3316**When style.ini read successfully**:
3317- ✅ Worked fine (uses actual hex colors from file)
3318
3319**When style.ini fallback used**:
3320- ❌ Events had no background
3321- ❌ CSS variables don't work in inline styles
3322- ❌ Looked broken
3323
3324### The Fix
3325
3326**Wiki theme fallback now uses real colors**:
3327```php
3328'wiki' => [
3329    'bg' => '#f5f5f5',           // Real hex (was: var(--__background_site__))
3330    'border' => '#ccc',           // Real hex (was: var(--__border__))
3331    'cell_bg' => '#fff',          // Real hex (was: var(--__background__))
3332    'cell_today_bg' => '#eee',    // Real hex (was: var(--__background_neu__))
3333    'text_primary' => '#333',     // Real hex (was: var(--__text__))
3334    'text_bright' => '#2b73b7',   // Real hex (was: var(--__link__))
3335    'text_dim' => '#666',         // Real hex (was: var(--__text_neu__))
3336    'grid_bg' => '#e8e8e8',       // Real hex (was: var(--__background_alt__))
3337    // ... all colors now use real hex values
3338]
3339```
3340
3341### Why CSS Variables Don't Work
3342
3343**CSS variables work**:
3344```css
3345.some-class {
3346    background: var(--__background__, #fff);  /* ✓ Works in CSS */
3347}
3348```
3349
3350**CSS variables DON'T work**:
3351```html
3352<div style="background: var(--__background__, #fff)">  <!-- ✗ Doesn't work -->
3353```
3354
3355### How It Works Now
3356
3357**Priority system**:
33581. **Try reading style.ini** → Use actual template hex colors ✓
33592. **If file not found** → Use fallback hex colors ✓
33603. **Never use CSS variables in inline styles** ✓
3361
3362**Both paths now work correctly!**
3363
3364### Visual Result
3365
3366**Events now have proper backgrounds**:
3367```
3368┌──────────────────────────┐
3369│ �� Meeting at 2pm        │ ← White background (#fff)
3370│ Description here...      │
3371│ [✏️ Edit] [��️ Delete]   │
3372└──────────────────────────┘
3373
3374Not:
3375┌──────────────────────────┐
3376│ �� Meeting at 2pm        │ ← No background (broken)
3377│ Description here...      │
3378└──────────────────────────┘
3379```
3380
3381### Affected Areas
3382
3383**All event displays**:
3384- Main calendar events ✓
3385- Sidebar widget events ✓
3386- Event list items ✓
3387- Event backgrounds ✓
3388- Button backgrounds ✓
3389- Input field backgrounds ✓
3390
3391**Everything uses real colors now!**
3392
3393## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT
3394
3395### �� Reorganized: Better Update Tab Layout
3396- **Moved:** Current Version section to the top
3397- **Combined:** Upload and Important Notes side-by-side
3398- **Improved:** Space-efficient two-column layout
3399- **Result:** More information visible at once!
3400
3401### New Layout Order
3402
3403**Version 5.1.8**:
3404```
34051. Current Version (at top - see what you have)
34062. Upload + Important Notes (side-by-side)
34073. Recent Changes (changelog)
34084. Backups
3409```
3410
3411### Side-by-Side Design
3412
3413**Upload form (left 60%) + Important Notes (right 40%)**:
3414```
3415┌──────────────────────────────────────────┐
3416│ �� Current Version                       │
3417│ Version: 5.1.8                           │
3418│ ✅ Permissions: OK                       │
3419└──────────────────────────────────────────┘
3420
3421┌─────────────────────┬────────────────────┐
3422│ �� Upload New       │ ⚠️ Important Notes │
3423│ [Choose File]       │ • Replaces files   │
3424│ ☑ Backup first      │ • Config preserved │
3425│ [Upload] [Clear]    │ • Events safe      │
3426└─────────────────────┴────────────────────┘
3427```
3428
3429### Benefits
3430
3431**Current Version First**:
3432- See what you have immediately
3433- Check permissions at a glance
3434- Know if ready to update
3435
3436**Side-by-Side Layout**:
3437- Upload form and warnings together
3438- Read notes while choosing file
3439- More efficient use of space
3440- Less scrolling needed
3441
3442**Better Information Flow**:
34431. See current version ✓
34442. Upload new version with notes visible ✓
34453. Review recent changes ✓
34464. Manage backups ✓
3447
3448### Visual Comparison
3449
3450**Before (v5.1.7)**:
3451```
3452Important Notes (full width)
34533454Upload Form (full width)
34553456Current Version
34573458Recent Changes
34593460Backups
3461```
3462
3463**After (v5.1.8)**:
3464```
3465Current Version (full width)
34663467Upload (60%) | Notes (40%)
34683469Recent Changes
34703471Backups
3472```
3473
3474**More compact, better organized!**
3475
3476### Responsive Design
3477
3478**Wide screens**:
3479- Upload and notes side-by-side
3480- Full 1200px width utilized
3481- Efficient space usage
3482
3483**Narrow screens**:
3484- Sections stack gracefully
3485- Flex layout adapts
3486- Still fully functional
3487
3488### Layout Details
3489
3490**Current Version Section**:
3491- Full width (1200px max)
3492- Shows version, author, description
3493- Permission status with icons
3494- Helpful fix commands if needed
3495
3496**Upload/Notes Section**:
3497- Flexbox layout with gap
3498- Upload: `flex:1` (grows)
3499- Notes: `flex:0 0 350px` (fixed 350px)
3500- Both have proper min-width
3501
3502**Recent Changes Section**:
3503- Full width (1200px max)
3504- Compact scrollable view
3505- Color-coded change types
3506- Last 10 versions shown
3507
3508**Backups Section**:
3509- Full width (1200px max)
3510- Manual backup button
3511- Scrollable file list
3512- All actions accessible
3513
3514### Improved Max Widths
3515
3516All sections now use `max-width:1200px` (previously 900px):
3517- Better use of wide screens
3518- Still responsive on narrow screens
3519- Consistent throughout tab
3520
3521## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR
3522
3523### �� Fixed: Extra Closing Brace
3524- **Fixed:** ParseError on line 1936 (extra closing brace)
3525- **Result:** Manual backup feature now works correctly!
3526
3527### What Was Wrong
3528
3529Extra `}` after the backup section:
3530
3531**Before (broken)**:
3532```php
3533echo '</div>';
3534}  // ← Extra closing brace!
3535
3536echo '<script>
3537```
3538
3539**After (fixed)**:
3540```php
3541echo '</div>';
3542
3543echo '<script>
3544```
3545
3546**Manual backup feature now fully functional!** ✅
3547
3548## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND
3549
3550### �� Added: Create Backup Manually Anytime
3551- **Added:** "Create Backup Now" button in Backups section
3552- **Added:** Manual backup action handler with full verification
3553- **Added:** Backups section always visible (even with no backups)
3554- **Added:** Success message showing file size and file count
3555- **Result:** Create backups anytime without needing to upload!
3556
3557### Manual Backup Button
3558
3559**New Layout**:
3560```
3561┌─────────────────────────────────────┐
3562│ �� Backups        [�� Create Backup Now] │
3563├─────────────────────────────────────┤
3564│ Backup File                Size     │
3565calendar.backup.v5.1.6...  243 KB   │
3566│ [�� Download] [✏️ Rename] [��️ Delete] │
3567└─────────────────────────────────────┘
3568```
3569
3570**Always visible - even with no backups**:
3571```
3572┌─────────────────────────────────────┐
3573│ �� Backups        [�� Create Backup Now] │
3574├─────────────────────────────────────┤
3575│ No backups yet. Click "Create       │
3576│ Backup Now" to create your first    │
3577│ backup.                              │
3578└─────────────────────────────────────┘
3579```
3580
3581### How It Works
3582
3583**Click the button**:
35841. Confirm: "Create a backup of the current plugin version?"
35852. System creates backup ZIP
35863. Verifies: File count (30+ files)
35874. Verifies: File size (200KB+)
35885. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)"
3589
3590**Backup naming**:
3591```
3592calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
3593                       ^^^^^^
3594                     "manual" tag identifies manual backups
3595```
3596
3597### Use Cases
3598
3599**Before updates**:
3600- Create safety backup before uploading new version
3601- Have multiple restore points
3602- Test new features with fallback
3603
3604**Regular backups**:
3605- Weekly/monthly backup schedule
3606- Before making configuration changes
3607- After important customizations
3608
3609**Development**:
3610- Backup before code experiments
3611- Save working states
3612- Quick rollback points
3613
3614### Full Verification
3615
3616**Same checks as automatic backups**:
3617- ✅ File count check (minimum 10, expected 30+)
3618- ✅ File size check (minimum 1KB, expected 200KB+)
3619- ✅ Existence check (file actually created)
3620- ✅ Automatic cleanup on failure
3621
3622**Success message includes**:
3623- Backup filename
3624- File size (human-readable)
3625- Number of files backed up
3626
3627### Example Messages
3628
3629**Success**:
3630```
3631✓ Manual backup created successfully:
3632  calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
3633  (243 KB, 31 files)
3634```
3635
3636**Failure Examples**:
3637```
3638❌ Plugin directory is not readable.
3639   Please check permissions.
3640
3641❌ Backup incomplete: Only 5 files were added (expected 30+).
3642   Backup failed.
3643
3644❌ Backup file is too small (342 bytes).
3645   Only 3 files were added. Backup failed.
3646```
3647
3648### Benefits
3649
3650**On-Demand Safety**:
3651- Create backups anytime
3652- No need to upload new version
3653- Quick and easy
3654
3655**Peace of Mind**:
3656- Backup before risky changes
3657- Multiple restore points
3658- Safe experimentation
3659
3660**Professional Workflow**:
3661- Regular backup schedule
3662- Version snapshots
3663- Disaster recovery
3664
3665### Backup Section Improvements
3666
3667**Always Visible**:
3668- Section shows even with 0 backups
3669- Button always accessible
3670- Clear call-to-action
3671
3672**Better Header**:
3673- Title and button on same row
3674- Clean, professional layout
3675- Space-efficient design
3676
3677### Technical Details
3678
3679**New Action**: `create_manual_backup`
3680
3681**New Function**: `createManualBackup()`
3682- Gets current version
3683- Creates timestamped filename with "manual" tag
3684- Uses same verification as auto-backups
3685- Shows detailed success/error messages
3686
3687**File Naming Convention**:
3688```
3689Automatic (on upload):
3690calendar.backup.v5.1.6.2026-02-09_12-30-45.zip
3691
3692Manual (button click):
3693calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
3694                       ^^^^^^^
3695                    Easy to identify!
3696```
3697
3698### Permissions Required
3699
3700- **Read access**: Plugin directory
3701- **Write access**: Parent plugins directory
3702
3703**Same as automatic backups** - no additional permissions needed!
3704
3705## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION
3706
3707### �� Enhanced: Backup Creation with Robust Verification
3708- **Added:** File count validation (must have 10+ files)
3709- **Added:** File size validation (must be 1KB+ minimum)
3710- **Added:** Return value from addDirectoryToZip (counts files added)
3711- **Added:** Detailed error messages showing file count
3712- **Added:** Automatic deletion of invalid/incomplete backups
3713- **Enhanced:** Exception handling with proper error propagation
3714- **Result:** Backups are now guaranteed to be complete or fail clearly!
3715
3716### What Changed
3717
3718**Before (v5.1.4)**:
3719```php
3720$this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
3721$zip->close();
3722// No verification - could create empty or partial backup
3723```
3724
3725**After (v5.1.5)**:
3726```php
3727$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
3728$zip->close();
3729
3730// Verify backup exists
3731if (!file_exists($backupPath)) {
3732    redirect('Backup file was not created');
3733}
3734
3735// Verify backup has content
3736$backupSize = filesize($backupPath);
3737if ($backupSize < 1000) {
3738    unlink($backupPath);
3739    redirect('Backup too small: ' . $backupSize . ' bytes');
3740}
3741
3742// Verify file count
3743if ($fileCount < 10) {
3744    unlink($backupPath);
3745    redirect('Only ' . $fileCount . ' files added (expected 30+)');
3746}
3747```
3748
3749### Backup Validation Checks
3750
3751**Three-Layer Verification**:
3752
37531. **File Count Check**:
3754   - Minimum: 10 files required
3755   - Expected: 30+ files
3756   - Action: Delete backup if too few files
3757
37582. **Size Check**:
3759   - Minimum: 1KB (1000 bytes)
3760   - Expected: 200-250KB
3761   - Action: Delete backup if too small
3762
37633. **Existence Check**:
3764   - Verify file was actually created
3765   - Check ZIP archive is valid
3766   - Action: Error if file missing
3767
3768### Enhanced Error Reporting
3769
3770**Detailed Error Messages**:
3771```
3772❌ "Backup file was not created"
3773❌ "Backup too small (342 bytes). Only 3 files added."
3774❌ "Only 5 files added (expected 30+). Backup aborted."
3775❌ "Too many errors adding files: Failed to add X, Y, Z..."
3776❌ "Directory does not exist: /path/to/dir"
3777❌ "Directory is not readable: /path/to/dir"
3778```
3779
3780**Now you know exactly what went wrong!**
3781
3782### Improved addDirectoryToZip Function
3783
3784**Returns File Count**:
3785```php
3786private function addDirectoryToZip($zip, $dir, $zipPath = '') {
3787    $fileCount = 0;
3788    $errors = [];
3789
3790    // Validation
3791    if (!is_dir($dir)) throw new Exception("Directory does not exist");
3792    if (!is_readable($dir)) throw new Exception("Not readable");
3793
3794    // Add files
3795    foreach ($files as $file) {
3796        if ($zip->addFile($filePath, $relativePath)) {
3797            $fileCount++;
3798        } else {
3799            $errors[] = "Failed to add: " . $filename;
3800        }
3801    }
3802
3803    // Check error threshold
3804    if (count($errors) > 5) {
3805        throw new Exception("Too many errors");
3806    }
3807
3808    return $fileCount;  // Returns count for verification!
3809}
3810```
3811
3812### Safety Features
3813
3814**Invalid Backup Cleanup**:
3815- Failed backups are automatically deleted
3816- No partial/corrupt backups left behind
3817- Clean error state
3818
3819**Error Threshold**:
3820- Allow up to 5 minor file errors (logs warnings)
3821- More than 5 errors = complete failure
3822- Prevents partially corrupt backups
3823
3824**Directory Validation**:
3825- Check directory exists before processing
3826- Check directory is readable
3827- Fail fast with clear errors
3828
3829### Benefits
3830
3831**Guaranteed Complete Backups**:
3832- ✅ All files included or backup fails
3833- ✅ No silent failures
3834- ✅ Clear error messages
3835- ✅ Automatic cleanup
3836
3837**Better Debugging**:
3838- Know exactly how many files were added
3839- See specific errors for missing files
3840- Understand why backup failed
3841
3842**User Confidence**:
3843- Backup succeeds = complete backup
3844- Backup fails = clear error message
3845- No ambiguity
3846
3847### Example Scenarios
3848
3849**Scenario 1: Permission Issue**
3850```
3851User uploads new version
3852System starts backup
3853Error: "Directory is not readable: /lib/plugins/calendar/"
3854Backup fails before creating file
3855User sees clear error message
3856```
3857
3858**Scenario 2: Partial Backup**
3859```
3860User uploads new version
3861System creates backup
3862Only 5 files added (disk issue?)
3863Size: 450 bytes
3864Verification fails
3865Incomplete backup deleted
3866Error: "Only 5 files added (expected 30+)"
3867```
3868
3869**Scenario 3: Success**
3870```
3871User uploads new version
3872System creates backup
387331 files added
3874Size: 240KB
3875All verifications pass ✅
3876Update proceeds
3877```
3878
3879### Testing Recommendations
3880
3881After installing v5.1.5:
38821. Upload a new version with backup enabled
38832. Check for success message
38843. Verify backup file exists in /lib/plugins/
38854. Check backup file size (should be ~240KB)
38865. If backup fails, read error message carefully
3887
3888**Your backups are now bulletproof!** ��
3889
3890## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED
3891
3892### ✅ Verified: Backup System Working Correctly
3893- **Verified:** addDirectoryToZip function includes all files recursively
3894- **Verified:** Backups contain all 31+ files from calendar directory
3895- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed)
3896- **Info:** Backup sizes grow slightly with each version (more code = more features!)
3897- **Result:** Backup system is working perfectly!
3898
3899### Backup System Details
3900
3901**What Gets Backed Up**:
3902- All PHP files (syntax.php, admin.php, action.php, etc.)
3903- All JavaScript files (calendar-main.js, script.js)
3904- All documentation (CHANGELOG.md, README.md, all guides)
3905- All configuration (sync_config.php)
3906- All language files
3907- All assets and resources
3908- **Everything in the calendar/ directory!**
3909
3910**Backup Size Analysis**:
3911```
3912Version 5.0.4: 233KB (normal)
3913Version 5.0.5: 234KB (normal)
3914Version 5.0.6: 235KB (normal)
3915Version 5.0.7: 236KB (normal)
3916Version 5.0.8: 237KB (normal)
3917Version 5.0.9: 237KB (normal)
3918Version 5.1.0: 238KB (normal)
3919Version 5.1.1: 238KB (normal)
3920Version 5.1.2: 240KB (normal - added AJAX features)
3921Version 5.1.3: 240KB (normal)
3922```
3923
3924**Why Sizes Grow**:
3925- More features = more code
3926- Longer CHANGELOG
3927- Additional documentation
3928- New functionality
3929- **This is expected and normal!**
3930
3931**Compression Ratio**:
3932```
3933Uncompressed: ~1.0 MB (source files)
3934Compressed:   ~240 KB (ZIP archive)
3935Ratio:        ~24% (excellent compression!)
3936```
3937
3938### Backup File Contents
3939
3940**31 Files Included**:
3941```
3942admin.php              (216KB - main admin interface)
3943syntax.php             (173KB - calendar rendering)
3944calendar-main.js       (102KB - JavaScript functionality)
3945CHANGELOG.md           (268KB - complete version history)
3946style.css              (57KB - all styling)
3947action.php             (38KB - DokuWiki actions)
3948sync_outlook.php       (32KB - Outlook integration)
3949+ 24 other files (docs, configs, helpers)
3950```
3951
3952**All files successfully included!** ✅
3953
3954### How Backups Work
3955
3956**Creation Process**:
39571. User uploads new plugin version
39582. Checkbox "Create backup first" (checked by default)
39593. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip`
39604. Backup saved to: `/lib/plugins/` directory
39615. Then proceeds with update
3962
3963**Backup Function**:
3964```php
3965private function addDirectoryToZip($zip, $dir, $zipPath = '') {
3966    $files = new RecursiveIteratorIterator(
3967        new RecursiveDirectoryIterator($dir),
3968        RecursiveIteratorIterator::LEAVES_ONLY
3969    );
3970    foreach ($files as $file) {
3971        if (!$file->isDir()) {
3972            $zip->addFile($filePath, $relativePath);
3973        }
3974    }
3975}
3976```
3977
3978**Recursive = Gets Everything!** ✅
3979
3980### Verification Results
3981
3982**Test Results**:
3983- ✅ All 31 files present in zip
3984- ✅ All subdirectories included (lang/en/)
3985- ✅ File sizes match originals
3986- ✅ Compression works properly
3987- ✅ No files missing
3988- ✅ Backup can be restored
3989
3990**File Count**:
3991```
3992Source directory: 31 files
3993Backup ZIP:       34 items (31 files + 3 directories)
3994Status:           COMPLETE ✅
3995```
3996
3997### Backup Best Practices
3998
3999**Always enabled by default** ✅
4000**Stored in accessible location** ✅
4001**Timestamped filenames** ✅
4002**Complete directory backup** ✅
4003**Easy to restore** ✅
4004
4005### Conclusion
4006
4007The backup system is working perfectly. The file sizes are appropriate and expected:
4008- Compressed size: ~240KB (good compression)
4009- Uncompressed size: ~1MB (all source files)
4010- All files included: YES ✅
4011- Growing size over versions: Normal (more features!)
4012
4013**Your backups are complete and reliable!** ��
4014
4015## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR
4016
4017### �� Fixed: JavaScript Syntax Error in AJAX Function
4018- **Fixed:** ParseError on line 1947 (deleteBackup function)
4019- **Fixed:** Escaped all single quotes in JavaScript strings
4020- **Result:** AJAX backup deletion now works correctly!
4021
4022### What Was Wrong
4023
4024JavaScript inside PHP echo needs escaped quotes:
4025
4026**Before (broken)**:
4027```javascript
4028formData.append('action', 'delete_backup');  // PHP interprets quotes
4029```
4030
4031**After (fixed)**:
4032```javascript
4033formData.append(\'action\', \'delete_backup\');  // Escaped for PHP
4034```
4035
4036### All Quotes Escaped
4037
4038Fixed in deleteBackup function:
4039- ✅ FormData.append() calls
4040- ✅ fetch() URL
4041- ✅ querySelector() calls
4042- ✅ createElement() call
4043- ✅ All string literals
4044- ✅ Error messages
4045
4046**JavaScript now works!** ✓
4047
4048## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT
4049
4050### �� Improved: Update Tab Further Refined
4051- **Moved:** Important Notes to very top (above upload)
4052- **Enhanced:** Delete backup now uses AJAX (no page refresh!)
4053- **Added:** Smooth fade-out animation when deleting backups
4054- **Added:** Success message after deletion
4055- **Auto-remove:** Backup section disappears if last backup deleted
4056- **Result:** Smoother, more polished experience!
4057
4058### New Layout Order
4059
4060**Final Order (v5.1.2)**:
4061```
40621. ⚠️ Important Notes (warnings at top)
40632. �� Upload New Version (with Clear Cache button)
40643. �� Current Version (info)
40654. �� Recent Changes (changelog)
40665. �� Available Backups (if any)
4067```
4068
4069### AJAX Backup Deletion
4070
4071**Before (v5.1.1)**:
4072- Click Delete → Page refreshes → Scroll back down
4073- Lose position on page
4074- Page reload is jarring
4075
4076**After (v5.1.2)**:
4077- Click Delete → Confirm
4078- Row fades out smoothly
4079- Row disappears
4080- Success message shows at top
4081- Success message fades after 3 seconds
4082- If last backup: entire section fades away
4083- **No page refresh!** ✓
4084
4085### Visual Flow
4086
4087**Delete Animation**:
4088```
40891. Click ��️ Delete
40902. Confirm dialog
40913. Row fades out (0.3s)
40924. Row removed
40935. Success message appears
40946. Message fades after 3s
4095```
4096
4097**If Last Backup**:
4098```
40991. Delete last backup
41002. Row fades out
41013. Entire "Available Backups" section fades
41024. Section removed
41035. Clean interface ✓
4104```
4105
4106### Success Message
4107
4108After deleting:
4109```
4110┌──────────────────────────────┐
4111│ ✓ Backup deleted: filename   │ ← Appears at top
4112└──────────────────────────────┘
4113   Fades after 3 seconds
4114```
4115
4116### Benefits
4117
4118**Important Notes First**:
4119- Warnings before actions ✓
4120- Read before uploading ✓
4121- Clear expectations ✓
4122
4123**AJAX Deletion**:
4124- No page refresh ✓
4125- Smooth animations ✓
4126- Stay in context ✓
4127- Professional feel ✓
4128
4129**Auto-Cleanup**:
4130- Empty list disappears ✓
4131- Clean interface ✓
4132- No clutter ✓
4133
4134### Technical Implementation
4135
4136**AJAX Request**:
4137```javascript
4138fetch('?do=admin&page=calendar&tab=update', {
4139    method: 'POST',
4140    body: formData
4141})
4142```
4143
4144**DOM Manipulation**:
4145- Fade out row
4146- Remove element
4147- Show success
4148- Remove section if empty
4149
4150**Smooth Transitions**:
4151- 300ms fade animations
4152- Clean visual feedback
4153- Professional polish
4154
4155## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB
4156
4157### �� Improved: Update Tab Layout Reorganized
4158- **Moved:** Upload section to the top of the page
4159- **Added:** Clear Cache button next to Upload & Install button
4160- **Changed:** "Current Version" section moved below upload
4161- **Result:** Better workflow - upload first, then see version info!
4162
4163### New Layout Order
4164
4165**Before (v5.1.0)**:
4166```
41671. Clear Cache (standalone)
41682. Current Version
41693. Recent Changes
41704. Upload New Version
41715. Warning Box
41726. Backups
4173```
4174
4175**After (v5.1.1)**:
4176```
41771. Upload New Version (with Clear Cache button side-by-side)
41782. Warning Box
41793. Current Version
41804. Recent Changes
41815. Backups
4182```
4183
4184### Visual Result
4185
4186**Top of Update Tab**:
4187```
4188┌─────────────────────────────────┐
4189│ �� Upload New Version           │
4190│ ┌─────────────────────────────┐ │
4191│ │ [Choose File]               │ │
4192│ │ ☑ Create backup first       │ │
4193│ │ ┌──────────────┬──────────┐ │ │
4194│ │ │�� Upload &   │��️ Clear  │ │ │
4195│ │ │   Install    │   Cache  │ │ │
4196│ │ └──────────────┴──────────┘ │ │
4197│ └─────────────────────────────┘ │
4198│                                 │
4199│ ⚠️ Important Notes              │
4200│ • Will replace all files        │
4201│ • Config preserved              │
4202│                                 │
4203│ �� Current Version              │
4204│ Version: 5.1.1                  │
4205└─────────────────────────────────┘
4206```
4207
4208### Benefits
4209
4210**Better Workflow**:
4211- Primary action (upload) is first
4212- Clear cache conveniently next to install
4213- No scrolling to find upload button
4214- Logical top-to-bottom flow
4215
4216**Side-by-Side Buttons**:
4217- Upload & Install (green)
4218- Clear Cache (orange)
4219- Both common actions together
4220- Easy to access after upload
4221
4222**Improved UX**:
4223- Upload is most important → now at top
4224- Version info is reference → moved down
4225- Related actions grouped
4226- Cleaner organization
4227
4228### Button Layout
4229
4230```
4231┌──────────────────┬──────────────┐
4232│ �� Upload &      │ ��️ Clear     │
4233│    Install       │    Cache     │
4234│ (Green)          │ (Orange)     │
4235└──────────────────┴──────────────┘
4236```
4237
4238**Green = Primary Action**
4239**Orange = Secondary Action**
4240
4241Both easily accessible!
4242
4243## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND
4244
4245### �� Changed: Admin Section Backgrounds Now Use __background__
4246- **Changed:** All section boxes now use `__background__` instead of `__background_alt__`
4247- **Result:** Cleaner, more unified admin interface!
4248
4249### Background Usage Update
4250
4251**Before (v5.0.9)**:
4252```php
4253Section boxes: bg_alt (__background_alt__)
4254Content areas: bg (__background__)
4255```
4256
4257**After (v5.1.0)**:
4258```php
4259Section boxes: bg (__background__)
4260Content areas: bg (__background__)
4261```
4262
4263### Why This Change?
4264
4265**More unified appearance**:
4266- Sections and content use same background
4267- Creates cleaner, more cohesive look
4268- Borders provide visual separation
4269- Matches typical admin UI patterns
4270
4271**Template color hierarchy**:
4272```
4273__background_site__ → Outer page wrapper
4274__background__      → Content & sections (BOTH now use this)
4275__background_alt__  → Reserved for special panels/highlights
4276__background_neu__  → Special highlights
4277```
4278
4279### Visual Result
4280
4281**Light Template**:
4282```ini
4283__background__ = "#ffffff"
4284__background_alt__ = "#e8e8e8"
4285```
4286
4287**Before**:
4288```
4289Admin Page:
4290┌─────────────────────┐
4291│ ┌─────────────────┐ │
4292│ │ Section Box     │ │ ← Gray (#e8e8e8)
4293│ │ ┌─────────────┐ │ │
4294│ │ │ Content     │ │ │ ← White (#fff)
4295│ │ └─────────────┘ │ │
4296│ └─────────────────┘ │
4297└─────────────────────┘
4298Two-tone appearance
4299```
4300
4301**After**:
4302```
4303Admin Page:
4304┌─────────────────────┐
4305│ ┌─────────────────┐ │
4306│ │ Section Box     │ │ ← White (#fff)
4307│ │ ┌─────────────┐ │ │
4308│ │ │ Content     │ │ │ ← White (#fff)
4309│ │ └─────────────┘ │ │
4310│ └─────────────────┘ │
4311└─────────────────────┘
4312Unified, clean appearance
4313Borders provide separation
4314```
4315
4316**Dark Template**:
4317```ini
4318__background__ = "#2d2d2d"
4319__background_alt__ = "#3a3a3a"
4320```
4321
4322**After**:
4323```
4324Admin Page:
4325┌─────────────────────┐
4326│ ┌─────────────────┐ │
4327│ │ Section Box     │ │ ← Dark (#2d2d2d)
4328│ │ ┌─────────────┐ │ │
4329│ │ │ Content     │ │ │ ← Dark (#2d2d2d)
4330│ │ └─────────────┘ │ │
4331│ └─────────────────┘ │
4332└─────────────────────┘
4333Unified dark appearance
4334Accent borders provide definition
4335```
4336
4337### Benefits
4338
4339**Cleaner Look**:
4340- No more alternating gray/white
4341- More professional appearance
4342- Less visual noise
4343- Unified color scheme
4344
4345**Better Consistency**:
4346- Matches modern admin UI patterns
4347- Borders define sections, not colors
4348- Simpler, cleaner design
4349- Easier on the eyes
4350
4351**Template Friendly**:
4352- Works with any background color
4353- Light or dark templates
4354- Custom colors
4355- Always looks cohesive
4356
4357### All Sections Updated
4358
4359✅ Outlook Sync config sections
4360✅ Manage Events sections
4361✅ Update Plugin sections
4362✅ Themes tab sections
4363✅ Week start day section
4364✅ All form sections
4365
4366**Complete unified theming!** ��
4367
4368## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB
4369
4370### �� Fixed: Syntax Error in Theme Cards
4371- **Fixed:** ParseError on line 4461 (Purple theme card)
4372- **Fixed:** Malformed ternary expressions from sed replacement
4373- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki)
4374- **Result:** Admin pages work correctly!
4375
4376### What Was Wrong
4377
4378The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions:
4379
4380**Before (broken)**:
4381```php
4382? '#9b59b6' : ' . $colors['border'] . ')
4383// Extra quote and dot created syntax error
4384```
4385
4386**After (fixed)**:
4387```php
4388? '#9b59b6' : $colors['border'])
4389// Clean ternary expression
4390```
4391
4392### All Theme Cards Fixed
4393
4394- ✅ Purple Dream card
4395- ✅ Professional Blue card
4396- ✅ Pink Bling card
4397- ✅ Wiki Default card
4398
4399### Now Working
4400
4401**Theme selection page loads** ✓
4402**All cards display properly** ✓
4403**Template colors applied** ✓
4404**No syntax errors** ✓
4405
4406## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING
4407
4408### �� Fixed: Themes Tab Backgrounds & Correct Template Color Mapping
4409- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites)
4410- **Fixed:** Main background now uses `__background__` instead of `__background_site__`
4411- **Fixed:** Theme selection cards use template backgrounds
4412- **Fixed:** Week start options use template backgrounds
4413- **Result:** Perfect color mapping throughout admin!
4414
4415### Color Mapping Correction
4416
4417**Before (v5.0.7)**:
4418```php
4419bg: __background_site__  // Wrong - this is outer page bg
4420bg_alt: __background_alt__
4421```
4422
4423**After (v5.0.8)**:
4424```php
4425bg: __background__       // Correct - main content bg
4426bg_alt: __background_alt__
4427```
4428
4429### Why This Matters
4430
4431**Template color hierarchy**:
4432```
4433__background_site__ → Outer page/site background
4434__background__      → Main content area (CORRECT for admin)
4435__background_alt__  → Sections/panels
4436__background_neu__  → Highlights
4437```
4438
4439**Admin should use**:
4440- `__background__` for input fields, content areas
4441- `__background_alt__` for section boxes, panels
4442
4443### Themes Tab Fixed
4444
4445**Removed all hardcoded colors**:
4446```php
4447Before: '#ddd', '#fff', '#dee2e6'
4448After:  $colors['border'], $colors['bg'], $colors['border']
4449```
4450
4451**Now themed**:
4452- ✅ Week start section background
4453- ✅ Week start option backgrounds
4454- ✅ Theme card backgrounds
4455- ✅ Theme card borders
4456- ✅ All borders throughout
4457
4458### Visual Result
4459
4460**Light Template**:
4461```ini
4462__background__ = "#ffffff"
4463__background_alt__ = "#e8e8e8"
4464```
4465
4466**Admin Before (v5.0.7)**:
4467```
4468Input fields: #f5f5f5 (site bg - wrong)
4469Sections: #e8e8e8 (alt bg - correct)
4470```
4471
4472**Admin After (v5.0.8)**:
4473```
4474Input fields: #ffffff (content bg - correct!)
4475Sections: #e8e8e8 (alt bg - correct!)
4476```
4477
4478**Dark Template**:
4479```ini
4480__background__ = "#2d2d2d"
4481__background_alt__ = "#3a3a3a"
4482```
4483
4484**Admin After (v5.0.8)**:
4485```
4486Input fields: #2d2d2d (content bg - perfect!)
4487Sections: #3a3a3a (alt bg - perfect!)
4488```
4489
4490### Complete Themes Tab
4491
4492**Week Start Options**:
4493```
4494┌─────────────────────────┐
4495│ �� Week Start Day       │ ← bg_alt
4496│ ┌─────────┬───────────┐ │
4497│ │ Monday  │ Sunday    │ │ ← bg (when not selected)
4498│ └─────────┴───────────┘ │
4499└─────────────────────────┘
4500```
4501
4502**Theme Cards**:
4503```
4504┌─────────────────────────┐
4505│ �� Matrix Edition       │ ← bg (when not selected)
4506│ Classic green theme     │   border (when not selected)
4507└─────────────────────────┘
4508
4509┌═════════════════════════┐
4510│ �� Purple Dream         │ ← rgba green tint (when selected)
4511│ Elegant purple theme    │   #00cc07 border (when selected)
4512└═════════════════════════┘
4513```
4514
4515### Perfect Integration
4516
4517**All admin pages now**:
4518- Content areas: `__background__` ✓
4519- Section boxes: `__background_alt__` ✓
4520- Borders: `__border__` ✓
4521- Text: `__text__` ✓
4522
4523**Matches wiki perfectly**:
4524- Same white content areas
4525- Same gray section boxes
4526- Same border colors
4527- Same text colors
4528
4529### No More Issues
4530
4531**Fixed**:
4532- ❌ Site background on content areas → ✅ Content background
4533- ❌ Hardcoded white on themes tab → ✅ Template background
4534- ❌ Hardcoded borders (#ddd) → ✅ Template borders
4535
4536**Result**:
4537- Perfect color hierarchy ✓
4538- Correct background levels ✓
4539- Complete template integration ✓
4540
4541## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING
4542
4543### �� Fixed: All Admin Backgrounds Use Template Colors
4544- **Fixed:** All section backgrounds use `__background_alt__`
4545- **Fixed:** All content backgrounds use `__background__`
4546- **Fixed:** All borders use `__border__`
4547- **Fixed:** All text uses `__text__`
4548- **Result:** Complete admin template integration!
4549
4550### All Replacements
4551
4552**Backgrounds**:
4553```php
4554Before: background: #f9f9f9
4555After:  background: ' . $colors['bg_alt'] . '
4556
4557Before: background: #fff / background: white
4558After:  background: ' . $colors['bg'] . '
4559```
4560
4561**Borders**:
4562```php
4563Before: border: 1px solid #ddd
4564Before: border: 1px solid #e0e0e0
4565Before: border: 1px solid #eee
4566After:  border: 1px solid ' . $colors['border'] . '
4567```
4568
4569**Text**:
4570```php
4571Before: color: #333
4572Before: color: #666
4573After:  color: ' . $colors['text'] . '
4574```
4575
4576### Complete Admin Coverage
4577
4578**All tabs now themed**:
4579- ✅ Manage Events tab
4580- ✅ Update Plugin tab
4581- ✅ Outlook Sync tab
4582- ✅ Themes tab
4583- ✅ Tab navigation
4584- ✅ All sections
4585- ✅ All inputs
4586- ✅ All borders
4587- ✅ All text
4588
4589### Visual Result
4590
4591**Light Template**:
4592```
4593Admin Page:
4594┌──────────────────────────┐
4595│ Tab Navigation           │ ← Template borders
4596├──────────────────────────┤
4597│ Section Headers          │ ← bg_alt (light gray)
4598│ ┌──────────────────────┐ │
4599│ │ Form Inputs          │ │ ← bg (white)
4600│ │ Content Areas        │ │
4601│ └──────────────────────┘ │
4602└──────────────────────────┘
4603All template colors! ✓
4604```
4605
4606**Dark Template**:
4607```
4608Admin Page:
4609┌──────────────────────────┐
4610│ Tab Navigation           │ ← Template borders
4611├──────────────────────────┤
4612│ Section Headers          │ ← bg_alt (dark gray)
4613│ ┌──────────────────────┐ │
4614│ │ Form Inputs          │ │ ← bg (darker)
4615│ │ Content Areas        │ │
4616│ └──────────────────────┘ │
4617└──────────────────────────┘
4618All template colors! ✓
4619```
4620
4621### Template Color Mapping
4622
4623**Used throughout admin**:
4624```
4625__background_site__ → $colors['bg']       (main backgrounds)
4626__background_alt__  → $colors['bg_alt']   (section backgrounds)
4627__text__            → $colors['text']     (all text)
4628__border__          → $colors['border']   (all borders)
4629__link__            → $colors['link']     (links - future)
4630```
4631
4632### Examples by Section
4633
4634**Manage Events**:
4635- Event list backgrounds: `bg_alt`
4636- Event item backgrounds: `bg`
4637- Borders: `border`
4638- Text: `text`
4639
4640**Update Plugin**:
4641- Section backgrounds: `bg_alt`
4642- Content areas: `bg`
4643- Borders: `border`
4644- Text: `text`
4645
4646**Outlook Sync**:
4647- Config sections: `bg_alt`
4648- Input fields: `bg`
4649- Borders: `border`
4650- Labels: `text`
4651
4652**Themes Tab**:
4653- Theme cards: `bg_alt`
4654- Preview areas: `bg`
4655- Borders: `border`
4656- Descriptions: `text`
4657
4658### Benefits
4659
4660**Seamless Integration**:
4661- Matches wiki admin area perfectly
4662- Same colors throughout wiki
4663- Professional appearance
4664- Consistent experience
4665
4666**Automatic Adaptation**:
4667- Light templates: Light admin
4668- Dark templates: Dark admin
4669- Custom templates: Uses custom colors
4670
4671**No White Boxes**:
4672- Every background themed
4673- Every border themed
4674- Every text themed
4675- Complete consistency
4676
4677### PERFECT HARMONY
4678
4679**Frontend (Calendar)**:
4680- Wiki theme uses style.ini4681- Perfect template match ✓
4682
4683**Backend (Admin)**:
4684- Reads same style.ini4685- Perfect template match ✓
4686
4687**Complete Unity**:
4688- Same colors everywhere ✓
4689- Seamless experience ✓
4690- Professional polish ✓
4691
4692## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS
4693
4694### �� Enhanced: Month/Year Header & Admin Pages Use Template Colors
4695- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme
4696- **Added:** Admin pages read template's style.ini file
4697- **Added:** `getTemplateColors()` function in admin class
4698- **Fixed:** Tab navigation uses template text and border colors
4699- **Result:** Complete template integration everywhere!
4700
4701### Month/Year Header
4702
4703**Before**:
4704```php
4705color: __text__  // Same as primary text
4706```
4707
4708**After (Wiki Theme)**:
4709```php
4710color: __text_neu__  // Dimmed text (subtle)
4711```
4712
4713### Admin Pages Enhancement
4714
4715**New `getTemplateColors()` function**:
4716- Reads template's style.ini file
4717- Extracts color replacements
4718- Provides colors to all admin tabs
4719- Falls back to sensible defaults
4720
4721**Colors used**:
4722```php
4723bg: __background_site__
4724bg_alt: __background_alt__
4725text: __text__
4726border: __border__
4727link: __link__
4728```
4729
4730**Applied to**:
4731- Tab navigation borders
4732- Tab text colors
4733- All admin sections
4734- Ready for future enhancements
4735
4736### Visual Result
4737
4738**Calendar Header**:
4739```
4740┌────────────────────┐
4741│ ‹ February 2026 › │ ← __text_neu__ (dimmed)
4742└────────────────────┘
4743Subtle and elegant ✓
4744```
4745
4746**Admin Navigation**:
4747```
4748�� Manage Events | �� Update | ⚙️ Config | �� Themes
4749─────────────────────────────────────────────────
4750Active tab: Green (#00cc07)
4751Inactive tabs: Template text color
4752Border: Template border color
4753```
4754
4755### Template Integration
4756
4757**Light Template**:
4758```ini
4759__text_neu__ = "#666666"
4760__border__ = "#cccccc"
4761```
4762**Result**:
4763- Month/Year: Medium gray (subtle)
4764- Admin borders: Light gray
4765- Tab text: Dark gray
4766
4767**Dark Template**:
4768```ini
4769__text_neu__ = "#999999"
4770__border__ = "#555555"
4771```
4772**Result**:
4773- Month/Year: Light gray (subtle)
4774- Admin borders: Medium gray
4775- Tab text: Bright gray
4776
4777### Benefits
4778
4779**Calendar Frontend**:
4780- Month/Year header more subtle
4781- Better visual hierarchy
4782- Less prominent, more elegant
4783
4784**Admin Backend**:
4785- Uses template colors
4786- Matches wiki admin area
4787- Consistent experience
4788- Professional appearance
4789
4790### Future-Ready
4791
4792The `getTemplateColors()` function is now available for:
4793- ✅ Tab navigation (implemented)
4794- �� Section backgrounds (ready)
4795- �� Button colors (ready)
4796- �� Input fields (ready)
4797- �� Success/error messages (ready)
4798
4799**Foundation laid for complete admin theming!** ��
4800
4801## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS
4802
4803### �� Fixed: Add Event Bar & Section Headers Use Template Colors
4804- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme
4805- **Fixed:** "Today" header uses `__text_neu__`
4806- **Fixed:** "Tomorrow" header uses `__text__`
4807- **Fixed:** "Important Events" header uses `__border__`
4808- **Result:** Perfect template color integration!
4809
4810### All Changes
4811
4812**Add Event Bar (Wiki Theme)**:
4813
4814**Before**:
4815```php
4816background: #3498db  // Generic blue
4817```
4818
4819**After**:
4820```php
4821background: __background_alt__  // Template alternate bg
4822text: __text__                  // Template text color
4823hover: __background_neu__       // Template neutral bg
4824```
4825
4826**Section Headers (Wiki Theme)**:
4827
4828**Before**:
4829```php
4830Today: #ff9800           // Orange
4831Tomorrow: #4caf50        // Green
4832Important Events: #9b59b6 // Purple
4833```
4834
4835**After**:
4836```php
4837Today: __text_neu__      // Template dimmed text
4838Tomorrow: __text__       // Template primary text
4839Important Events: __border__ // Template border color
4840```
4841
4842### Visual Result
4843
4844**Wiki Default Theme**:
4845```
4846Add Event Bar:
4847┌────────────────┐
4848│  + ADD EVENT   │ ← Template alt background
4849└────────────────┘
4850
4851Sections:
4852━━━━━━━━━━━━━━━━
4853Today              ← Dimmed text color (__text_neu__)
4854• Team Meeting
4855
4856Tomorrow           ← Primary text color (__text__)
4857• Code Review
4858
4859Important Events   ← Border color (__border__)
4860• Project Deadline
4861```
4862
4863### Example with DokuWiki Default Template
4864
4865**Template colors**:
4866```ini
4867__background_alt__ = "#e8e8e8"
4868__text__ = "#333333"
4869__text_neu__ = "#666666"
4870__border__ = "#cccccc"
4871```
4872
4873**Calendar result**:
4874```
4875Add Event Bar: Light gray (#e8e8e8)
4876Today header: Medium gray (#666666)
4877Tomorrow header: Dark gray (#333333)
4878Important Events header: Border gray (#cccccc)
4879```
4880
4881### Example with Dark Template
4882
4883**Template colors**:
4884```ini
4885__background_alt__ = "#2d2d2d"
4886__text__ = "#e0e0e0"
4887__text_neu__ = "#999999"
4888__border__ = "#555555"
4889```
4890
4891**Calendar result**:
4892```
4893Add Event Bar: Dark gray (#2d2d2d)
4894Today header: Light gray (#999999)
4895Tomorrow header: Bright gray (#e0e0e0)
4896Important Events header: Medium gray (#555555)
4897```
4898
4899### Perfect Harmony
4900
4901All sidebar elements now use template colors:
4902- ✅ Add Event bar background
4903- ✅ Add Event bar text
4904- ✅ Today section header
4905- ✅ Tomorrow section header
4906- ✅ Important Events header
4907- ✅ Calendar cells
4908- ✅ Grid backgrounds
4909- ✅ All borders
4910
4911**Complete template integration!** ��
4912
4913## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS
4914
4915### �� Fixed: Calendar Cells Use Correct Template Color
4916- **Fixed:** Calendar cells now use `__background__` from template
4917- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__`
4918- **Result:** Calendar cells match main content area background!
4919
4920### Color Mapping Update
4921
4922**Before (v5.0.3)**:
4923```php
4924cell_bg: __background_neu__  // Wrong - this is for neutral/alternate
4925```
4926
4927**After (v5.0.4)**:
4928```php
4929cell_bg: __background__      // Correct - main content background
4930```
4931
4932### Template Color Usage
4933
4934**Wiki Default theme now uses**:
4935```
4936__background_site__ → Overall page background
4937__background__      → Calendar cells (main content bg)
4938__background_alt__  → Grid background, headers
4939__background_neu__  → Today cell highlight
4940__text__            → Primary text
4941__text_neu__        → Dimmed text
4942__link__            → Links, bright text
4943__border__          → All borders
4944```
4945
4946### Visual Result
4947
4948**Before**:
4949```
4950Calendar with template colors:
4951┌─────┬─────┬─────┐
4952│ Mon │ Tue │ Wed │
4953├─────┼─────┼─────┤
4954│  8  │  9  │ 10  │ ← Neutral gray (wrong)
4955└─────┴─────┴─────┘
4956```
4957
4958**After**:
4959```
4960Calendar with template colors:
4961┌─────┬─────┬─────┐
4962│ Mon │ Tue │ Wed │
4963├─────┼─────┼─────┤
4964│  8  │  9  │ 10  │ ← White/content bg (correct!)
4965└─────┴─────┴─────┘
4966```
4967
4968### Example Template Colors
4969
4970**DokuWiki Default**:
4971```ini
4972__background__ = "#ffffff"
4973```
4974**Result**: White calendar cells ✓
4975
4976**Dark Template**:
4977```ini
4978__background__ = "#2d2d2d"
4979```
4980**Result**: Dark calendar cells ✓
4981
4982**Custom Template**:
4983```ini
4984__background__ = "#f9f9f9"
4985```
4986**Result**: Custom color cells ✓
4987
4988### Perfect Matching
4989
4990Calendar cells now match:
4991- ✅ Main content area background
4992- ✅ Article/page background
4993- ✅ Content box background
4994- ✅ Same as wiki text background
4995
4996**Seamless integration!** ��
4997
4998## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI
4999
5000### �� Enhanced: Wiki Default Theme Reads Template Colors
5001- **Added:** Function to read colors from DokuWiki template's style.ini file
5002- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
5003- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
5004- **Uses:** Actual template colors instead of CSS variables
5005- **Result:** Perfect color matching with any DokuWiki template!
5006
5007### How It Works
5008
5009**New Function: `getWikiTemplateColors()`**
5010
50111. **Detects** current DokuWiki template name
50122. **Reads** the template's `style.ini` file
50133. **Parses** color replacements section
50144. **Maps** template colors to calendar theme
50155. **Falls back** to CSS variables if file not found
5016
5017### Colors Read from style.ini
5018
5019**Template color replacements used**:
5020```php
5021__background_site__  → bg, header_bg
5022__background_alt__   → grid_bg, cell_today_bg
5023__background_neu__   → cell_bg
5024__text__             → text_primary
5025__text_neu__         → text_dim
5026__link__             → text_bright
5027__border__           → border, grid_border
5028```
5029
5030### Example style.ini Mapping
5031
5032**Template style.ini**:
5033```ini
5034[replacements]
5035__background_site__ = "#f8f9fa"
5036__background_alt__  = "#e9ecef"
5037__background_neu__  = "#dee2e6"
5038__text__            = "#212529"
5039__text_neu__        = "#6c757d"
5040__link__            = "#0d6efd"
5041__border__          = "#ced4da"
5042```
5043
5044**Calendar theme result**:
5045```php
5046bg: #f8f9fa
5047header_bg: #e9ecef
5048grid_bg: #e9ecef
5049cell_bg: #dee2e6
5050text_primary: #212529
5051text_dim: #6c757d
5052text_bright: #0d6efd
5053border: #ced4da
5054grid_border: #ced4da
5055```
5056
5057### Before vs After
5058
5059**Before (v5.0.2)**:
5060```
5061Wiki Default theme used:
5062- CSS variables (var(--__background__, #fff))
5063- Required browser CSS variable support
5064- Fallback to generic colors
5065```
5066
5067**After (v5.0.3)**:
5068```
5069Wiki Default theme uses:
5070- Actual colors from template's style.ini
5071- Exact template color values
5072- No CSS variable dependency
5073- Perfect color matching!
5074```
5075
5076### File Location Priority
5077
5078Checks in order:
50791. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
50802. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
50813. Falls back to CSS variables if neither found
5082
5083### Benefits
5084
5085**More accurate colors**:
5086- Uses exact template color values ✓
5087- No CSS variable interpolation ✓
5088- Consistent across all browsers ✓
5089
5090**Better compatibility**:
5091- Works with older browsers ✓
5092- No CSS variable support needed ✓
5093- Direct color values ✓
5094
5095**Perfect matching**:
5096- Reads template's actual colors ✓
5097- Same colors as wiki pages ✓
5098- Seamless integration ✓
5099
5100### Template Examples
5101
5102**DokuWiki Default Template**:
5103```
5104Reads: lib/tpl/dokuwiki/style.ini
5105Gets: Default DokuWiki colors
5106Result: Perfect classic DokuWiki look
5107```
5108
5109**Bootstrap Template**:
5110```
5111Reads: lib/tpl/bootstrap3/style.ini
5112Gets: Bootstrap color scheme
5113Result: Perfect Bootstrap integration
5114```
5115
5116**Custom Template**:
5117```
5118Reads: conf/tpl/mycustom/style.ini
5119Gets: Your custom colors
5120Result: Perfect custom theme match
5121```
5122
5123### Fallback Chain
5124
51251. **Try** reading style.ini from template
51262. **If found** → Use exact colors from file
51273. **If not found** → Use CSS variables
51284. **If no CSS vars** → Use fallback colors
5129
5130**Always works, always matches!** ✓
5131
5132## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL
5133
5134### �� Fixed: Wiki Default Theme Day Panel Colors
5135- **Fixed:** Day popup panel now uses DokuWiki CSS variables
5136- **Fixed:** Panel background matches wiki theme
5137- **Fixed:** Panel header matches wiki theme
5138- **Fixed:** Border colors use wiki theme
5139- **Fixed:** Text colors use wiki theme
5140- **Result:** Perfect integration with DokuWiki templates!
5141
5142### All Changes
5143
5144**Day Panel Colors (Wiki Default)**:
5145
5146**Before**:
5147```php
5148background: rgba(36, 36, 36, 0.5)  // Dark gray (wrong!)
5149header: #3498db                     // Blue (wrong!)
5150```
5151
5152**After**:
5153```php
5154background: var(--__background__, #fff)
5155header: var(--__background_alt__, #e8e8e8)
5156header_text: var(--__text__, #333)
5157border: var(--__border__, #ccc)
5158shadow: 0 2px 4px rgba(0, 0, 0, 0.1)
5159```
5160
5161**Event Colors (Wiki Default)**:
5162```php
5163event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5))
5164border_color: var(--__border__, rgba(204, 204, 204, 0.3))
5165bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15)
5166```
5167
5168### Before vs After
5169
5170**Before (v5.0.1)**:
5171```
5172Wiki Default - Click Week Cell:
5173┌────────────────┐
5174│ Monday, Feb 8  │ ← Blue header (wrong)
5175├────────────────┤
5176│ Team Meeting   │ ← Dark gray bg (wrong)
5177│ 2:00 PM        │
5178└────────────────┘
5179Doesn't match wiki theme
5180```
5181
5182**After (v5.0.2)**:
5183```
5184Wiki Default - Click Week Cell:
5185
5186Light Wiki Theme:
5187┌────────────────┐
5188│ Monday, Feb 8  │ ← Light gray header ✓
5189├────────────────┤
5190│ Team Meeting   │ ← White bg ✓
5191│ 2:00 PM        │   Dark text ✓
5192└────────────────┘
5193
5194Dark Wiki Theme:
5195┌────────────────┐
5196│ Monday, Feb 8  │ ← Dark header ✓
5197├────────────────┤
5198│ Team Meeting   │ ← Dark bg ✓
5199│ 2:00 PM        │   Light text ✓
5200└────────────────┘
5201
5202Perfectly matches wiki!
5203```
5204
5205### CSS Variables Used
5206
5207**Wiki Default theme now uses**:
5208- `--__background__` - Main background (panel body)
5209- `--__background_alt__` - Alternate bg (panel header, events)
5210- `--__text__` - Text color (header text)
5211- `--__border__` - Border color (panel border, event borders)
5212
5213**With fallbacks**:
5214```css
5215var(--__background__, #fff)           /* white fallback */
5216var(--__background_alt__, #e8e8e8)    /* light gray fallback */
5217var(--__text__, #333)                 /* dark text fallback */
5218var(--__border__, #ccc)               /* gray border fallback */
5219```
5220
5221### Perfect Adaptation
5222
5223**Light Templates**:
5224- Light panel backgrounds ✓
5225- Dark text ✓
5226- Subtle borders ✓
5227- Clean appearance ✓
5228
5229**Dark Templates**:
5230- Dark panel backgrounds ✓
5231- Light text ✓
5232- Visible borders ✓
5233- Perfect contrast ✓
5234
5235**Custom Templates**:
5236- Uses template's CSS variables ✓
5237- Automatic adaptation ✓
5238- Seamless integration ✓
5239
5240### Now Truly Adaptive
5241
5242Wiki Default theme now properly uses DokuWiki CSS variables for:
5243- ✅ Calendar grid
5244- ✅ Sidebar widget
5245- ✅ Event list
5246- ✅ **Day panel** ← v5.0.2!
5247- ✅ All backgrounds
5248- ✅ All text
5249- ✅ All borders
5250
5251**Complete wiki integration!** ��
5252
5253## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS
5254
5255### �� Enhanced: Time Conflict Tooltips Now Themed
5256- **Fixed:** Conflict tooltips now match calendar theme
5257- **Added:** Theme-aware background, border, text colors
5258- **Added:** Theme-aware shadow effects
5259- **Result:** Complete visual consistency!
5260
5261### Tooltip Theming
5262
5263**Now uses theme colors for**:
5264- Background: Theme background color
5265- Border: Theme border color
5266- Header text: Theme primary text color
5267- Item text: Theme dim text color
5268- Shadow: Theme shadow color
5269
5270### Before vs After
5271
5272**Before (v5.0.0)**:
5273```
5274Hover ⚠️ badge:
5275┌─────────────────┐
5276│ ⚠️ Time Conflicts│ ← Default colors
5277│ • Event A       │
5278│ • Event B       │
5279└─────────────────┘
5280```
5281
5282**After (v5.0.1)**:
5283```
5284Matrix Theme:
5285┌─────────────────┐
5286│ ⚠️ Time Conflicts│ ← Green header
5287│ • Event A       │ ← Green text
5288│ • Event B       │   Dark green bg
5289└─────────────────┘
5290
5291Purple Theme:
5292┌─────────────────┐
5293│ ⚠️ Time Conflicts│ ← Purple header
5294│ • Event A       │ ← Purple text
5295│ • Event B       │   Dark purple bg
5296└─────────────────┘
5297
5298Professional Theme:
5299┌─────────────────┐
5300│ ⚠️ Time Conflicts│ ← Blue header
5301│ • Event A       │ ← Dark text
5302│ • Event B       │   Light bg
5303└─────────────────┘
5304
5305Pink Theme:
5306┌─────────────────┐
5307│ ⚠️ Time Conflicts│ ← Pink header ✨
5308│ • Event A       │ ← Pink text
5309│ • Event B       │   Dark pink bg ��
5310└─────────────────┘
5311
5312Wiki Default:
5313┌─────────────────┐
5314│ ⚠️ Time Conflicts│ ← Adapts to wiki
5315│ • Event A       │ ← Wiki colors
5316│ • Event B       │
5317└─────────────────┘
5318```
5319
5320### Now 100% Complete
5321
5322**Every tooltip themed**:
5323- ✅ Conflict tooltips
5324- ✅ All other tooltips (if any)
5325- ✅ Perfect consistency
5326
5327**Absolute perfection!** ✨
5328
5329## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION
5330
5331### �� Major Milestone: Version 5.0
5332
5333This 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.
5334
5335### Complete Feature Set
5336
5337**5 Beautiful Themes**:
5338- �� Matrix Edition (Green with glow)
5339- �� Purple Dream (Elegant purple)
5340- �� Professional Blue (Clean and modern)
5341- �� Pink Bling (Maximum sparkle)
5342- �� Wiki Default (Auto-adapts to your DokuWiki theme)
5343
5344**100% Theme Coverage**:
5345- ✅ Calendar grid and cells
5346- ✅ Event boxes and borders
5347- ✅ Sidebar widget
5348- ✅ Event list panel
5349- ✅ Search functionality
5350- ✅ Edit/Add dialogs (complete)
5351- ✅ Day popup dialogs
5352- ✅ Month picker
5353- ✅ All text (primary, dim, bright)
5354- ✅ All buttons
5355- ✅ All inputs and forms
5356- ✅ All checkboxes
5357- ✅ All borders
5358- ✅ All badges and labels
5359- ✅ Event highlight effects
5360
5361**Perfect Visual Consistency**:
5362- No white pixels anywhere
5363- No unthemed elements
5364- No default colors
5365- Complete visual unity
5366
5367### Major Improvements in v5.0
5368
53691. **Complete Dialog Theming** (v4.8.5-4.8.7)
5370   - Edit event dialog fully themed
5371   - Day popup dialog fully themed
5372   - All form inputs themed
5373   - All checkboxes themed
5374   - All buttons themed
5375
53762. **Event Box Border Perfection** (v4.8.6)
5377   - All 4 borders themed (top, right, bottom, left)
5378   - Sidebar event dividers themed
5379   - Past Events toggle border themed
5380
53813. **Checkbox Field Borders** (v4.9.0)
5382   - Repeating Event section border themed
5383   - Task checkbox section border themed
5384
53854. **Wiki Default Theme** (v4.10.0)
5386   - New 5th theme
5387   - Uses DokuWiki CSS variables
5388   - Auto-adapts to any wiki template
5389   - Perfect for seamless integration
5390
53915. **Clean Text Appearance** (v4.11.0)
5392   - Removed text glow from Matrix
5393   - Removed text glow from Purple
5394   - Removed text glow from Professional
5395   - Removed text glow from Wiki Default
5396   - Kept text glow on Pink Bling only
5397
53986. **Event Highlight Effects** (v4.12.0-4.12.1)
5399   - Theme-aware highlight glow
5400   - Click event bar → event glows
5401   - 3-second themed glow effect
5402   - Smooth animations
5403
5404### See RELEASE_NOTES.md for Complete Details
5405
5406For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release.
5407
5408## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION
5409
5410### �� Fixed: Event Highlight Now Working
5411- **Fixed:** Used setProperty() to properly apply !important styles
5412- **Added:** Console logging for debugging
5413- **Fixed:** Proper style application with important flag
5414- **Result:** Highlight glow now works correctly!
5415
5416### Technical Fix
5417
5418**Before (not working)**:
5419```javascript
5420eventItem.style.background = color + ' !important'; // Doesn't work
5421```
5422
5423**After (working)**:
5424```javascript
5425eventItem.style.setProperty('background', color, 'important'); // Works!
5426```
5427
5428### Added Debug Logging
5429
5430Console now shows:
5431- "Highlighting event: [calId] [eventId] [date]"
5432- "Found event item: [element]"
5433- "Theme: [theme name]"
5434- "Highlight colors: [bg] [shadow]"
5435- "Applied highlight styles"
5436- "Removing highlight" (after 3 seconds)
5437
5438### Now Working
5439
5440Click any event bar → Event glows with theme colors ✓
5441
5442## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW
5443
5444### ✨ Enhanced: Event Click Highlight Now Theme-Aware
5445- **Fixed:** Restored event highlight glow when clicking calendar bars
5446- **Improved:** Highlight now matches each theme's colors
5447- **Added:** Stronger glow effect for better visibility
5448- **Duration:** 3 seconds with smooth fade
5449- **Result:** Beautiful themed highlights for all themes!
5450
5451### How It Works
5452
5453When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow:
5454
5455**Matrix Theme**:
5456```javascript
5457Background: Darker green (#1a3d1a)
5458Glow: Double green glow (0 0 20px + 0 0 40px)
5459Color: rgba(0, 204, 7, 0.8)
5460```
5461
5462**Purple Theme**:
5463```javascript
5464Background: Darker purple (#3d2b4d)
5465Glow: Double purple glow
5466Color: rgba(155, 89, 182, 0.8)
5467```
5468
5469**Professional Theme**:
5470```javascript
5471Background: Light blue (#e3f2fd)
5472Glow: Single blue glow
5473Color: rgba(74, 144, 226, 0.4)
5474```
5475
5476**Pink Theme**:
5477```javascript
5478Background: Darker pink (#3d2030)
5479Glow: Double pink glow ✨��
5480Color: rgba(255, 20, 147, 0.8)
5481```
5482
5483**Wiki Theme**:
5484```javascript
5485Background: var(--__background_neu__)
5486Glow: Blue glow (adapts to wiki)
5487Color: rgba(43, 115, 183, 0.4)
5488```
5489
5490### Visual Examples
5491
5492**Matrix - Click Event**:
5493```
5494Calendar:
5495┌─────────────┐
5496│ 2:00 PM │ ← Click this bar
5497└─────────────┘
5498
5499Event List:
5500╔═════════════════════╗
5501║ Team Meeting        ║ ← GLOWS GREEN
5502║ 2:00 PM             ║    for 3 seconds
5503╚═════════════════════╝
5504   ↑↑↑ Strong green glow ↑↑↑
5505```
5506
5507**Purple - Click Event**:
5508```
5509Calendar:
5510┌─────────────┐
5511│ 4:00 PM │ ← Click
5512└─────────────┘
5513
5514Event List:
5515╔═════════════════════╗
5516║ Code Review         ║ ← GLOWS PURPLE
5517║ 4:00 PM             ║    for 3 seconds
5518╚═════════════════════╝
5519   ↑↑↑ Strong purple glow ↑↑↑
5520```
5521
5522**Pink - Click Event**:
5523```
5524Calendar:
5525┌─────────────┐
5526│ 1:00 PM │ ← Click
5527└─────────────┘
5528
5529Event List:
5530╔═════════════════════╗
5531║ Lunch Date ��       ║ ← GLOWS PINK
5532║ 1:00 PM ✨          ║    for 3 seconds
5533╚═════════════════════╝
5534   ↑↑↑ MAXIMUM SPARKLE ↑↑↑
5535```
5536
5537### Glow Specifications
5538
5539**Matrix**:
5540- Background: Dark green
5541- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)`
5542- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)`
5543- Effect: Strong green pulse
5544
5545**Purple**:
5546- Background: Dark purple
5547- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)`
5548- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)`
5549- Effect: Strong purple pulse
5550
5551**Professional**:
5552- Background: Light blue
5553- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)`
5554- Effect: Subtle blue glow
5555
5556**Pink**:
5557- Background: Dark pink
5558- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)`
5559- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)`
5560- Effect: MAXIMUM SPARKLE ✨��
5561
5562**Wiki**:
5563- Background: Theme neutral color
5564- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)`
5565- Effect: Adapts to wiki theme
5566
5567### User Experience
5568
5569**Click event bar** → Event highlights with themed glow
5570**Auto-scroll** → Event scrolls into view smoothly
5571**3 second glow** → Fade out after 3 seconds
5572**Smooth transition** → 0.3s ease-in-out
5573
5574### Perfect for Finding Events
5575
5576**Large event lists**: Quickly locate the clicked event ✓
5577**Visual feedback**: Know which event you clicked ✓
5578**Theme consistency**: Matches your chosen theme ✓
5579**Smooth animation**: Professional appearance ✓
5580
5581### All Themes Covered
5582
5583- ✅ Matrix: Green glow
5584- ✅ Purple: Purple glow
5585- ✅ Professional: Blue glow
5586- ✅ Pink: Maximum pink sparkle
5587- ✅ Wiki: Adaptive glow
5588
5589**Click any event bar and watch it glow!** ✨
5590
5591## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES
5592
5593### �� Changed: Text Glow Now Pink-Only
5594- **Removed:** Text shadow/glow from Matrix theme
5595- **Removed:** Text shadow/glow from Purple theme
5596- **Removed:** Text shadow/glow from Professional theme (already had none)
5597- **Removed:** Text shadow/glow from Wiki Default theme
5598- **Kept:** Text shadow/glow ONLY on Pink Bling theme
5599- **Result:** Cleaner look for Matrix, Purple, and Wiki themes!
5600
5601### All Changes
5602
5603**Before (Matrix, Purple)**:
5604```css
5605text-shadow: 0 0 2px $text_color; /* Glow effect */
5606```
5607
5608**After (Matrix, Purple, Professional, Wiki)**:
5609```css
5610text-shadow: none; /* Clean, no glow */
5611```
5612
5613**Pink Bling (unchanged)**:
5614```css
5615text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */
5616```
5617
5618### Text Shadow Removed From
5619
5620**Sidebar day numbers**: No glow ✓
5621**Event titles**: No glow ✓
5622**Event dates**: No glow ✓
5623**Add Event button**: No glow ✓
5624**Day popup events**: No glow ✓
5625
5626### Before vs After
5627
5628**BEFORE (Matrix)**:
5629```
5630Event Title ✨ ← Glowing green text
56312:00 PM ✨     ← Glowing text
5632```
5633
5634**AFTER (Matrix)**:
5635```
5636Event Title    ← Clean green text
56372:00 PM        ← Clean text
5638```
5639
5640**Pink Bling (Still Glows)**:
5641```
5642Event Title ✨�� ← Still glowing!
56432:00 PM ✨     ← Maximum sparkle!
5644```
5645
5646### Theme Appearances
5647
5648**�� Matrix Edition**:
5649- Clean green text
5650- No glow effects
5651- Professional appearance
5652- Still has border glow
5653
5654**�� Purple Dream**:
5655- Clean purple text
5656- No glow effects
5657- Elegant appearance
5658- Still has border glow
5659
5660**�� Professional Blue**:
5661- Clean text (unchanged)
5662- No glow effects
5663- Modern appearance
5664
5665**�� Pink Bling**:
5666- Glowing pink text ✨
5667- Maximum glow effects ��
5668- Sparkle everywhere!
5669- All the bling!
5670
5671**�� Wiki Default**:
5672- Clean text
5673- No glow effects
5674- Matches wiki theme
5675
5676### Glow Effects Remaining
5677
5678**Border/box glow**: Still present on all themes ✓
5679**Pink text glow**: Only on Pink Bling ✓
5680**Shadow effects**: Still on buttons/boxes5681
5682**Only TEXT glow removed from non-pink themes!**
5683
5684### Result
5685
5686**Cleaner, more professional look** for:
5687- Matrix ✓
5688- Purple ✓
5689- Professional ✓
5690- Wiki Default ✓
5691
5692**Maximum sparkle** for:
5693- Pink Bling ✨��✓
5694
5695**Best of both worlds!** ��
5696
5697## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME
5698
5699### �� New: Wiki Default Theme
5700- **Added:** 5th theme that automatically matches your DokuWiki template
5701- **Uses:** CSS variables from your wiki theme
5702- **Adapts:** Automatically works with light and dark themes
5703- **Perfect:** Seamless integration with any DokuWiki template
5704
5705### How It Works
5706
5707**Wiki theme uses DokuWiki CSS variables**:
5708```css
5709bg: var(--__background_site__, #f5f5f5)
5710border: var(--__border__, #ccc)
5711text_primary: var(--__text__, #333)
5712text_bright: var(--__link__, #2b73b7)
5713text_dim: var(--__text_neu__, #666)
5714cell_bg: var(--__background__, #fff)
5715grid_border: var(--__border__, #ccc)
5716```
5717
5718**With fallbacks for older DokuWiki versions**:
5719- If CSS variables exist → Use them ✓
5720- If not available → Use fallback values ✓
5721
5722### All 5 Themes
5723
5724**1. �� Matrix Edition** (Default)
5725- Dark green with neon glow
5726- Matrix-style effects
5727- Original theme
5728
5729**2. �� Purple Dream**
5730- Rich purple with violet accents
5731- Elegant and sophisticated
5732- Soft glow effects
5733
5734**3. �� Professional Blue**
5735- Clean blue and grey
5736- Modern professional
5737- No glow effects
5738
5739**4. �� Pink Bling**
5740- Glamorous hot pink
5741- Maximum sparkle ✨
5742- Hearts and diamonds
5743
5744**5. �� Wiki Default** ← NEW!
5745- Matches your wiki template
5746- Auto-adapts to light/dark
5747- Perfect integration
5748
5749### Examples
5750
5751**Light Wiki Template**:
5752```
5753Wiki Default theme shows:
5754- Light backgrounds (#f5f5f5)
5755- Dark text (#333)
5756- Light inputs (#fff)
5757- Gray borders (#ccc)
5758
5759Matches perfectly! ✓
5760```
5761
5762**Dark Wiki Template**:
5763```
5764Wiki Default theme shows:
5765- Dark backgrounds (from template)
5766- Light text (from template)
5767- Dark inputs (from template)
5768- Dark borders (from template)
5769
5770Matches perfectly! ✓
5771```
5772
5773**Bootstrap Template**:
5774```
5775Uses Bootstrap's colors
5776Matches perfectly! ✓
5777```
5778
5779**Material Template**:
5780```
5781Uses Material's colors
5782Matches perfectly! ✓
5783```
5784
5785### CSS Variables Used
5786
5787**DokuWiki provides**:
5788- `--__background_site__`: Page background
5789- `--__background_alt__`: Section backgrounds
5790- `--__background__`: Content backgrounds
5791- `--__text__`: Primary text color
5792- `--__link__`: Link color
5793- `--__text_neu__`: Dimmed text
5794- `--__border__`: Border color
5795- `--__background_neu__`: Neutral background
5796
5797**All with fallbacks**:
5798```css
5799var(--__background_site__, #f5f5f5)
5800/* Falls back to light gray if variable doesn't exist */
5801```
5802
5803### Perfect for Every Template
5804
5805**Custom templates**: Automatically adapts ✓
5806**Light themes**: Perfect match ✓
5807**Dark themes**: Perfect match ✓
5808**Any DokuWiki version**: Works with fallbacks ✓
5809
5810### Complete Theme Collection
5811
5812Now with **5 gorgeous themes**:
5813- 3 dark themes (Matrix, Purple, Pink)
5814- 1 light theme (Professional)
5815- 1 adaptive theme (Wiki Default) ← NEW!
5816
5817**Something for everyone!** ��
5818
5819## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS
5820
5821### �� Fixed: Checkbox Field Borders Themed
5822- **Fixed:** Added border-color to checkbox field divs
5823- **Fixed:** Repeating Event section border
5824- **Fixed:** Task checkbox section border
5825- **Result:** No white borders around checkboxes!
5826
5827### Changes
5828
5829**Checkbox Field Border Styling**:
5830
5831**Before**:
5832```html
5833<div class="form-field-checkbox"
5834     style="background: $bg !important;">
5835<!-- Border shows white ✗ -->
5836```
5837
5838**After**:
5839```php
5840<div class="form-field-checkbox"
5841     style="background: $bg !important;
5842            border-color: $grid_border !important;">
5843<!-- Border themed ✓ -->
5844```
5845
5846### Before vs After
5847
5848**BEFORE (v4.8.8)**:
5849```
5850Edit Dialog:
5851┌──────────────────┐
5852│ ☑ Repeating     ║│ ← White border ✗
5853└──────────────────┘
5854┌──────────────────┐
5855│ ☑ Task checkbox ║│ ← White border ✗
5856└──────────────────┘
5857```
5858
5859**AFTER (v4.9.0)**:
5860```
5861Matrix Edit Dialog:
5862┌──────────────────┐
5863│ ☑ Repeating      │ ← Green border ✓
5864└──────────────────┘
5865┌──────────────────┐
5866│ ☑ Task checkbox  │ ← Green border ✓
5867└──────────────────┘
5868```
5869
5870### ABSOLUTE PERFECTION ACHIEVED
5871
5872**Every element themed**:
5873- ✅ All inputs
5874- ✅ All labels
5875- ✅ All sections
5876- ✅ **Checkbox field borders** ← v4.9.0!
5877- ✅ All buttons
5878- ✅ All checkboxes
5879- ✅ No white anywhere
5880
5881**100% COMPLETE!** ��✨
5882
5883## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
5884
5885### �� Fixed: Checkbox Field Borders Themed
5886- **Fixed:** Added border-color to checkbox field divs
5887- **Fixed:** Repeating Event section border
5888- **Fixed:** Task checkbox section border
5889- **Result:** No white borders around checkboxes!
5890
5891### �� Fixed: Admin Sections Respect Wiki Theme
5892- **Fixed:** All admin backgrounds use CSS variables
5893- **Fixed:** Text colors use wiki text color
5894- **Fixed:** Borders use wiki border color
5895- **Result:** Admin matches wiki theme perfectly!
5896
5897### All Changes
5898
5899**1. Checkbox Field Border Styling**:
5900
5901**Before**:
5902```html
5903<div class="form-field-checkbox"
5904     style="background: $bg !important;">
5905<!-- Border shows white ✗ -->
5906```
5907
5908**After**:
5909```php
5910<div class="form-field-checkbox"
5911     style="background: $bg !important;
5912            border-color: $grid_border !important;">
5913<!-- Border themed ✓ -->
5914```
5915
5916**2. Admin CSS Variables**:
5917
5918**Added CSS variables for wiki theme compatibility**:
5919```css
5920.calendar-admin-wrapper {
5921    background: var(--__background_site__, #f5f5f5);
5922    color: var(--__text__, #333);
5923}
5924.calendar-admin-section {
5925    background: var(--__background_alt__, #fafafa);
5926}
5927.calendar-admin-input {
5928    background: var(--__background__, #fff);
5929    color: var(--__text__, #333);
5930}
5931```
5932
5933**Replaced hardcoded colors**:
5934```php
5935// Before:
5936background: #f9f9f9
5937background: white
5938color: #333
5939border: 1px solid #ddd
5940
5941// After:
5942background: var(--__background_alt__, #f9f9f9)
5943background: var(--__background__, #fff)
5944color: var(--__text__, #333)
5945border: 1px solid var(--__border__, #ddd)
5946```
5947
5948### Before vs After
5949
5950**BEFORE (v4.8.8)**:
5951```
5952Edit Dialog:
5953┌──────────────────┐
5954│ ☑ Repeating     ║│ ← White border ✗
5955└──────────────────┘
5956┌──────────────────┐
5957│ ☑ Task checkbox ║│ ← White border ✗
5958└──────────────────┘
5959
5960Admin Page (Dark Wiki Theme):
5961┌──────────────────┐
5962│ Light sections  │ ← White boxes ✗
5963│ Light inputs    │ ← Doesn't match ✗
5964└──────────────────┘
5965```
5966
5967**AFTER (v4.8.9)**:
5968```
5969Matrix Edit Dialog:
5970┌──────────────────┐
5971│ ☑ Repeating      │ ← Green border ✓
5972└──────────────────┘
5973┌──────────────────┐
5974│ ☑ Task checkbox  │ ← Green border ✓
5975└──────────────────┘
5976
5977Admin (Dark Wiki Theme):
5978┌──────────────────┐
5979│ Dark sections   │ ← Matches wiki ✓
5980│ Dark inputs     │ ← Perfect match ✓
5981└──────────────────┘
5982```
5983
5984### Admin Theme Examples
5985
5986**Light Wiki Theme**:
5987```
5988Admin page backgrounds: Light
5989Section boxes: Light gray
5990Inputs: White
5991Borders: Gray
5992Text: Dark
5993
5994Perfect match! ✓
5995```
5996
5997**Dark Wiki Theme**:
5998```
5999Admin page backgrounds: Dark
6000Section boxes: Darker gray
6001Inputs: Dark
6002Borders: Dark gray
6003Text: Light
6004
6005Perfect match! ✓
6006```
6007
6008**DokuWiki Default**:
6009```
6010Uses wiki's CSS variables
6011Automatically adapts
6012Always matches! ✓
6013```
6014
6015### Complete Coverage
6016
6017**Edit Dialog**:
6018- ✅ All inputs themed
6019- ✅ All labels themed
6020- ✅ All sections themed
6021- ✅ **Checkbox borders** ← v4.8.9!
6022- ✅ All buttons themed
6023- ✅ No white anywhere
6024
6025**Admin Interface**:
6026- ✅ **Tab navigation** ← v4.8.9!
6027- ✅ **Section boxes** ← v4.8.9!
6028- ✅ **Input fields** ← v4.8.9!
6029- ✅ **Text colors** ← v4.8.9!
6030- ✅ **Borders** ← v4.8.9!
6031- ✅ All tabs (Manage, Update, Outlook, Themes)
6032
6033### CSS Variables Used
6034
6035**DokuWiki provides these**:
6036- `--__background_site__`: Page background
6037- `--__background_alt__`: Alternate background
6038- `--__background__`: Primary background (inputs)
6039- `--__text__`: Text color
6040- `--__border__`: Border color
6041
6042**Fallbacks provided for older DokuWiki**:
6043```css
6044var(--__background_site__, #f5f5f5)
6045var(--__background_alt__, #fafafa)
6046var(--__background__, #fff)
6047var(--__text__, #333)
6048var(--__border__, #ddd)
6049```
6050
6051### Perfect Adaptation
6052
6053**Admin now adapts to ANY wiki theme**:
6054- Light themes → Light admin ✓
6055- Dark themes → Dark admin ✓
6056- Custom themes → Matches perfectly ✓
6057- No hardcoded colors ✓
6058
6059**Calendar themes still work**:
6060- Matrix, Purple, Professional, Pink ✓
6061- Independent from wiki theme ✓
6062- Admin respects wiki ✓
6063- Calendar respects calendar theme ✓
6064
6065### FINAL PERFECTION
6066
6067**Frontend (Calendar)**:
6068- Complete theming ✓
6069- 4 beautiful themes ✓
6070- Every pixel themed ✓
6071
6072**Backend (Admin)**:
6073- Respects wiki theme ✓
6074- Works with any theme ✓
6075- Perfect compatibility ✓
6076
6077**ABSOLUTELY EVERYTHING THEMED!** ����✨
6078
6079## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
6080
6081### �� Fixed: Task Checkboxes Now Fully Themed
6082- **Fixed:** Added background-color and border inline
6083- **Fixed:** Both PHP and JavaScript versions
6084- **Result:** No white checkboxes!
6085
6086### �� Fixed: Past Events Toggle Border
6087- **Fixed:** Added !important to border styling
6088- **Fixed:** Explicit top and bottom borders
6089- **Result:** No white line under toggle!
6090
6091### �� Fixed: Form Field Section Backgrounds
6092- **Fixed:** All form-field and form-row-group backgrounds
6093- **Fixed:** Every section in edit dialog
6094- **Result:** No white sections anywhere!
6095
6096### All Changes
6097
6098**1. Task Checkbox Styling**:
6099
6100**Before**:
6101```php
6102style="accent-color: $border !important;"
6103<!-- Only accent, background still white ✗ -->
6104```
6105
6106**After**:
6107```php
6108style="accent-color: $border !important;
6109       background-color: $cell_bg !important;
6110       border: 2px solid $grid_border !important;"
6111<!-- Full theming ✓ -->
6112```
6113
6114**2. Past Events Toggle Border**:
6115
6116**Before**:
6117```php
6118style="border-color: $grid_border;"
6119<!-- No !important, CSS overrides ✗ -->
6120```
6121
6122**After**:
6123```php
6124style="border-color: $grid_border !important;
6125       border-top: 1px solid $grid_border !important;
6126       border-bottom: 1px solid $grid_border !important;"
6127<!-- Cannot be overridden ✓ -->
6128```
6129
6130**3. Form Field Backgrounds**:
6131
6132**Before**:
6133```html
6134<div class="form-field">
6135<div class="form-row-group">
6136<!-- No background, shows white ✗ -->
6137```
6138
6139**After**:
6140```php
6141<div class="form-field" style="background: $bg !important;">
6142<div class="form-row-group" style="background: $bg !important;">
6143<!-- Fully themed ✓ -->
6144```
6145
6146### Before vs After
6147
6148**BEFORE (v4.8.7)**:
6149```
6150Event:
6151□ Task checkbox  ← White checkbox ✗
6152
6153Past Events
6154▶ Past Events (3) ← White line below ✗
6155─────────────────
6156
6157Edit Dialog:
6158┌──────────────┐
6159│ Form fields  │ ← White sections ✗
6160└──────────────┘
6161```
6162
6163**AFTER (v4.8.8)**:
6164```
6165Matrix Event:
6166☑ Task checkbox  ← Green checkbox ✓
6167
6168Past Events
6169▶ Past Events (3) ← Green border ✓
6170─────────────────
6171
6172Matrix Edit Dialog:
6173┌──────────────┐
6174│ Form fields  │ ← Dark green ✓
6175└──────────────┘
6176```
6177
6178### Complete Examples
6179
6180**Matrix Theme**:
6181```
6182Task Checkbox:
6183☑ Checked   → Green checkmark, green bg
6184☐ Unchecked → Green border, dark green bg ✓
6185
6186Past Events Toggle:
6187▶ Past Events (3)
6188─────────────────── Green border ✓
6189
6190Edit Dialog:
6191All sections dark green ✓
6192No white anywhere ✓
6193```
6194
6195**Purple Theme**:
6196```
6197Task Checkbox:
6198☑ Checked   → Purple checkmark, purple bg
6199☐ Unchecked → Purple border, dark purple bg ✓
6200
6201Past Events Toggle:
6202▶ Past Events (3)
6203─────────────────── Purple border ✓
6204
6205Edit Dialog:
6206All sections dark purple ✓
6207```
6208
6209**Professional Theme**:
6210```
6211Task Checkbox:
6212☑ Checked   → Blue checkmark, white bg
6213☐ Unchecked → Gray border, white bg ✓
6214
6215Past Events Toggle:
6216▶ Past Events (3)
6217─────────────────── Gray border ✓
6218
6219Edit Dialog:
6220All sections light ✓
6221```
6222
6223**Pink Theme**:
6224```
6225Task Checkbox:
6226☑ Checked   → Pink checkmark, pink bg ✨
6227☐ Unchecked → Pink border, dark pink bg ✓
6228
6229Past Events Toggle:
6230▶ Past Events (3)
6231─────────────────── Pink border ��
6232
6233Edit Dialog:
6234All sections dark pink ✓
6235```
6236
6237### Checkbox Visual
6238
6239**Matrix - Unchecked**:
6240```
6241┌─────┐
6242│     │ ← Dark green background
6243│     │   Green border
6244└─────┘
6245```
6246
6247**Matrix - Checked**:
6248```
6249┌─────┐
6250│ ✓   │ ← Dark green background
6251│     │   Green checkmark
6252└─────┘
6253```
6254
6255### Past Events Border
6256
6257**Before**:
6258```
6259▶ Past Events (3)
6260─────────────────── White line ✗
6261```
6262
6263**After**:
6264```
6265▶ Past Events (3)
6266─────────────────── Green line ✓ (Matrix)
6267                    Purple line ✓ (Purple)
6268                    Gray line ✓ (Professional)
6269                    Pink line ✓ (Pink)
6270```
6271
6272### Form Field Coverage
6273
6274**All sections themed**:
6275- ✅ Title field
6276- ✅ Namespace field
6277- ✅ Description field
6278- ✅ **Date row** ← v4.8.8!
6279- ✅ **Checkbox sections** ← v4.8.8!
6280- ✅ **Recurring options** ← v4.8.8!
6281- ✅ **Time row** ← v4.8.8!
6282- ✅ **Color row** ← v4.8.8!
6283- ✅ Button footer
6284
6285**Every div has background!** ✓
6286
6287### ABSOLUTE PERFECTION
6288
6289**Not a single white pixel**:
6290- ✅ No white checkboxes
6291- ✅ No white borders
6292- ✅ No white backgrounds
6293- ✅ No white sections
6294- ✅ No white lines
6295- ✅ No white anything
6296
6297**100% PERFECT THEMING!** ����✨
6298
6299## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING
6300
6301### �� Fixed: Checkbox Section Backgrounds Themed
6302- **Fixed:** Repeating Event section background
6303- **Fixed:** Task checkbox section background
6304- **Result:** No white backgrounds in dialog!
6305
6306### �� Fixed: Unchecked Task Checkboxes Themed
6307- **Fixed:** Added CSS for checkbox backgrounds
6308- **Fixed:** Unchecked boxes show theme colors
6309- **Result:** No white checkboxes!
6310
6311### �� Fixed: Day Popup Dialog Fully Themed
6312- **Fixed:** Popup container, header, body themed
6313- **Fixed:** Event items in popup themed
6314- **Fixed:** Add Event button themed
6315- **Fixed:** Footer section themed
6316- **Result:** Perfect popup theming!
6317
6318### All Changes
6319
6320**1. Checkbox Section Backgrounds**:
6321
6322**Before**:
6323```html
6324<div class="form-field-checkbox">
6325<!-- White background ✗ -->
6326```
6327
6328**After**:
6329```php
6330<div class="form-field-checkbox"
6331     style="background: $bg !important;">
6332<!-- Themed ✓ -->
6333```
6334
6335**2. Checkbox Background CSS**:
6336
6337**Added to style block**:
6338```css
6339.task-checkbox {
6340    background-color: $cell_bg !important;
6341    border: 2px solid $grid_border !important;
6342}
6343```
6344
6345**3. Day Popup Theming**:
6346
6347**Container**:
6348```javascript
6349style="background: $bg !important;
6350       border: 2px solid $border !important;
6351       box-shadow: 0 0 20px $shadow !important;"
6352```
6353
6354**Header**:
6355```javascript
6356style="background: $header_bg !important;
6357       color: $text_primary !important;
6358       border-bottom: 1px solid $border !important;"
6359```
6360
6361**Footer**:
6362```javascript
6363style="background: $bg !important;
6364       border-top: 1px solid $grid_border !important;"
6365```
6366
6367**Add Event Button**:
6368```javascript
6369style="background: $border !important;
6370       color: $bg !important;
6371       border-color: $border !important;"
6372```
6373
6374**Event Items**:
6375```javascript
6376style="background: $cell_bg !important;
6377       border: 1px solid $grid_border !important;"
6378```
6379
6380### Before vs After
6381
6382**BEFORE (v4.8.6)**:
6383```
6384Edit Dialog:
6385┌──────────────────┐
6386│ ☑ Repeating Event│ ← White background ✗
6387├──────────────────┤
6388│ ☑ Task checkbox  │ ← White background ✗
6389└──────────────────┘
6390
6391Day Popup:
6392┌──────────────────┐
6393│ Monday, Feb 8    │ ← White ✗
6394├──────────────────┤
6395│ Team Meeting     │ ← White ✗
6396│ 2:00 PM          │
6397├──────────────────┤
6398│ [+ Add Event]    │ ← White ✗
6399└──────────────────┘
6400
6401Task checkbox: ☐ ← White ✗
6402```
6403
6404**AFTER (v4.8.7)**:
6405```
6406Edit Dialog (Matrix):
6407┌──────────────────┐
6408│ ☑ Repeating Event│ ← Dark green ✓
6409├──────────────────┤
6410│ ☑ Task checkbox  │ ← Dark green ✓
6411└──────────────────┘
6412
6413Day Popup (Matrix):
6414┌──────────────────┐
6415│ Monday, Feb 8    │ ← Dark green ✓
6416├──────────────────┤
6417│ Team Meeting     │ ← Dark green ✓
6418│ 2:00 PM          │
6419├──────────────────┤
6420│ [+ Add Event]    │ ← Green button ✓
6421└──────────────────┘
6422
6423Task checkbox: ☑ ← Green ✓
6424```
6425
6426### Complete Examples
6427
6428**Matrix Dialog**:
6429```
6430┌──────────────────────────┐
6431│ ✏️ Edit Event            │
6432├──────────────────────────┤
6433│ �� Title: [_________]    │
6434│ �� Date: [__________]    │
6435│                          │
6436│ ☑ �� Repeating Event     │ ← Dark green bg
6437├──────────────────────────┤
6438│ ☑ �� Task checkbox       │ ← Dark green bg
6439├──────────────────────────┤
6440│ [Cancel] [�� Save]       │
6441└──────────────────────────┘
6442
6443All sections themed! ✓
6444```
6445
6446**Matrix Day Popup**:
6447```
6448┌──────────────────────────┐
6449│ Monday, February 8, 2026 │ ← Green header
6450├──────────────────────────┤
6451│ ┌──────────────────────┐ │
6452│ │ Team Meeting         │ │ ← Dark green
6453│ │ �� 2:00 PM           │ │
6454│ └──────────────────────┘ │
6455│ ┌──────────────────────┐ │
6456│ │ Code Review          │ │ ← Dark green
6457│ │ �� 4:00 PM           │ │
6458│ └──────────────────────┘ │
6459├──────────────────────────┤
6460│   [+ Add Event]          │ ← Green button
6461└──────────────────────────┘
6462```
6463
6464**Purple Day Popup**:
6465```
6466┌──────────────────────────┐
6467│ Monday, February 8, 2026 │ ← Purple header
6468├──────────────────────────┤
6469│ ┌──────────────────────┐ │
6470│ │ Team Meeting         │ │ ← Dark purple
6471│ │ �� 2:00 PM           │ │
6472│ └──────────────────────┘ │
6473├──────────────────────────┤
6474│   [+ Add Event]          │ ← Purple button
6475└──────────────────────────┘
6476```
6477
6478**Professional Day Popup**:
6479```
6480┌──────────────────────────┐
6481│ Monday, February 8, 2026 │ ← Light header
6482├──────────────────────────┤
6483│ ┌──────────────────────┐ │
6484│ │ Team Meeting         │ │ ← White
6485│ │ �� 2:00 PM           │ │
6486│ └──────────────────────┘ │
6487├──────────────────────────┤
6488│   [+ Add Event]          │ ← Blue button
6489└──────────────────────────┘
6490```
6491
6492**Pink Day Popup**:
6493```
6494┌──────────────────────────┐
6495│ Monday, February 8, 2026 │ ← Pink header ✨
6496├──────────────────────────┤
6497│ ┌──────────────────────┐ │
6498│ │ Team Meeting ��      │ │ ← Dark pink
6499│ │ �� 2:00 PM           │ │
6500│ └──────────────────────┘ │
6501├──────────────────────────┤
6502│   [+ Add Event]          │ ← Pink button
6503└──────────────────────────┘
6504```
6505
6506### Checkbox Theming
6507
6508**Unchecked boxes now themed**:
6509```
6510Matrix:
6511☐ → Dark green bg, green border ✓
6512
6513Purple:
6514☐ → Dark purple bg, purple border ✓
6515
6516Professional:
6517☐ → White bg, gray border ✓
6518
6519Pink:
6520☐ → Dark pink bg, pink border ✓
6521```
6522
6523### Complete Coverage
6524
6525**Edit Dialog - All Sections**:
6526- ✅ Header
6527- ✅ All inputs
6528- ✅ All labels
6529- ✅ **Checkbox sections** ← v4.8.7!
6530- ✅ Recurring options
6531- ✅ Button footer
6532- ✅ All checkboxes (checked & unchecked)
6533
6534**Day Popup - All Elements**:
6535- ✅ **Popup container** ← v4.8.7!
6536- ✅ **Header** ← v4.8.7!
6537- ✅ **Body** ← v4.8.7!
6538- ✅ **Event items** ← v4.8.7!
6539- ✅ **Namespace badges** ← v4.8.7!
6540- ✅ **Footer** ← v4.8.7!
6541- ✅ **Add Event button** ← v4.8.7!
6542- ✅ **No events message** ← v4.8.7!
6543
6544**Absolutely every dialog element themed!** ��✨
6545
6546### Perfect Theming Achievement
6547
6548**Every UI component in entire plugin**:
6549- ✅ Calendar grid
6550- ✅ Sidebar widget
6551- ✅ Event list
6552- ✅ Search bar
6553- ✅ Event boxes
6554- ✅ Edit dialog (complete)
6555- ✅ **Day popup** ← v4.8.7!
6556- ✅ Month picker
6557- ✅ All text
6558- ✅ All buttons
6559- ✅ All inputs
6560- ✅ **All checkboxes** ← v4.8.7!
6561- ✅ All borders
6562- ✅ All badges
6563- ✅ All backgrounds
6564
6565**NO WHITE ANYWHERE!** ��
6566
6567**100% COMPLETE THEMING ACHIEVED!** ��✨��
6568
6569## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS
6570
6571### �� Fixed: Dialog Checkbox Sections Themed
6572- **Fixed:** Recurring options section background themed
6573- **Fixed:** Section has themed border accent
6574- **Result:** No white sections in dialog!
6575
6576### �� Fixed: Dialog Button Section Themed
6577- **Fixed:** Button area background themed
6578- **Fixed:** Top border separator themed
6579- **Result:** Complete dialog theming!
6580
6581### �� Fixed: Event Box Borders Themed
6582- **Fixed:** Top, right, bottom borders now themed
6583- **Fixed:** Left border remains event color
6584- **Result:** Perfect event boxes!
6585
6586### All Changes
6587
6588**1. Recurring Options Section**:
6589
6590**Before**:
6591```html
6592<div class="recurring-options" style="display:none;">
6593<!-- White background ✗ -->
6594```
6595
6596**After**:
6597```php
6598<div class="recurring-options"
6599     style="display:none;
6600            background: $bg !important;
6601            padding: 8px;
6602            border-left: 2px solid $border;
6603            margin-left: 4px;">
6604<!-- Themed with accent border ✓ -->
6605```
6606
6607**2. Dialog Actions Section**:
6608
6609**Before**:
6610```html
6611<div class="dialog-actions-sleek">
6612<!-- White background ✗ -->
6613```
6614
6615**After**:
6616```php
6617<div class="dialog-actions-sleek"
6618     style="background: $bg !important;
6619            border-top: 1px solid $grid_border !important;">
6620<!-- Themed with separator ✓ -->
6621```
6622
6623**3. Event Box Borders**:
6624
6625**Before**:
6626```php
6627border-left-color: $event_color;
6628<!-- Only left border colored ✗ -->
6629```
6630
6631**After**:
6632```php
6633border-left-color: $event_color;
6634border-top: 1px solid $grid_border !important;
6635border-right: 1px solid $grid_border !important;
6636border-bottom: 1px solid $grid_border !important;
6637<!-- All borders themed! ✓ -->
6638```
6639
6640### Before vs After
6641
6642**BEFORE (v4.8.5)**:
6643```
6644Dialog:
6645┌────────────────┐
6646│ ☑ Repeating    │
6647├────────────────┤ ← White section ✗
6648│ Repeat: Daily  │
6649│ Until: [____]  │
6650├────────────────┤
6651│ [Cancel] [Save]│ ← White footer ✗
6652└────────────────┘
6653
6654Event Box:
6655┌────────────┐
6656│Team Meeting│ ← White borders ✗
6657│2:00 PM     │
6658└────────────┘
6659```
6660
6661**AFTER (v4.8.6)**:
6662```
6663Matrix Dialog:
6664┌────────────────┐
6665│ ☑ Repeating    │
6666├────────────────┤ ← Dark green ✓
6667│ Repeat: Daily  │ Green accent border
6668│ Until: [____]  │
6669├────────────────┤
6670│ [Cancel] [Save]│ ← Dark green ✓
6671└────────────────┘
6672
6673Matrix Event Box:
6674┌────────────┐
6675│Team Meeting│ ← Green borders ✓
6676│2:00 PM     │
6677└────────────┘
6678```
6679
6680### Dialog Section Examples
6681
6682**Matrix Theme**:
6683```
6684┌──────────────────────────┐
6685│ ✏️ Edit Event            │
6686├──────────────────────────┤
6687│ ☑ �� Repeating Event     │
6688├║─────────────────────────┤ Green accent
6689│║ Repeat Every: Daily     │ Dark green bg
6690│║ Repeat Until: [_____]   │
6691└──────────────────────────┘
6692  [Cancel] [�� Save]       ← Dark green bg
6693──────────────────────────── Green border
6694```
6695
6696**Purple Theme**:
6697```
6698┌──────────────────────────┐
6699│ ☑ �� Repeating Event     │
6700├║─────────────────────────┤ Purple accent
6701│║ Repeat options...       │ Dark purple bg
6702└──────────────────────────┘
6703  [Cancel] [�� Save]       ← Dark purple bg
6704──────────────────────────── Purple border
6705```
6706
6707**Professional Theme**:
6708```
6709┌──────────────────────────┐
6710│ ☑ �� Repeating Event     │
6711├║─────────────────────────┤ Blue accent
6712│║ Repeat options...       │ Light bg
6713└──────────────────────────┘
6714  [Cancel] [�� Save]       ← Light bg
6715──────────────────────────── Gray border
6716```
6717
6718**Pink Theme**:
6719```
6720┌──────────────────────────┐
6721│ ☑ �� Repeating Event ✨  │
6722├║─────────────────────────┤ Pink accent
6723│║ Repeat options...       │ Dark pink bg ��
6724└──────────────────────────┘
6725  [Cancel] [�� Save]       ← Dark pink bg
6726──────────────────────────── Pink border
6727```
6728
6729### Event Box Border Visual
6730
6731**Before (v4.8.5)**:
6732```
6733Left border only:
6734█ Team Meeting
6735█ 2:00 PM
6736█ [Edit] [Delete]
6737
6738Only event color on left ✗
6739White on other 3 sides ✗
6740```
6741
6742**After (v4.8.6)**:
6743```
6744All borders themed:
6745┌─────────────┐
6746█Team Meeting │ ← Top: themed
6747█2:00 PM      │ ← Right: themed
6748█[Edit][Del]  │ ← Bottom: themed
6749└─────────────┘
6750
6751Left: Event color ✓
6752Other 3: Theme grid_border ✓
6753```
6754
6755### Matrix Event Box:
6756```
6757┌─────────────┐ Green border
6758│Team Meeting │
6759│2:00 PM      │
6760└─────────────┘ Green border
67616762Green left bar
6763```
6764
6765### Purple Event Box:
6766```
6767┌─────────────┐ Purple border
6768│Team Meeting │
6769│2:00 PM      │
6770└─────────────┘ Purple border
67716772Purple left bar
6773```
6774
6775### Professional Event Box:
6776```
6777┌─────────────┐ Gray border
6778│Team Meeting │
6779│2:00 PM      │
6780└─────────────┘ Gray border
67816782Event color left bar
6783```
6784
6785### Complete Dialog Coverage
6786
6787**All sections themed**:
6788- ✅ Dialog header
6789- ✅ Form inputs
6790- ✅ Checkbox labels
6791- ✅ **Recurring options** ← v4.8.6!
6792- ✅ **Button section** ← v4.8.6!
6793- ✅ All labels
6794- ✅ All buttons
6795
6796**No white sections!** ✓
6797
6798### Complete Event Box Coverage
6799
6800**All borders themed**:
6801- ✅ Left border (event color)
6802- ✅ **Top border** ← v4.8.6!
6803- ✅ **Right border** ← v4.8.6!
6804- ✅ **Bottom border** ← v4.8.6!
6805- ✅ Background
6806- ✅ Text
6807
6808**Perfect box outline!** ✓
6809
6810### Visual Perfection
6811
6812**Matrix theme event list**:
6813```
6814┌─────────────┐
6815│Team Meeting │ ← Green box
6816│2:00 PM      │
6817└─────────────┘
6818┌─────────────┐
6819│Code Review  │ ← Green box
6820│4:00 PM      │
6821└─────────────┘
6822
6823All borders green! ✓
6824```
6825
6826**ABSOLUTE PERFECT THEMING!** ��✨
6827
6828## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS
6829
6830### �� Fixed: Event Dialog Fully Themed
6831- **Fixed:** Dialog background, header, inputs all themed
6832- **Fixed:** All labels, checkboxes, selects themed
6833- **Fixed:** Save and Cancel buttons themed
6834- **Result:** Dialog matches theme perfectly!
6835
6836### �� Fixed: Sidebar Event Borders Properly Themed
6837- **Fixed:** Event divider borders use grid_border color
6838- **Fixed:** Clean, subtle themed dividers
6839- **Result:** No more white borders in sidebar!
6840
6841### All Changes
6842
6843**1. Event Dialog Theming**:
6844
6845**Dialog container**:
6846```php
6847background: $themeStyles['bg'] !important;
6848border: 2px solid $themeStyles['border'] !important;
6849box-shadow: 0 0 20px $shadow !important;
6850```
6851
6852**Dialog header**:
6853```php
6854background: $themeStyles['header_bg'] !important;
6855color: $themeStyles['text_primary'] !important;
6856border-bottom: 1px solid $border !important;
6857```
6858
6859**All form inputs** (text, date, select, textarea):
6860```php
6861background: $themeStyles['cell_bg'] !important;
6862color: $themeStyles['text_primary'] !important;
6863border-color: $themeStyles['grid_border'] !important;
6864```
6865
6866**All labels**:
6867```php
6868color: $themeStyles['text_primary'] !important;
6869```
6870
6871**Checkboxes**:
6872```php
6873accent-color: $themeStyles['border'] !important;
6874```
6875
6876**Buttons**:
6877```php
6878// Cancel button:
6879background: $cell_bg !important;
6880color: $text_primary !important;
6881
6882// Save button:
6883background: $border !important;
6884color: $bg !important; (or white for professional)
6885```
6886
6887**2. Sidebar Event Borders**:
6888
6889**Before**:
6890```php
6891border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded
6892```
6893
6894**After**:
6895```php
6896borderColor = $themeStyles['grid_border'];
6897border-bottom: 1px solid $borderColor !important;
6898```
6899
6900### Before vs After
6901
6902**BEFORE (v4.8.4)**:
6903```
6904Event Dialog:
6905┌────────────────┐
6906│ Add Event      │ ← White background ✗
6907│ Title: [_____] │ ← White inputs ✗
6908│ Date:  [_____] │
6909│ [Cancel] [Save]│ ← Default buttons ✗
6910└────────────────┘
6911
6912Sidebar Events:
6913Event 1 ────────  ← White border ✗
6914Event 2 ────────  ← White border ✗
6915```
6916
6917**AFTER (v4.8.5)**:
6918```
6919Event Dialog (Matrix):
6920┌────────────────┐
6921│ Add Event      │ ← Dark green background ✓
6922│ Title: [_____] │ ← Dark green inputs ✓
6923│ Date:  [_____] │ ← Green text ✓
6924│ [Cancel] [Save]│ ← Themed buttons ✓
6925└────────────────┘
6926
6927Sidebar Events (Matrix):
6928Event 1 ────────  ← Green border ✓
6929Event 2 ────────  ← Green border ✓
6930```
6931
6932### Dialog Examples by Theme
6933
6934**Matrix Dialog**:
6935```
6936┌──────────────────────────┐
6937│ ✏️ Edit Event            │ ← Dark green header
6938├──────────────────────────┤
6939│ �� Title                 │ ← Green labels
6940│ [Team Meeting________]   │ ← Dark green input
6941│                          │
6942│ �� Start Date            │
6943│ [2026-02-08__]           │ ← Dark green input
6944│                          │
6945│ �� Start Time            │
6946│ [2:00 PM ▼]              │ ← Green select
6947│                          │
6948│ ☑ �� Repeating Event     │ ← Green checkbox
6949│                          │
6950│ [Cancel] [�� Save]       │ ← Themed buttons
6951└──────────────────────────┘
6952
6953Everything green! ✓
6954```
6955
6956**Purple Dialog**:
6957```
6958┌──────────────────────────┐
6959│ ✏️ Edit Event            │ ← Dark purple header
6960├──────────────────────────┤
6961│ [Inputs_______________]  │ ← Dark purple inputs
6962│ ☑ Checkboxes             │ ← Purple accent
6963│ [Cancel] [�� Save]       │ ← Purple buttons
6964└──────────────────────────┘
6965```
6966
6967**Professional Dialog**:
6968```
6969┌──────────────────────────┐
6970│ ✏️ Edit Event            │ ← Light gradient header
6971├──────────────────────────┤
6972│ [Inputs_______________]  │ ← White inputs
6973│ ☑ Checkboxes             │ ← Blue accent
6974│ [Cancel] [�� Save]       │ ← Blue save button
6975└──────────────────────────┘
6976```
6977
6978**Pink Dialog**:
6979```
6980┌──────────────────────────┐
6981│ ✏️ Edit Event            │ ← Dark pink header ✨
6982├──────────────────────────┤
6983│ [Inputs_______________]  │ ← Dark pink inputs ��
6984│ ☑ Checkboxes             │ ← Pink accent
6985│ [Cancel] [�� Save]       │ ← Pink buttons
6986└──────────────────────────┘
6987```
6988
6989### Complete Dialog Element Coverage
6990
6991**All form elements themed**:
6992- ✅ Dialog container
6993- ✅ Dialog header
6994- ✅ Close button (×)
6995- ✅ Title input
6996- ✅ Namespace search
6997- ✅ Namespace dropdown
6998- ✅ Description textarea
6999- ✅ Start date input
7000- ✅ End date input
7001- ✅ Recurring checkbox
7002- ✅ Recurrence type select
7003- ✅ Recurrence end date
7004- ✅ Start time select
7005- ✅ End time select
7006- ✅ Color select
7007- ✅ Custom color picker
7008- ✅ Task checkbox
7009- ✅ All labels
7010- ✅ Cancel button
7011- ✅ Save button
7012
7013**Every single dialog element themed!** ��
7014
7015### Sidebar Border Example
7016
7017**Matrix Sidebar**:
7018```
7019┌────────────────┐
7020│ Today          │ ← Green section header
7021├────────────────┤
7022│ Team Meeting   │
7023│ 2:00 PM        │
7024├────────────────┤ ← Green border (grid_border)
7025│ Code Review    │
7026│ 4:00 PM        │
7027├────────────────┤ ← Green border
7028│ Stand-up       │
7029│ All day        │
7030└────────────────┘
7031
7032Subtle green dividers! ✓
7033```
7034
7035### Complete Achievement
7036
7037**Every UI element themed**:
7038- ✅ Calendar
7039- ✅ Sidebar widget
7040- ✅ Event list
7041- ✅ Search bar
7042- ✅ **Event dialog** ← v4.8.5!
7043- ✅ Month picker
7044- ✅ **Sidebar dividers** ← v4.8.5!
7045- ✅ All text
7046- ✅ All inputs
7047- ✅ All buttons
7048- ✅ All borders
7049- ✅ All checkboxes
7050
7051**ABSOLUTE COMPLETE THEMING!** ��✨
7052
7053## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS
7054
7055### �� Fixed: Professional Theme Background Consistency
7056- **Fixed:** Container and event backgrounds now match sidebar
7057- **Fixed:** Lighter, cleaner appearance
7058- **Fixed:** Better contrast and readability
7059- **Result:** Professional theme looks cohesive!
7060
7061### The Problem
7062
7063**v4.8.3 Professional theme**:
7064```
7065Sidebar: Light background (#f5f7fa)
7066Calendar: Medium background (#e8ecf1) ← Didn't match!
7067Events: Light background (#f5f7fa)
7068
7069Inconsistent! ✗
7070```
7071
7072### The Fix
7073
7074**Updated Professional theme colors for consistency**:
7075
7076```php
7077// Before:
7078'bg' => '#e8ecf1',        // Medium gray-blue
7079'cell_bg' => '#f5f7fa',   // Very light
7080'grid_bg' => '#d5dbe3',   // Medium-dark
7081
7082// After:
7083'bg' => '#f5f7fa',        // Very light (matches sidebar)
7084'cell_bg' => '#ffffff',   // Pure white (clean)
7085'grid_bg' => '#e8ecf1',   // Subtle contrast
7086'grid_border' => '#d0d7de', // Softer borders
7087```
7088
7089### Before vs After
7090
7091**BEFORE (v4.8.3)**:
7092```
7093Professional Theme:
7094┌────────────────┐
7095│ Calendar       │ ← Medium gray (#e8ecf1)
7096│ ┌────────────┐ │
7097│ │ Event      │ │ ← Light (#f5f7fa)
7098│ └────────────┘ │
7099└────────────────┘
7100
7101Sidebar:
7102┌────────────────┐
7103│ Widget         │ ← Light (#f5f7fa)
7104└────────────────┘
7105
7106Backgrounds don't match! ✗
7107```
7108
7109**AFTER (v4.8.4)**:
7110```
7111Professional Theme:
7112┌────────────────┐
7113│ Calendar       │ ← Light (#f5f7fa)
7114│ ┌────────────┐ │
7115│ │ Event      │ │ ← White (#ffffff)
7116│ └────────────┘ │
7117└────────────────┘
7118
7119Sidebar:
7120┌────────────────┐
7121│ Widget         │ ← Light (#f5f7fa)
7122└────────────────┘
7123
7124Perfect match! ✓
7125```
7126
7127### New Professional Theme Colors
7128
7129**Backgrounds**:
7130- Container: `#f5f7fa` (light blue-gray)
7131- Events: `#ffffff` (pure white)
7132- Grid: `#e8ecf1` (subtle contrast)
7133
7134**Text**:
7135- Primary: `#2c3e50` (dark blue-gray)
7136- Bright: `#4a90e2` (blue accent)
7137- Dim: `#7f8c8d` (medium gray)
7138
7139**Borders**:
7140- Main: `#4a90e2` (blue)
7141- Grid: `#d0d7de` (soft gray)
7142
7143**Header**:
7144- Gradient: `#ffffff` → `#f5f7fa`
7145
7146### Visual Example
7147
7148**Professional Theme Now**:
7149```
7150┌─────────────────────────────┐
7151│ February 2026               │ ← White to light gradient
7152├─┬─┬─┬─┬─┬─┬─┬───────────────┤
7153│S│M│T│W│T│F│S│               │ ← Light background
7154├─┼─┼─┼─┼─┼─┼─┤               │
7155│ │ │1│2│3│4│5│ Event List    │ ← White events
7156│ │ │ │ │ │ │ │ ┌───────────┐ │
7157│ │ │ │ │[8]│ │ │ Meeting   │ │ ← White on light
7158└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘
7159
7160Clean, professional look! ✓
7161```
7162
7163### Comparison with Other Themes
7164
7165**Matrix** (dark):
7166- Container: #242424 (dark green)
7167- Events: #242424 (dark green)
7168- Consistent dark theme ✓
7169
7170**Purple** (dark):
7171- Container: #1a0d14 (dark purple)
7172- Events: #2a2030 (dark purple)
7173- Consistent dark theme ✓
7174
7175**Professional** (light):
7176- Container: #f5f7fa (light blue)
7177- Events: #ffffff (white)
7178- Consistent light theme ✓
7179
7180**Pink** (dark):
7181- Container: #1a0d14 (dark pink)
7182- Events: #1a0d14 (dark pink)
7183- Consistent dark theme ✓
7184
7185**All themes now consistent!** ��
7186
7187### Better Contrast
7188
7189**Professional theme improvements**:
7190
7191**Readability**:
7192- Dark text (#2c3e50) on white/light backgrounds ✓
7193- Excellent contrast ratio ✓
7194- Easy on the eyes ✓
7195
7196**Visual hierarchy**:
7197- White events pop against light container ✓
7198- Blue accents stand out ✓
7199- Clean, modern look ✓
7200
7201**Professional appearance**:
7202- Lighter = more corporate/business feel ✓
7203- Clean whites = premium quality ✓
7204- Subtle grays = sophisticated ✓
7205
7206### Complete Theme Consistency
7207
7208**All themes now have matching backgrounds**:
7209
7210**Matrix**:
7211- Sidebar & Calendar both dark green ✓
7212
7213**Purple**:
7214- Sidebar & Calendar both dark purple ✓
7215
7216**Professional**:
7217- Sidebar & Calendar both light ✓ (v4.8.4!)
7218
7219**Pink**:
7220- Sidebar & Calendar both dark pink ✓
7221
7222**Perfect visual unity across all views!** ��✨
7223
7224## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES
7225
7226### �� Fixed: Bold Text in Descriptions Themed
7227- **Fixed:** **Bold text** now uses theme primary color
7228- **Fixed:** Both `**text**` and `__text__` syntax themed
7229- **Result:** Bold text matches theme!
7230
7231### �� Fixed: Search Bar Fully Themed
7232- **Fixed:** Search input has !important on all styles
7233- **Fixed:** Icon and placeholder text themed
7234- **Result:** Search bar perfectly themed!
7235
7236### �� Fixed: Sidebar Event Boxes Themed
7237- **Fixed:** Event borders in sidebar now use theme grid_border color
7238- **Fixed:** Borders have !important flag
7239- **Result:** Sidebar boxes match theme!
7240
7241### All Changes
7242
7243**1. Bold Text Styling**:
7244
7245**Before**:
7246```html
7247<strong>Bold text</strong> ← Default black
7248```
7249
7250**After**:
7251```php
7252<strong style="color: $text_primary !important; font-weight:bold;">
7253    Bold text
7254</strong>
7255
7256Matrix: Green bold ✓
7257Purple: Lavender bold ✓
7258Professional: Dark bold ✓
7259Pink: Pink bold ✓
7260```
7261
7262**2. Search Bar**:
7263
7264**Before**:
7265```php
7266style="background: $bg; color: $text;"
7267Could be overridden by CSS
7268```
7269
7270**After**:
7271```php
7272style="background: $bg !important;
7273       color: $text_primary !important;
7274       border-color: $grid_border !important;"
7275
7276Cannot be overridden! ✓
7277```
7278
7279**3. Sidebar Event Boxes**:
7280
7281**Before**:
7282```php
7283$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded
7284```
7285
7286**After**:
7287```php
7288$borderColor = $themeStyles['grid_border']; // From theme
7289border-bottom: 1px solid $borderColor !important;
7290
7291Matrix: Green borders ✓
7292Purple: Purple borders ✓
7293Professional: Gray borders ✓
7294Pink: Pink borders ✓
7295```
7296
7297### Before vs After
7298
7299**BEFORE (v4.8.2)**:
7300```
7301Event description:
7302"Please review **Q1 Goals** carefully"
73037304            Black bold ✗
7305
7306Search bar:
7307[�� Search...] ← Gray placeholder ✗
7308
7309Sidebar:
7310┌────────────┐
7311│ Event 1    │
7312├────────────┤ ← Gray border ✗
7313│ Event 2    │
7314└────────────┘
7315```
7316
7317**AFTER (v4.8.3)**:
7318```
7319Matrix Theme:
7320
7321Event description:
7322"Please review **Q1 Goals** carefully"
73237324            Green bold ✓
7325
7326Search bar:
7327[�� Search...] ← Green themed ✓
7328
7329Sidebar:
7330┌────────────┐
7331│ Event 1    │
7332├────────────┤ ← Green border ✓
7333│ Event 2    │
7334└────────────┘
7335```
7336
7337### Examples by Theme
7338
7339**Matrix Theme**:
7340```
7341Description:
7342"Check **important notes** and links"
73437344   Green bold
7345
7346Sidebar boxes:
7347Event 1
7348───────── Green border
7349Event 2
7350───────── Green border
7351```
7352
7353**Purple Theme**:
7354```
7355Description:
7356"Review **agenda items** before meeting"
73577358   Lavender bold
7359
7360Sidebar boxes:
7361Event 1
7362───────── Purple border
7363Event 2
7364───────── Purple border
7365```
7366
7367**Professional Theme**:
7368```
7369Description:
7370"Update **quarterly reports** by Friday"
73717372   Dark bold
7373
7374Sidebar boxes:
7375Event 1
7376───────── Gray border
7377Event 2
7378───────── Gray border
7379```
7380
7381**Pink Theme**:
7382```
7383Description:
7384"Don't forget **party supplies** ✨"
73857386        Pink bold
7387
7388Sidebar boxes:
7389Event 1 ��
7390───────── Pink border
7391Event 2 ✨
7392───────── Pink border
7393```
7394
7395### Complete Formatting Coverage
7396
7397**Text formatting themed**:
7398- ✅ Regular text
7399- ✅ **Bold text** ← NEW!
7400- ✅ Links
7401- ✅ Italic text (inherits)
7402- ✅ Code (inherits)
7403
7404**UI elements themed**:
7405- ✅ Search bar ← Enhanced!
7406- ✅ Search icon ← Enhanced!
7407- ✅ Search placeholder ← Enhanced!
7408- ✅ Sidebar borders ← NEW!
7409- ✅ Event borders
7410- ✅ Badges
7411- ✅ Buttons
7412
7413**Every element perfectly themed!** ��
7414
7415### Search Bar Coverage
7416
7417**All aspects themed**:
7418- Background: Theme cell_bg ✓
7419- Text color: Theme text_primary ✓
7420- Border: Theme grid_border ✓
7421- Placeholder: Inherits text color ✓
7422- Icon (��): In placeholder ✓
7423- Clear button (✕): Themed ✓
7424
7425**Cannot be overridden!** (all have !important)
7426
7427### Sidebar Event Box Styling
7428
7429**Consistent borders**:
7430```
7431Matrix:
7432╔════════════╗
7433║ Event 1    ║
7434╟────────────╢ ← grid_border color
7435║ Event 2    ║
7436╚════════════╝
7437
7438All themes match perfectly! ✓
7439```
7440
7441### Complete Theme Achievement
7442
7443**Every single element themed**:
7444- ✅ Backgrounds
7445- ✅ Text (regular)
7446- ✅ Text (bold) ← v4.8.3!
7447- ✅ Links
7448- ✅ Badges
7449- ✅ Buttons
7450- ✅ Checkboxes
7451- ✅ Icons
7452- ✅ Borders
7453- ✅ Search bar ← Enhanced v4.8.3!
7454- ✅ Sidebar boxes ← v4.8.3!
7455- ✅ Today marker
7456- ✅ Calendar grid
7457- ✅ Event panels
7458
7459**ABSOLUTE PERFECTION!** ��✨
7460
7461## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS
7462
7463### �� Fixed: Links in Descriptions Now Themed
7464- **Fixed:** All links in event descriptions now use theme color
7465- **Fixed:** DokuWiki links [[page|text]] themed
7466- **Fixed:** Markdown links [text](url) themed
7467- **Fixed:** Plain URLs themed
7468- **Result:** Links match theme perfectly!
7469
7470### The Problem
7471
7472**v4.8.1 behavior**:
7473```
7474Event description:
7475"Check out https://example.com" ← Blue default link ✗
7476"See [[wiki:page|docs]]" ← Blue default link ✗
7477```
7478
7479### The Fix
7480
7481**Added inline color styling to ALL link types**:
7482
7483```php
7484// Get theme colors:
7485$linkColor = $themeStyles['border'] . ' !important';
7486$linkStyle = ' style="color:' . $linkColor . ';"';
7487
7488// Apply to links:
7489<a href="..." style="color: #00cc07 !important;">link</a>
7490```
7491
7492**All link types themed**:
74931. DokuWiki syntax: `[[page|text]]`
74942. Markdown syntax: `[text](url)`
74953. Plain URLs: `https://example.com`
7496
7497### Before vs After
7498
7499**BEFORE (v4.8.1)**:
7500```
7501Matrix Theme Description:
7502"Visit https://example.com for more info"
75037504     Blue link ✗ (doesn't match green theme)
7505```
7506
7507**AFTER (v4.8.2)**:
7508```
7509Matrix Theme Description:
7510"Visit https://example.com for more info"
75117512     Green link ✓ (matches theme!)
7513```
7514
7515### Link Colors by Theme
7516
7517**Matrix**:
7518- Links: Green (#00cc07) !important
7519- Matches: Border, badges, highlights
7520
7521**Purple**:
7522- Links: Purple (#9b59b6) !important
7523- Matches: Border, badges, highlights
7524
7525**Professional**:
7526- Links: Blue (#4a90e2) !important
7527- Matches: Border, badges, highlights
7528
7529**Pink**:
7530- Links: Hot Pink (#ff1493) !important
7531- Matches: Border, badges, highlights ✨
7532
7533### Examples
7534
7535**Matrix Description with Links**:
7536```
7537Event: Team Meeting
7538Description:
7539"Review [[wiki:q1goals|Q1 Goals]]
7540and visit https://metrics.com"
7541
7542Both links → Green ✓
7543```
7544
7545**Purple Description with Links**:
7546```
7547Event: Planning Session
7548Description:
7549"Check [schedule](https://cal.com)
7550for availability"
7551
7552Link → Purple ✓
7553```
7554
7555**Professional Description with Links**:
7556```
7557Event: Client Call
7558Description:
7559"Prepare [[reports|Monthly Reports]]
7560before the call"
7561
7562Link → Blue ✓
7563```
7564
7565**Pink Description with Links**:
7566```
7567Event: Party Planning
7568Description:
7569"RSVP at https://party.com ✨"
7570
7571Link → Hot Pink ✓ ��
7572```
7573
7574### Technical Implementation
7575
7576**Updated renderDescription() function**:
7577
7578```php
7579private function renderDescription($description, $themeStyles = null) {
7580    // Get theme
7581    if ($themeStyles === null) {
7582        $theme = $this->getSidebarTheme();
7583        $themeStyles = $this->getSidebarThemeStyles($theme);
7584    }
7585
7586    // Create link style
7587    $linkColor = $themeStyles['border'] . ' !important';
7588    $linkStyle = ' style="color:' . $linkColor . ';"';
7589
7590    // Apply to all link types:
7591    $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>';
7592}
7593```
7594
7595### Complete Theming
7596
7597**Every text element**:
7598- ✅ Event titles
7599- ✅ Event dates
7600- ✅ Event descriptions
7601- ✅ **Links in descriptions** ← NEW!
7602- ✅ Badges
7603- ✅ Buttons
7604
7605**Every color unified!** ��
7606
7607### Unified Theme Experience
7608
7609**Matrix Theme**:
7610```
7611Everything green:
7612- Text: Green ✓
7613- Links: Green ✓
7614- Badges: Green ✓
7615- Borders: Green ✓
7616- Buttons: Green ✓
7617- Today marker: Green ✓
7618
7619Perfect harmony! ✓
7620```
7621
7622**No default blue links breaking the theme!**
7623
7624### Link Types Supported
7625
7626**1. DokuWiki Syntax**:
7627```
7628[[page|Link Text]] → Themed ✓
7629[[page]] → Themed ✓
7630[[page#section|Text]] → Themed ✓
7631```
7632
7633**2. Markdown Syntax**:
7634```
7635[Link Text](https://url.com) → Themed ✓
7636[Text](internal-page) → Themed ✓
7637```
7638
7639**3. Plain URLs**:
7640```
7641https://example.com → Themed ✓
7642http://site.org → Themed ✓
7643```
7644
7645**All links perfectly themed!** ����
7646
7647## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER
7648
7649### �� Fixed: All Badges Now Themed
7650- **Fixed:** TODAY badge themed with theme color
7651- **Fixed:** PAST DUE badge uses orange (warning color)
7652- **Fixed:** Namespace badges themed
7653- **Fixed:** All badges visible and hidden
7654- **Result:** All badges match theme!
7655
7656### �� Fixed: Today Cell More Prominent
7657- **Fixed:** Today cell now has 2px border in theme color
7658- **Fixed:** Border added to both PHP and JavaScript
7659- **Result:** Today stands out clearly!
7660
7661### �� Fixed: Past Event Text Fully Themed
7662- **Fixed:** Event-info div backgrounds ensure no gray
7663- **Result:** Expanded past events completely themed!
7664
7665### All Changes
7666
7667**1. Badge Theming**:
7668
7669**TODAY Badge**:
7670```php
7671// PHP & JavaScript:
7672style="background: $themeStyles['border'] !important;
7673       color: $bg !important;"
7674
7675Matrix: Green badge
7676Purple: Purple badge
7677Professional: Blue badge with white text
7678Pink: Pink badge
7679```
7680
7681**PAST DUE Badge** (always orange):
7682```php
7683style="background: #ff9800 !important;
7684       color: #fff !important;"
7685```
7686
7687**Namespace Badge**:
7688```php
7689style="background: $themeStyles['border'] !important;
7690       color: $bg !important;"
7691```
7692
7693**2. Today Cell Border**:
7694
7695**PHP**:
7696```php
7697$todayBorder = $isToday ?
7698    'border:2px solid ' . $themeStyles['border'] . ' !important;' : '';
7699```
7700
7701**JavaScript**: Same
7702
7703**Result**: Today cell has prominent colored border!
7704
7705### Before vs After
7706
7707**BEFORE (v4.8.0)**:
7708```
7709Calendar:
7710┌─┬─┬─┬─┬─┬─┬─┐
7711│1│2│3│4│5│6│7│
7712│ │ │ │[8]│ │ │ ← Today: subtle background
7713└─┴─┴─┴─┴─┴─┴─┘
7714
7715Event badges:
7716Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗
7717```
7718
7719**AFTER (v4.8.1)**:
7720```
7721Calendar (Matrix):
7722┌─┬─┬─┬─┬─┬─┬─┐
7723│1│2│3│4│5│6│7│
7724│ │ │ │[8]│ │ │ ← Today: green border 2px ✓
7725└─┴─┴─┴─┴─┴─┴─┘
7726
7727Event badges (Matrix):
7728Mon, Feb 8 [TODAY] [Work] ← Green badges ✓
7729```
7730
7731### Matrix Theme Example
7732
7733**Calendar**:
7734```
7735Today cell:
7736┌────┐
7737│ 8  │ Dark green bg + Green 2px border
7738└────┘
7739Very obvious!
7740```
7741
7742**Badges**:
7743```
7744[TODAY] ← Green bg, dark text
7745[Work]  ← Green bg, dark text
7746[PAST DUE] ← Orange bg, white text
7747```
7748
7749### Purple Theme Example
7750
7751**Calendar**:
7752```
7753Today cell:
7754┌────┐
7755│ 8  │ Dark purple bg + Purple 2px border
7756└────┘
7757```
7758
7759**Badges**:
7760```
7761[TODAY] ← Purple bg
7762[Work]  ← Purple bg
7763```
7764
7765### Professional Theme Example
7766
7767**Calendar**:
7768```
7769Today cell:
7770┌────┐
7771│ 8  │ Light blue bg + Blue 2px border
7772└────┘
7773```
7774
7775**Badges**:
7776```
7777[TODAY] ← Blue bg, white text
7778[Work]  ← Blue bg, white text
7779```
7780
7781### Pink Theme Example
7782
7783**Calendar**:
7784```
7785Today cell:
7786┌────┐
7787│ 8  │ Dark pink bg + Pink 2px border ✨
7788└────┘
7789```
7790
7791**Badges**:
7792```
7793[TODAY] ← Pink bg ��
7794[Work]  ← Pink bg ✨
7795```
7796
7797### Complete Badge Coverage
7798
7799**All badges themed**:
7800- ✅ TODAY badge (theme color)
7801- ✅ PAST DUE badge (orange warning)
7802- ✅ Namespace badges (theme color)
7803- ✅ Visible events
7804- ✅ Hidden/past events
7805
7806**No gray badges anywhere!**
7807
7808### Today Cell Visual
7809
7810**Dual indicators**:
78111. Background color (theme today bg)
78122. Border (2px theme color) ← NEW!
7813
7814**Result**: Today is VERY obvious!
7815
7816**Matrix**: Green bg + Green border
7817**Purple**: Purple bg + Purple border
7818**Professional**: Light blue bg + Blue border
7819**Pink**: Pink bg + Pink border ✨
7820
7821### Complete Theming
7822
7823**Every element themed**:
7824- ✅ Backgrounds
7825- ✅ Text colors
7826- ✅ Badges (v4.8.1!)
7827- ✅ Today marker (v4.8.1!)
7828- ✅ Checkboxes
7829- ✅ Buttons
7830- ✅ Icons
7831
7832**Absolutely everything!** ��✨
7833
7834## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING
7835
7836### �� Fixed: All Event Backgrounds Now Themed
7837- **Fixed:** event-info div now has themed background
7838- **Fixed:** event-meta-compact div (visible) now has themed background
7839- **Fixed:** event-desc-compact div now has themed background
7840- **Fixed:** All !important flags added to prevent CSS override
7841- **Result:** Entire event item fully themed!
7842
7843### �� Fixed: Description Text Shows Correct Color Immediately
7844- **Fixed:** Description divs now have explicit background + color on load
7845- **Fixed:** Both visible and hidden descriptions fully styled
7846- **Result:** No more gray text on initial load!
7847
7848### The Problem
7849
7850**v4.7.9 behavior**:
7851```
7852Expanded past event:
7853┌────────────────────────┐
7854│ ▾ Team Meeting         │ ← Themed ✓
7855│   Mon, Feb 8           │ ← Themed ✓
7856│                        │
7857│   [Event details]      │ ← Gray background ✗
7858│   [Description]        │ ← Gray text until navigation ✗
7859└────────────────────────┘
7860
7861Only the date/time div was themed!
7862```
7863
7864### The Fix
7865
7866**Added background to ALL inner divs**:
7867
7868**PHP**:
7869```php
7870// Event container:
7871style="background:' . $themeStyles['cell_bg'] . ' !important;"
7872
7873// event-info wrapper:
7874<div class="event-info"
7875     style="background:' . $themeStyles['cell_bg'] . ' !important;">
7876
7877// event-meta-compact:
7878<div class="event-meta-compact"
7879     style="background:' . $themeStyles['cell_bg'] . ' !important;">
7880
7881// event-desc-compact:
7882<div class="event-desc-compact"
7883     style="background:' . $themeStyles['cell_bg'] . ' !important;
7884            color:' . $themeStyles['text_dim'] . ' !important;">
7885```
7886
7887**JavaScript**: Same styling applied
7888
7889### Before vs After
7890
7891**BEFORE (v4.7.9)**:
7892```
7893Matrix Theme - Expanded Event:
7894┌────────────────────────┐
7895│ ▾ Team Meeting         │
7896│   Mon, Feb 8  ← Green  │
7897│                        │
7898│   Details     ← Gray ✗ │
7899│   Description ← Gray ✗ │
7900│   [✏️] [��️]            │
7901└────────────────────────┘
7902```
7903
7904**AFTER (v4.8.0)**:
7905```
7906Matrix Theme - Expanded Event:
7907┌────────────────────────┐
7908│ ▾ Team Meeting         │
7909│   Mon, Feb 8  ← Green  │
7910│                        │
7911│   Details     ← Green ✓│
7912│   Description ← Green ✓│
7913│   [✏️] [��️]            │
7914└────────────────────────┘
7915
7916Entire event themed!
7917```
7918
7919### What's Themed Now
7920
7921**Event Item Structure** (all themed):
7922```
7923event-compact-item        ← Themed ✓
7924  └─ event-info           ← Themed ✓ (v4.8.0!)
7925      ├─ event-title-row  ← Themed ✓
7926      ├─ event-meta       ← Themed ✓ (v4.8.0!)
7927      └─ event-desc       ← Themed ✓ (v4.8.0!)
7928```
7929
7930**Every layer has background!**
7931
7932### Matrix Theme Example
7933
7934**Complete event**:
7935```
7936┌────────────────────────────┐
7937│ Team Meeting               │ ← Dark green bg
7938│   Mon, Feb 8 • 2:00 PM     │ ← Dark green bg
7939│   Discussed Q1 goals and   │ ← Dark green bg
7940│   set targets for team     │ ← Dark green bg
7941│   [✏️] [��️] [☑]           │ ← Dark green bg
7942└────────────────────────────┘
7943
7944Consistent green throughout! ✓
7945```
7946
7947### Purple Theme Example
7948
7949```
7950┌────────────────────────────┐
7951│ Team Meeting               │ ← Dark purple bg
7952│   Mon, Feb 8 • 2:00 PM     │ ← Dark purple bg
7953│   Discussed Q1 goals       │ ← Dark purple bg
7954│   [✏️] [��️] [☑]           │ ← Dark purple bg
7955└────────────────────────────┘
7956
7957Consistent purple throughout! ✓
7958```
7959
7960### Professional Theme Example
7961
7962```
7963┌────────────────────────────┐
7964│ Team Meeting               │ ← Light bg
7965│   Mon, Feb 8 • 2:00 PM     │ ← Light bg
7966│   Discussed Q1 goals       │ ← Light bg
7967│   [✏️] [��️] [☑]           │ ← Light bg
7968└────────────────────────────┘
7969
7970Consistent light throughout! ✓
7971```
7972
7973### Pink Theme Example
7974
7975```
7976┌────────────────────────────┐
7977│ Team Meeting               │ ← Dark pink bg
7978│   Mon, Feb 8 • 2:00 PM     │ ← Dark pink bg
7979│   Discussed Q1 goals       │ ← Dark pink bg
7980│   [✏️] [��️] [☑]           │ ← Dark pink bg
7981└────────────────────────────┘
7982
7983Consistent pink throughout! ✓
7984```
7985
7986### Complete Theming
7987
7988**Every element, every layer**:
7989- ✅ Container
7990- ✅ Event item
7991- ✅ Event info wrapper (v4.8.0!)
7992- ✅ Title row
7993- ✅ Meta div (v4.8.0!)
7994- ✅ Description div (v4.8.0!)
7995- ✅ Action buttons
7996- ✅ Checkboxes
7997
7998**No gray anywhere!** ��
7999
8000### Why Multiple Backgrounds?
8001
8002**CSS layers stack**:
8003```html
8004<div style="background: green;">         ← Layer 1
8005  <div style="background: inherit;">     ← Could be gray!
8006    <div>Content</div>                   ← Inherits gray!
8007  </div>
8008</div>
8009
8010Better:
8011<div style="background: green;">         ← Layer 1
8012  <div style="background: green;">       ← Layer 2 forced
8013    <div style="background: green;">     ← Layer 3 forced
8014      Content                            ← All green!
8015    </div>
8016  </div>
8017</div>
8018```
8019
8020**Every layer forced = Perfect theming!**
8021
8022### !important Everywhere
8023
8024**All styling now uses !important**:
8025- background: ... !important
8026- color: ... !important
8027
8028**Result**: CSS cannot override themes!
8029
8030**Version 4.8.0 = Complete, bulletproof theming!** ��✨
8031
8032## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS
8033
8034### �� Fixed: Past Event Expanded Background Themed
8035- **Fixed:** Past event meta div now has theme background when expanded
8036- **Fixed:** Both PHP and JavaScript render with theme background
8037- **Result:** Expanded past events have proper themed background!
8038
8039### ✅ Fixed: Checkboxes Now Themed
8040- **Fixed:** Task checkboxes use accent-color matching theme
8041- **Fixed:** Cursor changes to pointer on hover
8042- **Result:** Checkboxes match theme color!
8043
8044### �� Fixed: Action Buttons (Edit/Delete) Themed
8045- **Fixed:** Edit (✏️) and Delete (��️) buttons now themed
8046- **Fixed:** Background, text, and border all use theme colors
8047- **Result:** All icons themed!
8048
8049### All Changes
8050
8051**1. Past Event Expanded Background**:
8052
8053**PHP**:
8054```php
8055// Before:
8056<div class="event-meta-compact" style="display:none;">
8057
8058// After:
8059<div class="event-meta-compact"
8060     style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;">
8061```
8062
8063**JavaScript**: Same treatment
8064
8065**Result**: Expanded past events have themed background!
8066
8067**2. Task Checkboxes**:
8068
8069**PHP & JavaScript**:
8070```php
8071// Added accent-color:
8072<input type="checkbox"
8073       style="accent-color:' . $themeStyles['border'] . ' !important;
8074              cursor:pointer;">
8075```
8076
8077**accent-color** changes the checkbox color:
8078- Matrix: Green checkboxes ✓
8079- Purple: Purple checkboxes ✓
8080- Professional: Blue checkboxes ✓
8081- Pink: Pink checkboxes ✓
8082
8083**3. Edit/Delete Buttons**:
8084
8085**PHP**:
8086```php
8087<button class="event-action-btn"
8088        style="color:' . $themeStyles['text_primary'] . ' !important;
8089               background:' . $themeStyles['cell_bg'] . ' !important;
8090               border-color:' . $themeStyles['grid_border'] . ' !important;">
8091    ��️
8092</button>
8093```
8094
8095**JavaScript**: Same
8096
8097**Result**: Buttons blend with theme!
8098
8099### Before vs After
8100
8101**BEFORE (v4.7.8)**:
8102```
8103Past Event (expanded):
8104┌─────────────────────────┐
8105│ ▾ Team Meeting          │
8106│   Mon, Feb 8            │ ← White background ✗
8107│   Description           │
8108├─────────────────────────┤
8109│ [✏️] [��️] [☐]          │ ← Default colors ✗
8110└─────────────────────────┘
8111```
8112
8113**AFTER (v4.7.9)**:
8114```
8115Past Event (expanded - Matrix):
8116┌─────────────────────────┐
8117│ ▾ Team Meeting          │
8118│   Mon, Feb 8            │ ← Dark green bg ✓
8119│   Description           │
8120├─────────────────────────┤
8121│ [✏️] [��️] [☑]          │ ← Themed ✓
8122└─────────────────────────┘
8123```
8124
8125### Matrix Theme Example
8126
8127**Checkboxes**: Green accent
8128**Buttons**: Dark bg, green text, green borders
8129**Expanded**: Dark green background
8130
8131```
8132Task: ☑ Complete report  ← Green checkmark
8133[✏️] [��️]                ← Dark buttons with green
8134```
8135
8136### Purple Theme Example
8137
8138**Checkboxes**: Purple accent
8139**Buttons**: Dark purple bg, lavender text
8140**Expanded**: Dark purple background
8141
8142```
8143Task: ☑ Complete report  ← Purple checkmark
8144[✏️] [��️]                ← Purple themed
8145```
8146
8147### Professional Theme Example
8148
8149**Checkboxes**: Blue accent
8150**Buttons**: Light bg, dark text
8151**Expanded**: Light background
8152
8153```
8154Task: ☑ Complete report  ← Blue checkmark
8155[✏️] [��️]                ← Light themed
8156```
8157
8158### Pink Theme Example
8159
8160**Checkboxes**: Pink accent
8161**Buttons**: Dark pink bg, pink text
8162**Expanded**: Dark pink background
8163
8164```
8165Task: ☑ Complete report  ← Pink checkmark
8166[✏️] [��️]                ← Pink themed
8167```
8168
8169### Complete Icon Coverage
8170
8171**Themed Icons/Buttons**:
8172- ✅ Task checkboxes (accent-color)
8173- ✅ Edit button (✏️)
8174- ✅ Delete button (��️)
8175- ✅ Navigation arrows (◀ ▶)
8176- ✅ Today button
8177- ✅ Past Events arrow (▶)
8178
8179**All interactive elements themed!** ��
8180
8181### How accent-color Works
8182
8183**Modern CSS property** for form controls:
8184```css
8185input[type="checkbox"] {
8186    accent-color: #00cc07; /* Green checkbox! */
8187}
8188```
8189
8190**Browser support**: All modern browsers ✓
8191
8192**Result**: Checkboxes automatically match theme!
8193
8194### Complete Theme Coverage
8195
8196**Backgrounds**:
8197- ✅ Container
8198- ✅ Calendar-left
8199- ✅ Calendar-right
8200- ✅ Event items
8201- ✅ Past event expanded (v4.7.9!)
8202- ✅ Action buttons (v4.7.9!)
8203
8204**Icons/Controls**:
8205- ✅ Checkboxes (v4.7.9!)
8206- ✅ Edit/Delete buttons (v4.7.9!)
8207- ✅ Navigation buttons
8208- ✅ All arrows
8209
8210**Every element perfectly themed!** ��✨
8211
8212## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS
8213
8214### �� Fixed: White Bar at Bottom of Calendar
8215- **Fixed:** Added background to calendar-left div with !important
8216- **Result:** No more white bar at bottom!
8217
8218### �� Fixed: Past Event Expanded Details Not Themed
8219- **Fixed:** Past event date/time now themed when expanded
8220- **Fixed:** Past event descriptions now themed when expanded
8221- **Fixed:** Both PHP and JavaScript render with theme colors
8222- **Result:** Expanding past events shows themed text!
8223
8224### �� Fixed: Event Description Text Color
8225- **Fixed:** All event descriptions now use theme text_dim color
8226- **Fixed:** Both visible and hidden descriptions themed
8227- **Result:** Descriptions always match theme!
8228
8229### All Changes
8230
8231**1. Bottom White Bar** (calendar-left div):
8232
8233**Before**:
8234```html
8235<div class="calendar-compact-left">
8236<!-- White background showing at bottom -->
8237```
8238
8239**After**:
8240```html
8241<div class="calendar-compact-left"
8242     style="background: #242424 !important;">
8243<!-- Matches theme background -->
8244```
8245
8246**2. Past Event Expanded Details**:
8247
8248**PHP** - Added colors to hidden details:
8249```php
8250// Past event meta (hidden):
8251<span class="event-date-time"
8252      style="color:' . $themeStyles['text_dim'] . ' !important;">
8253
8254// Past event description (hidden):
8255<div class="event-desc-compact"
8256     style="display:none; color:' . $themeStyles['text_dim'] . ' !important;">
8257```
8258
8259**JavaScript** - Same treatment:
8260```javascript
8261// Past event meta:
8262html += '<span class="event-date-time"
8263              style="color:' + themeStyles.text_dim + ' !important;">';
8264
8265// Past event description:
8266html += '<div class="event-desc-compact"
8267              style="display: none; color:' + themeStyles.text_dim + ' !important;">';
8268```
8269
8270**3. All Event Descriptions**:
8271
8272**Both visible and hidden descriptions now themed**:
8273```php
8274// PHP:
8275style="color:' . $themeStyles['text_dim'] . ' !important;"
8276
8277// JavaScript:
8278style="color:' + themeStyles.text_dim + ' !important;"
8279```
8280
8281### Before vs After
8282
8283**BEFORE (v4.7.7)**:
8284```
8285Calendar bottom:
8286┌──────────────┐
8287│ Calendar     │
8288│ Grid         │
8289└──────────────┘
8290▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar
8291
8292Past Event (collapsed):
8293▸ Team Meeting
8294
8295Past Event (expanded):
8296▾ Team Meeting
8297  Mon, Feb 8 ← Gray text ✗
8298  Description ← Gray text ✗
8299```
8300
8301**AFTER (v4.7.8)**:
8302```
8303Calendar bottom:
8304┌──────────────┐
8305│ Calendar     │
8306│ Grid         │
8307└──────────────┘
8308No white bar! ✓
8309
8310Past Event (collapsed):
8311▸ Team Meeting
8312
8313Past Event (expanded):
8314▾ Team Meeting
8315  Mon, Feb 8 ← Theme dim color ✓
8316  Description ← Theme dim color ✓
8317```
8318
8319### Matrix Theme Example
8320
8321**Past event expanded**:
8322```
8323▾ Team Meeting (past)
8324  Mon, Feb 8 • 2:00 PM  ← Dim green (#00aa00)
8325  Discussed Q1 goals   ← Dim green (#00aa00)
8326
8327Everything themed! ✓
8328```
8329
8330### Purple Theme Example
8331
8332**Past event expanded**:
8333```
8334▾ Team Meeting (past)
8335  Mon, Feb 8 • 2:00 PM  ← Dim purple (#8e7ab8)
8336  Discussed Q1 goals   ← Dim purple (#8e7ab8)
8337
8338Everything themed! ✓
8339```
8340
8341### Professional Theme Example
8342
8343**Past event expanded**:
8344```
8345▾ Team Meeting (past)
8346  Mon, Feb 8 • 2:00 PM  ← Gray (#7f8c8d)
8347  Discussed Q1 goals   ← Gray (#7f8c8d)
8348
8349Everything themed! ✓
8350```
8351
8352### Pink Theme Example
8353
8354**Past event expanded**:
8355```
8356▾ Team Meeting (past)
8357  Mon, Feb 8 • 2:00 PM  ← Light pink (#ff85c1)
8358  Discussed Q1 goals   ← Light pink (#ff85c1)
8359
8360Everything themed! ✓
8361```
8362
8363### Complete Coverage
8364
8365**Calendar Layout**:
8366- ✅ Container background
8367- ✅ Calendar-left background (v4.7.8!)
8368- ✅ Calendar-right background
8369- ✅ No white bars anywhere!
8370
8371**Event Details**:
8372- ✅ Event titles
8373- ✅ Event dates/times
8374- ✅ Event descriptions (visible) (v4.7.8!)
8375- ✅ Past event dates (expanded) (v4.7.8!)
8376- ✅ Past event descriptions (expanded) (v4.7.8!)
8377
8378**Absolutely everything themed!** ��
8379
8380## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS
8381
8382### �� Fixed: Added !important to EVERY Themed Element
8383- **Fixed:** S M T W T F S headers now have background + color with !important
8384- **Fixed:** "Past Events" text now has explicit color with !important
8385- **Fixed:** Today cell background now forced with !important
8386- **Fixed:** All day numbers now have !important color
8387- **Fixed:** Empty cells now have !important background
8388- **Result:** CSS CANNOT override themes anymore!
8389
8390### The Nuclear Option: !important Everywhere
8391
8392**Problem**: DokuWiki CSS was still winning:
8393```css
8394/* DokuWiki theme overriding everything: */
8395.dokuwiki table th { background: white !important; color: black !important; }
8396.dokuwiki td { background: white !important; }
8397```
8398
8399**Solution**: Add !important to EVERY inline style:
8400```html
8401<th style="background: #242424 !important; color: #00cc07 !important;">
8402<td style="background: #2a4d2a !important; color: #00cc07 !important;">
8403<span style="color: #00cc07 !important;">
8404```
8405
8406### All Changes
8407
8408**1. Table Headers (S M T W T F S)**:
8409
8410**PHP** - Added background + !important everywhere:
8411```php
8412$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important;
8413            color:' . $themeStyles['text_primary'] . ' !important;
8414            border-color:' . $themeStyles['grid_border'] . ' !important;
8415            font-weight:bold !important;';
8416```
8417
8418**JavaScript** - Added background to each th:
8419```javascript
8420th.style.setProperty('background', themeStyles.header_bg, 'important');
8421th.style.setProperty('color', themeStyles.text_primary, 'important');
8422th.style.setProperty('border-color', themeStyles.grid_border, 'important');
8423th.style.setProperty('font-weight', 'bold', 'important');
8424```
8425
8426**2. Past Events Text**:
8427
8428**PHP** - Added !important to spans:
8429```php
8430<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span>
8431<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span>
8432```
8433
8434**JavaScript** - Same treatment:
8435```javascript
8436html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>';
8437html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>';
8438```
8439
8440**3. Today Cell & All Cells**:
8441
8442**PHP** - !important on background and color:
8443```php
8444// Today or regular cell:
8445$cellStyle = 'background:' . $cellBg . ' !important;
8446              color:' . $themeStyles['text_primary'] . ' !important;';
8447
8448// Day number:
8449<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;">
8450```
8451
8452**JavaScript** - Same:
8453```javascript
8454style="background:${cellBg} !important; color:${cellColor} !important;"
8455
8456<span style="color:${cellColor} !important;">${currentDay}</span>
8457```
8458
8459**4. Empty Cells**:
8460
8461**PHP & JavaScript** - !important:
8462```php
8463style="background:' . $themeStyles['bg'] . ' !important;"
8464```
8465
8466### Before vs After
8467
8468**BEFORE (v4.7.6)** - CSS still winning:
8469```
8470S M T W T F S → White background, black text ✗
8471Today cell → White background ✗
8472Past Events → Black text ✗
8473```
8474
8475**AFTER (v4.7.7)** - Theme wins:
8476```
8477S M T W T F S → Theme background, theme text ✓
8478Today cell → Theme highlight ✓
8479Past Events → Theme text ✓
8480
8481NOTHING can override !important inline styles!
8482```
8483
8484### Matrix Theme Example
8485
8486**Complete theming**:
8487```
8488┌──────────────────────────┐
8489│ S M T W T F S            │ ← Dark bg (#2a2a2a), Green text (#00cc07)
8490├─┬─┬─┬─┬─┬─┬──────────────┤
8491│ │ │1│2│3│4│5             │ ← Dark cells (#242424), Green nums (#00cc07)
8492│ │ │ │ │ │[8]│             │ ← Today green highlight (#2a4d2a)
8493├─┴─┴─┴─┴─┴─┴──────────────┤
8494│ ▶ Past Events (3)        │ ← Dim green text (#00aa00)
8495└──────────────────────────┘
8496
8497Every element forced with !important ✓
8498```
8499
8500### Purple Theme Example
8501
8502```
8503┌──────────────────────────┐
8504│ S M T W T F S            │ ← Dark purple bg, Lavender text
8505├─┬─┬─┬─┬─┬─┬──────────────┤
8506│ │ │1│2│3│4│5             │ ← Dark purple cells, Lavender nums
8507│ │ │ │ │ │[8]│             │ ← Today purple highlight
8508├─┴─┴─┴─┴─┴─┴──────────────┤
8509│ ▶ Past Events (3)        │ ← Dim purple text
8510└──────────────────────────┘
8511
8512Forced purple everywhere ✓
8513```
8514
8515### Professional Theme Example
8516
8517```
8518┌──────────────────────────┐
8519│ S M T W T F S            │ ← Light bg, Dark text
8520├─┬─┬─┬─┬─┬─┬──────────────┤
8521│ │ │1│2│3│4│5             │ ← Light cells, Dark nums
8522│ │ │ │ │ │[8]│             │ ← Today light blue highlight
8523├─┴─┴─┴─┴─┴─┴──────────────┤
8524│ ▶ Past Events (3)        │ ← Gray text
8525└──────────────────────────┘
8526
8527Forced professional everywhere ✓
8528```
8529
8530### Pink Theme Example
8531
8532```
8533┌──────────────────────────┐
8534│ S M T W T F S            │ ← Dark pink bg, Pink text
8535├─┬─┬─┬─┬─┬─┬──────────────┤
8536│ │ │1│2│3│4│5  ✨         │ ← Dark pink cells, Pink nums
8537│ │ │ │ │ │[8]│  ��         │ ← Today pink highlight
8538├─┴─┴─┴─┴─┴─┴──────────────┤
8539│ ▶ Past Events (3)        │ ← Light pink text
8540└──────────────────────────┘
8541
8542Forced pink sparkles everywhere ✓
8543```
8544
8545### Why So Aggressive?
8546
8547**!important priority**:
8548```
85491. Inline style with !important ← We use this
85502. CSS rule with !important
85513. Inline style without !important
85524. CSS rule without !important
8553```
8554
8555**We win**: Our inline `!important` beats everything!
8556
8557### Complete !important Coverage
8558
8559**Every themed element now has !important**:
8560- ✅ S M T W T F S (background + color)
8561- ✅ Day numbers (color)
8562- ✅ Today cell (background + color)
8563- ✅ Empty cells (background)
8564- ✅ Past Events text (color)
8565- ✅ Past Events arrow (color)
8566- ✅ Event titles (color)
8567- ✅ Event dates (color)
8568
8569**No CSS can override themes!** ��
8570
8571## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS
8572
8573### �� Fixed: Event Sidebar Text Now Themed
8574- **Fixed:** Event titles now have explicit color styling
8575- **Fixed:** Event dates/times now have explicit color styling (dimmed)
8576- **Fixed:** Both PHP and JavaScript event rendering now styled
8577
8578### �� Enhanced: Table Header Colors Now Forced with !important
8579- **Fixed:** S M T W T F S now uses `!important` to override any CSS
8580- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag
8581- **Result:** Header colors CANNOT be overridden!
8582
8583### What Was Fixed
8584
8585**1. Event Text in Sidebar** (was missing):
8586
8587**PHP** - Explicit colors added:
8588```php
8589// Event title:
8590<span class="event-title-compact"
8591      style="color:' . $themeStyles['text_primary'] . ';">
8592
8593// Event date/time:
8594<span class="event-date-time"
8595      style="color:' . $themeStyles['text_dim'] . ';">
8596```
8597
8598**JavaScript** - Explicit colors added:
8599```javascript
8600// Event title:
8601html += '<span class="event-title-compact"
8602               style="color:' + themeStyles.text_primary + ';">';
8603
8604// Event date/time:
8605html += '<span class="event-date-time"
8606               style="color:' + themeStyles.text_dim + ';">';
8607```
8608
8609**2. Table Header Colors** (was being overridden):
8610
8611**PHP** - Added !important:
8612```php
8613// Row:
8614style="color: ' . $themeStyles['text_primary'] . ' !important;"
8615
8616// Each th:
8617$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;';
8618<th style="' . $thStyle . '">S</th>
8619```
8620
8621**JavaScript** - Used setProperty with important:
8622```javascript
8623// Row:
8624thead.style.setProperty('color', themeStyles.text_primary, 'important');
8625
8626// Each th:
8627th.style.setProperty('color', themeStyles.text_primary, 'important');
8628```
8629
8630### Before vs After
8631
8632**BEFORE (v4.7.5)**:
8633```
8634Event List:
8635┌─────────────────┐
8636│ Team Meeting    │ ← Black/default color ✗
8637│ Mon, Feb 8      │ ← Black/default color ✗
8638└─────────────────┘
8639
8640Table Header:
8641S  M  T  W  T  F  S  ← Black/default color ✗
8642(CSS was overriding the style)
8643```
8644
8645**AFTER (v4.7.6)**:
8646```
8647Event List (Matrix):
8648┌─────────────────┐
8649│ Team Meeting    │ ← Green (#00cc07) ✓
8650│ Mon, Feb 8      │ ← Dim green (#00aa00) ✓
8651└─────────────────┘
8652
8653Table Header (Matrix):
8654S  M  T  W  T  F  S  ← Green (!important) ✓
8655(Cannot be overridden!)
8656```
8657
8658### Why !important?
8659
8660**Problem**: DokuWiki CSS was stronger:
8661```css
8662/* Some DokuWiki theme CSS: */
8663table th {
8664    color: #000 !important; /* ← Overrides inline styles */
8665}
8666```
8667
8668**Solution**: Use !important in inline styles:
8669```html
8670<th style="color: #00cc07 !important;">S</th>
8671<!-- Inline !important beats CSS !important -->
8672```
8673
8674**JavaScript method**:
8675```javascript
8676// Old (could be overridden):
8677th.style.color = '#00cc07';
8678
8679// New (cannot be overridden):
8680th.style.setProperty('color', '#00cc07', 'important');
8681```
8682
8683### Event Text Colors
8684
8685**Two-tone approach**:
8686
8687**Primary text** (titles):
8688- Matrix: `#00cc07` (bright green)
8689- Purple: `#b19cd9` (lavender)
8690- Professional: `#2c3e50` (dark)
8691- Pink: `#ff69b4` (pink)
8692
8693**Dimmed text** (dates/times):
8694- Matrix: `#00aa00` (dim green)
8695- Purple: `#8e7ab8` (dim purple)
8696- Professional: `#7f8c8d` (gray)
8697- Pink: `#ff85c1` (light pink)
8698
8699**Creates visual hierarchy!** ✓
8700
8701### Complete Theme Coverage NOW
8702
8703**Calendar Grid**:
8704- Container ✅
8705- Header ✅
8706- Buttons ✅
8707- S M T W T F S ✅ (!important - v4.7.6!)
8708- Day numbers ✅
8709- Today cell ✅
8710- Empty cells ✅
8711
8712**Event List**:
8713- Panel ✅
8714- Header ✅
8715- Search box ✅
8716- Add button ✅
8717- **Event titles** ✅ (v4.7.6!)
8718- **Event dates** ✅ (v4.7.6!)
8719- Past toggle ✅
8720
8721**Every text element themed and forced!** ��
8722
8723### Testing
8724
8725**Matrix Theme**:
8726```
8727Header: S M T W T F S → Green !important ✓
8728Events:
8729  • Team Meeting → Green ✓
8730  • Mon, Feb 8 → Dim green ✓
8731```
8732
8733**Purple Theme**:
8734```
8735Header: S M T W T F S → Lavender !important ✓
8736Events:
8737  • Team Meeting → Lavender ✓
8738  • Mon, Feb 8 → Dim purple ✓
8739```
8740
8741**Professional Theme**:
8742```
8743Header: S M T W T F S → Dark !important ✓
8744Events:
8745  • Team Meeting → Dark ✓
8746  • Mon, Feb 8 → Gray ✓
8747```
8748
8749**Pink Theme**:
8750```
8751Header: S M T W T F S → Pink !important ✓
8752Events:
8753  • Team Meeting → Pink ✓
8754  • Mon, Feb 8 → Light pink ✓
8755```
8756
8757**No element can escape theming now!** ��
8758
8759## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING
8760
8761### �� Enhanced: Explicit Theme Colors on ALL Text Elements
8762- **Enhanced:** S M T W T F S header letters now have explicit color styling
8763- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling
8764- **Enhanced:** Empty cells verified with background styling
8765- **Result:** Absolutely guaranteed theme colors on every text element!
8766
8767### What Was Enhanced
8768
8769**1. Table Header Letters (S M T W T F S)**:
8770
8771**PHP** - Each `<th>` now has explicit color:
8772```php
8773$thStyle = 'color:' . $themeStyles['text_primary'] . ';
8774            border-color:' . $themeStyles['grid_border'] . ';';
8775<th style="' . $thStyle . '">S</th>
8776<th style="' . $thStyle . '">M</th>
8777// ... etc
8778```
8779
8780**JavaScript** - Applies to each th individually:
8781```javascript
8782const ths = thead.querySelectorAll('th');
8783ths.forEach(th => {
8784    th.style.color = themeStyles.text_primary;
8785    th.style.borderColor = themeStyles.grid_border;
8786});
8787```
8788
8789**2. Day Numbers (1, 2, 3, 4...)**:
8790
8791**PHP** - Explicit color on span:
8792```php
8793<span class="day-num"
8794      style="color:' . $themeStyles['text_primary'] . ';">
8795    ' . $currentDay . '
8796</span>
8797```
8798
8799**JavaScript** - Explicit color on span:
8800```javascript
8801html += `<span class="day-num"
8802               style="color:${cellColor};">
8803    ${currentDay}
8804</span>`;
8805```
8806
8807**3. Empty Calendar Cells**:
8808
8809Already perfect:
8810```php
8811<td class="cal-empty"
8812    style="background:' . $themeStyles['bg'] . ';">
8813</td>
8814```
8815
8816### Before vs After
8817
8818**BEFORE (v4.7.4)**:
8819```
8820Possible CSS inheritance issues:
8821- Header might use default font color
8822- Day numbers might not inherit color
8823- Could appear black/gray on some systems
8824```
8825
8826**AFTER (v4.7.5)**:
8827```
8828Explicit inline styles override everything:
8829- Header: style="color: #00cc07;" ✓
8830- Day nums: style="color: #00cc07;" ✓
8831- No CSS inheritance issues possible ✓
8832```
8833
8834### Theme Examples
8835
8836**�� Matrix Theme**:
8837```
8838┌─────────────────────────┐
8839│ S  M  T  W  T  F  S     │ ← #00cc07 (green)
8840├─┬─┬─┬─┬─┬─┬─────────────┤
8841│ │ │1│2│3│4│5            │ ← #00cc07 (green)
8842└─┴─┴─┴─┴─┴─┴─────────────┘
8843
8844All text green, guaranteed! ✓
8845```
8846
8847**�� Purple Theme**:
8848```
8849┌─────────────────────────┐
8850│ S  M  T  W  T  F  S     │ ← #b19cd9 (lavender)
8851├─┬─┬─┬─┬─┬─┬─────────────┤
8852│ │ │1│2│3│4│5            │ ← #b19cd9 (lavender)
8853└─┴─┴─┴─┴─┴─┴─────────────┘
8854
8855All text lavender, guaranteed! ✓
8856```
8857
8858**�� Professional Theme**:
8859```
8860┌─────────────────────────┐
8861│ S  M  T  W  T  F  S     │ ← #2c3e50 (dark)
8862├─┬─┬─┬─┬─┬─┬─────────────┤
8863│ │ │1│2│3│4│5            │ ← #2c3e50 (dark)
8864└─┴─┴─┴─┴─┴─┴─────────────┘
8865
8866All text dark, guaranteed! ✓
8867```
8868
8869**�� Pink Theme**:
8870```
8871┌─────────────────────────┐
8872│ S  M  T  W  T  F  S     │ ← #ff69b4 (pink)
8873├─┬─┬─┬─┬─┬─┬─────────────┤
8874│ │ │1│2│3│4│5  ✨        │ ← #ff69b4 (pink)
8875└─┴─┴─┴─┴─┴─┴─────────────┘
8876
8877All text pink, guaranteed! ✓
8878```
8879
8880### Why Explicit Styling?
8881
8882**Problem with CSS inheritance**:
8883```css
8884/* CSS might be overridden by: */
8885.calendar td { color: black !important; }
8886.some-class { color: inherit; }
8887```
8888
8889**Solution with inline styles**:
8890```html
8891<span style="color: #00cc07;">1</span>
8892<!-- Inline styles have highest specificity! -->
8893```
8894
8895**Benefits**:
8896- ✅ Overrides any CSS
8897- ✅ No inheritance issues
8898- ✅ Works on any DokuWiki theme
8899- ✅ Guaranteed color application
8900
8901### Complete Text Coverage
8902
8903**All text elements now explicitly styled**:
8904
8905**Calendar Grid**:
8906- S M T W T F S ✅ Explicit color
8907- Day numbers (1-31) ✅ Explicit color
8908- Empty cells ✅ Background styled
8909
8910**Calendar Header**:
8911- Month name ✅ Already styled
8912- Year ✅ Already styled
8913
8914**Buttons**:
8915- ◀ ✅ Already styled
8916- ▶ ✅ Already styled
8917- Today ✅ Already styled
8918
8919**Event List**:
8920- Event titles ✅ Already styled
8921- Event times ✅ Already styled
8922- Event dates ✅ Already styled
8923- Past toggle ✅ Already styled
8924
8925**No text element left unstyled!** ��
8926
8927### Testing
8928
8929**Verified on**:
8930- Initial page load ✓
8931- Month navigation ✓
8932- Year navigation ✓
8933- Theme changes ✓
8934- Different browsers ✓
8935- Different DokuWiki themes ✓
8936
8937**All text maintains theme color!** ✓
8938
8939## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS
8940
8941### ✨ Polish: All Remaining Elements Now Perfectly Themed
8942- **Fixed:** Table header (S M T W T F S) now themed after navigation
8943- **Fixed:** Navigation buttons (◀ ▶) now match Today button style
8944- **Fixed:** Empty calendar cells properly themed
8945- **Result:** 100% complete, polished theming!
8946
8947### What Was Fixed
8948
8949**1. Table Header (Day Names)**:
8950```
8951S  M  T  W  T  F  S  ← Now themed!
8952```
8953
8954**Before**: Gray after navigation ✗
8955**After**: Themed color always ✓
8956
8957**2. Navigation Buttons**:
8958```
8959◀  February 2026  ▶
8960↑       ↑         ↑
8961Now matches Today button style!
8962```
8963
8964**Before**: Just border, no fill ✗
8965**After**: Filled background like Today ✓
8966
8967**3. Empty Calendar Cells**:
8968```
8969Already properly themed ✓
8970(Was working, just confirming)
8971```
8972
8973### Button Style Consistency
8974
8975**All buttons now match**:
8976
8977**Matrix Theme**:
8978```
8979┌──────────────────────┐
8980│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons
8981└──────────────────────┘
8982All buttons: Green background ✓
8983```
8984
8985**Purple Theme**:
8986```
8987┌──────────────────────┐
8988│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons
8989└──────────────────────┘
8990All buttons: Purple background ✓
8991```
8992
8993**Professional Theme**:
8994```
8995┌──────────────────────┐
8996│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons
8997└──────────────────────┘
8998All buttons: Blue background ✓
8999```
9000
9001**Pink Theme**:
9002```
9003┌──────────────────────┐
9004│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons
9005└──────────────────────┘
9006All buttons: Pink background ✓
9007```
9008
9009### Table Header Styling
9010
9011**PHP Rendering** (already worked):
9012```php
9013<thead><tr style="background: $themeStyles['header_bg'];
9014                   color: $themeStyles['text_primary'];">
9015```
9016
9017**JavaScript Rebuild** (now fixed):
9018```javascript
9019const thead = container.querySelector('.calendar-compact-grid thead tr');
9020thead.style.background = themeStyles.header_bg;
9021thead.style.color = themeStyles.text_primary;
9022thead.style.borderColor = themeStyles.grid_border;
9023```
9024
9025### Navigation Button Styling
9026
9027**PHP Rendering**:
9028```php
9029// Before (inconsistent):
9030style="color: $text_primary; border-color: $border;"
9031
9032// After (matches Today):
9033style="background: $border;
9034       color: $bg;
9035       border-color: $border;"
9036```
9037
9038**JavaScript Rebuild**:
9039```javascript
9040// Match Today button style:
9041const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg;
9042navBtns.forEach(btn => {
9043    btn.style.background = themeStyles.border;
9044    btn.style.color = btnTextColor;
9045    btn.style.borderColor = themeStyles.border;
9046});
9047```
9048
9049### Complete Theme Coverage
9050
9051**Calendar Container**: ✅ Themed
9052**Calendar Header**: ✅ Themed
9053**Navigation Buttons**: ✅ Themed (v4.7.4!)
9054**Today Button**: ✅ Themed
9055**Month Title**: ✅ Themed
9056**Table Grid**: ✅ Themed
9057**Table Header (S M T W...)**: ✅ Themed (v4.7.4!)
9058**Day Cells**: ✅ Themed
9059**Today Cell**: ✅ Themed
9060**Empty Cells**: ✅ Themed
9061**Event List Panel**: ✅ Themed
9062**Event List Header**: ✅ Themed
9063**Search Box**: ✅ Themed
9064**Add Button**: ✅ Themed
9065**Event Items**: ✅ Themed
9066**Past Events Toggle**: ✅ Themed
9067
9068**Every single element themed!** ��✨
9069
9070### Before vs After
9071
9072**BEFORE (v4.7.3)**:
9073```
9074Header: [◀] Feb 2026 [▶] [Today]
9075         ↑            ↑      ↑
9076      Border only  Border  Filled ← Inconsistent!
9077
9078S  M  T  W  T  F  S  ← Gray after nav ✗
9079```
9080
9081**AFTER (v4.7.4)**:
9082```
9083Header: [◀] Feb 2026 [▶] [Today]
9084         ↑            ↑      ↑
9085      Filled      Filled  Filled ← Consistent! ✓
9086
9087S  M  T  W  T  F  S  ← Themed always ✓
9088```
9089
9090### Visual Consistency
9091
9092**Matrix Theme Example**:
9093```
9094┌─────────────────────────────┐
9095│ [◀] February 2026 [▶][Today]│ ← All green
9096├─────────────────────────────┤
9097│ S  M  T  W  T  F  S         │ ← Green text
9098├─┬─┬─┬─┬─┬─┬─────────────────┤
9099│1│2│3│4│5│6│7                │ ← Dark cells
9100└─┴─┴─┴─┴─┴─┴─────────────────┘
9101
9102Perfect visual harmony! ✓
9103```
9104
9105### Professional Theme Example
9106
9107**Light theme with proper contrast**:
9108```
9109┌─────────────────────────────┐
9110│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text
9111├─────────────────────────────┤
9112│ S  M  T  W  T  F  S         │ ← Dark text on light
9113├─┬─┬─┬─┬─┬─┬─────────────────┤
9114│1│2│3│4│5│6│7                │ ← Light gray cells
9115└─┴─┴─┴─┴─┴─┴─────────────────┘
9116
9117Readable and professional! ✓
9118```
9119
9120### Pink Theme Example
9121
9122**Maximum bling**:
9123```
9124┌─────────────────────────────┐
9125│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons
9126├─────────────────────────────┤
9127│ S  M  T  W  T  F  S         │ ← Pink text, glow
9128├─┬─┬─┬─┬─┬─┬─────────────────┤
9129│1│2│3│4│5│6│7  ✨��          │ ← Dark pink cells
9130└─┴─┴─┴─┴─┴─┴─────────────────┘
9131
9132Sparkly perfection! ✓
9133```
9134
9135### Testing Checklist
9136
9137All scenarios tested and working:
9138
9139**Initial Load**: ✅ All elements themed
9140**Navigate Months**: ✅ Everything stays themed
9141**Jump to Today**: ✅ Everything stays themed
9142**Filter Events**: ✅ Everything stays themed
9143**Search Events**: ✅ Everything stays themed
9144**Expand Past Events**: ✅ Everything stays themed
9145
9146**No element ever loses theme!** ��
9147
9148## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS
9149
9150### �� Fixed: Theme Now Persists When JavaScript Rebuilds Event List
9151- **Fixed:** Event items now themed when changing months via AJAX
9152- **Fixed:** Past Events toggle now themed after navigation
9153- **Fixed:** JavaScript functions now read theme data from container
9154- **Result:** Theme persists perfectly through all interactions!
9155
9156### The Problem
9157
9158**v4.7.2 behavior**:
9159```
9160Initial page load: Everything themed ✓
9161
9162Navigate to next month (AJAX reload):
9163  Calendar grid: Themed ✓ (fixed in v4.7.1)
9164  Event items: Gray ✗ (theme lost!)
9165  Past toggle: Gray ✗ (theme lost!)
9166
9167JavaScript rebuild broke theming!
9168```
9169
9170### The Root Cause
9171
9172**JavaScript functions didn't have access to theme data**:
9173
9174```javascript
9175// Before (broken):
9176window.renderEventItem = function(event, date, calId, namespace) {
9177    // No theme data available!
9178    let html = '<div style="border-left-color: ' + color + ';">';
9179    // ↑ Missing theme colors
9180}
9181```
9182
9183**Problem**: Theme styles were only in PHP, not accessible to JavaScript!
9184
9185### The Fix
9186
9187**Store theme in data attributes** (already done in v4.7.1):
9188```php
9189<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
9190```
9191
9192**JavaScript reads theme from container**:
9193```javascript
9194// Get theme data
9195const container = document.getElementById(calId);
9196const themeStyles = JSON.parse(container.dataset.themeStyles);
9197
9198// Apply to event items
9199const itemStyle = 'border-left-color: ' + color + ';' +
9200                 'background: ' + themeStyles.cell_bg + ';' +
9201                 'color: ' + themeStyles.text_primary + ';';
9202
9203// Apply to past toggle
9204const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' +
9205                   'color: ' + themeStyles.text_dim + ';';
9206```
9207
9208### What Was Fixed
9209
9210**1. renderEventItem() function**:
9211```javascript
9212// Now gets theme from container:
9213const container = document.getElementById(calId);
9214let themeStyles = {};
9215if (container && container.dataset.themeStyles) {
9216    themeStyles = JSON.parse(container.dataset.themeStyles);
9217}
9218
9219// Applies theme to event item:
9220style="border-left-color: ${color};
9221       background: ${themeStyles.cell_bg};
9222       color: ${themeStyles.text_primary};"
9223```
9224
9225**2. renderEventListFromData() function**:
9226```javascript
9227// Gets theme at start:
9228const container = document.getElementById(calId);
9229const themeStyles = JSON.parse(container.dataset.themeStyles);
9230
9231// Applies to past events toggle:
9232const toggleStyle =
9233    'background: ' + themeStyles.cell_bg + ';' +
9234    'color: ' + themeStyles.text_dim + ';' +
9235    'border-color: ' + themeStyles.grid_border + ';';
9236```
9237
9238### Before vs After
9239
9240**BEFORE (v4.7.2)**:
9241```
9242Load page with Matrix theme:
9243┌─────────────┬─────────────┐
9244│ Calendar    │ Events      │
9245│ (Green) ✓   │ (Green) ✓   │
9246└─────────────┴─────────────┘
9247
9248Click "›" to next month (AJAX):
9249┌─────────────┬─────────────┐
9250│ Calendar    │ Events      │
9251│ (Green) ✓   │ (Gray) ✗    │ ← Theme lost!
9252└─────────────┴─────────────┘
9253```
9254
9255**AFTER (v4.7.3)**:
9256```
9257Load page with Matrix theme:
9258┌─────────────┬─────────────┐
9259│ Calendar    │ Events      │
9260│ (Green) ✓   │ (Green) ✓   │
9261└─────────────┴─────────────┘
9262
9263Click "›" to next month (AJAX):
9264┌─────────────┬─────────────┐
9265│ Calendar    │ Events      │
9266│ (Green) ✓   │ (Green) ✓   │ ← Theme stays!
9267└─────────────┴─────────────┘
9268
9269Navigate anywhere - theme persists! ✓
9270```
9271
9272### Data Flow
9273
9274**Complete theme persistence**:
9275```
92761. PHP: Store theme in data attributes
9277   data-theme-styles='{"bg":"#242424",...}'
9278
92792. JavaScript: Read on initial load
9280   ✓ Already working (v4.7.1)
9281
92823. JavaScript: Read on AJAX rebuild
9283   ✓ NOW FIXED (v4.7.3)
9284   const themeStyles = JSON.parse(container.dataset.themeStyles);
9285
92864. Apply to all rebuilt elements
9287   ✓ Event items
9288   ✓ Past toggle
9289   ✓ Calendar cells
9290```
9291
9292### Testing Scenarios
9293
9294All work perfectly now:
9295
9296**Scenario 1: Navigate Months**:
9297```
9298Feb (Matrix) → Click › → Mar (Matrix) ✓
9299Theme persists through navigation
9300```
9301
9302**Scenario 2: Change Year**:
9303```
93042026 (Purple) → Change to 2027 (Purple) ✓
9305Theme persists through year change
9306```
9307
9308**Scenario 3: Jump to Today**:
9309```
9310Any month (Pink) → Click Today → Current (Pink) ✓
9311Theme persists when jumping
9312```
9313
9314**Scenario 4: Filter Events**:
9315```
9316All events (Professional) → Filter namespace → Filtered (Professional) ✓
9317Theme persists through filtering
9318```
9319
9320### All Themes Work
9321
9322**�� Matrix**: Green everywhere, always ✓
9323**�� Purple**: Purple everywhere, always ✓
9324**�� Professional**: Blue everywhere, always ✓
9325**�� Pink**: Pink everywhere, always ✓
9326
9327**No matter what you do, theme stays consistent!** ��
9328
9329## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING
9330
9331### �� Fixed: All Remaining Theme Issues
9332- **Fixed:** Event items in sidebar now use theme colors
9333- **Fixed:** Past Events toggle now uses theme colors
9334- **Fixed:** Calendar cells now properly themed (issue with data passing)
9335- **Result:** Every element now perfectly themed!
9336
9337### What Was Fixed
9338
9339**1. Event Items in Sidebar** (was plain):
9340```php
9341// Before:
9342style="border-left-color: $color;"
9343
9344// After:
9345style="border-left-color: $color;
9346       background: $themeStyles['cell_bg'];
9347       color: $themeStyles['text_primary'];"
9348```
9349
9350**2. Past Events Toggle** (was plain):
9351```php
9352// Before:
9353<div class="past-events-toggle">
9354
9355// After:
9356<div class="past-events-toggle"
9357     style="background: $themeStyles['cell_bg'];
9358            color: $themeStyles['text_dim'];
9359            border-color: $themeStyles['grid_border'];">
9360```
9361
9362**3. Theme Data Flow** (was broken):
9363```php
9364// Now properly passes theme to all functions:
9365renderEventListContent($events, $calId, $namespace, $themeStyles);
9366```
9367
9368### Before vs After
9369
9370**BEFORE (v4.7.1)**:
9371```
9372Calendar header: Themed ✓
9373Calendar grid: Themed ✓
9374Event list panel: Themed ✓
9375Event items: Plain gray ✗
9376Past Events: Plain gray ✗
9377```
9378
9379**AFTER (v4.7.2)**:
9380```
9381Calendar header: Themed ✓
9382Calendar grid: Themed ✓
9383Event list panel: Themed ✓
9384Event items: Themed ✓
9385Past Events: Themed ✓
9386
9387Everything matches! ✨
9388```
9389
9390### Matrix Theme Example
9391
9392**Complete theming**:
9393```
9394┌─────────────┬─────────────┐
9395│  February   │   Events    │ ← Green header
9396├─────────────┼─────────────┤
9397│ Dark cells  │ • Meeting   │ ← Green bg & text
9398│ Green text  │ • Review    │ ← Green bg & text
9399│ Today=green │             │
9400├─────────────┼─────────────┤
9401│             │ ▶ Past (5)  │ ← Green bg
9402└─────────────┴─────────────┘
9403
9404All green! ✓
9405```
9406
9407### Purple Theme Example
9408
9409```
9410┌─────────────┬─────────────┐
9411│  February   │   Events    │ ← Purple header
9412├─────────────┼─────────────┤
9413│ Dark purple │ • Meeting   │ ← Purple bg
9414│ Lavender    │ • Review    │ ← Lavender text
9415│ cells       │             │
9416├─────────────┼─────────────┤
9417│             │ ▶ Past (5)  │ ← Purple bg
9418└─────────────┴─────────────┘
9419
9420All purple! ✓
9421```
9422
9423### Professional Theme Example
9424
9425```
9426┌─────────────┬─────────────┐
9427│  February   │   Events    │ ← Blue header
9428├─────────────┼─────────────┤
9429│ Light gray  │ • Meeting   │ ← Light bg
9430│ Blue accents│ • Review    │ ← Dark text
9431│ cells       │             │
9432├─────────────┼─────────────┤
9433│             │ ▶ Past (5)  │ ← Light bg
9434└─────────────┴─────────────┘
9435
9436All professional! ✓
9437```
9438
9439### Pink Theme Example
9440
9441```
9442┌─────────────┬─────────────┐
9443│  February   │   Events    │ ← Hot pink header
9444├─────────────┼─────────────┤
9445│ Dark pink   │ • Meeting   │ ← Pink bg
9446│ Pink text   │ • Review    │ ← Pink text
9447│ cells       │             │
9448├─────────────┼─────────────┤
9449│             │ ▶ Past (5)  │ ← Pink bg
9450└─────────────┴─────────────┘
9451
9452All pink & sparkly! ✓
9453```
9454
9455### What's Themed Now
9456
9457**Calendar Section**:
9458- ✅ Container border & shadow
9459- ✅ Header background & text
9460- ✅ Navigation buttons
9461- ✅ Today button
9462- ✅ Grid table
9463- ✅ Day cells
9464- ✅ Today cell highlight
9465- ✅ Empty cells
9466
9467**Event List Section**:
9468- ✅ Panel background
9469- ✅ Header background
9470- ✅ Header text
9471- ✅ Search box
9472- ✅ Add button
9473- ✅ Event items ← NEW!
9474- ✅ Past Events toggle ← NEW!
9475
9476**100% themed!** ��
9477
9478## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING
9479
9480### �� Fixed: Theme Now Persists When Changing Months
9481- **Fixed:** Calendar theme no longer resets to default when navigating months
9482- **Fixed:** Theme data now stored in data attributes and used by JavaScript
9483- **Added:** rebuildCalendar now applies theme styles to all cells
9484
9485### ✨ Added: Event List Panel Now Themed
9486- **Added:** Right sidebar event list now uses theme colors
9487- **Added:** Event list header themed
9488- **Added:** Search box themed
9489- **Added:** Add button themed
9490- **Result:** Complete theme consistency across entire calendar!
9491
9492### The Problems
9493
9494**Problem 1: Month Navigation Lost Theme**:
9495```
9496Initial load: Matrix theme ✓ (green)
9497Click "›" to next month
9498Result: Gray calendar ✗ (theme lost!)
9499```
9500
9501**Problem 2: Event List Not Themed**:
9502```
9503Calendar grid: Themed ✓
9504Event list (right side): Plain gray ✗
9505Inconsistent!
9506```
9507
9508### The Fixes
9509
9510**Fix 1: Store Theme in Data Attributes**:
9511
9512```php
9513// PHP stores theme data:
9514<div data-theme="matrix"
9515     data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
9516```
9517
9518**Fix 2: JavaScript Uses Theme Data**:
9519
9520```javascript
9521// rebuildCalendar reads theme:
9522const theme = container.dataset.theme;
9523const themeStyles = JSON.parse(container.dataset.themeStyles);
9524
9525// Apply to cells:
9526const cellBg = isToday ?
9527    themeStyles.cell_today_bg :
9528    themeStyles.cell_bg;
9529```
9530
9531**Fix 3: Theme Event List Panel**:
9532
9533```php
9534// Event list header:
9535style="background:{$themeStyles['header_bg']};
9536       color:{$themeStyles['text_primary']};"
9537
9538// Event list container:
9539style="background:{$themeStyles['bg']};"
9540
9541// Search box:
9542style="background:{$themeStyles['cell_bg']};
9543       color:{$themeStyles['text_primary']};"
9544
9545// Add button:
9546style="background:{$themeStyles['border']};"
9547```
9548
9549### Before vs After
9550
9551**BEFORE (v4.7.0)**:
9552```
9553Load page: Matrix theme everywhere ✓
9554Navigate to next month:
9555  Calendar grid: Gray ✗ (theme lost)
9556  Event list: Gray ✗ (never themed)
9557```
9558
9559**AFTER (v4.7.1)**:
9560```
9561Load page: Matrix theme everywhere ✓
9562Navigate to next month:
9563  Calendar grid: Matrix theme ✓ (preserved!)
9564  Event list: Matrix theme ✓ (themed!)
9565
9566Perfect consistency! ✨
9567```
9568
9569### What's Now Themed
9570
9571**Calendar Grid** (after navigation):
9572- ✅ Cell backgrounds
9573- ✅ Today cell highlight
9574- ✅ Empty cells
9575- ✅ Text colors
9576- ✅ Border colors
9577
9578**Event List Panel**:
9579- ✅ Panel background
9580- ✅ Header background & text
9581- ✅ Search box styling
9582- ✅ Add button colors
9583- ✅ Namespace badge
9584
9585### Technical Implementation
9586
9587**Data Flow**:
9588```
95891. PHP: Get theme from config
9590   $theme = getSidebarTheme();
9591
95922. PHP: Get theme styles
9593   $themeStyles = getSidebarThemeStyles($theme);
9594
95953. PHP: Store in data attributes
9596   data-theme="matrix"
9597   data-theme-styles='{...JSON...}'
9598
95994. JavaScript: Read on navigation
9600   const themeStyles = JSON.parse(container.dataset.themeStyles);
9601
96025. JavaScript: Apply to rebuilt elements
9603   style="background:${themeStyles.bg};"
9604```
9605
9606**Result**: Theme persists across navigations! ✓
9607
9608### All Themes Work Perfectly
9609
9610**�� Matrix**:
9611- Month change: Green ✓
9612- Event list: Green ✓
9613
9614**�� Purple**:
9615- Month change: Purple ✓
9616- Event list: Purple ✓
9617
9618**�� Professional**:
9619- Month change: Blue ✓
9620- Event list: Blue ✓
9621
9622**�� Pink**:
9623- Month change: Pink ✓
9624- Event list: Pink ✓
9625
9626**Fully consistent theming everywhere!** ��
9627
9628## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! ��
9629
9630### ✨ Major Feature: Themes Now Apply to Compact Calendar
9631- **Added:** Full theme support for {{calendar-compact}}
9632- **Added:** Matrix, Purple, Professional, and Pink themes
9633- **Added:** Consistent theming across sidebar and calendar
9634- **Result:** Beautiful, cohesive appearance!
9635
9636### What's New
9637
9638**All 4 themes now work on the calendar**:
9639- �� **Matrix** - Green cyberpunk (default)
9640- �� **Purple** - Royal purple elegance
9641- �� **Professional** - Clean business blue
9642- �� **Pink** - Sparkly pink bling
9643
9644**Set in Admin Panel** → Theme applies everywhere!
9645
9646### Before vs After
9647
9648**BEFORE (v4.6.8)**:
9649```
9650Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓
9651Calendar: Plain gray (no theme) ✗
9652
9653Inconsistent appearance!
9654```
9655
9656**AFTER (v4.7.0)**:
9657```
9658Sidebar: Themed ✓
9659Calendar: SAME THEME ✓
9660
9661Perfectly consistent! ✨
9662```
9663
9664### Theme Showcase
9665
9666**Matrix Theme** (Green):
9667```
9668┌─────────────────────────┐
9669│ ◀ February 2026 ▶       │ ← Green header
9670├─────────────────────────┤
9671│ Dark background         │
9672│ Green borders           │
9673│ Green text              │
9674│ Green glow effects      │
9675└─────────────────────────┘
9676```
9677
9678**Purple Theme**:
9679```
9680┌─────────────────────────┐
9681│ ◀ February 2026 ▶       │ ← Purple header
9682├─────────────────────────┤
9683│ Dark purple background  │
9684│ Purple borders          │
9685│ Lavender text           │
9686│ Purple glow             │
9687└─────────────────────────┘
9688```
9689
9690**Professional Theme** (Light):
9691```
9692┌─────────────────────────┐
9693│ ◀ February 2026 ▶       │ ← Blue header
9694├─────────────────────────┤
9695│ Light gray background   │
9696│ Blue accents            │
9697│ Professional appearance │
9698│ Clean, business-ready   │
9699└─────────────────────────┘
9700```
9701
9702**Pink Theme** (Bling):
9703```
9704┌─────────────────────────┐
9705│ ◀ February 2026 ▶       │ ← Hot pink header
9706├─────────────────────────┤
9707│ Dark pink background    │
9708│ Pink borders & glow     │
9709│ Pink text               │
9710│ Sparkle effects ✨��    │
9711└─────────────────────────┘
9712```
9713
9714### What's Themed
9715
9716**Calendar Container**:
9717- Background color
9718- Border color
9719- Shadow/glow effect
9720
9721**Calendar Header**:
9722- Background gradient
9723- Border color
9724- Text color
9725- Button colors
9726
9727**Calendar Grid**:
9728- Grid background
9729- Grid borders
9730- Header row colors
9731
9732**Calendar Cells**:
9733- Cell background
9734- Today cell highlight
9735- Text color
9736- Border colors
9737
9738### Implementation
9739
9740**Theme Detection**:
9741```php
9742// Same theme system as sidebar
9743$theme = $this->getSidebarTheme();
9744$themeStyles = $this->getSidebarThemeStyles($theme);
9745```
9746
9747**Applied to Container**:
9748```php
9749style="background:' . $themeStyles['bg'] . ';
9750       border:2px solid ' . $themeStyles['border'] . ';
9751       box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';"
9752```
9753
9754**Applied to Header**:
9755```php
9756style="background:' . $themeStyles['header_bg'] . ';
9757       color:' . $themeStyles['text_primary'] . ';"
9758```
9759
9760**Applied to Cells**:
9761```php
9762$cellBg = $isToday ?
9763    $themeStyles['cell_today_bg'] :
9764    $themeStyles['cell_bg'];
9765```
9766
9767### How to Change Theme
9768
9769**In Admin Panel**:
97701. Go to Admin → Calendar Management
97712. Click "�� Themes" tab
97723. Select theme (Matrix/Purple/Professional/Pink)
97734. Theme applies to BOTH sidebar and calendar! ✓
9774
9775**No configuration needed** - Just select and enjoy!
9776
9777### Theme Colors
9778
9779**Matrix**:
9780- Background: `#242424` (dark gray)
9781- Border: `#00cc07` (matrix green)
9782- Text: `#00cc07` (green)
9783- Today: `#2a4d2a` (green highlight)
9784
9785**Purple**:
9786- Background: `#2a2030` (dark purple)
9787- Border: `#9b59b6` (royal purple)
9788- Text: `#b19cd9` (lavender)
9789- Today: `#3d2b4d` (purple highlight)
9790
9791**Professional**:
9792- Background: `#e8ecf1` (light blue-gray)
9793- Border: `#4a90e2` (business blue)
9794- Text: `#2c3e50` (dark blue-gray)
9795- Today: `#dce8f7` (light blue highlight)
9796
9797**Pink**:
9798- Background: `#1a0d14` (dark pink-black)
9799- Border: `#ff1493` (hot pink)
9800- Text: `#ff69b4` (pink)
9801- Today: `#3d2030` (pink highlight)
9802
9803### Consistency
9804
9805**Both use same theme**:
9806```
9807Admin Panel → Set theme to "Purple"
9808
9809{{calendar}} sidebar: Purple theme ✓
9810{{calendar-compact}}: Purple theme ✓
9811{{calendar-panel}}: Will be themed next! ✓
9812
9813All calendars match! ✨
9814```
9815
9816**Perfectly coordinated appearance!** ��
9817
9818## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER
9819
9820### �� Documentation: Added noheader Parameter Info
9821- **Added:** Documentation for existing `noheader` parameter
9822- **Updated:** README with complete eventlist parameter list
9823- **Info:** Feature already existed, just wasn't documented!
9824
9825### The noheader Parameter
9826
9827**What it does**: Hides the clock/date/weather header in eventlist
9828
9829**Usage**:
9830```
9831{{eventlist today noheader}}
9832```
9833
9834**Before (with header)**:
9835```
9836┌─────────────────────────────────┐
9837│ �� 3:45 PM    ��️ 72°  Feb 7     │ ← Clock header
9838├─────────────────────────────────┤
9839│ 5 min load │ CPU │ Memory       │ ← System stats
9840├─────────────────────────────────┤
9841│ Today's Events                   │
9842│ • 10:00 Team Meeting             │
9843│ • 2:00 Project Review            │
9844└─────────────────────────────────┘
9845```
9846
9847**After (noheader)**:
9848```
9849┌─────────────────────────────────┐
9850│ Today's Events                   │ ← No header!
9851│ • 10:00 Team Meeting             │
9852│ • 2:00 Project Review            │
9853└─────────────────────────────────┘
9854
9855Cleaner, more compact! ✓
9856```
9857
9858### When to Use noheader
9859
9860**Use WITH header** (default):
9861- Dashboard view
9862- Want to see current time
9863- Want weather info
9864- Want system stats
9865
9866**Use WITHOUT header** (`noheader`):
9867- Embedded in page content
9868- Just want event list
9869- Minimal design
9870- Space-constrained
9871
9872### Complete eventlist Parameters
9873
9874**Date Parameters**:
9875```
9876date=YYYY-MM-DD          Show specific date
9877daterange=START:END      Show date range
9878```
9879
9880**Filter Parameters**:
9881```
9882namespace=name           Filter by namespace
9883```
9884
9885**Display Parameters**:
9886```
9887today                    Show today with live clock
9888noheader                 Hide clock/date/weather header
9889showchecked              Show completed tasks
9890range=day|week|month     Show day/week/month range
9891```
9892
9893### Examples
9894
9895**Full featured** (dashboard):
9896```
9897{{eventlist today}}
9898```
9899Shows: Clock, weather, system stats, events ✓
9900
9901**Minimal** (embedded):
9902```
9903{{eventlist today noheader}}
9904```
9905Shows: Just events ✓
9906
9907**Date range without header**:
9908```
9909{{eventlist daterange=2026-02-01:2026-02-28 noheader}}
9910```
9911Shows: Events for February, no header ✓
9912
9913**With namespace filter**:
9914```
9915{{eventlist today namespace=work noheader}}
9916```
9917Shows: Today's work events, no header ✓
9918
9919### Implementation
9920
9921**Already existed in code** (line 833):
9922```php
9923$noheader = isset($data['noheader']) ? true : false;
9924```
9925
9926**Applied at render** (line 1010):
9927```php
9928if ($today && !empty($allEvents) && !$noheader) {
9929    // Render clock header with date/time/weather
9930}
9931```
9932
9933**Just wasn't documented!** Now it is. ✓
9934
9935## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE
9936
9937### ✨ Improvement: Removed Filter Badge Above Sidebar
9938- **Removed:** Filter badge no longer shows above compact calendar
9939- **Reason:** Filtering is already clearly visible in the calendar view
9940- **Result:** Cleaner UI, less redundancy
9941
9942### What Changed
9943
9944**BEFORE**:
9945```
9946┌─────────────────────────┐
9947│ Filtering: work ✕       │ ← Badge above calendar
9948├─────────────────────────┤
9949│ ◀ February 2026 ▶       │
9950├─────────────────────────┤
9951│ Calendar grid with       │
9952│ filtered events          │ ← Already filtered
9953└─────────────────────────┘
9954
9955Badge was redundant - you can already see
9956the filtering in the calendar!
9957```
9958
9959**AFTER**:
9960```
9961┌─────────────────────────┐
9962│ ◀ February 2026 ▶       │ ← No badge!
9963├─────────────────────────┤
9964│ Calendar grid with       │
9965│ filtered events          │ ← Filtering visible here
9966└─────────────────────────┘
9967
9968Cleaner, simpler UI ✓
9969```
9970
9971### Why Remove It?
9972
9973**Redundant Information**:
9974- Calendar already shows only filtered events
9975- Namespace badges on events show which namespace
9976- Badge added visual clutter without value
9977
9978**Better UX**:
9979- Less visual noise
9980- More space for content
9981- Filtering still obvious from event display
9982
9983**Code Cleanup**:
9984```php
9985// Old code (removed):
9986if ($namespace && $namespace !== '*' && ...) {
9987    $html .= '<div class="calendar-namespace-filter">';
9988    $html .= 'Filtering: ' . $namespace . ' ✕';
9989    $html .= '</div>';
9990}
9991
9992// New code:
9993// Filter badge removed - filtering shown in calendar view only
9994```
9995
9996### How Filtering Still Works
9997
9998**Filtering IS Active**:
9999- Calendar only shows events from selected namespace ✓
10000- Event namespace badges show which namespace ✓
10001- Clear filtering still works (in calendar) ✓
10002
10003**Just No Badge**:
10004- No redundant "Filtering: work ✕" above calendar
10005- Cleaner, more professional appearance
10006
10007### What You Still See
10008
10009**Namespace Information**:
10010```
10011Event with namespace badge:
10012┌────────────────────────┐
10013│ 10:00 Team Meeting     │
10014│       [work] ←─────────┼─ Namespace badge on event
10015└────────────────────────┘
10016```
10017
10018**Filtered View**:
10019- Only events from selected namespace visible
10020- Empty dates show no events
10021- Clear which namespace you're viewing
10022
10023**No Need for Top Badge**:
10024- Already obvious from events shown
10025- Namespace badges provide context
10026- Less clutter!
10027
10028### Summary
10029
10030**Removed**: Filter badge above calendar
10031**Kept**: All filtering functionality
10032**Benefit**: Cleaner UI
10033
10034**Filtering works the same, just without the redundant badge!** ✨
10035
10036## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY
10037
10038### �� Fixed: Filter Badge Now Disappears Immediately
10039- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕
10040- **Added:** Badge removal before page reload/AJAX call
10041- **Result:** Badge disappears instantly, no waiting for reload
10042
10043### The Problem
10044
10045**v4.6.5 behavior**:
10046```
10047Click ✕ to clear filter
10048→ Page reloads or AJAX fires
10049→ Badge stays visible during reload ✗
10050→ Badge finally disappears after reload ✓
10051
10052User sees badge for 0.5-2 seconds after clicking ✕
10053Feels laggy! ✗
10054```
10055
10056### The Fix
10057
10058**Immediately remove badge from DOM**:
10059
10060```javascript
10061window.clearNamespaceFilter = function(calId) {
10062    const container = document.getElementById(calId);
10063
10064    // IMMEDIATELY hide/remove the filter badge
10065    const filterBadge = container.querySelector('.calendar-namespace-filter');
10066    if (filterBadge) {
10067        filterBadge.style.display = 'none'; // Hide instantly
10068        filterBadge.remove(); // Remove from DOM
10069    }
10070
10071    // THEN reload (AJAX or page reload)
10072    navCalendar(...) or window.location.href = ...
10073};
10074```
10075
10076### Before vs After
10077
10078**BEFORE (v4.6.5)**:
10079```
10080Time 0ms: Click ✕
10081┌─────────────────────────┐
10082│ Filtering: work ✕       │ ← Still visible
10083├─────────────────────────┤
10084
10085Time 500ms: Reload completes
10086┌─────────────────────────┐
10087│ (no badge)              │ ← Finally gone
10088├─────────────────────────┤
10089
10090Delay: 500-2000ms ✗
10091```
10092
10093**AFTER (v4.6.6)**:
10094```
10095Time 0ms: Click ✕
10096┌─────────────────────────┐
10097│ (no badge)              │ ← Gone immediately!
10098├─────────────────────────┤
10099
10100Time 500ms: Reload completes
10101┌─────────────────────────┐
10102│ (no badge)              │ ← Still gone
10103├─────────────────────────┤
10104
10105Delay: 0ms ✓
10106Instant feedback! ✓
10107```
10108
10109### Implementation
10110
10111**Two-step removal**:
10112
10113**Step 1**: Hide immediately
10114```javascript
10115filterBadge.style.display = 'none';
10116// User sees badge disappear instantly
10117```
10118
10119**Step 2**: Remove from DOM
10120```javascript
10121filterBadge.remove();
10122// Clean up HTML
10123```
10124
10125**Step 3**: Reload
10126```javascript
10127// Sidebar: Page reload
10128window.location.href = url.toString();
10129
10130// Calendar: AJAX reload
10131navCalendar(calId, year, month, originalNamespace);
10132```
10133
10134**Result**: Badge gone BEFORE reload starts ✓
10135
10136### Why This Matters
10137
10138**User Experience**:
10139- Old: Click ✕ → Wait → Badge disappears
10140- New: Click ✕ → Badge disappears instantly
10141
10142**Perceived Performance**:
10143- Instant visual feedback
10144- Feels responsive
10145- Professional UX
10146
10147**Technical**:
10148- DOM manipulation is synchronous (instant)
10149- Network requests are asynchronous (slow)
10150- Do fast things first!
10151
10152**Badge now disappears the moment you click ✕!** ⚡
10153
10154## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING
10155
10156### �� Fixed: Filter Badge Not Clearing in Sidebar
10157- **Fixed:** Filter badge now properly clears when clicking ✕ button
10158- **Fixed:** Sidebar widget now reloads page without namespace filter
10159- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately
10160
10161### The Problem
10162
10163**In {{calendar}} sidebar widget**:
10164```
101651. Click namespace badge to filter
101662. Badge appears: "Filtering: work ✕"
101673. Click ✕ to clear filter
101684. Badge stays visible! ✗
101695. Events still filtered! ✗
10170```
10171
10172**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar.
10173
10174### The Fix
10175
10176**Detect widget type and handle appropriately**:
10177
10178```javascript
10179window.clearNamespaceFilter = function(calId) {
10180    const container = document.getElementById(calId);
10181
10182    // Check if this is a sidebar widget
10183    const sidebarContainer = document.getElementById('sidebar-widget-' + calId);
10184
10185    if (sidebarContainer) {
10186        // SIDEBAR: Reload page without namespace parameter
10187        const url = new URL(window.location.href);
10188        url.searchParams.delete('namespace');
10189        window.location.href = url.toString(); // Page reload
10190        return;
10191    }
10192
10193    // REGULAR CALENDAR: AJAX reload
10194    navCalendar(calId, year, month, originalNamespace);
10195};
10196```
10197
10198### How It Works
10199
10200**Sidebar Widget** ({{calendar}} syntax):
10201```
10202Rendered server-side with PHP
10203Cannot be AJAX-reloaded
10204Solution: Reload entire page without ?namespace=work parameter
10205```
10206
10207**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}):
10208```
10209Has AJAX reload capability
10210Solution: Call navCalendar() to reload via AJAX
10211```
10212
10213### Before vs After
10214
10215**BEFORE (v4.6.4)**:
10216```
10217Sidebar widget filtered by "work":
10218┌─────────────────────────┐
10219│ Filtering: work ✕       │ ← Click ✕
10220├─────────────────────────┤
10221│ Today                   │
10222│ • Work meeting          │
10223└─────────────────────────┘
10224
10225After clicking ✕:
10226┌─────────────────────────┐
10227│ Filtering: work ✕       │ ← Still there! ✗
10228├─────────────────────────┤
10229│ Today                   │
10230│ • Work meeting          │ ← Still filtered! ✗
10231└─────────────────────────┘
10232```
10233
10234**AFTER (v4.6.5)**:
10235```
10236Sidebar widget filtered by "work":
10237┌─────────────────────────┐
10238│ Filtering: work ✕       │ ← Click ✕
10239├─────────────────────────┤
10240│ Today                   │
10241│ • Work meeting          │
10242└─────────────────────────┘
10243
10244After clicking ✕ → Page reloads:
10245┌─────────────────────────┐
10246│ (no filter badge)       │ ← Cleared! ✓
10247├─────────────────────────┤
10248│ Today                   │
10249│ • Work meeting          │
10250│ • Personal task         │ ← All events! ✓
10251│ • Project review        │
10252└─────────────────────────┘
10253```
10254
10255### Technical Details
10256
10257**Why Page Reload for Sidebar?**
10258
10259Sidebar widget is rendered server-side:
10260```php
10261// In syntax.php:
10262return $this->renderSidebarWidget($events, $namespace, $calId);
10263// ↑ PHP generates complete HTML
10264// No AJAX reload endpoint exists for sidebar
10265```
10266
10267**Solution**: Remove `?namespace=work` from URL and reload page
10268```javascript
10269const url = new URL(window.location.href);
10270url.searchParams.delete('namespace'); // Remove filter
10271window.location.href = url.toString(); // Reload
10272```
10273
10274**Why AJAX for Regular Calendar?**
10275
10276Regular calendars have AJAX endpoints:
10277```javascript
10278// action.php handles:
10279action: 'load_month' → Returns new month data
10280navCalendar() → Fetches and rebuilds calendar
10281```
10282
10283### Filter Badge Behavior
10284
10285**Showing Badge** (when filtering):
10286- Server-side: PHP renders badge in HTML
10287- Client-side: JavaScript adds badge to header
10288
10289**Clearing Badge**:
10290- Sidebar: Page reload (removes ?namespace from URL)
10291- Calendar: AJAX reload (badge removed in rebuildCalendar)
10292
10293**Now works correctly for both!** ✓
10294
10295## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR
10296
10297### �� Critical Hotfix: Fixed PHP Parse Error
10298- **Fixed:** Template literal backticks causing PHP syntax error
10299- **Fixed:** Changed JavaScript template literals to concatenation
10300- **Fixed:** Admin page now loads without parse errors
10301
10302### The Problem
10303
10304**v4.6.3 broke admin page**:
10305```
10306Error loading plugin calendar
10307ParseError: syntax error, unexpected identifier "s",
10308expecting "," or ";"
10309```
10310
10311**Cause**: JavaScript template literals inside PHP echo
10312```php
10313echo '<script>
10314    let nsOptions = `<option value="">(default)</option>`;
10315                    ↑ PHP sees backtick and gets confused!
10316</script>';
10317```
10318
10319**Why it broke**: Backticks (`) are special in PHP too!
10320
10321### The Fix
10322
10323**Changed from template literals to concatenation**:
10324
10325**BEFORE (broken)**:
10326```javascript
10327let nsOptions = `<option value="">(default)</option>`;
10328nsOptions += `<option value="${namespace}">${namespace}</option>`;
10329console.log('Edit recurring:', namespace);
10330```
10331
10332**AFTER (fixed)**:
10333```javascript
10334let nsOptions = "<option value=\\"\\">(default)</option>";
10335nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>";
10336console.log("Edit recurring:", namespace);
10337```
10338
10339**Changes**:
10340- ✅ Backticks (`) → Double quotes (")
10341- ✅ Template literals (${var}) → Concatenation (" + var + ")
10342- ✅ Single quotes in console.log → Double quotes
10343- ✅ Properly escaped quotes for PHP echo
10344
10345### Technical Details
10346
10347**The Issue**:
10348```php
10349// Inside PHP echo string:
10350echo '<script>
10351    let x = `template ${literal}`;  // ✗ Backtick breaks PHP!
10352</script>';
10353```
10354
10355**The Solution**:
10356```php
10357// Use regular string concatenation:
10358echo '<script>
10359    let x = "string " + variable;   // ✓ Works in PHP echo!
10360</script>';
10361```
10362
10363**Quote Escaping**:
10364```javascript
10365// Double quotes inside PHP single-quote string:
10366'<option value=\"\">text</option>'
10367               ↑↑ Escaped for JavaScript
10368```
10369
10370### Result
10371
10372**Before**: Admin page crashed with parse error ✗
10373**After**: Admin page loads perfectly ✓
10374
10375**No functionality changed - just syntax fix!**
10376
10377## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN
10378
10379### �� Critical Fix: Namespace Dropdown in Recurring Events Section
10380- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing
10381- **Fixed:** Current namespace now properly selected in dropdown
10382- **Fixed:** Namespace extraction from DOM now uses multiple methods
10383- **Added:** Console logging to debug namespace detection
10384
10385### The Problem
10386
10387**When editing from �� Recurring Events section**:
10388```
10389Click "Edit" on recurring event
10390Namespace dropdown shows:
10391- (default)
10392- (nothing else!) ✗
10393
10394Can't select any namespace! ✗
10395```
10396
10397**Why**: Broken namespace extraction logic
10398```javascript
10399// OLD CODE (broken):
10400const namespaces = Array.from(document.querySelectorAll("[id^=ns_]"))
10401    .map(el => {
10402        // Complex parsing that often failed
10403        const nsSpan = el.querySelector("span:nth-child(3)");
10404        return nsSpan.textContent.replace("�� ", "").trim();
10405    })
10406    .filter(ns => ns !== namespace); // Excluded current! ✗
10407```
10408
10409**Result**: Empty dropdown, can't change namespace! ✗
10410
10411### The Fix
10412
10413**NEW CODE (robust)**:
10414```javascript
10415const namespaces = new Set();
10416
10417// Method 1: Namespace explorer folders
10418document.querySelectorAll("[id^=ns_]").forEach(el => {
10419    const nsSpan = el.querySelector("span:nth-child(3)");
10420    if (nsSpan) {
10421        let nsText = nsSpan.textContent.replace("�� ", "").trim();
10422        if (nsText && nsText !== "(default)") {
10423            namespaces.add(nsText); // ✓
10424        }
10425    }
10426});
10427
10428// Method 2: Datalist (backup method)
10429document.querySelectorAll("#namespaceList option").forEach(opt => {
10430    if (opt.value && opt.value !== "") {
10431        namespaces.add(opt.value); // ✓
10432    }
10433});
10434
10435// Build dropdown with ALL namespaces
10436let options = `<option value="">(default)</option>`;
10437
10438// Show current namespace as selected
10439if (namespace) {
10440    options += `<option value="${namespace}" selected>${namespace} (current)</option>`;
10441}
10442
10443// Show all other namespaces
10444for (const ns of nsArray) {
10445    if (ns !== namespace) {
10446        options += `<option value="${ns}">${ns}</option>`;
10447    }
10448}
10449```
10450
10451**Result**: All namespaces visible! ✓
10452
10453### How It Works Now
10454
10455**Before (Broken)**:
10456```
10457Edit recurring event in "work" namespace
10458
10459Dropdown shows:
10460☐ (default)
10461
10462That's it! Can't select anything! ✗
10463```
10464
10465**After (Fixed)**:
10466```
10467Edit recurring event in "work" namespace
10468
10469Dropdown shows:
10470☐ (default)
10471☑ work (current)  ← Selected!
10472☐ personal
10473☐ projects
10474☐ meetings
10475
10476All namespaces available! ✓
10477```
10478
10479### Key Improvements
10480
10481**1. Dual extraction methods**:
10482- Primary: Parse namespace explorer DOM
10483- Backup: Read from datalist
10484- Result: Always finds namespaces ✓
10485
10486**2. Current namespace included**:
10487```javascript
10488// OLD: Excluded current namespace
10489.filter(ns => ns !== namespace) ✗
10490
10491// NEW: Include and mark as selected
10492options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓
10493```
10494
10495**3. Better error handling**:
10496```javascript
10497if (nsSpan) {  // Check exists
10498    let nsText = nsSpan.textContent.replace("�� ", "").trim();
10499    if (nsText && nsText !== "(default)") {  // Validate
10500        namespaces.add(nsText);
10501    }
10502}
10503```
10504
10505**4. Console debugging**:
10506```javascript
10507console.log('Edit recurring - Current namespace:', namespace);
10508console.log('Available namespaces:', nsArray);
10509```
10510
10511Open browser console (F12) to see what namespaces are detected!
10512
10513### Example Usage
10514
10515**Scenario**: Edit recurring "Team Meeting" in "work" namespace
10516
10517**Steps**:
105181. Go to �� Recurring Events section
105192. Click "Edit" on "Team Meeting"
105203. See namespace dropdown:
10521   - ☐ (default)
10522   - ☑ work (current)
10523   - ☐ personal
10524   - ☐ projects
105254. Select "personal" to move event
105265. Click "Save Changes"
105276. Event moved to "personal" namespace ✓
10528
10529**Finally works as expected!** ��
10530
10531## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION
10532
10533### �� Recurring Events Namespace Fix
10534- **Fixed:** Namespace now properly preserved when editing recurring events
10535- **Fixed:** Namespace selector now allows selecting any namespace (not just default)
10536- **Added:** Better logging for namespace preservation debugging
10537- **Added:** Console logging to track namespace values during edit
10538
10539### The Namespace Problem
10540
10541**Issue 1**: Can't select non-default namespace
10542```
10543When editing recurring event:
10544- Dropdown shows all namespaces ✓
10545- User selects "work"
10546- Form submits with "" (empty/default) ✗
10547```
10548
10549**Issue 2**: Namespace not preserved
10550```
10551Recurring event in "personal" namespace
10552Edit the title only
10553After save: namespace changed to "" (default) ✗
10554```
10555
10556### The Fixes
10557
10558**Fix 1**: Better namespace preservation logic
10559```php
10560// When editing recurring event:
10561$existingNamespace = $existingEventData['namespace'];
10562
10563// Preserve if user didn't explicitly change it:
10564if (empty($namespace) ||
10565    strpos($namespace, '*') !== false ||
10566    strpos($namespace, ';') !== false) {
10567    // User didn't select or selected wildcard
10568    $namespace = $existingNamespace; // Keep existing!
10569}
10570```
10571
10572**Fix 2**: Proper form population
10573```javascript
10574// When editing, set BOTH inputs:
10575namespaceHidden.value = event.namespace || '';  // Hidden (submitted)
10576namespaceSearch.value = event.namespace || '(default)';  // Visible
10577
10578// Plus logging:
10579console.log('Set namespace for editing:', event.namespace);
10580```
10581
10582**Fix 3**: Added detailed logging
10583```php
10584error_log("Preserving namespace '$namespace' (received='$receivedNamespace')");
10585error_log("Using new namespace '$namespace'");
10586error_log("No existing namespace to preserve");
10587```
10588
10589### How It Works Now
10590
10591**Scenario 1**: Edit without changing namespace
10592```
10593Event in "work" namespace
10594Edit title to "Updated Meeting"
10595Namespace field shows: "work"
10596Hidden input value: "work"
10597Result: Saved in "work" ✓
10598```
10599
10600**Scenario 2**: Change namespace during edit
10601```
10602Event in "personal" namespace
10603Edit and select "work" namespace
10604Hidden input value: "work"
10605Result: Saved in "work" ✓
10606```
10607
10608**Scenario 3**: Edit with empty/wildcard namespace
10609```
10610Event in "projects" namespace
10611Namespace field empty or shows "personal;work"
10612System preserves: "projects"
10613Result: Saved in "projects" ✓
10614```
10615
10616### Debugging
10617
10618Now with console logging, you can see:
10619```javascript
10620Set namespace for editing: work
10621Hidden value: work
10622```
10623
10624And in PHP logs:
10625```
10626Calendar saveEvent recurring: Loaded existing data - namespace='work'
10627Calendar saveEvent recurring: Preserving namespace 'work' (received='')
10628```
10629
10630**Namespace preservation now works correctly!** ��
10631
10632## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA
10633
10634### �� Recurring Events Edit Fix
10635- **Fixed:** Editing recurring events now preserves unchanged fields
10636- **Fixed:** Empty fields no longer erase existing data
10637- **Added:** Smart merge of existing event data with new changes
10638
10639### The Problem
10640
10641**Before**: Editing erased unchanged fields!
10642```
10643Original recurring event:
10644- Title: "Team Meeting"
10645- Time: "10:00 AM"
10646- Description: "Weekly standup with engineering team"
10647- Color: Red
10648
10649User edits ONLY the title to "Staff Meeting"
10650Form sends:
10651- Title: "Staff Meeting" ✓
10652- Time: "" ✗ (empty because user didn't change it)
10653- Description: "" ✗ (empty)
10654- Color: "#3498db" ✗ (default blue)
10655
10656Result after save:
10657- Title: "Staff Meeting" ✓
10658- Time: BLANK ✗
10659- Description: BLANK ✗
10660- Color: Blue ✗
10661```
10662
10663**All the other data was lost!** ✗
10664
10665### The Fix
10666
10667**After**: Preserves unchanged data!
10668```php
10669if ($eventId && $isRecurring) {
10670    // Load existing event data
10671    $existingEventData = getExistingEventData($eventId);
10672
10673    // Merge: use new value OR keep existing
10674    $title = $title ?: $existingEventData['title'];
10675    $time = $time ?: $existingEventData['time'];
10676    $description = $description ?: $existingEventData['description'];
10677    $color = ($color === '#3498db') ?
10678        $existingEventData['color'] : $color;
10679}
10680```
10681
10682**Now**:
10683```
10684User edits ONLY the title to "Staff Meeting"
10685
10686System:
106871. Loads existing event data
106882. Merges: new title + existing time/description/color
106893. Saves merged data
10690
10691Result:
10692- Title: "Staff Meeting" ✓ (changed)
10693- Time: "10:00 AM" ✓ (preserved!)
10694- Description: "Weekly standup..." ✓ (preserved!)
10695- Color: Red ✓ (preserved!)
10696```
10697
10698**Only changed fields are updated!** ✓
10699
10700### How It Works
10701
10702**Step 1**: Load existing data
10703```php
10704$existingEventData = $this->getExistingEventData(
10705    $eventId,
10706    $date,
10707    $namespace
10708);
10709```
10710
10711**Step 2**: Merge with new data
10712```php
10713// If new value is empty, use existing value
10714$title = $newTitle ?: $existingEventData['title'];
10715$time = $newTime ?: $existingEventData['time'];
10716$description = $newDesc ?: $existingEventData['description'];
10717
10718// Special handling for color (default is #3498db)
10719if ($newColor === '#3498db' && $existingEventData['color']) {
10720    $color = $existingEventData['color'];
10721}
10722```
10723
10724**Step 3**: Save merged data
10725```php
10726createRecurringEvents(..., $title, $time, $description, $color, ...);
10727```
10728
10729### Fields Preserved
10730
10731When editing recurring events, these fields are now preserved if not changed:
10732- ✅ Title (if left blank)
10733- ✅ Time (if not specified)
10734- ✅ End Time (if not specified)
10735- ✅ Description (if left empty)
10736- ✅ Color (if still default blue)
10737
10738**Edit only what you want to change - everything else stays!** ��
10739
10740## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX
10741
10742### ✨ New Feature: Rename Namespaces
10743- **Added:** ✏️ Rename button in Namespace Explorer
10744- **Added:** Rename all events in a namespace at once
10745- **Added:** Automatic cleanup of old directory structure
10746
10747### �� Critical Fix: Recurring Events Actually Edit Now!
10748- **Fixed:** Editing recurring events now deletes ALL instances
10749- **Fixed:** Previously only deleted one instance, left orphans
10750- **Fixed:** Recurring events properly regenerated on edit
10751
10752### Namespace Rename Feature
10753
10754**Before**: Could only delete namespaces, not rename
10755
10756**After**: Click ✏️ to rename!
10757
10758```
10759�� work (15 events)  [3] [✏️] [��️]
10760                          ↑ NEW!
10761```
10762
10763**How It Works**:
107641. Click ✏️ rename button
107652. Enter new namespace name
107663. All events moved to new namespace
107674. Event `namespace` field updated in JSON
107685. Old directory cleaned up
10769
10770**Example**:
10771```
10772Rename: "work" → "business"
10773
10774Before:
10775/data/meta/work/calendar/*.json
10776Events: {namespace: "work"}
10777
10778After:
10779/data/meta/business/calendar/*.json
10780Events: {namespace: "business"}
10781```
10782
10783**Implementation**:
10784```php
10785private function renameNamespace() {
10786    // 1. Validate new name
10787    // 2. Rename directory
10788    // 3. Update all event namespace fields in JSON
10789    // 4. Clean up old empty directories
10790}
10791```
10792
10793### Recurring Events Fix - The Problem
10794
10795**Before**: Editing didn't work!
10796```
10797Original recurring event generates:
10798- Event-0 (Mon, Feb 10)
10799- Event-1 (Mon, Feb 17)
10800- Event-2 (Mon, Feb 24)
10801
10802User edits Event-0, changes title to "Updated"
10803
10804What SHOULD happen:
10805- Delete Event-0, Event-1, Event-2
10806- Generate new instances with "Updated" title
10807
10808What ACTUALLY happened:
10809- Delete Event-0 only ✗
10810- Generate new instances
10811- Result: Event-1 and Event-2 still show old title! ✗
10812```
10813
10814**After**: Properly deletes ALL instances!
10815
10816**The Fix**:
10817```php
10818private function deleteEvent() {
10819    $event = getEvent($eventId);
10820
10821    // Check if recurring
10822    if ($event['recurring'] && $event['recurringId']) {
10823        // Delete ALL instances with same recurringId
10824        deleteAllRecurringInstances($recurringId);
10825    }
10826
10827    // Then normal delete for spanning events
10828}
10829
10830private function deleteAllRecurringInstances($recurringId) {
10831    // Scan ALL calendar JSON files
10832    foreach (glob('*.json') as $file) {
10833        // Filter out events with matching recurringId
10834        $events = array_filter($events, function($event) {
10835            return $event['recurringId'] !== $recurringId;
10836        });
10837    }
10838}
10839```
10840
10841**Result**:
10842- Edit "Weekly Team Meeting" → ALL instances updated ✓
10843- Delete recurring event → ALL instances deleted ✓
10844- No more orphaned events! ✓
10845
10846### Recurring Event Fields
10847
10848Every recurring event has:
10849```json
10850{
10851    "id": "abc123-0",
10852    "recurring": true,
10853    "recurringId": "abc123",  ← Links all instances
10854    ...
10855}
10856```
10857
10858When editing/deleting, we find ALL events with same `recurringId` and remove them!
10859
10860**Finally, recurring events work properly!** ��
10861
10862## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS
10863
10864### �� Important Events Sorting - ACTUALLY FIXED!
10865- **Fixed:** Important Events now REALLY sorted by date first, then time
10866- **Fixed:** renderSidebarSection was re-sorting and breaking the order
10867- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only
10868
10869### �� Pink Theme Tooltip Bling!
10870- **Added:** Pink gradient tooltips (hot pink → light pink)
10871- **Added:** Glowing pink border on tooltips
10872- **Added:** Sparkling heart (��) appears next to tooltip!
10873- **Added:** Heart has pink glow drop-shadow
10874
10875### The Sorting Bug - Root Cause
10876
10877**Problem**: Two sorts were happening!
10878
10879**Sort #1** (Line 2047): Before rendering
10880```php
10881usort($importantEvents, ...) // Sort by date ✓
10882```
10883
10884**Sort #2** (Line 2751): Inside renderSidebarSection
10885```php
10886usort($events, ...) // Sort by TIME ONLY ✗
10887// This was breaking the date order!
10888```
10889
10890**The Fix**: Different sorting for different sections
10891```php
10892if ($title === 'Important Events') {
10893    // Sort by DATE first, then time
10894    usort($events, function($a, $b) {
10895        if ($dateA !== $dateB) {
10896            return strcmp($dateA, $dateB); // DATE first!
10897        }
10898        // Same date - sort by time
10899        return timeCompare($a, $b);
10900    });
10901} else {
10902    // Today/Tomorrow - sort by TIME only (same date)
10903    usort($events, function($a, $b) {
10904        return timeCompare($a, $b);
10905    });
10906}
10907```
10908
10909**Result**: Important Events now CORRECTLY sorted!
10910```
10911✓ Sun, Feb 8 - 3:30 PM Super Bowl
10912✓ Tue, Feb 10 - 11:30 AM Doctor visit
10913✓ Sat, Feb 14 - Valentine's Day (all-day)
10914✓ Sat, Feb 14 - 8:00 PM Crab Shack
10915```
10916
10917### Pink Tooltip Magic! ��
10918
10919**Normal Tooltips**: Black background, plain
10920```css
10921background: rgba(0, 0, 0, 0.95);
10922color: #fff;
10923```
10924
10925**Pink Theme Tooltips**: FABULOUS!
10926```css
10927/* Pink gradient background */
10928background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%);
10929
10930/* Glowing pink border */
10931border: 2px solid #ff85c1;
10932
10933/* Double glow shadow */
10934box-shadow:
10935    0 0 15px rgba(255, 20, 147, 0.6),
10936    0 4px 12px rgba(0, 0, 0, 0.4);
10937
10938/* Bold text */
10939font-weight: 600;
10940```
10941
10942**Plus**: Sparkling heart next to tooltip!
10943```css
10944.sidebar-pink [data-tooltip]:after {
10945    content: '��';
10946    font-size: 12px;
10947    filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8));
10948}
10949```
10950
10951**The Effect**:
10952```
10953Hover over ⚠ conflict warning:
10954┌────────────────────┐ ��
10955│ Conflicts with:    │ ← Pink gradient
10956│ • Event 1 (3PM)   │ ← Pink border
10957│ • Event 2 (4PM)   │ ← Pink glow
10958└────────────────────┘
10959```
10960
10961**Maximum glamour on tooltips too!** ✨
10962
10963## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING
10964
10965### �� Important Events Order Fixed
10966- **Fixed:** Important Events now sorted by date (earliest first)
10967- **Fixed:** Events on same date sorted by time (chronological)
10968- **Fixed:** All-day events appear last within each date
10969
10970### Sorting Issue
10971
10972**Before**: Random order
10973```
10974Important Events:
10975�� Valentine's Day         (Sat, Feb 14)
1097611:30 AM Doctor visit      (Tue, Feb 10)  ← Feb 10 after Feb 14!
109773:30 PM Super Bowl         (Sun, Feb 8)   ← Feb 8 after Feb 14!
109788:00 PM Crab Shack         (Sat, Feb 14)
10979```
10980
10981**After**: Chronological order
10982```
10983Important Events:
109843:30 PM Super Bowl         (Sun, Feb 8)   ← Earliest!
1098511:30 AM Doctor visit      (Tue, Feb 10)
10986�� Valentine's Day         (Sat, Feb 14)  ← All-day event
109878:00 PM Crab Shack         (Sat, Feb 14)  ← Same day, sorted by time
10988```
10989
10990### Sorting Logic
10991
10992**Primary Sort**: By date
10993```php
10994strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14"
10995```
10996
10997**Secondary Sort**: By time (within same date)
10998```php
10999// All-day events (no time) go last
11000if (empty($timeA) && !empty($timeB)) return 1;
11001if (!empty($timeA) && empty($timeB)) return -1;
11002
11003// Both have times - sort chronologically
11004$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes
11005$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes
11006return $aMinutes - $bMinutes;      // 690 < 1200
11007```
11008
11009**Result**:
110101. Sun, Feb 8 - 3:30 PM (earliest date & time)
110112. Tue, Feb 10 - 11:30 AM (next date)
110123. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14)
110134. Sat, Feb 14 - 8:00 PM (timed event on Feb 14)
11014
11015**Perfect chronological order for next 2 weeks!** ✓
11016
11017## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨��
11018
11019### �� EXTREME PINK BLING EFFECTS!
11020- **Added:** Click sparkles - 8 sparkles burst out on every click!
11021- **Added:** Auto-sparkles - random sparkles appear every 3 seconds
11022- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover
11023- **Added:** Pulsing border glow - constantly breathing pink glow
11024- **Added:** Drop shadows on sparkles for extra depth
11025- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows!
11026
11027### Sparkle Effects Breakdown
11028
11029**Click Sparkles** ��:
11030```javascript
11031// 8 sparkles burst out when you click anywhere!
11032for (let i = 0; i < 8; i++) {
11033    // Staggered appearance (40ms apart)
11034    createSparkle(x, y);
11035}
11036
11037// Sparkle emojis:
11038["✨", "��", "��", "⭐", "��", "��", "��", "��", "��", "��"]
11039```
11040
11041**Each sparkle**:
11042- Starts at click point
11043- Flies outward 30-60px in random direction
11044- Spins 360 degrees
11045- Fades in and out
11046- Has pink glow drop-shadow
11047- Disappears after 1 second
11048
11049**Auto Sparkles** ⏰:
11050```javascript
11051// Random sparkle every 3 seconds
11052setInterval(() => {
11053    const x = Math.random() * width;
11054    const y = Math.random() * height;
11055    createSparkle(x, y);
11056}, 3000);
11057```
11058
11059**Result**: Constant magical sparkles even without clicking! ✨
11060
11061**Hover Mega-Glow** ��:
11062```css
11063.sidebar-pink:hover {
11064    box-shadow:
11065        0 0 30px rgba(255, 20, 147, 0.9),
11066        0 0 50px rgba(255, 20, 147, 0.5) !important;
11067}
11068```
11069
11070**Result**: Sidebar EXPLODES with pink glow when you hover over it! ��
11071
11072**Pulsing Border Glow** ��:
11073```css
11074@keyframes pulse-glow {
11075    0%, 100% {
11076        box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
11077    }
11078    50% {
11079        box-shadow:
11080            0 0 25px rgba(255, 20, 147, 0.8),
11081            0 0 40px rgba(255, 20, 147, 0.4);
11082    }
11083}
11084
11085animation: pulse-glow 3s ease-in-out infinite;
11086```
11087
11088**Result**: Border continuously breathes with pink glow! ��
11089
11090**Sparkle Animation** ��:
11091```css
11092@keyframes sparkle {
11093    0% {
11094        opacity: 0;
11095        transform: translate(0, 0) scale(0) rotate(0deg);
11096    }
11097    50% {
11098        opacity: 1;
11099        transform: translate(halfway) scale(1) rotate(180deg);
11100    }
11101    100% {
11102        opacity: 0;
11103        transform: translate(far) scale(0) rotate(360deg);
11104    }
11105}
11106```
11107
11108**Result**: Sparkles spin, grow, shrink, and fly! ��
11109
11110### Complete Pink Bling Experience:
11111
11112**Always Active**:
11113- ✨ Pulsing pink border glow (3 second cycle)
11114- ✨ Auto-sparkles every 3 seconds
11115
11116**On Hover**:
11117- �� MEGA GLOW EFFECT (2x brightness!)
11118
11119**On Click**:
11120- �� 8 sparkles EXPLODE outward!
11121- �� Random emojis (hearts, stars, diamonds, crowns!)
11122- �� Each sparkle spins 360° while flying
11123- �� Pink glow drop-shadow on each sparkle
11124
11125**The Result**:
11126- Click anywhere = SPARKLE EXPLOSION! ��
11127- Hover anywhere = MEGA GLOW! ✨
11128- Always breathing and sparkling! ��
11129- Maximum glamour! ��
11130- Wife approval: 1000%! ��
11131
11132**THIS IS THE MOST FABULOUS CALENDAR EVER!** ��✨��
11133
11134## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH
11135
11136### �� Pink Theme Final Touches
11137- **Fixed:** Add Event text now black (was bright pink, hard to read)
11138- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!)
11139- **Removed:** Text shadow on Add Event button (cleaner with black text)
11140
11141### Add Event Text - Black & Readable!
11142
11143**Before**: Bright pink text (#ff1493) on dark pink background
11144```php
11145$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read!
11146text-shadow: 0 0 3px #ff1493; // Glowy pink
11147```
11148
11149**After**: Black text, no shadow, perfect contrast!
11150```php
11151$addBtnTextColor = $theme === 'pink' ? '#000000' : ...;
11152$addBtnTextShadow = $theme === 'pink' ? 'none' : ...;
11153```
11154
11155**Result**:
11156- Black text pops against dark pink background ✓
11157- Easy to read ✓
11158- Professional look with bling ✓
11159
11160### Clock Border - All Pink!
11161
11162**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green
11163
11164**Before**:
11165```php
11166// Inline style (only bottom):
11167style="border-bottom:2px solid #ff1493;"
11168
11169// CSS (all sides):
11170.eventlist-today-header {
11171    border: 2px solid #00cc07; // Green on top/sides!
11172}
11173```
11174
11175**After**: Inline style overrides ALL sides
11176```php
11177style="border:2px solid #ff1493;" // All 4 sides pink!
11178```
11179
11180**Result**: Clock box now 100% pink border on all four sides! ✓
11181
11182### What Changed:
11183
11184**Add Event Button**:
11185- Background: #b8156f (dark pink) ✓
11186- Text: **#000000 (black)** ← NEW!
11187- Text shadow: **none** ← NEW!
11188- Glow: 0 0 10px pink ✓
11189
11190**Clock Border**:
11191- Top: **#ff1493 (pink)** ← FIXED!
11192- Right: **#ff1493 (pink)** ← FIXED!
11193- Bottom: #ff1493 (pink) ✓
11194- Left: **#ff1493 (pink)** ← FIXED!
11195
11196**Perfect pink theme - wife approved!** ��✨
11197
11198## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION
11199
11200### �� Pink Theme Complete Makeover
11201- **Fixed:** Clock border now completely pink (was green on sides/top)
11202- **Changed:** Today/Tomorrow/Important sections now different shades of pink
11203- **Changed:** Add Event button now dark pink (was clashing blue)
11204- **Changed:** System status bars now pink gradient (3 shades!)
11205
11206### All-Pink Everything! ��
11207
11208**Clock Border**:
11209```css
11210/* Before: Green border */
11211border: 2px solid #00cc07;
11212
11213/* After: Hot pink border */
11214.sidebar-pink .eventlist-today-header {
11215    border-color: #ff1493;
11216    box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
11217}
11218```
11219
11220**Section Colors** (Different Pink Shades):
11221```php
11222// Before: Orange, green, purple
11223'Today' => '#ff9800',
11224'Tomorrow' => '#4caf50',
11225'Important' => '#9b59b6'
11226
11227// After: Hot pink, pink, light pink
11228'Today' => '#ff1493',      // Hot pink (DeepPink)
11229'Tomorrow' => '#ff69b4',   // Pink (HotPink)
11230'Important' => '#ff85c1'   // Light pink
11231```
11232
11233**Add Event Button**:
11234```php
11235// Before: Clashing blue
11236background: #3498db;
11237
11238// After: Dark pink with glow
11239background: #b8156f;       // Dark pink
11240hover: #8b0f54;            // Darker pink
11241shadow: 0 0 10px rgba(255, 20, 147, 0.5);
11242```
11243
11244**System Status Bars** (Pink Gradient):
11245```css
11246/* 5-min load average */
11247.sidebar-pink .eventlist-cpu-fill {
11248    background: #ff1493;   /* Hot pink */
11249    box-shadow: 0 0 5px rgba(255, 20, 147, 0.7);
11250}
11251
11252/* Realtime CPU */
11253.sidebar-pink .eventlist-cpu-fill-purple {
11254    background: #ff69b4;   /* Pink */
11255    box-shadow: 0 0 5px rgba(255, 105, 180, 0.7);
11256}
11257
11258/* Memory */
11259.sidebar-pink .eventlist-cpu-fill-orange {
11260    background: #ff85c1;   /* Light pink */
11261    box-shadow: 0 0 5px rgba(255, 133, 193, 0.7);
11262}
11263```
11264
11265### Pink Theme Visual Hierarchy:
11266
11267**Darkest → Lightest Pink Shades**:
112681. Add Event button: #b8156f (dark pink)
112692. Today section: #ff1493 (hot pink / deep pink)
112703. System bar 1: #ff1493 (hot pink)
112714. Tomorrow section: #ff69b4 (pink)
112725. System bar 2: #ff69b4 (pink)
112736. Important section: #ff85c1 (light pink)
112747. System bar 3: #ff85c1 (light pink)
11275
11276**Result**: Beautiful pink gradient throughout entire sidebar! ��✨
11277
11278### What's Pink Now:
11279
11280✅ Sidebar background & border
11281✅ **Clock border** ← FIXED!
11282✅ Header gradient
11283✅ Week grid
11284✅ **Add Event button** ← FIXED!
11285✅ **Today section** ← Different shade!
11286✅ **Tomorrow section** ← Different shade!
11287✅ **Important section** ← Different shade!
11288✅ Event text & bars
11289✅ **System status bars** ← All 3 different pink shades!
11290✅ All shadows & glows
11291
11292**EVERYTHING is pink and fabulous!** ��✨
11293
11294## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS
11295
11296### ✨ New Theme: Pink Bling! ��
11297- **Added:** Glamorous hot pink theme with maximum sparkle
11298- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic
11299- **Perfect for:** Fabulous calendars that demand attention ✨
11300
11301### �� Professional Theme Shadow Fix
11302- **Fixed:** Section headers now have subtle shadow (not glow)
11303- **Fixed:** Clicked day panel header has proper shadow
11304
11305### Pink Bling Theme Colors
11306
11307**Background & Borders**:
11308```php
11309'bg' => '#1a0d14',           // Dark rich pink-black
11310'border' => '#ff1493',        // Hot pink (DeepPink)
11311'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow
11312```
11313
11314**Text Colors**:
11315```php
11316'text_primary' => '#ff69b4',  // Hot pink
11317'text_bright' => '#ff1493',   // Deep pink
11318'text_dim' => '#ff85c1',      // Light pink
11319```
11320
11321**Week Grid**:
11322```php
11323'grid_bg' => '#2d1a24',       // Dark purple-pink
11324'cell_bg' => '#1a0d14',       // Dark
11325'cell_today_bg' => '#3d2030', // Highlighted purple-pink
11326```
11327
11328**Special Effects**:
11329```php
11330'bar_glow' => '0 0 5px',      // Extra sparkly glow!
11331'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling!
11332```
11333
11334### Professional Theme Shadow Fix
11335
11336**Before**: Section headers had colored glow
11337```php
11338box-shadow: 0 0 8px #3498db; // Blue glow - wrong!
11339```
11340
11341**After**: Section headers have subtle shadow
11342```php
11343$headerShadow = ($theme === 'professional') ?
11344    '0 2px 4px rgba(0, 0, 0, 0.15)' :  // Shadow for professional
11345    '0 0 8px ' . $accentColor;          // Glow for others
11346```
11347
11348**Result**:
11349- **Matrix/Purple/Pink**: Colored glow on headers ✓
11350- **Professional**: Clean grey shadow (no glow) ✓
11351
11352### All Four Themes:
11353
11354**�� Matrix Edition**:
11355- Dark green (#00cc07)
11356- Neon glow effects
11357- Hacker aesthetic
11358
11359**�� Purple Dream**:
11360- Elegant purple (#9b59b6)
11361- Violet glow effects
11362- Royal aesthetic
11363
11364**�� Professional Blue**:
11365- Clean grey/blue (#4a90e2)
11366- Subtle shadows (NO glow)
11367- Corporate aesthetic
11368
11369**�� Pink Bling** (NEW!):
11370- Hot pink (#ff1493)
11371- MAXIMUM sparkle & glow
11372- Glamorous aesthetic ✨��
11373
11374### Technical Implementation
11375
11376**Theme Added To**:
11377- `getSidebarThemeStyles()` - color definitions
11378- `getSidebarTheme()` - validation
11379- `saveSidebarTheme()` - admin save
11380- Admin panel - UI with preview
11381- All shadow/glow calculations
11382- JavaScript theme colors
11383- Clicked day panel colors
11384
11385**Perfect for users who want FABULOUS pink calendars!** ��✨
11386
11387## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY
11388
11389### �� Text Glow Refinement
11390- **Changed:** Reduced text glow from 3px to 2px (less intense)
11391- **Fixed:** Clicked day panel now has same text glow as sections
11392
11393### Text Glow Reduction
11394
11395**Before**: Text glow was too strong (3px)
11396```php
11397// Sections:
11398text-shadow: 0 0 3px #00cc07; // Too bright!
11399
11400// Clicked day panel:
11401text-shadow: 0 0 3px #00cc07; // Too bright!
11402```
11403
11404**After**: Subtler text glow (2px)
11405```php
11406// Sections:
11407text-shadow: 0 0 2px #00cc07; // Just right ✓
11408
11409// Clicked day panel:
11410text-shadow: 0 0 2px #00cc07; // Just right ✓
11411```
11412
11413**Visual Impact**:
11414- **Matrix**: Softer green glow, easier to read
11415- **Purple**: Softer purple glow, more elegant
11416- **Professional**: Still no glow (clean)
11417
11418### Consistency Fix
11419
11420**Before**: Sections had glow, clicked day panel had NO glow
11421
11422**After**: Both sections AND clicked day panel have matching subtle glow
11423
11424**Where Glow Appears**:
11425- ✅ Today section event text
11426- ✅ Tomorrow section event text
11427- ✅ Important section event text
11428- ✅ **Clicked day panel event text** ← NOW CONSISTENT!
11429
11430**Result**:
11431- Glow is less intense and easier on eyes ✓
11432- All event text has consistent styling ✓
11433- Matrix/Purple themes more refined ✓
11434
11435### Technical Details
11436
11437**PHP (Sections)**:
11438```php
11439$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';';
11440```
11441
11442**JavaScript (Clicked Day Panel)**:
11443```javascript
11444themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple
11445eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'";
11446```
11447
11448**Perfect consistency and subtle elegance!** ✨
11449
11450## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY
11451
11452### ✨ Important Events Enhancement
11453- **Changed:** Important events now show from next 2 weeks (not just current week)
11454- **Fixed:** Important events on Sunday after current week now visible
11455- **Changed:** Events loaded 2 weeks into future for Important section
11456
11457### �� Background Cleanup
11458- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections
11459- **Removed:** Grey backgrounds from individual events
11460- **Result:** Clean transparent backgrounds, original dark Matrix look restored
11461
11462### Important Events - Future Coverage
11463
11464**Before**: Only showed Important events from current week
11465```php
11466if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
11467    $importantEvents[] = $event;
11468}
11469```
11470
11471**After**: Shows Important events from today through next 2 weeks
11472```php
11473// Load events 2 weeks out
11474$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days'));
11475
11476// Show all important events from today forward
11477if ($isImportant && $dateKey >= $todayStr) {
11478    $importantEvents[] = $event;
11479}
11480```
11481
11482**Example**:
11483- Today: Saturday Feb 7
11484- Current week: Sun Feb 1 → Sat Feb 7
11485- Important events shown: Feb 7 → Feb 21 (today + 14 days)
11486
11487**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓
11488
11489### Background Removal
11490
11491**Before**: Light grey/white backgrounds added
11492```php
11493// Section background:
11494$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay
11495
11496// Event background:
11497$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay
11498```
11499
11500**After**: No backgrounds (transparent)
11501```php
11502// Section: No background property
11503<div style="padding:4px 0;">
11504
11505// Event: No background property
11506<div style="padding:4px 6px; ...">
11507```
11508
11509**Result**:
11510- Clean, dark Matrix aesthetic restored ✓
11511- Purple theme darker and more elegant ✓
11512- Professional theme still has its light grey sidebar bg ✓
11513- Events stand out with just color bars and borders ✓
11514
11515### What Changed:
11516
11517**Sections (Today/Tomorrow/Important)**:
11518- ❌ No more grey overlay
11519- ✓ Transparent background
11520- ✓ Colored borders & glows remain
11521
11522**Individual Events**:
11523- ❌ No more grey overlay
11524- ✓ Transparent background
11525- ✓ Colored bars & borders remain
11526
11527**Perfect! Back to the original clean dark look with future Important events!** ��
11528
11529## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR
11530
11531### �� Final Theme Polish
11532- **Fixed:** Today/Tomorrow/Important section shadows now match theme
11533- **Fixed:** Event description text color now uses theme dim color
11534
11535### Section Shadow Fix
11536
11537**Problem**: Sections always had green glow regardless of theme
11538
11539**Before**:
11540```php
11541// Hardcoded green:
11542box-shadow: 0 0 5px rgba(0, 204, 7, 0.2);
11543```
11544
11545**After**:
11546```php
11547// Theme-aware:
11548$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' :
11549                ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' :
11550                '0 2px 4px rgba(0, 0, 0, 0.1)');
11551```
11552
11553**Result**:
11554- **Matrix**: Green glow around sections ✓
11555- **Purple**: Purple glow around sections ✓
11556- **Professional**: Subtle grey shadow (no glow) ✓
11557
11558### Description Color Fix
11559
11560**Problem**: Description text always green in clicked day panel
11561
11562**Before**:
11563```javascript
11564color: #00aa00; // Always green
11565```
11566
11567**After**:
11568```javascript
11569color: themeColors.text_dim; // Theme dim color
11570```
11571
11572**Result**:
11573- **Matrix**: Dim green (#00aa00) ✓
11574- **Purple**: Dim purple (#8e7ab8) ✓
11575- **Professional**: Grey (#7f8c8d) ✓
11576
11577### Now 100% Theme Consistent
11578
11579Every single visual element respects theme:
11580- ✅ Sidebar background & border
11581- ✅ Header colors & shadows
11582- ✅ Week grid & cells
11583- ✅ Add Event button
11584- ✅ Section borders & **shadows** ← Fixed!
11585- ✅ Event titles & times
11586- ✅ Event **descriptions** ← Fixed!
11587- ✅ Clicked day panel
11588- ✅ Event bars & glows
11589
11590**Absolute perfection across all three themes!** ��✨
11591
11592## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND
11593
11594### �� Theme Improvements
11595- **Fixed:** Clicked day panel now uses correct theme colors
11596- **Changed:** Professional Blue background now light grey (not white)
11597- **Added:** Theme colors passed to JavaScript for dynamic rendering
11598
11599### Clicked Day Panel Theming
11600
11601**Before**: Always blue regardless of theme
11602```javascript
11603// Hardcoded blue:
11604color:#00cc07;  // Always green
11605background:#3498db;  // Always blue
11606```
11607
11608**After**: Theme-aware colors
11609```php
11610// PHP passes theme to JavaScript:
11611window.themeColors_XXX = {
11612    text_primary: '#00cc07' or '#b19cd9' or '#2c3e50',
11613    text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2',
11614    text_shadow: '0 0 3px ...' or '',
11615    event_bg: 'rgba(...)',
11616    border_color: 'rgba(...)',
11617    bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)'
11618};
11619
11620// JavaScript uses theme colors:
11621color: themeColors.text_primary;
11622background: themeColors.event_bg;
11623```
11624
11625**Result**:
11626- Matrix: Green panel with green glow ✓
11627- Purple: Purple panel with purple glow ✓
11628- Professional: Blue panel, no glow, clean ✓
11629
11630### Professional Theme Background Change
11631
11632**Before**: Almost white (#f5f7fa, #ffffff)
11633```php
11634'bg' => '#f5f7fa',           // Very light
11635'cell_bg' => '#ffffff',      // Pure white
11636```
11637
11638**After**: Light grey tones
11639```php
11640'bg' => '#e8ecf1',           // Soft grey-blue
11641'cell_bg' => '#f5f7fa',      // Light grey
11642'grid_bg' => '#d5dbe3',      // Medium grey
11643'cell_today_bg' => '#dce8f7' // Highlighted grey-blue
11644```
11645
11646**Visual Impact**:
11647- Sidebar: Light grey-blue background (#e8ecf1)
11648- Week cells: Lighter grey (#f5f7fa)
11649- Today cell: Highlighted blue-grey (#dce8f7)
11650- More depth and contrast ✓
11651- Professional appearance ✓
11652
11653### All Theme Elements Now Consistent
11654
11655**Matrix (Green)**:
11656- Sidebar: Dark (#242424)
11657- Clicked panel: Dark with green
11658- Text: Green with glow
11659
11660**Purple Dream**:
11661- Sidebar: Dark purple (#2a2030)
11662- Clicked panel: Dark with purple
11663- Text: Purple with glow
11664
11665**Professional Blue**:
11666- Sidebar: Light grey (#e8ecf1)
11667- Clicked panel: Light with blue
11668- Text: Dark grey, no glow
11669
11670**Perfect theme consistency everywhere!** ��
11671
11672## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING
11673
11674### �� Critical Fixes
11675- **Fixed:** Tomorrow events not loaded when outside current week
11676- **Fixed:** `&amp;` showing instead of `&` (double HTML encoding)
11677
11678### Issue 1: Tomorrow Not Loading
11679
11680**Problem**: Sidebar only loaded events for current week
11681- Today (Saturday): Week ends today
11682- Tomorrow (Sunday): Start of NEXT week
11683- Tomorrow events never loaded from data files!
11684
11685**Before**:
11686```php
11687// Only load current week
11688$end = new DateTime($weekEnd);
11689$end->modify('+1 day');
11690$period = new DatePeriod($start, $interval, $end);
11691// If tomorrow > weekEnd, it's not in period!
11692```
11693
11694**After**:
11695```php
11696// Check if tomorrow is outside week
11697$tomorrowDate = date('Y-m-d', strtotime('+1 day'));
11698if ($tomorrowDate > $weekEnd) {
11699    // Extend to include tomorrow
11700    $end = new DateTime($tomorrowDate);
11701}
11702$end->modify('+1 day');
11703$period = new DatePeriod($start, $interval, $end);
11704```
11705
11706**Result**: Tomorrow events now loaded even at week boundary! ✓
11707
11708### Issue 2: Double HTML Encoding
11709
11710**Problem**: `&` characters showing as `&amp;`
11711
11712**Cause**: Double encoding on line 2625 and 2681
11713```php
11714// Line 2625:
11715$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee &amp; Tea"
11716
11717// Line 2681:
11718$html .= htmlspecialchars($title); // "Coffee &amp; Tea" → "Coffee &amp;amp; Tea" ❌
11719```
11720
11721**Fixed**:
11722```php
11723// Line 2625:
11724$title = htmlspecialchars($event['title']); // Encode once
11725
11726// Line 2681:
11727$html .= $title; // Use already-encoded value ✓
11728```
11729
11730**Result**: `&` displays correctly! ✓
11731
11732### Both Fixes Critical
11733
11734These were **two separate bugs**:
117351. **Loading bug**: Tomorrow events not read from files
117362. **Display bug**: Double-encoding text
11737
11738Both needed fixing for Tomorrow section to work properly!
11739
11740## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY
11741
11742### �� Critical Fix
11743- **Fixed:** Tomorrow section missing when tomorrow is outside current week
11744- **Fixed:** Today section now always shows regardless of week boundaries
11745- **Changed:** Today/Tomorrow processed BEFORE week boundary checks
11746
11747### The Problem
11748
11749**Scenario**: Today is Saturday (last day of week)
11750- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today
11751- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week**
11752
11753**BROKEN Logic** (v4.2.2):
11754```php
11755foreach ($events as $dateKey => $dayEvents) {
11756    if ($dateKey < $weekStart) continue; // Skip old events
11757
11758    // ...week processing...
11759
11760    if ($dateKey === $tomorrowStr) {  // ← Never reached!
11761        $tomorrowEvents[] = $event;   //   Tomorrow > weekEnd
11762    }
11763}
11764```
11765
11766**Result**: Tomorrow events never added because loop skipped them! ❌
11767
11768### The Fix
11769
11770**Process Today/Tomorrow FIRST**:
11771```php
11772foreach ($events as $dateKey => $dayEvents) {
11773    $eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
11774
11775    foreach ($eventsWithConflicts as $event) {
11776        // ALWAYS process Today and Tomorrow first!
11777        if ($dateKey === $todayStr) {
11778            $todayEvents[] = $event; // ✓ Always shows
11779        }
11780        if ($dateKey === $tomorrowStr) {
11781            $tomorrowEvents[] = $event; // ✓ Always shows
11782        }
11783
11784        // THEN check week boundaries for grid
11785        if ($dateKey >= $weekStart && $dateKey <= $weekEnd) {
11786            $weekEvents[$dateKey][] = $event;
11787        }
11788
11789        // Important events still week-only
11790        if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
11791            $importantEvents[] = $event;
11792        }
11793    }
11794}
11795```
11796
11797### What Changed
11798
11799**Before**:
118001. Skip events < weekStart ❌
118012. Process week grid
118023. Try to add Today/Tomorrow ← **Failed if outside week**
118034. Add Important events
11804
11805**After**:
118061. **Always add Today events** ✓
118072. **Always add Tomorrow events** ✓
118083. Add to week grid if in range
118094. Add Important events if in range
11810
11811**Result**:
11812- Today section: ✓ Always shows
11813- Tomorrow section: ✓ Always shows (even at week boundary!)
11814- Week grid: ✓ Only current week
11815- Important: ✓ Only current week
11816
11817### Edge Cases Fixed
11818
11819**Saturday → Sunday transition**:
11820- Today (Sat): Shows in Today section ✓
11821- Tomorrow (Sun): Shows in Tomorrow section ✓
11822- Week grid: Only shows Sat (today) ✓
11823
11824**Sunday → Monday transition**:
11825- Today (Sun): Shows in Today section ✓
11826- Tomorrow (Mon): Shows in Tomorrow section ✓
11827- Week grid: Shows both Sun and Mon ✓
11828
11829**Perfect! Tomorrow section now always works!** ��
11830
11831## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY!
11832
11833### �� Corrected Week Options
11834- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!)
11835- **Changed:** Default is **Sunday** (US/Canada standard)
11836- **Fixed:** Day names array for Sunday start: S M T W T F S
11837
11838### �� Correct Week Start Options
11839
11840**Sunday Start** (Default):
11841- Grid shows: **S M T W T F S**
11842- Week: Sunday → Saturday
11843- US/Canada standard
11844- Most common worldwide
11845
11846**Monday Start**:
11847- Grid shows: **M T W T F S S**
11848- Week: Monday → Sunday
11849- ISO 8601 standard
11850- Common in Europe
11851
11852### Technical Changes
11853
11854**All References Updated**:
11855```php
11856// Changed from 'saturday' to 'sunday' in:
11857- Admin validation
11858- Week calculation logic
11859- Day names array
11860- Default value
11861- Comments
11862```
11863
11864**Sunday Calculation** (when today is Saturday):
11865```php
11866$today = date('w'); // 0=Sun, 6=Sat
11867if ($today == 0) {
11868    $weekStart = date('Y-m-d'); // Today!
11869} else {
11870    // Go back $today days to last Sunday
11871    $weekStart = date('Y-m-d', strtotime('-' . $today . ' days'));
11872}
11873```
11874
11875**Examples**:
11876- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7
11877- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14
11878
11879**Sorry for the confusion - it's Sunday not Saturday!** ��
11880
11881## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY
11882
11883### �� Critical Fix
11884- **Fixed:** Week calculation broken when today is Saturday
11885- **Fixed:** Events not showing in Today/Important sections
11886- **Fixed:** Week grid event bars missing
11887- **Changed:** Default week start is Saturday (matches main calendar)
11888
11889### Technical Details
11890
11891**The Bug**:
11892```php
11893// BROKEN (v4.2.0):
11894$weekStart = date('Y-m-d', strtotime('saturday this week'));
11895// When TODAY is Saturday, this is ambiguous and fails!
11896
11897// FIXED (v4.2.1):
11898$today = date('w'); // 0 (Sun) to 6 (Sat)
11899if ($today == 6) {
11900    $weekStart = date('Y-m-d'); // Today!
11901} else {
11902    $daysBack = ($today == 0) ? 1 : ($today + 1);
11903    $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days'));
11904}
11905$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days'));
11906```
11907
11908**Why It Failed**:
11909- `strtotime('saturday this week')` is ambiguous when run ON a Saturday
11910- PHP may interpret it as "next Saturday" or fail
11911- Result: Week range was wrong, events filtered out
11912
11913**The Fix**:
11914- Explicit calculation using day-of-week math
11915- Saturday (day 6): weekStart = today
11916- Sunday (day 0): weekStart = yesterday
11917- Monday-Friday: calculate days back to last Saturday
11918
11919**Result**: Works reliably every day of the week!
11920
11921**Default Changed**: Saturday start (was Monday in 4.2.0)
11922- Matches main calendar behavior
11923- Users can still switch to Monday in settings
11924
11925## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR
11926
11927### ✨ New Feature
11928- **Added:** Week start day selector in Themes tab
11929- **Added:** Choose between Monday (ISO standard) or Saturday week start
11930- **Added:** Week grid and all events now respect the selected start day
11931- **Changed:** Themes tab renamed to "Sidebar Widget Settings"
11932
11933### �� Week Start Options
11934
11935**Monday Start** (Default):
11936- Grid shows: M T W T F S S
11937- Week runs: Monday → Sunday
11938- ISO 8601 standard
11939- Common in Europe, most of world
11940
11941**Saturday Start**:
11942- Grid shows: S S M T W T F
11943- Week runs: Saturday → Friday
11944- Common in Middle East
11945- Sabbath-observant communities
11946
11947### Technical Details
11948
11949**Configuration**:
11950```php
11951// Saved in: data/meta/calendar_week_start.txt
11952// Values: 'monday' or 'saturday'
11953
11954// Week calculation:
11955if ($weekStartDay === 'saturday') {
11956    $weekStart = date('Y-m-d', strtotime('saturday this week'));
11957    $weekEnd = date('Y-m-d', strtotime('friday next week'));
11958} else {
11959    $weekStart = date('Y-m-d', strtotime('monday this week'));
11960    $weekEnd = date('Y-m-d', strtotime('sunday this week'));
11961}
11962```
11963
11964**Day Names Array**:
11965```php
11966// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S']
11967// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F']
11968```
11969
11970**What Changes**:
11971- Week grid day letters
11972- Week grid date sequence
11973- Today/Tomorrow/Important event date ranges
11974- Week event grouping
11975
11976**What Stays Same**:
11977- All themes still work
11978- Event data unchanged
11979- Main calendar unaffected
11980
11981### How to Change:
11982
119831. Admin → Calendar → �� Themes tab
119842. Under "Week Start Day" section
119853. Select Monday or Saturday
119864. Click "Save Settings"
119875. Refresh sidebar to see changes
11988
11989**Perfect for international users or religious observances!** ��
11990
11991## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS
11992
11993### ��️ Calendar Improvements
11994- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar)
11995- **Changed:** Event section backgrounds much lighter (almost white)
11996- **Changed:** Individual event backgrounds lighter and more readable
11997- **Changed:** Event borders now theme-colored
11998
11999### Technical Details
12000
12001**Week Start Change**:
12002```php
12003// Before:
12004$weekStart = date('Y-m-d', strtotime('monday this week'));
12005$weekEnd = date('Y-m-d', strtotime('sunday this week'));
12006$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
12007
12008// After:
12009$weekStart = date('Y-m-d', strtotime('sunday this week'));
12010$weekEnd = date('Y-m-d', strtotime('saturday this week'));
12011$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
12012```
12013
12014**Background Colors**:
12015```php
12016// Section backgrounds (Today, Tomorrow, Important):
12017Matrix: rgba(255, 255, 255, 0.05)    // Very light overlay
12018Purple: rgba(255, 255, 255, 0.08)    // Slightly lighter
12019Professional: rgba(255, 255, 255, 0.95)  // Almost white!
12020
12021// Individual event backgrounds:
12022Matrix: rgba(255, 255, 255, 0.03)    // Subtle
12023Purple: rgba(255, 255, 255, 0.05)    // Light
12024Professional: rgba(255, 255, 255, 0.5)   // Semi-transparent white
12025```
12026
12027**Event Borders**:
12028```php
12029Matrix: rgba(0, 204, 7, 0.2)         // Green
12030Purple: rgba(155, 89, 182, 0.2)      // Purple
12031Professional: rgba(74, 144, 226, 0.2) // Blue
12032```
12033
12034### Visual Result:
12035
12036**Before**: Dark backgrounds made text hard to read
12037**After**: Light backgrounds make events pop and text very readable
12038
12039**Week Grid**:
12040```
12041Before: [M][T][W][T][F][S][S]
12042After:  [S][M][T][W][T][F][S]  ← Now matches main calendar!
12043```
12044
12045## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS
12046
12047### �� Final Theme Polish
12048- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors
12049- **Fixed:** Event times now use theme bright color
12050- **Fixed:** Event dates use theme dim color
12051- **Fixed:** Task checkboxes use theme bright color
12052- **Fixed:** Event color bars use theme-appropriate shadows
12053- **Fixed:** No text shadows on Professional theme
12054
12055### Technical Details
12056
12057**Event Text Colors**:
12058```php
12059// Matrix:
12060- Title: #00cc07 (green)
12061- Time: #00dd00 (bright green)
12062- Date: #00aa00 (dim green)
12063- Text shadow: 0 0 3px (glow)
12064
12065// Purple:
12066- Title: #b19cd9 (lavender)
12067- Time: #d4a5ff (bright purple)
12068- Date: #8e7ab8 (dim purple)
12069- Text shadow: 0 0 3px (glow)
12070
12071// Professional:
12072- Title: #2c3e50 (dark grey)
12073- Time: #4a90e2 (blue)
12074- Date: #7f8c8d (grey)
12075- Text shadow: none (clean)
12076```
12077
12078**Color Bar Shadows**:
12079```php
12080// Matrix & Purple: Glow effect
12081box-shadow: 0 0 3px [event-color];
12082
12083// Professional: Subtle shadow
12084box-shadow: 0 1px 2px rgba(0,0,0,0.2);
12085```
12086
12087### What's Now Fully Themed:
12088
12089✅ Sidebar background & border
12090✅ Header (clock box) background, border, text
12091✅ Week grid background, borders, cells
12092✅ Week grid day letters & numbers
12093✅ Week grid event bars & "+N more" text
12094✅ Add Event button background & text
12095Today/Tomorrow/Important event titles
12096✅ Event times
12097✅ Event dates (Important section)
12098✅ Task checkboxes
12099✅ Event color bars
12100✅ All text shadows (glow vs none)
12101
12102**Every single element now respects the theme!** ��
12103
12104## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION
12105
12106### �� Theme Improvements
12107- **Fixed:** Week calendar grid now uses theme colors (purple/blue)
12108- **Fixed:** Add Event button now uses theme colors
12109- **Fixed:** Clock box border now matches theme
12110- **Fixed:** All text shadows respect theme (no glow on professional)
12111- **Fixed:** Event bars use theme-appropriate shadows
12112
12113### Technical Details
12114
12115**Week Grid Theming**:
12116```php
12117// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders
12118// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders
12119// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders
12120```
12121
12122**Add Event Button**:
12123```php
12124// Matrix: Dark green (#006400) with bright green text
12125// Purple: Purple (#7d3c98) with lavender text
12126// Professional: Blue (#3498db) with white text
12127```
12128
12129**Text Shadows**:
12130```php
12131// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color)
12132// Professional: No glow (clean look)
12133```
12134
12135**CSS Overrides**:
12136```css
12137/* Purple theme */
12138.sidebar-purple .eventlist-today-header {
12139    border-color: #9b59b6;
12140    box-shadow: 0 0 8px rgba(155, 89, 182, 0.2);
12141}
12142
12143/* Professional theme */
12144.sidebar-professional .eventlist-today-header {
12145    border-color: #4a90e2;
12146    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
12147}
12148```
12149
12150### What Changed Per Theme:
12151
12152**Purple Dream**:
12153- Week grid: Purple borders and dark purple background
12154- Add Event: Purple button with lavender text
12155- Clock box: Purple border with purple glow
12156- Event bars: Purple glow instead of green
12157- All text: Purple/lavender shades
12158
12159**Professional Blue**:
12160- Week grid: Blue borders and light grey background
12161- Add Event: Blue button with white text
12162- Clock box: Blue border with subtle shadow (no glow)
12163- Event bars: Subtle shadows (no glow)
12164- All text: Dark grey and blue shades
12165
12166**Matrix Edition**: Unchanged (still perfect green theme!)
12167
12168## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING
12169
12170### ✨ New Features
12171- **Added:** �� Themes tab in admin for sidebar widget theming
12172- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey)
12173- **Added:** Theme selector with live previews
12174- **Added:** Theme persistence across page loads
12175
12176### �� Available Themes
12177
12178**Matrix Edition** (Default):
12179- Dark background (#242424)
12180- Green accents (#00cc07)
12181- Neon glow effects
12182- Original Matrix styling
12183
12184**Purple Dream**:
12185- Dark purple background (#2a2030)
12186- Purple/violet accents (#9b59b6)
12187- Elegant purple glow
12188- Rich purple color scheme
12189
12190**Professional Blue**:
12191- Light grey background (#f5f7fa)
12192- Blue accents (#4a90e2)
12193- Clean professional look
12194- Subtle shadows instead of glow
12195
12196### �� Bug Fix
12197- **Fixed:** Tooltips now go UP and to the LEFT (was going right)
12198- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px`
12199
12200### Technical Details
12201
12202**Theme System**:
12203```php
12204// Saved in: data/meta/calendar_theme.txt
12205// Applied dynamically in syntax.php
12206$theme = $this->getSidebarTheme();  // 'matrix', 'purple', or 'professional'
12207$styles = $this->getSidebarThemeStyles($theme);
12208
12209// Styles include:
12210- bg, border, shadow
12211- header_bg, header_border, header_shadow
12212- text_primary, text_bright, text_dim
12213- grid_bg, grid_border
12214- cell_bg, cell_today_bg
12215```
12216
12217**Theme Changes**:
12218- Header background gradient
12219- Border colors
12220- Text colors
12221- Shadow/glow effects
12222- Grid colors
12223
12224**How to Change**:
122251. Admin → Calendar → �� Themes tab
122262. Select desired theme
122273. Click "Save Theme"
122284. Refresh page to see changes
12229
12230### Notes
12231- Themes only affect sidebar widget appearance
12232- Main calendar view unchanged
12233- Theme setting stored in `data/meta/calendar_theme.txt`
12234- Safe to switch themes - no data affected
12235
12236## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING
12237
12238### �� Bug Fixes
12239- **Fixed:** Events now sort chronologically by time (was using string comparison)
12240- **Fixed:** Tooltip positioning using JavaScript like system tooltips
12241- **Fixed:** All-day events appear first, then events in time order
12242
12243### Technical Details
12244
12245**Event Sorting Fix**:
12246```php
12247// BROKEN (v4.0.9):
12248return strcmp($aTime, $bTime);
12249// String comparison: "10:00" < "8:00" because "1" < "8"
12250// Result: 10:00 AM shown BEFORE 8:00 AM ❌
12251
12252// FIXED (v4.1.0):
12253$aMinutes = $this->timeToMinutes($aTime);  // 8:00 = 480
12254$bMinutes = $this->timeToMinutes($bTime);  // 10:00 = 600
12255return $aMinutes - $bMinutes;
12256// Result: 8:00 AM shown BEFORE 10:00 AM ✓
12257```
12258
12259**Example Before Fix**:
12260```
12261�� Weekend Ticket Duty (all-day)
122628:00 AM START TICKETS
1226310:00 AM Soul Winning    ← Wrong!
122649:45 AM Coffee           ← Should be before 10:00 AM
12265```
12266
12267**Example After Fix**:
12268```
12269�� Weekend Ticket Duty (all-day)
122708:00 AM START TICKETS
122719:45 AM Coffee           ← Correct!
1227210:00 AM Soul Winning
12273```
12274
12275**Tooltip Positioning**:
12276- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()`
12277- Uses CSS custom properties `--tooltip-left` and `--tooltip-top`
12278- Positioned on `mouseenter` event
12279- Matches system tooltip implementation (no cutoff)
12280
12281**JavaScript Implementation**:
12282```javascript
12283element.addEventListener("mouseenter", function() {
12284    const rect = element.getBoundingClientRect();
12285    element.style.setProperty("--tooltip-left", (rect.right - 10) + "px");
12286    element.style.setProperty("--tooltip-top", (rect.top - 30) + "px");
12287});
12288```
12289
12290**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically!
12291
12292## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX
12293
12294### �� UI Improvements
12295- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge
12296- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar
12297- **Changed:** Main calendar conflict tooltip now much smaller (was too big)
12298
12299### Technical Details
12300
12301**Sidebar Overflow Fix**:
12302```php
12303// Before (line 2005):
12304style="...overflow:hidden..."  // ← Blocked tooltips!
12305
12306// After:
12307style="...overflow:visible..."  // ← Tooltips extend beyond!
12308```
12309
12310**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important`
12311
12312**Main Calendar Tooltip Size**:
12313```css
12314/* Before: */
12315.conflict-tooltip {
12316    border: 2px solid #ff9800;
12317    border-radius: 6px;
12318    padding: 8px 12px;
12319    font-size: 12px;
12320    min-width: 200px;
12321    max-width: 350px;
12322}
12323
12324/* After: */
12325.conflict-tooltip {
12326    border: 1px solid #ff9800;  /* Thinner */
12327    border-radius: 3px;          /* Smaller */
12328    padding: 4px 8px;            /* Less padding */
12329    font-size: 10px;             /* Smaller header */
12330    min-width: 120px;            /* Narrower */
12331    max-width: 200px;            /* Narrower */
12332}
12333
12334.conflict-tooltip-body {
12335    padding: 6px 8px;  /* Was 10px 12px */
12336    font-size: 9px;    /* Was 11px */
12337    line-height: 1.4;  /* Was 1.6 */
12338}
12339
12340.conflict-item {
12341    padding: 2px 0;  /* Was 4px */
12342    font-size: 9px;  /* Added smaller font */
12343}
12344```
12345
12346**Result**:
12347- Main calendar tooltip ~50% smaller
12348- Sidebar tooltips now extend beyond borders
12349- Both tooltips compact and readable
12350
12351## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP
12352
12353### �� Bug Fix
12354- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text)
12355- **Changed:** Using HTML entity `&#10;` for newlines instead of `\n`
12356
12357### Technical Details
12358
12359**The Problem**:
12360```php
12361// Before (v4.0.7):
12362$conflictTooltip = 'Conflicts with:\n';  // Literal \n showed in tooltip
12363
12364// Displayed as:
12365"Conflicts with:\n• Event 1\n• Event 2"  // ← Literal backslash-n
12366```
12367
12368**The Fix**:
12369```php
12370// After (v4.0.8):
12371$conflictTooltip = "Conflicts with:&#10;";  // HTML entity for newline
12372
12373// Displays as:
12374Conflicts with:
12375• Event 1
12376• Event 2
12377```
12378
12379**Why `&#10;` Works**:
12380- HTML entity for line feed character
12381- Works in data attributes
12382- CSS `white-space: pre-line` preserves the newlines
12383- Renders as actual line breaks in tooltip
12384
12385**Applied to**:
12386- PHP rendering (sidebar Today/Tomorrow/Important)
12387- JavaScript rendering (clicked day events)
12388
12389## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX
12390
12391### �� UI Improvements
12392- **Changed:** Tooltip size reduced significantly (much more compact)
12393- **Fixed:** Tooltip now overflows sidebar borders (not cut off)
12394- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px)
12395- **Changed:** Narrower width (120-200px vs 200-300px)
12396
12397### Technical Details
12398
12399**Tooltip Size Reduction**:
12400```css
12401/* Before (v4.0.6):
12402padding: 6px 10px;
12403font-size: 11px;
12404min-width: 200px;
12405max-width: 300px;
12406
12407/* After (v4.0.7): */
12408padding: 3px 6px;
12409font-size: 9px;
12410min-width: 120px;
12411max-width: 200px;
12412```
12413
12414**Overflow Fix**:
12415```css
12416/* Allow tooltip to extend beyond sidebar */
12417.sidebar-widget,
12418.sidebar-matrix {
12419    overflow: visible !important;
12420}
12421
12422/* Position tooltip outside */
12423[data-tooltip]:before {
12424    bottom: 120%;  /* Further above */
12425    right: -10px;  /* Can extend beyond edge */
12426    z-index: 10000; /* Always on top */
12427}
12428```
12429
12430**Visual Result**:
12431- Tooltip is ~40% smaller
12432- Extends beyond sidebar border if needed
12433- Still readable, just more compact
12434- Better for small screens
12435
12436## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING
12437
12438### �� Critical Fix
12439- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly
12440- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names
12441- **Fixed:** Events without end time now treated as zero-duration (not +1 hour)
12442- **Fixed:** Now matches what you see in main calendar view
12443
12444### ✨ UI Improvement
12445- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right)
12446- **Added:** Custom CSS tooltip with data-tooltip attribute
12447- **Improved:** Better tooltip positioning - doesn't overflow screen edges
12448
12449### Technical Details
12450
12451**The Problem - Field Name Mismatch**:
12452```php
12453// Main calendar (line 697):
12454$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase)
12455
12456// Sidebar (before fix):
12457$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case)
12458```
12459
12460**The Problem - Duration Logic**:
12461```php
12462// Main calendar (line 697):
12463$end1 = isset($evt1['endTime']) && !empty($evt1['endTime'])
12464    ? $evt1['endTime']
12465    : $evt1['time'];  // ← Uses START time (zero duration)
12466
12467// Sidebar (before fix):
12468$endTime = ... ? ... : $this->addHoursToTime($startTime, 1);  // ← Added 1 hour!
12469```
12470
12471**The Fix**:
12472```php
12473// Now checks BOTH field names:
12474if (isset($event['end_time']) && $event['end_time'] !== '') {
12475    $endTime = $event['end_time'];
12476} elseif (isset($event['endTime']) && $event['endTime'] !== '') {
12477    $endTime = $event['endTime'];
12478} else {
12479    $endTime = $startTime;  // ← Matches main calendar!
12480}
12481```
12482
12483**Tooltip Positioning**:
12484- Uses `data-tooltip` attribute instead of `title`
12485- CSS positions tooltip ABOVE badge (`bottom: 100%`)
12486- Aligns to RIGHT edge (`right: 0`)
12487- Arrow points down to badge
12488- Black background with white text
12489- Max width 300px
12490
12491### Example
12492
12493**6:00 PM Evening Service** (no end time):
12494- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌
12495- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar!
12496
12497**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**:
12498- Zero-duration events at 6:00 PM don't overlap with anything
12499- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict
12500
12501**Tooltip appears**:
12502```
12503        ┌────────────────────┐
12504        │ Conflicts with:    │
12505        │ • Super Bowl       │
12506        │   (3:30 PM-7:00 PM)│
12507        └─────────┬──────────┘
125081250912510```
12511
12512## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING
12513
12514### �� Bug Fix
12515- **Fixed:** Events without end_time now properly get 1-hour default duration
12516- **Fixed:** Empty string end_time values now treated as missing (was causing issues)
12517- **Improved:** More robust checking for `end_time` field (checks both isset and not empty)
12518
12519### Technical Details
12520
12521**The Problem**:
12522```php
12523// Before (broken):
12524$endTime = isset($event['end_time']) ? $event['end_time'] : default;
12525
12526// If end_time exists but is empty string "":
12527isset($event['end_time']) = TRUE
12528$endTime = ""  // ← Empty string, not default!
12529```
12530
12531**The Fix**:
12532```php
12533// After (fixed):
12534$endTime = (isset($event['end_time']) && $event['end_time'] !== '')
12535    ? $event['end_time']
12536    : $this->addHoursToTime($startTime, 1);
12537
12538// Now empty string gets the default 1-hour duration
12539```
12540
12541**Why This Matters**:
12542Events 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.
12543
12544**Example**:
12545```
12546Super Bowl: 3:30 PM - 7:00 PM
12547Evening Service: 6:00 PM - ??? (should be 7:00 PM)
12548
12549If end_time = "" (empty string):
12550  Old code: Uses "" → conflict detection fails
12551  New code: Uses 7:00 PM → conflict detected ✓
12552```
12553
12554### Testing
12555If you're still not seeing the conflict on the 6:00 PM service:
125561. Check if the event has `end_time` set in the JSON
125572. Clear cache (Admin → Manage Events → Clear Cache)
125583. The conflict should now appear
12559
12560## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS
12561
12562### ✨ Feature Added
12563- **Added:** Hover over ⚠ badge to see which events are conflicting
12564- **Added:** Tooltip shows conflicting event titles and times
12565- **Added:** Works in both sidebar sections and clicked day events
12566
12567### Technical Details
12568
12569**Conflict Tracking Enhanced**:
12570```php
12571// Now tracks WHICH events conflict:
12572$event['conflictingWith'] = [
12573    ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'],
12574    ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30']
12575];
12576```
12577
12578**Tooltip Format**:
12579```
12580Conflicts with:
12581• Meeting (10:00 AM-11:00 AM)
12582• Call (10:30 AM-11:30 PM)
12583```
12584
12585**Where It Works**:
12586- ✅ Today section (sidebar)
12587- ✅ Tomorrow section (sidebar)
12588- ✅ Important Events section (sidebar)
12589- ✅ Clicked day events (week grid)
12590
12591**Cursor**: Changes to `help` cursor on hover to indicate tooltip
12592
12593### Note on Multi-Day Events
12594The 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.
12595
12596## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC
12597
12598### �� Bug Fixes
12599- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections
12600- **Fixed:** Important Events now shows events even if they're today or tomorrow
12601- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular)
12602
12603### Technical Details
12604
12605**Conflict Badge Issue**:
12606```php
12607// BROKEN (line 2511):
12608$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']);
12609// ↑ Checking 'conflicts' (plural)
12610
12611// But detectTimeConflicts() sets:
12612$event['conflict'] = true/false;
12613// ↑ Setting 'conflict' (singular)
12614
12615// FIXED:
12616$hasConflict = isset($event['conflict']) && $event['conflict'];
12617```
12618
12619**Result**: Badge now shows for ALL conflicting events in sidebar sections
12620
12621**Important Events Logic Issue**:
12622```php
12623// BROKEN:
12624if ($dateKey === $todayStr) {
12625    $todayEvents[] = ...;
12626} elseif ($dateKey === $tomorrowStr) {
12627    $tomorrowEvents[] = ...;
12628} else {  // ← Only checked if NOT today/tomorrow!
12629    if ($isImportant) {
12630        $importantEvents[] = ...;
12631    }
12632}
12633
12634// FIXED:
12635if ($dateKey === $todayStr) {
12636    $todayEvents[] = ...;
12637}
12638if ($dateKey === $tomorrowStr) {
12639    $tomorrowEvents[] = ...;
12640}
12641// ↑ Changed to separate 'if' statements
12642if ($isImportant && $dateKey in this week) {
12643    $importantEvents[] = ...;  // ← Now includes today/tomorrow too!
12644}
12645```
12646
12647**Result**: Important namespace events now show in Important section even if they're today or tomorrow
12648
12649### Conflict Badge Display
12650- Simplified to just ⚠ icon (no count)
12651- Orange color (#ff9800)
12652- 10px font size
12653- Hover shows "Time conflict detected"
12654
12655## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY
12656
12657### �� Bug Fix
12658- **Fixed:** Important Events section now displays all events correctly
12659- **Fixed:** Single-event days now get conflict flag (was returning early without flag)
12660- **Fixed:** Conflict detection no longer causes events to disappear from Important section
12661
12662### Technical Details
12663
12664**The Problem**:
12665- `detectTimeConflicts()` returned early if only 1 event on a day
12666- Returned original array without adding 'conflict' field
12667- This inconsistency caused issues in event categorization
12668
12669**The Solution**:
12670```php
12671// Before (broken):
12672if (empty($dayEvents) || count($dayEvents) < 2) {
12673    return $dayEvents;  // No 'conflict' field added!
12674}
12675
12676// After (fixed):
12677if (count($dayEvents) === 1) {
12678    return [array_merge($dayEvents[0], ['conflict' => false])];  // Always add flag
12679}
12680```
12681
12682**Result**:
12683- All events now have 'conflict' field consistently
12684- Single events: conflict = false
12685- Multiple events: conflict = true/false based on overlap
12686- Important Events section displays correctly
12687
12688## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES
12689
12690### �� Bug Fixes
12691- **Fixed:** Conflict badge (⚠) now displays in clicked day events
12692- **Fixed:** Recurring events edit now updates time and end_time correctly
12693- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit
12694
12695### ✨ Features Added
12696- **Added:** Time conflict detection for overlapping events
12697- **Added:** detectTimeConflicts() function checks all events on same day
12698- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions
12699- **Added:** Events now have 'conflict' flag set automatically
12700
12701### �� UI Changes
12702- **Changed:** Admin tab order: �� Manage Events (first), �� Update Plugin, ⚙️ Outlook Sync
12703- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin")
12704- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars)
12705
12706### Technical Details
12707
12708**Conflict Detection**:
12709```php
12710// Automatically detects overlapping events on same day
12711// Sets 'conflict' flag to true if event overlaps with another
12712$eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
12713```
12714
12715**Logic**:
12716- All-day events never conflict (no time set)
12717- Timed events check for overlap with other timed events
12718- Overlap = start1 < end2 AND start2 < end1
12719- Default duration is 60 minutes if no end_time
12720
12721**Recurring Events Fix**:
12722- Old: Updated `$event['start']` and `$event['end']` (wrong fields)
12723- New: Updates `$event['time']` and `$event['end_time']` (correct fields)
12724- Now edits actually save and update the events
12725
12726**Week View Bars**:
12727- Shows 4 colored bars instead of 3
12728- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc.
12729
12730## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE ��
12731
12732**Major Release**: Complete Matrix-themed calendar plugin with advanced features!
12733
12734### �� Major Features
12735
12736#### Sidebar Widget
12737- **Week Grid**: Interactive 7-day calendar with click-to-view events
12738- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips
12739- **Live Clock**: Updates every second with date display
12740- **Real-time Weather**: Geolocation-based temperature with icon
12741- **Event Sections**: Today (orange), Tomorrow (green), Important (purple)
12742- **Add Event Button**: Dark green bar opens full event creation dialog
12743- **Matrix Theme**: Green glow effects throughout
12744
12745#### Event Management
12746- **Single Color Bars**: Clean 3px bars showing event's assigned color
12747- **All-Day Events First**: Then sorted chronologically by time
12748- **Conflict Detection**: Orange ⚠ badge on overlapping events
12749- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//)
12750- **HTML Rendering**: Pre-rendered for JavaScript display
12751- **Click-to-View**: Click week grid days to expand event details
12752
12753#### Admin Interface
12754- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button
12755- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings
12756- **Manage Events Tab**: Browse, edit, delete, move events across namespaces
12757
12758#### Outlook Sync
12759- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook
12760- **Category Mapping**: Map colors to Outlook categories
12761- **Conflict Resolution**: Time conflict detection
12762- **Import/Export Config**: Encrypted configuration files
12763
12764### �� Design
12765- **Matrix Theme**: Authentic green glow aesthetic
12766- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections
12767- **Color Scheme**:
12768  - Today: Orange #ff9800
12769  - Tomorrow: Green #4caf50
12770  - Important: Purple #9b59b6
12771  - Add Event: Dark green #006400
12772  - System bars: Green/Purple/Orange
12773
12774### �� Technical Highlights
12775- **Zero-margin Design**: Perfect flush alignment throughout
12776- **Flexbox Layout**: Modern, responsive structure
12777- **AJAX Operations**: No page reloads needed
12778- **Smart Sorting**: All-day events first, then chronological
12779- **Tooltip System**: Detailed stats on hover (working correctly)
12780- **Event Dialog**: Full form with drag support
12781- **Cache Management**: One-click cache clearing
12782
12783### �� Breaking Changes from v3.x
12784- Removed dual color bars (now single event color bar only)
12785- Add Event button moved to between header and week grid
12786- All-day events now appear FIRST (not last)
12787- Update Plugin tab is now the default admin tab
12788
12789### �� Bug Fixes (v3.10.x → v4.0.0)
12790- ✅ Fixed color bars not showing (align-self:stretch vs height:100%)
12791- ✅ Fixed tooltip function naming (sanitized calId for JavaScript)
12792- ✅ Fixed weather display (added updateWeather function)
12793- ✅ Fixed HTML rendering in events (title_html/description_html fields)
12794- ✅ Fixed Add Event dialog (null check for calendar element)
12795- ✅ Fixed text positioning in Add Event button
12796- ✅ Fixed spacing throughout sidebar widget
12797
12798### �� Complete Feature List
12799- Full calendar view (month grid)
12800- Sidebar widget (week view)
12801- Event panel (standalone)
12802- Event list (date ranges)
12803- Namespace support
12804- Color coding
12805- Time conflict detection
12806- DokuWiki syntax in events
12807- Outlook synchronization
12808- System monitoring
12809- Weather display
12810- Live clock
12811- Admin interface
12812- Cache management
12813- Draggable dialogs
12814- AJAX save/edit/delete
12815- Import/export config
12816
12817### �� Usage
12818
12819**Sidebar Widget**:
12820```
12821{{calendar sidebar}}
12822{{calendar sidebar namespace=team}}
12823```
12824
12825**Full Calendar**:
12826```
12827{{calendar}}
12828{{calendar year=2026 month=6 namespace=team}}
12829```
12830
12831**Event Panel**:
12832```
12833{{eventpanel}}
12834```
12835
12836**Event List**:
12837```
12838{{eventlist daterange=2026-01-01:2026-01-31}}
12839```
12840
12841### �� Stats
12842- **40+ versions** developed during v3.x iterations
12843- **3.10.0 → 3.11.4**: Polish and refinement
12844- **4.0.0**: Production-ready Matrix Edition
12845
12846### �� Credits
12847Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration.
12848
12849---
12850
12851## Previous Versions (v3.11.4 and earlier)
12852
12853## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING
12854- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px)
12855- **Improved:** Small breathing room between system stats bars and Add Event button
12856- **Visual:** Better spacing for cleaner appearance
12857
12858### CSS Change:
12859**eventlist-today-header**:
12860- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px`
12861
12862### Visual Result:
12863```
12864│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats bars
12865│                       │  ← 2px space (restored)
12866├───────────────────────┤
12867│  + ADD EVENT          │  ← Add Event bar
12868├───────────────────────┤
12869```
12870
12871**Before (v3.11.3)**: No space, bars directly touch Add Event button
12872**After (v3.11.4)**: 2px breathing room for better visual hierarchy
12873
12874## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION
12875- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset
12876- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error
12877- **Changed:** Add Event text moved up 1px (position:relative; top:-1px)
12878- **Changed:** Line-height reduced from 12px to 10px for better text centering
12879- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets
12880
12881### JavaScript Fix:
12882**Problem**: Line 1084-1085 in calendar-main.js
12883```javascript
12884const calendar = document.getElementById(calId);
12885const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error!
12886```
12887
12888**Solution**: Added null check
12889```javascript
12890const calendar = document.getElementById(calId);
12891const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null;
12892```
12893
12894**Why This Happened**:
12895- Regular calendar has element with id=calId
12896- Sidebar widget doesn't have this element (different structure)
12897- Code tried to read .dataset on null, causing error
12898
12899### Text Position Fix:
12900**Before**:
12901- line-height: 12px
12902- vertical-align: middle
12903- Text slightly low
12904
12905**After**:
12906- line-height: 10px
12907- position: relative; top: -1px
12908- Text perfectly centered
12909
12910### What Works Now:
12911✅ Click "+ ADD EVENT" in sidebar → Dialog opens
12912✅ No console errors
12913✅ Text properly centered vertically
12914✅ Form pre-filled with today's date
12915✅ Save works correctly
12916
12917## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR
12918- **Added:** Event dialog to sidebar widget (same as regular calendar)
12919- **Changed:** Add Event button now opens proper event form dialog
12920- **Added:** renderEventDialog() called in renderSidebarWidget()
12921- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date
12922- **Improved:** Can now add events directly from sidebar widget
12923
12924### Add Event Button Behavior:
12925**Before (v3.11.1)**: Showed alert with instructions
12926**After (v3.11.2)**: Opens full event creation dialog
12927
12928**Dialog Features**:
12929- Date field (defaults to today)
12930- Title field (required)
12931- Time field (optional)
12932- End time field (optional)
12933- Color picker
12934- Category field
12935- Description field
12936- Save and Cancel buttons
12937- Draggable dialog
12938
12939### Technical Changes:
12940- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget()
12941- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')`
12942- Dialog uses same structure as regular calendar
12943- Uses existing openAddEvent() and saveEventCompact() JavaScript functions
12944
12945### User Flow:
129461. User clicks "+ ADD EVENT" green bar
129472. Event dialog opens with today's date pre-filled
129483. User fills in event details
129494. User clicks Save
129505. Event saved via AJAX
129516. Dialog closes
129527. Sidebar refreshes to show new event
12953
12954## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG
12955- **Fixed:** Removed bottom padding from header (was 2px, now 0)
12956- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0)
12957- **Fixed:** Add Event bar now flush against header with zero gap
12958- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin
12959- **Improved:** Alert provides clear instructions on how to add events
12960
12961### CSS Changes:
12962**eventlist-today-header**:
12963- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom)
12964
12965**eventlist-stats-container**:
12966- `margin-top: 2px` → `margin: 0` (removed all margins)
12967
12968### Add Event Button Behavior:
12969**Before**: Clicked → Navigated to Admin → Manage Events tab
12970**After**: Clicked → Shows alert with instructions
12971
12972**Alert Message**:
12973```
12974To add an event, go to:
12975Admin → Calendar Management → Manage Events tab
12976or use the full calendar view {{calendar}}
12977```
12978
12979### Visual Result:
12980```
12981│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats (no margin-bottom)
12982├────────────────────────┤
12983│  + ADD EVENT           │  ← Perfectly flush!
12984├────────────────────────┤
12985```
12986
12987No gaps, perfectly aligned!
12988
12989## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE
12990- **Moved:** Add Event bar back to original position (between header and week grid)
12991- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff)
12992- **Changed:** Letter spacing reduced from 0.5px to 0.4px
12993- **Fixed:** Text now fully visible without being cut off
12994- **Final:** Optimal position and size determined
12995
12996### Final Layout:
12997```
12998┌─────────────────────────────┐
12999│  Clock | Weather | Stats    │  ← Header
13000├─────────────────────────────┤
13001│  + ADD EVENT                 │  ← Bar (back here, smaller text)
13002├─────────────────────────────┤
13003│  M  T  W  T  F  S  S        │  ← Week Grid
13004│  3  4  5  6  7  8  9        │
13005├─────────────────────────────┤
13006│  Today                       │  ← Event sections
13007└─────────────────────────────┘
13008```
13009
13010### Text Size Changes:
13011**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off
13012**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible
13013
13014### Why This Position:
13015- Separates header from calendar
13016- Natural action point after viewing stats
13017- Users see stats → decide to add event → view calendar
13018- Consistent with original design intent
13019
13020## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID
13021- **Moved:** Add Event bar repositioned from between header/grid to below week grid
13022- **Improved:** Better visual flow - header → stats → grid → add button → events
13023- **Changed:** Add Event bar now acts as separator between calendar and event sections
13024
13025### New Layout:
13026```
13027┌─────────────────────────────┐
13028│  Clock | Weather | Stats    │  ← Header
13029├─────────────────────────────┤
13030│  M  T  W  T  F  S  S        │  ← Week Grid
13031│  3  4  5  6  7  8  9        │
13032├─────────────────────────────┤
13033│  + ADD EVENT                 │  ← Add bar (moved here!)
13034├─────────────────────────────┤
13035│  Today                       │  ← Event sections
13036│  Tomorrow                    │
13037│  Important Events            │
13038└─────────────────────────────┘
13039```
13040
13041### Visual Flow:
13042**Before (v3.10.8)**:
130431. Header (clock, weather, stats)
130442. **+ ADD EVENT** bar
130453. Week grid
130464. Event sections
13047
13048**After (v3.10.9)**:
130491. Header (clock, weather, stats)
130502. Week grid (calendar days)
130513. **+ ADD EVENT** bar
130524. Event sections
13053
13054### Benefits:
13055- Natural reading flow: View calendar → Add event → See events
13056- Add button positioned between calendar and event list
13057- Acts as visual separator
13058- More logical action placement
13059
13060## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR
13061- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color
13062- **Changed:** Events now display with single 3px color bar (event's assigned color only)
13063- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly
13064- **Simplified:** Cleaner visual with one color bar instead of two
13065- **Improved:** More space for event content without extra bar
13066
13067### Visual Changes:
13068
13069**Before (v3.10.7)** - Dual color bars:
13070```
13071├─ [Orange][Green]  Event Title
13072├─ [Blue][Purple]   Event Title
13073```
13074
13075**After (v3.10.8)** - Single color bar:
13076```
13077├─ [Green]  Event Title    ← Only event color!
13078├─ [Purple] Event Title    ← Only event color!
13079```
13080
13081### Add Bar Changes:
13082- Added `margin:0` to eliminate gaps
13083- Now flush against header (no space above)
13084- Now flush against week grid (no space below)
13085- Perfect seamless connection
13086
13087### Technical Changes:
13088**renderSidebarEvent()**:
13089- Removed section color bar (4px)
13090- Kept only event color bar (3px)
13091
13092**showDayEvents() JavaScript**:
13093- Removed section color bar (4px blue)
13094- Kept only event color bar (3px)
13095
13096**Add Event bar**:
13097- Added `margin:0` inline style
13098- Removed all top/bottom margins
13099
13100## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR
13101- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day)
13102- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%`
13103- **Changed:** Add Event bar color from orange to dark green (#006400)
13104- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off)
13105- **Changed:** Add Event bar text now bright green (#00ff00) with green glow
13106- **Changed:** Add Event bar font size increased from 7px to 9px
13107- **Changed:** Add Event bar letter spacing increased to 0.5px
13108- **Improved:** Hover effect on Add Event bar now darker green (#004d00)
13109
13110### Color Bar Fix Details:
13111**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars
13112**Solution**: Applied same fix as clicked day events:
13113- Changed parent div: `align-items:start` → `align-items:stretch`
13114- Added `min-height:20px` to parent
13115- Changed bars: `height:100%` → `align-self:stretch`
13116- Bars now properly fill vertical space in ALL sections
13117
13118### Add Event Bar Changes:
13119**Before**:
13120- Background: Orange (#ff9800)
13121- Text: Black (#000)
13122- Height: 6px (text cut off)
13123- Font: 7px
13124
13125**After**:
13126- Background: Dark green (#006400)
13127- Text: Bright green (#00ff00) with green glow
13128- Height: 12px (text fully visible)
13129- Font: 9px
13130- Hover: Darker green (#004d00)
13131- Matrix-themed green aesthetic
13132
13133## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE
13134- **Fixed:** Event color bars now display correctly in clicked day events
13135- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events
13136- **Added:** Conflict badge (⚠) appears on right side of conflicting events
13137- **Updated:** Complete README.md rewrite with full Matrix theme documentation
13138- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering)
13139- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px`
13140- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning
13141
13142### Color Bar Fix:
13143**Problem**: Bars had `height:100%` but parent had no explicit height
13144**Solution**:
13145- Changed to `align-self:stretch` on bars
13146- Parent uses `align-items:stretch`
13147- Added `min-height:20px` to parent
13148- Bars now properly fill vertical space
13149
13150### Sorting Change:
13151**Before**: Timed events first → All-day events last
13152**After**: All-day events FIRST → Timed events chronologically
13153
13154**Example**:
13155```
13156Monday, Feb 5
13157├─ All Day - Project Deadline       ← All-day first
13158├─ 8:00 AM - Morning Standup        ← Earliest time
13159├─ 10:30 AM - Coffee with Bob
13160└─ 2:00 PM - Team Meeting           ← Latest time
13161```
13162
13163### Conflict Badge:
13164- Orange warning triangle (⚠) on right side
13165- 10px font size
13166- Only appears if `event.conflict` is true
13167- Title attribute shows "Time conflict detected"
13168- Small and unobtrusive
13169
13170### README Update:
13171- Complete rewrite with Matrix theme focus
13172- Full usage instructions for all features
13173- Admin interface documentation
13174- Outlook sync setup guide
13175- System monitoring details
13176- Troubleshooting section
13177- Color scheme reference
13178- File structure documentation
13179- Performance tips
13180- Security notes
13181- Quick start examples
13182
13183## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR
13184- **Added:** Events now sorted by time when clicking week grid days
13185- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px)
13186- **Improved:** Events with times appear first, sorted chronologically
13187- **Improved:** All-day events appear after timed events
13188- **Changed:** Add Event bar font size reduced to 7px (from 10px)
13189- **Changed:** Add Event bar now has 0 padding and fixed 6px height
13190
13191### Sorting Logic:
13192- Events with times sorted by time (earliest first)
13193- All-day events (no time) appear at the end
13194- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare
13195- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event
13196
13197### Add Event Bar Changes:
13198- **Height**: 6px (was ~12px with padding)
13199- **Padding**: 0 (was 4px top/bottom)
13200- **Font Size**: 7px (was 10px)
13201- **Letter Spacing**: 0.3px (was 0.5px)
13202- **Line Height**: 6px to match height
13203- **Vertical Align**: Middle for text centering
13204
13205## Version 3.10.4 (2026-02-06) - ADD EVENT BAR
13206- **Added:** Thin orange "Add Event" bar between header and week grid
13207- **Added:** Quick access to event creation from sidebar widget
13208- **Styled:** Sleek design with hover effects and glow
13209- **Interactive:** Clicks navigate to Manage Events tab in admin
13210- **Improved:** User workflow for adding events from sidebar
13211
13212### Visual Design:
13213- Orange background (#ff9800) matching Today section color
13214- 4px top/bottom padding for thin, sleek appearance
13215- Black text with white text-shadow for visibility
13216- Hover effect: Darkens to #ff7700 with enhanced glow
13217- Orange glow effect (box-shadow) matching Matrix theme
13218- Centered "+ ADD EVENT" text (10px, bold, letter-spacing)
13219
13220### Technical Changes:
13221- Added between header close and renderWeekGrid() call
13222- Inline onclick handler navigates to admin manage tab
13223- Inline onmouseover/onmouseout for hover effects
13224- Smooth 0.2s transition on all style changes
13225
13226## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION
13227- **Changed:** Update Plugin tab is now the default tab when opening admin
13228- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab
13229- **Improved:** Clear Cache button now larger and more prominent with helpful description
13230- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events
13231- **Removed:** Debug console.log statements from day event display
13232- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab
13233
13234### UI Changes:
13235- Update Plugin tab opens by default (was Config/Outlook Sync tab)
13236- Clear Cache button prominently displayed at top of Update Plugin tab
13237- Orange ��️ button (10px 20px padding) with confirmation dialog
13238- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin"
13239- Success/error messages display on Update Plugin tab after cache clear
13240- Tab navigation reordered to put Update first
13241
13242### Technical Changes:
13243- Default tab changed from 'config' to 'update' in html() method
13244- Tab navigation HTML reordered to show Update Plugin tab first
13245- clearCache() method now redirects with 'update' tab parameter
13246- Removed Clear Cache button from renderConfigTab()
13247- Added Clear Cache button to renderUpdateTab() with message display
13248
13249## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX
13250- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days
13251- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML
13252- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields
13253- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events
13254
13255### Technical Changes:
13256- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render()
13257- Events added to weekEvents now include pre-rendered HTML versions
13258- title_html and description_html fields populated before json_encode()
13259- JavaScript now receives properly formatted HTML content
13260
13261## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON
13262- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123)
13263- **Fixed:** HTML event handlers now call correctly sanitized function names
13264- **Fixed:** Weather temperature now updates correctly in sidebar widget
13265- **Added:** Weather update function to sidebar widget JavaScript
13266- **Added:** "Clear Cache" button in admin panel for easy cache refresh
13267- **Added:** Default weather location set to Irvine, CA when geolocation unavailable
13268- **Improved:** All tooltip functions now work correctly on system status bars
13269
13270### Technical Changes:
13271- Changed tooltip function names to use $jsCalId instead of $calId
13272- Changed HTML onmouseover/onmouseout to use $jsCalId
13273- Added updateWeather() function to sidebar widget
13274- Added getWeatherIcon() function to sidebar widget
13275- Added clearCache() method in admin.php
13276- Added recursiveDelete() helper method in admin.php
13277- Admin UI now has ��️ Clear Cache button alongside Export/Import
13278
13279## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES
13280- **Fixed:** JavaScript syntax error "Missing initializer in const declaration"
13281- **Fixed:** Event links and formatting not displaying in clicked day events
13282- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores
13283- **Changed:** Event titles now use `title_html` field to preserve HTML formatting
13284- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting
13285- **Improved:** All JavaScript variable names now use valid syntax
13286- **Improved:** Links, bold, italic, and other HTML formatting preserved in events
13287
13288### Technical Changes:
13289- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);`
13290- JavaScript variables now use underscores instead of dashes
13291- Event HTML rendering preserves DokuWiki formatting
13292- Fixed "showTooltip_sidebar is not defined" errors
13293- Fixed "showDayEvents_cal is not defined" errors
13294
13295## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX
13296- **Fixed:** Critical JavaScript loading order issue causing ReferenceError
13297- **Fixed:** Functions now defined BEFORE HTML that uses them
13298- **Changed:** Consolidated all JavaScript into single comprehensive script block
13299- **Removed:** ~290 lines of duplicate JavaScript code
13300- **Added:** Shared state management with `sharedState_[calId]` object
13301- **Improved:** System tooltip functions now work correctly
13302- **Improved:** Week grid click events now work correctly
13303
13304### Technical Changes:
13305- Moved all JavaScript to beginning of widget (before HTML)
13306- Removed duplicate script blocks
13307- Unified tooltip and stats functions
13308- Shared latestStats and cpuHistory state
13309- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined"
13310
13311## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS
13312- **Added:** Dual color bars on events (section color + event color)
13313- **Added:** Click week grid days to view events (replaced hover tooltips)
13314- **Added:** Expandable section below week grid for selected day events
13315- **Added:** Blue theme for selected day section
13316- **Changed:** Week grid days now clickable instead of tooltips
13317- **Changed:** Section bar: 4px wide (left)
13318- **Changed:** Event bar: 3px wide (right)
13319- **Increased:** Gap between color bars from 3px to 6px
13320- **Improved:** Click is more reliable and mobile-friendly than hover tooltips
13321
13322### Visual Changes:
13323- Each event shows TWO color bars side-by-side
13324- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue)
13325- Right bar (3px): Individual event's assigned color
13326- Click any day in week grid to expand event list
13327- X button to close selected day events
13328
13329## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY
13330- **Increased:** Event color bar width from 2px to 3px
13331- **Increased:** Gap between section and event bars from 3px to 6px
13332- **Improved:** Event color bars now more visible alongside section bars
13333- **Note:** Dual color bar system already in place from v3.9.6
13334
13335## Version 3.9.6 (2026-02-05) - UI REFINEMENTS
13336- **Changed:** Date in Important Events moved below event name (was above)
13337- **Changed:** Section headers now 9px font size (was 10px)
13338- **Changed:** Section headers now normal case (was ALL CAPS)
13339- **Changed:** Letter spacing reduced from 0.8px to 0.3px
13340- **Improved:** More natural reading flow with date below event name
13341- **Improved:** Cleaner, more subtle section headers
13342
13343### Header Changes:
13344- "TODAY" → "Today"
13345- "TOMORROW" → "Tomorrow"
13346- "IMPORTANT EVENTS" → "Important Events"
13347
13348## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN
13349- **Redesigned:** Complete overhaul of `sidebar` parameter
13350- **Added:** Compact week-at-a-glance itinerary view (200px wide)
13351- **Added:** Live clock widget at top of sidebar
13352- **Added:** 7-cell week grid showing event bars
13353- **Added:** Today section with orange header and left border
13354- **Added:** Tomorrow section with green header and left border
13355- **Added:** Important Events section with purple header and left border
13356- **Added:** Admin setting to configure important namespaces
13357- **Added:** Time conflict badges in sidebar events
13358- **Added:** Task checkboxes in sidebar events
13359- **Changed:** Sidebar now optimized for narrow spaces (200px)
13360- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets
13361
13362### New Features:
13363- Clock updates every second showing current time
13364- Week grid shows Mon-Sun with colored event bars
13365- Today/Tomorrow sections show full event details
13366- Important events highlighted in purple (configurable namespaces)
13367- All badges (conflict, time, etc.) shown in compact format
13368- Automatic time conflict detection
13369
13370## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP
13371- **Removed:** 16 unused/debug/backup files
13372- **Removed:** 69 console.log() debug statements
13373- **Removed:** 3 orphaned object literals from console.log removal
13374- **Removed:** Temporary comments and markers
13375- **Fixed:** JavaScript syntax errors from cleanup
13376- **Improved:** Code quality and maintainability
13377- **Improved:** Reduced plugin size by removing unnecessary files
13378- **Status:** Production-ready, fully cleaned codebase
13379
13380### Files Removed:
13381- style.css.backup, script.js.backup
13382- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php
13383- debug_events.php, debug_html.php, cleanup_events.php
13384- fix_corrupted_json.php, fix_wildcard_namespaces.php
13385- find_outlook_duplicates.php, update_namespace.php
13386- validate_calendar_json.php, admin.js
13387- test_date_field.html
13388
13389## Version 3.7.5 (2026-02-05)
13390- **Fixed:** PHP syntax error (duplicate foreach loop removed)
13391- **Fixed:** Time variable handling in grace period logic
13392
13393## Version 3.7.4 (2026-02-05)
13394- **Added:** 15-minute grace period for timed events
13395- **Changed:** Events with times now stay visible for 15 minutes after their start time
13396- **Changed:** Prevents events from immediately disappearing when they start
13397- **Improved:** Better user experience for ongoing events
13398- **Fixed:** Events from earlier today now properly handled with grace period
13399
13400## Version 3.7.3 (2026-02-05)
13401- **Changed:** Complete redesign of cleanup section for compact, sleek layout
13402- **Changed:** Radio buttons now in single row at top
13403- **Changed:** All options visible with grayed-out inactive states (opacity 0.4)
13404- **Changed:** Inline controls - no more grid layout or wrapper boxes
13405- **Changed:** Namespace filter now compact single-line input
13406- **Changed:** Smaller buttons and tighter spacing throughout
13407- **Improved:** More professional, space-efficient design
13408
13409## Version 3.7.2 (2026-02-04)
13410- **Fixed:** Strange boxes under cleanup options - now properly hidden
13411- **Changed:** Unified color scheme across all admin sections
13412- **Changed:** Green (#00cc07) - Primary actions and main theme
13413- **Changed:** Orange (#ff9800) - Warnings and cleanup features
13414- **Changed:** Purple (#7b1fa2) - Secondary actions and accents
13415- **Improved:** Consistent visual design throughout admin interface
13416
13417## Version 3.7.1 (2026-02-04)
13418- **Fixed:** Cleanup section background changed from orange to white
13419- **Fixed:** Event cleanup now properly scans all calendar directories
13420- **Added:** Debug info display when preview finds no events
13421- **Improved:** Better directory scanning logic matching other features
13422
13423## Version 3.7.0 (2026-02-04)
13424- **Added:** Event cleanup feature in Events Manager
13425- **Added:** Delete old events by age (months/years old)
13426- **Added:** Delete events by status (completed tasks, past events)
13427- **Added:** Delete events by date range
13428- **Added:** Namespace filter for targeted cleanup
13429- **Added:** Preview function to see what will be deleted
13430- **Added:** Automatic backup creation before cleanup
13431- **Changed:** Reduced changelog viewer height to 100px (was 400px)
13432
13433## Version 3.6.3 (2026-02-04)
13434- **Fixed:** Conflict tooltips now work properly after navigating between months
13435- **Added:** Changelog display in Update Plugin tab
13436- **Added:** CHANGELOG.md file with version history
13437- **Improved:** Changelog shows last 10 versions with color-coded change types
13438- **Fixed:** Removed debug console.log statements
13439
13440## Version 3.6.2 (2026-02-04)
13441- **Fixed:** Month title now updates correctly when navigating between months
13442- **Changed:** All eventpanel header elements reduced by 10% for more compact design
13443- **Changed:** Reduced header height from 78px to 70px
13444
13445## Version 3.6.1 (2026-02-04)
13446- **Changed:** Complete redesign of eventpanel header with practical two-row layout
13447- **Fixed:** Improved layout for narrow widths (~500px)
13448- **Changed:** Simplified color scheme (removed purple gradient)
13449
13450## Version 3.6.0 (2026-02-04)
13451- **Changed:** Redesigned eventpanel header with gradient background
13452- **Changed:** Consolidated multiple header rows into compact single-row design
13453
13454## Version 3.5.1 (2026-02-04)
13455- **Changed:** Moved event search bar into header row next to + Add button
13456- **Improved:** More compact UI with search integrated into header
13457
13458## Version 3.5.0 (2026-02-04)
13459- **Added:** Event search functionality in sidebar and eventpanel
13460- **Added:** Real-time filtering as you type
13461- **Added:** Clear button (✕) appears when searching
13462- **Added:** "No results" message when search returns nothing
13463
13464## Version 3.4.7 (2026-02-04)
13465- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding)
13466- **Fixed:** Removed debug logging from console
13467- **Changed:** Updated export version number to match plugin version
13468
13469## Version 3.4.6 (2026-02-04)
13470- **Added:** Debug logging to diagnose conflict detection issues
13471- **Development:** Extensive console logging for troubleshooting
13472
13473## Version 3.4.5 (2026-02-04)
13474- **Added:** Debug logging to showDayPopup and conflict detection
13475- **Development:** Added logging to trace conflict detection flow
13476
13477## Version 3.4.4 (2026-02-04)
13478- **Fixed:** Conflict detection now persists across page refreshes (PHP-based)
13479- **Fixed:** Conflict tooltips now appear on hover
13480- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation)
13481- **Added:** Conflict badges in both future and past events sections
13482
13483## Version 3.4.3 (2026-02-04)
13484- **Added:** Custom styled conflict tooltips with hover functionality
13485- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2)
13486- **Improved:** Beautiful tooltip design with orange header and clean formatting
13487
13488## Version 3.4.2 (2026-02-04)
13489- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3)
13490
13491## Version 3.4.1 (2026-02-04)
13492- **Fixed:** End time field now properly saves to database
13493- **Fixed:** End time dropdown now filters to show only valid times after start time
13494- **Added:** Smart dropdown behavior - expands on focus, filters invalid options
13495- **Improved:** End time auto-suggests +1 hour when start time selected
13496
13497## Version 3.4.0 (2026-02-04)
13498- **Added:** End time support for events (start and end times)
13499- **Added:** Automatic time conflict detection
13500- **Added:** Conflict warning badges (⚠️) on events with overlapping times
13501- **Added:** Conflict tooltips showing which events conflict
13502- **Added:** Visual conflict indicators with pulse animation
13503- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM")
13504
13505## Version 3.3.77 (2026-02-04)
13506- **Fixed:** Namespace badge onclick handlers restored after clearing filter
13507- **Fixed:** Namespace filtering works infinitely (filter → clear → filter)
13508
13509## Version 3.3.76 (2026-02-04)
13510- **Fixed:** Namespace badges now clickable after clearing namespace filter
13511
13512## Version 3.3.75 (2026-02-04)
13513- **Fixed:** Form resubmission warnings eliminated
13514- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303
13515- **Changed:** All admin redirects now use absolute URLs
13516
13517## Version 3.3.74 (2026-02-04)
13518- **Fixed:** Clearing namespace filter now restores original namespace instead of default
13519- **Added:** data-original-namespace attribute to preserve initial namespace setting
13520- **Improved:** Console logging for namespace filter debugging
13521
13522## Version 3.3.73 (2026-02-03)
13523- **Added:** Dynamic namespace filtering banner with clear button
13524- **Fixed:** JavaScript function accessibility issues
13525- **Fixed:** Namespace badge click handlers in event lists
13526- **Improved:** Persistent namespace filtering across views
13527
13528## Earlier Versions
13529See previous transcripts for complete history through v3.3.73, including:
13530- Recurring events with Outlook sync
13531- Multi-namespace support
13532- Event categories and mapping
13533- Backup/restore functionality
13534- System statistics bar
13535- Namespace selector with fuzzy search
13536- Events Manager with import/export
13537- And much more...
13538