Lines Matching +full:star +full:- +full:light

3 ## Version 7.0.8 (2026-02-15) - TIMEZONE FIX
5 ### Bug Fix: Date Shift in Non-UTC Timezones
9 … in Prague becomes 23:00 UTC of the *previous day*. When split to get YYYY-MM-DD, this returns the…
15 - Multi-day event spanning (line 385)
16 - Today string calculation in event list (line 566)
17 - Past event detection in event items (line 1022)
20 - `calendar-main.js` - Added `formatLocalDate()` helper, replaced 3 `toISOString().split('T')[0]` c…
22 ---
24 ## Version 7.0.7 (2026-02-15) - GOOGLE CALENDAR SYNC
27 - Two-way sync with Google Calendar via OAuth 2.0
28 - Import events from Google Calendar to DokuWiki
29 - Export events from DokuWiki to Google Calendar
30 - Support for all-day and timed events
31 - Multi-day event handling
32 - Color mapping between Google and DokuWiki
33 - Duplicate detection prevents re-importing same events
34 - Select which Google calendar to sync with
35 - Admin panel UI for configuration and sync controls
38 - Google Cloud Console project
39 - Google Calendar API enabled
40 - OAuth 2.0 Web Application credentials
41 - Redirect URI configuration
44 - `classes/GoogleCalendarSync.php` - OAuth and Calendar API integration
47 - `action.php` - Added Google sync action handlers
48 - `admin.php` - Added Google sync admin tab
50 ---
52 ## Version 7.0.6 (2026-02-15) - ACCESSIBILITY IMPROVEMENTS
55 - Added ARIA live region for dynamic announcements
56 - Announces "Event created", "Event updated", "Event deleted" on actions
57 - Announces "Task marked complete/incomplete" on toggle
58 - Screen readers receive feedback without visual alerts
61 - Added `CALENDAR_DEBUG` flag for JavaScript console logging
62 - `calendarLog()` and `calendarError()` helper functions
63 - Debug output disabled by default
66 - Consistent error handling patterns
67 - Better separation of concerns
70 - `calendar-main.js` - ARIA live region, debug helpers, announcements
72 ---
74 ## Version 7.0.5 (2026-02-15) - AUDIT LOGGING & ACCESSIBILITY
77 - New `AuditLogger.php` class for compliance logging
78 - Logs all event modifications: create, update, delete, move, task toggle
79 - JSON-formatted log files with timestamps, user info, and IP addresses
80 - Automatic log rotation (5MB max, 10 files retained)
81 - Log entries include: namespace, date, event ID, title, and change details
84 - Arrow keys navigate between calendar days
85 - Enter/Space activates focused day (opens popup)
86 - Arrow Up/Down navigates between events in popups
87 - Enter on event opens edit dialog
88 - Delete/Backspace on event triggers delete
89 - Escape closes all dialogs, popups, and dropdowns
90 - Added `tabindex` and `role` attributes for screen readers
91 - Added `aria-label` descriptions for calendar days and events
94 - Visible focus indicators on calendar days
95 - Focus styles on event items in popups
96 - Focus styles on custom date/time pickers
97 - Uses `focus-visible` for keyboard-only focus rings
100 - `classes/AuditLogger.php` - Compliance audit logging
103 - `action.php` - Integrated audit logging for all event operations
104 - `calendar-main.js` - Extended keyboard navigation
105 - `syntax.php` - Added accessibility attributes to calendar cells
106 - `style.css` - Added focus state styles
108 ---
110 ## Version 7.0.4 (2026-02-15) - CODE CLEANUP
113 - Removed unused `calendarDebounce()` and `calendarThrottle()` utility functions
114 - Removed duplicate `updateEndTimeOptions()` function definition
115 - Removed unused `_calendarSelectOpen` tracking variable
116 - Removed orphaned `.input-date` and `.time-select` CSS (no longer using native inputs)
117 - Consolidated legacy function calls
120 - End date picker now opens to start date's month when no end date is selected
121 - End time picker now scrolls to first available time after start time
124 - `calendar-main.js` - Removed ~40 lines of dead code
125 - `style.css` - Removed ~25 lines of unused CSS
127 ---
129 ## Version 7.0.3 (2026-02-15) - CUSTOM DATE & TIME PICKERS
132 …have been replaced with custom, lightweight pickers to eliminate all browser-related performance i…
135 - **Mini calendar grid** - Clean monthly view with day selection
136 - **Month navigation** - Previous/next buttons for quick browsing
137 - **Visual indicators** - Today highlighted, selected date marked
138 - **End date validation** - Cannot select end date before start date
139 - **Clear button** - Easy removal of optional end date
142 - **Period groupings** - Morning, Afternoon, Evening, Night
143 - **Lazy loading** - Options built only when dropdown opens
144 - **Smart filtering** - End times after start time only
147 - Removed old `setupSelectTracking()` function (was causing conflicts)
148 - Removed redundant event listener code
149 - Unified dropdown close handling for all picker types
150 - No native `<input type="date">` or `<select>` elements in event dialog
153 - `syntax.php` - New date picker HTML structure
154 - `calendar-main.js` - Custom date picker JavaScript, cleanup
155 - `style.css` - Date picker calendar grid styles
157 ---
159 ## Version 7.0.2 (2026-02-15) - CUSTOM TIME PICKER
165 - **Instant opening** - No browser rendering delay
166 - **Lazy-loaded options** - Dropdown HTML built only when clicked
167 - **Period grouping** - Morning, Afternoon, Evening, Night sections
168 - **Smart filtering** - End time options automatically hide times before start time
169 - **Visual feedback** - Selected time highlighted, disabled times grayed out
172 - Replaced `<select>` elements with `<button>` + `<div>` dropdown
173 - Hidden `<input>` stores actual value for form submission
174 - Time data pre-computed once, reused for all pickers
175 - Event delegation for option clicks
176 - Automatic cleanup when clicking outside
179 - Native `<select>` time pickers (caused 2600ms+ freezes)
180 - `onchange` handlers from date inputs (handled in JS now)
181 - Old `setupSelectTracking()` function
184 - `syntax.php` - New time picker HTML structure
185 - `calendar-main.js` - Custom time picker JavaScript
186 - `style.css` - Time picker dropdown styles
188 ---
190 ## Version 7.0.1 (2026-02-15) - SELECTOR FLICKER FIX
193 - **Fixed selector flicker on subsequent clicks** - Time/date selectors no longer flash or lag afte…
194 - New `setupSelectTracking()` prevents DOM updates while selector is open
195 - Tracks mousedown/focus/blur/change events on all form inputs
196 - Uses `requestAnimationFrame` for smooth visual updates
197 - Added state caching to skip redundant DOM manipulation
200 - Changed `transition: all` to specific properties on `.input-sleek` elements
201 - Added `transition: none` for select options
202 - Prevents browser reflow issues during dropdown rendering
204 ---
206 ## Version 7.0.0 (2026-02-15) - STABILITY & PERFORMANCE RELEASE
211 - **New `CalendarFileHandler` class** with atomic file operations
212 - Prevents data corruption from concurrent event saves
213 - Uses temp file + atomic rename strategy for safe writes
214 - Implements `flock()` for proper file locking during reads/writes
215 - Graceful handling of lock acquisition failures with retries
218 - **New `CalendarEventCache` class** for event data caching
219 - 5-minute TTL reduces unnecessary JSON file reads
220 - In-memory caching for current request
221 - Automatic cache invalidation on event modifications
222 - Cache cleanup for expired entries
225 - **New `CalendarRateLimiter` class** for AJAX endpoint protection
226 - 60 requests/minute for read actions
227 - 30 requests/minute for write actions (more restrictive)
228 - Per-user tracking (falls back to IP for anonymous)
229 - Rate limit headers in responses (X-RateLimit-Limit, X-RateLimit-Remaining)
230 - Automatic cleanup of old rate limit data
233 - **New `CalendarEventManager` class** consolidating CRUD operations
234 - New `classes/` directory for organized code structure
235 - Reduced code duplication across files
236 - Improved separation of concerns
237 - Better maintainability for future development
240 - **Fixed slow time selector** - End time dropdown now opens instantly
241 - Replaced `Array.from().forEach()` with direct `options` loop (97 options)
242 - Single-pass algorithm instead of multiple iterations
243 - Uses `hidden` property instead of `style.display` manipulation
244 - **Fixed event listener accumulation** - Dialog inputs no longer slow down over time
245 - Added `data-initialized` flag to prevent re-binding listeners
246 - Namespace search only initializes once per calendar
247 - **Fixed selector flicker on subsequent clicks**
248 - New `setupSelectTracking()` function prevents DOM updates while selector is open
249 - Tracks mousedown/focus/blur/change events on time and date inputs
250 - Uses `requestAnimationFrame` instead of `setTimeout` for visual updates
251 - Added state caching to skip redundant DOM updates
252 - **Fixed CSS transition interference**
253 - Changed `transition: all` to specific properties on form inputs
254 - Added explicit `transition: none` for select options
255 - Prevents browser reflow issues during dropdown rendering
258 - Removed "Matrix Edition" from plugin name and all references
259 - Plugin is now simply "Calendar Plugin"
260 - Matrix theme remains available (now called just "Matrix")
263 - All JSON file operations now use atomic writes
264 - Event saves protected against race conditions
265 - Cache automatically invalidated on namespace/month changes
266 - Rate limiter uses probabilistic cleanup (1 in 100 requests)
269 - `classes/FileHandler.php` - Atomic file operations with locking
270 - `classes/EventCache.php` - Caching layer with TTL
271 - `classes/RateLimiter.php` - AJAX rate limiting
272 - `classes/EventManager.php` - Consolidated event CRUD operations
275 - No database migration required
276 - Cache directory created automatically (`data/cache/calendar/`)
277 - Rate limit data stored in `data/cache/calendar/ratelimit/`
278 - Existing events and settings preserved
280 ---
282 ## Version 6.14.2 (2026-02-15) - SYSTEM LOAD TOGGLE
285 - New toggle in **Admin > Calendar > Themes** tab
286 - Choose to show or hide CPU/Memory load indicator bars
287 - Setting applies to both event panel and sidebar widget
288 - Stored in `data/meta/calendar_show_system_load.txt`
289 - JavaScript polling is also disabled when hidden (saves resources)
291 ## Version 6.14.1 (2026-02-14) - SECURITY FIX
294 - **Authentication required** - Write actions (save, delete, toggle) now require user to be logged …
295 - **Improved CSRF token handling** - New `getSecurityToken()` helper function checks multiple sourc…
296 - `JSINFO.sectok` (standard)
297 - `window.JSINFO.sectok`
298 - Hidden form field `input[name="sectok"]`
299 - Meta tag `meta[name="sectok"]`
300 - Anonymous users can no longer add/edit/delete events
301 - Better error messages for authentication and token failures
304 - Fixed "Invalid security token" error on clean DokuWiki installations
305 - Added debug logging for security token failures
307 ## Version 6.14.0 (2026-02-14) - STABLE RELEASE
310 - Added localization for all static calendar strings (EN/DE)
311 - New lang keys: `previous_month`, `next_month`, `print_calendar`, `no_events_scheduled`, `calendar…
312 - Code review and cleanup completed
313 - Updated README.md and plugin documentation
316 - Read-only presentation mode: `{{calendar static}}`
317 - Custom titles: `title="My Events"`
318 - Month locking: `month=2` disables navigation
319 - Print button with clean itinerary output
320 - All themes supported: matrix, pink, purple, professional, wiki, dark, light
321 - `noprint` option to hide print functionality
322 - Formatted descriptions in tooltips and itinerary
325 - Admin menu icon (SVG)
326 - Config import fix for `return array()` syntax
327 - Mobile touch button fixes
328 - Important events in day popup with star icons
329 - Time picker grouped by period
330 - Multi-day event time validation
332 ## Version 6.13.13 (2026-02-14) - PRINT BUTTON CENTERING
335 - Added `display: flex`, `align-items: center`, `justify-content: center`
336 - Added `padding: 0` and `line-height: 1`
337 - Icon now properly centered in circle
339 ## Version 6.13.12 (2026-02-14) - SIMPLE TOOLTIP
342 - Removed custom JS tooltip (was causing triple popups)
343 - Uses native browser `title` attribute only
344 - Plain text with formatting converted: `**bold**` → `*bold*`, `//italic//` → `_italic_`
345 - Links shown as: `text (url)`
346 - Added �� emoji before time for visual clarity
347 - Itinerary still shows full HTML formatting
349 ## Version 6.13.11 (2026-02-14) - FORMATTED DESCRIPTIONS
352 - **Hover tooltips** now show formatted text (bold, italic, links, line breaks)
353 - **Itinerary descriptions** display with full formatting
354 - Uses existing `renderDescription()` function for consistency
355 - Supports: `**bold**`, `//italic//`, `[[links]]`, `[markdown](links)`, line breaks
358 - Added `data-tooltip` attribute with rich HTML content
359 - New JavaScript tooltip handler with smart positioning
360 - CSS styles for `.static-tooltip` and itinerary formatting
361 - Tooltips stay within viewport bounds
363 ## Version 6.13.10 (2026-02-14) - PRINT MARGINS FIX v3
365 ### Fixed Print Margins - Inline Styles Approach
366 - Removed reliance on `@page` CSS (browser support inconsistent)
367 - Uses inline style `padding: 50px 60px` directly on wrapper div
368 - Simplified CSS for better browser compatibility
369 - Smaller table font (12px) for better fit
370 - Set `max-width: 800px` on content wrapper
372 ## Version 6.13.9 (2026-02-14) - PRINT MARGINS FIX v2
375 - Added `.print-wrapper` div with 0.5in padding/margin
376 - Uses both `@page` margin AND wrapper margins for compatibility
377 - Set `@page { margin: 1in 0.75in }` (top/bottom 1in, sides 0.75in)
378 - Wrapper has `max-width: 7.5in` to fit standard letter size
379 - Smaller fonts (0.85em) to fit more content
380 - Added 250ms delay before print to ensure styles load
382 ## Version 6.13.8 (2026-02-14) - PRINT MARGINS FIX
385 - Added `@page { margin: 0.75in }` for proper print margins
386 - Increased body padding to 40px for screen preview
387 - Smaller font sizes to fit better on page
388 - Description column limited width with word-wrap
389 - Table header repeats on each page (`display: table-header-group`)
390 - Rows avoid page breaks in middle (`page-break-inside: avoid`)
391 - Print color adjust enabled for backgrounds
393 ## Version 6.13.7 (2026-02-14) - ALL THEMES FOR STATIC CALENDAR
399 |-------|-------------|
406 | `light` | Clean white/gray |
416 ## Version 6.13.6 (2026-02-14) - QUOTED PARAMETER FIX
419 - Titles with spaces now work: `title="Feb 26 Expense Log"`
420 - Uses regex to properly parse: `key="value with spaces"`
421 - Supports both double and single quotes
422 - Example: `{{calendar title="My Custom Title" static}}`
424 ## Version 6.13.5 (2026-02-14) - STATIC CALENDAR OPTIONS
429 |--------|-------------|---------|
432 | `theme=X` | Apply specific theme (matrix, pink, dark, light) | `theme=matrix` |
435 - When you specify `month=X` or `year=X`, navigation is now disabled
436 - `{{calendar month=2 static}}` shows only February with no nav arrows
437 - `{{calendar year=2025 month=12 static}}` locks to December 2025
449 ## Version 6.13.4 (2026-02-14) - DEDICATED PRINT BUTTON
452 - New ��️ print button in the calendar header
453 - Opens a clean popup window with ONLY the itinerary content
454 - Automatically triggers print dialog
455 - Window closes after printing
456 - No DokuWiki headers/footers/sidebars - just the calendar
459 - Extracts the print view HTML
460 - Creates a new window with minimal styling
461 - Calls `window.print()` automatically
462 - Clean single-page output
464 ## Version 6.13.3 (2026-02-14) - PRINT BLANK PAGES FIX
467 - Aggressively hide ALL screen view elements and children in print
468 - Reset height/width to 0 with !important on grid, cells, events
469 - Ensure print view elements have proper display table properties
470 - Force all hidden elements to position:absolute off-screen
472 ## Version 6.13.2 (2026-02-14) - STATIC CALENDAR RESPONSIVE FIX
475 - Changed from `max-width: 900px` to `width: 100%` for full container fit
476 - Added `table-layout: fixed` for consistent column widths
477 - Added `overflow-x: auto` for horizontal scroll on very small screens
478 - Reduced header padding and font sizes for better fit
479 - Improved responsive breakpoints for mobile (768px and 480px)
480 - Hide time on very small screens to save space
481 - Better touch targets for navigation buttons
483 ## Version 6.13.1 (2026-02-14) - STATIC CALENDAR FIX
486 - Added missing `getImportantNamespaces()` helper method
487 - Fixed `loadEventsForMonth` → use existing `loadEvents` method
488 - Added multi-namespace/wildcard support to static calendar
490 ## Version 6.13.0 (2026-02-14) - STATIC CALENDAR MODE
493 Read-only calendar view for public display and printing.
502 - Clean calendar grid without edit/delete buttons
503 - Month navigation (prev/next arrows)
504 - Hover tooltips showing full event details (title, time, description)
505 - Important events highlighted with ⭐ and golden background
506 - Today's date highlighted
507 - Responsive design for mobile
510 - Automatically switches to itinerary format when printing
511 - Table layout: Date | Time | Event | Details
512 - Important events marked with ⭐
513 - Dates grouped (date only shown once per day)
514 - Page break handling for long lists
515 - Clean black & white friendly output
518 - `syntax.php`: Added `renderStaticCalendar()` method
519 - `action.php`: Added `getStaticCalendar()` AJAX handler
520 - `calendar-main.js`: Added `navStaticCalendar()` function
521 - `style.css`: Added static calendar styles + print media queries
523 ## Version 6.12.7 (2026-02-14) - ADMIN MENU ICON
526 - New monochrome SVG calendar icon for DokuWiki admin menu
527 - Icon shows calendar with binding rings, header, and date dots
528 - Matches DokuWiki's admin interface style
529 - Added `getMenuIcon()` method to admin.php
530 - Icon file: `images/icon.svg`
532 ## Version 6.12.6 (2026-02-14) - CONFIG IMPORT FIX
535 - Now accepts both `return [` and `return array(` syntax
536 - Regex updated from `/return\s*\[/` to `/return\s*(\[|array\s*\()/`
537 - Older PHP config files using `return array(...)` now import correctly
539 ## Version 6.12.5 (2026-02-14) - MOBILE BUTTON FIX
542 - Added `type="button"` attribute to prevent form submission issues
543 - Added `touchend` event delegation for reliable mobile touch handling
544 - Increased button touch targets (32px default, 40px on mobile)
545 - Added `touch-action: manipulation` to prevent touch delays
546 - Added `-webkit-tap-highlight-color` for visual feedback
549 - Mobile browsers sometimes don't fire `onclick` reliably
550 - New `touchend` handler calls `btn.click()` explicitly
551 - Larger touch targets meet accessibility guidelines (44px recommended)
553 ## Version 6.12.4 (2026-02-14) - STAR INLINE FIX
555 ### Fixed Star Position in Day Popup
556 - Star icon now displays inline with event title (left side)
557 - Changed `.popup-event-title` from `flex: 1 1 100%` to `flex: 1 1 auto`
558 - Star and title stay on same line instead of star being above
560 ## Version 6.12.3 (2026-02-14) - DAY POPUP IMPORTANT EVENTS
563 - Events from important namespaces now show ⭐ star icon
564 - Golden gradient background highlight for important events
565 - Golden border glow effect matching other views
566 - Consistent styling across calendar grid, sidebar, and day popup
569 - Added `importantNamespaces` check to `showDayPopup()` function
570 - Added `.popup-event-important` and `.popup-event-star` CSS classes
571 - Reads important namespaces from `container.dataset.importantNamespaces`
573 ## Version 6.12.2 (2026-02-14) - MULTI-DAY EVENT TIME FIX
575 ### Multi-Day Event End Time
576 - End time now allows all times when end date differs from start date
577 - Example: Event from 9:00 PM on Feb 28 to 5:00 AM on Feb 29 now works correctly
578 - Same-day events still enforce end time > start time
579 - Changing end date now triggers time validation update
582 - `updateEndTimeOptions()` checks if `endDate !== startDate`
583 - If multi-day, all time options are enabled
584 - Added `onchange` handler to both start date and end date fields
586 ## Version 6.12.1 (2026-02-14) - TIME PICKER & EDIT DIALOG FIX
589 - Grouped time options by period (Morning, Afternoon, Evening, Night)
590 - Much easier to navigate - no more scrolling through 96 options
591 - End time options before start time are now hidden/disabled
592 - Invalid end times automatically corrected when start time changes
595 - Edit dialog is now properly draggable (was broken due to async AJAX)
596 - Moved `makeDialogDraggable()` call inside the AJAX success callback
597 - Removed redundant wrapper patch that didn't work with async code
600 - Time picker uses `<optgroup>` for visual grouping
601 - End time validation hides invalid options (not just disables)
602 - Both Add and Edit dialogs now call `makeDialogDraggable()` directly
604 ## Version 6.12.0 (2026-02-14) - EVENT EDITOR DIALOG IMPROVEMENTS
607 - Fixed duplicate event listener accumulation that caused performance degradation
608 - Each time dialog opened, new drag listeners were added without removing old ones
609 - Now properly cleans up old listeners before adding new ones
610 - Added `cursor: grabbing` feedback while dragging
611 - Dialog position resets when reopened (no more stuck positions)
612 - Excluded close button from triggering drag
615 - Simplified `updateEndTimeOptions()` to be much faster
616 - Removed expensive loop through 96 options checking style.display
617 - Now just validates current selection and sets new value if invalid
618 - Should eliminate freezing/lag when selecting start time
621 - Added `_dragCleanup` function stored on handle element
622 - Cleanup called before re-initialization
623 - Removed unnecessary `setTranslate` helper function
625 ## Version 6.11.4 (2026-02-13) - JAVASCRIPT LOCALIZATION
628 - Added `getCalendarLang()` helper function
629 - Added `getJsLangStrings()` PHP method
630 - Embedded JSON language data in all render functions
631 - Localized month names (full + short)
632 - Localized dialog titles, confirmations, badges, empty states
634 ## Version 6.11.3 (2026-02-13) - SIDEBAR WIDGET LOCALIZATION
637 - Fixed `\n` in single-quoted strings → double-quoted for proper newlines
638 - Localized "Runs every X minutes" cron descriptions
639 - Event dialog labels, placeholders, options
640 - Day names, ordinal positions, color names
641 - Today/Tomorrow/Important section headers
643 ## Version 6.11.2 (2026-02-13) - ADMIN BACKEND LOCALIZATION
646 - Localized ~220 hardcoded strings in admin.php
647 - AJAX JSON responses, redirect messages, error messages
648 - Pattern names (Daily, Weekly, Monthly, etc.)
650 ## Version 6.11.1 (2026-02-13) - CONFIG IMPORT BUG FIX
653 - Fixed regex to accept both `return [` and `return array(` syntax
654 - File: `admin.php` lines 5947, 6001
656 ## Version 6.10.6 (2026-02-13) - MANAGE RECURRING DIALOG LOCALIZATION
662 - "Manage Recurring Series" → "Wiederkehrende Serie verwalten"
663 - "Extend Series" → "Serie erweitern"
664 - "Trim Past Events" → "Vergangene Termine kürzen"
665 - "Change Pattern" → "Muster ändern"
666 - "Change Start Date" → "Startdatum ändern"
667 - "Pause Series" / "Resume Series" → "Serie pausieren" / "Serie fortsetzen"
670 - All field labels (Add occurrences, Days apart, Remove before, New interval, etc.)
671 - Action buttons (Extend, Trim, Change, Shift, Pause, Resume, Close)
672 - Interval dropdown options (Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly)
673 - Help text and notes
676 - Trim confirmation with date
677 - Respace confirmation
678 - Shift confirmation
684 "Please fill out this field" is a browser-native message controlled by the browser's language setti…
686 ## Version 6.10.5 (2026-02-13) - DIALOG LOCALIZATION
691 - Prompt text with examples now in German
692 - Invalid namespace error message
695 - Prompt text with current name
698 - Delete selected events confirmation
699 - Delete namespace confirmation
700 - Delete recurring series confirmation
703 - "Counting..." / "Zähle..."
704 - "Trimming..." / "Kürze..."
705 - "No past recurring events found" message
706 - "Found X past recurring events" confirmation
707 - Button text resets
712 ## Version 6.10.4 (2026-02-13) - COMPLETE MANAGE TAB LOCALIZATION
717 - "➡️ Move" → "➡️ Verschieben"
718 - "➕ New Namespace" → "➕ Neuer Namensraum"
719 - "�� Cleanup" → "�� Bereinigen"
720 - "0 selected" → "0 ausgewählt"
721 - "%d selected" → "%d ausgewählt"
724 - "Edit title, time, namespace, pattern" → "Titel, Zeit, Namensraum, Muster bearbeiten"
725 - "Extend, trim, pause, change dates" → "Erweitern, kürzen, pausieren, Daten ändern"
726 - "Delete all occurrences" → "Alle Vorkommen löschen"
729 - "No events selected" → "Keine Termine ausgewählt"
730 - Delete confirmation with count
731 - Delete namespace confirmation
732 - "Scanning..." → "Scanne..."
733 - "Cleaning..." → "Bereinige..."
734 - "No empty namespaces found" message
735 - "Found X item(s) to clean up" → "X Element(e) zum Bereinigen gefunden"
736 - "Proceed with cleanup?" → "Mit Bereinigung fortfahren?"
739 - Added adminLang JavaScript object with all translatable strings
740 - All dynamic JavaScript messages now use language system
742 ## Version 6.10.3 (2026-02-13) - RECURRING EVENTS & DROP TARGET LOCALIZATION
747 - Search placeholder: "Wiederkehrende Termine suchen..."
748 - Table headers: Titel, Namensraum, Muster, Zeitraum, Anzahl, Quelle, Aktionen
749 - Source labels: Markiert / Erkannt (was Flagged / Detected)
750 - Action buttons: Bearb. / Verwalten / Lö. (was Edit / Manage / Del)
751 - Pattern badges: Täglich, Wöchentlich, Monatlich, Jährlich, Benutzerdefiniert
752 - Footer: "Gesamt: X Serien" (was "Total: X series")
753 - No results message
756 - Header: "�� Zielbereich" (was "Drop Target")
757 - Drop hint: "Hier ablegen" (was "Drop here")
758 - Default namespace label consistent
761 - Recurring table columns and labels
762 - Pattern translations
763 - Action button labels
764 - Drop zone labels
766 ## Version 6.10.2 (2026-02-13) - MANAGE EVENTS TAB LOCALIZATION
772 - Page title, section header, description
773 - Statistics labels (Total Events, Namespaces, JSON Files, Recurring)
774 - "Last scanned" timestamp label
775 - Button labels (Re-scan Events, Export All Events, Import Events)
776 - "View Breakdown by Namespace" expandable section
777 - Table headers (Namespace, Events, Files)
780 - Section header and description
781 - Visual Effects descriptions (Calendar Grid, Event Sidebar, Sidebar Widget, Day Popup)
782 - Save button and hint text
785 - Section header and description
786 - Radio button labels (By Age, By Status, By Date Range)
787 - Age options (Delete events older than, months, years)
788 - Status options (Completed tasks, Past events)
789 - Date range labels (From, To)
790 - Namespace filter label and placeholder
791 - Preview and Delete button labels
792 - JavaScript confirmation messages
793 - Loading/error states
796 - Section header
797 - Button labels (Trim All Past, Rescan)
800 - Section header and description
801 - Search placeholder
802 - Control bar buttons (All, None, Delete, Move to)
803 - Datalist placeholder
808 ## Version 6.10.1 (2026-02-13) - LANGUAGE SYSTEM FIX
811 - Fixed `getMenuText()` to use `$this->getLang('menu')` instead of hardcoded string
812 - Admin menu now correctly shows "Kalenderverwaltung" in German
813 - Admin tabs now use language system:
814 - "Manage Events" → "Termine verwalten"
815 - "Update Plugin" → "Plugin aktualisieren"
816 - "Outlook Sync" → "Outlook-Sync"
817 - "Themes" → "Designs"
820 - Admin tab labels
821 - Admin section headers (Event Browser, Important Namespaces, etc.)
822 - Sync settings labels
823 - Common button labels (Run Now, Download, Upload, Delete, etc.)
825 ## Version 6.10.0 (2026-02-13) - GERMAN LANGUAGE SUPPORT
828 - Added complete German (de) language file
829 - Expanded English language file with comprehensive translatable strings
830 - Both files include 100+ translation strings covering:
831 - General terms (calendar, events, dates)
832 - Event fields (title, description, time, etc.)
833 - Actions (add, edit, delete, save, cancel)
834 - Task-related terms
835 - Recurring event options
836 - Days of week and months
837 - User messages and confirmations
838 - Search functionality
839 - Sync status messages
840 - Admin section labels
841 - Sidebar widget labels
842 - Time conflict warnings
847 ## Version 6.9.9 (2026-02-13) - CRITICAL SEARCH FIX
850 - **Root cause:** Function name collision - there were two `fuzzyMatch` functions
851 - `window.fuzzyMatch` (for namespace search autocomplete) returns a score number or `null`
852 - Local `fuzzyMatch` (for event search) returns `true`/`false`
853 - When filtering events, the wrong function was being called, returning `null` for all events
854 - **Fix:** Renamed event search functions to `eventSearchNormalize` and `eventSearchMatch`
855 - Month search now works correctly on first load and after navigation
858 - Fixed jumpToDate to properly hide search clear button after navigation
859 - Removed debug logging from production code
861 ## Version 6.9.8 (2026-02-12) - SEARCH & UI FIXES
865 **All-Dates Search Navigation Fixed**
866 - Clicking a search result now properly navigates to that event's month
867 - Opens the day popup showing the event details
868 - Was calling non-existent `loadMonth()` - now uses correct `navCalendar()`
869 - Clears search results and restores normal event list view
872 - No longer shows "No events match your search" when in all-dates mode
873 - All-dates mode has its own results display; the month-mode message was incorrectly appearing
876 - Search bar no longer pushes the "+ Add" button off the right edge
877 - Search container has constrained max-width (160px) and proper flex settings
878 - Header has overflow:hidden to prevent layout issues
881 - Stars now appear on initial page load (PHP rendering added)
882 - Stars positioned outside the bar using CSS ::before pseudo-element
883 - Added overflow:visible to event-indicators and event-bar containers
884 - Bar remains full width; star sits in the left margin area
887 - Star uses `event-bar-has-star` class for first-day-only display
888 - jumpToDate() properly cleans up search state before navigation
890 ## Version 6.9.7 (2026-02-12) - IMPORTANT NAMESPACE IMPROVEMENTS
893 - **AJAX refresh now preserves important namespace highlighting**
894 - Important namespaces list now passed to JavaScript via data attribute
895 - Highlighting persists when navigating between months
896 - Works in both main calendar sidebar and standalone event panels
898 ### New Feature: Calendar Grid Star Icons
899 - **Important events now show ⭐ on their color bars** in the calendar grid
900 - Small star appears on the first day of important events
901 - Tooltip prefixed with ⭐ for important events
902 - Visual distinction without cluttering the compact grid view
905 - **Improved Important Namespaces description** in Admin → Calendar → Manage Events
906 - Now explains all visual effects:
907 - Calendar Grid: ⭐ star on event bars
908 - Event Sidebar: ⭐ star + highlighted background + accent border
909 - Sidebar Widget: Dedicated "Important Events" section
910 - Day Popup: Events shown with full details
911 - Better example placeholder text
914 - Fixed PHP syntax error in fuzzy search (curly quotes replaced with escape sequences)
915 - Important namespaces loaded once and stored in container dataset for JavaScript access
917 ## Version 6.9.6 (2026-02-12) - FUZZY SEARCH & SIDEBAR HIGHLIGHTING
920 - **Improved search matching:** Search is now more forgiving of punctuation differences
921 - "fathers day" matches "Father's Day"
922 - "new years" matches "New Year's Eve"
923 - Smart quotes, apostrophes, dashes, and common punctuation are ignored
924 - **Multi-word search:** All words must be present but in any order
925 - "birthday john" matches "John's Birthday Party"
926 - Works in both "this month" and "all dates" search modes
929 - Events from important namespaces now highlighted in the main calendar's event list sidebar
930 - Same visual treatment as the itinerary sidebar widget:
931 - Subtle theme-colored background tint
932 - Right border accent bar
933 -star icon before event title
934 - Theme-specific colors:
935 - Matrix: green tint
936 - Purple: purple tint
937 - Pink: pink tint
938 - Professional: blue tint
939 - Wiki: light blue tint
940 - Configure important namespaces in Admin → Calendar → Sync Settings
942 ## Version 6.9.5 (2026-02-12) - SEARCH MODE TOGGLE
945 - **Search mode button** (��/��) added next to search input in both calendar views
946 - **Default mode** (��): Search only the current month's events (fast, local filtering)
947 - **All dates mode** (��): Search across ALL calendar data via AJAX
948 - Click the �� button to toggle to �� (green highlight when active)
949 - Requires at least 2 characters to search
950 - Shows results with date, time, and namespace
951 - Click any result to jump to that date and open the day popup
952 - Limited to 50 results for performance
953 - Search placeholder text updates to indicate current mode
954 - Compact button design takes minimal space
957 - Button sits flush with search input (no gap)
958 - Green highlight when "all dates" mode is active
959 - Results show full date (e.g., "Mon, Feb 12, 2026")
960 - Namespace badge shown for multi-namespace setups
962 ## Version 6.9.4 (2026-02-12) - POPUP IMPROVEMENTS & IMPORTANT HIGHLIGHTING
965 - **Draggable Day Popup:** Calendar day popup window is now draggable by its header
966 - Click and drag the header to move the popup
967 - Header shows move cursor on hover
968 - Clicking the close button (×) still closes normally
970 - **Important Namespace Highlighting in Sidebar:**
971- Events from "important" namespaces (defined in Admin → Sync Settings) now have subtle highlighti…
972- Theme-aware background tint (green for Matrix, purple for Purple, pink for Pink, blue for Profes…
973 - Right border accent bar for visual distinction
974 -star icon appears before event title
975 - Works in Today, Tomorrow, and Important Events sections
978 - **Fixed event display in day popup:** Long titles no longer cut off the edit/delete buttons
979 - Event title now wraps to multiple lines instead of truncating
980 - Actions buttons always visible
981 - Time, date range, and namespace badges wrap properly
982 - Improved flex layout for better responsiveness
984 ## Version 6.9.3 (2026-02-12) - ADMIN EDIT DIALOG CONSISTENCY
987 - **Edit Recurring Event dialog** in Admin section now matches the main event editor exactly:
988 - Same dark theme styling (#1e1e1e background, #2c3e50 header)
989 - Same header layout with close button (×) in top-right corner
990 - Same input styling (dark inputs with green accent borders)
991 - Same footer with Cancel/Save buttons layout
992 - Same recurrence options box styling
993 - Consistent spacing, fonts, and colors throughout
995 ## Version 6.9.2 (2026-02-12) - MOBILE DIALOG FIX
998 - **Fixed:** Description textarea now extends full width on mobile/phone view
999 - Reduced form padding from 12px to 8px on screens ≤480px
1000 - Added explicit `width: 100%` and `box-sizing: border-box` to textarea
1001 - Ensured all form inputs/selects use full available width on mobile
1003 ## Version 6.9.1 (2026-02-11) - ADMIN RECURRING EVENTS INTEGRATION
1006 - **Enhanced Recurring Events Table:**
1007- Pattern column now shows color-coded badges (daily=blue, weekly=green, monthly=orange, yearly=pi…
1008 - "First" column renamed to "Range" showing full date span (e.g., "Feb 1, 2026 → Dec 15, 2026")
1009 - Patterns now read from stored metadata when available, with smart fallback to detection
1011 - **Edit Recurring Series Dialog:**
1012 - Full recurrence pattern editing (not just simple intervals)
1013 - "Repeat every [N] [period]" with dropdown for Daily/Weekly/Monthly/Yearly
1014 - Weekly: Day-of-week checkboxes (Sun-Sat) with current days pre-selected
1015 - Monthly: Radio choice between "Day of month" or "Weekday pattern"
1016 - Ordinal weekday selector (First/Second/Third/Fourth/Fifth/Last + day dropdown)
1017 - Pre-populates all fields from stored recurrence metadata
1018 - Properly reschedules future events using new pattern
1020 - **Manage Series Dialog:**
1021 - Updated summary to show date range
1022 - Extend/trim/change pattern functions work with new patterns
1025 - `findRecurringEvents()` captures all recurrence metadata from events
1026 - `formatRecurrencePattern()` generates human-readable pattern descriptions
1027 - `detectRecurrencePattern()` enhanced to detect more interval variations
1028 - `editRecurringSeries()` PHP handler processes new recurrence parameters
1029 - `generateRecurrenceDates()` creates dates matching complex patterns
1030 - Recurrence metadata preserved and updated across all event occurrences
1032 ## Version 6.9.0 (2026-02-11) - ADVANCED RECURRING EVENTS
1035 - **Enhanced Recurring Event Options:**
1036 - **Interval support:** Repeat every N days/weeks/months/years (e.g., every 3 months)
1037 - **Weekly day selection:** Choose specific days of the week (e.g., Mon, Wed, Fri)
1038 - **Monthly options:**
1039 - Day of month: Repeat on specific day (e.g., 15th of each month)
1040 - Ordinal weekday: Repeat on pattern (e.g., 2nd Wednesday, Last Friday)
1041 - **Examples now possible:**
1042 - Every 2 weeks on Monday and Thursday
1043 - Every 3 months on the 15th
1044 - Every other month on the 2nd Wednesday
1045 - Every year on the same date
1046 - Last Friday of every month
1049 - Redesigned recurring options section with bordered container
1050 - "Repeat every [N] [period]" input with interval number field
1051 - Day-of-week checkboxes for weekly recurrence
1052 - Radio buttons for monthly: "Day of month" vs "Weekday pattern"
1053 - Ordinal dropdown (First/Second/Third/Fourth/Fifth/Last)
1054 - Day dropdown (Sunday through Saturday)
1055 - Helper text for end date field
1058 - New parameters: recurrenceInterval, weekDays, monthlyType, monthDay, ordinalWeek, ordinalDay
1059 - Recurrence pattern stored in event data for reference
1060 - Maximum 365 occurrences (up from 100) to support daily events for a year
1061 - Smart date iteration for complex patterns
1063 ## Version 6.8.1 (2026-02-11) - ITINERARY DEFAULT STATE SETTING
1066 - **Added:** Option to set itinerary default state (expanded or collapsed)
1067 - New setting in Admin → Calendar → �� Sidebar Widget Settings
1068 - "�� Itinerary Section" with two options:
1069 - **Expanded** (default) - Show itinerary sections by default
1070 - **Collapsed** - Hide itinerary sections by default (click bar to expand)
1071 - Setting persists across page loads
1072 - Arrow indicator and content state reflect the saved preference on page load
1074 ## Version 6.8.0 (2026-02-11) - COLLAPSIBLE ITINERARY
1077 - **Added:** Collapsible Itinerary bar in sidebar week view
1078 - New "ITINERARY" bar below the week calendar (styled like +ADD EVENT bar)
1079 - Click to collapse/expand the Today, Tomorrow, and Important Events sections
1080 - Arrow indicator shows expanded (▼) or collapsed (►) state
1081 - Smooth animation when collapsing/expanding
1082 - Clicking a day in the week grid shows that day's events ABOVE the Itinerary bar
1083 - Selected day events remain visible whether itinerary is expanded or collapsed
1084 - Shows "No upcoming events" message when there are no itinerary items
1096 ## Version 6.7.9 (2026-02-11) - FIX EVENTS MANAGER STATISTICS
1099 - **Fixed:** �� Events Manager showing inflated count (1195 instead of ~605)
1100 - The `scanDirectoryForStats()` function was counting ALL entries in JSON files
1101 - Now properly filters to only count date keys (`YYYY-MM-DD` format)
1102 - Now validates events have `id` and `title` before counting
1103 - Click "�� Rescan" to update the statistics with correct count
1105 ## Version 6.7.8 (2026-02-11) - FILTER INVALID EVENTS
1108 - **Fixed:** Event Manager showing "(untitled)" and "mapping" entries
1109- Root cause: Calendar JSON files contain metadata keys (like "mapping") that were being parsed as…
1110 - Added date format validation (`YYYY-MM-DD`) to skip non-date keys
1111 - Added validation to require `id` and `title` fields for events
1112 - Applied fix to all event-reading functions:
1113 - `getEventsByNamespace()` - main event listing
1114 - `scanNamespaceRecursive()` - namespace scanning
1115 - `searchEvents()` - event search
1116 - `findEventsByTitle()` - title lookup
1117 - `deleteRecurringSeries()` - recurring deletion
1118 - `renameRecurringSeries()` - recurring rename
1119 - Recurring events scanner
1120 - Recurring cleanup function
1123 - Date keys must match pattern `/^\d{4}-\d{2}-\d{2}$/`
1124 - Events must have non-empty `id` and `title` fields
1125 - All other entries in JSON files are now skipped
1127 ## Version 6.7.7 (2026-02-11) - FIX PHP PATH & CLEAR LOG
1130 - **Fixed:** "sh: 1: '/usr/bin/php': not found" error - removed escapeshellarg() which was adding q…
1131 - **Fixed:** "Could not clear log file" - added better error messages showing exact issue
1132 - **Improved:** findPhpBinary() now uses is_executable() and `which php` for detection
1133 - **Improved:** clearLogFile() now shows specific error (file not found, not writable, etc.)
1135 ## Version 6.7.6 (2026-02-11) - FIX SYNC CONTROLS & LOGGING
1138 - **Fixed:** Double log entries - sync script logs internally, removed redundant stdout capture
1139 - **Fixed:** Manual sync not appearing in log - removed `--verbose` flag since script logs directly
1140 - **Fixed:** Better error messages when sync fails
1143 - **Improved:** Sync now runs without `--verbose` flag - script logs to file internally
1144 - **Improved:** Crontab warning if `>>` redirect is detected (causes duplicate entries)
1145 - **Improved:** Log viewer now shows full path to log file
1146 - **Improved:** Better pre-flight checks (directory creation, file permissions)
1147 - **Improved:** PHP binary path is now properly escaped
1164 ## Version 6.7.5 (2026-02-11) - FIX SYNC LOG OUTPUT
1167 - **Fixed:** Sync log not showing output when running sync from admin panel
1168 - Added `--verbose` flag to sync command so output is captured
1169 - Sync output is now captured and written to the log file
1170 - Log directory is created if it doesn't exist
1171 - Better error handling if log directory isn't writable
1172 - Command being executed is logged for debugging
1175 - Sync now runs in verbose mode when triggered from admin panel
1176 - All sync output (stdout/stderr) is written to the log file
1177 - Pre-flight check ensures log directory exists and is writable
1179 ## Version 6.7.4 (2026-02-11) - FIX MANUAL SYNC EXECUTION
1182 - **Fixed:** "Could not open input file: sync_outlook.php" when running manual sync
1183 - The `$pluginDir` variable was missing from `runSync()` function
1184 - Added `$pluginDir = DOKU_PLUGIN . 'calendar'` before building the command
1185 - Sync now properly changes to the plugin directory before executing
1187 ## Version 6.7.3 (2026-02-11) - FIX ADDITIONAL COUNT TYPE ERRORS
1190 - **Fixed:** Additional TypeError "count(): Argument #1 ($value) must be of type Countable|array, i…
1191 - Fixed in `scanDirectoryForStats()` (line 5453)
1192 - Fixed in namespace delete function (line 4137)
1193 - Fixed in export function (line 5516)
1194 - Fixed in import function (line 5636)
1195 - All locations now check `is_array()` before calling `count()`
1197 ## Version 6.7.2 (2026-02-11) - FIX EVENT MANAGER TYPE ERROR
1200 - **Fixed:** TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given"
1201 - Added array type checks when iterating over calendar event data
1202 - Protects against corrupted JSON data where event lists may not be arrays
1203 - Added safeguards in `getEventsByNamespace()` and `scanNamespaceRecursive()`
1205 ## Version 6.7.1 (2026-02-11) - BULK DELETE FOR BACKUPS
1208 - **Improved:** Backup management now uses bulk selection and delete
1209 - Added checkboxes next to each backup file
1210 - Added "Select All" checkbox in the action bar
1211 - Added "��️ Delete Selected" button (appears when backups are selected)
1212 - Removed individual delete buttons from each row
1213 - Shows count of selected backups
1214 - Backups are deleted sequentially with visual feedback
1217 - Clean action bar at top of backup table with selection controls
1218 - Selected count updates in real-time
1219 - Rows fade out smoothly when deleted
1221 ## Version 6.7.0 (2026-02-11) - IMPROVED RESTORE FUNCTION
1224 - **Improved:** Restore function now uses DokuWiki's Extension Manager API
1225 - Uses `helper_plugin_extension_extension` for proper installation
1226 - Handles permissions correctly through DokuWiki's standard plugin installation process
1227 - Falls back to manual instructions if Extension Manager is not available
1238 - Download the backup ZIP
1239 - Go to Admin → Extension Manager → Install
1240 - Upload the ZIP file manually
1242 ## Version 6.6.9 (2026-02-11) - REMOVE RESTORE FUNCTION
1245 - **Removed:** "Restore" button from backup management
1246 - **Removed:** `restoreBackup()` PHP method
1247 - **Removed:** `restoreBackup()` JavaScript function
1250 - **Added:** Informational note in backup section explaining how to restore:
1251 - Download the backup ZIP file
1252 - Go to Admin → Extension Manager → Install
1253 - Upload the ZIP file there
1254 - DokuWiki's extension manager handles installation safely with proper permissions
1257 …don't have (and shouldn't have) for security reasons. Using DokuWiki's built-in Extension Manager …
1259 ## Version 6.6.8 (2026-02-11) - FIX THEME KEYS & FILE PERMISSIONS
1262 - **Fixed:** "Undefined array key" warnings for wiki theme (pastdue_color, pastdue_bg, tomorrow_bg,…
1263 - Added missing theme keys to `getWikiTemplateColors()` return array
1265 - **Fixed:** "Permission denied" errors for sync.log and sync_state.json
1266 - Moved sync files from plugin directory to `data/meta/calendar/` (writable location)
1267 - Updated sync_outlook.php, admin.php to use new paths
1268 - sync_config.php remains in plugin directory (must be manually configured)
1270 - **Fixed:** `findEventNamespace` now returns the actual DIRECTORY where event file lives
1271 - This ensures deletion works correctly when stored namespace differs from file location
1274 … doesn't have write access to the plugin directory. This is normal security - update via command l…
1276 ## Version 6.6.7 (2026-02-11) - FIX NAMESPACE CHANGE BUG (PART 2)
1279 - **Fixed:** Events in the DEFAULT namespace (no namespace) could not be moved to other namespaces
1280 - Root cause: The comparison `$oldNamespace !== ''` was always FALSE for default namespace events
1281- Changed to `$oldNamespace !== null` to properly distinguish between "event not found" (null) and…
1282 - This allows moving events FROM the default namespace TO any other namespace
1283- Also fixed null coalescing for recurring events: `$oldNamespace ?? $namespace` instead of `$oldN…
1285 ## Version 6.6.6 (2026-02-11) - FIX NAMESPACE CHANGE & DELETE BUGS
1288 - **Fixed:** Changing an event's namespace now properly moves the event instead of creating a dupli…
1289 - Root cause: `findEventNamespace()` was searching in the NEW namespace instead of ALL namespaces
1290 - Now uses wildcard search `'*'` to find the existing event regardless of its current namespace
1292 - **Fixed:** Deleting an event no longer causes the calendar to filter by the deleted event's names…
1293 - Root cause: After deletion, `reloadCalendarData()` was called with the deleted event's namespace
1294 - Now retrieves the calendar's original namespace from `container.dataset.namespace`
1295 - Also fixed in `saveEventCompact()` and `toggleTaskComplete()` for consistency
1297 ## Version 6.6.5 (2026-02-11) - ADD AUTOCOMPLETE ATTRIBUTES
1300 - Added `autocomplete="new-password"` to client secret input field
1301 - Added `autocomplete="email"` to user email input field
1302 - Added `autocomplete="off"` to client ID input field
1303 - Follows browser best practices for form inputs
1305 ## Version 6.6.4 (2026-02-11) - FIX GEOLOCATION VIOLATION
1308 - **Fixed:** Browser violation "Only request geolocation information in response to a user gesture"
1309 - Weather widget now uses Sacramento as the default location on page load
1310 - Geolocation is only requested when user **clicks** on the weather icon
1311 - Click the weather icon to get your local weather (browser will prompt for permission)
1312 - Weather icon shows tooltip "Click for local weather" and has pointer cursor
1314 ## Version 6.6.3 (2026-02-11) - FIX MUTATIONOBSERVER ERROR
1317 - **Fixed:** `Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'`…
1318 - Root cause: MutationObserver tried to observe `document.body` before DOM was ready
1319 - Added `setupMutationObserver()` function that waits for DOMContentLoaded before attaching observer
1321 ## Version 6.6.2 (2026-02-11) - FIX CONFLICT TOOLTIP JAVASCRIPT LOADING
1324 - **Critical:** Fixed `showConflictTooltip is not defined` and `hideConflictTooltip is not defined`…
1325 - Root cause: `addAssets()` in action.php was loading empty `script.js` instead of `calendar-main.j…
1326 - Changed `addAssets()` to load `calendar-main.js` directly
1327 - Updated `script.js` to dynamically load `calendar-main.js` as a fallback mechanism
1329 ## Version 6.6.1 (2026-02-11) - SECURITY FIXES
1332 - **Critical:** Removed `eval()` remote code execution vulnerability in config import
1333 - **Critical:** Added admin authentication requirement to `get_system_stats.php` endpoint
1334 - **High:** Added CSRF token verification to all write operations (save, delete, toggle)
1335 - **High:** Fixed path traversal vulnerabilities in namespace delete/rename functions
1336 - **High:** Added admin privilege verification to AJAX admin routes
1339 - **Input Validation:** Date format (YYYY-MM-DD), time format (HH:MM), color format (#RRGGBB)
1340 - **Input Validation:** Year range (1970-2100), month range (1-12), namespace format
1341 - **Input Validation:** Recurrence type whitelist, title/description length limits
1342 - **Debug Logging:** All debug logging now conditional on `CALENDAR_DEBUG` constant (off by default)
1343 - **JSON Handling:** Added `safeJsonRead()` helper with proper error handling
1344 - **Timezone:** Sync script now uses configured timezone instead of hardcoded value
1347 - Documented intentional switch fallthrough in `get_system_stats.php`
1348 - Standardized error response format
1350 ## Version 6.6.0 (2026-02-11) - BACKUP & UI IMPROVEMENTS
1353 - **Backup:** Fixed recursive directory backup to properly include all subdirectories (including `l…
1354 - **Backup:** Now uses `SELF_FIRST` iterator to process directories before their contents
1355 - **Backup:** Empty directories are now explicitly added with `addEmptyDir()` to preserve structure
1358 - **Namespace Explorer:** Cleanup status message now appears prominently at top of section
1359 - Previously status message was at bottom, easy to miss after cleanup operations
1361 ## Version 6.5.5 (2026-02-11) - FIX AJAX ROUTING & MOVE CLEANUP BUTTON
1364 - All admin AJAX actions (cleanup, rescan, extend, trim, pause, resume, change start/pattern) were …
1365 - Root cause: AJAX calls go through `action.php`'s switch statement, not `admin.php`'s `handle()` m…
1366 - Added routing in `action.php`: new cases forward to `admin.php` via `routeToAdmin()` helper
1367 - Added public `handleAjaxAction()` method in `admin.php` as the entry point from `action.php`
1370 - Moved "�� Cleanup" button from standalone section to inline next to "➕ New Namespace" in the cont…
1371 - Status messages still appear below the namespace explorer
1373 ## Version 6.5.4 (2026-02-11) - FIX PHP PARSE ERROR IN CLEANUP JS
1376 - Root cause: `style='color:...'` single quotes inside PHP `echo '...'` block terminated the PHP st…
1377 - PHP saw `color:#e74c3c` as unexpected PHP code instead of part of the JS string
1378 - Fixed all 5 occurrences in cleanupEmptyNamespaces JS: escaped single quotes as `\'`
1379 - Added `adminColors` JS object (text, bg, border) injected from PHP `$colors` at render time
1380 - Cleanup detail text uses `adminColors.text` to respect DokuWiki template theme colors
1382 ## Version 6.5.3 (2026-02-11) - FIX CLEANUP NAMESPACES PARSE ERROR
1385 - Fixed PHP parse error on line 1089 caused by `$colors['text']` PHP variable inside JS string conc…
1386 - The cleanup results detail list now uses hardcoded `#666` for text color instead of attempting PH…
1388 ## Version 6.5.2 (2026-02-11) - CLEANUP EMPTY NAMESPACES
1391 - "�� Cleanup Empty Namespaces" button added at bottom of Namespace Explorer section
1392 - Dry-run scan first: shows exactly what will be removed with bullet-point details in confirm dialog
1393 - Removes empty calendar folders (0 JSON files or all-empty JSON files) from any namespace
1394 - Removes parent namespace directories if they become empty after calendar folder removal
1395 - Root calendar directory is never removed
1396 - AJAX-powered with inline status showing results after cleanup
1397 - Page auto-reloads after 2 seconds to refresh the namespace explorer view
1398 - Recursively scans all nested namespace directories via `findAllCalendarDirsRecursive()`
1400 ## Version 6.5.1 (2026-02-11) - TRIM ALL PAST: SHOW COUNT BEFORE DELETE
1403 - "Trim All Past" button now does a dry-run count before showing the confirmation dialog
1404 - Confirmation shows exact count: "Found 47 past recurring events to remove"
1405 - If zero found, shows "No past recurring events found to remove" instead of confirm
1406 - PHP handler supports `dry_run` parameter that counts without deleting
1408 ## Version 6.5.0 (2026-02-11) - BULK TRIM ALL PAST RECURRING EVENTS
1411 - Red "✂️ Trim All Past" button added next to the Rescan button in the Recurring Events section hea…
1412 - Removes ALL past occurrences (before today) from EVERY recurring series in one click
1413 - Only removes events with `recurring` or `recurringId` flags — non-recurring events are untouched
1414 - Confirmation dialog required before execution
1415 - AJAX-powered with inline status showing count removed, then auto-rescans the table
1416 - Searches all calendar directories recursively
1418 ## Version 6.4.9 (2026-02-11) - FIX RECURRING EDIT/DELETE: SEARCH ALL DIRECTORIES
1421 - Edit and Delete recurring series now search ALL calendar directories instead of building a path f…
1422 - Root cause: event's `namespace` field (stored in JSON) can differ from the filesystem directory w…
1423 - Both handlers now use `findCalendarDirs()` to collect every calendar directory recursively
1424 - Events matched by title AND namespace field (case-insensitive) for precise targeting
1425 - Edit handler rewritten: rename/time/namespace updates in Pass 1, interval respace in Pass 2
1426 - New `findCalendarDirs()` helper method for recursive directory discovery
1428 ## Version 6.4.8 (2026-02-11) - FIX PHP PARSE ERROR IN MANAGE DIALOG
1431 - Rewrote `manageRecurringSeries()` JS function using string concatenation instead of template lite…
1432 - JS template literals (`${...}`) inside PHP echo blocks caused PHP to parse them as variable inter…
1433 - All inline onclick handlers now use `\x27` for single quotes to avoid escaping conflicts
1435 ## Version 6.4.7 (2026-02-11) - RECURRING EVENTS: FULL MANAGEMENT CONTROLS
1438 - Orange "Manage" button opens a comprehensive management dialog for each recurring series
1441 - Add N new occurrences after the last event in the series
1442 - Configurable interval: Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly
1443 - New events copy title, time, color, namespace, and recurring flag from the last event
1446 - Remove all occurrences before a selected cutoff date
1447 - Confirmation required before deletion
1448 - Cleans up empty date keys and files automatically
1451 - Respace future occurrences with a new interval
1452 - Past events are untouched; only future events are removed and re-created
1453 - First future event becomes the anchor date
1456 - Shift ALL occurrences by the difference between old and new start date
1457 - Events are removed from old positions and re-created at new positions
1458 - Preserves spacing between all events
1461 - Pause: adds ⏸ prefix and paused flag to all future occurrences
1462 - Resume: removes ⏸ prefix and paused flag from all occurrences
1463 - Button toggles based on whether series is currently paused
1466 - New shared `recurringAction()` JS helper for all AJAX management operations
1467 - New `getRecurringSeriesEvents()` PHP helper for finding all events in a series
1468 - Status messages shown inline in the management dialog
1469 - Close button triggers automatic rescan to refresh the table
1471 ## Version 6.4.6 (2026-02-11) - RECURRING EVENTS: RESCAN BUTTON & IMPROVED LOGIC
1474 - Green "�� Rescan" button added to the Recurring Events section header
1475 - AJAX-powered: rescans all calendar data and refreshes the table without page reload
1476 - Shows count of found series briefly after scan completes
1479 - Events with `recurring: true` flag are now detected first (grouped by `recurringId`)
1480 - Pattern-detected events (3+ same-title occurrences) are found separately and deduplicated
1481 - New "Source" column shows ��️ Flagged (has recurring flag) vs �� Detected (pattern match)
1482 - Median interval used for pattern detection instead of just first two dates (more robust)
1483 - New patterns recognized: Quarterly, Semi-annual, and "Every ~N days" for custom intervals
1484 - Empty/invalid titles and malformed date arrays are now skipped safely
1485 - Dates are deduplicated before counting (prevents inflated counts from multi-day events)
1486 - Nested namespace directories now scanned recursively
1487 - Results sorted alphabetically by title
1489 ## Version 6.4.5 (2026-02-11) - ADMIN VERSION HISTORY OVERHAUL
1492 - All purple (#7b1fa2) accent colors replaced with green (#00cc07) to match admin theme
1493 - Changelog parser now handles `###` subsection headers (rendered as green bold labels)
1494 - Plain `- ` bullet items now parsed and categorized under their subsection
1495 - Previously only `- **Type:** description` format was recognized
1498 - Green "Current Release" button added between nav arrows
1499 - Jumps directly to the card matching the running version from plugin.info.txt
1500 - Running version card shows green "RUNNING" badge and thicker green border
1502 ## Version 6.4.4 (2026-02-11) - WIKI THEME: PAST EVENTS TOGGLE BACKGROUND
1505 - Wiki theme past events pulldown (retracted state) now uses `__background_neu__` (`--cell-today-bg…
1506 - Previously used `--cell-bg` which appeared unthemed/white
1508 ## Version 6.4.3 (2026-02-11) - WIKI THEME: DAY HEADERS BACKGROUND
1511 - Wiki theme SMTWTFS day headers now use `__background_neu__` (`--cell-today-bg`) instead of `--bac…
1513 ## Version 6.4.2 (2026-02-11) - WIKI THEME: DAY HEADERS (INITIAL)
1516 - Added explicit CSS override for `.calendar-theme-wiki .calendar-day-headers`
1517 - Day header text uses `--text-primary` (template's `__text__` color)
1519 ## Version 6.4.1 (2026-02-11) - WIKI THEME: EVENT HIGHLIGHT
1522 - Wiki theme event highlight (when clicking calendar bar) now uses `themeStyles.header_bg` (`__back…
1523 - Subtle shadow instead of blue glow
1525 ## Version 6.4.0 (2026-02-11) - DARK READER: SECTION BAR COLOR MATCHING
1528 - Wiki theme section left bar now uses a `<div>` with `background` instead of `border-left`
1529 - Dark Reader maps the same color differently for border vs background properties, causing visual m…
1530 - Both the bar and header now use `background`, so Dark Reader maps them identically
1531 - Flex layout wrapper added for wiki theme sections
1532 - Wiki fallback colors updated: `border` key now uses `#ccc` (matching `__border__`) instead of `#2…
1534 ## Version 6.3.9 (2026-02-10) - WIKI THEME: SECTION BAR FIX (ATTEMPT)
1537 - Simplified wiki section container — removed `wiki-section-container` class
1538 - Added `background` from `$themeStyles['bg']` to section container
1540 ## Version 6.3.8 (2026-02-10) - WIKI THEME: BUTTON & SECTION HEADER COLORS
1543 - Nav buttons (< >), Today button, and panel buttons now use `__link__` color background with white…
1544 - CSS overrides for `.calendar-theme-wiki .cal-nav-btn`, `.cal-today-btn`, panel buttons
1547 - Today: `__link__` background (accent/link color)
1548 - Tomorrow: `__background_alt__` background (alternate background)
1549 - Important: `__border__` background (border color)
1550 - Each section now has a distinct color from the template palette
1552 ## Version 6.3.7 (2026-02-10) - WIKI THEME CHECKBOX FIX
1555 - Wiki theme checkbox override changed from `border-color` to full `border: 2px solid` shorthand
1556 - Properly overrides the base rule which uses `border` shorthand
1557 - Hover state also uses full shorthand
1559 ## Version 6.3.6 (2026-02-10) - WIKI THEME CHECKBOX BORDER COLOR
1562 - Wiki theme unchecked checkboxes now use `--border-main` (template's `__border__` color) for border
1563 - Checked state fills with border color
1564 - Hover state uses border color
1565 - Applied to calendar, sidebar, and eventlist containers
1567 ## Version 6.3.5 (2026-02-10) - WIKI THEME: ALLOW DARK READER ON HEADERS
1570 - Wiki theme section headers (Today/Tomorrow/Important) no longer use `!important` or `-webkit-text
1571 - Dark Reader can now freely adjust background, text color, and borders on wiki theme headers
1572 - Clicked-day panel header and section border-left also unlocked for wiki theme
1573 - All other themes (matrix/purple/pink/professional) retain full Dark Reader protection
1575 ## Version 6.3.4 (2026-02-10) - WIKI THEME: BORDER COLOR FOR HEADERS & BADGES
1578 - `border` (accent color) now maps to template's `__border__` instead of `__link__`
1579 - This affects: section headers (Today/Tomorrow/Important), badges (TODAY, namespace), sidebar widg…
1580 - `text_bright` still maps to `__link__` for link text and accent text
1581 - Section headers all use the same `__border__` color for consistent appearance
1582 - Updated COLOR_SCHEME mapping documentation
1584 ## Version 6.3.3 (2026-02-10) - WIKI THEME SECTION HEADER TEXT COLOR
1587 - Wiki theme Today/Tomorrow/Important section header text now uses `$themeStyles['text_primary']` (…
1588 - Clicked-day panel header text also uses template text color for wiki theme
1589 - Professional theme remains white text on blue headers
1591 ## Version 6.3.2 (2026-02-10) - FIX THEME NOT UPDATING ON SIDEBAR EVENTLIST
1594 - Added `$renderer->nocache()` to the render function
1595 - DokuWiki was caching the rendered sidebar HTML, so theme changes made in admin were never reflect…
1596 - Now all calendar/eventlist/eventpanel outputs are rendered fresh on each page load, picking up th…
1598 ## Version 6.3.1 (2026-02-10) - EVENTLIST THEMING
1601 - Eventlist containers now receive theme class (`eventlist-theme-matrix`, etc.) and full CSS variab…
1602 - Dark themes get themed border + glow, light themes get subtle border
1603 - Container background set from `$themeStyles['bg']` with `!important`
1606 - Title, header, time, date, body, links, strong, code, namespace badge, empty state
1607 - Today header, clock, date — all with `color` + `-webkit-text-fill-color` `!important`
1608 - Item borders, section backgrounds, code block backgrounds
1609 - Full Dark Reader protection via same inline+CSS approach as calendar/sidebar
1611 ## Version 6.3.0 (2026-02-10) - DARK READER COMPATIBILITY & COMPLETE THEMING
1614 …pproach uses targeted inline `!important` styles and `-webkit-text-fill-color` overrides — no page
1617 - Section headers (Today/Tomorrow/Important) — background, text color, text-fill-color
1618 - Clicked-day panel header — background, text color, close button
1619 - All badges (TODAY, PAST DUE, namespace, panel namespace, eventlist-simple) — background, text, te…
1620 - Event titles, meta, descriptions — color with !important via CSS
1621 - Day numbers, nav buttons, calendar day headers — color with !important via CSS
1622 - System status bars — inline background !important on tracks and fills
1623 - System tooltips — background, border-color, text color all set via setProperty with !important
1624 - Section left border bars — border-left with !important
1625 - Event color indicator bars — border-left-color with !important
1626 - Sidebar section event text (Purple and Pink themes)
1629 - All remaining hardcoded colors in style.css converted to CSS variable references
1630 - Calendar borders, text colors, backgrounds, input focus shadows, accent borders
1631 - Only legitimate hardcodes remain (keyframe animations, theme-specific override blocks)
1634 - New CSS variables: `--pastdue-color`, `--pastdue-bg`, `--pastdue-bg-strong`, `--pastdue-bg-light`
1635 - New CSS variables: `--tomorrow-bg`, `--tomorrow-bg-strong`, `--tomorrow-bg-light`
1636 - Injected into all 3 CSS var blocks (full calendar, event panel, sidebar widget)
1637 - Today/Tomorrow/Important section colors now theme-derived instead of hardcoded
1640 - Today/Tomorrow/Important headers use theme accent colors instead of fixed green/orange/purple
1641 - Matrix: bright/standard/dim green, Purple: bright/standard/dim purple, Pink: hot/medium/light pink
1642 - Professional: blue shades, Wiki: template-derived colors
1643 - Dark theme headers use dark background color for text contrast
1646 - **Heart today indicator** — day number displayed inside a ♥ with hot pink glow, centered via inli…
1647 - **Firework button hover** — `pink-firework-burst` keyframe animation with multi-point radiating b…
1648 - **Checkbox glow** — hot pink border with ambient glow, hover intensifies, checked fills with glow
1651 - Matrix: bright green border + green glow, Purple: purple border + purple glow
1652 - Pink: hot pink border + pink glow (with enhanced ambient effect)
1653 - Hover scales 1.1x with intensified glow on all themes
1654 - Checked state fills with theme accent color + outer glow
1657 - Both tooltip functions use theme-derived colors from `$themeStyles`
1658 - Green tooltip: `text_bright`, Purple: `border`, Orange: `text_primary`
1659 - Background from `$themeStyles['bg']`, divider borders use theme accent colors
1660 - All properties set with `style.setProperty(prop, value, "important")`
1663 - Removed inline namespace badge from event side panel header
1664 - Filter indicator bar ("Filtering: namespace ✕") retained and working
1665 - AJAX-based namespace filtering fully functional via onclick handlers
1667 ## Version 6.1.0 (2026-02-10) - TODAY INDICATOR, BUTTON HOVER & CHECKBOXES
1670 - **Added:** Today's day number now shows as a filled circle with theme accent color background and…
1671 - **Added:** Today cell has `--cell-today-bg` background AND a visible inset border glow on hover u…
1672 - **Added:** `.day-num` now uses `--text-primary` for color instead of relying on browser default
1675 - **Fixed:** All buttons now use `filter: brightness(1.3)` on hover for a visible glow effect acros…
1676 - **Fixed:** All buttons use `filter: brightness(0.85)` on click/active for a press-down darkening …
1677 - **Fixed:** Cal nav buttons (‹/›), Today button, +Add Event button, panel nav/today/add buttons, d…
1678 - **Removed:** Generic `opacity: 0.9` hover which was barely visible on dark themes
1681 - **Added:** Custom checkbox styling for `.task-checkbox` — uses `appearance: none` with themed bor…
1682 - **Added:** `accent-color: var(--text-bright)` on all dialog checkboxes (task, recurring) for cons…
1685 - **Fixed:** `.input-sleek` now has `color: var(--text-primary)` — form text is visible on dark the…
1686 - **Added:** `::placeholder` styling for inputs/textareas using `--text-dim`
1688 ## Version 6.0.9 (2026-02-09) - FORM TEXT, CELL HOVER & GLOW TUNING
1691 - **Fixed:** Form input text (`input-sleek`, `textarea-sleek`, `select`) had no `color` property — …
1692 - **Added:** Themed placeholder text (`::placeholder`) for inputs/textareas
1695 - **Added:** Calendar day cells (`.cal-day`) now have a themed hover effect — background shifts to …
1696 - **Improved:** Nav buttons (`◄`/`►`) and Today button hover now show a themed glow + scale effect …
1697 - **Added:** Active (click) state for nav/today buttons with scale-down feedback
1698 - **Improved:** Month picker hover now also shows a subtle theme shadow
1701 - Matrix and purple text glow reduced from 2px to 1px across: event titles, descriptions, meta, lin…
1702 - Matrix clock pulse animation reduced from 6px/10px+15px to 2px/4px+6px
1703 - Weather text glow reduced to 1px, clock to 2px
1704 - Pink remains at 2px (barely noticeable)
1706 ## Version 6.0.8 (2026-02-09) - LINKS, GLOW CONSISTENCY & PINK TONE-DOWN
1709 - **Added:** `.cal-link` CSS class — all links rendered via `renderDescription()` now pick up theme…
1710 - **Fixed:** Sidebar widget links (`a.cal-link`) inherit theme colors
1711 - **Fixed:** Event list widget description links (`eventlist-widget-desc a`) use CSS vars
1712 - **Fixed:** Simple event list body links/strong/code all themed
1715 - **Added:** Subtle `text-shadow: 0 0 2px` glow on event titles, meta, and descriptions for all thr…
1716 - **Added:** Subtle link glow on dark themes
1717 - **Added:** Matrix and purple now get the same barely-visible text glow that pink had on sidebar w…
1720 - **Reduced:** Sidebar today header box-shadow from `0 0 10px 0.4` to `0 0 6px 0.25`
1721 - **Reduced:** Day number sparkle animation from 3px/6px+10px to 2px/3px
1722 - **Reduced:** Today cell shimmer from 3px+5px / 8px+12px to 2px+3px / 4px+6px
1723 - **Reduced:** Event bar glow pulse from 2px/4px+6px to 1px/2px+3px
1724 - **Reduced:** Today hover glow from 10px+15px to 5px+8px
1725 - **Reduced:** Event item glow from 2px/5px to 1px/3px
1726 - **Reduced:** Calendar container glow from 8px to 5px
1729 - **Themed:** Sidebar weather, date, and clock text colors and glow via CSS vars
1731 ## Version 6.0.7 (2026-02-09) - BADGES, BUTTONS & CONFLICT THEMING
1733 - **Fixed:** Namespace badges (`.namespace-badge`, `.event-namespace-badge`, `.panel-ns-badge`, sta…
1734 - **Fixed:** TODAY badge uses `--border-main` for background instead of hardcoded purple
1735 - **Fixed:** Conflict alert badge (`⚠️`) uses `--border-main` background and `--text-bright` border…
1736 - **Fixed:** Conflict tooltip header background now set inline from theme vars (tooltip is appended…
1737 - **Fixed:** Conflict tooltip body items use themed text and border colors
1738 - **Fixed:** Month picker Go/Cancel buttons themed (`--text-bright` for save, `--cell-bg` for cance…
1739 - **Fixed:** Calendar header month/year hover uses `--cell-today-bg` background
1740 - **Fixed:** Inline search input border uses `--border-color`
1741 - **Fixed:** Event list header border uses `--border-color`
1743 ## Version 6.0.6 (2026-02-09) - COMPLETE TEXT THEMING
1745 - **Fixed:** Calendar header month/year title had hardcoded dark color — now uses `--text-primary`
1746 - **Fixed:** Month/year picker hover used hardcoded gray background and green text — now uses `--ce…
1747 - **Fixed:** Event list items (titles, meta, descriptions, links, code blocks, bold text) — all now…
1748 - **Fixed:** Completed/past event states used hardcoded grays — now use `--cell-bg`, `--text-dim`, …
1749 - **Fixed:** Scrollbar track/thumb colors now use theme vars
1750 - **Fixed:** Namespace filter indicator (background, label, badge, close button) — all themed
1751 - **Fixed:** Panel standalone month picker hover and namespace badge — themed
1752 - **Fixed:** Calendar header border-bottom — now uses `--border-color`
1754 ## Version 6.0.5 (2026-02-09) - THEMED BORDERS & EVENT PANEL
1756 - **Added:** Theme-colored border and glow for calendar container on matrix, purple, and pink theme…
1757 - **Added:** Theme-colored border and glow for event panel (`{{eventpanel}}`) on dark themes using …
1758 - **Themed:** Event panel header (nav buttons, month title, today button, search input, add button)…
1759 - **Themed:** Panel standalone header background and border
1761 ## Version 6.0.4 (2026-02-09) - FULL DIALOG THEMING
1763 - **Fixed:** Day cell click popup (day-popup) used hardcoded white/gray colors — now fully theme-aw…
1764 - **Fixed:** Event add/edit dialog (dialog-content-sleek) had hardcoded white background and blue h…
1765 - **Fixed:** Month picker dialog had hardcoded white background and dark text — now themed
1766 - **Fixed:** Popup event items, titles, times, descriptions, footer, add-event button, close button…
1767 - **Fixed:** Form elements (field labels, inputs, checkboxes, recurring options, color pickers) — a…
1768 - **How it works:** `propagateThemeVars()` copies CSS variables from the calendar container to dial…
1770 ## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB
1772 - **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Event…
1773 - **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage …
1774 - **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now …
1775 - **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value
1777 ## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX
1779 - **Fixed:** In Firefox, the SMTWTFS day-of-week header row was rendering at the same height as cal…
1781 ## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX
1783 - **Fixed:** `theme=wiki` (and all `theme=` parameters) had no effect — all three render functions …
1784 - **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller
1785 - **How it works now:** `{{calendar theme=wiki}}`, `{{eventlist sidebar theme=purple}}`, `{{eventpa…
1788 ## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE
1790 - **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced brace…
1791 - **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verif…
1792 - **Audited:** style.css (3,218 lines) — balanced braces confirmed
1793 - **Audited:** All admin manage tab action handlers verified functional (13 actions)
1794 - **New:** Fresh README.md for GitHub with complete documentation
1795 - **Includes all v5.5.x fixes:**
1796 - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total))
1797 - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel
1798 - Conflict badges on past events after AJAX navigation
1799- Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all …
1801 ## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP
1803 - **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section heade…
1804 - **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now us…
1805 - **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning
1806 - **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name
1807 - **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly dec…
1808 - **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON …
1809 - **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving
1810 - **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files
1811 - **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt
1812 - **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the e…
1813 - **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`)
1814 - **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries`
1815 - **Removed:** Stale "NEW!" comment from Events Manager section
1817 ## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH
1819 - **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted event…
1820 - **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, co…
1821 - **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on firs…
1822 - **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing
1823 - **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(t…
1824 - **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates…
1825 - **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (T…
1826 - **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead
1827 - **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text
1828 - **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files,…
1830 ## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH
1832 - **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/p…
1833 - **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional)
1834 - **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead o…
1835 - **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replac…
1836 - **Changed:** Wiki theme section header text now white for readability on colored backgrounds
1837 - **Changed:** Week grid JS theme colors now use actual $themeStyles values
1839 ## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX
1841 - **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future …
1843 ## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING
1845 - **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left c…
1846 - **Fixed:** Week grid conflict tooltips also fixed (same issue)
1847 - **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded…
1848 - **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS toolt…
1850 ## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD
1852 - **Fixed:** Past events now expand on click from initial page load (PHP-rendered items were missin…
1854 ## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS
1856 - **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (app…
1857 - **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied…
1859 ## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING
1861 - **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute…
1862 - **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping title…
1863 - **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute
1864 - **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility
1866 ## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING
1868 - **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation
1869 - **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple …
1870 - **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_,…
1871 - **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1
1872 - **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM…
1873 - **Added:** ESC key now also closes day popups and conflict tooltips
1874 - **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding
1876 ## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY
1878 - **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance
1879 - **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js
1880 - **Refactored:** style.css is now the single source of truth for all visual styling
1881 - **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container
1882 - **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, side…
1883 - **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars
1884 - **Added:** CSS variable injection for {{eventlist panel}} containers
1885 - **Added:** CSS variable injection for {{eventlist sidebar}} widget containers
1886 - **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM …
1887 - **Added:** Wiki template mapping reads __link__ as accent color from style.ini
1888 - **Added:** Detailed CSS variable reference table in style.css header comment
1889 - **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php
1890 - **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles
1891 - **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div
1892 - **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible)
1893 - **Removed:** $isWikiTheme branching from PHP render path
1895 ## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! ��
1898 - **Added:** 8-12 pink hearts in each click explosion
1899 - **Added:** Random sizes (12-28px) and directions
1900 - **Result:** Extra love in every click! ��
1903 - **Fixed:** Added `background: transparent` to CSS (was completely removed)
1904 - **Fixed:** Now CSS readers can detect and modify background property
1905 - **Why:** Inline styles override transparent, but CSS readers can now see the property
1906 - **Result:** Dark mode plugins can now change calendar backgrounds!
1914 .calendar-compact-grid tbody td {
1915 /* background removed - set via inline style */
1921 - Dark mode readers look for `background` property in CSS
1922 - Can't override what doesn't exist
1923 - Inline styles work, but readers can't modify them
1927 .calendar-compact-grid tbody td {
1934 - Property exists in CSS
1935 - Dark mode readers can override it
1936 - Inline styles still override transparent
1937 - Everyone wins!
1942 - `.calendar-compact-grid tbody td` ✓
1943 - `.calendar-compact-grid tbody td:hover` ✓
1944 - `.event-compact-item` ✓
1945 - `.event-compact-item:hover` ✓
1958 - Count: 8-12 per explosion (random)
1959 - Size: 12-28px (random variety)
1960 - Emoji: �� (pink heart)
1961 - Direction: Random 360°
1962 - Speed: 60-140px travel
1963 - Duration: 0.8-1.2s
1964 - z-index: 9999999 (always visible)
1967 - 25 glowing particles
1968 - 40 pixel sparkles
1969 - Bright flash
1970 - **Total: 73-77 elements!**
1988 .calendar-compact-grid tbody td {
2002 ## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! ��
2005 - **Fixed:** Increased z-index to 9999999 for all particles
2006 - **Fixed:** Particles now visible above event dialogs, month picker, etc.
2007 - **Result:** Cursor effects and explosions always visible!
2009 ### The Z-Index Problem
2012 - Particles: z-index 9999
2013 - Dialogs: z-index 10000-999999
2014 - **Particles hidden behind dialogs!**
2017 - Particles: z-index 9999999
2018 - Trail: z-index 9999998
2019 - Pixels: z-index 9999997
2020 - **Particles ALWAYS on top!**
2030 - Event dialog popups
2031 - Month picker
2032 - Day popups
2033 - Any modal overlays
2058 ## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX
2061 - **Fixed:** Jump to Month dialog now uses theme colors
2062 - **Fixed:** Dialog background, borders, text all themed
2063 - **Fixed:** Select dropdowns use theme colors
2064 - **Fixed:** Buttons use theme accent colors
2065 - **Result:** Month picker matches calendar theme!
2068 - **Fixed:** Cursor trail now works when hovering over dialogs
2069 - **Fixed:** Click explosions work when clicking inside dialogs
2070 - **Technical:** Changed to capture phase event listeners
2071 - **Result:** Effects work EVERYWHERE now!
2076 - White background (hardcoded)
2077 - Black text (hardcoded)
2078 - No theme integration
2079 - Looked out of place
2082 - Dialog background: `theme.bg`
2083 - Dialog border: `theme.border`
2084 - Text color: `theme.text_primary`
2085 - Dropdowns: `theme.cell_bg` + `theme.text_primary`
2086 - Cancel button: `theme.cell_bg`
2087 - Go button: `theme.border` (accent color)
2091 ---
2123 ---
2144 ---
2156 ---
2168 - Events caught before stopPropagation
2169 - Works in all dialogs
2170 - No conflicts with dialog logic
2172 ---
2176 ✅ **Month picker** - Now themed!
2177 ✅ **Event dialog** - Already themed
2178 ✅ **Day popup** - Already themed
2182 ---
2184 ## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨
2187 - **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail
2188 - **Added:** 40 pixel sparkles in click explosions
2189 - **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar)
2190 - **Result:** Maximum sparkle effect! ��
2194 **3-6 tiny bright pixels appear with each cursor movement!**
2197 - Size: 1-2px (single pixel appearance!)
2198 - Colors: Bright neon whites and pinks
2199 - Pure white (#fff) - 40% chance
2200 - Hot pink (#ff1493)
2201 - Pink (#ff69b4)
2202 - Light pink (#ffb6c1)
2203 - Soft pink (#ff85c1)
2204 - Glow: Triple-layer shadow (intense!)
2205 - Spawn: Random 30px radius around cursor
2206 - Animations:
2207 - 50% twinkle in place
2208 - 50% float upward
2212 ---
2219 - 25 main glowing particles (6-10px)
2220 - **40 tiny pixel sparkles (1-2px)** ← NEW!
2221 - Bright white flash
2222 - Total: 65+ visual elements!
2225 - Shoot outward in all directions
2226 - Random distances (30-110px)
2227 - Multiple bright colors
2228 - Some twinkle, some explode
2229 - Creates stellar effect!
2231 ---
2238 - Only inside calendar viewport
2239 - Limited to calendar area
2242 - Works on entire screen! ✓
2243 - Cursor trail follows everywhere
2244 - Click explosions anywhere
2245 - Used `position: fixed` + `clientX/Y`
2249 ---
2273 ---
2277 **Trail Pixels** (3-6 per movement):
2278 - Size: 1-2px
2279 - Spawn rate: Every 40ms
2280 - Spread: 30px radius
2281 - Duration: 0.6-0.8s
2282 - 50% twinkle, 50% float
2285 - Size: 1-3px
2286 - Spread: 30-110px radius
2287 - Duration: 0.4-0.8s
2288 - All directions
2289 - Intense glow
2292 - Size: 4-10px
2293 - Spread: 50-150px
2294 - Full color palette
2295 - Original firework effect
2297 ---
2302 - 40% pure white (#fff) - brightest!
2303 - 60% pink shades - variety
2307 ---
2312 - Trail: 30ms throttle
2313 - Pixels: 40ms throttle
2314 - Auto-cleanup
2315 - Hardware accelerated
2316 - Smooth 60fps
2320 ---
2322 ### Full-Screen Magic
2334 ---
2336 ## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! ����
2339 - **Removed:** Emoji sparkle images (✨)
2340 - **Added:** Glowing pink particle trail following cursor
2341 - **Added:** FIREWORKS explosion on click!
2342 - **Result:** Beautiful glowing effects, not emoji!
2347 - Small glowing pink orbs (8px)
2348 - Radial gradient glow effect
2349 - Multiple box-shadows for depth
2350 - Fade out smoothly (0.5s)
2351 - Throttled to 30ms for smoothness
2359 **Not emoji - actual glowing particles!**
2361 ---
2368 - Radial burst pattern (360° coverage)
2369 - Random speeds (50-150px travel)
2370 - 4 shades of pink:
2371 - Hot pink (#ff1493)
2372 - Pink (#ff69b4)
2373 - Light pink (#ff85c1)
2374 - Very light pink (#ffc0cb)
2375 - Random sizes (4-10px)
2376 - Individual glowing halos
2377 - Smooth explosion animation
2380 - 30px radius glow
2381 - Intense pink flash
2382 - Fades quickly (0.3s)
2384 ---
2408 ---
2413 - Size: 8x8px
2414 - Color: Pink radial gradient
2415 - Shadow: 10px + 20px glow layers
2416 - Duration: 0.5s fade
2417 - Rate: 30ms throttle
2420 - Size: 4-10px (random)
2421 - Colors: 4 pink shades (random)
2422 - Shadow: 10px + 20px glow (matches color)
2423 - Duration: 0.6-1.0s (random)
2424 - Pattern: Perfect circle burst
2427 - Size: 30x30px
2428 - Color: Bright hot pink
2429 - Shadow: 30px + 50px mega-glow
2430 - Duration: 0.3s instant fade
2432 ---
2437 - Trail throttled to 30ms
2438 - Auto-cleanup after animations
2439 - CSS hardware acceleration
2440 - No memory leaks
2441 - Smooth 60fps
2445 ---
2450 - ✨ Emoji sparkle images
2451 - Static unicode characters
2452 - Limited visual impact
2455 - �� Glowing pink particles
2456 - Radial gradients + shadows
2457 - Beautiful firework explosions
2458 - Much more impressive!
2460 ---
2465 - On `.calendar-theme-pink` elements
2466 - Other themes unaffected
2467 - Pure pink magic! ��
2469 ---
2471 ## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨
2473 ### ✨ Added: MySpace-Style Sparkle Trail!
2474 - **Added:** Sparkle cursor trail that follows your mouse (pink theme only!)
2475 - **Toned down:** Reduced glow effects for better taste
2476 - **Added:** Sparkles appear on cell hover
2477 - **Added:** Sparkles on event hover (left and right sides!)
2478 - **Added:** Sparkles on today's cell corners
2479 - **Added:** Sparkles on navigation buttons
2480 - **Added:** Sparkles in calendar header
2481 - **Result:** Pure nostalgic MySpace magic! ✨
2486 - Sparkles follow your cursor as you move
2487 - Random sizes (12-22px)
2488 - Random slight offsets for natural feel
2489 - Float up and fade out animation
2490 - Throttled to 50ms (smooth, not laggy)
2491 - Only on pink theme calendars
2503 ---
2508 - Hover over any day → ✨ floats up
2509 - Smooth 1.5s animation
2510 - Centered sparkle
2513 - Hover → ✨ on left side
2514 - Hover → ✨ on right side
2515 - Staggered animations (0.4s delay)
2516 - Continuous twinkling
2519 - ✨ in top-right corner (continuous)
2520 - ✨ in bottom-left corner (offset timing)
2521 - Always sparkling!
2524 - Hover on < or > → ✨ appears top-right
2525 - One-time float animation
2528 - ✨ on left side (continuous)
2529 - ✨ on right side (offset 1s)
2530 - Always twinkling
2532 ---
2537 - 50px shadows
2538 - 4-layer effects
2539 - Overwhelming
2542 - 8-15px max shadows (subtle)
2543 - 2-layer effects
2544 - Professional with personality
2547 - Today shimmer: 35px → 12px
2548 - Today hover: 50px → 15px
2549 - Event glow: 18px → 6px
2550 - Badge pulse: 25px → 8px
2551 - Container glow: 20px → 8px
2555 ---
2559 **sparkle-twinkle** (0.8s):
2566 **sparkle-float** (1.5s):
2568 Moves up: 0px → -50px
2575 ---
2588 ---
2593 - Throttled to 50ms
2594 - Auto-cleanup after 1s
2595 - No memory leaks
2596 - Smooth 60fps
2599 - Hardware accelerated
2600 - No JavaScript overhead (except cursor)
2601 - Efficient transforms
2605 ---
2610 - Glitter graphics ✨
2611 - Sparkle cursors ✨
2612 - Auto-play music �� (ok, we didn't add that)
2613 - Animated GIF backgrounds
2614 - Comic Sans everywhere
2618 ---
2627 ---
2629 ## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨��
2632 - **Added:** Shimmering animation for today's cell
2633 - **Added:** Sparkling text effect on today's date
2634 - **Added:** Glowing pulse for event bars
2635 - **Added:** Gradient shimmer on headers
2636 - **Added:** Extra glow on hover effects
2637 - **Added:** Pulsing urgent badge for past due items
2638 - **Result:** Pink theme is now FABULOUS! ✨
2643 - Continuous shimmer animation (2 second loop)
2644 - Multi-layer glow effect
2645 - Pink and hot pink overlapping shadows
2646 - Pulses from subtle to intense
2647 - Extra sparkle on hover
2650 - Sparkle animation (1.5 second loop)
2651 - Text shadow glow effect
2652 - Slight scale pulse (100% → 105%)
2653 - Pink to hot pink shadow transition
2658 - Continuous glow pulse (2 second loop)
2659 - Uses event's own color
2660 - Adds pink accent glow layer
2661 - Creates depth and dimension
2664 - Subtle base glow
2665 - Enhanced glow on hover
2666 - Slight slide animation on hover
2667 - Professional yet playful
2672 - Animated gradient background
2673 - 3-color pink gradient flow
2674 - Smooth 3-second animation
2675 - Creates movement and life
2676 - Applies to calendar header and event list header
2681 - Sparkle animation
2682 - Synchronized with today's date
2683 - Extra prominence
2686 - Urgent pulsing effect (1 second loop)
2687 - Orange glow intensifies
2688 - Draws attention to urgent items
2689 - Faster pulse for urgency
2694 - Multi-layer pink glow
2695 - Soft outer shadow
2696 - Creates floating effect
2697 - Subtle but elegant
2701 **pink-shimmer** (2s loop):
2704 Peak: Intense 35px multi-layer glow
2708 **pink-sparkle** (1.5s loop):
2715 **pink-glow-pulse** (2s loop):
2722 **pink-gradient-shimmer** (3s loop):
2729 **pink-pulse-urgent** (1s loop - faster!):
2765 - Pink colors
2766 - Static elements
2767 - Standard shadows
2770 - Pink colors ✓
2771 - Animated shimmer ✨
2772 - Sparkling effects ��
2773 - Glowing pulses ✨
2774 - Moving gradients ��
2775 - BLING! ��
2780 - Hardware accelerated (transform, opacity)
2781 - Smooth 60fps
2782 - CSS animations (no JavaScript)
2783 - Minimal CPU usage
2784 - Disabled in reduced-motion preference
2790 .calendar-theme-pink
2794 - Matrix stays Matrix
2795 - Professional stays Professional
2796 - Purple stays Purple
2797 - Wiki stays clean
2804 - Celebrating occasions
2805 - Fun team calendars
2806 - Personal style expression
2807 - Standing out
2808 - Making calendar time fabulous
2812 ## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS
2815 - **Fixed:** Today's day number box now uses theme border color
2816 - **Fixed:** Text color adapts to theme (white for dark themes, bg color for light)
2817 - **Result:** Today box matches the theme perfectly!
2825 .cal-today .day-num {
2847 - Box background: `#00cc07` (matrix green)
2848 - Text color: `#242424` (dark background)
2851 - Box background: `#9b59b6` (purple)
2852 - Text color: `#2a2030` (dark background)
2855 - Box background: `#4a90e2` (blue)
2856 - Text color: `#ffffff` (white text)
2859 - Box background: `#ff1493` (hot pink)
2860 - Text color: `#1a0d14` (dark background)
2863 - Box background: Template's `__border__` color
2864 - Text color: Template's `__background_site__` color
2898 - Background uses `$themeStyles['border']` (theme accent)
2899 - Text color uses `$themeStyles['bg']` for contrast
2900 - Special case: Professional theme uses white text
2901 - All with `!important` to override CSS
2904 - Removed hardcoded `#008800` background
2905 - Removed hardcoded `white` color
2906 - Kept structural styles (border-radius, font-weight)
2911 - Today box matches theme accent color
2912 - Proper contrast with background
2913 - Professional appearance
2916 - Works with all themes
2917 - Works with custom wiki template colors
2918 - No manual adjustment needed
2921 - Border color used throughout theme
2922 - Today box reinforces theme identity
2923 - Consistent design language
2925 ## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH
2928 - **Found:** `grid_bg` was using `__background_alt__` (different from cells!)
2929 - **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells)
2930 - **Result:** Table background no longer shows through cells!
2984 - `bg` → __background_site__ ✓
2985 - `header_bg` → __background_site__ ✓
2986 - `grid_bg` → __background_site__ ✓ (JUST FIXED!)
2987 - `cell_bg` → __background_site__ ✓
2994 - `grid_bg` was `__background_alt__` (slightly different)
2995 - Created visual separation between cells
2996 - But with transparent/thin cells, it showed through!
3026 - Main container background
3027 - Left panel background
3028 - Right panel background
3029 - Eventlist background
3030 - Calendar grid background ← JUST FIXED
3031 - Calendar cell backgrounds
3032 - Event item backgrounds
3033 - Clock header background
3034 - Search input background
3035 - Past events toggle
3039 ## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS
3042 - **Found:** `.calendar-compact-container` had `background: #ffffff;`
3043 - **Found:** `.calendar-compact-left` had `background: #fafafa;`
3044 - **Found:** `.calendar-compact-right` had `background: #ffffff;`
3045 - **Found:** `.event-search-input-inline` had `background: white;`
3046 - **Found:** `.past-events-toggle` had `background: #f5f5f5;`
3047 - **Result:** Container backgrounds no longer show through cells!
3053 **Container backgrounds (lines 4-91)**:
3055 .calendar-compact-container {
3059 .calendar-compact-left {
3063 .calendar-compact-right {
3083 - `.calendar-compact-container` background
3084 - `.calendar-compact-left` background
3085 - `.calendar-compact-right` background
3086 - `.event-search-input-inline` background
3087 - `.past-events-toggle` background & hover
3090 - `.calendar-compact-grid tbody td` background
3091 - `.calendar-compact-grid thead th` background
3094 - `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds
3097 - `.event-compact-item` background
3111 - Main container ✓
3112 - Left panel ✓
3113 - Right panel ✓
3116 - Table cells ✓
3117 - Event items ✓
3118 - Search input ✓
3119 - Past events toggle ✓
3133 ## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS
3136 - **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`!
3137 - **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`!
3138 - **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`!
3139 - **Fixed:** Removed ALL hardcoded backgrounds from table CSS
3140 - **Result:** Calendar table cells finally use template colors!
3146 **In style.css (lines 307-356)**:
3148 .calendar-compact-grid thead th {
3152 .calendar-compact-grid tbody td {
3156 .calendar-compact-grid tbody td:hover {
3166 1. `.calendar-compact-grid tbody td` (generic - applies to ALL cells)
3167 2. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells)
3175 - `.event-compact-item` background
3176 - `.event-compact-item:hover` background
3179 - `.cal-empty` background & hover
3180 - `.cal-today` background & hover
3181 - `.cal-has-events` background & hover
3184 - `.calendar-compact-grid tbody td` background ✓
3185 - `.calendar-compact-grid tbody td:hover` background ✓
3186 - `.calendar-compact-grid thead th` background ✓
3195 Layer 1: Table cells (.calendar-compact-grid tbody td)
3197 Layer 2: Cell states (.cal-today, .cal-empty, etc.)
3199 Layer 3: Event items (.event-compact-item)
3232 - `.event-compact-item` background
3233 - `.event-compact-item:hover` background
3234 - `.cal-empty` background & hover
3235 - `.cal-today` background & hover
3236 - `.cal-has-events` background & hover
3237 - `.calendar-compact-grid tbody td` background ← NEW
3238 - `.calendar-compact-grid tbody td:hover` background ← NEW
3239 - `.calendar-compact-grid thead th` background ← NEW
3252 **CSS is EXTREMELY sticky - may need to clear multiple times!**
3257 - Table cells ✓ Fixed
3258 - Cell states ✓ Fixed
3259 - Event items ✓ Fixed
3260 - Headers ✓ Fixed
3261 - Hover states ✓ Fixed
3265 ## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS
3268 - **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`!
3269 - **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS
3270 - **Result:** Calendar cells now use template colors!
3276 **In style.css (lines 359-382)**:
3278 .cal-empty {
3282 .cal-today {
3286 .cal-today:hover {
3290 .cal-has-events {
3294 .cal-has-events:hover {
3305 .cal-empty {
3306 /* background removed - inline style handles this */
3310 .cal-today {
3311 /* background removed - inline style handles this */
3314 .cal-has-events {
3315 /* background removed - inline style handles this */
3324 - Event items in sidebar ✓
3327 - Calendar day cells ✓
3328 - Today cell ✓
3329 - Empty cells ✓
3330 - Cells with events ✓
3331 - All hover states ✓
3367 - `.cal-empty` background
3368 - `.cal-empty:hover` background
3369 - `.cal-today` background
3370 - `.cal-today:hover` background
3371 - `.cal-has-events` background
3372 - `.cal-has-events:hover` background
3389 - Event items (v5.2.3) ✓ Fixed
3390 - Calendar cells (v5.2.4) ✓ Fixed
3391 - Each with different classes
3392 - Each with `!important`
3393 - Hidden throughout CSS file
3397 ## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS
3400 - **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles!
3401 - **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS
3402 - **Result:** Event backgrounds now properly use template colors!
3408 **In style.css (lines 599-616)**:
3410 .event-compact-item {
3414 .event-compact-item:hover {
3425 .event-compact-item {
3426 /* background removed - set via inline style with template colors */
3431 .event-compact-item:hover {
3432 box-shadow: 0 1px 3px rgba(0,0,0,0.08);
3433 /* background removed - inline style handles this */
3443 4. All the PHP code was correct - it was the CSS!
3446 - ✓ Reading template colors correctly
3447 - ✓ Setting `cell_bg` to `__background_site__` correctly
3448 - ✓ Applying inline styles with `!important` correctly
3449 - ✗ CSS file was overriding everything!
3454 - Main calendar sidebar
3455 - Standalone event list
3456 - Sidebar widget
3457 - All event displays
3465 <div class="event-compact-item"
3501 - They only had inline styles ✓
3502 - Inline styles worked correctly ✓
3503 - Only event items had the CSS override ✗
3508 - Browser cache (Ctrl+Shift+R or Cmd+Shift+R)
3509 - DokuWiki cache (Admin → Clear Cache)
3510 - Old CSS may be cached!
3514 ## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND
3517 - **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`)
3518 - **Result:** Clock/Today header matches event cell backgrounds!
3542 │ ��️ --° | Sun, Feb 9, 2026 │
3549 - Eventlist background ✓
3550 - Calendar cells ✓
3551 - Event items ✓
3552 - Clock/Today header ✓
3553 - Sidebar widget ✓
3554 - All backgrounds match! ✓
3562 │ ��️ --° | Sun, Feb 9, 2026 │
3576 ## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND
3579 - **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`)
3580 - **Result:** Calendar cells now match the eventlist background perfectly!
3587 - `bg` → `__background_site__` ✓ (This was correct!)
3590 - `cell_bg` → `__background__` ✗ (This was wrong!)
3625 __background_site__ = "#f5f5f5" (Light gray - page background)
3626 __background__ = "#ffffff" (White - content area)
3630 - Eventlist: `#f5f5f5` (light gray) ✓ Correct
3631 - Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match
3634 - Eventlist: `#f5f5f5` (light gray) ✓ Correct
3635 - Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED!
3640 - Eventlist sidebar background ✓
3641 - Main calendar background ✓
3642 - Calendar day cells ✓
3643 - Sidebar widget ✓
3644 - Event items ✓
3645 - Input fields ✓
3646 - Buttons ✓
3656 ## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS
3660 - **Fixed:** `bg` now uses `__background__` instead of `__background_site__`
3661 - **Fixed:** Eventlist, calendar cells, and sidebar all match now
3662 - **Result:** Completely unified background throughout!
3675 - `__background_site__` = Outer page wrapper (often gray)
3676 - `__background__` = Main content area (often white)
3691 - Eventlist sidebar background
3692 - Main calendar container
3693 - Sidebar widget background
3694 - Form backgrounds
3695 - Event dialogs
3700 - Calendar day cells
3701 - Event item backgrounds
3702 - Input field backgrounds
3703 - Button backgrounds
3709 __background_site__ → Outer page/body (e.g., #f5f5f5 light gray)
3731 Different colors - looks inconsistent
3746 Same color - perfectly consistent!
3751 **Light Template**:
3753 __background_site__ = "#f5f5f5" (light gray)
3772 - All backgrounds match
3773 - Clean, unified appearance
3774 - Professional look
3777 - Uses content area color (not page wrapper)
3778 - Matches wiki content area
3779 - Proper color hierarchy
3782 - Light templates ✓
3783 - Dark templates ✓
3784 - Custom templates ✓
3789 - Eventlist background ✓
3790 - Calendar cells ✓
3791 - Sidebar widget ✓
3792 - Event items ✓
3793 - Input fields ✓
3794 - Buttons ✓
3795 - Dialogs ✓
3799 ## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS
3802 - **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!)
3803 - **Fixed:** Replaced CSS variables with actual hex colors
3804 - **Result:** Event backgrounds now show correctly with template colors!
3808 CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes!
3812 'cell_bg' => 'var(--__background__, #fff)', // Doesn't work in inline styles!
3823 - ✅ Worked fine (uses actual hex colors from file)
3826 - ❌ Events had no background
3827 - ❌ CSS variables don't work in inline styles
3828 - ❌ Looked broken
3835 'bg' => '#f5f5f5', // Real hex (was: var(--__background_site__))
3836 'border' => '#ccc', // Real hex (was: var(--__border__))
3837 'cell_bg' => '#fff', // Real hex (was: var(--__background__))
3838 'cell_today_bg' => '#eee', // Real hex (was: var(--__background_neu__))
3839 'text_primary' => '#333', // Real hex (was: var(--__text__))
3840 'text_bright' => '#2b73b7', // Real hex (was: var(--__link__))
3841 'text_dim' => '#666', // Real hex (was: var(--__text_neu__))
3842 'grid_bg' => '#e8e8e8', // Real hex (was: var(--__background_alt__))
3851 .some-class {
3852 background: var(--__background__, #fff); /* ✓ Works in CSS */
3858 <div style="background: var(--__background__, #fff)"> <!-- ✗ Doesn't work -->
3890 - Main calendar events ✓
3891 - Sidebar widget events ✓
3892 - Event list items ✓
3893 - Event backgrounds ✓
3894 - Button backgrounds ✓
3895 - Input field backgrounds ✓
3899 ## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT
3902 - **Moved:** Current Version section to the top
3903 - **Combined:** Upload and Important Notes side-by-side
3904 - **Improved:** Space-efficient two-column layout
3905 - **Result:** More information visible at once!
3911 1. Current Version (at top - see what you have)
3912 2. Upload + Important Notes (side-by-side)
3917 ### Side-by-Side Design
3938 - See what you have immediately
3939 - Check permissions at a glance
3940 - Know if ready to update
3942 **Side-by-Side Layout**:
3943 - Upload form and warnings together
3944 - Read notes while choosing file
3945 - More efficient use of space
3946 - Less scrolling needed
3985 - Upload and notes side-by-side
3986 - Full 1200px width utilized
3987 - Efficient space usage
3990 - Sections stack gracefully
3991 - Flex layout adapts
3992 - Still fully functional
3997 - Full width (1200px max)
3998 - Shows version, author, description
3999 - Permission status with icons
4000 - Helpful fix commands if needed
4003 - Flexbox layout with gap
4004 - Upload: `flex:1` (grows)
4005 - Notes: `flex:0 0 350px` (fixed 350px)
4006 - Both have proper min-width
4009 - Full width (1200px max)
4010 - Compact scrollable view
4011 - Color-coded change types
4012 - Last 10 versions shown
4015 - Full width (1200px max)
4016 - Manual backup button
4017 - Scrollable file list
4018 - All actions accessible
4022 All sections now use `max-width:1200px` (previously 900px):
4023 - Better use of wide screens
4024 - Still responsive on narrow screens
4025 - Consistent throughout tab
4027 ## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR
4030 - **Fixed:** ParseError on line 1936 (extra closing brace)
4031 - **Result:** Manual backup feature now works correctly!
4054 ## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND
4057 - **Added:** "Create Backup Now" button in Backups section
4058 - **Added:** Manual backup action handler with full verification
4059 - **Added:** Backups section always visible (even with no backups)
4060 - **Added:** Success message showing file size and file count
4061 - **Result:** Create backups anytime without needing to upload!
4076 **Always visible - even with no backups**:
4098 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
4106 - Create safety backup before uploading new version
4107 - Have multiple restore points
4108 - Test new features with fallback
4111 - Weekly/monthly backup schedule
4112 - Before making configuration changes
4113 - After important customizations
4116 - Backup before code experiments
4117 - Save working states
4118 - Quick rollback points
4123 - ✅ File count check (minimum 10, expected 30+)
4124 - ✅ File size check (minimum 1KB, expected 200KB+)
4125 - ✅ Existence check (file actually created)
4126 - ✅ Automatic cleanup on failure
4129 - Backup filename
4130 - File size (human-readable)
4131 - Number of files backed up
4138 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
4156 **On-Demand Safety**:
4157 - Create backups anytime
4158 - No need to upload new version
4159 - Quick and easy
4162 - Backup before risky changes
4163 - Multiple restore points
4164 - Safe experimentation
4167 - Regular backup schedule
4168 - Version snapshots
4169 - Disaster recovery
4174 - Section shows even with 0 backups
4175 - Button always accessible
4176 - Clear call-to-action
4179 - Title and button on same row
4180 - Clean, professional layout
4181 - Space-efficient design
4188 - Gets current version
4189 - Creates timestamped filename with "manual" tag
4190 - Uses same verification as auto-backups
4191 - Shows detailed success/error messages
4196 calendar.backup.v5.1.6.2026-02-09_12-30-45.zip
4199 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
4206 - **Read access**: Plugin directory
4207 - **Write access**: Parent plugins directory
4209 **Same as automatic backups** - no additional permissions needed!
4211 ## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION
4214 - **Added:** File count validation (must have 10+ files)
4215 - **Added:** File size validation (must be 1KB+ minimum)
4216 - **Added:** Return value from addDirectoryToZip (counts files added)
4217 - **Added:** Detailed error messages showing file count
4218 - **Added:** Automatic deletion of invalid/incomplete backups
4219 - **Enhanced:** Exception handling with proper error propagation
4220 - **Result:** Backups are now guaranteed to be complete or fail clearly!
4226 $this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
4227 $zip->close();
4228 // No verification - could create empty or partial backup
4233 $fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
4234 $zip->close();
4257 **Three-Layer Verification**:
4260 - Minimum: 10 files required
4261 - Expected: 30+ files
4262 - Action: Delete backup if too few files
4265 - Minimum: 1KB (1000 bytes)
4266 - Expected: 200-250KB
4267 - Action: Delete backup if too small
4270 - Verify file was actually created
4271 - Check ZIP archive is valid
4272 - Action: Error if file missing
4302 if ($zip->addFile($filePath, $relativePath)) {
4321 - Failed backups are automatically deleted
4322 - No partial/corrupt backups left behind
4323 - Clean error state
4326 - Allow up to 5 minor file errors (logs warnings)
4327 - More than 5 errors = complete failure
4328 - Prevents partially corrupt backups
4331 - Check directory exists before processing
4332 - Check directory is readable
4333 - Fail fast with clear errors
4338 - ✅ All files included or backup fails
4339 - ✅ No silent failures
4340 - ✅ Clear error messages
4341 - ✅ Automatic cleanup
4344 - Know exactly how many files were added
4345 - See specific errors for missing files
4346 - Understand why backup failed
4349 - Backup succeeds = complete backup
4350 - Backup fails = clear error message
4351 - No ambiguity
4396 ## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED
4399 - **Verified:** addDirectoryToZip function includes all files recursively
4400 - **Verified:** Backups contain all 31+ files from calendar directory
4401 - **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed)
4402 - **Info:** Backup sizes grow slightly with each version (more code = more features!)
4403 - **Result:** Backup system is working perfectly!
4408 - All PHP files (syntax.php, admin.php, action.php, etc.)
4409 - All JavaScript files (calendar-main.js, script.js)
4410 - All documentation (CHANGELOG.md, README.md, all guides)
4411 - All configuration (sync_config.php)
4412 - All language files
4413 - All assets and resources
4414 - **Everything in the calendar/ directory!**
4426 Version 5.1.2: 240KB (normal - added AJAX features)
4431 - More features = more code
4432 - Longer CHANGELOG
4433 - Additional documentation
4434 - New functionality
4435 - **This is expected and normal!**
4448 admin.php (216KB - main admin interface)
4449 syntax.php (173KB - calendar rendering)
4450 calendar-main.js (102KB - JavaScript functionality)
4451 CHANGELOG.md (268KB - complete version history)
4452 style.css (57KB - all styling)
4453 action.php (38KB - DokuWiki actions)
4454 sync_outlook.php (32KB - Outlook integration)
4465 3. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip`
4477 if (!$file->isDir()) {
4478 $zip->addFile($filePath, $relativePath);
4489 - ✅ All 31 files present in zip
4490 - ✅ All subdirectories included (lang/en/)
4491 - ✅ File sizes match originals
4492 - ✅ Compression works properly
4493 - ✅ No files missing
4494 - ✅ Backup can be restored
4514 - Compressed size: ~240KB (good compression)
4515 - Uncompressed size: ~1MB (all source files)
4516 - All files included: YES ✅
4517 - Growing size over versions: Normal (more features!)
4521 ## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR
4524 - **Fixed:** ParseError on line 1947 (deleteBackup function)
4525 - **Fixed:** Escaped all single quotes in JavaScript strings
4526 - **Result:** AJAX backup deletion now works correctly!
4545 - ✅ FormData.append() calls
4546 - ✅ fetch() URL
4547 - ✅ querySelector() calls
4548 - ✅ createElement() call
4549 - ✅ All string literals
4550 - ✅ Error messages
4554 ## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT
4557 - **Moved:** Important Notes to very top (above upload)
4558 - **Enhanced:** Delete backup now uses AJAX (no page refresh!)
4559 - **Added:** Smooth fade-out animation when deleting backups
4560 - **Added:** Success message after deletion
4561 - **Auto-remove:** Backup section disappears if last backup deleted
4562 - **Result:** Smoother, more polished experience!
4578 - Click Delete → Page refreshes → Scroll back down
4579 - Lose position on page
4580 - Page reload is jarring
4583 - Click Delete → Confirm
4584 - Row fades out smoothly
4585 - Row disappears
4586 - Success message shows at top
4587 - Success message fades after 3 seconds
4588 - If last backup: entire section fades away
4589 - **No page refresh!** ✓
4625 - Warnings before actions ✓
4626 - Read before uploading ✓
4627 - Clear expectations ✓
4630 - No page refresh ✓
4631 - Smooth animations ✓
4632 - Stay in context ✓
4633 - Professional feel ✓
4635 **Auto-Cleanup**:
4636 - Empty list disappears ✓
4637 - Clean interface ✓
4638 - No clutter ✓
4651 - Fade out row
4652 - Remove element
4653 - Show success
4654 - Remove section if empty
4657 - 300ms fade animations
4658 - Clean visual feedback
4659 - Professional polish
4661 ## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB
4664 - **Moved:** Upload section to the top of the page
4665 - **Added:** Clear Cache button next to Upload & Install button
4666 - **Changed:** "Current Version" section moved below upload
4667 - **Result:** Better workflow - upload first, then see version info!
4683 1. Upload New Version (with Clear Cache button side-by-side)
4717 - Primary action (upload) is first
4718 - Clear cache conveniently next to install
4719 - No scrolling to find upload button
4720 - Logical top-to-bottom flow
4722 **Side-by-Side Buttons**:
4723 - Upload & Install (green)
4724 - Clear Cache (orange)
4725 - Both common actions together
4726 - Easy to access after upload
4729 - Upload is most important → now at top
4730 - Version info is reference → moved down
4731 - Related actions grouped
4732 - Cleaner organization
4749 ## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND
4752 - **Changed:** All section boxes now use `__background__` instead of `__background_alt__`
4753 - **Result:** Cleaner, more unified admin interface!
4772 - Sections and content use same background
4773 - Creates cleaner, more cohesive look
4774 - Borders provide visual separation
4775 - Matches typical admin UI patterns
4787 **Light Template**:
4804 Two-tone appearance
4846 - No more alternating gray/white
4847 - More professional appearance
4848 - Less visual noise
4849 - Unified color scheme
4852 - Matches modern admin UI patterns
4853 - Borders define sections, not colors
4854 - Simpler, cleaner design
4855 - Easier on the eyes
4858 - Works with any background color
4859 - Light or dark templates
4860 - Custom colors
4861 - Always looks cohesive
4874 ## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB
4877 - **Fixed:** ParseError on line 4461 (Purple theme card)
4878 - **Fixed:** Malformed ternary expressions from sed replacement
4879 - **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki)
4880 - **Result:** Admin pages work correctly!
4900 - ✅ Purple Dream card
4901 - ✅ Professional Blue card
4902 - ✅ Pink Bling card
4903 - ✅ Wiki Default card
4912 ## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING
4915 - **Fixed:** Themes tab now uses template colors (removed all hardcoded whites)
4916 - **Fixed:** Main background now uses `__background__` instead of `__background_site__`
4917 - **Fixed:** Theme selection cards use template backgrounds
4918 - **Fixed:** Week start options use template backgrounds
4919 - **Result:** Perfect color mapping throughout admin!
4925 bg: __background_site__ // Wrong - this is outer page bg
4931 bg: __background__ // Correct - main content bg
4946 - `__background__` for input fields, content areas
4947 - `__background_alt__` for section boxes, panels
4958 - ✅ Week start section background
4959 - ✅ Week start option backgrounds
4960 - ✅ Theme card backgrounds
4961 - ✅ Theme card borders
4962 - ✅ All borders throughout
4966 **Light Template**:
4974 Input fields: #f5f5f5 (site bg - wrong)
4975 Sections: #e8e8e8 (alt bg - correct)
4980 Input fields: #ffffff (content bg - correct!)
4981 Sections: #e8e8e8 (alt bg - correct!)
4992 Input fields: #2d2d2d (content bg - perfect!)
4993 Sections: #3a3a3a (alt bg - perfect!)
5024 - Content areas: `__background__` ✓
5025 - Section boxes: `__background_alt__` ✓
5026 - Borders: `__border__` ✓
5027 - Text: `__text__` ✓
5030 - Same white content areas
5031 - Same gray section boxes
5032 - Same border colors
5033 - Same text colors
5038 - ❌ Site background on content areas → ✅ Content background
5039 - ❌ Hardcoded white on themes tab → ✅ Template background
5040 - ❌ Hardcoded borders (#ddd) → ✅ Template borders
5043 - Perfect color hierarchy ✓
5044 - Correct background levels ✓
5045 - Complete template integration ✓
5047 ## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING
5050 - **Fixed:** All section backgrounds use `__background_alt__`
5051 - **Fixed:** All content backgrounds use `__background__`
5052 - **Fixed:** All borders use `__border__`
5053 - **Fixed:** All text uses `__text__`
5054 - **Result:** Complete admin template integration!
5085 - ✅ Manage Events tab
5086 - ✅ Update Plugin tab
5087 - ✅ Outlook Sync tab
5088 - ✅ Themes tab
5089 - ✅ Tab navigation
5090 - ✅ All sections
5091 - ✅ All inputs
5092 - ✅ All borders
5093 - ✅ All text
5097 **Light Template**:
5103 │ Section Headers │ ← bg_alt (light gray)
5135 __link__ → $colors['link'] (links - future)
5141 - Event list backgrounds: `bg_alt`
5142 - Event item backgrounds: `bg`
5143 - Borders: `border`
5144 - Text: `text`
5147 - Section backgrounds: `bg_alt`
5148 - Content areas: `bg`
5149 - Borders: `border`
5150 - Text: `text`
5153 - Config sections: `bg_alt`
5154 - Input fields: `bg`
5155 - Borders: `border`
5156 - Labels: `text`
5159 - Theme cards: `bg_alt`
5160 - Preview areas: `bg`
5161 - Borders: `border`
5162 - Descriptions: `text`
5167 - Matches wiki admin area perfectly
5168 - Same colors throughout wiki
5169 - Professional appearance
5170 - Consistent experience
5173 - Light templates: Light admin
5174 - Dark templates: Dark admin
5175 - Custom templates: Uses custom colors
5178 - Every background themed
5179 - Every border themed
5180 - Every text themed
5181 - Complete consistency
5186 - Wiki theme uses style.ini ✓
5187 - Perfect template match ✓
5190 - Reads same style.ini ✓
5191 - Perfect template match ✓
5194 - Same colors everywhere ✓
5195 - Seamless experience ✓
5196 - Professional polish ✓
5198 ## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS
5201 - **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme
5202 - **Added:** Admin pages read template's style.ini file
5203 - **Added:** `getTemplateColors()` function in admin class
5204 - **Fixed:** Tab navigation uses template text and border colors
5205 - **Result:** Complete template integration everywhere!
5222 - Reads template's style.ini file
5223 - Extracts color replacements
5224 - Provides colors to all admin tabs
5225 - Falls back to sensible defaults
5237 - Tab navigation borders
5238 - Tab text colors
5239 - All admin sections
5240 - Ready for future enhancements
5263 **Light Template**:
5269 - Month/Year: Medium gray (subtle)
5270 - Admin borders: Light gray
5271 - Tab text: Dark gray
5279 - Month/Year: Light gray (subtle)
5280 - Admin borders: Medium gray
5281 - Tab text: Bright gray
5286 - Month/Year header more subtle
5287 - Better visual hierarchy
5288 - Less prominent, more elegant
5291 - Uses template colors
5292 - Matches wiki admin area
5293 - Consistent experience
5294 - Professional appearance
5296 ### Future-Ready
5299 - ✅ Tab navigation (implemented)
5300 - �� Section backgrounds (ready)
5301 - �� Button colors (ready)
5302 - �� Input fields (ready)
5303 - �� Success/error messages (ready)
5307 ## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS
5310 - **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme
5311 - **Fixed:** "Today" header uses `__text_neu__`
5312 - **Fixed:** "Tomorrow" header uses `__text__`
5313 - **Fixed:** "Important Events" header uses `__border__`
5314 - **Result:** Perfect template color integration!
5381 Add Event Bar: Light gray (#e8e8e8)
5400 Today header: Light gray (#999999)
5408 - ✅ Add Event bar background
5409 - ✅ Add Event bar text
5410 - ✅ Today section header
5411 - ✅ Tomorrow section header
5412 - ✅ Important Events header
5413 - ✅ Calendar cells
5414 - ✅ Grid backgrounds
5415 - ✅ All borders
5419 ## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS
5422 - **Fixed:** Calendar cells now use `__background__` from template
5423 - **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__`
5424 - **Result:** Calendar cells match main content area background!
5430 cell_bg: __background_neu__ // Wrong - this is for neutral/alternate
5435 cell_bg: __background__ // Correct - main content background
5497 - ✅ Main content area background
5498 - ✅ Article/page background
5499 - ✅ Content box background
5500 - ✅ Same as wiki text background
5504 ## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI
5507 - **Added:** Function to read colors from DokuWiki template's style.ini file
5508 - **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
5509 - **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
5510 - **Uses:** Actual template colors instead of CSS variables
5511 - **Result:** Perfect color matching with any DokuWiki template!
5568 - CSS variables (var(--__background__, #fff))
5569 - Required browser CSS variable support
5570 - Fallback to generic colors
5576 - Actual colors from template's style.ini
5577 - Exact template color values
5578 - No CSS variable dependency
5579 - Perfect color matching!
5592 - Uses exact template color values ✓
5593 - No CSS variable interpolation ✓
5594 - Consistent across all browsers ✓
5597 - Works with older browsers ✓
5598 - No CSS variable support needed ✓
5599 - Direct color values ✓
5602 - Reads template's actual colors ✓
5603 - Same colors as wiki pages ✓
5604 - Seamless integration ✓
5638 ## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL
5641 - **Fixed:** Day popup panel now uses DokuWiki CSS variables
5642 - **Fixed:** Panel background matches wiki theme
5643 - **Fixed:** Panel header matches wiki theme
5644 - **Fixed:** Border colors use wiki theme
5645 - **Fixed:** Text colors use wiki theme
5646 - **Result:** Perfect integration with DokuWiki templates!
5660 background: var(--__background__, #fff)
5661 header: var(--__background_alt__, #e8e8e8)
5662 header_text: var(--__text__, #333)
5663 border: var(--__border__, #ccc)
5669 event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5))
5670 border_color: var(--__border__, rgba(204, 204, 204, 0.3))
5678 Wiki Default - Click Week Cell:
5690 Wiki Default - Click Week Cell:
5692 Light Wiki Theme:
5694 │ Monday, Feb 8 │ ← Light gray header ✓
5705 │ 2:00 PM │ Light text ✓
5714 - `--__background__` - Main background (panel body)
5715 - `--__background_alt__` - Alternate bg (panel header, events)
5716 - `--__text__` - Text color (header text)
5717 - `--__border__` - Border color (panel border, event borders)
5721 var(--__background__, #fff) /* white fallback */
5722 var(--__background_alt__, #e8e8e8) /* light gray fallback */
5723 var(--__text__, #333) /* dark text fallback */
5724 var(--__border__, #ccc) /* gray border fallback */
5729 **Light Templates**:
5730 - Light panel backgrounds ✓
5731 - Dark text ✓
5732 - Subtle borders ✓
5733 - Clean appearance ✓
5736 - Dark panel backgrounds ✓
5737 - Light text ✓
5738 - Visible borders ✓
5739 - Perfect contrast ✓
5742 - Uses template's CSS variables ✓
5743 - Automatic adaptation ✓
5744 - Seamless integration ✓
5749 - ✅ Calendar grid
5750 - ✅ Sidebar widget
5751 - ✅ Event list
5752 - ✅ **Day panel** ← v5.0.2!
5753 - ✅ All backgrounds
5754 - ✅ All text
5755 - ✅ All borders
5759 ## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS
5762 - **Fixed:** Conflict tooltips now match calendar theme
5763 - **Added:** Theme-aware background, border, text colors
5764 - **Added:** Theme-aware shadow effects
5765 - **Result:** Complete visual consistency!
5770 - Background: Theme background color
5771 - Border: Theme border color
5772 - Header text: Theme primary text color
5773 - Item text: Theme dim text color
5774 - Shadow: Theme shadow color
5808 │ • Event B │ Light bg
5829 - ✅ Conflict tooltips
5830 - ✅ All other tooltips (if any)
5831 - ✅ Perfect consistency
5835 ## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION
5844 - �� Matrix Edition (Green with glow)
5845 - �� Purple Dream (Elegant purple)
5846 - �� Professional Blue (Clean and modern)
5847 - �� Pink Bling (Maximum sparkle)
5848 - �� Wiki Default (Auto-adapts to your DokuWiki theme)
5851 - ✅ Calendar grid and cells
5852 - ✅ Event boxes and borders
5853 - ✅ Sidebar widget
5854 - ✅ Event list panel
5855 - ✅ Search functionality
5856 - ✅ Edit/Add dialogs (complete)
5857 - ✅ Day popup dialogs
5858 - ✅ Month picker
5859 - ✅ All text (primary, dim, bright)
5860 - ✅ All buttons
5861 - ✅ All inputs and forms
5862 - ✅ All checkboxes
5863 - ✅ All borders
5864 - ✅ All badges and labels
5865 - ✅ Event highlight effects
5868 - No white pixels anywhere
5869 - No unthemed elements
5870 - No default colors
5871 - Complete visual unity
5875 1. **Complete Dialog Theming** (v4.8.5-4.8.7)
5876 - Edit event dialog fully themed
5877 - Day popup dialog fully themed
5878 - All form inputs themed
5879 - All checkboxes themed
5880 - All buttons themed
5883 - All 4 borders themed (top, right, bottom, left)
5884 - Sidebar event dividers themed
5885 - Past Events toggle border themed
5888 - Repeating Event section border themed
5889 - Task checkbox section border themed
5892 - New 5th theme
5893 - Uses DokuWiki CSS variables
5894 - Auto-adapts to any wiki template
5895 - Perfect for seamless integration
5898 - Removed text glow from Matrix
5899 - Removed text glow from Purple
5900 - Removed text glow from Professional
5901 - Removed text glow from Wiki Default
5902 - Kept text glow on Pink Bling only
5904 6. **Event Highlight Effects** (v4.12.0-4.12.1)
5905 - Theme-aware highlight glow
5906 - Click event bar → event glows
5907 - 3-second themed glow effect
5908 - Smooth animations
5914 ## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION
5917 - **Fixed:** Used setProperty() to properly apply !important styles
5918 - **Added:** Console logging for debugging
5919 - **Fixed:** Proper style application with important flag
5920 - **Result:** Highlight glow now works correctly!
5937 - "Highlighting event: [calId] [eventId] [date]"
5938 - "Found event item: [element]"
5939 - "Theme: [theme name]"
5940 - "Highlight colors: [bg] [shadow]"
5941 - "Applied highlight styles"
5942 - "Removing highlight" (after 3 seconds)
5948 ## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW
5950 ### ✨ Enhanced: Event Click Highlight Now Theme-Aware
5951 - **Fixed:** Restored event highlight glow when clicking calendar bars
5952 - **Improved:** Highlight now matches each theme's colors
5953 - **Added:** Stronger glow effect for better visibility
5954 - **Duration:** 3 seconds with smooth fade
5955 - **Result:** Beautiful themed highlights for all themes!
5977 Background: Light blue (#e3f2fd)
5991 Background: var(--__background_neu__)
5998 **Matrix - Click Event**:
6013 **Purple - Click Event**:
6028 **Pink - Click Event**:
6046 - Background: Dark green
6047 - Shadow: `0 0 20px rgba(0, 204, 7, 0.8)`
6048 - Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)`
6049 - Effect: Strong green pulse
6052 - Background: Dark purple
6053 - Shadow: `0 0 20px rgba(155, 89, 182, 0.8)`
6054 - Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)`
6055 - Effect: Strong purple pulse
6058 - Background: Light blue
6059 - Shadow: `0 0 20px rgba(74, 144, 226, 0.4)`
6060 - Effect: Subtle blue glow
6063 - Background: Dark pink
6064 - Shadow: `0 0 20px rgba(255, 20, 147, 0.8)`
6065 - Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)`
6066 - Effect: MAXIMUM SPARKLE ✨��
6069 - Background: Theme neutral color
6070 - Shadow: `0 0 20px rgba(43, 115, 183, 0.4)`
6071 - Effect: Adapts to wiki theme
6076 **Auto-scroll** → Event scrolls into view smoothly
6078 **Smooth transition** → 0.3s ease-in-out
6089 - ✅ Matrix: Green glow
6090 - ✅ Purple: Purple glow
6091 - ✅ Professional: Blue glow
6092 - ✅ Pink: Maximum pink sparkle
6093 - ✅ Wiki: Adaptive glow
6097 ## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES
6099 ### �� Changed: Text Glow Now Pink-Only
6100 - **Removed:** Text shadow/glow from Matrix theme
6101 - **Removed:** Text shadow/glow from Purple theme
6102 - **Removed:** Text shadow/glow from Professional theme (already had none)
6103 - **Removed:** Text shadow/glow from Wiki Default theme
6104 - **Kept:** Text shadow/glow ONLY on Pink Bling theme
6105 - **Result:** Cleaner look for Matrix, Purple, and Wiki themes!
6111 text-shadow: 0 0 2px $text_color; /* Glow effect */
6116 text-shadow: none; /* Clean, no glow */
6121 text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */
6155 - Clean green text
6156 - No glow effects
6157 - Professional appearance
6158 - Still has border glow
6161 - Clean purple text
6162 - No glow effects
6163 - Elegant appearance
6164 - Still has border glow
6167 - Clean text (unchanged)
6168 - No glow effects
6169 - Modern appearance
6172 - Glowing pink text ✨
6173 - Maximum glow effects ��
6174 - Sparkle everywhere!
6175 - All the bling!
6178 - Clean text
6179 - No glow effects
6180 - Matches wiki theme
6188 **Only TEXT glow removed from non-pink themes!**
6193 - Matrix ✓
6194 - Purple ✓
6195 - Professional ✓
6196 - Wiki Default ✓
6199 - Pink Bling ✨��✓
6203 ## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME
6206 - **Added:** 5th theme that automatically matches your DokuWiki template
6207 - **Uses:** CSS variables from your wiki theme
6208 - **Adapts:** Automatically works with light and dark themes
6209 - **Perfect:** Seamless integration with any DokuWiki template
6215 bg: var(--__background_site__, #f5f5f5)
6216 border: var(--__border__, #ccc)
6217 text_primary: var(--__text__, #333)
6218 text_bright: var(--__link__, #2b73b7)
6219 text_dim: var(--__text_neu__, #666)
6220 cell_bg: var(--__background__, #fff)
6221 grid_border: var(--__border__, #ccc)
6225 - If CSS variables exist → Use them ✓
6226 - If not available → Use fallback values ✓
6231 - Dark green with neon glow
6232 - Matrix-style effects
6233 - Original theme
6236 - Rich purple with violet accents
6237 - Elegant and sophisticated
6238 - Soft glow effects
6241 - Clean blue and grey
6242 - Modern professional
6243 - No glow effects
6246 - Glamorous hot pink
6247 - Maximum sparkle ✨
6248 - Hearts and diamonds
6251 - Matches your wiki template
6252 - Auto-adapts to light/dark
6253 - Perfect integration
6257 **Light Wiki Template**:
6260 - Light backgrounds (#f5f5f5)
6261 - Dark text (#333)
6262 - Light inputs (#fff)
6263 - Gray borders (#ccc)
6271 - Dark backgrounds (from template)
6272 - Light text (from template)
6273 - Dark inputs (from template)
6274 - Dark borders (from template)
6294 - `--__background_site__`: Page background
6295 - `--__background_alt__`: Section backgrounds
6296 - `--__background__`: Content backgrounds
6297 - `--__text__`: Primary text color
6298 - `--__link__`: Link color
6299 - `--__text_neu__`: Dimmed text
6300 - `--__border__`: Border color
6301 - `--__background_neu__`: Neutral background
6305 var(--__background_site__, #f5f5f5)
6306 /* Falls back to light gray if variable doesn't exist */
6312 **Light themes**: Perfect match ✓
6319 - 3 dark themes (Matrix, Purple, Pink)
6320 - 1 light theme (Professional)
6321 - 1 adaptive theme (Wiki Default) ← NEW!
6325 ## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS
6328 - **Fixed:** Added border-color to checkbox field divs
6329 - **Fixed:** Repeating Event section border
6330 - **Fixed:** Task checkbox section border
6331 - **Result:** No white borders around checkboxes!
6339 <div class="form-field-checkbox"
6341 <!-- Border shows white ✗ -->
6346 <div class="form-field-checkbox"
6348 border-color: $grid_border !important;">
6349 <!-- Border themed ✓ -->
6379 - ✅ All inputs
6380 - ✅ All labels
6381 - ✅ All sections
6382 - ✅ **Checkbox field borders** ← v4.9.0!
6383 - ✅ All buttons
6384 - ✅ All checkboxes
6385 - ✅ No white anywhere
6389 ## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
6392 - **Fixed:** Added border-color to checkbox field divs
6393 - **Fixed:** Repeating Event section border
6394 - **Fixed:** Task checkbox section border
6395 - **Result:** No white borders around checkboxes!
6398 - **Fixed:** All admin backgrounds use CSS variables
6399 - **Fixed:** Text colors use wiki text color
6400 - **Fixed:** Borders use wiki border color
6401 - **Result:** Admin matches wiki theme perfectly!
6409 <div class="form-field-checkbox"
6411 <!-- Border shows white ✗ -->
6416 <div class="form-field-checkbox"
6418 border-color: $grid_border !important;">
6419 <!-- Border themed ✓ -->
6426 .calendar-admin-wrapper {
6427 background: var(--__background_site__, #f5f5f5);
6428 color: var(--__text__, #333);
6430 .calendar-admin-section {
6431 background: var(--__background_alt__, #fafafa);
6433 .calendar-admin-input {
6434 background: var(--__background__, #fff);
6435 color: var(--__text__, #333);
6448 background: var(--__background_alt__, #f9f9f9)
6449 background: var(--__background__, #fff)
6450 color: var(--__text__, #333)
6451 border: 1px solid var(--__border__, #ddd)
6468Light sections │ ← White boxes ✗
6469Light inputs │ ← Doesn't match ✗
6492 **Light Wiki Theme**:
6494 Admin page backgrounds: Light
6495 Section boxes: Light gray
6509 Text: Light
6524 - ✅ All inputs themed
6525 - ✅ All labels themed
6526 - ✅ All sections themed
6527 - ✅ **Checkbox borders** ← v4.8.9!
6528 - ✅ All buttons themed
6529 - ✅ No white anywhere
6532 - ✅ **Tab navigation** ← v4.8.9!
6533 - ✅ **Section boxes** ← v4.8.9!
6534 - ✅ **Input fields** ← v4.8.9!
6535 - ✅ **Text colors** ← v4.8.9!
6536 - ✅ **Borders** ← v4.8.9!
6537 - ✅ All tabs (Manage, Update, Outlook, Themes)
6542 - `--__background_site__`: Page background
6543 - `--__background_alt__`: Alternate background
6544 - `--__background__`: Primary background (inputs)
6545 - `--__text__`: Text color
6546 - `--__border__`: Border color
6550 var(--__background_site__, #f5f5f5)
6551 var(--__background_alt__, #fafafa)
6552 var(--__background__, #fff)
6553 var(--__text__, #333)
6554 var(--__border__, #ddd)
6560 - Light themes → Light admin ✓
6561 - Dark themes → Dark admin ✓
6562 - Custom themes → Matches perfectly ✓
6563 - No hardcoded colors ✓
6566 - Matrix, Purple, Professional, Pink ✓
6567 - Independent from wiki theme ✓
6568 - Admin respects wiki ✓
6569 - Calendar respects calendar theme ✓
6574 - Complete theming ✓
6575 - 4 beautiful themes ✓
6576 - Every pixel themed ✓
6579 - Respects wiki theme ✓
6580 - Works with any theme ✓
6581 - Perfect compatibility ✓
6585 ## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
6588 - **Fixed:** Added background-color and border inline
6589 - **Fixed:** Both PHP and JavaScript versions
6590 - **Result:** No white checkboxes!
6593 - **Fixed:** Added !important to border styling
6594 - **Fixed:** Explicit top and bottom borders
6595 - **Result:** No white line under toggle!
6598 - **Fixed:** All form-field and form-row-group backgrounds
6599 - **Fixed:** Every section in edit dialog
6600 - **Result:** No white sections anywhere!
6608 style="accent-color: $border !important;"
6609 <!-- Only accent, background still white ✗ -->
6614 style="accent-color: $border !important;
6615 background-color: $cell_bg !important;
6617 <!-- Full theming ✓ -->
6624 style="border-color: $grid_border;"
6625 <!-- No !important, CSS overrides ✗ -->
6630 style="border-color: $grid_border !important;
6631 border-top: 1px solid $grid_border !important;
6632 border-bottom: 1px solid $grid_border !important;"
6633 <!-- Cannot be overridden ✓ -->
6640 <div class="form-field">
6641 <div class="form-row-group">
6642 <!-- No background, shows white ✗ -->
6647 <div class="form-field" style="background: $bg !important;">
6648 <div class="form-row-group" style="background: $bg !important;">
6649 <!-- Fully themed ✓ -->
6726 All sections light
6745 **Matrix - Unchecked**:
6753 **Matrix - Checked**:
6781 - ✅ Title field
6782 - ✅ Namespace field
6783 - ✅ Description field
6784 - ✅ **Date row** ← v4.8.8!
6785 - ✅ **Checkbox sections** ← v4.8.8!
6786 - ✅ **Recurring options** ← v4.8.8!
6787 - ✅ **Time row** ← v4.8.8!
6788 - ✅ **Color row** ← v4.8.8!
6789 - ✅ Button footer
6796 - ✅ No white checkboxes
6797 - ✅ No white borders
6798 - ✅ No white backgrounds
6799 - ✅ No white sections
6800 - ✅ No white lines
6801 - ✅ No white anything
6805 ## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING
6808 - **Fixed:** Repeating Event section background
6809 - **Fixed:** Task checkbox section background
6810 - **Result:** No white backgrounds in dialog!
6813 - **Fixed:** Added CSS for checkbox backgrounds
6814 - **Fixed:** Unchecked boxes show theme colors
6815 - **Result:** No white checkboxes!
6818 - **Fixed:** Popup container, header, body themed
6819 - **Fixed:** Event items in popup themed
6820 - **Fixed:** Add Event button themed
6821 - **Fixed:** Footer section themed
6822 - **Result:** Perfect popup theming!
6830 <div class="form-field-checkbox">
6831 <!-- White background ✗ -->
6836 <div class="form-field-checkbox"
6838 <!-- Themed ✓ -->
6845 .task-checkbox {
6846 background-color: $cell_bg !important;
6857 box-shadow: 0 0 20px $shadow !important;"
6864 border-bottom: 1px solid $border !important;"
6870 border-top: 1px solid $grid_border !important;"
6877 border-color: $border !important;"
6987 │ Monday, February 8, 2026 │ ← Light header
7031 **Edit Dialog - All Sections**:
7032 - ✅ Header
7033 - ✅ All inputs
7034 - ✅ All labels
7035 - ✅ **Checkbox sections** ← v4.8.7!
7036 - ✅ Recurring options
7037 - ✅ Button footer
7038 - ✅ All checkboxes (checked & unchecked)
7040 **Day Popup - All Elements**:
7041 - ✅ **Popup container** ← v4.8.7!
7042 - ✅ **Header** ← v4.8.7!
7043 - ✅ **Body** ← v4.8.7!
7044 - ✅ **Event items** ← v4.8.7!
7045 - ✅ **Namespace badges** ← v4.8.7!
7046 - ✅ **Footer** ← v4.8.7!
7047 - ✅ **Add Event button** ← v4.8.7!
7048 - ✅ **No events message** ← v4.8.7!
7055 - ✅ Calendar grid
7056 - ✅ Sidebar widget
7057 - ✅ Event list
7058 - ✅ Search bar
7059 - ✅ Event boxes
7060 - ✅ Edit dialog (complete)
7061 - ✅ **Day popup** ← v4.8.7!
7062 - ✅ Month picker
7063 - ✅ All text
7064 - ✅ All buttons
7065 - ✅ All inputs
7066 - ✅ **All checkboxes** ← v4.8.7!
7067 - ✅ All borders
7068 - ✅ All badges
7069 - ✅ All backgrounds
7075 ## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS
7078 - **Fixed:** Recurring options section background themed
7079 - **Fixed:** Section has themed border accent
7080 - **Result:** No white sections in dialog!
7083 - **Fixed:** Button area background themed
7084 - **Fixed:** Top border separator themed
7085 - **Result:** Complete dialog theming!
7088 - **Fixed:** Top, right, bottom borders now themed
7089 - **Fixed:** Left border remains event color
7090 - **Result:** Perfect event boxes!
7098 <div class="recurring-options" style="display:none;">
7099 <!-- White background ✗ -->
7104 <div class="recurring-options"
7108 border-left: 2px solid $border;
7109 margin-left: 4px;">
7110 <!-- Themed with accent border ✓ -->
7117 <div class="dialog-actions-sleek">
7118 <!-- White background ✗ -->
7123 <div class="dialog-actions-sleek"
7125 border-top: 1px solid $grid_border !important;">
7126 <!-- Themed with separator ✓ -->
7133 border-left-color: $event_color;
7134 <!-- Only left border colored ✗ -->
7139 border-left-color: $event_color;
7140 border-top: 1px solid $grid_border !important;
7141 border-right: 1px solid $grid_border !important;
7142 border-bottom: 1px solid $grid_border !important;
7143 <!-- All borders themed! ✓ -->
7218 │║ Repeat options... │ Light bg
7220 [Cancel] [�� Save] ← Light bg
7294 - ✅ Dialog header
7295 - ✅ Form inputs
7296 - ✅ Checkbox labels
7297 - ✅ **Recurring options** ← v4.8.6!
7298 - ✅ **Button section** ← v4.8.6!
7299 - ✅ All labels
7300 - ✅ All buttons
7307 - ✅ Left border (event color)
7308 - ✅ **Top border** ← v4.8.6!
7309 - ✅ **Right border** ← v4.8.6!
7310 - ✅ **Bottom border** ← v4.8.6!
7311 - ✅ Background
7312 - ✅ Text
7334 ## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS
7337 - **Fixed:** Dialog background, header, inputs all themed
7338 - **Fixed:** All labels, checkboxes, selects themed
7339 - **Fixed:** Save and Cancel buttons themed
7340 - **Result:** Dialog matches theme perfectly!
7343 - **Fixed:** Event divider borders use grid_border color
7344 - **Fixed:** Clean, subtle themed dividers
7345 - **Result:** No more white borders in sidebar!
7355 box-shadow: 0 0 20px $shadow !important;
7362 border-bottom: 1px solid $border !important;
7369 border-color: $themeStyles['grid_border'] !important;
7379 accent-color: $themeStyles['border'] !important;
7397 border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded
7403 border-bottom: 1px solid $borderColor !important;
7449 │ [2026-02-08__] │ ← Dark green input
7476 │ ✏️ Edit Event │ ← Light gradient header
7498 - ✅ Dialog container
7499 - ✅ Dialog header
7500 - ✅ Close button (×)
7501 - ✅ Title input
7502 - ✅ Namespace search
7503 - ✅ Namespace dropdown
7504 - ✅ Description textarea
7505 - ✅ Start date input
7506 - ✅ End date input
7507 - ✅ Recurring checkbox
7508 - ✅ Recurrence type select
7509 - ✅ Recurrence end date
7510 - ✅ Start time select
7511 - ✅ End time select
7512 - ✅ Color select
7513 - ✅ Custom color picker
7514 - ✅ Task checkbox
7515 - ✅ All labels
7516 - ✅ Cancel button
7517 - ✅ Save button
7534 │ Stand-up │
7544 - ✅ Calendar
7545 - ✅ Sidebar widget
7546 - ✅ Event list
7547 - ✅ Search bar
7548 - ✅ **Event dialog** ← v4.8.5!
7549 - ✅ Month picker
7550 - ✅ **Sidebar dividers** ← v4.8.5!
7551 - ✅ All text
7552 - ✅ All inputs
7553 - ✅ All buttons
7554 - ✅ All borders
7555 - ✅ All checkboxes
7559 ## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS
7562 - **Fixed:** Container and event backgrounds now match sidebar
7563 - **Fixed:** Lighter, cleaner appearance
7564 - **Fixed:** Better contrast and readability
7565 - **Result:** Professional theme looks cohesive!
7571 Sidebar: Light background (#f5f7fa)
7573 Events: Light background (#f5f7fa)
7584 'bg' => '#e8ecf1', // Medium gray-blue
7585 'cell_bg' => '#f5f7fa', // Very light
7586 'grid_bg' => '#d5dbe3', // Medium-dark
7589 'bg' => '#f5f7fa', // Very light (matches sidebar)
7603 │ │ Event │ │ ← Light (#f5f7fa)
7609 │ Widget │ ← Light (#f5f7fa)
7619 │ Calendar │ ← Light (#f5f7fa)
7627 │ Widget │ ← Light (#f5f7fa)
7636 - Container: `#f5f7fa` (light blue-gray)
7637 - Events: `#ffffff` (pure white)
7638 - Grid: `#e8ecf1` (subtle contrast)
7641 - Primary: `#2c3e50` (dark blue-gray)
7642 - Bright: `#4a90e2` (blue accent)
7643 - Dim: `#7f8c8d` (medium gray)
7646 - Main: `#4a90e2` (blue)
7647 - Grid: `#d0d7de` (soft gray)
7650 - Gradient: `#ffffff` → `#f5f7fa`
7657 │ February 2026 │ ← White to light gradient
7659 │S│M│T│W│T│F│S│ │ ← Light background
7663 │ │ │ │ │[8]│ │ │ Meeting │ │ ← White on light
7672 - Container: #242424 (dark green)
7673 - Events: #242424 (dark green)
7674 - Consistent dark theme ✓
7677 - Container: #1a0d14 (dark purple)
7678 - Events: #2a2030 (dark purple)
7679 - Consistent dark theme ✓
7681 **Professional** (light):
7682 - Container: #f5f7fa (light blue)
7683 - Events: #ffffff (white)
7684 - Consistent light theme ✓
7687 - Container: #1a0d14 (dark pink)
7688 - Events: #1a0d14 (dark pink)
7689 - Consistent dark theme ✓
7698 - Dark text (#2c3e50) on white/light backgrounds ✓
7699 - Excellent contrast ratio ✓
7700 - Easy on the eyes ✓
7703 - White events pop against light container ✓
7704 - Blue accents stand out ✓
7705 - Clean, modern look ✓
7708 - Lighter = more corporate/business feel ✓
7709 - Clean whites = premium quality ✓
7710 - Subtle grays = sophisticated ✓
7717 - Sidebar & Calendar both dark green ✓
7720 - Sidebar & Calendar both dark purple ✓
7723 - Sidebar & Calendar both light ✓ (v4.8.4!)
7726 - Sidebar & Calendar both dark pink ✓
7730 ## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES
7733 - **Fixed:** **Bold text** now uses theme primary color
7734 - **Fixed:** Both `**text**` and `__text__` syntax themed
7735 - **Result:** Bold text matches theme!
7738 - **Fixed:** Search input has !important on all styles
7739 - **Fixed:** Icon and placeholder text themed
7740 - **Result:** Search bar perfectly themed!
7743 - **Fixed:** Event borders in sidebar now use theme grid_border color
7744 - **Fixed:** Borders have !important flag
7745 - **Result:** Sidebar boxes match theme!
7758 <strong style="color: $text_primary !important; font-weight:bold;">
7780 border-color: $grid_border !important;"
7795 border-bottom: 1px solid $borderColor !important;
7904 - ✅ Regular text
7905 - ✅ **Bold text** ← NEW!
7906 - ✅ Links
7907 - ✅ Italic text (inherits)
7908 - ✅ Code (inherits)
7911 - ✅ Search bar ← Enhanced!
7912 - ✅ Search icon ← Enhanced!
7913 - ✅ Search placeholder ← Enhanced!
7914 - ✅ Sidebar borders ← NEW!
7915 - ✅ Event borders
7916 - ✅ Badges
7917 - ✅ Buttons
7924 - Background: Theme cell_bg ✓
7925 - Text color: Theme text_primary ✓
7926 - Border: Theme grid_border ✓
7927 - Placeholder: Inherits text color ✓
7928 - Icon (��): In placeholder ✓
7929 - Clear button (✕): Themed ✓
7950 - ✅ Backgrounds
7951 - ✅ Text (regular)
7952 - ✅ Text (bold) ← v4.8.3!
7953 - ✅ Links
7954 - ✅ Badges
7955 - ✅ Buttons
7956 - ✅ Checkboxes
7957 - ✅ Icons
7958 - ✅ Borders
7959 - ✅ Search bar ← Enhanced v4.8.3!
7960 - ✅ Sidebar boxes ← v4.8.3!
7961 - ✅ Today marker
7962 - ✅ Calendar grid
7963 - ✅ Event panels
7967 ## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS
7970 - **Fixed:** All links in event descriptions now use theme color
7971 - **Fixed:** DokuWiki links [[page|text]] themed
7972 - **Fixed:** Markdown links [text](url) themed
7973 - **Fixed:** Plain URLs themed
7974 - **Result:** Links match theme perfectly!
8024 - Links: Green (#00cc07) !important
8025 - Matches: Border, badges, highlights
8028 - Links: Purple (#9b59b6) !important
8029 - Matches: Border, badges, highlights
8032 - Links: Blue (#4a90e2) !important
8033 - Matches: Border, badges, highlights
8036 - Links: Hot Pink (#ff1493) !important
8037 - Matches: Border, badges, highlights ✨
8088 $theme = $this->getSidebarTheme();
8089 $themeStyles = $this->getSidebarThemeStyles($theme);
8104 - ✅ Event titles
8105 - ✅ Event dates
8106 - ✅ Event descriptions
8107 - ✅ **Links in descriptions** ← NEW!
8108 - ✅ Badges
8109 - ✅ Buttons
8118 - Text: Green ✓
8119 - Links: Green ✓
8120 - Badges: Green ✓
8121 - Borders: Green ✓
8122 - Buttons: Green ✓
8123 - Today marker: Green ✓
8142 [Text](internal-page) → Themed ✓
8153 ## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER
8156 - **Fixed:** TODAY badge themed with theme color
8157 - **Fixed:** PAST DUE badge uses orange (warning color)
8158 - **Fixed:** Namespace badges themed
8159 - **Fixed:** All badges visible and hidden
8160 - **Result:** All badges match theme!
8163 - **Fixed:** Today cell now has 2px border in theme color
8164 - **Fixed:** Border added to both PHP and JavaScript
8165 - **Result:** Today stands out clearly!
8168 - **Fixed:** Event-info div backgrounds ensure no gray
8169 - **Result:** Expanded past events completely themed!
8277 │ 8 │ Light blue bg + Blue 2px border
8306 - ✅ TODAY badge (theme color)
8307 - ✅ PAST DUE badge (orange warning)
8308 - ✅ Namespace badges (theme color)
8309 - ✅ Visible events
8310 - ✅ Hidden/past events
8324 **Professional**: Light blue bg + Blue border
8330 - ✅ Backgrounds
8331 - ✅ Text colors
8332 - ✅ Badges (v4.8.1!)
8333 - ✅ Today marker (v4.8.1!)
8334 - ✅ Checkboxes
8335 - ✅ Buttons
8336 - ✅ Icons
8340 ## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING
8343 - **Fixed:** event-info div now has themed background
8344 - **Fixed:** event-meta-compact div (visible) now has themed background
8345 - **Fixed:** event-desc-compact div now has themed background
8346 - **Fixed:** All !important flags added to prevent CSS override
8347 - **Result:** Entire event item fully themed!
8350 - **Fixed:** Description divs now have explicit background + color on load
8351 - **Fixed:** Both visible and hidden descriptions fully styled
8352 - **Result:** No more gray text on initial load!
8379 // event-info wrapper:
8380 <div class="event-info"
8383 // event-meta-compact:
8384 <div class="event-meta-compact"
8387 // event-desc-compact:
8388 <div class="event-desc-compact"
8399 Matrix Theme - Expanded Event:
8412 Matrix Theme - Expanded Event:
8429 event-compact-item ← Themed ✓
8430 └─ event-info ← Themed ✓ (v4.8.0!)
8431 ├─ event-title-row ← Themed ✓
8432 ├─ event-meta ← Themed ✓ (v4.8.0!)
8433 └─ event-desc ← Themed ✓ (v4.8.0!)
8470 │ Team Meeting │ ← Light bg
8471 │ Mon, Feb 8 • 2:00 PM │ ← Light bg
8472 │ Discussed Q1 goals │ ← Light bg
8473 │ [✏️] [��️] [☑] │ ← Light bg
8476 Consistent light throughout! ✓
8495 - ✅ Container
8496 - ✅ Event item
8497 - ✅ Event info wrapper (v4.8.0!)
8498 - ✅ Title row
8499 - ✅ Meta div (v4.8.0!)
8500 - ✅ Description div (v4.8.0!)
8501 - ✅ Action buttons
8502 - ✅ Checkboxes
8531 - background: ... !important
8532 - color: ... !important
8538 ## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS
8541 - **Fixed:** Past event meta div now has theme background when expanded
8542 - **Fixed:** Both PHP and JavaScript render with theme background
8543 - **Result:** Expanded past events have proper themed background!
8546 - **Fixed:** Task checkboxes use accent-color matching theme
8547 - **Fixed:** Cursor changes to pointer on hover
8548 - **Result:** Checkboxes match theme color!
8551 - **Fixed:** Edit (✏️) and Delete (��️) buttons now themed
8552 - **Fixed:** Background, text, and border all use theme colors
8553 - **Result:** All icons themed!
8562 <div class="event-meta-compact" style="display:none;">
8565 <div class="event-meta-compact"
8577 // Added accent-color:
8579 style="accent-color:' . $themeStyles['border'] . ' !important;
8583 **accent-color** changes the checkbox color:
8584 - Matrix: Green checkboxes ✓
8585 - Purple: Purple checkboxes ✓
8586 - Professional: Blue checkboxes ✓
8587 - Pink: Pink checkboxes ✓
8593 <button class="event-action-btn"
8596 border-color:' . $themeStyles['grid_border'] . ' !important;">
8621 Past Event (expanded - Matrix):
8656 **Buttons**: Light bg, dark text
8657 **Expanded**: Light background
8661 [✏️] [��️] ← Light themed
8678 - ✅ Task checkboxes (accent-color)
8679 - ✅ Edit button (✏️)
8680 - ✅ Delete button (��️)
8681 - ✅ Navigation arrows (◀ ▶)
8682 - ✅ Today button
8683 - ✅ Past Events arrow (▶)
8687 ### How accent-color Works
8692 accent-color: #00cc07; /* Green checkbox! */
8703 - ✅ Container
8704 - ✅ Calendar-left
8705 - ✅ Calendar-right
8706 - ✅ Event items
8707 - ✅ Past event expanded (v4.7.9!)
8708 - ✅ Action buttons (v4.7.9!)
8711 - ✅ Checkboxes (v4.7.9!)
8712 - ✅ Edit/Delete buttons (v4.7.9!)
8713 - ✅ Navigation buttons
8714 - ✅ All arrows
8718 ## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS
8721 - **Fixed:** Added background to calendar-left div with !important
8722 - **Result:** No more white bar at bottom!
8725 - **Fixed:** Past event date/time now themed when expanded
8726 - **Fixed:** Past event descriptions now themed when expanded
8727 - **Fixed:** Both PHP and JavaScript render with theme colors
8728 - **Result:** Expanding past events shows themed text!
8731 - **Fixed:** All event descriptions now use theme text_dim color
8732 - **Fixed:** Both visible and hidden descriptions themed
8733 - **Result:** Descriptions always match theme!
8737 **1. Bottom White Bar** (calendar-left div):
8741 <div class="calendar-compact-left">
8742 <!-- White background showing at bottom -->
8747 <div class="calendar-compact-left"
8749 <!-- Matches theme background -->
8754 **PHP** - Added colors to hidden details:
8757 <span class="event-date-time"
8761 <div class="event-desc-compact"
8765 **JavaScript** - Same treatment:
8768 html += '<span class="event-date-time"
8772 html += '<div class="event-desc-compact"
8863 Mon, Feb 8 • 2:00 PM ← Light pink (#ff85c1)
8864 Discussed Q1 goals ← Light pink (#ff85c1)
8872 - ✅ Container background
8873 - ✅ Calendar-left background (v4.7.8!)
8874 - ✅ Calendar-right background
8875 - ✅ No white bars anywhere!
8878 - ✅ Event titles
8879 - ✅ Event dates/times
8880 - ✅ Event descriptions (visible) (v4.7.8!)
8881 - ✅ Past event dates (expanded) (v4.7.8!)
8882 - ✅ Past event descriptions (expanded) (v4.7.8!)
8886 ## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS
8889 - **Fixed:** S M T W T F S headers now have background + color with !important
8890 - **Fixed:** "Past Events" text now has explicit color with !important
8891 - **Fixed:** Today cell background now forced with !important
8892 - **Fixed:** All day numbers now have !important color
8893 - **Fixed:** Empty cells now have !important background
8894 - **Result:** CSS CANNOT override themes anymore!
8916 **PHP** - Added background + !important everywhere:
8920 border-color:' . $themeStyles['grid_border'] . ' !important;
8921 font-weight:bold !important;';
8924 **JavaScript** - Added background to each th:
8928 th.style.setProperty('border-color', themeStyles.grid_border, 'important');
8929 th.style.setProperty('font-weight', 'bold', 'important');
8934 **PHP** - Added !important to spans:
8936 <span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span>
8937 <span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Eve…
8940 **JavaScript** - Same treatment:
8942 html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</…
8943 html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Pas…
8948 **PHP** - !important on background and color:
8955 <span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;">
8958 **JavaScript** - Same:
8967 **PHP & JavaScript** - !important:
8974 **BEFORE (v4.7.6)** - CSS still winning:
8981 **AFTER (v4.7.7)** - Theme wins:
9025 │ S M T W T F S │ ← Light bg, Dark text
9027 │ │ │1│2│3│4│5 │ ← Light cells, Dark nums
9028 │ │ │ │ │ │[8]│ │ ← Today light blue highlight
9045 │ ▶ Past Events (3) │ ← Light pink text
9066 - ✅ S M T W T F S (background + color)
9067 - ✅ Day numbers (color)
9068 - ✅ Today cell (background + color)
9069 - ✅ Empty cells (background)
9070 - ✅ Past Events text (color)
9071 - ✅ Past Events arrow (color)
9072 - ✅ Event titles (color)
9073 - ✅ Event dates (color)
9077 ## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS
9080 - **Fixed:** Event titles now have explicit color styling
9081 - **Fixed:** Event dates/times now have explicit color styling (dimmed)
9082 - **Fixed:** Both PHP and JavaScript event rendering now styled
9085 - **Fixed:** S M T W T F S now uses `!important` to override any CSS
9086 - **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag
9087 - **Result:** Header colors CANNOT be overridden!
9093 **PHP** - Explicit colors added:
9096 <span class="event-title-compact"
9100 <span class="event-date-time"
9104 **JavaScript** - Explicit colors added:
9107 html += '<span class="event-title-compact"
9111 html += '<span class="event-date-time"
9117 **PHP** - Added !important:
9127 **JavaScript** - Used setProperty with important:
9177 <!-- Inline !important beats CSS !important -->
9191 **Two-tone approach**:
9194 - Matrix: `#00cc07` (bright green)
9195 - Purple: `#b19cd9` (lavender)
9196 - Professional: `#2c3e50` (dark)
9197 - Pink: `#ff69b4` (pink)
9200 - Matrix: `#00aa00` (dim green)
9201 - Purple: `#8e7ab8` (dim purple)
9202 - Professional: `#7f8c8d` (gray)
9203 - Pink: `#ff85c1` (light pink)
9210 - Container ✅
9211 - Header ✅
9212 - Buttons ✅
9213 - S M T W T F S ✅ (!important - v4.7.6!)
9214 - Day numbers ✅
9215 - Today cell ✅
9216 - Empty cells ✅
9219 - Panel ✅
9220 - Header ✅
9221 - Search box ✅
9222 - Add button ✅
9223 - **Event titles** ✅ (v4.7.6!)
9224 - **Event dates** ✅ (v4.7.6!)
9225 - Past toggle ✅
9260 • Mon, Feb 8 → Light pink ✓
9265 ## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING
9268 - **Enhanced:** S M T W T F S header letters now have explicit color styling
9269 - **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling
9270 - **Enhanced:** Empty cells verified with background styling
9271 - **Result:** Absolutely guaranteed theme colors on every text element!
9277 **PHP** - Each `<th>` now has explicit color:
9280 border-color:' . $themeStyles['grid_border'] . ';';
9286 **JavaScript** - Applies to each th individually:
9297 **PHP** - Explicit color on span:
9299 <span class="day-num"
9305 **JavaScript** - Explicit color on span:
9307 html += `<span class="day-num"
9317 <td class="cal-empty"
9327 - Header might use default font color
9328 - Day numbers might not inherit color
9329 - Could appear black/gray on some systems
9335 - Header: style="color: #00cc07;" ✓
9336 - Day nums: style="color: #00cc07;" ✓
9337 - No CSS inheritance issues possible ✓
9392 .some-class { color: inherit; }
9398 <!-- Inline styles have highest specificity! -->
9402 - ✅ Overrides any CSS
9403 - ✅ No inheritance issues
9404 - ✅ Works on any DokuWiki theme
9405 - ✅ Guaranteed color application
9412 - S M T W T F S ✅ Explicit color
9413 - Day numbers (1-31) ✅ Explicit color
9414 - Empty cells ✅ Background styled
9417 - Month name ✅ Already styled
9418 - Year ✅ Already styled
9421 - ◀ ✅ Already styled
9422 - ▶ ✅ Already styled
9423 - Today ✅ Already styled
9426 - Event titles ✅ Already styled
9427 - Event times ✅ Already styled
9428 - Event dates ✅ Already styled
9429 - Past toggle ✅ Already styled
9436 - Initial page load ✓
9437 - Month navigation ✓
9438 - Year navigation ✓
9439 - Theme changes ✓
9440 - Different browsers ✓
9441 - Different DokuWiki themes ✓
9445 ## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS
9448 - **Fixed:** Table header (S M T W T F S) now themed after navigation
9449 - **Fixed:** Navigation buttons (◀ ▶) now match Today button style
9450 - **Fixed:** Empty calendar cells properly themed
9451 - **Result:** 100% complete, polished theming!
9525 const thead = container.querySelector('.calendar-compact-grid thead tr');
9536 style="color: $text_primary; border-color: $border;"
9541 border-color: $border;"
9613 **Light theme with proper contrast**:
9618 │ S M T W T F S │ ← Dark text on light
9620 │1│2│3│4│5│6│7 │ ← Light gray cells
9654 ## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS
9657 - **Fixed:** Event items now themed when changing months via AJAX
9658 - **Fixed:** Past Events toggle now themed after navigation
9659 - **Fixed:** JavaScript functions now read theme data from container
9660 - **Result:** Theme persists perfectly through all interactions!
9684 let html = '<div style="border-left-color: ' + color + ';">';
9695 <div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
9705 const itemStyle = 'border-left-color: ' + color + ';' +
9726 style="border-left-color: ${color};
9741 'border-color: ' + themeStyles.grid_border + ';';
9775 Navigate anywhere - theme persists! ✓
9783 data-theme-styles='{"bg":"#242424",...}'
9835 ## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING
9838 - **Fixed:** Event items in sidebar now use theme colors
9839 - **Fixed:** Past Events toggle now uses theme colors
9840 - **Fixed:** Calendar cells now properly themed (issue with data passing)
9841 - **Result:** Every element now perfectly themed!
9848 style="border-left-color: $color;"
9851 style="border-left-color: $color;
9859 <div class="past-events-toggle">
9862 <div class="past-events-toggle"
9865 border-color: $themeStyles['grid_border'];">
9935Light gray │ • Meeting │ ← Light bg
9939 │ │ ▶ Past (5) │ ← Light bg
9964 - ✅ Container border & shadow
9965 - ✅ Header background & text
9966 - ✅ Navigation buttons
9967 - ✅ Today button
9968 - ✅ Grid table
9969 - ✅ Day cells
9970 - ✅ Today cell highlight
9971 - ✅ Empty cells
9974 - ✅ Panel background
9975 - ✅ Header background
9976 - ✅ Header text
9977 - ✅ Search box
9978 - ✅ Add button
9979 - ✅ Event items ← NEW!
9980 - ✅ Past Events toggle ← NEW!
9984 ## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING
9987 - **Fixed:** Calendar theme no longer resets to default when navigating months
9988 - **Fixed:** Theme data now stored in data attributes and used by JavaScript
9989 - **Added:** rebuildCalendar now applies theme styles to all cells
9992 - **Added:** Right sidebar event list now uses theme colors
9993 - **Added:** Event list header themed
9994 - **Added:** Search box themed
9995 - **Added:** Add button themed
9996 - **Result:** Complete theme consistency across entire calendar!
10020 <div data-theme="matrix"
10021 data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
10078 - ✅ Cell backgrounds
10079 - ✅ Today cell highlight
10080 - ✅ Empty cells
10081 - ✅ Text colors
10082 - ✅ Border colors
10085 - ✅ Panel background
10086 - ✅ Header background & text
10087 - ✅ Search box styling
10088 - ✅ Add button colors
10089 - ✅ Namespace badge
10102 data-theme="matrix"
10103 data-theme-styles='{...JSON...}'
10117 - Month change: Green ✓
10118 - Event list: Green ✓
10121 - Month change: Purple ✓
10122 - Event list: Purple ✓
10125 - Month change: Blue ✓
10126 - Event list: Blue ✓
10129 - Month change: Pink ✓
10130 - Event list: Pink ✓
10134 ## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! ��
10137 - **Added:** Full theme support for {{calendar-compact}}
10138 - **Added:** Matrix, Purple, Professional, and Pink themes
10139 - **Added:** Consistent theming across sidebar and calendar
10140 - **Result:** Beautiful, cohesive appearance!
10145 - �� **Matrix** - Green cyberpunk (default)
10146 - �� **Purple** - Royal purple elegance
10147 - �� **Professional** - Clean business blue
10148 - �� **Pink** - Sparkly pink bling
10196 **Professional Theme** (Light):
10201Light gray background │
10204 │ Clean, business-ready │
10223 - Background color
10224 - Border color
10225 - Shadow/glow effect
10228 - Background gradient
10229 - Border color
10230 - Text color
10231 - Button colors
10234 - Grid background
10235 - Grid borders
10236 - Header row colors
10239 - Cell background
10240 - Today cell highlight
10241 - Text color
10242 - Border colors
10249 $theme = $this->getSidebarTheme();
10250 $themeStyles = $this->getSidebarThemeStyles($theme);
10257 box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';"
10281 **No configuration needed** - Just select and enjoy!
10286 - Background: `#242424` (dark gray)
10287 - Border: `#00cc07` (matrix green)
10288 - Text: `#00cc07` (green)
10289 - Today: `#2a4d2a` (green highlight)
10292 - Background: `#2a2030` (dark purple)
10293 - Border: `#9b59b6` (royal purple)
10294 - Text: `#b19cd9` (lavender)
10295 - Today: `#3d2b4d` (purple highlight)
10298 - Background: `#e8ecf1` (light blue-gray)
10299 - Border: `#4a90e2` (business blue)
10300 - Text: `#2c3e50` (dark blue-gray)
10301 - Today: `#dce8f7` (light blue highlight)
10304 - Background: `#1a0d14` (dark pink-black)
10305 - Border: `#ff1493` (hot pink)
10306 - Text: `#ff69b4` (pink)
10307 - Today: `#3d2030` (pink highlight)
10316 {{calendar-compact}}: Purple theme ✓
10317 {{calendar-panel}}: Will be themed next! ✓
10324 ## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER
10327 - **Added:** Documentation for existing `noheader` parameter
10328 - **Updated:** README with complete eventlist parameter list
10329 - **Info:** Feature already existed, just wasn't documented!
10367 - Dashboard view
10368 - Want to see current time
10369 - Want weather info
10370 - Want system stats
10373 - Embedded in page content
10374 - Just want event list
10375 - Minimal design
10376 - Space-constrained
10382 date=YYYY-MM-DD Show specific date
10415 {{eventlist daterange=2026-02-01:2026-02-28 noheader}}
10441 ## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE
10444 - **Removed:** Filter badge no longer shows above compact calendar
10445 - **Reason:** Filtering is already clearly visible in the calendar view
10446 - **Result:** Cleaner UI, less redundancy
10461 Badge was redundant - you can already see
10480 - Calendar already shows only filtered events
10481 - Namespace badges on events show which namespace
10482 - Badge added visual clutter without value
10485 - Less visual noise
10486 - More space for content
10487 - Filtering still obvious from event display
10493 $html .= '<div class="calendar-namespace-filter">';
10499 // Filter badge removed - filtering shown in calendar view only
10505 - Calendar only shows events from selected namespace ✓
10506 - Event namespace badges show which namespace ✓
10507 - Clear filtering still works (in calendar) ✓
10510 - No redundant "Filtering: work ✕" above calendar
10511 - Cleaner, more professional appearance
10525 - Only events from selected namespace visible
10526 - Empty dates show no events
10527 - Clear which namespace you're viewing
10530 - Already obvious from events shown
10531 - Namespace badges provide context
10532 - Less clutter!
10542 ## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY
10545 - **Fixed:** Filter badge now removed from DOM immediately when clicking ✕
10546 - **Added:** Badge removal before page reload/AJAX call
10547 - **Result:** Badge disappears instantly, no waiting for reload
10558 User sees badge for 0.5-2 seconds after clicking ✕
10571 const filterBadge = container.querySelector('.calendar-namespace-filter');
10596 Delay: 500-2000ms ✗
10617 **Two-step removal**:
10645 - Old: Click ✕ → Wait → Badge disappears
10646 - New: Click ✕ → Badge disappears instantly
10649 - Instant visual feedback
10650 - Feels responsive
10651 - Professional UX
10654 - DOM manipulation is synchronous (instant)
10655 - Network requests are asynchronous (slow)
10656 - Do fast things first!
10660 ## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING
10663 - **Fixed:** Filter badge now properly clears when clicking ✕ button
10664 - **Fixed:** Sidebar widget now reloads page without namespace filter
10665 - **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately
10678 **Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar.
10689 const sidebarContainer = document.getElementById('sidebar-widget-' + calId);
10708 Rendered server-side with PHP
10709 Cannot be AJAX-reloaded
10713 **Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}):
10765 Sidebar widget is rendered server-side:
10768 return $this->renderSidebarWidget($events, $namespace, $calId);
10792 - Server-side: PHP renders badge in HTML
10793 - Client-side: JavaScript adds badge to header
10796 - Sidebar: Page reload (removes ?namespace from URL)
10797 - Calendar: AJAX reload (badge removed in rebuildCalendar)
10801 ## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR
10804 - **Fixed:** Template literal backticks causing PHP syntax error
10805 - **Fixed:** Changed JavaScript template literals to concatenation
10806 - **Fixed:** Admin page now loads without parse errors
10846 - ✅ Backticks (`) → Double quotes (")
10847 - ✅ Template literals (${var}) → Concatenation (" + var + ")
10848 - ✅ Single quotes in console.log → Double quotes
10849 - ✅ Properly escaped quotes for PHP echo
10871 // Double quotes inside PHP single-quote string:
10881 **No functionality changed - just syntax fix!**
10883 ## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN
10886 - **Fixed:** Namespace dropdown now shows ALL available namespaces when editing
10887 - **Fixed:** Current namespace now properly selected in dropdown
10888 - **Fixed:** Namespace extraction from DOM now uses multiple methods
10889 - **Added:** Console logging to debug namespace detection
10897 - (default)
10898 - (nothing else!) ✗
10909 const nsSpan = el.querySelector("span:nth-child(3)");
10925 const nsSpan = el.querySelector("span:nth-child(3)");
10988 - Primary: Parse namespace explorer DOM
10989 - Backup: Read from datalist
10990 - Result: Always finds namespaces ✓
11013 console.log('Edit recurring - Current namespace:', namespace);
11027 - ☐ (default)
11028 - ☑ work (current)
11029 - ☐ personal
11030 - ☐ projects
11037 ## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION
11040 - **Fixed:** Namespace now properly preserved when editing recurring events
11041 - **Fixed:** Namespace selector now allows selecting any namespace (not just default)
11042 - **Added:** Better logging for namespace preservation debugging
11043 - **Added:** Console logging to track namespace values during edit
11047 **Issue 1**: Can't select non-default namespace
11050 - Dropdown shows all namespaces ✓
11051 - User selects "work"
11052 - Form submits with "" (empty/default) ✗
11132 Calendar saveEvent recurring: Loaded existing data - namespace='work'
11138 ## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA
11141 - **Fixed:** Editing recurring events now preserves unchanged fields
11142 - **Fixed:** Empty fields no longer erase existing data
11143 - **Added:** Smart merge of existing event data with new changes
11150 - Title: "Team Meeting"
11151 - Time: "10:00 AM"
11152 - Description: "Weekly standup with engineering team"
11153 - Color: Red
11157 - Title: "Staff Meeting" ✓
11158 - Time: "" ✗ (empty because user didn't change it)
11159 - Description: "" ✗ (empty)
11160 - Color: "#3498db" ✗ (default blue)
11163 - Title: "Staff Meeting" ✓
11164 - Time: BLANK ✗
11165 - Description: BLANK ✗
11166 - Color: Blue ✗
11198 - Title: "Staff Meeting" ✓ (changed)
11199 - Time: "10:00 AM" ✓ (preserved!)
11200 - Description: "Weekly standup..." ✓ (preserved!)
11201 - Color: Red ✓ (preserved!)
11210 $existingEventData = $this->getExistingEventData(
11238 - ✅ Title (if left blank)
11239 - ✅ Time (if not specified)
11240 - ✅ End Time (if not specified)
11241 - ✅ Description (if left empty)
11242 - ✅ Color (if still default blue)
11244 **Edit only what you want to change - everything else stays!** ��
11246 ## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX
11249 - **Added:** ✏️ Rename button in Namespace Explorer
11250 - **Added:** Rename all events in a namespace at once
11251 - **Added:** Automatic cleanup of old directory structure
11254 - **Fixed:** Editing recurring events now deletes ALL instances
11255 - **Fixed:** Previously only deleted one instance, left orphans
11256 - **Fixed:** Recurring events properly regenerated on edit
11299 ### Recurring Events Fix - The Problem
11304 - Event-0 (Mon, Feb 10)
11305 - Event-1 (Mon, Feb 17)
11306 - Event-2 (Mon, Feb 24)
11308 User edits Event-0, changes title to "Updated"
11311 - Delete Event-0, Event-1, Event-2
11312 - Generate new instances with "Updated" title
11315 - Delete Event-0 only ✗
11316 - Generate new instances
11317 - Result: Event-1 and Event-2 still show old title! ✗
11348 - Edit "Weekly Team Meeting" → ALL instances updated ✓
11349 - Delete recurring event → ALL instances deleted ✓
11350 - No more orphaned events! ✓
11357 "id": "abc123-0",
11368 ## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS
11370 ### �� Important Events Sorting - ACTUALLY FIXED!
11371 - **Fixed:** Important Events now REALLY sorted by date first, then time
11372 - **Fixed:** renderSidebarSection was re-sorting and breaking the order
11373 - **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only
11376 - **Added:** Pink gradient tooltips (hot pink → light pink)
11377 - **Added:** Glowing pink border on tooltips
11378 - **Added:** Sparkling heart (��) appears next to tooltip!
11379 - **Added:** Heart has pink glow drop-shadow
11381 ### The Sorting Bug - Root Cause
11404 // Same date - sort by time
11408 // Today/Tomorrow - sort by TIME only (same date)
11417 ✓ Sun, Feb 8 - 3:30 PM Super Bowl
11418 ✓ Tue, Feb 10 - 11:30 AM Doctor visit
11419 ✓ Sat, Feb 14 - Valentine's Day (all-day)
11420 ✓ Sat, Feb 14 - 8:00 PM Crab Shack
11434 background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%);
11440 box-shadow:
11445 font-weight: 600;
11450 .sidebar-pink [data-tooltip]:after {
11452 font-size: 12px;
11453 filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8));
11469 ## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING
11472 - **Fixed:** Important Events now sorted by date (earliest first)
11473 - **Fixed:** Events on same date sorted by time (chronological)
11474 - **Fixed:** All-day events appear last within each date
11492 �� Valentine's Day (Sat, Feb 14) ← All-day event
11500 strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14"
11505 // All-day events (no time) go last
11507 if (!empty($timeA) && empty($timeB)) return -1;
11509 // Both have times - sort chronologically
11512 return $aMinutes - $bMinutes; // 690 < 1200
11516 1. Sun, Feb 8 - 3:30 PM (earliest date & time)
11517 2. Tue, Feb 10 - 11:30 AM (next date)
11518 3. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14)
11519 4. Sat, Feb 14 - 8:00 PM (timed event on Feb 14)
11523 ## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨��
11526 - **Added:** Click sparkles - 8 sparkles burst out on every click!
11527 - **Added:** Auto-sparkles - random sparkles appear every 3 seconds
11528 - **Added:** Hover mega-glow - sidebar glows BRIGHT on hover
11529 - **Added:** Pulsing border glow - constantly breathing pink glow
11530 - **Added:** Drop shadows on sparkles for extra depth
11531 - **Added:** More sparkle emojis - hearts, diamonds, crowns, bows!
11548 - Starts at click point
11549 - Flies outward 30-60px in random direction
11550 - Spins 360 degrees
11551 - Fades in and out
11552 - Has pink glow drop-shadow
11553 - Disappears after 1 second
11567 **Hover Mega-Glow** ��:
11569 .sidebar-pink:hover {
11570 box-shadow:
11580 @keyframes pulse-glow {
11582 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
11585 box-shadow:
11591 animation: pulse-glow 3s ease-in-out infinite;
11619 - ✨ Pulsing pink border glow (3 second cycle)
11620 - ✨ Auto-sparkles every 3 seconds
11623 - �� MEGA GLOW EFFECT (2x brightness!)
11626 - �� 8 sparkles EXPLODE outward!
11627 - �� Random emojis (hearts, stars, diamonds, crowns!)
11628 - �� Each sparkle spins 360° while flying
11629 - �� Pink glow drop-shadow on each sparkle
11632 - Click anywhere = SPARKLE EXPLOSION! ��
11633 - Hover anywhere = MEGA GLOW! ✨
11634 - Always breathing and sparkling! ��
11635 - Maximum glamour! ��
11636 - Wife approval: 1000%! ��
11640 ## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH
11643 - **Fixed:** Add Event text now black (was bright pink, hard to read)
11644 - **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!)
11645 - **Removed:** Text shadow on Add Event button (cleaner with black text)
11647 ### Add Event Text - Black & Readable!
11651 $addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read!
11652 text-shadow: 0 0 3px #ff1493; // Glowy pink
11662 - Black text pops against dark pink background ✓
11663 - Easy to read ✓
11664 - Professional look with bling ✓
11666 ### Clock Border - All Pink!
11668 **The Problem**: Inline style only set `border-bottom`, CSS set other sides to green
11673 style="border-bottom:2px solid #ff1493;"
11676 .eventlist-today-header {
11691 - Background: #b8156f (dark pink) ✓
11692 - Text: **#000000 (black)** ← NEW!
11693 - Text shadow: **none** ← NEW!
11694 - Glow: 0 0 10px pink ✓
11697 - Top: **#ff1493 (pink)** ← FIXED!
11698 - Right: **#ff1493 (pink)** ← FIXED!
11699 - Bottom: #ff1493 (pink) ✓
11700 - Left: **#ff1493 (pink)** ← FIXED!
11702 **Perfect pink theme - wife approved!** ��✨
11704 ## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION
11707 - **Fixed:** Clock border now completely pink (was green on sides/top)
11708 - **Changed:** Today/Tomorrow/Important sections now different shades of pink
11709 - **Changed:** Add Event button now dark pink (was clashing blue)
11710 - **Changed:** System status bars now pink gradient (3 shades!)
11712 ### All-Pink Everything! ��
11720 .sidebar-pink .eventlist-today-header {
11721 border-color: #ff1493;
11722 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
11733 // After: Hot pink, pink, light pink
11736 'Important' => '#ff85c1' // Light pink
11752 /* 5-min load average */
11753 .sidebar-pink .eventlist-cpu-fill {
11755 box-shadow: 0 0 5px rgba(255, 20, 147, 0.7);
11759 .sidebar-pink .eventlist-cpu-fill-purple {
11761 box-shadow: 0 0 5px rgba(255, 105, 180, 0.7);
11765 .sidebar-pink .eventlist-cpu-fill-orange {
11766 background: #ff85c1; /* Light pink */
11767 box-shadow: 0 0 5px rgba(255, 133, 193, 0.7);
11779 6. Important section: #ff85c1 (light pink)
11780 7. System bar 3: #ff85c1 (light pink)
11800 ## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS
11803 - **Added:** Glamorous hot pink theme with maximum sparkle
11804 - **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic
11805 - **Perfect for:** Fabulous calendars that demand attention ✨
11808 - **Fixed:** Section headers now have subtle shadow (not glow)
11809 - **Fixed:** Clicked day panel header has proper shadow
11815 'bg' => '#1a0d14', // Dark rich pink-black
11824 'text_dim' => '#ff85c1', // Light pink
11829 'grid_bg' => '#2d1a24', // Dark purple-pink
11831 'cell_today_bg' => '#3d2030', // Highlighted purple-pink
11844 box-shadow: 0 0 8px #3498db; // Blue glow - wrong!
11855 - **Matrix/Purple/Pink**: Colored glow on headers ✓
11856 - **Professional**: Clean grey shadow (no glow) ✓
11861 - Dark green (#00cc07)
11862 - Neon glow effects
11863 - Hacker aesthetic
11866 - Elegant purple (#9b59b6)
11867 - Violet glow effects
11868 - Royal aesthetic
11871 - Clean grey/blue (#4a90e2)
11872 - Subtle shadows (NO glow)
11873 - Corporate aesthetic
11876 - Hot pink (#ff1493)
11877 - MAXIMUM sparkle & glow
11878 - Glamorous aesthetic ✨��
11883 - `getSidebarThemeStyles()` - color definitions
11884 - `getSidebarTheme()` - validation
11885 - `saveSidebarTheme()` - admin save
11886 - Admin panel - UI with preview
11887 - All shadow/glow calculations
11888 - JavaScript theme colors
11889 - Clicked day panel colors
11893 ## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY
11896 - **Changed:** Reduced text glow from 3px to 2px (less intense)
11897 - **Fixed:** Clicked day panel now has same text glow as sections
11904 text-shadow: 0 0 3px #00cc07; // Too bright!
11907 text-shadow: 0 0 3px #00cc07; // Too bright!
11913 text-shadow: 0 0 2px #00cc07; // Just right ✓
11916 text-shadow: 0 0 2px #00cc07; // Just right ✓
11920 - **Matrix**: Softer green glow, easier to read
11921 - **Purple**: Softer purple glow, more elegant
11922 - **Professional**: Still no glow (clean)
11931 - ✅ Today section event text
11932 - ✅ Tomorrow section event text
11933 - ✅ Important section event text
11934 - ✅ **Clicked day panel event text** ← NOW CONSISTENT!
11937 - Glow is less intense and easier on eyes ✓
11938 - All event text has consistent styling ✓
11939 - Matrix/Purple themes more refined ✓
11945 $textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';';
11950 themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple
11956 ## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY
11959 - **Changed:** Important events now show from next 2 weeks (not just current week)
11960 - **Fixed:** Important events on Sunday after current week now visible
11961 - **Changed:** Events loaded 2 weeks into future for Important section
11964 - **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections
11965 - **Removed:** Grey backgrounds from individual events
11966 - **Result:** Clean transparent backgrounds, original dark Matrix look restored
11968 ### Important Events - Future Coverage
11980 $twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days'));
11989 - Today: Saturday Feb 7
11990 - Current week: Sun Feb 1 → Sat Feb 7
11991 - Important events shown: Feb 7 → Feb 21 (today + 14 days)
11997 **Before**: Light grey/white backgrounds added
12016 - Clean, dark Matrix aesthetic restored ✓
12017 - Purple theme darker and more elegant ✓
12018 - Professional theme still has its light grey sidebar bg ✓
12019 - Events stand out with just color bars and borders ✓
12024 - ❌ No more grey overlay
12025 - ✓ Transparent background
12026 - ✓ Colored borders & glows remain
12029 - ❌ No more grey overlay
12030 - ✓ Transparent background
12031 - ✓ Colored bars & borders remain
12035 ## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR
12038 - **Fixed:** Today/Tomorrow/Important section shadows now match theme
12039 - **Fixed:** Event description text color now uses theme dim color
12048 box-shadow: 0 0 5px rgba(0, 204, 7, 0.2);
12053 // Theme-aware:
12060 - **Matrix**: Green glow around sections ✓
12061 - **Purple**: Purple glow around sections ✓
12062 - **Professional**: Subtle grey shadow (no glow) ✓
12079 - **Matrix**: Dim green (#00aa00) ✓
12080 - **Purple**: Dim purple (#8e7ab8) ✓
12081 - **Professional**: Grey (#7f8c8d) ✓
12086 - ✅ Sidebar background & border
12087 - ✅ Header colors & shadows
12088 - ✅ Week grid & cells
12089 - ✅ Add Event button
12090 - ✅ Section borders & **shadows** ← Fixed!
12091 - ✅ Event titles & times
12092 - ✅ Event **descriptions** ← Fixed!
12093 - ✅ Clicked day panel
12094 - ✅ Event bars & glows
12098 ## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND
12101 - **Fixed:** Clicked day panel now uses correct theme colors
12102 - **Changed:** Professional Blue background now light grey (not white)
12103 - **Added:** Theme colors passed to JavaScript for dynamic rendering
12114 **After**: Theme-aware colors
12132 - Matrix: Green panel with green glow ✓
12133 - Purple: Purple panel with purple glow ✓
12134 - Professional: Blue panel, no glow, clean ✓
12140 'bg' => '#f5f7fa', // Very light
12144 **After**: Light grey tones
12146 'bg' => '#e8ecf1', // Soft grey-blue
12147 'cell_bg' => '#f5f7fa', // Light grey
12149 'cell_today_bg' => '#dce8f7' // Highlighted grey-blue
12153 - Sidebar: Light grey-blue background (#e8ecf1)
12154 - Week cells: Lighter grey (#f5f7fa)
12155 - Today cell: Highlighted blue-grey (#dce8f7)
12156 - More depth and contrast ✓
12157 - Professional appearance ✓
12162 - Sidebar: Dark (#242424)
12163 - Clicked panel: Dark with green
12164 - Text: Green with glow
12167 - Sidebar: Dark purple (#2a2030)
12168 - Clicked panel: Dark with purple
12169 - Text: Purple with glow
12172 - Sidebar: Light grey (#e8ecf1)
12173 - Clicked panel: Light with blue
12174 - Text: Dark grey, no glow
12178 ## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING
12181 - **Fixed:** Tomorrow events not loaded when outside current week
12182 - **Fixed:** `&amp;` showing instead of `&` (double HTML encoding)
12187 - Today (Saturday): Week ends today
12188 - Tomorrow (Sunday): Start of NEXT week
12189 - Tomorrow events never loaded from data files!
12195 $end->modify('+1 day');
12203 $tomorrowDate = date('Y-m-d', strtotime('+1 day'));
12208 $end->modify('+1 day');
12233 $html .= $title; // Use already-encoded value ✓
12242 2. **Display bug**: Double-encoding text
12246 ## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY
12249 - **Fixed:** Tomorrow section missing when tomorrow is outside current week
12250 - **Fixed:** Today section now always shows regardless of week boundaries
12251 - **Changed:** Today/Tomorrow processed BEFORE week boundary checks
12256 - Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today
12257 - Tomorrow: Feb 8 (Sun) ← **Start of NEXT week**
12279 $eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
12295 // Important events still week-only
12318 - Today section: ✓ Always shows
12319 - Tomorrow section: ✓ Always shows (even at week boundary!)
12320 - Week grid: ✓ Only current week
12321 - Important: ✓ Only current week
12326 - Today (Sat): Shows in Today section ✓
12327 - Tomorrow (Sun): Shows in Tomorrow section ✓
12328 - Week grid: Only shows Sat (today) ✓
12331 - Today (Sun): Shows in Today section ✓
12332 - Tomorrow (Mon): Shows in Tomorrow section ✓
12333 - Week grid: Shows both Sun and Mon ✓
12337 ## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY!
12340 - **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!)
12341 - **Changed:** Default is **Sunday** (US/Canada standard)
12342 - **Fixed:** Day names array for Sunday start: S M T W T F S
12347 - Grid shows: **S M T W T F S**
12348 - Week: Sunday → Saturday
12349 - US/Canada standard
12350 - Most common worldwide
12353 - Grid shows: **M T W T F S S**
12354 - Week: Monday → Sunday
12355 - ISO 8601 standard
12356 - Common in Europe
12363 - Admin validation
12364 - Week calculation logic
12365 - Day names array
12366 - Default value
12367 - Comments
12374 $weekStart = date('Y-m-d'); // Today!
12377 $weekStart = date('Y-m-d', strtotime('-' . $today . ' days'));
12382 - Today (Saturday): Week = Sun Feb 1 → Sat Feb 7
12383 - Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14
12385 **Sorry for the confusion - it's Sunday not Saturday!** ��
12387 ## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY
12390 - **Fixed:** Week calculation broken when today is Saturday
12391 - **Fixed:** Events not showing in Today/Important sections
12392 - **Fixed:** Week grid event bars missing
12393 - **Changed:** Default week start is Saturday (matches main calendar)
12400 $weekStart = date('Y-m-d', strtotime('saturday this week'));
12406 $weekStart = date('Y-m-d'); // Today!
12409 $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days'));
12411 $weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days'));
12415 - `strtotime('saturday this week')` is ambiguous when run ON a Saturday
12416 - PHP may interpret it as "next Saturday" or fail
12417 - Result: Week range was wrong, events filtered out
12420 - Explicit calculation using day-of-week math
12421 - Saturday (day 6): weekStart = today
12422 - Sunday (day 0): weekStart = yesterday
12423 - Monday-Friday: calculate days back to last Saturday
12428 - Matches main calendar behavior
12429 - Users can still switch to Monday in settings
12431 ## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR
12434 - **Added:** Week start day selector in Themes tab
12435 - **Added:** Choose between Monday (ISO standard) or Saturday week start
12436 - **Added:** Week grid and all events now respect the selected start day
12437 - **Changed:** Themes tab renamed to "Sidebar Widget Settings"
12442 - Grid shows: M T W T F S S
12443 - Week runs: Monday → Sunday
12444 - ISO 8601 standard
12445 - Common in Europe, most of world
12448 - Grid shows: S S M T W T F
12449 - Week runs: Saturday → Friday
12450 - Common in Middle East
12451 - Sabbath-observant communities
12462 $weekStart = date('Y-m-d', strtotime('saturday this week'));
12463 $weekEnd = date('Y-m-d', strtotime('friday next week'));
12465 $weekStart = date('Y-m-d', strtotime('monday this week'));
12466 $weekEnd = date('Y-m-d', strtotime('sunday this week'));
12477 - Week grid day letters
12478 - Week grid date sequence
12479 - Today/Tomorrow/Important event date ranges
12480 - Week event grouping
12483 - All themes still work
12484 - Event data unchanged
12485 - Main calendar unaffected
12497 ## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS
12500 - **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar)
12501 - **Changed:** Event section backgrounds much lighter (almost white)
12502 - **Changed:** Individual event backgrounds lighter and more readable
12503 - **Changed:** Event borders now theme-colored
12510 $weekStart = date('Y-m-d', strtotime('monday this week'));
12511 $weekEnd = date('Y-m-d', strtotime('sunday this week'));
12515 $weekStart = date('Y-m-d', strtotime('sunday this week'));
12516 $weekEnd = date('Y-m-d', strtotime('saturday this week'));
12523 Matrix: rgba(255, 255, 255, 0.05) // Very light overlay
12529 Purple: rgba(255, 255, 255, 0.05) // Light
12530 Professional: rgba(255, 255, 255, 0.5) // Semi-transparent white
12543 **After**: Light backgrounds make events pop and text very readable
12551 ## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS
12554 - **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors
12555 - **Fixed:** Event times now use theme bright color
12556 - **Fixed:** Event dates use theme dim color
12557 - **Fixed:** Task checkboxes use theme bright color
12558 - **Fixed:** Event color bars use theme-appropriate shadows
12559 - **Fixed:** No text shadows on Professional theme
12566 - Title: #00cc07 (green)
12567 - Time: #00dd00 (bright green)
12568 - Date: #00aa00 (dim green)
12569 - Text shadow: 0 0 3px (glow)
12572 - Title: #b19cd9 (lavender)
12573 - Time: #d4a5ff (bright purple)
12574 - Date: #8e7ab8 (dim purple)
12575 - Text shadow: 0 0 3px (glow)
12578 - Title: #2c3e50 (dark grey)
12579 - Time: #4a90e2 (blue)
12580 - Date: #7f8c8d (grey)
12581 - Text shadow: none (clean)
12587 box-shadow: 0 0 3px [event-color];
12590 box-shadow: 0 1px 2px rgba(0,0,0,0.2);
12610 ## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION
12613 - **Fixed:** Week calendar grid now uses theme colors (purple/blue)
12614 - **Fixed:** Add Event button now uses theme colors
12615 - **Fixed:** Clock box border now matches theme
12616 - **Fixed:** All text shadows respect theme (no glow on professional)
12617 - **Fixed:** Event bars use theme-appropriate shadows
12625 // Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders
12637 // Matrix & Purple: Glow effects (text-shadow: 0 0 6px color)
12644 .sidebar-purple .eventlist-today-header {
12645 border-color: #9b59b6;
12646 box-shadow: 0 0 8px rgba(155, 89, 182, 0.2);
12650 .sidebar-professional .eventlist-today-header {
12651 border-color: #4a90e2;
12652 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
12659 - Week grid: Purple borders and dark purple background
12660 - Add Event: Purple button with lavender text
12661 - Clock box: Purple border with purple glow
12662 - Event bars: Purple glow instead of green
12663 - All text: Purple/lavender shades
12666 - Week grid: Blue borders and light grey background
12667 - Add Event: Blue button with white text
12668 - Clock box: Blue border with subtle shadow (no glow)
12669 - Event bars: Subtle shadows (no glow)
12670 - All text: Dark grey and blue shades
12674 ## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING
12677 - **Added:** �� Themes tab in admin for sidebar widget theming
12678 - **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/gr…
12679 - **Added:** Theme selector with live previews
12680 - **Added:** Theme persistence across page loads
12685 - Dark background (#242424)
12686 - Green accents (#00cc07)
12687 - Neon glow effects
12688 - Original Matrix styling
12691 - Dark purple background (#2a2030)
12692 - Purple/violet accents (#9b59b6)
12693 - Elegant purple glow
12694 - Rich purple color scheme
12697 - Light grey background (#f5f7fa)
12698 - Blue accents (#4a90e2)
12699 - Clean professional look
12700 - Subtle shadows instead of glow
12703 - **Fixed:** Tooltips now go UP and to the LEFT (was going right)
12704 - **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px`
12712 $theme = $this->getSidebarTheme(); // 'matrix', 'purple', or 'professional'
12713 $styles = $this->getSidebarThemeStyles($theme);
12716 - bg, border, shadow
12717 - header_bg, header_border, header_shadow
12718 - text_primary, text_bright, text_dim
12719 - grid_bg, grid_border
12720 - cell_bg, cell_today_bg
12724 - Header background gradient
12725 - Border colors
12726 - Text colors
12727 - Shadow/glow effects
12728 - Grid colors
12737 - Themes only affect sidebar widget appearance
12738 - Main calendar view unchanged
12739 - Theme setting stored in `data/meta/calendar_theme.txt`
12740 - Safe to switch themes - no data affected
12742 ## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING
12745 - **Fixed:** Events now sort chronologically by time (was using string comparison)
12746 - **Fixed:** Tooltip positioning using JavaScript like system tooltips
12747 - **Fixed:** All-day events appear first, then events in time order
12759 $aMinutes = $this->timeToMinutes($aTime); // 8:00 = 480
12760 $bMinutes = $this->timeToMinutes($bTime); // 10:00 = 600
12761 return $aMinutes - $bMinutes;
12767 �� Weekend Ticket Duty (all-day)
12775 �� Weekend Ticket Duty (all-day)
12782 - Added JavaScript to dynamically position tooltips using `getBoundingClientRect()`
12783 - Uses CSS custom properties `--tooltip-left` and `--tooltip-top`
12784 - Positioned on `mouseenter` event
12785 - Matches system tooltip implementation (no cutoff)
12791 element.style.setProperty("--tooltip-left", (rect.right - 10) + "px");
12792 element.style.setProperty("--tooltip-top", (rect.top - 30) + "px");
12798 ## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX
12801 - **Fixed:** Sidebar tooltips no longer cut off at sidebar edge
12802 - **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar
12803 - **Changed:** Main calendar conflict tooltip now much smaller (was too big)
12821 .conflict-tooltip {
12823 border-radius: 6px;
12825 font-size: 12px;
12826 min-width: 200px;
12827 max-width: 350px;
12831 .conflict-tooltip {
12833 border-radius: 3px; /* Smaller */
12835 font-size: 10px; /* Smaller header */
12836 min-width: 120px; /* Narrower */
12837 max-width: 200px; /* Narrower */
12840 .conflict-tooltip-body {
12842 font-size: 9px; /* Was 11px */
12843 line-height: 1.4; /* Was 1.6 */
12846 .conflict-item {
12848 font-size: 9px; /* Added smaller font */
12853 - Main calendar tooltip ~50% smaller
12854 - Sidebar tooltips now extend beyond borders
12855 - Both tooltips compact and readable
12857 ## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP
12860 - **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text)
12861 - **Changed:** Using HTML entity `&#10;` for newlines instead of `\n`
12871 "Conflicts with:\n• Event 1\n• Event 2" // ← Literal backslash-n
12886 - HTML entity for line feed character
12887 - Works in data attributes
12888 - CSS `white-space: pre-line` preserves the newlines
12889 - Renders as actual line breaks in tooltip
12892 - PHP rendering (sidebar Today/Tomorrow/Important)
12893 - JavaScript rendering (clicked day events)
12895 ## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX
12898 - **Changed:** Tooltip size reduced significantly (much more compact)
12899 - **Fixed:** Tooltip now overflows sidebar borders (not cut off)
12900 - **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px)
12901 - **Changed:** Narrower width (120-200px vs 200-300px)
12909 font-size: 11px;
12910 min-width: 200px;
12911 max-width: 300px;
12915 font-size: 9px;
12916 min-width: 120px;
12917 max-width: 200px;
12923 .sidebar-widget,
12924 .sidebar-matrix {
12929 [data-tooltip]:before {
12931 right: -10px; /* Can extend beyond edge */
12932 z-index: 10000; /* Always on top */
12937 - Tooltip is ~40% smaller
12938 - Extends beyond sidebar border if needed
12939 - Still readable, just more compact
12940 - Better for small screens
12942 ## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING
12945 - **Fixed:** Sidebar conflict detection now matches main calendar logic exactly
12946 - **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names
12947 - **Fixed:** Events without end time now treated as zero-duration (not +1 hour)
12948 - **Fixed:** Now matches what you see in main calendar view
12951 - **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right)
12952 - **Added:** Custom CSS tooltip with data-tooltip attribute
12953 - **Improved:** Better tooltip positioning - doesn't overflow screen edges
12957 **The Problem - Field Name Mismatch**:
12966 **The Problem - Duration Logic**:
12974 $endTime = ... ? ... : $this->addHoursToTime($startTime, 1); // ← Added 1 hour!
12990 - Uses `data-tooltip` attribute instead of `title`
12991 - CSS positions tooltip ABOVE badge (`bottom: 100%`)
12992 - Aligns to RIGHT edge (`right: 0`)
12993 - Arrow points down to badge
12994 - Black background with white text
12995 - Max width 300px
13000 - Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌
13001 - New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar!
13003 **3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**:
13004 - Zero-duration events at 6:00 PM don't overlap with anything
13005 - ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict
13012 │ (3:30 PM-7:00 PM)│
13018 ## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING
13021 - **Fixed:** Events without end_time now properly get 1-hour default duration
13022 - **Fixed:** Empty string end_time values now treated as missing (was causing issues)
13023 - **Improved:** More robust checking for `end_time` field (checks both isset and not empty)
13042 : $this->addHoursToTime($startTime, 1);
13044 // Now empty string gets the default 1-hour duration
13048 Events like "6:00 PM Evening Service" with no end time should be treated as 6:00-7:00 PM (1 hour). …
13052 Super Bowl: 3:30 PM - 7:00 PM
13053 Evening Service: 6:00 PM - ??? (should be 7:00 PM)
13066 ## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS
13069 - **Added:** Hover over ⚠ badge to see which events are conflicting
13070 - **Added:** Tooltip shows conflicting event titles and times
13071 - **Added:** Works in both sidebar sections and clicked day events
13087 • Meeting (10:00 AM-11:00 AM)
13088 • Call (10:30 AM-11:30 PM)
13092 - ✅ Today section (sidebar)
13093 - ✅ Tomorrow section (sidebar)
13094 - ✅ Important Events section (sidebar)
13095 - ✅ Clicked day events (week grid)
13099 ### Note on Multi-Day Events
13102 ## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC
13105 - **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections
13106 - **Fixed:** Important Events now shows events even if they're today or tomorrow
13107 - **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (si…
13156 - Simplified to just ⚠ icon (no count)
13157 - Orange color (#ff9800)
13158 - 10px font size
13159 - Hover shows "Time conflict detected"
13161 ## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY
13164 - **Fixed:** Important Events section now displays all events correctly
13165 - **Fixed:** Single-event days now get conflict flag (was returning early without flag)
13166 - **Fixed:** Conflict detection no longer causes events to disappear from Important section
13171 - `detectTimeConflicts()` returned early if only 1 event on a day
13172 - Returned original array without adding 'conflict' field
13173 - This inconsistency caused issues in event categorization
13189 - All events now have 'conflict' field consistently
13190 - Single events: conflict = false
13191 - Multiple events: conflict = true/false based on overlap
13192 - Important Events section displays correctly
13194 ## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES
13197 - **Fixed:** Conflict badge (⚠) now displays in clicked day events
13198 - **Fixed:** Recurring events edit now updates time and end_time correctly
13199 - **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit
13202 - **Added:** Time conflict detection for overlapping events
13203 - **Added:** detectTimeConflicts() function checks all events on same day
13204 - **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions
13205 - **Added:** Events now have 'conflict' flag set automatically
13208 - **Changed:** Admin tab order: �� Manage Events (first), �� Update Plugin, ⚙️ Outlook Sync
13209 - **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin")
13210 - **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars)
13218 $eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
13222 - All-day events never conflict (no time set)
13223 - Timed events check for overlap with other timed events
13224 - Overlap = start1 < end2 AND start2 < end1
13225 - Default duration is 60 minutes if no end_time
13228 - Old: Updated `$event['start']` and `$event['end']` (wrong fields)
13229 - New: Updates `$event['time']` and `$event['end_time']` (correct fields)
13230 - Now edits actually save and update the events
13233 - Shows 4 colored bars instead of 3
13234 - "+1" becomes "+2" with 5 events, "+3" with 6 events, etc.
13236 ## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE ��
13238 **Major Release**: Complete Matrix-themed calendar plugin with advanced features!
13243 - **Week Grid**: Interactive 7-day calendar with click-to-view events
13244 - **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips
13245 - **Live Clock**: Updates every second with date display
13246 - **Real-time Weather**: Geolocation-based temperature with icon
13247 - **Event Sections**: Today (orange), Tomorrow (green), Important (purple)
13248 - **Add Event Button**: Dark green bar opens full event creation dialog
13249 - **Matrix Theme**: Green glow effects throughout
13252 - **Single Color Bars**: Clean 3px bars showing event's assigned color
13253 - **All-Day Events First**: Then sorted chronologically by time
13254 - **Conflict Detection**: Orange ⚠ badge on overlapping events
13255 - **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//)
13256 - **HTML Rendering**: Pre-rendered for JavaScript display
13257 - **Click-to-View**: Click week grid days to expand event details
13260 - **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button
13261 - **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings
13262 - **Manage Events Tab**: Browse, edit, delete, move events across namespaces
13265 - **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook
13266 - **Category Mapping**: Map colors to Outlook categories
13267 - **Conflict Resolution**: Time conflict detection
13268 - **Import/Export Config**: Encrypted configuration files
13271 - **Matrix Theme**: Authentic green glow aesthetic
13272 - **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections
13273 - **Color Scheme**:
13274 - Today: Orange #ff9800
13275 - Tomorrow: Green #4caf50
13276 - Important: Purple #9b59b6
13277 - Add Event: Dark green #006400
13278 - System bars: Green/Purple/Orange
13281 - **Zero-margin Design**: Perfect flush alignment throughout
13282 - **Flexbox Layout**: Modern, responsive structure
13283 - **AJAX Operations**: No page reloads needed
13284 - **Smart Sorting**: All-day events first, then chronological
13285 - **Tooltip System**: Detailed stats on hover (working correctly)
13286 - **Event Dialog**: Full form with drag support
13287 - **Cache Management**: One-click cache clearing
13290 - Removed dual color bars (now single event color bar only)
13291 - Add Event button moved to between header and week grid
13292 - All-day events now appear FIRST (not last)
13293 - Update Plugin tab is now the default admin tab
13296 - ✅ Fixed color bars not showing (align-self:stretch vs height:100%)
13297 - ✅ Fixed tooltip function naming (sanitized calId for JavaScript)
13298 - ✅ Fixed weather display (added updateWeather function)
13299 - ✅ Fixed HTML rendering in events (title_html/description_html fields)
13300 - ✅ Fixed Add Event dialog (null check for calendar element)
13301 - ✅ Fixed text positioning in Add Event button
13302 - ✅ Fixed spacing throughout sidebar widget
13305 - Full calendar view (month grid)
13306 - Sidebar widget (week view)
13307 - Event panel (standalone)
13308 - Event list (date ranges)
13309 - Namespace support
13310 - Color coding
13311 - Time conflict detection
13312 - DokuWiki syntax in events
13313 - Outlook synchronization
13314 - System monitoring
13315 - Weather display
13316 - Live clock
13317 - Admin interface
13318 - Cache management
13319 - Draggable dialogs
13320 - AJAX save/edit/delete
13321 - Import/export config
13344 {{eventlist daterange=2026-01-01:2026-01-31}}
13348 - **40+ versions** developed during v3.x iterations
13349 - **3.10.0 → 3.11.4**: Polish and refinement
13350 - **4.0.0**: Production-ready Matrix Edition
13353 …ession resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics …
13355 ---
13359 ## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING
13360 - **Changed:** Restored 2px bottom padding to header (was 0px, now 2px)
13361 - **Improved:** Small breathing room between system stats bars and Add Event button
13362 - **Visual:** Better spacing for cleaner appearance
13365 **eventlist-today-header**:
13366 - `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px`
13380 ## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION
13381 - **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset
13382 - **Fixed:** Add Event button no longer throws "Cannot read properties of null" error
13383 - **Changed:** Add Event text moved up 1px (position:relative; top:-1px)
13384 - **Changed:** Line-height reduced from 12px to 10px for better text centering
13385 - **Improved:** openAddEvent() works for both regular calendars and sidebar widgets
13388 **Problem**: Line 1084-1085 in calendar-main.js
13401 - Regular calendar has element with id=calId
13402 - Sidebar widget doesn't have this element (different structure)
13403 - Code tried to read .dataset on null, causing error
13407 - line-height: 12px
13408 - vertical-align: middle
13409 - Text slightly low
13412 - line-height: 10px
13413 - position: relative; top: -1px
13414 - Text perfectly centered
13420 ✅ Form pre-filled with today's date
13423 ## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR
13424 - **Added:** Event dialog to sidebar widget (same as regular calendar)
13425 - **Changed:** Add Event button now opens proper event form dialog
13426 - **Added:** renderEventDialog() called in renderSidebarWidget()
13427 - **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date
13428 - **Improved:** Can now add events directly from sidebar widget
13435 - Date field (defaults to today)
13436 - Title field (required)
13437 - Time field (optional)
13438 - End time field (optional)
13439 - Color picker
13440 - Category field
13441 - Description field
13442 - Save and Cancel buttons
13443 - Draggable dialog
13446 - Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget()
13447 - Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')`
13448 - Dialog uses same structure as regular calendar
13449 - Uses existing openAddEvent() and saveEventCompact() JavaScript functions
13453 2. Event dialog opens with today's date pre-filled
13460 ## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG
13461 - **Fixed:** Removed bottom padding from header (was 2px, now 0)
13462 - **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0)
13463 - **Fixed:** Add Event bar now flush against header with zero gap
13464 - **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin
13465 - **Improved:** Alert provides clear instructions on how to add events
13468 **eventlist-today-header**:
13469 - `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom)
13471 **eventlist-stats-container**:
13472 - `margin-top: 2px` → `margin: 0` (removed all margins)
13487 │ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats (no margin-bottom)
13495 ## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE
13496 - **Moved:** Add Event bar back to original position (between header and week grid)
13497 - **Changed:** Font size reduced from 9px to 8px (prevents text cutoff)
13498 - **Changed:** Letter spacing reduced from 0.5px to 0.4px
13499 - **Fixed:** Text now fully visible without being cut off
13500 - **Final:** Optimal position and size determined
13517 **v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off
13518 **v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible
13521 - Separates header from calendar
13522 - Natural action point after viewing stats
13523 - Users see stats → decide to add event → view calendar
13524 - Consistent with original design intent
13526 ## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID
13527 - **Moved:** Add Event bar repositioned from between header/grid to below week grid
13528 - **Improved:** Better visual flow - header → stats → grid → add button → events
13529 - **Changed:** Add Event bar now acts as separator between calendar and event sections
13561 - Natural reading flow: View calendar → Add event → See events
13562 - Add button positioned between calendar and event list
13563 - Acts as visual separator
13564 - More logical action placement
13566 ## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR
13567 - **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color
13568 - **Changed:** Events now display with single 3px color bar (event's assigned color only)
13569 - **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly
13570 - **Simplified:** Cleaner visual with one color bar instead of two
13571 - **Improved:** More space for event content without extra bar
13575 **Before (v3.10.7)** - Dual color bars:
13581 **After (v3.10.8)** - Single color bar:
13588 - Added `margin:0` to eliminate gaps
13589 - Now flush against header (no space above)
13590 - Now flush against week grid (no space below)
13591 - Perfect seamless connection
13595 - Removed section color bar (4px)
13596 - Kept only event color bar (3px)
13599 - Removed section color bar (4px blue)
13600 - Kept only event color bar (3px)
13603 - Added `margin:0` inline style
13604 - Removed all top/bottom margins
13606 ## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR
13607 - **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in click…
13608 - **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead o…
13609 - **Changed:** Add Event bar color from orange to dark green (#006400)
13610 - **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off)
13611 - **Changed:** Add Event bar text now bright green (#00ff00) with green glow
13612 - **Changed:** Add Event bar font size increased from 7px to 9px
13613 - **Changed:** Add Event bar letter spacing increased to 0.5px
13614 - **Improved:** Hover effect on Add Event bar now darker green (#004d00)
13619 - Changed parent div: `align-items:start` → `align-items:stretch`
13620 - Added `min-height:20px` to parent
13621 - Changed bars: `height:100%` → `align-self:stretch`
13622 - Bars now properly fill vertical space in ALL sections
13626 - Background: Orange (#ff9800)
13627 - Text: Black (#000)
13628 - Height: 6px (text cut off)
13629 - Font: 7px
13632 - Background: Dark green (#006400)
13633 - Text: Bright green (#00ff00) with green glow
13634 - Height: 12px (text fully visible)
13635 - Font: 9px
13636 - Hover: Darker green (#004d00)
13637 - Matrix-themed green aesthetic
13639 ## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE
13640 - **Fixed:** Event color bars now display correctly in clicked day events
13641 - **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events
13642 - **Added:** Conflict badge (⚠) appears on right side of conflicting events
13643 - **Updated:** Complete README.md rewrite with full Matrix theme documentation
13644 - **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering)
13645 - **Changed:** Parent div uses `align-items:stretch` and `min-height:20px`
13646 - **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning
13651 - Changed to `align-self:stretch` on bars
13652 - Parent uses `align-items:stretch`
13653 - Added `min-height:20px` to parent
13654 - Bars now properly fill vertical space
13657 **Before**: Timed events first → All-day events last
13658 **After**: All-day events FIRST → Timed events chronologically
13663 ├─ All Day - Project Deadline ← All-day first
13664 ├─ 8:00 AM - Morning Standup ← Earliest time
13665 ├─ 10:30 AM - Coffee with Bob
13666 └─ 2:00 PM - Team Meeting ← Latest time
13670 - Orange warning triangle (⚠) on right side
13671 - 10px font size
13672 - Only appears if `event.conflict` is true
13673 - Title attribute shows "Time conflict detected"
13674 - Small and unobtrusive
13677 - Complete rewrite with Matrix theme focus
13678 - Full usage instructions for all features
13679 - Admin interface documentation
13680 - Outlook sync setup guide
13681 - System monitoring details
13682 - Troubleshooting section
13683 - Color scheme reference
13684 - File structure documentation
13685 - Performance tips
13686 - Security notes
13687 - Quick start examples
13689 ## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR
13690 - **Added:** Events now sorted by time when clicking week grid days
13691 - **Changed:** Add Event bar now ultra-thin (6px height, down from 12px)
13692 - **Improved:** Events with times appear first, sorted chronologically
13693 - **Improved:** All-day events appear after timed events
13694 - **Changed:** Add Event bar font size reduced to 7px (from 10px)
13695 - **Changed:** Add Event bar now has 0 padding and fixed 6px height
13698 - Events with times sorted by time (earliest first)
13699 - All-day events (no time) appear at the end
13700 - Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare
13701 - Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event
13704 - **Height**: 6px (was ~12px with padding)
13705 - **Padding**: 0 (was 4px top/bottom)
13706 - **Font Size**: 7px (was 10px)
13707 - **Letter Spacing**: 0.3px (was 0.5px)
13708 - **Line Height**: 6px to match height
13709 - **Vertical Align**: Middle for text centering
13711 ## Version 3.10.4 (2026-02-06) - ADD EVENT BAR
13712 - **Added:** Thin orange "Add Event" bar between header and week grid
13713 - **Added:** Quick access to event creation from sidebar widget
13714 - **Styled:** Sleek design with hover effects and glow
13715 - **Interactive:** Clicks navigate to Manage Events tab in admin
13716 - **Improved:** User workflow for adding events from sidebar
13719 - Orange background (#ff9800) matching Today section color
13720 - 4px top/bottom padding for thin, sleek appearance
13721 - Black text with white text-shadow for visibility
13722 - Hover effect: Darkens to #ff7700 with enhanced glow
13723 - Orange glow effect (box-shadow) matching Matrix theme
13724 - Centered "+ ADD EVENT" text (10px, bold, letter-spacing)
13727 - Added between header close and renderWeekGrid() call
13728 - Inline onclick handler navigates to admin manage tab
13729 - Inline onmouseover/onmouseout for hover effects
13730 - Smooth 0.2s transition on all style changes
13732 ## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION
13733 - **Changed:** Update Plugin tab is now the default tab when opening admin
13734 - **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab
13735 - **Improved:** Clear Cache button now larger and more prominent with helpful description
13736 - **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events
13737 - **Removed:** Debug console.log statements from day event display
13738 - **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab
13741 - Update Plugin tab opens by default (was Config/Outlook Sync tab)
13742 - Clear Cache button prominently displayed at top of Update Plugin tab
13743 - Orange ��️ button (10px 20px padding) with confirmation dialog
13744 - Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin"
13745 - Success/error messages display on Update Plugin tab after cache clear
13746 - Tab navigation reordered to put Update first
13749 - Default tab changed from 'config' to 'update' in html() method
13750 - Tab navigation HTML reordered to show Update Plugin tab first
13751 - clearCache() method now redirects with 'update' tab parameter
13752 - Removed Clear Cache button from renderConfigTab()
13753 - Added Clear Cache button to renderUpdateTab() with message display
13755 ## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX
13756 - **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid …
13757 - **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML
13758 - **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields
13759 - **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicke…
13762 - Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render()
13763 - Events added to weekEvents now include pre-rendered HTML versions
13764 - title_html and description_html fields populated before json_encode()
13765 - JavaScript now receives properly formatted HTML content
13767 ## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON
13768 - **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead o…
13769 - **Fixed:** HTML event handlers now call correctly sanitized function names
13770 - **Fixed:** Weather temperature now updates correctly in sidebar widget
13771 - **Added:** Weather update function to sidebar widget JavaScript
13772 - **Added:** "Clear Cache" button in admin panel for easy cache refresh
13773 - **Added:** Default weather location set to Irvine, CA when geolocation unavailable
13774 - **Improved:** All tooltip functions now work correctly on system status bars
13777 - Changed tooltip function names to use $jsCalId instead of $calId
13778 - Changed HTML onmouseover/onmouseout to use $jsCalId
13779 - Added updateWeather() function to sidebar widget
13780 - Added getWeatherIcon() function to sidebar widget
13781 - Added clearCache() method in admin.php
13782 - Added recursiveDelete() helper method in admin.php
13783 - Admin UI now has ��️ Clear Cache button alongside Export/Import
13785 ## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES
13786 - **Fixed:** JavaScript syntax error "Missing initializer in const declaration"
13787 - **Fixed:** Event links and formatting not displaying in clicked day events
13788 - **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores
13789 - **Changed:** Event titles now use `title_html` field to preserve HTML formatting
13790 - **Changed:** Event descriptions now use `description_html` field to preserve links and formatting
13791 - **Improved:** All JavaScript variable names now use valid syntax
13792 - **Improved:** Links, bold, italic, and other HTML formatting preserved in events
13795 - Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);`
13796 - JavaScript variables now use underscores instead of dashes
13797 - Event HTML rendering preserves DokuWiki formatting
13798 - Fixed "showTooltip_sidebar is not defined" errors
13799 - Fixed "showDayEvents_cal is not defined" errors
13801 ## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX
13802 - **Fixed:** Critical JavaScript loading order issue causing ReferenceError
13803 - **Fixed:** Functions now defined BEFORE HTML that uses them
13804 - **Changed:** Consolidated all JavaScript into single comprehensive script block
13805 - **Removed:** ~290 lines of duplicate JavaScript code
13806 - **Added:** Shared state management with `sharedState_[calId]` object
13807 - **Improved:** System tooltip functions now work correctly
13808 - **Improved:** Week grid click events now work correctly
13811 - Moved all JavaScript to beginning of widget (before HTML)
13812 - Removed duplicate script blocks
13813 - Unified tooltip and stats functions
13814 - Shared latestStats and cpuHistory state
13815 - Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined"
13817 ## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS
13818 - **Added:** Dual color bars on events (section color + event color)
13819 - **Added:** Click week grid days to view events (replaced hover tooltips)
13820 - **Added:** Expandable section below week grid for selected day events
13821 - **Added:** Blue theme for selected day section
13822 - **Changed:** Week grid days now clickable instead of tooltips
13823 - **Changed:** Section bar: 4px wide (left)
13824 - **Changed:** Event bar: 3px wide (right)
13825 - **Increased:** Gap between color bars from 3px to 6px
13826 - **Improved:** Click is more reliable and mobile-friendly than hover tooltips
13829 - Each event shows TWO color bars side-by-side
13830 - Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue)
13831 - Right bar (3px): Individual event's assigned color
13832 - Click any day in week grid to expand event list
13833 - X button to close selected day events
13835 ## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY
13836 - **Increased:** Event color bar width from 2px to 3px
13837 - **Increased:** Gap between section and event bars from 3px to 6px
13838 - **Improved:** Event color bars now more visible alongside section bars
13839 - **Note:** Dual color bar system already in place from v3.9.6
13841 ## Version 3.9.6 (2026-02-05) - UI REFINEMENTS
13842 - **Changed:** Date in Important Events moved below event name (was above)
13843 - **Changed:** Section headers now 9px font size (was 10px)
13844 - **Changed:** Section headers now normal case (was ALL CAPS)
13845 - **Changed:** Letter spacing reduced from 0.8px to 0.3px
13846 - **Improved:** More natural reading flow with date below event name
13847 - **Improved:** Cleaner, more subtle section headers
13850 - "TODAY" → "Today"
13851 - "TOMORROW" → "Tomorrow"
13852 - "IMPORTANT EVENTS" → "Important Events"
13854 ## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN
13855 - **Redesigned:** Complete overhaul of `sidebar` parameter
13856 - **Added:** Compact week-at-a-glance itinerary view (200px wide)
13857 - **Added:** Live clock widget at top of sidebar
13858 - **Added:** 7-cell week grid showing event bars
13859 - **Added:** Today section with orange header and left border
13860 - **Added:** Tomorrow section with green header and left border
13861 - **Added:** Important Events section with purple header and left border
13862 - **Added:** Admin setting to configure important namespaces
13863 - **Added:** Time conflict badges in sidebar events
13864 - **Added:** Task checkboxes in sidebar events
13865 - **Changed:** Sidebar now optimized for narrow spaces (200px)
13866 - **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets
13869 - Clock updates every second showing current time
13870 - Week grid shows Mon-Sun with colored event bars
13871 - Today/Tomorrow sections show full event details
13872 - Important events highlighted in purple (configurable namespaces)
13873 - All badges (conflict, time, etc.) shown in compact format
13874 - Automatic time conflict detection
13876 ## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP
13877 - **Removed:** 16 unused/debug/backup files
13878 - **Removed:** 69 console.log() debug statements
13879 - **Removed:** 3 orphaned object literals from console.log removal
13880 - **Removed:** Temporary comments and markers
13881 - **Fixed:** JavaScript syntax errors from cleanup
13882 - **Improved:** Code quality and maintainability
13883 - **Improved:** Reduced plugin size by removing unnecessary files
13884 - **Status:** Production-ready, fully cleaned codebase
13887 - style.css.backup, script.js.backup
13888 - admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php
13889 - debug_events.php, debug_html.php, cleanup_events.php
13890 - fix_corrupted_json.php, fix_wildcard_namespaces.php
13891 - find_outlook_duplicates.php, update_namespace.php
13892 - validate_calendar_json.php, admin.js
13893 - test_date_field.html
13895 ## Version 3.7.5 (2026-02-05)
13896 - **Fixed:** PHP syntax error (duplicate foreach loop removed)
13897 - **Fixed:** Time variable handling in grace period logic
13899 ## Version 3.7.4 (2026-02-05)
13900 - **Added:** 15-minute grace period for timed events
13901 - **Changed:** Events with times now stay visible for 15 minutes after their start time
13902 - **Changed:** Prevents events from immediately disappearing when they start
13903 - **Improved:** Better user experience for ongoing events
13904 - **Fixed:** Events from earlier today now properly handled with grace period
13906 ## Version 3.7.3 (2026-02-05)
13907 - **Changed:** Complete redesign of cleanup section for compact, sleek layout
13908 - **Changed:** Radio buttons now in single row at top
13909 - **Changed:** All options visible with grayed-out inactive states (opacity 0.4)
13910 - **Changed:** Inline controls - no more grid layout or wrapper boxes
13911 - **Changed:** Namespace filter now compact single-line input
13912 - **Changed:** Smaller buttons and tighter spacing throughout
13913 - **Improved:** More professional, space-efficient design
13915 ## Version 3.7.2 (2026-02-04)
13916 - **Fixed:** Strange boxes under cleanup options - now properly hidden
13917 - **Changed:** Unified color scheme across all admin sections
13918 - **Changed:** Green (#00cc07) - Primary actions and main theme
13919 - **Changed:** Orange (#ff9800) - Warnings and cleanup features
13920 - **Changed:** Purple (#7b1fa2) - Secondary actions and accents
13921 - **Improved:** Consistent visual design throughout admin interface
13923 ## Version 3.7.1 (2026-02-04)
13924 - **Fixed:** Cleanup section background changed from orange to white
13925 - **Fixed:** Event cleanup now properly scans all calendar directories
13926 - **Added:** Debug info display when preview finds no events
13927 - **Improved:** Better directory scanning logic matching other features
13929 ## Version 3.7.0 (2026-02-04)
13930 - **Added:** Event cleanup feature in Events Manager
13931 - **Added:** Delete old events by age (months/years old)
13932 - **Added:** Delete events by status (completed tasks, past events)
13933 - **Added:** Delete events by date range
13934 - **Added:** Namespace filter for targeted cleanup
13935 - **Added:** Preview function to see what will be deleted
13936 - **Added:** Automatic backup creation before cleanup
13937 - **Changed:** Reduced changelog viewer height to 100px (was 400px)
13939 ## Version 3.6.3 (2026-02-04)
13940 - **Fixed:** Conflict tooltips now work properly after navigating between months
13941 - **Added:** Changelog display in Update Plugin tab
13942 - **Added:** CHANGELOG.md file with version history
13943 - **Improved:** Changelog shows last 10 versions with color-coded change types
13944 - **Fixed:** Removed debug console.log statements
13946 ## Version 3.6.2 (2026-02-04)
13947 - **Fixed:** Month title now updates correctly when navigating between months
13948 - **Changed:** All eventpanel header elements reduced by 10% for more compact design
13949 - **Changed:** Reduced header height from 78px to 70px
13951 ## Version 3.6.1 (2026-02-04)
13952 - **Changed:** Complete redesign of eventpanel header with practical two-row layout
13953 - **Fixed:** Improved layout for narrow widths (~500px)
13954 - **Changed:** Simplified color scheme (removed purple gradient)
13956 ## Version 3.6.0 (2026-02-04)
13957 - **Changed:** Redesigned eventpanel header with gradient background
13958 - **Changed:** Consolidated multiple header rows into compact single-row design
13960 ## Version 3.5.1 (2026-02-04)
13961 - **Changed:** Moved event search bar into header row next to + Add button
13962 - **Improved:** More compact UI with search integrated into header
13964 ## Version 3.5.0 (2026-02-04)
13965 - **Added:** Event search functionality in sidebar and eventpanel
13966 - **Added:** Real-time filtering as you type
13967 - **Added:** Clear button (✕) appears when searching
13968 - **Added:** "No results" message when search returns nothing
13970 ## Version 3.4.7 (2026-02-04)
13971 - **Changed:** Made conflict badges smaller and more subtle (9px font, less padding)
13972 - **Fixed:** Removed debug logging from console
13973 - **Changed:** Updated export version number to match plugin version
13975 ## Version 3.4.6 (2026-02-04)
13976 - **Added:** Debug logging to diagnose conflict detection issues
13977 - **Development:** Extensive console logging for troubleshooting
13979 ## Version 3.4.5 (2026-02-04)
13980 - **Added:** Debug logging to showDayPopup and conflict detection
13981 - **Development:** Added logging to trace conflict detection flow
13983 ## Version 3.4.4 (2026-02-04)
13984 - **Fixed:** Conflict detection now persists across page refreshes (PHP-based)
13985 - **Fixed:** Conflict tooltips now appear on hover
13986 - **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation)
13987 - **Added:** Conflict badges in both future and past events sections
13989 ## Version 3.4.3 (2026-02-04)
13990 - **Added:** Custom styled conflict tooltips with hover functionality
13991 - **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2)
13992 - **Improved:** Beautiful tooltip design with orange header and clean formatting
13994 ## Version 3.4.2 (2026-02-04)
13995 - **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3)
13997 ## Version 3.4.1 (2026-02-04)
13998 - **Fixed:** End time field now properly saves to database
13999 - **Fixed:** End time dropdown now filters to show only valid times after start time
14000 - **Added:** Smart dropdown behavior - expands on focus, filters invalid options
14001 - **Improved:** End time auto-suggests +1 hour when start time selected
14003 ## Version 3.4.0 (2026-02-04)
14004 - **Added:** End time support for events (start and end times)
14005 - **Added:** Automatic time conflict detection
14006 - **Added:** Conflict warning badges (⚠️) on events with overlapping times
14007 - **Added:** Conflict tooltips showing which events conflict
14008 - **Added:** Visual conflict indicators with pulse animation
14009 - **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM")
14011 ## Version 3.3.77 (2026-02-04)
14012 - **Fixed:** Namespace badge onclick handlers restored after clearing filter
14013 - **Fixed:** Namespace filtering works infinitely (filter → clear → filter)
14015 ## Version 3.3.76 (2026-02-04)
14016 - **Fixed:** Namespace badges now clickable after clearing namespace filter
14018 ## Version 3.3.75 (2026-02-04)
14019 - **Fixed:** Form resubmission warnings eliminated
14020 - **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303
14021 - **Changed:** All admin redirects now use absolute URLs
14023 ## Version 3.3.74 (2026-02-04)
14024 - **Fixed:** Clearing namespace filter now restores original namespace instead of default
14025 - **Added:** data-original-namespace attribute to preserve initial namespace setting
14026 - **Improved:** Console logging for namespace filter debugging
14028 ## Version 3.3.73 (2026-02-03)
14029 - **Added:** Dynamic namespace filtering banner with clear button
14030 - **Fixed:** JavaScript function accessibility issues
14031 - **Fixed:** Namespace badge click handlers in event lists
14032 - **Improved:** Persistent namespace filtering across views
14036 - Recurring events with Outlook sync
14037 - Multi-namespace support
14038 - Event categories and mapping
14039 - Backup/restore functionality
14040 - System statistics bar
14041 - Namespace selector with fuzzy search
14042 - Events Manager with import/export
14043 - And much more...