1# Calendar Plugin Changelog 2 3## Version 6.14.1 (2026-02-14) - SECURITY FIX 4 5### Security Improvements 6- **Authentication required** - Write actions (save, delete, toggle) now require user to be logged in 7- **Improved CSRF token handling** - New `getSecurityToken()` helper function checks multiple sources: 8 - `JSINFO.sectok` (standard) 9 - `window.JSINFO.sectok` 10 - Hidden form field `input[name="sectok"]` 11 - Meta tag `meta[name="sectok"]` 12- Anonymous users can no longer add/edit/delete events 13- Better error messages for authentication and token failures 14 15### Bug Fixes 16- Fixed "Invalid security token" error on clean DokuWiki installations 17- Added debug logging for security token failures 18 19## Version 6.14.0 (2026-02-14) - STABLE RELEASE 20 21### Code Cleanup & Localization 22- Added localization for all static calendar strings (EN/DE) 23- New lang keys: `previous_month`, `next_month`, `print_calendar`, `no_events_scheduled`, `calendar_label`, `details` 24- Code review and cleanup completed 25- Updated README.md and plugin documentation 26 27### Static Calendar Features (v6.13.x consolidated) 28- Read-only presentation mode: `{{calendar static}}` 29- Custom titles: `title="My Events"` 30- Month locking: `month=2` disables navigation 31- Print button with clean itinerary output 32- All themes supported: matrix, pink, purple, professional, wiki, dark, light 33- `noprint` option to hide print functionality 34- Formatted descriptions in tooltips and itinerary 35 36### Other Improvements in 6.13.x 37- Admin menu icon (SVG) 38- Config import fix for `return array()` syntax 39- Mobile touch button fixes 40- Important events in day popup with star icons 41- Time picker grouped by period 42- Multi-day event time validation 43 44## Version 6.13.13 (2026-02-14) - PRINT BUTTON CENTERING 45 46### Fixed Print Button Icon Alignment 47- Added `display: flex`, `align-items: center`, `justify-content: center` 48- Added `padding: 0` and `line-height: 1` 49- Icon now properly centered in circle 50 51## Version 6.13.12 (2026-02-14) - SIMPLE TOOLTIP 52 53### Simplified Hover Tooltip 54- Removed custom JS tooltip (was causing triple popups) 55- Uses native browser `title` attribute only 56- Plain text with formatting converted: `**bold**` → `*bold*`, `//italic//` → `_italic_` 57- Links shown as: `text (url)` 58- Added emoji before time for visual clarity 59- Itinerary still shows full HTML formatting 60 61## Version 6.13.11 (2026-02-14) - FORMATTED DESCRIPTIONS 62 63### Rich Text Formatting in Static Calendar 64- **Hover tooltips** now show formatted text (bold, italic, links, line breaks) 65- **Itinerary descriptions** display with full formatting 66- Uses existing `renderDescription()` function for consistency 67- Supports: `**bold**`, `//italic//`, `[[links]]`, `[markdown](links)`, line breaks 68 69### Technical Details 70- Added `data-tooltip` attribute with rich HTML content 71- New JavaScript tooltip handler with smart positioning 72- CSS styles for `.static-tooltip` and itinerary formatting 73- Tooltips stay within viewport bounds 74 75## Version 6.13.10 (2026-02-14) - PRINT MARGINS FIX v3 76 77### Fixed Print Margins - Inline Styles Approach 78- Removed reliance on `@page` CSS (browser support inconsistent) 79- Uses inline style `padding: 50px 60px` directly on wrapper div 80- Simplified CSS for better browser compatibility 81- Smaller table font (12px) for better fit 82- Set `max-width: 800px` on content wrapper 83 84## Version 6.13.9 (2026-02-14) - PRINT MARGINS FIX v2 85 86### Fixed Print Margins 87- Added `.print-wrapper` div with 0.5in padding/margin 88- Uses both `@page` margin AND wrapper margins for compatibility 89- Set `@page { margin: 1in 0.75in }` (top/bottom 1in, sides 0.75in) 90- Wrapper has `max-width: 7.5in` to fit standard letter size 91- Smaller fonts (0.85em) to fit more content 92- Added 250ms delay before print to ensure styles load 93 94## Version 6.13.8 (2026-02-14) - PRINT MARGINS FIX 95 96### Improved Print Layout 97- Added `@page { margin: 0.75in }` for proper print margins 98- Increased body padding to 40px for screen preview 99- Smaller font sizes to fit better on page 100- Description column limited width with word-wrap 101- Table header repeats on each page (`display: table-header-group`) 102- Rows avoid page breaks in middle (`page-break-inside: avoid`) 103- Print color adjust enabled for backgrounds 104 105## Version 6.13.7 (2026-02-14) - ALL THEMES FOR STATIC CALENDAR 106 107### Added All Theme Options 108Now all themes work with static calendar: 109 110| Theme | Description | 111|-------|-------------| 112| `matrix` | Green on dark (default Matrix style) | 113| `pink` | Pink/magenta on dark | 114| `purple` | Purple/violet on dark | 115| `professional` | Blue on white (business style) | 116| `wiki` | Neutral gray (matches DokuWiki) | 117| `dark` | Blue on dark gray | 118| `light` | Clean white/gray | 119 120### Examples 121``` 122{{calendar theme=matrix static}} 123{{calendar theme=purple static}} 124{{calendar theme=professional static}} 125{{calendar theme=wiki static}} 126``` 127 128## Version 6.13.6 (2026-02-14) - QUOTED PARAMETER FIX 129 130### Fixed Quoted Parameter Parsing 131- Titles with spaces now work: `title="Feb 26 Expense Log"` 132- Uses regex to properly parse: `key="value with spaces"` 133- Supports both double and single quotes 134- Example: `{{calendar title="My Custom Title" static}}` 135 136## Version 6.13.5 (2026-02-14) - STATIC CALENDAR OPTIONS 137 138### New Static Calendar Options 139 140| Option | Description | Example | 141|--------|-------------|---------| 142| `title=X` | Custom title instead of month name | `title="Club Meetings"` | 143| `noprint` | Hide print button and print view | `{{calendar static noprint}}` | 144| `theme=X` | Apply specific theme (matrix, pink, dark, light) | `theme=matrix` | 145 146### Fixed Month/Year Lock 147- When you specify `month=X` or `year=X`, navigation is now disabled 148- `{{calendar month=2 static}}` shows only February with no nav arrows 149- `{{calendar year=2025 month=12 static}}` locks to December 2025 150 151### Examples 152``` 153{{calendar static}} // Navigable, current month 154{{calendar month=2 static}} // Locked to February 155{{calendar title="Team Events" static}} // Custom title 156{{calendar theme=matrix static}} // Matrix theme 157{{calendar namespace=club static noprint}} // No print button 158{{calendar month=3 title="March Meetings" theme=pink static}} 159``` 160 161## Version 6.13.4 (2026-02-14) - DEDICATED PRINT BUTTON 162 163### Added Print Button to Static Calendar 164- New ️ print button in the calendar header 165- Opens a clean popup window with ONLY the itinerary content 166- Automatically triggers print dialog 167- Window closes after printing 168- No DokuWiki headers/footers/sidebars - just the calendar 169 170### How It Works 171- Extracts the print view HTML 172- Creates a new window with minimal styling 173- Calls `window.print()` automatically 174- Clean single-page output 175 176## Version 6.13.3 (2026-02-14) - PRINT BLANK PAGES FIX 177 178### Fixed Blank Pages When Printing 179- Aggressively hide ALL screen view elements and children in print 180- Reset height/width to 0 with !important on grid, cells, events 181- Ensure print view elements have proper display table properties 182- Force all hidden elements to position:absolute off-screen 183 184## Version 6.13.2 (2026-02-14) - STATIC CALENDAR RESPONSIVE FIX 185 186### Improved Static Calendar Layout 187- Changed from `max-width: 900px` to `width: 100%` for full container fit 188- Added `table-layout: fixed` for consistent column widths 189- Added `overflow-x: auto` for horizontal scroll on very small screens 190- Reduced header padding and font sizes for better fit 191- Improved responsive breakpoints for mobile (768px and 480px) 192- Hide time on very small screens to save space 193- Better touch targets for navigation buttons 194 195## Version 6.13.1 (2026-02-14) - STATIC CALENDAR FIX 196 197### Bug Fix 198- Added missing `getImportantNamespaces()` helper method 199- Fixed `loadEventsForMonth` → use existing `loadEvents` method 200- Added multi-namespace/wildcard support to static calendar 201 202## Version 6.13.0 (2026-02-14) - STATIC CALENDAR MODE 203 204### New Static/Presentation Mode 205Read-only calendar view for public display and printing. 206 207**Usage:** 208``` 209{{calendar static}} 210{{calendar namespace=meetings static}} 211``` 212 213**Screen View Features:** 214- Clean calendar grid without edit/delete buttons 215- Month navigation (prev/next arrows) 216- Hover tooltips showing full event details (title, time, description) 217- Important events highlighted with ⭐ and golden background 218- Today's date highlighted 219- Responsive design for mobile 220 221**Print View Features:** 222- Automatically switches to itinerary format when printing 223- Table layout: Date | Time | Event | Details 224- Important events marked with ⭐ 225- Dates grouped (date only shown once per day) 226- Page break handling for long lists 227- Clean black & white friendly output 228 229**Files Changed:** 230- `syntax.php`: Added `renderStaticCalendar()` method 231- `action.php`: Added `getStaticCalendar()` AJAX handler 232- `calendar-main.js`: Added `navStaticCalendar()` function 233- `style.css`: Added static calendar styles + print media queries 234 235## Version 6.12.7 (2026-02-14) - ADMIN MENU ICON 236 237### Added Admin Menu Icon 238- New monochrome SVG calendar icon for DokuWiki admin menu 239- Icon shows calendar with binding rings, header, and date dots 240- Matches DokuWiki's admin interface style 241- Added `getMenuIcon()` method to admin.php 242- Icon file: `images/icon.svg` 243 244## Version 6.12.6 (2026-02-14) - CONFIG IMPORT FIX 245 246### Fixed Config Import Validation 247- Now accepts both `return [` and `return array(` syntax 248- Regex updated from `/return\s*\[/` to `/return\s*(\[|array\s*\()/` 249- Older PHP config files using `return array(...)` now import correctly 250 251## Version 6.12.5 (2026-02-14) - MOBILE BUTTON FIX 252 253### Fixed Delete/Edit Buttons on Mobile 254- Added `type="button"` attribute to prevent form submission issues 255- Added `touchend` event delegation for reliable mobile touch handling 256- Increased button touch targets (32px default, 40px on mobile) 257- Added `touch-action: manipulation` to prevent touch delays 258- Added `-webkit-tap-highlight-color` for visual feedback 259 260### Technical Details 261- Mobile browsers sometimes don't fire `onclick` reliably 262- New `touchend` handler calls `btn.click()` explicitly 263- Larger touch targets meet accessibility guidelines (44px recommended) 264 265## Version 6.12.4 (2026-02-14) - STAR INLINE FIX 266 267### Fixed Star Position in Day Popup 268- Star icon now displays inline with event title (left side) 269- Changed `.popup-event-title` from `flex: 1 1 100%` to `flex: 1 1 auto` 270- Star and title stay on same line instead of star being above 271 272## Version 6.12.3 (2026-02-14) - DAY POPUP IMPORTANT EVENTS 273 274### Important Event Highlighting in Day Popup 275- Events from important namespaces now show ⭐ star icon 276- Golden gradient background highlight for important events 277- Golden border glow effect matching other views 278- Consistent styling across calendar grid, sidebar, and day popup 279 280### Technical Details 281- Added `importantNamespaces` check to `showDayPopup()` function 282- Added `.popup-event-important` and `.popup-event-star` CSS classes 283- Reads important namespaces from `container.dataset.importantNamespaces` 284 285## Version 6.12.2 (2026-02-14) - MULTI-DAY EVENT TIME FIX 286 287### Multi-Day Event End Time 288- End time now allows all times when end date differs from start date 289- Example: Event from 9:00 PM on Feb 28 to 5:00 AM on Feb 29 now works correctly 290- Same-day events still enforce end time > start time 291- Changing end date now triggers time validation update 292 293### Technical Details 294- `updateEndTimeOptions()` checks if `endDate !== startDate` 295- If multi-day, all time options are enabled 296- Added `onchange` handler to both start date and end date fields 297 298## Version 6.12.1 (2026-02-14) - TIME PICKER & EDIT DIALOG FIX 299 300### Improved Time Picker 301- Grouped time options by period (Morning, Afternoon, Evening, Night) 302- Much easier to navigate - no more scrolling through 96 options 303- End time options before start time are now hidden/disabled 304- Invalid end times automatically corrected when start time changes 305 306### Fixed Edit Event Dialog Draggability 307- Edit dialog is now properly draggable (was broken due to async AJAX) 308- Moved `makeDialogDraggable()` call inside the AJAX success callback 309- Removed redundant wrapper patch that didn't work with async code 310 311### Technical Details 312- Time picker uses `<optgroup>` for visual grouping 313- End time validation hides invalid options (not just disables) 314- Both Add and Edit dialogs now call `makeDialogDraggable()` directly 315 316## Version 6.12.0 (2026-02-14) - EVENT EDITOR DIALOG IMPROVEMENTS 317 318### Fixed Event Editor Dialog Draggability 319- Fixed duplicate event listener accumulation that caused performance degradation 320- Each time dialog opened, new drag listeners were added without removing old ones 321- Now properly cleans up old listeners before adding new ones 322- Added `cursor: grabbing` feedback while dragging 323- Dialog position resets when reopened (no more stuck positions) 324- Excluded close button from triggering drag 325 326### Optimized Time Selection Performance 327- Simplified `updateEndTimeOptions()` to be much faster 328- Removed expensive loop through 96 options checking style.display 329- Now just validates current selection and sets new value if invalid 330- Should eliminate freezing/lag when selecting start time 331 332### Technical Details 333- Added `_dragCleanup` function stored on handle element 334- Cleanup called before re-initialization 335- Removed unnecessary `setTranslate` helper function 336 337## Version 6.11.4 (2026-02-13) - JAVASCRIPT LOCALIZATION 338 339### JavaScript Frontend Localization 340- Added `getCalendarLang()` helper function 341- Added `getJsLangStrings()` PHP method 342- Embedded JSON language data in all render functions 343- Localized month names (full + short) 344- Localized dialog titles, confirmations, badges, empty states 345 346## Version 6.11.3 (2026-02-13) - SIDEBAR WIDGET LOCALIZATION 347 348### Sidebar Widget 349- Fixed `\n` in single-quoted strings → double-quoted for proper newlines 350- Localized "Runs every X minutes" cron descriptions 351- Event dialog labels, placeholders, options 352- Day names, ordinal positions, color names 353- Today/Tomorrow/Important section headers 354 355## Version 6.11.2 (2026-02-13) - ADMIN BACKEND LOCALIZATION 356 357### Admin Backend 358- Localized ~220 hardcoded strings in admin.php 359- AJAX JSON responses, redirect messages, error messages 360- Pattern names (Daily, Weekly, Monthly, etc.) 361 362## Version 6.11.1 (2026-02-13) - CONFIG IMPORT BUG FIX 363 364### Bug Fix 365- Fixed regex to accept both `return [` and `return array(` syntax 366- File: `admin.php` lines 5947, 6001 367 368## Version 6.10.6 (2026-02-13) - MANAGE RECURRING DIALOG LOCALIZATION 369 370### Localized Manage Recurring Series Dialog 371Complete translation of the "Manage" button dialog for recurring events: 372 373**Section Headers:** 374- "Manage Recurring Series" → "Wiederkehrende Serie verwalten" 375- "Extend Series" → "Serie erweitern" 376- "Trim Past Events" → "Vergangene Termine kürzen" 377- "Change Pattern" → "Muster ändern" 378- "Change Start Date" → "Startdatum ändern" 379- "Pause Series" / "Resume Series" → "Serie pausieren" / "Serie fortsetzen" 380 381**Labels & Buttons:** 382- All field labels (Add occurrences, Days apart, Remove before, New interval, etc.) 383- Action buttons (Extend, Trim, Change, Shift, Pause, Resume, Close) 384- Interval dropdown options (Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly) 385- Help text and notes 386 387**Confirmation Dialogs:** 388- Trim confirmation with date 389- Respace confirmation 390- Shift confirmation 391 392### Added 60+ Language Strings for Dialogs 393Complete vocabulary for recurring event management in both English and German. 394 395### Note on Browser Validation Messages 396"Please fill out this field" is a browser-native message controlled by the browser's language setting, not our plugin. 397 398## Version 6.10.5 (2026-02-13) - DIALOG LOCALIZATION 399 400### Localized All JavaScript Dialogs 401 402**New Namespace Dialog:** 403- Prompt text with examples now in German 404- Invalid namespace error message 405 406**Rename Namespace Dialog:** 407- Prompt text with current name 408 409**Delete Confirmations:** 410- Delete selected events confirmation 411- Delete namespace confirmation 412- Delete recurring series confirmation 413 414**Trim Recurring Events:** 415- "Counting..." / "Zähle..." 416- "Trimming..." / "Kürze..." 417- "No past recurring events found" message 418- "Found X past recurring events" confirmation 419- Button text resets 420 421### Added 15+ New Dialog Strings 422Both English and German translations for all interactive prompts and confirmations. 423 424## Version 6.10.4 (2026-02-13) - COMPLETE MANAGE TAB LOCALIZATION 425 426### Fixed Remaining English Strings 427 428**Namespace Explorer Control Bar:** 429- "➡️ Move" → "➡️ Verschieben" 430- "➕ New Namespace" → "➕ Neuer Namensraum" 431- " Cleanup" → " Bereinigen" 432- "0 selected" → "0 ausgewählt" 433- "%d selected" → "%d ausgewählt" 434 435**Recurring Events Button Tooltips:** 436- "Edit title, time, namespace, pattern" → "Titel, Zeit, Namensraum, Muster bearbeiten" 437- "Extend, trim, pause, change dates" → "Erweitern, kürzen, pausieren, Daten ändern" 438- "Delete all occurrences" → "Alle Vorkommen löschen" 439 440**JavaScript Confirmation Messages:** 441- "No events selected" → "Keine Termine ausgewählt" 442- Delete confirmation with count 443- Delete namespace confirmation 444- "Scanning..." → "Scanne..." 445- "Cleaning..." → "Bereinige..." 446- "No empty namespaces found" message 447- "Found X item(s) to clean up" → "X Element(e) zum Bereinigen gefunden" 448- "Proceed with cleanup?" → "Mit Bereinigung fortfahren?" 449 450### Technical 451- Added adminLang JavaScript object with all translatable strings 452- All dynamic JavaScript messages now use language system 453 454## Version 6.10.3 (2026-02-13) - RECURRING EVENTS & DROP TARGET LOCALIZATION 455 456### Additional Localization for Manage Events Tab 457 458**Recurring Events Table:** 459- Search placeholder: "Wiederkehrende Termine suchen..." 460- Table headers: Titel, Namensraum, Muster, Zeitraum, Anzahl, Quelle, Aktionen 461- Source labels: Markiert / Erkannt (was Flagged / Detected) 462- Action buttons: Bearb. / Verwalten / Lö. (was Edit / Manage / Del) 463- Pattern badges: Täglich, Wöchentlich, Monatlich, Jährlich, Benutzerdefiniert 464- Footer: "Gesamt: X Serien" (was "Total: X series") 465- No results message 466 467**Namespace Explorer Drop Zones:** 468- Header: " Zielbereich" (was "Drop Target") 469- Drop hint: "Hier ablegen" (was "Drop here") 470- Default namespace label consistent 471 472### Added 25+ New Language Strings 473- Recurring table columns and labels 474- Pattern translations 475- Action button labels 476- Drop zone labels 477 478## Version 6.10.2 (2026-02-13) - MANAGE EVENTS TAB LOCALIZATION 479 480### Localized: Manage Events Tab (Complete) 481All text in the Manage Events admin tab now uses the language system: 482 483**Events Manager Section:** 484- Page title, section header, description 485- Statistics labels (Total Events, Namespaces, JSON Files, Recurring) 486- "Last scanned" timestamp label 487- Button labels (Re-scan Events, Export All Events, Import Events) 488- "View Breakdown by Namespace" expandable section 489- Table headers (Namespace, Events, Files) 490 491**Important Namespaces Section:** 492- Section header and description 493- Visual Effects descriptions (Calendar Grid, Event Sidebar, Sidebar Widget, Day Popup) 494- Save button and hint text 495 496**Cleanup Old Events Section:** 497- Section header and description 498- Radio button labels (By Age, By Status, By Date Range) 499- Age options (Delete events older than, months, years) 500- Status options (Completed tasks, Past events) 501- Date range labels (From, To) 502- Namespace filter label and placeholder 503- Preview and Delete button labels 504- JavaScript confirmation messages 505- Loading/error states 506 507**Recurring Events Section:** 508- Section header 509- Button labels (Trim All Past, Rescan) 510 511**Namespace Explorer Section:** 512- Section header and description 513- Search placeholder 514- Control bar buttons (All, None, Delete, Move to) 515- Datalist placeholder 516 517### Added 60+ New Language Strings 518Both English and German language files expanded with comprehensive admin terminology. 519 520## Version 6.10.1 (2026-02-13) - LANGUAGE SYSTEM FIX 521 522### Bug Fix: Language Files Not Working 523- Fixed `getMenuText()` to use `$this->getLang('menu')` instead of hardcoded string 524- Admin menu now correctly shows "Kalenderverwaltung" in German 525- Admin tabs now use language system: 526 - "Manage Events" → "Termine verwalten" 527 - "Update Plugin" → "Plugin aktualisieren" 528 - "Outlook Sync" → "Outlook-Sync" 529 - "Themes" → "Designs" 530 531### Added More Language Strings 532- Admin tab labels 533- Admin section headers (Event Browser, Important Namespaces, etc.) 534- Sync settings labels 535- Common button labels (Run Now, Download, Upload, Delete, etc.) 536 537## Version 6.10.0 (2026-02-13) - GERMAN LANGUAGE SUPPORT 538 539### New Feature: German Language Translation 540- Added complete German (de) language file 541- Expanded English language file with comprehensive translatable strings 542- Both files include 100+ translation strings covering: 543 - General terms (calendar, events, dates) 544 - Event fields (title, description, time, etc.) 545 - Actions (add, edit, delete, save, cancel) 546 - Task-related terms 547 - Recurring event options 548 - Days of week and months 549 - User messages and confirmations 550 - Search functionality 551 - Sync status messages 552 - Admin section labels 553 - Sidebar widget labels 554 - Time conflict warnings 555 556### Note 557The language strings are now available for future implementation throughout the plugin UI. Currently the admin menu uses the language system; other strings can be integrated as needed. 558 559## Version 6.9.9 (2026-02-13) - CRITICAL SEARCH FIX 560 561### Bug Fix: Month Search Not Working 562- **Root cause:** Function name collision - there were two `fuzzyMatch` functions 563 - `window.fuzzyMatch` (for namespace search autocomplete) returns a score number or `null` 564 - Local `fuzzyMatch` (for event search) returns `true`/`false` 565- When filtering events, the wrong function was being called, returning `null` for all events 566- **Fix:** Renamed event search functions to `eventSearchNormalize` and `eventSearchMatch` 567- Month search now works correctly on first load and after navigation 568 569### Also in this version 570- Fixed jumpToDate to properly hide search clear button after navigation 571- Removed debug logging from production code 572 573## Version 6.9.8 (2026-02-12) - SEARCH & UI FIXES 574 575### Bug Fixes 576 577**All-Dates Search Navigation Fixed** 578- Clicking a search result now properly navigates to that event's month 579- Opens the day popup showing the event details 580- Was calling non-existent `loadMonth()` - now uses correct `navCalendar()` 581- Clears search results and restores normal event list view 582 583**"No Events" Message Fixed** 584- No longer shows "No events match your search" when in all-dates mode 585- All-dates mode has its own results display; the month-mode message was incorrectly appearing 586 587**Add Button Layout Fixed** 588- Search bar no longer pushes the "+ Add" button off the right edge 589- Search container has constrained max-width (160px) and proper flex settings 590- Header has overflow:hidden to prevent layout issues 591 592**Important Event Stars Fixed** 593- Stars now appear on initial page load (PHP rendering added) 594- Stars positioned outside the bar using CSS ::before pseudo-element 595- Added overflow:visible to event-indicators and event-bar containers 596- Bar remains full width; star sits in the left margin area 597 598### Technical 599- Star uses `event-bar-has-star` class for first-day-only display 600- jumpToDate() properly cleans up search state before navigation 601 602## Version 6.9.7 (2026-02-12) - IMPORTANT NAMESPACE IMPROVEMENTS 603 604### Bug Fix 605- **AJAX refresh now preserves important namespace highlighting** 606 - Important namespaces list now passed to JavaScript via data attribute 607 - Highlighting persists when navigating between months 608 - Works in both main calendar sidebar and standalone event panels 609 610### New Feature: Calendar Grid Star Icons 611- **Important events now show ⭐ on their color bars** in the calendar grid 612 - Small star appears on the first day of important events 613 - Tooltip prefixed with ⭐ for important events 614 - Visual distinction without cluttering the compact grid view 615 616### Admin Section Update 617- **Improved Important Namespaces description** in Admin → Calendar → Manage Events 618 - Now explains all visual effects: 619 - Calendar Grid: ⭐ star on event bars 620 - Event Sidebar: ⭐ star + highlighted background + accent border 621 - Sidebar Widget: Dedicated "Important Events" section 622 - Day Popup: Events shown with full details 623 - Better example placeholder text 624 625### Technical 626- Fixed PHP syntax error in fuzzy search (curly quotes replaced with escape sequences) 627- Important namespaces loaded once and stored in container dataset for JavaScript access 628 629## Version 6.9.6 (2026-02-12) - FUZZY SEARCH & SIDEBAR HIGHLIGHTING 630 631### Fuzzy Search 632- **Improved search matching:** Search is now more forgiving of punctuation differences 633 - "fathers day" matches "Father's Day" 634 - "new years" matches "New Year's Eve" 635 - Smart quotes, apostrophes, dashes, and common punctuation are ignored 636- **Multi-word search:** All words must be present but in any order 637 - "birthday john" matches "John's Birthday Party" 638- Works in both "this month" and "all dates" search modes 639 640### Important Namespace Highlighting (Calendar Sidebar) 641- Events from important namespaces now highlighted in the main calendar's event list sidebar 642- Same visual treatment as the itinerary sidebar widget: 643 - Subtle theme-colored background tint 644 - Right border accent bar 645 - ⭐ star icon before event title 646- Theme-specific colors: 647 - Matrix: green tint 648 - Purple: purple tint 649 - Pink: pink tint 650 - Professional: blue tint 651 - Wiki: light blue tint 652- Configure important namespaces in Admin → Calendar → Sync Settings 653 654## Version 6.9.5 (2026-02-12) - SEARCH MODE TOGGLE 655 656### New Feature: Search Scope Toggle 657- **Search mode button** (/) added next to search input in both calendar views 658- **Default mode** (): Search only the current month's events (fast, local filtering) 659- **All dates mode** (): Search across ALL calendar data via AJAX 660 - Click the button to toggle to (green highlight when active) 661 - Requires at least 2 characters to search 662 - Shows results with date, time, and namespace 663 - Click any result to jump to that date and open the day popup 664 - Limited to 50 results for performance 665- Search placeholder text updates to indicate current mode 666- Compact button design takes minimal space 667 668### UI Details 669- Button sits flush with search input (no gap) 670- Green highlight when "all dates" mode is active 671- Results show full date (e.g., "Mon, Feb 12, 2026") 672- Namespace badge shown for multi-namespace setups 673 674## Version 6.9.4 (2026-02-12) - POPUP IMPROVEMENTS & IMPORTANT HIGHLIGHTING 675 676### Features 677- **Draggable Day Popup:** Calendar day popup window is now draggable by its header 678 - Click and drag the header to move the popup 679 - Header shows move cursor on hover 680 - Clicking the close button (×) still closes normally 681 682- **Important Namespace Highlighting in Sidebar:** 683 - Events from "important" namespaces (defined in Admin → Sync Settings) now have subtle highlighting 684 - Theme-aware background tint (green for Matrix, purple for Purple, pink for Pink, blue for Professional/Wiki) 685 - Right border accent bar for visual distinction 686 - ⭐ star icon appears before event title 687 - Works in Today, Tomorrow, and Important Events sections 688 689### Bug Fix 690- **Fixed event display in day popup:** Long titles no longer cut off the edit/delete buttons 691 - Event title now wraps to multiple lines instead of truncating 692 - Actions buttons always visible 693 - Time, date range, and namespace badges wrap properly 694 - Improved flex layout for better responsiveness 695 696## Version 6.9.3 (2026-02-12) - ADMIN EDIT DIALOG CONSISTENCY 697 698### UI Improvement 699- **Edit Recurring Event dialog** in Admin section now matches the main event editor exactly: 700 - Same dark theme styling (#1e1e1e background, #2c3e50 header) 701 - Same header layout with close button (×) in top-right corner 702 - Same input styling (dark inputs with green accent borders) 703 - Same footer with Cancel/Save buttons layout 704 - Same recurrence options box styling 705 - Consistent spacing, fonts, and colors throughout 706 707## Version 6.9.2 (2026-02-12) - MOBILE DIALOG FIX 708 709### Bug Fix 710- **Fixed:** Description textarea now extends full width on mobile/phone view 711 - Reduced form padding from 12px to 8px on screens ≤480px 712 - Added explicit `width: 100%` and `box-sizing: border-box` to textarea 713 - Ensured all form inputs/selects use full available width on mobile 714 715## Version 6.9.1 (2026-02-11) - ADMIN RECURRING EVENTS INTEGRATION 716 717### Admin Panel Updates 718- **Enhanced Recurring Events Table:** 719 - Pattern column now shows color-coded badges (daily=blue, weekly=green, monthly=orange, yearly=pink) 720 - "First" column renamed to "Range" showing full date span (e.g., "Feb 1, 2026 → Dec 15, 2026") 721 - Patterns now read from stored metadata when available, with smart fallback to detection 722 723- **Edit Recurring Series Dialog:** 724 - Full recurrence pattern editing (not just simple intervals) 725 - "Repeat every [N] [period]" with dropdown for Daily/Weekly/Monthly/Yearly 726 - Weekly: Day-of-week checkboxes (Sun-Sat) with current days pre-selected 727 - Monthly: Radio choice between "Day of month" or "Weekday pattern" 728 - Ordinal weekday selector (First/Second/Third/Fourth/Fifth/Last + day dropdown) 729 - Pre-populates all fields from stored recurrence metadata 730 - Properly reschedules future events using new pattern 731 732- **Manage Series Dialog:** 733 - Updated summary to show date range 734 - Extend/trim/change pattern functions work with new patterns 735 736### Technical Updates 737- `findRecurringEvents()` captures all recurrence metadata from events 738- `formatRecurrencePattern()` generates human-readable pattern descriptions 739- `detectRecurrencePattern()` enhanced to detect more interval variations 740- `editRecurringSeries()` PHP handler processes new recurrence parameters 741- `generateRecurrenceDates()` creates dates matching complex patterns 742- Recurrence metadata preserved and updated across all event occurrences 743 744## Version 6.9.0 (2026-02-11) - ADVANCED RECURRING EVENTS 745 746### New Features 747- **Enhanced Recurring Event Options:** 748 - **Interval support:** Repeat every N days/weeks/months/years (e.g., every 3 months) 749 - **Weekly day selection:** Choose specific days of the week (e.g., Mon, Wed, Fri) 750 - **Monthly options:** 751 - Day of month: Repeat on specific day (e.g., 15th of each month) 752 - Ordinal weekday: Repeat on pattern (e.g., 2nd Wednesday, Last Friday) 753 - **Examples now possible:** 754 - Every 2 weeks on Monday and Thursday 755 - Every 3 months on the 15th 756 - Every other month on the 2nd Wednesday 757 - Every year on the same date 758 - Last Friday of every month 759 760### UI Changes 761- Redesigned recurring options section with bordered container 762- "Repeat every [N] [period]" input with interval number field 763- Day-of-week checkboxes for weekly recurrence 764- Radio buttons for monthly: "Day of month" vs "Weekday pattern" 765- Ordinal dropdown (First/Second/Third/Fourth/Fifth/Last) 766- Day dropdown (Sunday through Saturday) 767- Helper text for end date field 768 769### Technical Details 770- New parameters: recurrenceInterval, weekDays, monthlyType, monthDay, ordinalWeek, ordinalDay 771- Recurrence pattern stored in event data for reference 772- Maximum 365 occurrences (up from 100) to support daily events for a year 773- Smart date iteration for complex patterns 774 775## Version 6.8.1 (2026-02-11) - ITINERARY DEFAULT STATE SETTING 776 777### New Feature 778- **Added:** Option to set itinerary default state (expanded or collapsed) 779 - New setting in Admin → Calendar → Sidebar Widget Settings 780 - " Itinerary Section" with two options: 781 - **Expanded** (default) - Show itinerary sections by default 782 - **Collapsed** - Hide itinerary sections by default (click bar to expand) 783 - Setting persists across page loads 784 - Arrow indicator and content state reflect the saved preference on page load 785 786## Version 6.8.0 (2026-02-11) - COLLAPSIBLE ITINERARY 787 788### New Feature 789- **Added:** Collapsible Itinerary bar in sidebar week view 790 - New "ITINERARY" bar below the week calendar (styled like +ADD EVENT bar) 791 - Click to collapse/expand the Today, Tomorrow, and Important Events sections 792 - Arrow indicator shows expanded (▼) or collapsed (►) state 793 - Smooth animation when collapsing/expanding 794 - Clicking a day in the week grid shows that day's events ABOVE the Itinerary bar 795 - Selected day events remain visible whether itinerary is expanded or collapsed 796 - Shows "No upcoming events" message when there are no itinerary items 797 798### UI Layout (top to bottom) 7991. Header with clock/system stats 8002. +ADD EVENT bar 8013. Week grid (7 days) 8024. Selected day's events (appears when clicking a day) 8035. ITINERARY bar (click to collapse/expand) 8046. Today section (collapsible) 8057. Tomorrow section (collapsible) 8068. Important Events section (collapsible) 807 808## Version 6.7.9 (2026-02-11) - FIX EVENTS MANAGER STATISTICS 809 810### Bug Fixes 811- **Fixed:** Events Manager showing inflated count (1195 instead of ~605) 812 - The `scanDirectoryForStats()` function was counting ALL entries in JSON files 813 - Now properly filters to only count date keys (`YYYY-MM-DD` format) 814 - Now validates events have `id` and `title` before counting 815 - Click " Rescan" to update the statistics with correct count 816 817## Version 6.7.8 (2026-02-11) - FILTER INVALID EVENTS 818 819### Bug Fixes 820- **Fixed:** Event Manager showing "(untitled)" and "mapping" entries 821 - Root cause: Calendar JSON files contain metadata keys (like "mapping") that were being parsed as events 822 - Added date format validation (`YYYY-MM-DD`) to skip non-date keys 823 - Added validation to require `id` and `title` fields for events 824 - Applied fix to all event-reading functions: 825 - `getEventsByNamespace()` - main event listing 826 - `scanNamespaceRecursive()` - namespace scanning 827 - `searchEvents()` - event search 828 - `findEventsByTitle()` - title lookup 829 - `deleteRecurringSeries()` - recurring deletion 830 - `renameRecurringSeries()` - recurring rename 831 - Recurring events scanner 832 - Recurring cleanup function 833 834### Technical Details 835- Date keys must match pattern `/^\d{4}-\d{2}-\d{2}$/` 836- Events must have non-empty `id` and `title` fields 837- All other entries in JSON files are now skipped 838 839## Version 6.7.7 (2026-02-11) - FIX PHP PATH & CLEAR LOG 840 841### Bug Fixes 842- **Fixed:** "sh: 1: '/usr/bin/php': not found" error - removed escapeshellarg() which was adding quotes around the PHP path 843- **Fixed:** "Could not clear log file" - added better error messages showing exact issue 844- **Improved:** findPhpBinary() now uses is_executable() and `which php` for detection 845- **Improved:** clearLogFile() now shows specific error (file not found, not writable, etc.) 846 847## Version 6.7.6 (2026-02-11) - FIX SYNC CONTROLS & LOGGING 848 849### Bug Fixes 850- **Fixed:** Double log entries - sync script logs internally, removed redundant stdout capture 851- **Fixed:** Manual sync not appearing in log - removed `--verbose` flag since script logs directly 852- **Fixed:** Better error messages when sync fails 853 854### Improvements 855- **Improved:** Sync now runs without `--verbose` flag - script logs to file internally 856- **Improved:** Crontab warning if `>>` redirect is detected (causes duplicate entries) 857- **Improved:** Log viewer now shows full path to log file 858- **Improved:** Better pre-flight checks (directory creation, file permissions) 859- **Improved:** PHP binary path is now properly escaped 860 861### Crontab Update Required 862If your crontab has `>> sync.log 2>&1`, remove it to prevent duplicate log entries: 863 864**Before (causes duplicates):** 865``` 866*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php >> /var/www/html/dokuwiki/data/meta/calendar/sync.log 2>&1 867``` 868 869**After (correct):** 870``` 871*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php 872``` 873 874The script automatically logs to `data/meta/calendar/sync.log`. 875 876## Version 6.7.5 (2026-02-11) - FIX SYNC LOG OUTPUT 877 878### Bug Fixes 879- **Fixed:** Sync log not showing output when running sync from admin panel 880 - Added `--verbose` flag to sync command so output is captured 881 - Sync output is now captured and written to the log file 882 - Log directory is created if it doesn't exist 883 - Better error handling if log directory isn't writable 884 - Command being executed is logged for debugging 885 886### Changes 887- Sync now runs in verbose mode when triggered from admin panel 888- All sync output (stdout/stderr) is written to the log file 889- Pre-flight check ensures log directory exists and is writable 890 891## Version 6.7.4 (2026-02-11) - FIX MANUAL SYNC EXECUTION 892 893### Bug Fix 894- **Fixed:** "Could not open input file: sync_outlook.php" when running manual sync 895 - The `$pluginDir` variable was missing from `runSync()` function 896 - Added `$pluginDir = DOKU_PLUGIN . 'calendar'` before building the command 897 - Sync now properly changes to the plugin directory before executing 898 899## Version 6.7.3 (2026-02-11) - FIX ADDITIONAL COUNT TYPE ERRORS 900 901### Bug Fix 902- **Fixed:** Additional TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given" 903 - Fixed in `scanDirectoryForStats()` (line 5453) 904 - Fixed in namespace delete function (line 4137) 905 - Fixed in export function (line 5516) 906 - Fixed in import function (line 5636) 907 - All locations now check `is_array()` before calling `count()` 908 909## Version 6.7.2 (2026-02-11) - FIX EVENT MANAGER TYPE ERROR 910 911### Bug Fix 912- **Fixed:** TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given" 913 - Added array type checks when iterating over calendar event data 914 - Protects against corrupted JSON data where event lists may not be arrays 915 - Added safeguards in `getEventsByNamespace()` and `scanNamespaceRecursive()` 916 917## Version 6.7.1 (2026-02-11) - BULK DELETE FOR BACKUPS 918 919### Changed 920- **Improved:** Backup management now uses bulk selection and delete 921 - Added checkboxes next to each backup file 922 - Added "Select All" checkbox in the action bar 923 - Added "️ Delete Selected" button (appears when backups are selected) 924 - Removed individual delete buttons from each row 925 - Shows count of selected backups 926 - Backups are deleted sequentially with visual feedback 927 928### UI 929- Clean action bar at top of backup table with selection controls 930- Selected count updates in real-time 931- Rows fade out smoothly when deleted 932 933## Version 6.7.0 (2026-02-11) - IMPROVED RESTORE FUNCTION 934 935### Changed 936- **Improved:** Restore function now uses DokuWiki's Extension Manager API 937 - Uses `helper_plugin_extension_extension` for proper installation 938 - Handles permissions correctly through DokuWiki's standard plugin installation process 939 - Falls back to manual instructions if Extension Manager is not available 940 941### How It Works 942When you click " Restore" on a backup: 9431. The plugin loads DokuWiki's extension helper 9442. Calls `installFromLocal()` with the backup ZIP file 9453. DokuWiki's Extension Manager handles file extraction and installation 9464. This ensures proper permissions and follows DokuWiki standards 947 948### Fallback 949If the Extension Manager helper is not available, you'll be prompted to: 950- Download the backup ZIP 951- Go to Admin → Extension Manager → Install 952- Upload the ZIP file manually 953 954## Version 6.6.9 (2026-02-11) - REMOVE RESTORE FUNCTION 955 956### Removed 957- **Removed:** "Restore" button from backup management 958- **Removed:** `restoreBackup()` PHP method 959- **Removed:** `restoreBackup()` JavaScript function 960 961### Added 962- **Added:** Informational note in backup section explaining how to restore: 963 - Download the backup ZIP file 964 - Go to Admin → Extension Manager → Install 965 - Upload the ZIP file there 966 - DokuWiki's extension manager handles installation safely with proper permissions 967 968### Reason 969The restore function required write access to the plugin directory, which web servers typically don't have (and shouldn't have) for security reasons. Using DokuWiki's built-in Extension Manager is the safer and more reliable approach. 970 971## Version 6.6.8 (2026-02-11) - FIX THEME KEYS & FILE PERMISSIONS 972 973### Bug Fixes 974- **Fixed:** "Undefined array key" warnings for wiki theme (pastdue_color, pastdue_bg, tomorrow_bg, etc.) 975 - Added missing theme keys to `getWikiTemplateColors()` return array 976 977- **Fixed:** "Permission denied" errors for sync.log and sync_state.json 978 - Moved sync files from plugin directory to `data/meta/calendar/` (writable location) 979 - Updated sync_outlook.php, admin.php to use new paths 980 - sync_config.php remains in plugin directory (must be manually configured) 981 982- **Fixed:** `findEventNamespace` now returns the actual DIRECTORY where event file lives 983 - This ensures deletion works correctly when stored namespace differs from file location 984 985### Note on lang.php Permission Error 986If you see a permission error for lang/en/lang.php, this occurs when trying to restore/update the plugin via admin panel and the web server doesn't have write access to the plugin directory. This is normal security - update via command line or FTP instead. 987 988## Version 6.6.7 (2026-02-11) - FIX NAMESPACE CHANGE BUG (PART 2) 989 990### Bug Fix 991- **Fixed:** Events in the DEFAULT namespace (no namespace) could not be moved to other namespaces 992 - Root cause: The comparison `$oldNamespace !== ''` was always FALSE for default namespace events 993 - Changed to `$oldNamespace !== null` to properly distinguish between "event not found" (null) and "event in default namespace" ('') 994 - This allows moving events FROM the default namespace TO any other namespace 995 - Also fixed null coalescing for recurring events: `$oldNamespace ?? $namespace` instead of `$oldNamespace ?: $namespace` 996 997## Version 6.6.6 (2026-02-11) - FIX NAMESPACE CHANGE & DELETE BUGS 998 999### Bug Fixes 1000- **Fixed:** Changing an event's namespace now properly moves the event instead of creating a duplicate 1001 - Root cause: `findEventNamespace()` was searching in the NEW namespace instead of ALL namespaces 1002 - Now uses wildcard search `'*'` to find the existing event regardless of its current namespace 1003 1004- **Fixed:** Deleting an event no longer causes the calendar to filter by the deleted event's namespace 1005 - Root cause: After deletion, `reloadCalendarData()` was called with the deleted event's namespace 1006 - Now retrieves the calendar's original namespace from `container.dataset.namespace` 1007 - Also fixed in `saveEventCompact()` and `toggleTaskComplete()` for consistency 1008 1009## Version 6.6.5 (2026-02-11) - ADD AUTOCOMPLETE ATTRIBUTES 1010 1011### Improved 1012- Added `autocomplete="new-password"` to client secret input field 1013- Added `autocomplete="email"` to user email input field 1014- Added `autocomplete="off"` to client ID input field 1015- Follows browser best practices for form inputs 1016 1017## Version 6.6.4 (2026-02-11) - FIX GEOLOCATION VIOLATION 1018 1019### Bug Fix 1020- **Fixed:** Browser violation "Only request geolocation information in response to a user gesture" 1021- Weather widget now uses Sacramento as the default location on page load 1022- Geolocation is only requested when user **clicks** on the weather icon 1023- Click the weather icon to get your local weather (browser will prompt for permission) 1024- Weather icon shows tooltip "Click for local weather" and has pointer cursor 1025 1026## Version 6.6.3 (2026-02-11) - FIX MUTATIONOBSERVER ERROR 1027 1028### Bug Fix 1029- **Fixed:** `Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'` error 1030- Root cause: MutationObserver tried to observe `document.body` before DOM was ready 1031- Added `setupMutationObserver()` function that waits for DOMContentLoaded before attaching observer 1032 1033## Version 6.6.2 (2026-02-11) - FIX CONFLICT TOOLTIP JAVASCRIPT LOADING 1034 1035### Bug Fix 1036- **Critical:** Fixed `showConflictTooltip is not defined` and `hideConflictTooltip is not defined` errors 1037- Root cause: `addAssets()` in action.php was loading empty `script.js` instead of `calendar-main.js` 1038- Changed `addAssets()` to load `calendar-main.js` directly 1039- Updated `script.js` to dynamically load `calendar-main.js` as a fallback mechanism 1040 1041## Version 6.6.1 (2026-02-11) - SECURITY FIXES 1042 1043### Security 1044- **Critical:** Removed `eval()` remote code execution vulnerability in config import 1045- **Critical:** Added admin authentication requirement to `get_system_stats.php` endpoint 1046- **High:** Added CSRF token verification to all write operations (save, delete, toggle) 1047- **High:** Fixed path traversal vulnerabilities in namespace delete/rename functions 1048- **High:** Added admin privilege verification to AJAX admin routes 1049 1050### Improved 1051- **Input Validation:** Date format (YYYY-MM-DD), time format (HH:MM), color format (#RRGGBB) 1052- **Input Validation:** Year range (1970-2100), month range (1-12), namespace format 1053- **Input Validation:** Recurrence type whitelist, title/description length limits 1054- **Debug Logging:** All debug logging now conditional on `CALENDAR_DEBUG` constant (off by default) 1055- **JSON Handling:** Added `safeJsonRead()` helper with proper error handling 1056- **Timezone:** Sync script now uses configured timezone instead of hardcoded value 1057 1058### Code Quality 1059- Documented intentional switch fallthrough in `get_system_stats.php` 1060- Standardized error response format 1061 1062## Version 6.6.0 (2026-02-11) - BACKUP & UI IMPROVEMENTS 1063 1064### Fixed 1065- **Backup:** Fixed recursive directory backup to properly include all subdirectories (including `lang/`) 1066- **Backup:** Now uses `SELF_FIRST` iterator to process directories before their contents 1067- **Backup:** Empty directories are now explicitly added with `addEmptyDir()` to preserve structure 1068 1069### UI Change 1070- **Namespace Explorer:** Cleanup status message now appears prominently at top of section 1071- Previously status message was at bottom, easy to miss after cleanup operations 1072 1073## Version 6.5.5 (2026-02-11) - FIX AJAX ROUTING & MOVE CLEANUP BUTTON 1074 1075### Bug Fix 1076- All admin AJAX actions (cleanup, rescan, extend, trim, pause, resume, change start/pattern) were returning "Unknown action" 1077- Root cause: AJAX calls go through `action.php`'s switch statement, not `admin.php`'s `handle()` method 1078- Added routing in `action.php`: new cases forward to `admin.php` via `routeToAdmin()` helper 1079- Added public `handleAjaxAction()` method in `admin.php` as the entry point from `action.php` 1080 1081### UI Change 1082- Moved " Cleanup" button from standalone section to inline next to "➕ New Namespace" in the control bar 1083- Status messages still appear below the namespace explorer 1084 1085## Version 6.5.4 (2026-02-11) - FIX PHP PARSE ERROR IN CLEANUP JS 1086 1087### Bug Fix 1088- Root cause: `style='color:...'` single quotes inside PHP `echo '...'` block terminated the PHP string prematurely 1089- PHP saw `color:#e74c3c` as unexpected PHP code instead of part of the JS string 1090- Fixed all 5 occurrences in cleanupEmptyNamespaces JS: escaped single quotes as `\'` 1091- Added `adminColors` JS object (text, bg, border) injected from PHP `$colors` at render time 1092- Cleanup detail text uses `adminColors.text` to respect DokuWiki template theme colors 1093 1094## Version 6.5.3 (2026-02-11) - FIX CLEANUP NAMESPACES PARSE ERROR 1095 1096### Bug Fix 1097- Fixed PHP parse error on line 1089 caused by `$colors['text']` PHP variable inside JS string concatenation 1098- The cleanup results detail list now uses hardcoded `#666` for text color instead of attempting PHP interpolation within JS runtime code 1099 1100## Version 6.5.2 (2026-02-11) - CLEANUP EMPTY NAMESPACES 1101 1102### New Feature 1103- " Cleanup Empty Namespaces" button added at bottom of Namespace Explorer section 1104- Dry-run scan first: shows exactly what will be removed with bullet-point details in confirm dialog 1105- Removes empty calendar folders (0 JSON files or all-empty JSON files) from any namespace 1106- Removes parent namespace directories if they become empty after calendar folder removal 1107- Root calendar directory is never removed 1108- AJAX-powered with inline status showing results after cleanup 1109- Page auto-reloads after 2 seconds to refresh the namespace explorer view 1110- Recursively scans all nested namespace directories via `findAllCalendarDirsRecursive()` 1111 1112## Version 6.5.1 (2026-02-11) - TRIM ALL PAST: SHOW COUNT BEFORE DELETE 1113 1114### Improved 1115- "Trim All Past" button now does a dry-run count before showing the confirmation dialog 1116- Confirmation shows exact count: "Found 47 past recurring events to remove" 1117- If zero found, shows "No past recurring events found to remove" instead of confirm 1118- PHP handler supports `dry_run` parameter that counts without deleting 1119 1120## Version 6.5.0 (2026-02-11) - BULK TRIM ALL PAST RECURRING EVENTS 1121 1122### Bulk Action 1123- Red "✂️ Trim All Past" button added next to the Rescan button in the Recurring Events section header 1124- Removes ALL past occurrences (before today) from EVERY recurring series in one click 1125- Only removes events with `recurring` or `recurringId` flags — non-recurring events are untouched 1126- Confirmation dialog required before execution 1127- AJAX-powered with inline status showing count removed, then auto-rescans the table 1128- Searches all calendar directories recursively 1129 1130## Version 6.4.9 (2026-02-11) - FIX RECURRING EDIT/DELETE: SEARCH ALL DIRECTORIES 1131 1132### Bug Fix 1133- Edit and Delete recurring series now search ALL calendar directories instead of building a path from the namespace field 1134- Root cause: event's `namespace` field (stored in JSON) can differ from the filesystem directory where the file lives 1135- Both handlers now use `findCalendarDirs()` to collect every calendar directory recursively 1136- Events matched by title AND namespace field (case-insensitive) for precise targeting 1137- Edit handler rewritten: rename/time/namespace updates in Pass 1, interval respace in Pass 2 1138- New `findCalendarDirs()` helper method for recursive directory discovery 1139 1140## Version 6.4.8 (2026-02-11) - FIX PHP PARSE ERROR IN MANAGE DIALOG 1141 1142### Bug Fix 1143- Rewrote `manageRecurringSeries()` JS function using string concatenation instead of template literals 1144- JS template literals (`${...}`) inside PHP echo blocks caused PHP to parse them as variable interpolation 1145- All inline onclick handlers now use `\x27` for single quotes to avoid escaping conflicts 1146 1147## Version 6.4.7 (2026-02-11) - RECURRING EVENTS: FULL MANAGEMENT CONTROLS 1148 1149### New "Manage" Button per Series 1150- Orange "Manage" button opens a comprehensive management dialog for each recurring series 1151 1152### Extend Series 1153- Add N new occurrences after the last event in the series 1154- Configurable interval: Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly 1155- New events copy title, time, color, namespace, and recurring flag from the last event 1156 1157### Trim Past Events 1158- Remove all occurrences before a selected cutoff date 1159- Confirmation required before deletion 1160- Cleans up empty date keys and files automatically 1161 1162### Change Pattern 1163- Respace future occurrences with a new interval 1164- Past events are untouched; only future events are removed and re-created 1165- First future event becomes the anchor date 1166 1167### Change Start Date 1168- Shift ALL occurrences by the difference between old and new start date 1169- Events are removed from old positions and re-created at new positions 1170- Preserves spacing between all events 1171 1172### Pause/Resume 1173- Pause: adds ⏸ prefix and paused flag to all future occurrences 1174- Resume: removes ⏸ prefix and paused flag from all occurrences 1175- Button toggles based on whether series is currently paused 1176 1177### Infrastructure 1178- New shared `recurringAction()` JS helper for all AJAX management operations 1179- New `getRecurringSeriesEvents()` PHP helper for finding all events in a series 1180- Status messages shown inline in the management dialog 1181- Close button triggers automatic rescan to refresh the table 1182 1183## Version 6.4.6 (2026-02-11) - RECURRING EVENTS: RESCAN BUTTON & IMPROVED LOGIC 1184 1185### Rescan Button 1186- Green " Rescan" button added to the Recurring Events section header 1187- AJAX-powered: rescans all calendar data and refreshes the table without page reload 1188- Shows count of found series briefly after scan completes 1189 1190### Improved Detection Logic 1191- Events with `recurring: true` flag are now detected first (grouped by `recurringId`) 1192- Pattern-detected events (3+ same-title occurrences) are found separately and deduplicated 1193- New "Source" column shows ️ Flagged (has recurring flag) vs Detected (pattern match) 1194- Median interval used for pattern detection instead of just first two dates (more robust) 1195- New patterns recognized: Quarterly, Semi-annual, and "Every ~N days" for custom intervals 1196- Empty/invalid titles and malformed date arrays are now skipped safely 1197- Dates are deduplicated before counting (prevents inflated counts from multi-day events) 1198- Nested namespace directories now scanned recursively 1199- Results sorted alphabetically by title 1200 1201## Version 6.4.5 (2026-02-11) - ADMIN VERSION HISTORY OVERHAUL 1202 1203### Version History Viewer 1204- All purple (#7b1fa2) accent colors replaced with green (#00cc07) to match admin theme 1205- Changelog parser now handles `###` subsection headers (rendered as green bold labels) 1206- Plain `- ` bullet items now parsed and categorized under their subsection 1207- Previously only `- **Type:** description` format was recognized 1208 1209### Current Release Button 1210- Green "Current Release" button added between nav arrows 1211- Jumps directly to the card matching the running version from plugin.info.txt 1212- Running version card shows green "RUNNING" badge and thicker green border 1213 1214## Version 6.4.4 (2026-02-11) - WIKI THEME: PAST EVENTS TOGGLE BACKGROUND 1215 1216### Fix 1217- Wiki theme past events pulldown (retracted state) now uses `__background_neu__` (`--cell-today-bg`) 1218- Previously used `--cell-bg` which appeared unthemed/white 1219 1220## Version 6.4.3 (2026-02-11) - WIKI THEME: DAY HEADERS BACKGROUND 1221 1222### Fix 1223- Wiki theme SMTWTFS day headers now use `__background_neu__` (`--cell-today-bg`) instead of `--background-header` 1224 1225## Version 6.4.2 (2026-02-11) - WIKI THEME: DAY HEADERS (INITIAL) 1226 1227### Wiki Theme Day Headers 1228- Added explicit CSS override for `.calendar-theme-wiki .calendar-day-headers` 1229- Day header text uses `--text-primary` (template's `__text__` color) 1230 1231## Version 6.4.1 (2026-02-11) - WIKI THEME: EVENT HIGHLIGHT 1232 1233### Fix 1234- Wiki theme event highlight (when clicking calendar bar) now uses `themeStyles.header_bg` (`__background_alt__`) instead of hardcoded blue (#dce9f5) 1235- Subtle shadow instead of blue glow 1236 1237## Version 6.4.0 (2026-02-11) - DARK READER: SECTION BAR COLOR MATCHING 1238 1239### Fix 1240- Wiki theme section left bar now uses a `<div>` with `background` instead of `border-left` 1241- Dark Reader maps the same color differently for border vs background properties, causing visual mismatch 1242- Both the bar and header now use `background`, so Dark Reader maps them identically 1243- Flex layout wrapper added for wiki theme sections 1244- Wiki fallback colors updated: `border` key now uses `#ccc` (matching `__border__`) instead of `#2b73b7` 1245 1246## Version 6.3.9 (2026-02-10) - WIKI THEME: SECTION BAR FIX (ATTEMPT) 1247 1248### Fix 1249- Simplified wiki section container — removed `wiki-section-container` class 1250- Added `background` from `$themeStyles['bg']` to section container 1251 1252## Version 6.3.8 (2026-02-10) - WIKI THEME: BUTTON & SECTION HEADER COLORS 1253 1254### Wiki Theme Buttons 1255- Nav buttons (< >), Today button, and panel buttons now use `__link__` color background with white text 1256- CSS overrides for `.calendar-theme-wiki .cal-nav-btn`, `.cal-today-btn`, panel buttons 1257 1258### Wiki Theme Section Headers 1259- Today: `__link__` background (accent/link color) 1260- Tomorrow: `__background_alt__` background (alternate background) 1261- Important: `__border__` background (border color) 1262- Each section now has a distinct color from the template palette 1263 1264## Version 6.3.7 (2026-02-10) - WIKI THEME CHECKBOX FIX 1265 1266### Fix 1267- Wiki theme checkbox override changed from `border-color` to full `border: 2px solid` shorthand 1268- Properly overrides the base rule which uses `border` shorthand 1269- Hover state also uses full shorthand 1270 1271## Version 6.3.6 (2026-02-10) - WIKI THEME CHECKBOX BORDER COLOR 1272 1273### Fix 1274- Wiki theme unchecked checkboxes now use `--border-main` (template's `__border__` color) for border 1275- Checked state fills with border color 1276- Hover state uses border color 1277- Applied to calendar, sidebar, and eventlist containers 1278 1279## Version 6.3.5 (2026-02-10) - WIKI THEME: ALLOW DARK READER ON HEADERS 1280 1281### Fix 1282- Wiki theme section headers (Today/Tomorrow/Important) no longer use `!important` or `-webkit-text-fill-color` 1283- Dark Reader can now freely adjust background, text color, and borders on wiki theme headers 1284- Clicked-day panel header and section border-left also unlocked for wiki theme 1285- All other themes (matrix/purple/pink/professional) retain full Dark Reader protection 1286 1287## Version 6.3.4 (2026-02-10) - WIKI THEME: BORDER COLOR FOR HEADERS & BADGES 1288 1289### Wiki Theme Color Remapping 1290- `border` (accent color) now maps to template's `__border__` instead of `__link__` 1291- This affects: section headers (Today/Tomorrow/Important), badges (TODAY, namespace), sidebar widget border, clicked-day panel, `--border-main` CSS variable 1292- `text_bright` still maps to `__link__` for link text and accent text 1293- Section headers all use the same `__border__` color for consistent appearance 1294- Updated COLOR_SCHEME mapping documentation 1295 1296## Version 6.3.3 (2026-02-10) - WIKI THEME SECTION HEADER TEXT COLOR 1297 1298### Fix 1299- Wiki theme Today/Tomorrow/Important section header text now uses `$themeStyles['text_primary']` (mapped from template's `__text__` color) instead of hardcoded white 1300- Clicked-day panel header text also uses template text color for wiki theme 1301- Professional theme remains white text on blue headers 1302 1303## Version 6.3.2 (2026-02-10) - FIX THEME NOT UPDATING ON SIDEBAR EVENTLIST 1304 1305### Bug Fix 1306- Added `$renderer->nocache()` to the render function 1307- DokuWiki was caching the rendered sidebar HTML, so theme changes made in admin were never reflected until the page was manually edited 1308- Now all calendar/eventlist/eventpanel outputs are rendered fresh on each page load, picking up the current theme from `calendar_theme.txt` 1309 1310## Version 6.3.1 (2026-02-10) - EVENTLIST THEMING 1311 1312### {{eventlist}} Theme Support 1313- Eventlist containers now receive theme class (`eventlist-theme-matrix`, etc.) and full CSS variable injection 1314- Dark themes get themed border + glow, light themes get subtle border 1315- Container background set from `$themeStyles['bg']` with `!important` 1316 1317### Eventlist CSS Theme Rules (all 3 dark themes) 1318- Title, header, time, date, body, links, strong, code, namespace badge, empty state 1319- Today header, clock, date — all with `color` + `-webkit-text-fill-color` `!important` 1320- Item borders, section backgrounds, code block backgrounds 1321- Full Dark Reader protection via same inline+CSS approach as calendar/sidebar 1322 1323## Version 6.3.0 (2026-02-10) - DARK READER COMPATIBILITY & COMPLETE THEMING 1324 1325### Dark Reader Browser Extension Compatibility 1326All dark themes (Matrix, Purple, Pink) now render correctly when the Dark Reader browser extension is active. The approach uses targeted inline `!important` styles and `-webkit-text-fill-color` overrides — no page-wide locks, no blanket CSS resets, no filter manipulation. 1327 1328**Protected elements:** 1329- Section headers (Today/Tomorrow/Important) — background, text color, text-fill-color 1330- Clicked-day panel header — background, text color, close button 1331- All badges (TODAY, PAST DUE, namespace, panel namespace, eventlist-simple) — background, text, text-fill-color 1332- Event titles, meta, descriptions — color with !important via CSS 1333- Day numbers, nav buttons, calendar day headers — color with !important via CSS 1334- System status bars — inline background !important on tracks and fills 1335- System tooltips — background, border-color, text color all set via setProperty with !important 1336- Section left border bars — border-left with !important 1337- Event color indicator bars — border-left-color with !important 1338- Sidebar section event text (Purple and Pink themes) 1339 1340### Complete CSS Variable Audit (41 conversions in v6.1.1) 1341- All remaining hardcoded colors in style.css converted to CSS variable references 1342- Calendar borders, text colors, backgrounds, input focus shadows, accent borders 1343- Only legitimate hardcodes remain (keyframe animations, theme-specific override blocks) 1344 1345### Semantic Color System 1346- New CSS variables: `--pastdue-color`, `--pastdue-bg`, `--pastdue-bg-strong`, `--pastdue-bg-light` 1347- New CSS variables: `--tomorrow-bg`, `--tomorrow-bg-strong`, `--tomorrow-bg-light` 1348- Injected into all 3 CSS var blocks (full calendar, event panel, sidebar widget) 1349- Today/Tomorrow/Important section colors now theme-derived instead of hardcoded 1350 1351### Section Headers Fully Themed 1352- Today/Tomorrow/Important headers use theme accent colors instead of fixed green/orange/purple 1353- Matrix: bright/standard/dim green, Purple: bright/standard/dim purple, Pink: hot/medium/light pink 1354- Professional: blue shades, Wiki: template-derived colors 1355- Dark theme headers use dark background color for text contrast 1356 1357### Pink Theme Enhancements 1358- **Heart today indicator** — day number displayed inside a ♥ with hot pink glow, centered via inline-flex, `pink-heart-beat` animation with realistic double-beat pulse 1359- **Firework button hover** — `pink-firework-burst` keyframe animation with multi-point radiating box-shadows, scale/brightness effects on hover, instant flash on click 1360- **Checkbox glow** — hot pink border with ambient glow, hover intensifies, checked fills with glow 1361 1362### All Theme Checkbox Theming 1363- Matrix: bright green border + green glow, Purple: purple border + purple glow 1364- Pink: hot pink border + pink glow (with enhanced ambient effect) 1365- Hover scales 1.1x with intensified glow on all themes 1366- Checked state fills with theme accent color + outer glow 1367 1368### System Tooltips Themed 1369- Both tooltip functions use theme-derived colors from `$themeStyles` 1370- Green tooltip: `text_bright`, Purple: `border`, Orange: `text_primary` 1371- Background from `$themeStyles['bg']`, divider borders use theme accent colors 1372- All properties set with `style.setProperty(prop, value, "important")` 1373 1374### Namespace Filter Badge Cleanup 1375- Removed inline namespace badge from event side panel header 1376- Filter indicator bar ("Filtering: namespace ✕") retained and working 1377- AJAX-based namespace filtering fully functional via onclick handlers 1378 1379## Version 6.1.0 (2026-02-10) - TODAY INDICATOR, BUTTON HOVER & CHECKBOXES 1380 1381### Today Indicator 1382- **Added:** Today's day number now shows as a filled circle with theme accent color background and contrasting text (like Google Calendar's today indicator) 1383- **Added:** Today cell has `--cell-today-bg` background AND a visible inset border glow on hover using `--border-main` 1384- **Added:** `.day-num` now uses `--text-primary` for color instead of relying on browser default 1385 1386### Button Hover/Click Theming 1387- **Fixed:** All buttons now use `filter: brightness(1.3)` on hover for a visible glow effect across all themes 1388- **Fixed:** All buttons use `filter: brightness(0.85)` on click/active for a press-down darkening effect 1389- **Fixed:** Cal nav buttons (‹/›), Today button, +Add Event button, panel nav/today/add buttons, dialog Save/Cancel buttons, month picker Go/Cancel buttons, popup + Add Event button — ALL now have visible themed hover/click feedback with shadow 1390- **Removed:** Generic `opacity: 0.9` hover which was barely visible on dark themes 1391 1392### Checkboxes Themed 1393- **Added:** Custom checkbox styling for `.task-checkbox` — uses `appearance: none` with themed border (`--border-main`), hover glow, and filled accent background when checked with ✓ mark 1394- **Added:** `accent-color: var(--text-bright)` on all dialog checkboxes (task, recurring) for consistent theme coloring 1395 1396### Form Input Text 1397- **Fixed:** `.input-sleek` now has `color: var(--text-primary)` — form text is visible on dark themes 1398- **Added:** `::placeholder` styling for inputs/textareas using `--text-dim` 1399 1400## Version 6.0.9 (2026-02-09) - FORM TEXT, CELL HOVER & GLOW TUNING 1401 1402### Form Input Text Fix 1403- **Fixed:** Form input text (`input-sleek`, `textarea-sleek`, `select`) had no `color` property — browser defaulted to black, invisible on dark themes. Now uses `var(--text-primary)`. 1404- **Added:** Themed placeholder text (`::placeholder`) for inputs/textareas 1405 1406### Button & Cell Hover Theming 1407- **Added:** Calendar day cells (`.cal-day`) now have a themed hover effect — background shifts to `--cell-today-bg` with an inset border glow using `--border-main` 1408- **Improved:** Nav buttons (`◄`/`►`) and Today button hover now show a themed glow + scale effect instead of just opacity change 1409- **Added:** Active (click) state for nav/today buttons with scale-down feedback 1410- **Improved:** Month picker hover now also shows a subtle theme shadow 1411 1412### Glow Reduced to 1px for Matrix/Purple 1413- Matrix and purple text glow reduced from 2px to 1px across: event titles, descriptions, meta, links, sidebar day numbers, sidebar event titles, sidebar dates 1414- Matrix clock pulse animation reduced from 6px/10px+15px to 2px/4px+6px 1415- Weather text glow reduced to 1px, clock to 2px 1416- Pink remains at 2px (barely noticeable) 1417 1418## Version 6.0.8 (2026-02-09) - LINKS, GLOW CONSISTENCY & PINK TONE-DOWN 1419 1420### Links Themed 1421- **Added:** `.cal-link` CSS class — all links rendered via `renderDescription()` now pick up theme accent color via `--text-bright` 1422- **Fixed:** Sidebar widget links (`a.cal-link`) inherit theme colors 1423- **Fixed:** Event list widget description links (`eventlist-widget-desc a`) use CSS vars 1424- **Fixed:** Simple event list body links/strong/code all themed 1425 1426### Text Glow Consistency 1427- **Added:** Subtle `text-shadow: 0 0 2px` glow on event titles, meta, and descriptions for all three dark themes (matrix, purple, pink) in the main calendar and event panel 1428- **Added:** Subtle link glow on dark themes 1429- **Added:** Matrix and purple now get the same barely-visible text glow that pink had on sidebar week grid day numbers and event titles 1430 1431### Pink Glow Toned Down 1432- **Reduced:** Sidebar today header box-shadow from `0 0 10px 0.4` to `0 0 6px 0.25` 1433- **Reduced:** Day number sparkle animation from 3px/6px+10px to 2px/3px 1434- **Reduced:** Today cell shimmer from 3px+5px / 8px+12px to 2px+3px / 4px+6px 1435- **Reduced:** Event bar glow pulse from 2px/4px+6px to 1px/2px+3px 1436- **Reduced:** Today hover glow from 10px+15px to 5px+8px 1437- **Reduced:** Event item glow from 2px/5px to 1px/3px 1438- **Reduced:** Calendar container glow from 8px to 5px 1439 1440### Other 1441- **Themed:** Sidebar weather, date, and clock text colors and glow via CSS vars 1442 1443## Version 6.0.7 (2026-02-09) - BADGES, BUTTONS & CONFLICT THEMING 1444 1445- **Fixed:** Namespace badges (`.namespace-badge`, `.event-namespace-badge`, `.panel-ns-badge`, standalone header badge) — all now use theme accent colors instead of hardcoded green/blue 1446- **Fixed:** TODAY badge uses `--border-main` for background instead of hardcoded purple 1447- **Fixed:** Conflict alert badge (`⚠️`) uses `--border-main` background and `--text-bright` border — matches theme accent 1448- **Fixed:** Conflict tooltip header background now set inline from theme vars (tooltip is appended to body, can't inherit CSS vars) 1449- **Fixed:** Conflict tooltip body items use themed text and border colors 1450- **Fixed:** Month picker Go/Cancel buttons themed (`--text-bright` for save, `--cell-bg` for cancel) 1451- **Fixed:** Calendar header month/year hover uses `--cell-today-bg` background 1452- **Fixed:** Inline search input border uses `--border-color` 1453- **Fixed:** Event list header border uses `--border-color` 1454 1455## Version 6.0.6 (2026-02-09) - COMPLETE TEXT THEMING 1456 1457- **Fixed:** Calendar header month/year title had hardcoded dark color — now uses `--text-primary` 1458- **Fixed:** Month/year picker hover used hardcoded gray background and green text — now uses `--cell-today-bg` and `--text-bright` 1459- **Fixed:** Event list items (titles, meta, descriptions, links, code blocks, bold text) — all now theme-aware via CSS vars 1460- **Fixed:** Completed/past event states used hardcoded grays — now use `--cell-bg`, `--text-dim`, `--cell-today-bg` 1461- **Fixed:** Scrollbar track/thumb colors now use theme vars 1462- **Fixed:** Namespace filter indicator (background, label, badge, close button) — all themed 1463- **Fixed:** Panel standalone month picker hover and namespace badge — themed 1464- **Fixed:** Calendar header border-bottom — now uses `--border-color` 1465 1466## Version 6.0.5 (2026-02-09) - THEMED BORDERS & EVENT PANEL 1467 1468- **Added:** Theme-colored border and glow for calendar container on matrix, purple, and pink themes — matches the sidebar widget's `2px solid` + `box-shadow` glow style. Professional and wiki themes unchanged (keep subtle 1px gray border). 1469- **Added:** Theme-colored border and glow for event panel (`{{eventpanel}}`) on dark themes using `[data-theme]` attribute selectors 1470- **Themed:** Event panel header (nav buttons, month title, today button, search input, add button) — all now use CSS vars 1471- **Themed:** Panel standalone header background and border 1472 1473## Version 6.0.4 (2026-02-09) - FULL DIALOG THEMING 1474 1475- **Fixed:** Day cell click popup (day-popup) used hardcoded white/gray colors — now fully theme-aware using CSS variables 1476- **Fixed:** Event add/edit dialog (dialog-content-sleek) had hardcoded white background and blue header — now uses theme colors 1477- **Fixed:** Month picker dialog had hardcoded white background and dark text — now themed 1478- **Fixed:** Popup event items, titles, times, descriptions, footer, add-event button, close button — all now use CSS vars with sensible fallbacks 1479- **Fixed:** Form elements (field labels, inputs, checkboxes, recurring options, color pickers) — all reference theme CSS vars 1480- **How it works:** `propagateThemeVars()` copies CSS variables from the calendar container to dialogs/popups (which are `position:fixed` or appended to `document.body`). All CSS selectors now reference these variables with fallbacks for graceful degradation. 1481 1482## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB 1483 1484- **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Events Manager and Cleanup sections) 1485- **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage tab sections 1486- **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now independent of Outlook config save 1487- **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value 1488 1489## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX 1490 1491- **Fixed:** In Firefox, the SMTWTFS day-of-week header row was rendering at the same height as calendar day cells (58px instead of 22px). Firefox ignores `max-height` on `<th>` table cells per CSS spec. Replaced `<thead><tr><th>` with a CSS grid `<div>` outside the table, making header height fully independent of table cell sizing. Works consistently across Chrome, Firefox, Safari, and Edge. 1492 1493## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX 1494 1495- **Fixed:** `theme=wiki` (and all `theme=` parameters) had no effect — all three render functions (`renderCompactCalendar`, `renderEventPanelOnly`, `renderSidebarWidget`) were ignoring the syntax parameter and always reading the admin global default via `getSidebarTheme()` 1496- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller 1497- **How it works now:** `{{calendar theme=wiki}}`, `{{eventlist sidebar theme=purple}}`, `{{eventpanel theme=professional}}` all correctly apply the specified theme. The admin-configured default is used as fallback only when no `theme=` parameter is present. 1498 1499 1500## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE 1501 1502- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed 1503- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified 1504- **Audited:** style.css (3,218 lines) — balanced braces confirmed 1505- **Audited:** All admin manage tab action handlers verified functional (13 actions) 1506- **New:** Fresh README.md for GitHub with complete documentation 1507- **Includes all v5.5.x fixes:** 1508 - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total)) 1509 - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel 1510 - Conflict badges on past events after AJAX navigation 1511 - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal 1512 1513## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP 1514 1515- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers 1516- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0` 1517- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning 1518- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name 1519- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared 1520- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check 1521- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving 1522- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files 1523- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt 1524- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache 1525- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`) 1526- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries` 1527- **Removed:** Stale "NEW!" comment from Events Manager section 1528 1529## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH 1530 1531- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API 1532- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status) 1533- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run 1534- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing 1535- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total) 1536- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed 1537- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important) 1538- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead 1539- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text 1540- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes) 1541 1542## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH 1543 1544- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys 1545- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional) 1546- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background 1547- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files) 1548- **Changed:** Wiki theme section header text now white for readability on colored backgrounds 1549- **Changed:** Week grid JS theme colors now use actual $themeStyles values 1550 1551## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX 1552 1553- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch) 1554 1555## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING 1556 1557- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner 1558- **Fixed:** Week grid conflict tooltips also fixed (same issue) 1559- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data 1560- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip) 1561 1562## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD 1563 1564- **Fixed:** Past events now expand on click from initial page load (PHP-rendered items were missing onclick="togglePastEventExpand(this)" handler that the JS-rebuilt version had) 1565 1566## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS 1567 1568- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body) 1569- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string 1570 1571## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING 1572 1573- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping 1574- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON) 1575- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute 1576- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility 1577 1578## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING 1579 1580- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation 1581- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads 1582- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-) 1583- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1 1584- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds 1585- **Added:** ESC key now also closes day popups and conflict tooltips 1586- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding 1587 1588## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY 1589 1590- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance 1591- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js 1592- **Refactored:** style.css is now the single source of truth for all visual styling 1593- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container 1594- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget) 1595- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars 1596- **Added:** CSS variable injection for {{eventlist panel}} containers 1597- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers 1598- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position 1599- **Added:** Wiki template mapping reads __link__ as accent color from style.ini 1600- **Added:** Detailed CSS variable reference table in style.css header comment 1601- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php 1602- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles 1603- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div 1604- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible) 1605- **Removed:** $isWikiTheme branching from PHP render path 1606 1607## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! 1608 1609### Added: Hearts in Explosions! 1610- **Added:** 8-12 pink hearts in each click explosion 1611- **Added:** Random sizes (12-28px) and directions 1612- **Result:** Extra love in every click! 1613 1614### Fixed: Background CSS Property for Dark Mode Readers 1615- **Fixed:** Added `background: transparent` to CSS (was completely removed) 1616- **Fixed:** Now CSS readers can detect and modify background property 1617- **Why:** Inline styles override transparent, but CSS readers can now see the property 1618- **Result:** Dark mode plugins can now change calendar backgrounds! 1619 1620### The CSS Problem 1621 1622**Why backgrounds weren't changing with dark mode readers**: 1623 1624**Before (v5.3.5)**: 1625```css 1626.calendar-compact-grid tbody td { 1627 /* background removed - set via inline style */ 1628 border: 1px solid... 1629} 1630``` 1631 1632**Problem**: CSS property doesn't exist! 1633- Dark mode readers look for `background` property in CSS 1634- Can't override what doesn't exist 1635- Inline styles work, but readers can't modify them 1636 1637**After (v5.3.6)**: 1638```css 1639.calendar-compact-grid tbody td { 1640 background: transparent; /* Now exists! */ 1641 border: 1px solid... 1642} 1643``` 1644 1645**Solution**: 1646- Property exists in CSS 1647- Dark mode readers can override it 1648- Inline styles still override transparent 1649- Everyone wins! 1650 1651### What's Fixed 1652 1653**Elements now have background property**: 1654- `.calendar-compact-grid tbody td` ✓ 1655- `.calendar-compact-grid tbody td:hover` ✓ 1656- `.event-compact-item` ✓ 1657- `.event-compact-item:hover` ✓ 1658 1659**How it works**: 16601. CSS sets `background: transparent` (default) 16612. Inline styles set actual color (overrides transparent) 16623. Dark mode readers can override CSS property 16634. Works for everyone! 1664 1665### Hearts in Explosion 1666 1667**Click anywhere → Hearts explode!** 1668 1669**Heart details**: 1670- Count: 8-12 per explosion (random) 1671- Size: 12-28px (random variety) 1672- Emoji: (pink heart) 1673- Direction: Random 360° 1674- Speed: 60-140px travel 1675- Duration: 0.8-1.2s 1676- z-index: 9999999 (always visible) 1677 1678**Combined with**: 1679- 25 glowing particles 1680- 40 pixel sparkles 1681- Bright flash 1682- **Total: 73-77 elements!** 1683 1684### Visual Result 1685 1686**Click explosion**: 1687``` 1688 ✦ • ✦ 1689 • • 1690✦ • ! • ✦ 1691 • • 1692 ✦ • ✦ 1693 1694Hearts + Particles + Pixels! 1695``` 1696 1697**Dark mode now works**: 1698```css 1699/* Dark mode reader can now do this: */ 1700.calendar-compact-grid tbody td { 1701 background: #000 !important; /* Works! */ 1702} 1703``` 1704 1705### Why Transparent Works 1706 1707**CSS Cascade**: 17081. CSS: `background: transparent` (lowest priority) 17092. Inline style: `background: #f5f5f5` (overrides CSS) 17103. Dark mode CSS: `background: #000 !important` (overrides inline) 1711 1712**Perfect solution!** ✓ 1713 1714## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! 1715 1716### Fixed: Particles Now Appear Above All Dialogs! 1717- **Fixed:** Increased z-index to 9999999 for all particles 1718- **Fixed:** Particles now visible above event dialogs, month picker, etc. 1719- **Result:** Cursor effects and explosions always visible! 1720 1721### The Z-Index Problem 1722 1723**Before (v5.3.4)**: 1724- Particles: z-index 9999 1725- Dialogs: z-index 10000-999999 1726- **Particles hidden behind dialogs!** 1727 1728**After (v5.3.5)**: 1729- Particles: z-index 9999999 1730- Trail: z-index 9999998 1731- Pixels: z-index 9999997 1732- **Particles ALWAYS on top!** 1733 1734### What's Fixed 1735 1736✅ **Main particles** (explosion orbs) 1737✅ **Cursor trail** (glowing dots) 1738✅ **Pixel sparkles** (tiny bright stars) 1739✅ **Flash effect** (click burst) 1740 1741**All now appear above**: 1742- Event dialog popups 1743- Month picker 1744- Day popups 1745- Any modal overlays 1746 1747### Visual Result 1748 1749**Moving cursor over dialog**: 1750``` 1751┌─────────────────────┐ 1752│ Event Dialog │ 1753│ ✦ • ✦ │ ← Sparkles visible! 1754│ → ✦ │ ← Cursor trail visible! 1755│ • ✦ • │ 1756└─────────────────────┘ 1757``` 1758 1759**Clicking on dialog**: 1760``` 1761┌─────────────────────┐ 1762│ ✦ • ✦ • ✦ │ 1763│ • ! • │ ← Explosion visible! 1764│ ✦ • ✦ • ✦ │ 1765└─────────────────────┘ 1766``` 1767 1768**Perfect visibility everywhere!** ✨ 1769 1770## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX 1771 1772### Fixed: Month Picker Now Themed! 1773- **Fixed:** Jump to Month dialog now uses theme colors 1774- **Fixed:** Dialog background, borders, text all themed 1775- **Fixed:** Select dropdowns use theme colors 1776- **Fixed:** Buttons use theme accent colors 1777- **Result:** Month picker matches calendar theme! 1778 1779### Fixed: Cursor Effects Work in Dialogs! 1780- **Fixed:** Cursor trail now works when hovering over dialogs 1781- **Fixed:** Click explosions work when clicking inside dialogs 1782- **Technical:** Changed to capture phase event listeners 1783- **Result:** Effects work EVERYWHERE now! 1784 1785### Month Picker Theming 1786 1787**Before (v5.3.3)**: 1788- White background (hardcoded) 1789- Black text (hardcoded) 1790- No theme integration 1791- Looked out of place 1792 1793**After (v5.3.4)**: 1794- Dialog background: `theme.bg` 1795- Dialog border: `theme.border` 1796- Text color: `theme.text_primary` 1797- Dropdowns: `theme.cell_bg` + `theme.text_primary` 1798- Cancel button: `theme.cell_bg` 1799- Go button: `theme.border` (accent color) 1800 1801**Fully integrated!** ✅ 1802 1803--- 1804 1805### Theme Examples 1806 1807**Matrix Theme**: 1808``` 1809┌─────────────────────────┐ 1810│ Jump to Month │ ← Dark bg, green border 1811│ [February ▼] [2026 ▼] │ ← Dark dropdowns 1812│ [Cancel] [Go] │ ← Green "Go" button 1813└─────────────────────────┘ 1814``` 1815 1816**Pink Theme**: 1817``` 1818┌─────────────────────────┐ 1819│ Jump to Month │ ← Dark bg, pink border 1820│ [February ▼] [2026 ▼] │ ← Dark dropdowns 1821│ [Cancel] [Go] │ ← Pink "Go" button 1822└─────────────────────────┘ 1823With sparkle effects! ✨ 1824``` 1825 1826**Professional Theme**: 1827``` 1828┌─────────────────────────┐ 1829│ Jump to Month │ ← Clean bg, blue border 1830│ [February ▼] [2026 ▼] │ ← Clean dropdowns 1831│ [Cancel] [Go] │ ← Blue "Go" button 1832└─────────────────────────┘ 1833``` 1834 1835--- 1836 1837### Dialog Cursor Fix 1838 1839**The Problem**: 1840Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects! 1841 1842**The Solution**: 1843Use **capture phase** event listeners: 1844```javascript 1845// Before (bubbling phase) 1846document.addEventListener('click', handler) 1847 1848// After (capture phase) 1849document.addEventListener('click', handler, true) 1850 ↑ 1851 Capture phase! 1852``` 1853 1854**Capture phase runs BEFORE stopPropagation!** 1855 1856--- 1857 1858### Now Works Everywhere 1859 1860✅ **Calendar area** 1861✅ **Event dialogs** 1862✅ **Month picker dialog** 1863✅ **Day popup dialogs** 1864✅ **Anywhere on screen** 1865 1866**No more blocked effects!** 1867 1868--- 1869 1870### Technical Details 1871 1872**Event phases**: 1873``` 18741. Capture phase ← We listen here now! 18752. Target phase 18763. Bubbling phase ← stopPropagation blocks this 1877``` 1878 1879**By using capture phase**: 1880- Events caught before stopPropagation 1881- Works in all dialogs 1882- No conflicts with dialog logic 1883 1884--- 1885 1886### All Dialogs Checked 1887 1888✅ **Month picker** - Now themed! 1889✅ **Event dialog** - Already themed 1890✅ **Day popup** - Already themed 1891 1892**Everything consistent!** 1893 1894--- 1895 1896## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨ 1897 1898### ✨ Added: Bright Neon Pixel Sparkles Everywhere! 1899- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail 1900- **Added:** 40 pixel sparkles in click explosions 1901- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar) 1902- **Result:** Maximum sparkle effect! 1903 1904### Tiny Pixel Sparkles 1905 1906**3-6 tiny bright pixels appear with each cursor movement!** 1907 1908**Characteristics**: 1909- Size: 1-2px (single pixel appearance!) 1910- Colors: Bright neon whites and pinks 1911 - Pure white (#fff) - 40% chance 1912 - Hot pink (#ff1493) 1913 - Pink (#ff69b4) 1914 - Light pink (#ffb6c1) 1915 - Soft pink (#ff85c1) 1916- Glow: Triple-layer shadow (intense!) 1917- Spawn: Random 30px radius around cursor 1918- Animations: 1919 - 50% twinkle in place 1920 - 50% float upward 1921 1922**Creates a cloud of sparkles around your cursor!** 1923 1924--- 1925 1926### Click Explosion Enhanced 1927 1928**Now with 40 EXTRA pixel sparkles!** 1929 1930**Click anywhere → BIG BOOM**: 1931- 25 main glowing particles (6-10px) 1932- **40 tiny pixel sparkles (1-2px)** ← NEW! 1933- Bright white flash 1934- Total: 65+ visual elements! 1935 1936**Pixel sparkles in explosion**: 1937- Shoot outward in all directions 1938- Random distances (30-110px) 1939- Multiple bright colors 1940- Some twinkle, some explode 1941- Creates stellar effect! 1942 1943--- 1944 1945### Entire Screen Coverage 1946 1947**Effects now work EVERYWHERE!** 1948 1949**Before (v5.3.2)**: 1950- Only inside calendar viewport 1951- Limited to calendar area 1952 1953**After (v5.3.3)**: 1954- Works on entire screen! ✓ 1955- Cursor trail follows everywhere 1956- Click explosions anywhere 1957- Used `position: fixed` + `clientX/Y` 1958 1959**Move anywhere on the page for sparkles!** 1960 1961--- 1962 1963### Visual Effect 1964 1965**Cursor movement**: 1966``` 1967 • ✦ • ← Tiny pixels 1968 • ✦ • ← Glowing trail 1969✦ • → • ✦ ← Cursor 1970 • ✦ • ← Mixed sizes 1971 • ✦ • ← Sparkle cloud 1972``` 1973 1974**Click explosion**: 1975``` 1976 ✦ • ✦ • ✦ 1977 ✦ • • ✦ 1978✦ • ! • ✦ 1979 ✦ • • ✦ 1980 ✦ • ✦ • ✦ 1981 198265+ particles total! 1983``` 1984 1985--- 1986 1987### Sparkle Details 1988 1989**Trail Pixels** (3-6 per movement): 1990- Size: 1-2px 1991- Spawn rate: Every 40ms 1992- Spread: 30px radius 1993- Duration: 0.6-0.8s 1994- 50% twinkle, 50% float 1995 1996**Explosion Pixels** (40 total): 1997- Size: 1-3px 1998- Spread: 30-110px radius 1999- Duration: 0.4-0.8s 2000- All directions 2001- Intense glow 2002 2003**Main Particles** (25 total): 2004- Size: 4-10px 2005- Spread: 50-150px 2006- Full color palette 2007- Original firework effect 2008 2009--- 2010 2011### Color Distribution 2012 2013**Pixel sparkles favor white**: 2014- 40% pure white (#fff) - brightest! 2015- 60% pink shades - variety 2016 2017**Creates brilliant sparkle effect!** 2018 2019--- 2020 2021### Performance 2022 2023**Still optimized**: 2024- Trail: 30ms throttle 2025- Pixels: 40ms throttle 2026- Auto-cleanup 2027- Hardware accelerated 2028- Smooth 60fps 2029 2030**Lots of sparkles, zero lag!** 2031 2032--- 2033 2034### Full-Screen Magic 2035 2036**Pink theme calendar detected**: 2037```javascript 2038if (pink calendar exists) { 2039 Enable effects for ENTIRE SCREEN 2040 Not just calendar area 2041} 2042``` 2043 2044**Works everywhere on page!** ✨ 2045 2046--- 2047 2048## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! 2049 2050### Changed: Glowing Pink Particles Instead of Emoji Sparkles! 2051- **Removed:** Emoji sparkle images (✨) 2052- **Added:** Glowing pink particle trail following cursor 2053- **Added:** FIREWORKS explosion on click! 2054- **Result:** Beautiful glowing effects, not emoji! 2055 2056### Glowing Cursor Trail 2057 2058**Pink glowing dots follow your cursor!** 2059- Small glowing pink orbs (8px) 2060- Radial gradient glow effect 2061- Multiple box-shadows for depth 2062- Fade out smoothly (0.5s) 2063- Throttled to 30ms for smoothness 2064 2065``` 2066 • • 2067 • → • ← Your cursor 2068 • • 2069``` 2070 2071**Not emoji - actual glowing particles!** 2072 2073--- 2074 2075### Click Fireworks! 2076 2077**Click anywhere on the calendar → BOOM!** 2078 2079**20 pink particles explode outward!** 2080- Radial burst pattern (360° coverage) 2081- Random speeds (50-150px travel) 2082- 4 shades of pink: 2083 - Hot pink (#ff1493) 2084 - Pink (#ff69b4) 2085 - Light pink (#ff85c1) 2086 - Very light pink (#ffc0cb) 2087- Random sizes (4-10px) 2088- Individual glowing halos 2089- Smooth explosion animation 2090 2091**Plus a bright flash at click point!** 2092- 30px radius glow 2093- Intense pink flash 2094- Fades quickly (0.3s) 2095 2096--- 2097 2098### Visual Effect 2099 2100**Cursor movement**: 2101``` 2102 • 2103 • • • 2104 • → • ← Glowing trail 2105 • • • 2106 • 2107``` 2108 2109**Click explosion**: 2110``` 2111 • • • 2112 • • 2113 • BOOM! • ← 20 particles 2114 • • 2115 • • • 2116``` 2117 2118**All particles glow with pink halos!** 2119 2120--- 2121 2122### Particle Details 2123 2124**Trail Particles**: 2125- Size: 8x8px 2126- Color: Pink radial gradient 2127- Shadow: 10px + 20px glow layers 2128- Duration: 0.5s fade 2129- Rate: 30ms throttle 2130 2131**Explosion Particles**: 2132- Size: 4-10px (random) 2133- Colors: 4 pink shades (random) 2134- Shadow: 10px + 20px glow (matches color) 2135- Duration: 0.6-1.0s (random) 2136- Pattern: Perfect circle burst 2137 2138**Flash Effect**: 2139- Size: 30x30px 2140- Color: Bright hot pink 2141- Shadow: 30px + 50px mega-glow 2142- Duration: 0.3s instant fade 2143 2144--- 2145 2146### Performance 2147 2148**Optimized for smoothness**: 2149- Trail throttled to 30ms 2150- Auto-cleanup after animations 2151- CSS hardware acceleration 2152- No memory leaks 2153- Smooth 60fps 2154 2155**Won't slow you down!** 2156 2157--- 2158 2159### Comparison 2160 2161**Before (v5.3.1)**: 2162- ✨ Emoji sparkle images 2163- Static unicode characters 2164- Limited visual impact 2165 2166**After (v5.3.2)**: 2167- Glowing pink particles 2168- Radial gradients + shadows 2169- Beautiful firework explosions 2170- Much more impressive! 2171 2172--- 2173 2174### Only Pink Theme 2175 2176**These effects only appear**: 2177- On `.calendar-theme-pink` elements 2178- Other themes unaffected 2179- Pure pink magic! 2180 2181--- 2182 2183## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨ 2184 2185### ✨ Added: MySpace-Style Sparkle Trail! 2186- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!) 2187- **Toned down:** Reduced glow effects for better taste 2188- **Added:** Sparkles appear on cell hover 2189- **Added:** Sparkles on event hover (left and right sides!) 2190- **Added:** Sparkles on today's cell corners 2191- **Added:** Sparkles on navigation buttons 2192- **Added:** Sparkles in calendar header 2193- **Result:** Pure nostalgic MySpace magic! ✨ 2194 2195### MySpace Sparkle Cursor Trail 2196 2197**The classic effect from 2006!** 2198- Sparkles follow your cursor as you move 2199- Random sizes (12-22px) 2200- Random slight offsets for natural feel 2201- Float up and fade out animation 2202- Throttled to 50ms (smooth, not laggy) 2203- Only on pink theme calendars 2204 2205``` 2206 ✨ 2207 ✨ ✨ 2208✨ → ✨ (cursor trail) 2209 ✨ ✨ 2210 ✨ 2211``` 2212 2213**Pure nostalgia!** 2214 2215--- 2216 2217### Sparkles Everywhere 2218 2219**Calendar cells**: 2220- Hover over any day → ✨ floats up 2221- Smooth 1.5s animation 2222- Centered sparkle 2223 2224**Event items**: 2225- Hover → ✨ on left side 2226- Hover → ✨ on right side 2227- Staggered animations (0.4s delay) 2228- Continuous twinkling 2229 2230**Today's cell**: 2231- ✨ in top-right corner (continuous) 2232- ✨ in bottom-left corner (offset timing) 2233- Always sparkling! 2234 2235**Navigation buttons**: 2236- Hover on < or > → ✨ appears top-right 2237- One-time float animation 2238 2239**Calendar header**: 2240- ✨ on left side (continuous) 2241- ✨ on right side (offset 1s) 2242- Always twinkling 2243 2244--- 2245 2246### Toned Down Glows 2247 2248**Before (v5.3.0)**: TOO MUCH GLOW! 2249- 50px shadows 2250- 4-layer effects 2251- Overwhelming 2252 2253**After (v5.3.1)**: Just right! 2254- 8-15px max shadows (subtle) 2255- 2-layer effects 2256- Professional with personality 2257 2258**Glow reductions**: 2259- Today shimmer: 35px → 12px 2260- Today hover: 50px → 15px 2261- Event glow: 18px → 6px 2262- Badge pulse: 25px → 8px 2263- Container glow: 20px → 8px 2264 2265**Much more tasteful!** 2266 2267--- 2268 2269### Sparkle Animations 2270 2271**sparkle-twinkle** (0.8s): 2272``` 2273Opacity: 0 → 1 → 1 → 0 2274Scale: 0 → 1 → 1 → 0 2275Rotation: 0° → 180° → 360° 2276``` 2277 2278**sparkle-float** (1.5s): 2279``` 2280Moves up: 0px → -50px 2281Opacity: 0 → 1 → 1 → 0 2282Scale: 0 → 1 → 0.8 → 0 2283``` 2284 2285**Pure MySpace magic!** ✨ 2286 2287--- 2288 2289### Where Sparkles Appear 2290 2291✅ **Cursor trail** (continuous while moving) 2292✅ **Calendar cells** (on hover) 2293✅ **Event items** (on hover, left + right) 2294✅ **Today's cell** (continuous, corners) 2295✅ **Navigation buttons** (on hover) 2296✅ **Calendar header** (continuous, sides) 2297 2298**Sparkles EVERYWHERE!** ✨✨✨ 2299 2300--- 2301 2302### Performance 2303 2304**Cursor trail**: 2305- Throttled to 50ms 2306- Auto-cleanup after 1s 2307- No memory leaks 2308- Smooth 60fps 2309 2310**CSS animations**: 2311- Hardware accelerated 2312- No JavaScript overhead (except cursor) 2313- Efficient transforms 2314 2315**Won't slow down your browser!** 2316 2317--- 2318 2319### Pure Nostalgia 2320 2321**Remember MySpace profiles?** 2322- Glitter graphics ✨ 2323- Sparkle cursors ✨ 2324- Auto-play music (ok, we didn't add that) 2325- Animated GIF backgrounds 2326- Comic Sans everywhere 2327 2328**We brought back the sparkles!** ✨ 2329 2330--- 2331 2332### Theme Comparison 2333 2334**Other themes**: Professional and clean 2335**Pink theme**: ✨ SPARKLES EVERYWHERE ✨ 2336 2337**Only pink theme gets the magic!** 2338 2339--- 2340 2341## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨ 2342 2343### Added: Pink Theme Gets BLING! 2344- **Added:** Shimmering animation for today's cell 2345- **Added:** Sparkling text effect on today's date 2346- **Added:** Glowing pulse for event bars 2347- **Added:** Gradient shimmer on headers 2348- **Added:** Extra glow on hover effects 2349- **Added:** Pulsing urgent badge for past due items 2350- **Result:** Pink theme is now FABULOUS! ✨ 2351 2352### Shimmer Effects 2353 2354**Today's Cell**: 2355- Continuous shimmer animation (2 second loop) 2356- Multi-layer glow effect 2357- Pink and hot pink overlapping shadows 2358- Pulses from subtle to intense 2359- Extra sparkle on hover 2360 2361**Today's Date Number**: 2362- Sparkle animation (1.5 second loop) 2363- Text shadow glow effect 2364- Slight scale pulse (100% → 105%) 2365- Pink to hot pink shadow transition 2366 2367### Glow Effects 2368 2369**Event Bars**: 2370- Continuous glow pulse (2 second loop) 2371- Uses event's own color 2372- Adds pink accent glow layer 2373- Creates depth and dimension 2374 2375**Event Items**: 2376- Subtle base glow 2377- Enhanced glow on hover 2378- Slight slide animation on hover 2379- Professional yet playful 2380 2381### Gradient Shimmer 2382 2383**Headers**: 2384- Animated gradient background 2385- 3-color pink gradient flow 2386- Smooth 3-second animation 2387- Creates movement and life 2388- Applies to calendar header and event list header 2389 2390### Badge Effects 2391 2392**TODAY Badge**: 2393- Sparkle animation 2394- Synchronized with today's date 2395- Extra prominence 2396 2397**PAST DUE Badge**: 2398- Urgent pulsing effect (1 second loop) 2399- Orange glow intensifies 2400- Draws attention to urgent items 2401- Faster pulse for urgency 2402 2403### Container Bling 2404 2405**Main Container**: 2406- Multi-layer pink glow 2407- Soft outer shadow 2408- Creates floating effect 2409- Subtle but elegant 2410 2411### Animation Details 2412 2413**pink-shimmer** (2s loop): 2414``` 2415Start: Subtle 5px glow 2416Peak: Intense 35px multi-layer glow 2417End: Back to subtle 2418``` 2419 2420**pink-sparkle** (1.5s loop): 2421``` 2422Start: Base glow + scale 1.0 2423Peak: Intense glow + scale 1.05 2424End: Back to base 2425``` 2426 2427**pink-glow-pulse** (2s loop): 2428``` 2429Start: Small glow (3px, 6px) 2430Peak: Large glow (6px, 12px, 18px) 2431End: Back to small 2432``` 2433 2434**pink-gradient-shimmer** (3s loop): 2435``` 2436Gradient flows across element 2437Creates wave effect 2438Smooth continuous motion 2439``` 2440 2441**pink-pulse-urgent** (1s loop - faster!): 2442``` 2443Start: Orange glow 5px 2444Peak: Orange glow 25px (intense) 2445End: Back to 5px 2446``` 2447 2448### Visual Experience 2449 2450**Today's Cell**: 2451``` 2452┌──┬──┬──┬──┬──┬──┬──┐ 2453│ │ │ ✨ │ │ │ │ │ ← Shimmers constantly 2454│ │ │[9]│ │ │ │ │ ← Sparkles 2455│ │ │ ✨ │ │ │ │ │ ← Glows and pulses 2456└──┴──┴──┴──┴──┴──┴──┘ 2457``` 2458 2459**Event Bars**: 2460``` 2461━━━━━━━ ← Glows and pulses 2462━━━━━━━ ← Each bar animated 2463━━━━━━━ ← Creates rhythm 2464``` 2465 2466**Headers**: 2467``` 2468╔═════════════════════╗ 2469║ ~~~~~~~~~~ ║ ← Gradient flows 2470║ February 2026 ║ ← Shimmer effect 2471╚═════════════════════╝ 2472``` 2473 2474### Theme Comparison 2475 2476**Before (v5.2.8)**: 2477- Pink colors 2478- Static elements 2479- Standard shadows 2480 2481**After (v5.3.0)**: 2482- Pink colors ✓ 2483- Animated shimmer ✨ 2484- Sparkling effects 2485- Glowing pulses ✨ 2486- Moving gradients 2487- BLING! 2488 2489### Performance 2490 2491**All animations**: 2492- Hardware accelerated (transform, opacity) 2493- Smooth 60fps 2494- CSS animations (no JavaScript) 2495- Minimal CPU usage 2496- Disabled in reduced-motion preference 2497 2498### Only for Pink Theme 2499 2500**Effects only apply when**: 2501```css 2502.calendar-theme-pink 2503``` 2504 2505**Other themes unaffected**: 2506- Matrix stays Matrix 2507- Professional stays Professional 2508- Purple stays Purple 2509- Wiki stays clean 2510 2511**Pink gets all the bling!** ✨ 2512 2513### Use Cases 2514 2515**Perfect for**: 2516- Celebrating occasions 2517- Fun team calendars 2518- Personal style expression 2519- Standing out 2520- Making calendar time fabulous 2521 2522**Not just pink, but BLING pink!** ✨ 2523 2524## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS 2525 2526### Fixed: Today's Date Box Now Uses Theme Colors 2527- **Fixed:** Today's day number box now uses theme border color 2528- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light) 2529- **Result:** Today box matches the theme perfectly! 2530 2531### The Issue 2532 2533Today's date had a hardcoded green box: 2534 2535**In style.css**: 2536```css 2537.cal-today .day-num { 2538 background: #008800; /* Hardcoded green! */ 2539 color: white; 2540} 2541``` 2542 2543**Didn't adapt to themes at all!** 2544 2545### The Fix 2546 2547**Now uses theme colors**: 2548```php 2549// Today's day number 2550if ($isToday) { 2551 background: $themeStyles['border'], // Theme's accent color! 2552 color: (professional theme) ? white : bg color 2553} 2554``` 2555 2556### Theme Examples 2557 2558**Matrix Theme**: 2559- Box background: `#00cc07` (matrix green) 2560- Text color: `#242424` (dark background) 2561 2562**Purple Theme**: 2563- Box background: `#9b59b6` (purple) 2564- Text color: `#2a2030` (dark background) 2565 2566**Professional Theme**: 2567- Box background: `#4a90e2` (blue) 2568- Text color: `#ffffff` (white text) 2569 2570**Pink Theme**: 2571- Box background: `#ff1493` (hot pink) 2572- Text color: `#1a0d14` (dark background) 2573 2574**Wiki Theme**: 2575- Box background: Template's `__border__` color 2576- Text color: Template's `__background_site__` color 2577 2578### Visual Result 2579 2580**Matrix Theme**: 2581``` 2582┌──┬──┬──┬──┬──┬──┬──┐ 2583│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2584└──┴──┴──┴──┴──┴──┴──┘ 2585 ↑ 2586 Green box (#00cc07) 2587``` 2588 2589**Professional Theme**: 2590``` 2591┌──┬──┬──┬──┬──┬──┬──┐ 2592│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2593└──┴──┴──┴──┴──┴──┴──┘ 2594 ↑ 2595 Blue box (#4a90e2) 2596``` 2597 2598**Wiki Theme**: 2599``` 2600┌──┬──┬──┬──┬──┬──┬──┐ 2601│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2602└──┴──┴──┴──┴──┴──┴──┘ 2603 ↑ 2604 Template border color 2605``` 2606 2607### Implementation 2608 2609**Inline styles added**: 2610- Background uses `$themeStyles['border']` (theme accent) 2611- Text color uses `$themeStyles['bg']` for contrast 2612- Special case: Professional theme uses white text 2613- All with `!important` to override CSS 2614 2615**CSS cleaned up**: 2616- Removed hardcoded `#008800` background 2617- Removed hardcoded `white` color 2618- Kept structural styles (border-radius, font-weight) 2619 2620### Benefits 2621 2622**Theme Consistency**: 2623- Today box matches theme accent color 2624- Proper contrast with background 2625- Professional appearance 2626 2627**Automatic Adaptation**: 2628- Works with all themes 2629- Works with custom wiki template colors 2630- No manual adjustment needed 2631 2632**Visual Harmony**: 2633- Border color used throughout theme 2634- Today box reinforces theme identity 2635- Consistent design language 2636 2637## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH 2638 2639### Fixed: Table Grid Background Now Matches Cells 2640- **Found:** `grid_bg` was using `__background_alt__` (different from cells!) 2641- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells) 2642- **Result:** Table background no longer shows through cells! 2643 2644### The Layer Problem 2645 2646The table itself had a DIFFERENT background color than its cells! 2647 2648**Before (v5.2.6)**: 2649```php 2650'grid_bg' => __background_alt__, // Table background (#e8e8e8) 2651'cell_bg' => __background_site__, // Cell background (#f5f5f5) 2652``` 2653 2654**The table background was showing THROUGH the cells!** 2655 2656### Why This Happened 2657 2658**Visual layers**: 2659``` 2660Table Element 2661├─ background: __background_alt__ (#e8e8e8) ← Different! 2662└─ Cells 2663 └─ background: __background_site__ (#f5f5f5) ← Different! 2664 2665The table background shows through any gaps! 2666``` 2667 2668### The Fix 2669 2670**After (v5.2.7)**: 2671```php 2672'grid_bg' => __background_site__, // Table background (#f5f5f5) ✓ 2673'cell_bg' => __background_site__, // Cell background (#f5f5f5) ✓ 2674``` 2675 2676**NOW THEY MATCH!** 2677 2678### Where grid_bg Is Used 2679 2680The table element itself: 2681```html 2682<table style="background: __background_alt__"> ← Was showing through! 2683 <tbody> 2684 <tr> 2685 <td style="background: __background_site__">1</td> 2686 </tr> 2687 </tbody> 2688</table> 2689``` 2690 2691Even with cell inline styles, the TABLE background shows through! 2692 2693### All Background Sources Now Unified 2694 2695**Everything now uses __background_site__**: 2696- `bg` → __background_site__ ✓ 2697- `header_bg` → __background_site__ ✓ 2698- `grid_bg` → __background_site__ ✓ (JUST FIXED!) 2699- `cell_bg` → __background_site__ ✓ 2700 2701**Perfect consistency!** 2702 2703### Why It Was Different 2704 2705**Originally the grid was meant to show borders**: 2706- `grid_bg` was `__background_alt__` (slightly different) 2707- Created visual separation between cells 2708- But with transparent/thin cells, it showed through! 2709 2710**Now unified for consistency!** 2711 2712### Visual Result 2713 2714**Before (layers visible)**: 2715``` 2716┌─────────────────┐ 2717│ Grid (#e8e8e8) │ ← Showing through! 2718│ ┌──┬──┬──┐ │ 2719│ │ │ │ │ │ ← Cells (#f5f5f5) 2720│ └──┴──┴──┘ │ 2721└─────────────────┘ 2722``` 2723 2724**After (unified)**: 2725``` 2726┌─────────────────┐ 2727│ Grid (#f5f5f5) │ ← Same color! 2728│ ┌──┬──┬──┐ │ 2729│ │ │ │ │ │ ← Cells (#f5f5f5) 2730│ └──┴──┴──┘ │ 2731└─────────────────┘ 2732Perfect match! 2733``` 2734 2735### Complete Background Mapping 2736 2737**All using __background_site__ now**: 2738- Main container background 2739- Left panel background 2740- Right panel background 2741- Eventlist background 2742- Calendar grid background ← JUST FIXED 2743- Calendar cell backgrounds 2744- Event item backgrounds 2745- Clock header background 2746- Search input background 2747- Past events toggle 2748 2749**EVERYTHING UNIFIED!** 2750 2751## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS 2752 2753### Fixed: Removed Container Backgrounds Showing Through 2754- **Found:** `.calendar-compact-container` had `background: #ffffff;` 2755- **Found:** `.calendar-compact-left` had `background: #fafafa;` 2756- **Found:** `.calendar-compact-right` had `background: #ffffff;` 2757- **Found:** `.event-search-input-inline` had `background: white;` 2758- **Found:** `.past-events-toggle` had `background: #f5f5f5;` 2759- **Result:** Container backgrounds no longer show through cells! 2760 2761### The Container Problem 2762 2763The parent containers had hardcoded backgrounds that were showing through! 2764 2765**Container backgrounds (lines 4-91)**: 2766```css 2767.calendar-compact-container { 2768 background: #ffffff; /* ← Main container! */ 2769} 2770 2771.calendar-compact-left { 2772 background: #fafafa; /* ← Left panel (calendar side)! */ 2773} 2774 2775.calendar-compact-right { 2776 background: #ffffff; /* ← Right panel (events side)! */ 2777} 2778``` 2779 2780**These were showing through the cells and events!** 2781 2782### Why Containers Matter 2783 2784Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through: 2785 2786``` 2787Container (#fafafa) ← Showing through! 2788 └─ Table Cell (#f5f5f5) ← Transparent areas 2789 └─ Content 2790``` 2791 2792### All Backgrounds Removed 2793 2794**v5.2.6 removes**: 2795- `.calendar-compact-container` background 2796- `.calendar-compact-left` background 2797- `.calendar-compact-right` background 2798- `.event-search-input-inline` background 2799- `.past-events-toggle` background & hover 2800 2801**v5.2.5 removed**: 2802- `.calendar-compact-grid tbody td` background 2803- `.calendar-compact-grid thead th` background 2804 2805**v5.2.4 removed**: 2806- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds 2807 2808**v5.2.3 removed**: 2809- `.event-compact-item` background 2810 2811**ALL container and element backgrounds eliminated!** 2812 2813### What Should Work Now 2814 2815**Calendar cells**: No container background showing through ✓ 2816**Event items**: No container background showing through ✓ 2817**Search bar**: Uses template color ✓ 2818**Past events toggle**: Uses template color ✓ 2819 2820### Complete List of Fixes 2821 2822**Containers**: 2823- Main container ✓ 2824- Left panel ✓ 2825- Right panel ✓ 2826 2827**Elements**: 2828- Table cells ✓ 2829- Event items ✓ 2830- Search input ✓ 2831- Past events toggle ✓ 2832 2833**EVERYTHING removed!** 2834 2835### Critical: Clear Caches 2836 2837**Must clear caches or won't work**: 28381. Hard refresh: Ctrl+Shift+R (5 times!) 28392. Clear DokuWiki cache 28403. Close browser completely 28414. Reopen and test 2842 2843**CSS caching is EXTREMELY persistent!** 2844 2845## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS 2846 2847### Fixed: Removed Hardcoded Backgrounds from Table Cells 2848- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`! 2849- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`! 2850- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`! 2851- **Fixed:** Removed ALL hardcoded backgrounds from table CSS 2852- **Result:** Calendar table cells finally use template colors! 2853 2854### The REAL Culprits 2855 2856The generic table CSS was overriding everything! 2857 2858**In style.css (lines 307-356)**: 2859```css 2860.calendar-compact-grid thead th { 2861 background: #f8f8f8; /* ← Header cells hardcoded! */ 2862} 2863 2864.calendar-compact-grid tbody td { 2865 background: #ffffff; /* ← ALL table cells hardcoded! */ 2866} 2867 2868.calendar-compact-grid tbody td:hover { 2869 background: #f0f7ff; /* ← Hover state hardcoded! */ 2870} 2871``` 2872 2873**These apply to ALL `<td>` and `<th>` elements in the calendar table!** 2874 2875### Why This Was the Last One 2876 2877**CSS Specificity Order**: 28781. `.calendar-compact-grid tbody td` (generic - applies to ALL cells) 28792. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells) 28803. Inline styles (should win but didn't) 2881 2882**We removed the specific ones (v5.2.4), but the generic one was still there!** 2883 2884### What We've Removed 2885 2886**v5.2.3**: 2887- `.event-compact-item` background 2888- `.event-compact-item:hover` background 2889 2890**v5.2.4**: 2891- `.cal-empty` background & hover 2892- `.cal-today` background & hover 2893- `.cal-has-events` background & hover 2894 2895**v5.2.5 (FINAL)**: 2896- `.calendar-compact-grid tbody td` background ✓ 2897- `.calendar-compact-grid tbody td:hover` background ✓ 2898- `.calendar-compact-grid thead th` background ✓ 2899 2900**All CSS background overrides ELIMINATED!** 2901 2902### Why It Took 5 Versions 2903 2904**CSS had layers of hardcoded backgrounds**: 2905 2906``` 2907Layer 1: Table cells (.calendar-compact-grid tbody td) 2908 ↓ Overrode inline styles 2909Layer 2: Cell states (.cal-today, .cal-empty, etc.) 2910 ↓ Overrode table cells 2911Layer 3: Event items (.event-compact-item) 2912 ↓ Overrode inline styles 2913 2914ALL had to be removed! 2915``` 2916 2917**We kept finding more specific CSS, but the base table CSS was there all along!** 2918 2919### Visual Result 2920 2921**NOW everything matches**: 2922``` 2923Calendar Table: 2924┌──┬──┬──┬──┬──┬──┬──┐ 2925│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__ 2926├──┼──┼──┼──┼──┼──┼──┤ 2927│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__ 2928├──┼──┼──┼──┼──┼──┼──┤ 2929│ 8│ 9│10│11│12│13│14│ ← All: __background_site__ 2930└──┴──┴──┴──┴──┴──┴──┘ 2931 2932Sidebar Events: 2933┌────────────────────────┐ 2934│ Event │ ← __background_site__ 2935│ Event │ ← __background_site__ 2936└────────────────────────┘ 2937 2938FINALLY ALL MATCHING! ✓ 2939``` 2940 2941### Complete List of Removed CSS 2942 2943**ALL hardcoded backgrounds removed**: 2944- `.event-compact-item` background 2945- `.event-compact-item:hover` background 2946- `.cal-empty` background & hover 2947- `.cal-today` background & hover 2948- `.cal-has-events` background & hover 2949- `.calendar-compact-grid tbody td` background ← NEW 2950- `.calendar-compact-grid tbody td:hover` background ← NEW 2951- `.calendar-compact-grid thead th` background ← NEW 2952 2953**Every single CSS background override is GONE!** 2954 2955### Testing Steps 2956 2957**After installing v5.2.5**: 2958 29591. **Clear browser cache**: Ctrl+Shift+R (3 times!) 29602. **Clear DokuWiki cache**: Click the button 29613. **Close browser completely**: Restart it 29624. **Visit page**: Should finally see matching backgrounds 2963 2964**CSS is EXTREMELY sticky - may need to clear multiple times!** 2965 2966### This Should Be It 2967 2968**No more CSS overrides exist** (we've checked the entire file): 2969- Table cells ✓ Fixed 2970- Cell states ✓ Fixed 2971- Event items ✓ Fixed 2972- Headers ✓ Fixed 2973- Hover states ✓ Fixed 2974 2975**All backgrounds now come from inline styles using template colors!** 2976 2977## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS 2978 2979### Fixed: Removed Hardcoded Backgrounds from Calendar Cells 2980- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`! 2981- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS 2982- **Result:** Calendar cells now use template colors! 2983 2984### The Second Culprit 2985 2986MORE hardcoded backgrounds in the CSS file! 2987 2988**In style.css (lines 359-382)**: 2989```css 2990.cal-empty { 2991 background: #fafafa !important; /* ← Overriding inline styles! */ 2992} 2993 2994.cal-today { 2995 background: #e8f5e9 !important; /* ← Overriding today cell! */ 2996} 2997 2998.cal-today:hover { 2999 background: #c8e6c9 !important; /* ← Overriding hover! */ 3000} 3001 3002.cal-has-events { 3003 background: #fffbf0; /* ← Overriding event cells! */ 3004} 3005 3006.cal-has-events:hover { 3007 background: #fff4d9; /* ← Overriding hover! */ 3008} 3009``` 3010 3011**These were ALL overriding the inline styles!** 3012 3013### The Fix 3014 3015**Removed all hardcoded backgrounds**: 3016```css 3017.cal-empty { 3018 /* background removed - inline style handles this */ 3019 cursor: default !important; 3020} 3021 3022.cal-today { 3023 /* background removed - inline style handles this */ 3024} 3025 3026.cal-has-events { 3027 /* background removed - inline style handles this */ 3028} 3029 3030/* Hover states also removed */ 3031``` 3032 3033### What Was Overridden 3034 3035**v5.2.3 fixed**: 3036- Event items in sidebar ✓ 3037 3038**v5.2.4 fixes**: 3039- Calendar day cells ✓ 3040- Today cell ✓ 3041- Empty cells ✓ 3042- Cells with events ✓ 3043- All hover states ✓ 3044 3045### Why This Kept Happening 3046 3047**CSS had hardcoded backgrounds everywhere**: 30481. Event items: `#ffffff` (fixed in v5.2.3) 30492. Calendar cells: Multiple colors (fixed in v5.2.4) 30503. **All with `!important` flags!** 3051 3052**The inline styles couldn't override them!** 3053 3054### Visual Result 3055 3056**Now ALL backgrounds match**: 3057``` 3058Calendar Grid: 3059┌──┬──┬──┬──┬──┬──┬──┐ 3060│ │ │ │ │ │ │ │ ← All use __background_site__ 3061├──┼──┼──┼──┼──┼──┼──┤ 3062│ │██│ │ │ │ │ │ ← Today uses __background_neu__ 3063├──┼──┼──┼──┼──┼──┼──┤ 3064│ │ │ │ │ │ │ │ ← All match template 3065└──┴──┴──┴──┴──┴──┴──┘ 3066 3067Sidebar Events: 3068┌────────────────────────┐ 3069│ Event │ ← Uses __background_site__ 3070│ Event │ ← Uses __background_site__ 3071└────────────────────────┘ 3072 3073Perfect consistency! 3074``` 3075 3076### CSS Removed 3077 3078**Calendar cells**: 3079- `.cal-empty` background 3080- `.cal-empty:hover` background 3081- `.cal-today` background 3082- `.cal-today:hover` background 3083- `.cal-has-events` background 3084- `.cal-has-events:hover` background 3085 3086**All gone!** ✓ 3087 3088### Important: Clear Caches Again! 3089 3090After installing v5.2.4: 3091 30921. **Hard refresh browser**: Ctrl+Shift+R (twice!) 30932. **Clear DokuWiki cache**: Admin → Clear Cache 30943. **May need to restart browser**: To clear CSS cache 3095 3096**Old CSS is VERY sticky!** 3097 3098### Why It Took So Long 3099 3100**Multiple CSS overrides**: 3101- Event items (v5.2.3) ✓ Fixed 3102- Calendar cells (v5.2.4) ✓ Fixed 3103- Each with different classes 3104- Each with `!important` 3105- Hidden throughout CSS file 3106 3107**Found them all now!** 3108 3109## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS 3110 3111### Fixed: Removed Hardcoded Backgrounds from CSS 3112- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles! 3113- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS 3114- **Result:** Event backgrounds now properly use template colors! 3115 3116### The Root Cause 3117 3118The CSS file was overriding the inline styles with hardcoded white backgrounds! 3119 3120**In style.css (lines 599-616)**: 3121```css 3122.event-compact-item { 3123 background: #ffffff; /* ← This was overriding inline styles! */ 3124} 3125 3126.event-compact-item:hover { 3127 background: #f8f9fa; /* ← And this on hover! */ 3128} 3129``` 3130 3131**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade! 3132 3133### The Fix 3134 3135**Removed hardcoded backgrounds from CSS**: 3136```css 3137.event-compact-item { 3138 /* background removed - set via inline style with template colors */ 3139 display: flex; 3140 /* ... other styles ... */ 3141} 3142 3143.event-compact-item:hover { 3144 box-shadow: 0 1px 3px rgba(0,0,0,0.08); 3145 /* background removed - inline style handles this */ 3146} 3147``` 3148 3149### Why This Was So Difficult to Find 3150 3151**CSS Specificity & Cascade**: 31521. Inline styles with `!important` should win 31532. But CSS that comes after can still apply 31543. The hardcoded `background: #ffffff` was silently overriding 31554. All the PHP code was correct - it was the CSS! 3156 3157**What We Were Doing**: 3158- ✓ Reading template colors correctly 3159- ✓ Setting `cell_bg` to `__background_site__` correctly 3160- ✓ Applying inline styles with `!important` correctly 3161- ✗ CSS file was overriding everything! 3162 3163### What Was Affected 3164 3165**Event items in**: 3166- Main calendar sidebar 3167- Standalone event list 3168- Sidebar widget 3169- All event displays 3170 3171**All had white backgrounds hardcoded in CSS!** 3172 3173### Now Working 3174 3175**Events use template colors**: 3176```html 3177<div class="event-compact-item" 3178 style="background: #f5f5f5 !important; ..."> 3179 ← Now this inline style actually works! 3180</div> 3181``` 3182 3183**No CSS override** ✓ 3184 3185### Testing 3186 3187To verify this works: 31881. Clear browser cache (important!) 31892. Clear DokuWiki cache 31903. Reload page 31914. Events should now match eventlist background 3192 3193**Browser caching can make old CSS persist!** 3194 3195### Visual Result 3196 3197**All backgrounds now matching**: 3198``` 3199┌────────────────────────────┐ 3200│ Eventlist (#f5f5f5) │ ← Template color 3201├────────────────────────────┤ 3202│ Event (#f5f5f5) │ ← Template color (was #ffffff) 3203├────────────────────────────┤ 3204│ Event (#f5f5f5) │ ← Template color (was #ffffff) 3205└────────────────────────────┘ 3206 3207Perfect match! 3208``` 3209 3210### Why Everything Else Worked 3211 3212**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds: 3213- They only had inline styles ✓ 3214- Inline styles worked correctly ✓ 3215- Only event items had the CSS override ✗ 3216 3217### Important Notes 3218 3219**Clear caches**: 3220- Browser cache (Ctrl+Shift+R or Cmd+Shift+R) 3221- DokuWiki cache (Admin → Clear Cache) 3222- Old CSS may be cached! 3223 3224**This was the culprit all along!** 3225 3226## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND 3227 3228### Fixed: Clock Area Now Matches Event Cells 3229- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`) 3230- **Result:** Clock/Today header matches event cell backgrounds! 3231 3232### The Issue 3233 3234The clock area (Today header) was using a different background: 3235 3236**Before (v5.2.1)**: 3237```php 3238'header_bg' => __background_alt__, // Different color (gray #e8e8e8) 3239'cell_bg' => __background_site__, // Event cells (#f5f5f5) 3240``` 3241 3242**After (v5.2.2)**: 3243```php 3244'header_bg' => __background_site__, // Same as cells (#f5f5f5) ✓ 3245'cell_bg' => __background_site__, // Event cells (#f5f5f5) ✓ 3246``` 3247 3248### What's the Clock Area? 3249 3250The clock/Today header in the sidebar: 3251``` 3252┌────────────────────────────┐ 3253│ 3:45:23 PM │ ← Clock area (header_bg) 3254│ ️ --° | Sun, Feb 9, 2026 │ 3255└────────────────────────────┘ 3256``` 3257 3258### All Backgrounds Now Unified 3259 3260**Everything now uses __background_site__**: 3261- Eventlist background ✓ 3262- Calendar cells ✓ 3263- Event items ✓ 3264- Clock/Today header ✓ 3265- Sidebar widget ✓ 3266- All backgrounds match! ✓ 3267 3268### Visual Result 3269 3270**Complete consistency**: 3271``` 3272┌────────────────────────────┐ 3273│ 3:45:23 PM │ ← Same background 3274│ ️ --° | Sun, Feb 9, 2026 │ 3275├────────────────────────────┤ 3276│ Meeting at 2pm │ ← Same background 3277│ Description... │ 3278├────────────────────────────┤ 3279│ Another event │ ← Same background 3280│ More details... │ 3281└────────────────────────────┘ 3282 3283All using __background_site__ (#f5f5f5) 3284``` 3285 3286**Perfect visual harmony!** 3287 3288## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND 3289 3290### Fixed: Calendar Cells Now Match Eventlist Background 3291- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`) 3292- **Result:** Calendar cells now match the eventlist background perfectly! 3293 3294### The Real Issue 3295 3296The eventlist was showing the CORRECT background color all along! 3297 3298**Eventlist was using**: 3299- `bg` → `__background_site__` ✓ (This was correct!) 3300 3301**Calendar cells were using**: 3302- `cell_bg` → `__background__` ✗ (This was wrong!) 3303 3304**They didn't match!** 3305 3306### The Correct Fix 3307 3308**Now everything uses __background_site__**: 3309```php 3310'bg' => __background_site__, // Eventlist (was already correct) 3311'cell_bg' => __background_site__, // Cells (now fixed to match) 3312``` 3313 3314### Why __background_site__? 3315 3316The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background: 3317 3318``` 3319Page Layout: 3320┌────────────────────────────────────┐ 3321│ __background_site__ (page bg) │ ← This is where calendar lives 3322│ │ 3323│ ┌──────────────────────────────┐ │ 3324│ │ __background__ (content bg) │ │ ← Wiki article content 3325│ │ │ │ 3326│ └──────────────────────────────┘ │ 3327│ │ 3328└────────────────────────────────────┘ 3329``` 3330 3331**Calendar should match the page background, not the content background!** 3332 3333### Template Example 3334 3335Typical DokuWiki template: 3336```ini 3337__background_site__ = "#f5f5f5" (Light gray - page background) 3338__background__ = "#ffffff" (White - content area) 3339``` 3340 3341**Before (v5.2.0)**: 3342- Eventlist: `#f5f5f5` (light gray) ✓ Correct 3343- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match 3344 3345**After (v5.2.1)**: 3346- Eventlist: `#f5f5f5` (light gray) ✓ Correct 3347- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED! 3348 3349### All Backgrounds Now Unified 3350 3351**Everything now uses __background_site__**: 3352- Eventlist sidebar background ✓ 3353- Main calendar background ✓ 3354- Calendar day cells ✓ 3355- Sidebar widget ✓ 3356- Event items ✓ 3357- Input fields ✓ 3358- Buttons ✓ 3359 3360**All perfectly matched to the page background!** 3361 3362### Why Version 5.2.0 Was Wrong 3363 3364I incorrectly assumed `__background__` was the right color because it's often white. But the eventlist was already correct using `__background_site__` to match the page, not the content area. 3365 3366**The eventlist knew what it was doing all along!** The cells just needed to catch up. 3367 3368## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS 3369**Note**: This version went the wrong direction. See v5.2.1 for the correct fix. 3370 3371### Fixed: All Backgrounds Now Use __background__ 3372- **Fixed:** `bg` now uses `__background__` instead of `__background_site__` 3373- **Fixed:** Eventlist, calendar cells, and sidebar all match now 3374- **Result:** Completely unified background throughout! 3375 3376### The Issue 3377 3378Different parts of the calendar were using different background sources: 3379 3380**Before (v5.1.9)**: 3381```php 3382'bg' => __background_site__ // Eventlist background (outer page) 3383'cell_bg' => __background__ // Cell backgrounds (content area) 3384``` 3385 3386**These are different colors!** 3387- `__background_site__` = Outer page wrapper (often gray) 3388- `__background__` = Main content area (often white) 3389 3390### The Fix 3391 3392**After (v5.2.0)**: 3393```php 3394'bg' => __background__ // Eventlist background ✓ 3395'cell_bg' => __background__ // Cell backgrounds ✓ 3396``` 3397 3398**Both use the same source!** 3399 3400### What Uses 'bg' 3401 3402The `bg` color is used for: 3403- Eventlist sidebar background 3404- Main calendar container 3405- Sidebar widget background 3406- Form backgrounds 3407- Event dialogs 3408 3409### What Uses 'cell_bg' 3410 3411The `cell_bg` color is used for: 3412- Calendar day cells 3413- Event item backgrounds 3414- Input field backgrounds 3415- Button backgrounds 3416 3417### Why This Matters 3418 3419**Template color hierarchy**: 3420``` 3421__background_site__ → Outer page/body (e.g., #f5f5f5 light gray) 3422__background__ → Main content area (e.g., #ffffff white) 3423__background_alt__ → Sections/headers 3424__background_neu__ → Highlights 3425``` 3426 3427**We want all calendar backgrounds to match the main content area!** 3428 3429### Visual Comparison 3430 3431**Before (v5.1.9)**: Mismatched backgrounds 3432``` 3433┌────────────────────────────────┐ 3434│ Eventlist (gray #f5f5f5) │ ← __background_site__ 3435└────────────────────────────────┘ 3436 3437┌────────────────────────────────┐ 3438│ Calendar │ 3439│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 3440│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 3441│ └──┴──┴──┴──┴──┴──┴──┘ │ 3442└────────────────────────────────┘ 3443Different colors - looks inconsistent 3444``` 3445 3446**After (v5.2.0)**: Unified backgrounds 3447``` 3448┌────────────────────────────────┐ 3449│ Eventlist (white #fff) │ ← __background__ 3450└────────────────────────────────┘ 3451 3452┌────────────────────────────────┐ 3453│ Calendar │ 3454│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 3455│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 3456│ └──┴──┴──┴──┴──┴──┴──┘ │ 3457└────────────────────────────────┘ 3458Same color - perfectly consistent! 3459``` 3460 3461### Template Examples 3462 3463**Light Template**: 3464```ini 3465__background_site__ = "#f5f5f5" (light gray) 3466__background__ = "#ffffff" (white) 3467``` 3468 3469**Before**: Eventlist gray, cells white 3470**After**: Eventlist white, cells white ✓ 3471 3472**Dark Template**: 3473```ini 3474__background_site__ = "#1a1a1a" (very dark) 3475__background__ = "#2d2d2d" (dark) 3476``` 3477 3478**Before**: Eventlist very dark, cells dark 3479**After**: Eventlist dark, cells dark ✓ 3480 3481### Benefits 3482 3483**Visual Consistency**: 3484- All backgrounds match 3485- Clean, unified appearance 3486- Professional look 3487 3488**Correct Template Integration**: 3489- Uses content area color (not page wrapper) 3490- Matches wiki content area 3491- Proper color hierarchy 3492 3493**Works Everywhere**: 3494- Light templates ✓ 3495- Dark templates ✓ 3496- Custom templates ✓ 3497 3498### All Backgrounds Unified 3499 3500**Now using __background__**: 3501- Eventlist background ✓ 3502- Calendar cells ✓ 3503- Sidebar widget ✓ 3504- Event items ✓ 3505- Input fields ✓ 3506- Buttons ✓ 3507- Dialogs ✓ 3508 3509**Perfect harmony throughout!** 3510 3511## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS 3512 3513### Fixed: Wiki Theme Event Backgrounds Not Showing 3514- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!) 3515- **Fixed:** Replaced CSS variables with actual hex colors 3516- **Result:** Event backgrounds now show correctly with template colors! 3517 3518### The Problem 3519 3520CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes! 3521 3522**Before (broken)**: 3523```php 3524'cell_bg' => 'var(--__background__, #fff)', // Doesn't work in inline styles! 3525``` 3526 3527**After (fixed)**: 3528```php 3529'cell_bg' => '#fff', // Actual hex color works! 3530``` 3531 3532### What Was Affected 3533 3534**When style.ini read successfully**: 3535- ✅ Worked fine (uses actual hex colors from file) 3536 3537**When style.ini fallback used**: 3538- ❌ Events had no background 3539- ❌ CSS variables don't work in inline styles 3540- ❌ Looked broken 3541 3542### The Fix 3543 3544**Wiki theme fallback now uses real colors**: 3545```php 3546'wiki' => [ 3547 'bg' => '#f5f5f5', // Real hex (was: var(--__background_site__)) 3548 'border' => '#ccc', // Real hex (was: var(--__border__)) 3549 'cell_bg' => '#fff', // Real hex (was: var(--__background__)) 3550 'cell_today_bg' => '#eee', // Real hex (was: var(--__background_neu__)) 3551 'text_primary' => '#333', // Real hex (was: var(--__text__)) 3552 'text_bright' => '#2b73b7', // Real hex (was: var(--__link__)) 3553 'text_dim' => '#666', // Real hex (was: var(--__text_neu__)) 3554 'grid_bg' => '#e8e8e8', // Real hex (was: var(--__background_alt__)) 3555 // ... all colors now use real hex values 3556] 3557``` 3558 3559### Why CSS Variables Don't Work 3560 3561**CSS variables work**: 3562```css 3563.some-class { 3564 background: var(--__background__, #fff); /* ✓ Works in CSS */ 3565} 3566``` 3567 3568**CSS variables DON'T work**: 3569```html 3570<div style="background: var(--__background__, #fff)"> <!-- ✗ Doesn't work --> 3571``` 3572 3573### How It Works Now 3574 3575**Priority system**: 35761. **Try reading style.ini** → Use actual template hex colors ✓ 35772. **If file not found** → Use fallback hex colors ✓ 35783. **Never use CSS variables in inline styles** ✓ 3579 3580**Both paths now work correctly!** 3581 3582### Visual Result 3583 3584**Events now have proper backgrounds**: 3585``` 3586┌──────────────────────────┐ 3587│ Meeting at 2pm │ ← White background (#fff) 3588│ Description here... │ 3589│ [✏️ Edit] [️ Delete] │ 3590└──────────────────────────┘ 3591 3592Not: 3593┌──────────────────────────┐ 3594│ Meeting at 2pm │ ← No background (broken) 3595│ Description here... │ 3596└──────────────────────────┘ 3597``` 3598 3599### Affected Areas 3600 3601**All event displays**: 3602- Main calendar events ✓ 3603- Sidebar widget events ✓ 3604- Event list items ✓ 3605- Event backgrounds ✓ 3606- Button backgrounds ✓ 3607- Input field backgrounds ✓ 3608 3609**Everything uses real colors now!** 3610 3611## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT 3612 3613### Reorganized: Better Update Tab Layout 3614- **Moved:** Current Version section to the top 3615- **Combined:** Upload and Important Notes side-by-side 3616- **Improved:** Space-efficient two-column layout 3617- **Result:** More information visible at once! 3618 3619### New Layout Order 3620 3621**Version 5.1.8**: 3622``` 36231. Current Version (at top - see what you have) 36242. Upload + Important Notes (side-by-side) 36253. Recent Changes (changelog) 36264. Backups 3627``` 3628 3629### Side-by-Side Design 3630 3631**Upload form (left 60%) + Important Notes (right 40%)**: 3632``` 3633┌──────────────────────────────────────────┐ 3634│ Current Version │ 3635│ Version: 5.1.8 │ 3636│ ✅ Permissions: OK │ 3637└──────────────────────────────────────────┘ 3638 3639┌─────────────────────┬────────────────────┐ 3640│ Upload New │ ⚠️ Important Notes │ 3641│ [Choose File] │ • Replaces files │ 3642│ ☑ Backup first │ • Config preserved │ 3643│ [Upload] [Clear] │ • Events safe │ 3644└─────────────────────┴────────────────────┘ 3645``` 3646 3647### Benefits 3648 3649**Current Version First**: 3650- See what you have immediately 3651- Check permissions at a glance 3652- Know if ready to update 3653 3654**Side-by-Side Layout**: 3655- Upload form and warnings together 3656- Read notes while choosing file 3657- More efficient use of space 3658- Less scrolling needed 3659 3660**Better Information Flow**: 36611. See current version ✓ 36622. Upload new version with notes visible ✓ 36633. Review recent changes ✓ 36644. Manage backups ✓ 3665 3666### Visual Comparison 3667 3668**Before (v5.1.7)**: 3669``` 3670Important Notes (full width) 3671↓ 3672Upload Form (full width) 3673↓ 3674Current Version 3675↓ 3676Recent Changes 3677↓ 3678Backups 3679``` 3680 3681**After (v5.1.8)**: 3682``` 3683Current Version (full width) 3684↓ 3685Upload (60%) | Notes (40%) 3686↓ 3687Recent Changes 3688↓ 3689Backups 3690``` 3691 3692**More compact, better organized!** 3693 3694### Responsive Design 3695 3696**Wide screens**: 3697- Upload and notes side-by-side 3698- Full 1200px width utilized 3699- Efficient space usage 3700 3701**Narrow screens**: 3702- Sections stack gracefully 3703- Flex layout adapts 3704- Still fully functional 3705 3706### Layout Details 3707 3708**Current Version Section**: 3709- Full width (1200px max) 3710- Shows version, author, description 3711- Permission status with icons 3712- Helpful fix commands if needed 3713 3714**Upload/Notes Section**: 3715- Flexbox layout with gap 3716- Upload: `flex:1` (grows) 3717- Notes: `flex:0 0 350px` (fixed 350px) 3718- Both have proper min-width 3719 3720**Recent Changes Section**: 3721- Full width (1200px max) 3722- Compact scrollable view 3723- Color-coded change types 3724- Last 10 versions shown 3725 3726**Backups Section**: 3727- Full width (1200px max) 3728- Manual backup button 3729- Scrollable file list 3730- All actions accessible 3731 3732### Improved Max Widths 3733 3734All sections now use `max-width:1200px` (previously 900px): 3735- Better use of wide screens 3736- Still responsive on narrow screens 3737- Consistent throughout tab 3738 3739## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR 3740 3741### Fixed: Extra Closing Brace 3742- **Fixed:** ParseError on line 1936 (extra closing brace) 3743- **Result:** Manual backup feature now works correctly! 3744 3745### What Was Wrong 3746 3747Extra `}` after the backup section: 3748 3749**Before (broken)**: 3750```php 3751echo '</div>'; 3752} // ← Extra closing brace! 3753 3754echo '<script> 3755``` 3756 3757**After (fixed)**: 3758```php 3759echo '</div>'; 3760 3761echo '<script> 3762``` 3763 3764**Manual backup feature now fully functional!** ✅ 3765 3766## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND 3767 3768### Added: Create Backup Manually Anytime 3769- **Added:** "Create Backup Now" button in Backups section 3770- **Added:** Manual backup action handler with full verification 3771- **Added:** Backups section always visible (even with no backups) 3772- **Added:** Success message showing file size and file count 3773- **Result:** Create backups anytime without needing to upload! 3774 3775### Manual Backup Button 3776 3777**New Layout**: 3778``` 3779┌─────────────────────────────────────┐ 3780│ Backups [ Create Backup Now] │ 3781├─────────────────────────────────────┤ 3782│ Backup File Size │ 3783│ calendar.backup.v5.1.6... 243 KB │ 3784│ [ Download] [✏️ Rename] [️ Delete] │ 3785└─────────────────────────────────────┘ 3786``` 3787 3788**Always visible - even with no backups**: 3789``` 3790┌─────────────────────────────────────┐ 3791│ Backups [ Create Backup Now] │ 3792├─────────────────────────────────────┤ 3793│ No backups yet. Click "Create │ 3794│ Backup Now" to create your first │ 3795│ backup. │ 3796└─────────────────────────────────────┘ 3797``` 3798 3799### How It Works 3800 3801**Click the button**: 38021. Confirm: "Create a backup of the current plugin version?" 38032. System creates backup ZIP 38043. Verifies: File count (30+ files) 38054. Verifies: File size (200KB+) 38065. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)" 3807 3808**Backup naming**: 3809``` 3810calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 3811 ^^^^^^ 3812 "manual" tag identifies manual backups 3813``` 3814 3815### Use Cases 3816 3817**Before updates**: 3818- Create safety backup before uploading new version 3819- Have multiple restore points 3820- Test new features with fallback 3821 3822**Regular backups**: 3823- Weekly/monthly backup schedule 3824- Before making configuration changes 3825- After important customizations 3826 3827**Development**: 3828- Backup before code experiments 3829- Save working states 3830- Quick rollback points 3831 3832### Full Verification 3833 3834**Same checks as automatic backups**: 3835- ✅ File count check (minimum 10, expected 30+) 3836- ✅ File size check (minimum 1KB, expected 200KB+) 3837- ✅ Existence check (file actually created) 3838- ✅ Automatic cleanup on failure 3839 3840**Success message includes**: 3841- Backup filename 3842- File size (human-readable) 3843- Number of files backed up 3844 3845### Example Messages 3846 3847**Success**: 3848``` 3849✓ Manual backup created successfully: 3850 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 3851 (243 KB, 31 files) 3852``` 3853 3854**Failure Examples**: 3855``` 3856❌ Plugin directory is not readable. 3857 Please check permissions. 3858 3859❌ Backup incomplete: Only 5 files were added (expected 30+). 3860 Backup failed. 3861 3862❌ Backup file is too small (342 bytes). 3863 Only 3 files were added. Backup failed. 3864``` 3865 3866### Benefits 3867 3868**On-Demand Safety**: 3869- Create backups anytime 3870- No need to upload new version 3871- Quick and easy 3872 3873**Peace of Mind**: 3874- Backup before risky changes 3875- Multiple restore points 3876- Safe experimentation 3877 3878**Professional Workflow**: 3879- Regular backup schedule 3880- Version snapshots 3881- Disaster recovery 3882 3883### Backup Section Improvements 3884 3885**Always Visible**: 3886- Section shows even with 0 backups 3887- Button always accessible 3888- Clear call-to-action 3889 3890**Better Header**: 3891- Title and button on same row 3892- Clean, professional layout 3893- Space-efficient design 3894 3895### Technical Details 3896 3897**New Action**: `create_manual_backup` 3898 3899**New Function**: `createManualBackup()` 3900- Gets current version 3901- Creates timestamped filename with "manual" tag 3902- Uses same verification as auto-backups 3903- Shows detailed success/error messages 3904 3905**File Naming Convention**: 3906``` 3907Automatic (on upload): 3908calendar.backup.v5.1.6.2026-02-09_12-30-45.zip 3909 3910Manual (button click): 3911calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 3912 ^^^^^^^ 3913 Easy to identify! 3914``` 3915 3916### Permissions Required 3917 3918- **Read access**: Plugin directory 3919- **Write access**: Parent plugins directory 3920 3921**Same as automatic backups** - no additional permissions needed! 3922 3923## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION 3924 3925### Enhanced: Backup Creation with Robust Verification 3926- **Added:** File count validation (must have 10+ files) 3927- **Added:** File size validation (must be 1KB+ minimum) 3928- **Added:** Return value from addDirectoryToZip (counts files added) 3929- **Added:** Detailed error messages showing file count 3930- **Added:** Automatic deletion of invalid/incomplete backups 3931- **Enhanced:** Exception handling with proper error propagation 3932- **Result:** Backups are now guaranteed to be complete or fail clearly! 3933 3934### What Changed 3935 3936**Before (v5.1.4)**: 3937```php 3938$this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 3939$zip->close(); 3940// No verification - could create empty or partial backup 3941``` 3942 3943**After (v5.1.5)**: 3944```php 3945$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 3946$zip->close(); 3947 3948// Verify backup exists 3949if (!file_exists($backupPath)) { 3950 redirect('Backup file was not created'); 3951} 3952 3953// Verify backup has content 3954$backupSize = filesize($backupPath); 3955if ($backupSize < 1000) { 3956 unlink($backupPath); 3957 redirect('Backup too small: ' . $backupSize . ' bytes'); 3958} 3959 3960// Verify file count 3961if ($fileCount < 10) { 3962 unlink($backupPath); 3963 redirect('Only ' . $fileCount . ' files added (expected 30+)'); 3964} 3965``` 3966 3967### Backup Validation Checks 3968 3969**Three-Layer Verification**: 3970 39711. **File Count Check**: 3972 - Minimum: 10 files required 3973 - Expected: 30+ files 3974 - Action: Delete backup if too few files 3975 39762. **Size Check**: 3977 - Minimum: 1KB (1000 bytes) 3978 - Expected: 200-250KB 3979 - Action: Delete backup if too small 3980 39813. **Existence Check**: 3982 - Verify file was actually created 3983 - Check ZIP archive is valid 3984 - Action: Error if file missing 3985 3986### Enhanced Error Reporting 3987 3988**Detailed Error Messages**: 3989``` 3990❌ "Backup file was not created" 3991❌ "Backup too small (342 bytes). Only 3 files added." 3992❌ "Only 5 files added (expected 30+). Backup aborted." 3993❌ "Too many errors adding files: Failed to add X, Y, Z..." 3994❌ "Directory does not exist: /path/to/dir" 3995❌ "Directory is not readable: /path/to/dir" 3996``` 3997 3998**Now you know exactly what went wrong!** 3999 4000### Improved addDirectoryToZip Function 4001 4002**Returns File Count**: 4003```php 4004private function addDirectoryToZip($zip, $dir, $zipPath = '') { 4005 $fileCount = 0; 4006 $errors = []; 4007 4008 // Validation 4009 if (!is_dir($dir)) throw new Exception("Directory does not exist"); 4010 if (!is_readable($dir)) throw new Exception("Not readable"); 4011 4012 // Add files 4013 foreach ($files as $file) { 4014 if ($zip->addFile($filePath, $relativePath)) { 4015 $fileCount++; 4016 } else { 4017 $errors[] = "Failed to add: " . $filename; 4018 } 4019 } 4020 4021 // Check error threshold 4022 if (count($errors) > 5) { 4023 throw new Exception("Too many errors"); 4024 } 4025 4026 return $fileCount; // Returns count for verification! 4027} 4028``` 4029 4030### Safety Features 4031 4032**Invalid Backup Cleanup**: 4033- Failed backups are automatically deleted 4034- No partial/corrupt backups left behind 4035- Clean error state 4036 4037**Error Threshold**: 4038- Allow up to 5 minor file errors (logs warnings) 4039- More than 5 errors = complete failure 4040- Prevents partially corrupt backups 4041 4042**Directory Validation**: 4043- Check directory exists before processing 4044- Check directory is readable 4045- Fail fast with clear errors 4046 4047### Benefits 4048 4049**Guaranteed Complete Backups**: 4050- ✅ All files included or backup fails 4051- ✅ No silent failures 4052- ✅ Clear error messages 4053- ✅ Automatic cleanup 4054 4055**Better Debugging**: 4056- Know exactly how many files were added 4057- See specific errors for missing files 4058- Understand why backup failed 4059 4060**User Confidence**: 4061- Backup succeeds = complete backup 4062- Backup fails = clear error message 4063- No ambiguity 4064 4065### Example Scenarios 4066 4067**Scenario 1: Permission Issue** 4068``` 4069User uploads new version 4070System starts backup 4071Error: "Directory is not readable: /lib/plugins/calendar/" 4072Backup fails before creating file 4073User sees clear error message 4074``` 4075 4076**Scenario 2: Partial Backup** 4077``` 4078User uploads new version 4079System creates backup 4080Only 5 files added (disk issue?) 4081Size: 450 bytes 4082Verification fails 4083Incomplete backup deleted 4084Error: "Only 5 files added (expected 30+)" 4085``` 4086 4087**Scenario 3: Success** 4088``` 4089User uploads new version 4090System creates backup 409131 files added 4092Size: 240KB 4093All verifications pass ✅ 4094Update proceeds 4095``` 4096 4097### Testing Recommendations 4098 4099After installing v5.1.5: 41001. Upload a new version with backup enabled 41012. Check for success message 41023. Verify backup file exists in /lib/plugins/ 41034. Check backup file size (should be ~240KB) 41045. If backup fails, read error message carefully 4105 4106**Your backups are now bulletproof!** 4107 4108## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED 4109 4110### ✅ Verified: Backup System Working Correctly 4111- **Verified:** addDirectoryToZip function includes all files recursively 4112- **Verified:** Backups contain all 31+ files from calendar directory 4113- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed) 4114- **Info:** Backup sizes grow slightly with each version (more code = more features!) 4115- **Result:** Backup system is working perfectly! 4116 4117### Backup System Details 4118 4119**What Gets Backed Up**: 4120- All PHP files (syntax.php, admin.php, action.php, etc.) 4121- All JavaScript files (calendar-main.js, script.js) 4122- All documentation (CHANGELOG.md, README.md, all guides) 4123- All configuration (sync_config.php) 4124- All language files 4125- All assets and resources 4126- **Everything in the calendar/ directory!** 4127 4128**Backup Size Analysis**: 4129``` 4130Version 5.0.4: 233KB (normal) 4131Version 5.0.5: 234KB (normal) 4132Version 5.0.6: 235KB (normal) 4133Version 5.0.7: 236KB (normal) 4134Version 5.0.8: 237KB (normal) 4135Version 5.0.9: 237KB (normal) 4136Version 5.1.0: 238KB (normal) 4137Version 5.1.1: 238KB (normal) 4138Version 5.1.2: 240KB (normal - added AJAX features) 4139Version 5.1.3: 240KB (normal) 4140``` 4141 4142**Why Sizes Grow**: 4143- More features = more code 4144- Longer CHANGELOG 4145- Additional documentation 4146- New functionality 4147- **This is expected and normal!** 4148 4149**Compression Ratio**: 4150``` 4151Uncompressed: ~1.0 MB (source files) 4152Compressed: ~240 KB (ZIP archive) 4153Ratio: ~24% (excellent compression!) 4154``` 4155 4156### Backup File Contents 4157 4158**31 Files Included**: 4159``` 4160admin.php (216KB - main admin interface) 4161syntax.php (173KB - calendar rendering) 4162calendar-main.js (102KB - JavaScript functionality) 4163CHANGELOG.md (268KB - complete version history) 4164style.css (57KB - all styling) 4165action.php (38KB - DokuWiki actions) 4166sync_outlook.php (32KB - Outlook integration) 4167+ 24 other files (docs, configs, helpers) 4168``` 4169 4170**All files successfully included!** ✅ 4171 4172### How Backups Work 4173 4174**Creation Process**: 41751. User uploads new plugin version 41762. Checkbox "Create backup first" (checked by default) 41773. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip` 41784. Backup saved to: `/lib/plugins/` directory 41795. Then proceeds with update 4180 4181**Backup Function**: 4182```php 4183private function addDirectoryToZip($zip, $dir, $zipPath = '') { 4184 $files = new RecursiveIteratorIterator( 4185 new RecursiveDirectoryIterator($dir), 4186 RecursiveIteratorIterator::LEAVES_ONLY 4187 ); 4188 foreach ($files as $file) { 4189 if (!$file->isDir()) { 4190 $zip->addFile($filePath, $relativePath); 4191 } 4192 } 4193} 4194``` 4195 4196**Recursive = Gets Everything!** ✅ 4197 4198### Verification Results 4199 4200**Test Results**: 4201- ✅ All 31 files present in zip 4202- ✅ All subdirectories included (lang/en/) 4203- ✅ File sizes match originals 4204- ✅ Compression works properly 4205- ✅ No files missing 4206- ✅ Backup can be restored 4207 4208**File Count**: 4209``` 4210Source directory: 31 files 4211Backup ZIP: 34 items (31 files + 3 directories) 4212Status: COMPLETE ✅ 4213``` 4214 4215### Backup Best Practices 4216 4217**Always enabled by default** ✅ 4218**Stored in accessible location** ✅ 4219**Timestamped filenames** ✅ 4220**Complete directory backup** ✅ 4221**Easy to restore** ✅ 4222 4223### Conclusion 4224 4225The backup system is working perfectly. The file sizes are appropriate and expected: 4226- Compressed size: ~240KB (good compression) 4227- Uncompressed size: ~1MB (all source files) 4228- All files included: YES ✅ 4229- Growing size over versions: Normal (more features!) 4230 4231**Your backups are complete and reliable!** 4232 4233## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR 4234 4235### Fixed: JavaScript Syntax Error in AJAX Function 4236- **Fixed:** ParseError on line 1947 (deleteBackup function) 4237- **Fixed:** Escaped all single quotes in JavaScript strings 4238- **Result:** AJAX backup deletion now works correctly! 4239 4240### What Was Wrong 4241 4242JavaScript inside PHP echo needs escaped quotes: 4243 4244**Before (broken)**: 4245```javascript 4246formData.append('action', 'delete_backup'); // PHP interprets quotes 4247``` 4248 4249**After (fixed)**: 4250```javascript 4251formData.append(\'action\', \'delete_backup\'); // Escaped for PHP 4252``` 4253 4254### All Quotes Escaped 4255 4256Fixed in deleteBackup function: 4257- ✅ FormData.append() calls 4258- ✅ fetch() URL 4259- ✅ querySelector() calls 4260- ✅ createElement() call 4261- ✅ All string literals 4262- ✅ Error messages 4263 4264**JavaScript now works!** ✓ 4265 4266## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT 4267 4268### Improved: Update Tab Further Refined 4269- **Moved:** Important Notes to very top (above upload) 4270- **Enhanced:** Delete backup now uses AJAX (no page refresh!) 4271- **Added:** Smooth fade-out animation when deleting backups 4272- **Added:** Success message after deletion 4273- **Auto-remove:** Backup section disappears if last backup deleted 4274- **Result:** Smoother, more polished experience! 4275 4276### New Layout Order 4277 4278**Final Order (v5.1.2)**: 4279``` 42801. ⚠️ Important Notes (warnings at top) 42812. Upload New Version (with Clear Cache button) 42823. Current Version (info) 42834. Recent Changes (changelog) 42845. Available Backups (if any) 4285``` 4286 4287### AJAX Backup Deletion 4288 4289**Before (v5.1.1)**: 4290- Click Delete → Page refreshes → Scroll back down 4291- Lose position on page 4292- Page reload is jarring 4293 4294**After (v5.1.2)**: 4295- Click Delete → Confirm 4296- Row fades out smoothly 4297- Row disappears 4298- Success message shows at top 4299- Success message fades after 3 seconds 4300- If last backup: entire section fades away 4301- **No page refresh!** ✓ 4302 4303### Visual Flow 4304 4305**Delete Animation**: 4306``` 43071. Click ️ Delete 43082. Confirm dialog 43093. Row fades out (0.3s) 43104. Row removed 43115. Success message appears 43126. Message fades after 3s 4313``` 4314 4315**If Last Backup**: 4316``` 43171. Delete last backup 43182. Row fades out 43193. Entire "Available Backups" section fades 43204. Section removed 43215. Clean interface ✓ 4322``` 4323 4324### Success Message 4325 4326After deleting: 4327``` 4328┌──────────────────────────────┐ 4329│ ✓ Backup deleted: filename │ ← Appears at top 4330└──────────────────────────────┘ 4331 Fades after 3 seconds 4332``` 4333 4334### Benefits 4335 4336**Important Notes First**: 4337- Warnings before actions ✓ 4338- Read before uploading ✓ 4339- Clear expectations ✓ 4340 4341**AJAX Deletion**: 4342- No page refresh ✓ 4343- Smooth animations ✓ 4344- Stay in context ✓ 4345- Professional feel ✓ 4346 4347**Auto-Cleanup**: 4348- Empty list disappears ✓ 4349- Clean interface ✓ 4350- No clutter ✓ 4351 4352### Technical Implementation 4353 4354**AJAX Request**: 4355```javascript 4356fetch('?do=admin&page=calendar&tab=update', { 4357 method: 'POST', 4358 body: formData 4359}) 4360``` 4361 4362**DOM Manipulation**: 4363- Fade out row 4364- Remove element 4365- Show success 4366- Remove section if empty 4367 4368**Smooth Transitions**: 4369- 300ms fade animations 4370- Clean visual feedback 4371- Professional polish 4372 4373## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB 4374 4375### Improved: Update Tab Layout Reorganized 4376- **Moved:** Upload section to the top of the page 4377- **Added:** Clear Cache button next to Upload & Install button 4378- **Changed:** "Current Version" section moved below upload 4379- **Result:** Better workflow - upload first, then see version info! 4380 4381### New Layout Order 4382 4383**Before (v5.1.0)**: 4384``` 43851. Clear Cache (standalone) 43862. Current Version 43873. Recent Changes 43884. Upload New Version 43895. Warning Box 43906. Backups 4391``` 4392 4393**After (v5.1.1)**: 4394``` 43951. Upload New Version (with Clear Cache button side-by-side) 43962. Warning Box 43973. Current Version 43984. Recent Changes 43995. Backups 4400``` 4401 4402### Visual Result 4403 4404**Top of Update Tab**: 4405``` 4406┌─────────────────────────────────┐ 4407│ Upload New Version │ 4408│ ┌─────────────────────────────┐ │ 4409│ │ [Choose File] │ │ 4410│ │ ☑ Create backup first │ │ 4411│ │ ┌──────────────┬──────────┐ │ │ 4412│ │ │ Upload & │️ Clear │ │ │ 4413│ │ │ Install │ Cache │ │ │ 4414│ │ └──────────────┴──────────┘ │ │ 4415│ └─────────────────────────────┘ │ 4416│ │ 4417│ ⚠️ Important Notes │ 4418│ • Will replace all files │ 4419│ • Config preserved │ 4420│ │ 4421│ Current Version │ 4422│ Version: 5.1.1 │ 4423└─────────────────────────────────┘ 4424``` 4425 4426### Benefits 4427 4428**Better Workflow**: 4429- Primary action (upload) is first 4430- Clear cache conveniently next to install 4431- No scrolling to find upload button 4432- Logical top-to-bottom flow 4433 4434**Side-by-Side Buttons**: 4435- Upload & Install (green) 4436- Clear Cache (orange) 4437- Both common actions together 4438- Easy to access after upload 4439 4440**Improved UX**: 4441- Upload is most important → now at top 4442- Version info is reference → moved down 4443- Related actions grouped 4444- Cleaner organization 4445 4446### Button Layout 4447 4448``` 4449┌──────────────────┬──────────────┐ 4450│ Upload & │ ️ Clear │ 4451│ Install │ Cache │ 4452│ (Green) │ (Orange) │ 4453└──────────────────┴──────────────┘ 4454``` 4455 4456**Green = Primary Action** 4457**Orange = Secondary Action** 4458 4459Both easily accessible! 4460 4461## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND 4462 4463### Changed: Admin Section Backgrounds Now Use __background__ 4464- **Changed:** All section boxes now use `__background__` instead of `__background_alt__` 4465- **Result:** Cleaner, more unified admin interface! 4466 4467### Background Usage Update 4468 4469**Before (v5.0.9)**: 4470```php 4471Section boxes: bg_alt (__background_alt__) 4472Content areas: bg (__background__) 4473``` 4474 4475**After (v5.1.0)**: 4476```php 4477Section boxes: bg (__background__) 4478Content areas: bg (__background__) 4479``` 4480 4481### Why This Change? 4482 4483**More unified appearance**: 4484- Sections and content use same background 4485- Creates cleaner, more cohesive look 4486- Borders provide visual separation 4487- Matches typical admin UI patterns 4488 4489**Template color hierarchy**: 4490``` 4491__background_site__ → Outer page wrapper 4492__background__ → Content & sections (BOTH now use this) 4493__background_alt__ → Reserved for special panels/highlights 4494__background_neu__ → Special highlights 4495``` 4496 4497### Visual Result 4498 4499**Light Template**: 4500```ini 4501__background__ = "#ffffff" 4502__background_alt__ = "#e8e8e8" 4503``` 4504 4505**Before**: 4506``` 4507Admin Page: 4508┌─────────────────────┐ 4509│ ┌─────────────────┐ │ 4510│ │ Section Box │ │ ← Gray (#e8e8e8) 4511│ │ ┌─────────────┐ │ │ 4512│ │ │ Content │ │ │ ← White (#fff) 4513│ │ └─────────────┘ │ │ 4514│ └─────────────────┘ │ 4515└─────────────────────┘ 4516Two-tone appearance 4517``` 4518 4519**After**: 4520``` 4521Admin Page: 4522┌─────────────────────┐ 4523│ ┌─────────────────┐ │ 4524│ │ Section Box │ │ ← White (#fff) 4525│ │ ┌─────────────┐ │ │ 4526│ │ │ Content │ │ │ ← White (#fff) 4527│ │ └─────────────┘ │ │ 4528│ └─────────────────┘ │ 4529└─────────────────────┘ 4530Unified, clean appearance 4531Borders provide separation 4532``` 4533 4534**Dark Template**: 4535```ini 4536__background__ = "#2d2d2d" 4537__background_alt__ = "#3a3a3a" 4538``` 4539 4540**After**: 4541``` 4542Admin Page: 4543┌─────────────────────┐ 4544│ ┌─────────────────┐ │ 4545│ │ Section Box │ │ ← Dark (#2d2d2d) 4546│ │ ┌─────────────┐ │ │ 4547│ │ │ Content │ │ │ ← Dark (#2d2d2d) 4548│ │ └─────────────┘ │ │ 4549│ └─────────────────┘ │ 4550└─────────────────────┘ 4551Unified dark appearance 4552Accent borders provide definition 4553``` 4554 4555### Benefits 4556 4557**Cleaner Look**: 4558- No more alternating gray/white 4559- More professional appearance 4560- Less visual noise 4561- Unified color scheme 4562 4563**Better Consistency**: 4564- Matches modern admin UI patterns 4565- Borders define sections, not colors 4566- Simpler, cleaner design 4567- Easier on the eyes 4568 4569**Template Friendly**: 4570- Works with any background color 4571- Light or dark templates 4572- Custom colors 4573- Always looks cohesive 4574 4575### All Sections Updated 4576 4577✅ Outlook Sync config sections 4578✅ Manage Events sections 4579✅ Update Plugin sections 4580✅ Themes tab sections 4581✅ Week start day section 4582✅ All form sections 4583 4584**Complete unified theming!** 4585 4586## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB 4587 4588### Fixed: Syntax Error in Theme Cards 4589- **Fixed:** ParseError on line 4461 (Purple theme card) 4590- **Fixed:** Malformed ternary expressions from sed replacement 4591- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki) 4592- **Result:** Admin pages work correctly! 4593 4594### What Was Wrong 4595 4596The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions: 4597 4598**Before (broken)**: 4599```php 4600? '#9b59b6' : ' . $colors['border'] . ') 4601// Extra quote and dot created syntax error 4602``` 4603 4604**After (fixed)**: 4605```php 4606? '#9b59b6' : $colors['border']) 4607// Clean ternary expression 4608``` 4609 4610### All Theme Cards Fixed 4611 4612- ✅ Purple Dream card 4613- ✅ Professional Blue card 4614- ✅ Pink Bling card 4615- ✅ Wiki Default card 4616 4617### Now Working 4618 4619**Theme selection page loads** ✓ 4620**All cards display properly** ✓ 4621**Template colors applied** ✓ 4622**No syntax errors** ✓ 4623 4624## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING 4625 4626### Fixed: Themes Tab Backgrounds & Correct Template Color Mapping 4627- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites) 4628- **Fixed:** Main background now uses `__background__` instead of `__background_site__` 4629- **Fixed:** Theme selection cards use template backgrounds 4630- **Fixed:** Week start options use template backgrounds 4631- **Result:** Perfect color mapping throughout admin! 4632 4633### Color Mapping Correction 4634 4635**Before (v5.0.7)**: 4636```php 4637bg: __background_site__ // Wrong - this is outer page bg 4638bg_alt: __background_alt__ 4639``` 4640 4641**After (v5.0.8)**: 4642```php 4643bg: __background__ // Correct - main content bg 4644bg_alt: __background_alt__ 4645``` 4646 4647### Why This Matters 4648 4649**Template color hierarchy**: 4650``` 4651__background_site__ → Outer page/site background 4652__background__ → Main content area (CORRECT for admin) 4653__background_alt__ → Sections/panels 4654__background_neu__ → Highlights 4655``` 4656 4657**Admin should use**: 4658- `__background__` for input fields, content areas 4659- `__background_alt__` for section boxes, panels 4660 4661### Themes Tab Fixed 4662 4663**Removed all hardcoded colors**: 4664```php 4665Before: '#ddd', '#fff', '#dee2e6' 4666After: $colors['border'], $colors['bg'], $colors['border'] 4667``` 4668 4669**Now themed**: 4670- ✅ Week start section background 4671- ✅ Week start option backgrounds 4672- ✅ Theme card backgrounds 4673- ✅ Theme card borders 4674- ✅ All borders throughout 4675 4676### Visual Result 4677 4678**Light Template**: 4679```ini 4680__background__ = "#ffffff" 4681__background_alt__ = "#e8e8e8" 4682``` 4683 4684**Admin Before (v5.0.7)**: 4685``` 4686Input fields: #f5f5f5 (site bg - wrong) 4687Sections: #e8e8e8 (alt bg - correct) 4688``` 4689 4690**Admin After (v5.0.8)**: 4691``` 4692Input fields: #ffffff (content bg - correct!) 4693Sections: #e8e8e8 (alt bg - correct!) 4694``` 4695 4696**Dark Template**: 4697```ini 4698__background__ = "#2d2d2d" 4699__background_alt__ = "#3a3a3a" 4700``` 4701 4702**Admin After (v5.0.8)**: 4703``` 4704Input fields: #2d2d2d (content bg - perfect!) 4705Sections: #3a3a3a (alt bg - perfect!) 4706``` 4707 4708### Complete Themes Tab 4709 4710**Week Start Options**: 4711``` 4712┌─────────────────────────┐ 4713│ Week Start Day │ ← bg_alt 4714│ ┌─────────┬───────────┐ │ 4715│ │ Monday │ Sunday │ │ ← bg (when not selected) 4716│ └─────────┴───────────┘ │ 4717└─────────────────────────┘ 4718``` 4719 4720**Theme Cards**: 4721``` 4722┌─────────────────────────┐ 4723│ Matrix Edition │ ← bg (when not selected) 4724│ Classic green theme │ border (when not selected) 4725└─────────────────────────┘ 4726 4727┌═════════════════════════┐ 4728│ Purple Dream │ ← rgba green tint (when selected) 4729│ Elegant purple theme │ #00cc07 border (when selected) 4730└═════════════════════════┘ 4731``` 4732 4733### Perfect Integration 4734 4735**All admin pages now**: 4736- Content areas: `__background__` ✓ 4737- Section boxes: `__background_alt__` ✓ 4738- Borders: `__border__` ✓ 4739- Text: `__text__` ✓ 4740 4741**Matches wiki perfectly**: 4742- Same white content areas 4743- Same gray section boxes 4744- Same border colors 4745- Same text colors 4746 4747### No More Issues 4748 4749**Fixed**: 4750- ❌ Site background on content areas → ✅ Content background 4751- ❌ Hardcoded white on themes tab → ✅ Template background 4752- ❌ Hardcoded borders (#ddd) → ✅ Template borders 4753 4754**Result**: 4755- Perfect color hierarchy ✓ 4756- Correct background levels ✓ 4757- Complete template integration ✓ 4758 4759## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING 4760 4761### Fixed: All Admin Backgrounds Use Template Colors 4762- **Fixed:** All section backgrounds use `__background_alt__` 4763- **Fixed:** All content backgrounds use `__background__` 4764- **Fixed:** All borders use `__border__` 4765- **Fixed:** All text uses `__text__` 4766- **Result:** Complete admin template integration! 4767 4768### All Replacements 4769 4770**Backgrounds**: 4771```php 4772Before: background: #f9f9f9 4773After: background: ' . $colors['bg_alt'] . ' 4774 4775Before: background: #fff / background: white 4776After: background: ' . $colors['bg'] . ' 4777``` 4778 4779**Borders**: 4780```php 4781Before: border: 1px solid #ddd 4782Before: border: 1px solid #e0e0e0 4783Before: border: 1px solid #eee 4784After: border: 1px solid ' . $colors['border'] . ' 4785``` 4786 4787**Text**: 4788```php 4789Before: color: #333 4790Before: color: #666 4791After: color: ' . $colors['text'] . ' 4792``` 4793 4794### Complete Admin Coverage 4795 4796**All tabs now themed**: 4797- ✅ Manage Events tab 4798- ✅ Update Plugin tab 4799- ✅ Outlook Sync tab 4800- ✅ Themes tab 4801- ✅ Tab navigation 4802- ✅ All sections 4803- ✅ All inputs 4804- ✅ All borders 4805- ✅ All text 4806 4807### Visual Result 4808 4809**Light Template**: 4810``` 4811Admin Page: 4812┌──────────────────────────┐ 4813│ Tab Navigation │ ← Template borders 4814├──────────────────────────┤ 4815│ Section Headers │ ← bg_alt (light gray) 4816│ ┌──────────────────────┐ │ 4817│ │ Form Inputs │ │ ← bg (white) 4818│ │ Content Areas │ │ 4819│ └──────────────────────┘ │ 4820└──────────────────────────┘ 4821All template colors! ✓ 4822``` 4823 4824**Dark Template**: 4825``` 4826Admin Page: 4827┌──────────────────────────┐ 4828│ Tab Navigation │ ← Template borders 4829├──────────────────────────┤ 4830│ Section Headers │ ← bg_alt (dark gray) 4831│ ┌──────────────────────┐ │ 4832│ │ Form Inputs │ │ ← bg (darker) 4833│ │ Content Areas │ │ 4834│ └──────────────────────┘ │ 4835└──────────────────────────┘ 4836All template colors! ✓ 4837``` 4838 4839### Template Color Mapping 4840 4841**Used throughout admin**: 4842``` 4843__background_site__ → $colors['bg'] (main backgrounds) 4844__background_alt__ → $colors['bg_alt'] (section backgrounds) 4845__text__ → $colors['text'] (all text) 4846__border__ → $colors['border'] (all borders) 4847__link__ → $colors['link'] (links - future) 4848``` 4849 4850### Examples by Section 4851 4852**Manage Events**: 4853- Event list backgrounds: `bg_alt` 4854- Event item backgrounds: `bg` 4855- Borders: `border` 4856- Text: `text` 4857 4858**Update Plugin**: 4859- Section backgrounds: `bg_alt` 4860- Content areas: `bg` 4861- Borders: `border` 4862- Text: `text` 4863 4864**Outlook Sync**: 4865- Config sections: `bg_alt` 4866- Input fields: `bg` 4867- Borders: `border` 4868- Labels: `text` 4869 4870**Themes Tab**: 4871- Theme cards: `bg_alt` 4872- Preview areas: `bg` 4873- Borders: `border` 4874- Descriptions: `text` 4875 4876### Benefits 4877 4878**Seamless Integration**: 4879- Matches wiki admin area perfectly 4880- Same colors throughout wiki 4881- Professional appearance 4882- Consistent experience 4883 4884**Automatic Adaptation**: 4885- Light templates: Light admin 4886- Dark templates: Dark admin 4887- Custom templates: Uses custom colors 4888 4889**No White Boxes**: 4890- Every background themed 4891- Every border themed 4892- Every text themed 4893- Complete consistency 4894 4895### PERFECT HARMONY 4896 4897**Frontend (Calendar)**: 4898- Wiki theme uses style.ini ✓ 4899- Perfect template match ✓ 4900 4901**Backend (Admin)**: 4902- Reads same style.ini ✓ 4903- Perfect template match ✓ 4904 4905**Complete Unity**: 4906- Same colors everywhere ✓ 4907- Seamless experience ✓ 4908- Professional polish ✓ 4909 4910## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS 4911 4912### Enhanced: Month/Year Header & Admin Pages Use Template Colors 4913- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme 4914- **Added:** Admin pages read template's style.ini file 4915- **Added:** `getTemplateColors()` function in admin class 4916- **Fixed:** Tab navigation uses template text and border colors 4917- **Result:** Complete template integration everywhere! 4918 4919### Month/Year Header 4920 4921**Before**: 4922```php 4923color: __text__ // Same as primary text 4924``` 4925 4926**After (Wiki Theme)**: 4927```php 4928color: __text_neu__ // Dimmed text (subtle) 4929``` 4930 4931### Admin Pages Enhancement 4932 4933**New `getTemplateColors()` function**: 4934- Reads template's style.ini file 4935- Extracts color replacements 4936- Provides colors to all admin tabs 4937- Falls back to sensible defaults 4938 4939**Colors used**: 4940```php 4941bg: __background_site__ 4942bg_alt: __background_alt__ 4943text: __text__ 4944border: __border__ 4945link: __link__ 4946``` 4947 4948**Applied to**: 4949- Tab navigation borders 4950- Tab text colors 4951- All admin sections 4952- Ready for future enhancements 4953 4954### Visual Result 4955 4956**Calendar Header**: 4957``` 4958┌────────────────────┐ 4959│ ‹ February 2026 › │ ← __text_neu__ (dimmed) 4960└────────────────────┘ 4961Subtle and elegant ✓ 4962``` 4963 4964**Admin Navigation**: 4965``` 4966 Manage Events | Update | ⚙️ Config | Themes 4967───────────────────────────────────────────────── 4968Active tab: Green (#00cc07) 4969Inactive tabs: Template text color 4970Border: Template border color 4971``` 4972 4973### Template Integration 4974 4975**Light Template**: 4976```ini 4977__text_neu__ = "#666666" 4978__border__ = "#cccccc" 4979``` 4980**Result**: 4981- Month/Year: Medium gray (subtle) 4982- Admin borders: Light gray 4983- Tab text: Dark gray 4984 4985**Dark Template**: 4986```ini 4987__text_neu__ = "#999999" 4988__border__ = "#555555" 4989``` 4990**Result**: 4991- Month/Year: Light gray (subtle) 4992- Admin borders: Medium gray 4993- Tab text: Bright gray 4994 4995### Benefits 4996 4997**Calendar Frontend**: 4998- Month/Year header more subtle 4999- Better visual hierarchy 5000- Less prominent, more elegant 5001 5002**Admin Backend**: 5003- Uses template colors 5004- Matches wiki admin area 5005- Consistent experience 5006- Professional appearance 5007 5008### Future-Ready 5009 5010The `getTemplateColors()` function is now available for: 5011- ✅ Tab navigation (implemented) 5012- Section backgrounds (ready) 5013- Button colors (ready) 5014- Input fields (ready) 5015- Success/error messages (ready) 5016 5017**Foundation laid for complete admin theming!** 5018 5019## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS 5020 5021### Fixed: Add Event Bar & Section Headers Use Template Colors 5022- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme 5023- **Fixed:** "Today" header uses `__text_neu__` 5024- **Fixed:** "Tomorrow" header uses `__text__` 5025- **Fixed:** "Important Events" header uses `__border__` 5026- **Result:** Perfect template color integration! 5027 5028### All Changes 5029 5030**Add Event Bar (Wiki Theme)**: 5031 5032**Before**: 5033```php 5034background: #3498db // Generic blue 5035``` 5036 5037**After**: 5038```php 5039background: __background_alt__ // Template alternate bg 5040text: __text__ // Template text color 5041hover: __background_neu__ // Template neutral bg 5042``` 5043 5044**Section Headers (Wiki Theme)**: 5045 5046**Before**: 5047```php 5048Today: #ff9800 // Orange 5049Tomorrow: #4caf50 // Green 5050Important Events: #9b59b6 // Purple 5051``` 5052 5053**After**: 5054```php 5055Today: __text_neu__ // Template dimmed text 5056Tomorrow: __text__ // Template primary text 5057Important Events: __border__ // Template border color 5058``` 5059 5060### Visual Result 5061 5062**Wiki Default Theme**: 5063``` 5064Add Event Bar: 5065┌────────────────┐ 5066│ + ADD EVENT │ ← Template alt background 5067└────────────────┘ 5068 5069Sections: 5070━━━━━━━━━━━━━━━━ 5071Today ← Dimmed text color (__text_neu__) 5072• Team Meeting 5073 5074Tomorrow ← Primary text color (__text__) 5075• Code Review 5076 5077Important Events ← Border color (__border__) 5078• Project Deadline 5079``` 5080 5081### Example with DokuWiki Default Template 5082 5083**Template colors**: 5084```ini 5085__background_alt__ = "#e8e8e8" 5086__text__ = "#333333" 5087__text_neu__ = "#666666" 5088__border__ = "#cccccc" 5089``` 5090 5091**Calendar result**: 5092``` 5093Add Event Bar: Light gray (#e8e8e8) 5094Today header: Medium gray (#666666) 5095Tomorrow header: Dark gray (#333333) 5096Important Events header: Border gray (#cccccc) 5097``` 5098 5099### Example with Dark Template 5100 5101**Template colors**: 5102```ini 5103__background_alt__ = "#2d2d2d" 5104__text__ = "#e0e0e0" 5105__text_neu__ = "#999999" 5106__border__ = "#555555" 5107``` 5108 5109**Calendar result**: 5110``` 5111Add Event Bar: Dark gray (#2d2d2d) 5112Today header: Light gray (#999999) 5113Tomorrow header: Bright gray (#e0e0e0) 5114Important Events header: Medium gray (#555555) 5115``` 5116 5117### Perfect Harmony 5118 5119All sidebar elements now use template colors: 5120- ✅ Add Event bar background 5121- ✅ Add Event bar text 5122- ✅ Today section header 5123- ✅ Tomorrow section header 5124- ✅ Important Events header 5125- ✅ Calendar cells 5126- ✅ Grid backgrounds 5127- ✅ All borders 5128 5129**Complete template integration!** 5130 5131## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS 5132 5133### Fixed: Calendar Cells Use Correct Template Color 5134- **Fixed:** Calendar cells now use `__background__` from template 5135- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__` 5136- **Result:** Calendar cells match main content area background! 5137 5138### Color Mapping Update 5139 5140**Before (v5.0.3)**: 5141```php 5142cell_bg: __background_neu__ // Wrong - this is for neutral/alternate 5143``` 5144 5145**After (v5.0.4)**: 5146```php 5147cell_bg: __background__ // Correct - main content background 5148``` 5149 5150### Template Color Usage 5151 5152**Wiki Default theme now uses**: 5153``` 5154__background_site__ → Overall page background 5155__background__ → Calendar cells (main content bg) 5156__background_alt__ → Grid background, headers 5157__background_neu__ → Today cell highlight 5158__text__ → Primary text 5159__text_neu__ → Dimmed text 5160__link__ → Links, bright text 5161__border__ → All borders 5162``` 5163 5164### Visual Result 5165 5166**Before**: 5167``` 5168Calendar with template colors: 5169┌─────┬─────┬─────┐ 5170│ Mon │ Tue │ Wed │ 5171├─────┼─────┼─────┤ 5172│ 8 │ 9 │ 10 │ ← Neutral gray (wrong) 5173└─────┴─────┴─────┘ 5174``` 5175 5176**After**: 5177``` 5178Calendar with template colors: 5179┌─────┬─────┬─────┐ 5180│ Mon │ Tue │ Wed │ 5181├─────┼─────┼─────┤ 5182│ 8 │ 9 │ 10 │ ← White/content bg (correct!) 5183└─────┴─────┴─────┘ 5184``` 5185 5186### Example Template Colors 5187 5188**DokuWiki Default**: 5189```ini 5190__background__ = "#ffffff" 5191``` 5192**Result**: White calendar cells ✓ 5193 5194**Dark Template**: 5195```ini 5196__background__ = "#2d2d2d" 5197``` 5198**Result**: Dark calendar cells ✓ 5199 5200**Custom Template**: 5201```ini 5202__background__ = "#f9f9f9" 5203``` 5204**Result**: Custom color cells ✓ 5205 5206### Perfect Matching 5207 5208Calendar cells now match: 5209- ✅ Main content area background 5210- ✅ Article/page background 5211- ✅ Content box background 5212- ✅ Same as wiki text background 5213 5214**Seamless integration!** 5215 5216## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI 5217 5218### Enhanced: Wiki Default Theme Reads Template Colors 5219- **Added:** Function to read colors from DokuWiki template's style.ini file 5220- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 5221- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 5222- **Uses:** Actual template colors instead of CSS variables 5223- **Result:** Perfect color matching with any DokuWiki template! 5224 5225### How It Works 5226 5227**New Function: `getWikiTemplateColors()`** 5228 52291. **Detects** current DokuWiki template name 52302. **Reads** the template's `style.ini` file 52313. **Parses** color replacements section 52324. **Maps** template colors to calendar theme 52335. **Falls back** to CSS variables if file not found 5234 5235### Colors Read from style.ini 5236 5237**Template color replacements used**: 5238```php 5239__background_site__ → bg, header_bg 5240__background_alt__ → grid_bg, cell_today_bg 5241__background_neu__ → cell_bg 5242__text__ → text_primary 5243__text_neu__ → text_dim 5244__link__ → text_bright 5245__border__ → border, grid_border 5246``` 5247 5248### Example style.ini Mapping 5249 5250**Template style.ini**: 5251```ini 5252[replacements] 5253__background_site__ = "#f8f9fa" 5254__background_alt__ = "#e9ecef" 5255__background_neu__ = "#dee2e6" 5256__text__ = "#212529" 5257__text_neu__ = "#6c757d" 5258__link__ = "#0d6efd" 5259__border__ = "#ced4da" 5260``` 5261 5262**Calendar theme result**: 5263```php 5264bg: #f8f9fa 5265header_bg: #e9ecef 5266grid_bg: #e9ecef 5267cell_bg: #dee2e6 5268text_primary: #212529 5269text_dim: #6c757d 5270text_bright: #0d6efd 5271border: #ced4da 5272grid_border: #ced4da 5273``` 5274 5275### Before vs After 5276 5277**Before (v5.0.2)**: 5278``` 5279Wiki Default theme used: 5280- CSS variables (var(--__background__, #fff)) 5281- Required browser CSS variable support 5282- Fallback to generic colors 5283``` 5284 5285**After (v5.0.3)**: 5286``` 5287Wiki Default theme uses: 5288- Actual colors from template's style.ini 5289- Exact template color values 5290- No CSS variable dependency 5291- Perfect color matching! 5292``` 5293 5294### File Location Priority 5295 5296Checks in order: 52971. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 52982. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 52993. Falls back to CSS variables if neither found 5300 5301### Benefits 5302 5303**More accurate colors**: 5304- Uses exact template color values ✓ 5305- No CSS variable interpolation ✓ 5306- Consistent across all browsers ✓ 5307 5308**Better compatibility**: 5309- Works with older browsers ✓ 5310- No CSS variable support needed ✓ 5311- Direct color values ✓ 5312 5313**Perfect matching**: 5314- Reads template's actual colors ✓ 5315- Same colors as wiki pages ✓ 5316- Seamless integration ✓ 5317 5318### Template Examples 5319 5320**DokuWiki Default Template**: 5321``` 5322Reads: lib/tpl/dokuwiki/style.ini 5323Gets: Default DokuWiki colors 5324Result: Perfect classic DokuWiki look 5325``` 5326 5327**Bootstrap Template**: 5328``` 5329Reads: lib/tpl/bootstrap3/style.ini 5330Gets: Bootstrap color scheme 5331Result: Perfect Bootstrap integration 5332``` 5333 5334**Custom Template**: 5335``` 5336Reads: conf/tpl/mycustom/style.ini 5337Gets: Your custom colors 5338Result: Perfect custom theme match 5339``` 5340 5341### Fallback Chain 5342 53431. **Try** reading style.ini from template 53442. **If found** → Use exact colors from file 53453. **If not found** → Use CSS variables 53464. **If no CSS vars** → Use fallback colors 5347 5348**Always works, always matches!** ✓ 5349 5350## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL 5351 5352### Fixed: Wiki Default Theme Day Panel Colors 5353- **Fixed:** Day popup panel now uses DokuWiki CSS variables 5354- **Fixed:** Panel background matches wiki theme 5355- **Fixed:** Panel header matches wiki theme 5356- **Fixed:** Border colors use wiki theme 5357- **Fixed:** Text colors use wiki theme 5358- **Result:** Perfect integration with DokuWiki templates! 5359 5360### All Changes 5361 5362**Day Panel Colors (Wiki Default)**: 5363 5364**Before**: 5365```php 5366background: rgba(36, 36, 36, 0.5) // Dark gray (wrong!) 5367header: #3498db // Blue (wrong!) 5368``` 5369 5370**After**: 5371```php 5372background: var(--__background__, #fff) 5373header: var(--__background_alt__, #e8e8e8) 5374header_text: var(--__text__, #333) 5375border: var(--__border__, #ccc) 5376shadow: 0 2px 4px rgba(0, 0, 0, 0.1) 5377``` 5378 5379**Event Colors (Wiki Default)**: 5380```php 5381event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5)) 5382border_color: var(--__border__, rgba(204, 204, 204, 0.3)) 5383bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15) 5384``` 5385 5386### Before vs After 5387 5388**Before (v5.0.1)**: 5389``` 5390Wiki Default - Click Week Cell: 5391┌────────────────┐ 5392│ Monday, Feb 8 │ ← Blue header (wrong) 5393├────────────────┤ 5394│ Team Meeting │ ← Dark gray bg (wrong) 5395│ 2:00 PM │ 5396└────────────────┘ 5397Doesn't match wiki theme 5398``` 5399 5400**After (v5.0.2)**: 5401``` 5402Wiki Default - Click Week Cell: 5403 5404Light Wiki Theme: 5405┌────────────────┐ 5406│ Monday, Feb 8 │ ← Light gray header ✓ 5407├────────────────┤ 5408│ Team Meeting │ ← White bg ✓ 5409│ 2:00 PM │ Dark text ✓ 5410└────────────────┘ 5411 5412Dark Wiki Theme: 5413┌────────────────┐ 5414│ Monday, Feb 8 │ ← Dark header ✓ 5415├────────────────┤ 5416│ Team Meeting │ ← Dark bg ✓ 5417│ 2:00 PM │ Light text ✓ 5418└────────────────┘ 5419 5420Perfectly matches wiki! 5421``` 5422 5423### CSS Variables Used 5424 5425**Wiki Default theme now uses**: 5426- `--__background__` - Main background (panel body) 5427- `--__background_alt__` - Alternate bg (panel header, events) 5428- `--__text__` - Text color (header text) 5429- `--__border__` - Border color (panel border, event borders) 5430 5431**With fallbacks**: 5432```css 5433var(--__background__, #fff) /* white fallback */ 5434var(--__background_alt__, #e8e8e8) /* light gray fallback */ 5435var(--__text__, #333) /* dark text fallback */ 5436var(--__border__, #ccc) /* gray border fallback */ 5437``` 5438 5439### Perfect Adaptation 5440 5441**Light Templates**: 5442- Light panel backgrounds ✓ 5443- Dark text ✓ 5444- Subtle borders ✓ 5445- Clean appearance ✓ 5446 5447**Dark Templates**: 5448- Dark panel backgrounds ✓ 5449- Light text ✓ 5450- Visible borders ✓ 5451- Perfect contrast ✓ 5452 5453**Custom Templates**: 5454- Uses template's CSS variables ✓ 5455- Automatic adaptation ✓ 5456- Seamless integration ✓ 5457 5458### Now Truly Adaptive 5459 5460Wiki Default theme now properly uses DokuWiki CSS variables for: 5461- ✅ Calendar grid 5462- ✅ Sidebar widget 5463- ✅ Event list 5464- ✅ **Day panel** ← v5.0.2! 5465- ✅ All backgrounds 5466- ✅ All text 5467- ✅ All borders 5468 5469**Complete wiki integration!** 5470 5471## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS 5472 5473### Enhanced: Time Conflict Tooltips Now Themed 5474- **Fixed:** Conflict tooltips now match calendar theme 5475- **Added:** Theme-aware background, border, text colors 5476- **Added:** Theme-aware shadow effects 5477- **Result:** Complete visual consistency! 5478 5479### Tooltip Theming 5480 5481**Now uses theme colors for**: 5482- Background: Theme background color 5483- Border: Theme border color 5484- Header text: Theme primary text color 5485- Item text: Theme dim text color 5486- Shadow: Theme shadow color 5487 5488### Before vs After 5489 5490**Before (v5.0.0)**: 5491``` 5492Hover ⚠️ badge: 5493┌─────────────────┐ 5494│ ⚠️ Time Conflicts│ ← Default colors 5495│ • Event A │ 5496│ • Event B │ 5497└─────────────────┘ 5498``` 5499 5500**After (v5.0.1)**: 5501``` 5502Matrix Theme: 5503┌─────────────────┐ 5504│ ⚠️ Time Conflicts│ ← Green header 5505│ • Event A │ ← Green text 5506│ • Event B │ Dark green bg 5507└─────────────────┘ 5508 5509Purple Theme: 5510┌─────────────────┐ 5511│ ⚠️ Time Conflicts│ ← Purple header 5512│ • Event A │ ← Purple text 5513│ • Event B │ Dark purple bg 5514└─────────────────┘ 5515 5516Professional Theme: 5517┌─────────────────┐ 5518│ ⚠️ Time Conflicts│ ← Blue header 5519│ • Event A │ ← Dark text 5520│ • Event B │ Light bg 5521└─────────────────┘ 5522 5523Pink Theme: 5524┌─────────────────┐ 5525│ ⚠️ Time Conflicts│ ← Pink header ✨ 5526│ • Event A │ ← Pink text 5527│ • Event B │ Dark pink bg 5528└─────────────────┘ 5529 5530Wiki Default: 5531┌─────────────────┐ 5532│ ⚠️ Time Conflicts│ ← Adapts to wiki 5533│ • Event A │ ← Wiki colors 5534│ • Event B │ 5535└─────────────────┘ 5536``` 5537 5538### Now 100% Complete 5539 5540**Every tooltip themed**: 5541- ✅ Conflict tooltips 5542- ✅ All other tooltips (if any) 5543- ✅ Perfect consistency 5544 5545**Absolute perfection!** ✨ 5546 5547## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION 5548 5549### Major Milestone: Version 5.0 5550 5551This is a major release representing the completion of comprehensive theming across the entire calendar plugin. Every visual element has been carefully themed for consistency and beauty. 5552 5553### Complete Feature Set 5554 5555**5 Beautiful Themes**: 5556- Matrix Edition (Green with glow) 5557- Purple Dream (Elegant purple) 5558- Professional Blue (Clean and modern) 5559- Pink Bling (Maximum sparkle) 5560- Wiki Default (Auto-adapts to your DokuWiki theme) 5561 5562**100% Theme Coverage**: 5563- ✅ Calendar grid and cells 5564- ✅ Event boxes and borders 5565- ✅ Sidebar widget 5566- ✅ Event list panel 5567- ✅ Search functionality 5568- ✅ Edit/Add dialogs (complete) 5569- ✅ Day popup dialogs 5570- ✅ Month picker 5571- ✅ All text (primary, dim, bright) 5572- ✅ All buttons 5573- ✅ All inputs and forms 5574- ✅ All checkboxes 5575- ✅ All borders 5576- ✅ All badges and labels 5577- ✅ Event highlight effects 5578 5579**Perfect Visual Consistency**: 5580- No white pixels anywhere 5581- No unthemed elements 5582- No default colors 5583- Complete visual unity 5584 5585### Major Improvements in v5.0 5586 55871. **Complete Dialog Theming** (v4.8.5-4.8.7) 5588 - Edit event dialog fully themed 5589 - Day popup dialog fully themed 5590 - All form inputs themed 5591 - All checkboxes themed 5592 - All buttons themed 5593 55942. **Event Box Border Perfection** (v4.8.6) 5595 - All 4 borders themed (top, right, bottom, left) 5596 - Sidebar event dividers themed 5597 - Past Events toggle border themed 5598 55993. **Checkbox Field Borders** (v4.9.0) 5600 - Repeating Event section border themed 5601 - Task checkbox section border themed 5602 56034. **Wiki Default Theme** (v4.10.0) 5604 - New 5th theme 5605 - Uses DokuWiki CSS variables 5606 - Auto-adapts to any wiki template 5607 - Perfect for seamless integration 5608 56095. **Clean Text Appearance** (v4.11.0) 5610 - Removed text glow from Matrix 5611 - Removed text glow from Purple 5612 - Removed text glow from Professional 5613 - Removed text glow from Wiki Default 5614 - Kept text glow on Pink Bling only 5615 56166. **Event Highlight Effects** (v4.12.0-4.12.1) 5617 - Theme-aware highlight glow 5618 - Click event bar → event glows 5619 - 3-second themed glow effect 5620 - Smooth animations 5621 5622### See RELEASE_NOTES.md for Complete Details 5623 5624For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release. 5625 5626## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION 5627 5628### Fixed: Event Highlight Now Working 5629- **Fixed:** Used setProperty() to properly apply !important styles 5630- **Added:** Console logging for debugging 5631- **Fixed:** Proper style application with important flag 5632- **Result:** Highlight glow now works correctly! 5633 5634### Technical Fix 5635 5636**Before (not working)**: 5637```javascript 5638eventItem.style.background = color + ' !important'; // Doesn't work 5639``` 5640 5641**After (working)**: 5642```javascript 5643eventItem.style.setProperty('background', color, 'important'); // Works! 5644``` 5645 5646### Added Debug Logging 5647 5648Console now shows: 5649- "Highlighting event: [calId] [eventId] [date]" 5650- "Found event item: [element]" 5651- "Theme: [theme name]" 5652- "Highlight colors: [bg] [shadow]" 5653- "Applied highlight styles" 5654- "Removing highlight" (after 3 seconds) 5655 5656### Now Working 5657 5658Click any event bar → Event glows with theme colors ✓ 5659 5660## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW 5661 5662### ✨ Enhanced: Event Click Highlight Now Theme-Aware 5663- **Fixed:** Restored event highlight glow when clicking calendar bars 5664- **Improved:** Highlight now matches each theme's colors 5665- **Added:** Stronger glow effect for better visibility 5666- **Duration:** 3 seconds with smooth fade 5667- **Result:** Beautiful themed highlights for all themes! 5668 5669### How It Works 5670 5671When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow: 5672 5673**Matrix Theme**: 5674```javascript 5675Background: Darker green (#1a3d1a) 5676Glow: Double green glow (0 0 20px + 0 0 40px) 5677Color: rgba(0, 204, 7, 0.8) 5678``` 5679 5680**Purple Theme**: 5681```javascript 5682Background: Darker purple (#3d2b4d) 5683Glow: Double purple glow 5684Color: rgba(155, 89, 182, 0.8) 5685``` 5686 5687**Professional Theme**: 5688```javascript 5689Background: Light blue (#e3f2fd) 5690Glow: Single blue glow 5691Color: rgba(74, 144, 226, 0.4) 5692``` 5693 5694**Pink Theme**: 5695```javascript 5696Background: Darker pink (#3d2030) 5697Glow: Double pink glow ✨ 5698Color: rgba(255, 20, 147, 0.8) 5699``` 5700 5701**Wiki Theme**: 5702```javascript 5703Background: var(--__background_neu__) 5704Glow: Blue glow (adapts to wiki) 5705Color: rgba(43, 115, 183, 0.4) 5706``` 5707 5708### Visual Examples 5709 5710**Matrix - Click Event**: 5711``` 5712Calendar: 5713┌─────────────┐ 5714│ 2:00 PM │ ← Click this bar 5715└─────────────┘ 5716 5717Event List: 5718╔═════════════════════╗ 5719║ Team Meeting ║ ← GLOWS GREEN 5720║ 2:00 PM ║ for 3 seconds 5721╚═════════════════════╝ 5722 ↑↑↑ Strong green glow ↑↑↑ 5723``` 5724 5725**Purple - Click Event**: 5726``` 5727Calendar: 5728┌─────────────┐ 5729│ 4:00 PM │ ← Click 5730└─────────────┘ 5731 5732Event List: 5733╔═════════════════════╗ 5734║ Code Review ║ ← GLOWS PURPLE 5735║ 4:00 PM ║ for 3 seconds 5736╚═════════════════════╝ 5737 ↑↑↑ Strong purple glow ↑↑↑ 5738``` 5739 5740**Pink - Click Event**: 5741``` 5742Calendar: 5743┌─────────────┐ 5744│ 1:00 PM │ ← Click 5745└─────────────┘ 5746 5747Event List: 5748╔═════════════════════╗ 5749║ Lunch Date ║ ← GLOWS PINK 5750║ 1:00 PM ✨ ║ for 3 seconds 5751╚═════════════════════╝ 5752 ↑↑↑ MAXIMUM SPARKLE ↑↑↑ 5753``` 5754 5755### Glow Specifications 5756 5757**Matrix**: 5758- Background: Dark green 5759- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)` 5760- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)` 5761- Effect: Strong green pulse 5762 5763**Purple**: 5764- Background: Dark purple 5765- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)` 5766- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)` 5767- Effect: Strong purple pulse 5768 5769**Professional**: 5770- Background: Light blue 5771- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)` 5772- Effect: Subtle blue glow 5773 5774**Pink**: 5775- Background: Dark pink 5776- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)` 5777- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)` 5778- Effect: MAXIMUM SPARKLE ✨ 5779 5780**Wiki**: 5781- Background: Theme neutral color 5782- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)` 5783- Effect: Adapts to wiki theme 5784 5785### User Experience 5786 5787**Click event bar** → Event highlights with themed glow 5788**Auto-scroll** → Event scrolls into view smoothly 5789**3 second glow** → Fade out after 3 seconds 5790**Smooth transition** → 0.3s ease-in-out 5791 5792### Perfect for Finding Events 5793 5794**Large event lists**: Quickly locate the clicked event ✓ 5795**Visual feedback**: Know which event you clicked ✓ 5796**Theme consistency**: Matches your chosen theme ✓ 5797**Smooth animation**: Professional appearance ✓ 5798 5799### All Themes Covered 5800 5801- ✅ Matrix: Green glow 5802- ✅ Purple: Purple glow 5803- ✅ Professional: Blue glow 5804- ✅ Pink: Maximum pink sparkle 5805- ✅ Wiki: Adaptive glow 5806 5807**Click any event bar and watch it glow!** ✨ 5808 5809## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES 5810 5811### Changed: Text Glow Now Pink-Only 5812- **Removed:** Text shadow/glow from Matrix theme 5813- **Removed:** Text shadow/glow from Purple theme 5814- **Removed:** Text shadow/glow from Professional theme (already had none) 5815- **Removed:** Text shadow/glow from Wiki Default theme 5816- **Kept:** Text shadow/glow ONLY on Pink Bling theme 5817- **Result:** Cleaner look for Matrix, Purple, and Wiki themes! 5818 5819### All Changes 5820 5821**Before (Matrix, Purple)**: 5822```css 5823text-shadow: 0 0 2px $text_color; /* Glow effect */ 5824``` 5825 5826**After (Matrix, Purple, Professional, Wiki)**: 5827```css 5828text-shadow: none; /* Clean, no glow */ 5829``` 5830 5831**Pink Bling (unchanged)**: 5832```css 5833text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */ 5834``` 5835 5836### Text Shadow Removed From 5837 5838**Sidebar day numbers**: No glow ✓ 5839**Event titles**: No glow ✓ 5840**Event dates**: No glow ✓ 5841**Add Event button**: No glow ✓ 5842**Day popup events**: No glow ✓ 5843 5844### Before vs After 5845 5846**BEFORE (Matrix)**: 5847``` 5848Event Title ✨ ← Glowing green text 58492:00 PM ✨ ← Glowing text 5850``` 5851 5852**AFTER (Matrix)**: 5853``` 5854Event Title ← Clean green text 58552:00 PM ← Clean text 5856``` 5857 5858**Pink Bling (Still Glows)**: 5859``` 5860Event Title ✨ ← Still glowing! 58612:00 PM ✨ ← Maximum sparkle! 5862``` 5863 5864### Theme Appearances 5865 5866** Matrix Edition**: 5867- Clean green text 5868- No glow effects 5869- Professional appearance 5870- Still has border glow 5871 5872** Purple Dream**: 5873- Clean purple text 5874- No glow effects 5875- Elegant appearance 5876- Still has border glow 5877 5878** Professional Blue**: 5879- Clean text (unchanged) 5880- No glow effects 5881- Modern appearance 5882 5883** Pink Bling**: 5884- Glowing pink text ✨ 5885- Maximum glow effects 5886- Sparkle everywhere! 5887- All the bling! 5888 5889** Wiki Default**: 5890- Clean text 5891- No glow effects 5892- Matches wiki theme 5893 5894### Glow Effects Remaining 5895 5896**Border/box glow**: Still present on all themes ✓ 5897**Pink text glow**: Only on Pink Bling ✓ 5898**Shadow effects**: Still on buttons/boxes ✓ 5899 5900**Only TEXT glow removed from non-pink themes!** 5901 5902### Result 5903 5904**Cleaner, more professional look** for: 5905- Matrix ✓ 5906- Purple ✓ 5907- Professional ✓ 5908- Wiki Default ✓ 5909 5910**Maximum sparkle** for: 5911- Pink Bling ✨✓ 5912 5913**Best of both worlds!** 5914 5915## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME 5916 5917### New: Wiki Default Theme 5918- **Added:** 5th theme that automatically matches your DokuWiki template 5919- **Uses:** CSS variables from your wiki theme 5920- **Adapts:** Automatically works with light and dark themes 5921- **Perfect:** Seamless integration with any DokuWiki template 5922 5923### How It Works 5924 5925**Wiki theme uses DokuWiki CSS variables**: 5926```css 5927bg: var(--__background_site__, #f5f5f5) 5928border: var(--__border__, #ccc) 5929text_primary: var(--__text__, #333) 5930text_bright: var(--__link__, #2b73b7) 5931text_dim: var(--__text_neu__, #666) 5932cell_bg: var(--__background__, #fff) 5933grid_border: var(--__border__, #ccc) 5934``` 5935 5936**With fallbacks for older DokuWiki versions**: 5937- If CSS variables exist → Use them ✓ 5938- If not available → Use fallback values ✓ 5939 5940### All 5 Themes 5941 5942**1. Matrix Edition** (Default) 5943- Dark green with neon glow 5944- Matrix-style effects 5945- Original theme 5946 5947**2. Purple Dream** 5948- Rich purple with violet accents 5949- Elegant and sophisticated 5950- Soft glow effects 5951 5952**3. Professional Blue** 5953- Clean blue and grey 5954- Modern professional 5955- No glow effects 5956 5957**4. Pink Bling** 5958- Glamorous hot pink 5959- Maximum sparkle ✨ 5960- Hearts and diamonds 5961 5962**5. Wiki Default** ← NEW! 5963- Matches your wiki template 5964- Auto-adapts to light/dark 5965- Perfect integration 5966 5967### Examples 5968 5969**Light Wiki Template**: 5970``` 5971Wiki Default theme shows: 5972- Light backgrounds (#f5f5f5) 5973- Dark text (#333) 5974- Light inputs (#fff) 5975- Gray borders (#ccc) 5976 5977Matches perfectly! ✓ 5978``` 5979 5980**Dark Wiki Template**: 5981``` 5982Wiki Default theme shows: 5983- Dark backgrounds (from template) 5984- Light text (from template) 5985- Dark inputs (from template) 5986- Dark borders (from template) 5987 5988Matches perfectly! ✓ 5989``` 5990 5991**Bootstrap Template**: 5992``` 5993Uses Bootstrap's colors 5994Matches perfectly! ✓ 5995``` 5996 5997**Material Template**: 5998``` 5999Uses Material's colors 6000Matches perfectly! ✓ 6001``` 6002 6003### CSS Variables Used 6004 6005**DokuWiki provides**: 6006- `--__background_site__`: Page background 6007- `--__background_alt__`: Section backgrounds 6008- `--__background__`: Content backgrounds 6009- `--__text__`: Primary text color 6010- `--__link__`: Link color 6011- `--__text_neu__`: Dimmed text 6012- `--__border__`: Border color 6013- `--__background_neu__`: Neutral background 6014 6015**All with fallbacks**: 6016```css 6017var(--__background_site__, #f5f5f5) 6018/* Falls back to light gray if variable doesn't exist */ 6019``` 6020 6021### Perfect for Every Template 6022 6023**Custom templates**: Automatically adapts ✓ 6024**Light themes**: Perfect match ✓ 6025**Dark themes**: Perfect match ✓ 6026**Any DokuWiki version**: Works with fallbacks ✓ 6027 6028### Complete Theme Collection 6029 6030Now with **5 gorgeous themes**: 6031- 3 dark themes (Matrix, Purple, Pink) 6032- 1 light theme (Professional) 6033- 1 adaptive theme (Wiki Default) ← NEW! 6034 6035**Something for everyone!** 6036 6037## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS 6038 6039### Fixed: Checkbox Field Borders Themed 6040- **Fixed:** Added border-color to checkbox field divs 6041- **Fixed:** Repeating Event section border 6042- **Fixed:** Task checkbox section border 6043- **Result:** No white borders around checkboxes! 6044 6045### Changes 6046 6047**Checkbox Field Border Styling**: 6048 6049**Before**: 6050```html 6051<div class="form-field-checkbox" 6052 style="background: $bg !important;"> 6053<!-- Border shows white ✗ --> 6054``` 6055 6056**After**: 6057```php 6058<div class="form-field-checkbox" 6059 style="background: $bg !important; 6060 border-color: $grid_border !important;"> 6061<!-- Border themed ✓ --> 6062``` 6063 6064### Before vs After 6065 6066**BEFORE (v4.8.8)**: 6067``` 6068Edit Dialog: 6069┌──────────────────┐ 6070│ ☑ Repeating ║│ ← White border ✗ 6071└──────────────────┘ 6072┌──────────────────┐ 6073│ ☑ Task checkbox ║│ ← White border ✗ 6074└──────────────────┘ 6075``` 6076 6077**AFTER (v4.9.0)**: 6078``` 6079Matrix Edit Dialog: 6080┌──────────────────┐ 6081│ ☑ Repeating │ ← Green border ✓ 6082└──────────────────┘ 6083┌──────────────────┐ 6084│ ☑ Task checkbox │ ← Green border ✓ 6085└──────────────────┘ 6086``` 6087 6088### ABSOLUTE PERFECTION ACHIEVED 6089 6090**Every element themed**: 6091- ✅ All inputs 6092- ✅ All labels 6093- ✅ All sections 6094- ✅ **Checkbox field borders** ← v4.9.0! 6095- ✅ All buttons 6096- ✅ All checkboxes 6097- ✅ No white anywhere 6098 6099**100% COMPLETE!** ✨ 6100 6101## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 6102 6103### Fixed: Checkbox Field Borders Themed 6104- **Fixed:** Added border-color to checkbox field divs 6105- **Fixed:** Repeating Event section border 6106- **Fixed:** Task checkbox section border 6107- **Result:** No white borders around checkboxes! 6108 6109### Fixed: Admin Sections Respect Wiki Theme 6110- **Fixed:** All admin backgrounds use CSS variables 6111- **Fixed:** Text colors use wiki text color 6112- **Fixed:** Borders use wiki border color 6113- **Result:** Admin matches wiki theme perfectly! 6114 6115### All Changes 6116 6117**1. Checkbox Field Border Styling**: 6118 6119**Before**: 6120```html 6121<div class="form-field-checkbox" 6122 style="background: $bg !important;"> 6123<!-- Border shows white ✗ --> 6124``` 6125 6126**After**: 6127```php 6128<div class="form-field-checkbox" 6129 style="background: $bg !important; 6130 border-color: $grid_border !important;"> 6131<!-- Border themed ✓ --> 6132``` 6133 6134**2. Admin CSS Variables**: 6135 6136**Added CSS variables for wiki theme compatibility**: 6137```css 6138.calendar-admin-wrapper { 6139 background: var(--__background_site__, #f5f5f5); 6140 color: var(--__text__, #333); 6141} 6142.calendar-admin-section { 6143 background: var(--__background_alt__, #fafafa); 6144} 6145.calendar-admin-input { 6146 background: var(--__background__, #fff); 6147 color: var(--__text__, #333); 6148} 6149``` 6150 6151**Replaced hardcoded colors**: 6152```php 6153// Before: 6154background: #f9f9f9 6155background: white 6156color: #333 6157border: 1px solid #ddd 6158 6159// After: 6160background: var(--__background_alt__, #f9f9f9) 6161background: var(--__background__, #fff) 6162color: var(--__text__, #333) 6163border: 1px solid var(--__border__, #ddd) 6164``` 6165 6166### Before vs After 6167 6168**BEFORE (v4.8.8)**: 6169``` 6170Edit Dialog: 6171┌──────────────────┐ 6172│ ☑ Repeating ║│ ← White border ✗ 6173└──────────────────┘ 6174┌──────────────────┐ 6175│ ☑ Task checkbox ║│ ← White border ✗ 6176└──────────────────┘ 6177 6178Admin Page (Dark Wiki Theme): 6179┌──────────────────┐ 6180│ Light sections │ ← White boxes ✗ 6181│ Light inputs │ ← Doesn't match ✗ 6182└──────────────────┘ 6183``` 6184 6185**AFTER (v4.8.9)**: 6186``` 6187Matrix Edit Dialog: 6188┌──────────────────┐ 6189│ ☑ Repeating │ ← Green border ✓ 6190└──────────────────┘ 6191┌──────────────────┐ 6192│ ☑ Task checkbox │ ← Green border ✓ 6193└──────────────────┘ 6194 6195Admin (Dark Wiki Theme): 6196┌──────────────────┐ 6197│ Dark sections │ ← Matches wiki ✓ 6198│ Dark inputs │ ← Perfect match ✓ 6199└──────────────────┘ 6200``` 6201 6202### Admin Theme Examples 6203 6204**Light Wiki Theme**: 6205``` 6206Admin page backgrounds: Light 6207Section boxes: Light gray 6208Inputs: White 6209Borders: Gray 6210Text: Dark 6211 6212Perfect match! ✓ 6213``` 6214 6215**Dark Wiki Theme**: 6216``` 6217Admin page backgrounds: Dark 6218Section boxes: Darker gray 6219Inputs: Dark 6220Borders: Dark gray 6221Text: Light 6222 6223Perfect match! ✓ 6224``` 6225 6226**DokuWiki Default**: 6227``` 6228Uses wiki's CSS variables 6229Automatically adapts 6230Always matches! ✓ 6231``` 6232 6233### Complete Coverage 6234 6235**Edit Dialog**: 6236- ✅ All inputs themed 6237- ✅ All labels themed 6238- ✅ All sections themed 6239- ✅ **Checkbox borders** ← v4.8.9! 6240- ✅ All buttons themed 6241- ✅ No white anywhere 6242 6243**Admin Interface**: 6244- ✅ **Tab navigation** ← v4.8.9! 6245- ✅ **Section boxes** ← v4.8.9! 6246- ✅ **Input fields** ← v4.8.9! 6247- ✅ **Text colors** ← v4.8.9! 6248- ✅ **Borders** ← v4.8.9! 6249- ✅ All tabs (Manage, Update, Outlook, Themes) 6250 6251### CSS Variables Used 6252 6253**DokuWiki provides these**: 6254- `--__background_site__`: Page background 6255- `--__background_alt__`: Alternate background 6256- `--__background__`: Primary background (inputs) 6257- `--__text__`: Text color 6258- `--__border__`: Border color 6259 6260**Fallbacks provided for older DokuWiki**: 6261```css 6262var(--__background_site__, #f5f5f5) 6263var(--__background_alt__, #fafafa) 6264var(--__background__, #fff) 6265var(--__text__, #333) 6266var(--__border__, #ddd) 6267``` 6268 6269### Perfect Adaptation 6270 6271**Admin now adapts to ANY wiki theme**: 6272- Light themes → Light admin ✓ 6273- Dark themes → Dark admin ✓ 6274- Custom themes → Matches perfectly ✓ 6275- No hardcoded colors ✓ 6276 6277**Calendar themes still work**: 6278- Matrix, Purple, Professional, Pink ✓ 6279- Independent from wiki theme ✓ 6280- Admin respects wiki ✓ 6281- Calendar respects calendar theme ✓ 6282 6283### FINAL PERFECTION 6284 6285**Frontend (Calendar)**: 6286- Complete theming ✓ 6287- 4 beautiful themes ✓ 6288- Every pixel themed ✓ 6289 6290**Backend (Admin)**: 6291- Respects wiki theme ✓ 6292- Works with any theme ✓ 6293- Perfect compatibility ✓ 6294 6295**ABSOLUTELY EVERYTHING THEMED!** ✨ 6296 6297## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 6298 6299### Fixed: Task Checkboxes Now Fully Themed 6300- **Fixed:** Added background-color and border inline 6301- **Fixed:** Both PHP and JavaScript versions 6302- **Result:** No white checkboxes! 6303 6304### Fixed: Past Events Toggle Border 6305- **Fixed:** Added !important to border styling 6306- **Fixed:** Explicit top and bottom borders 6307- **Result:** No white line under toggle! 6308 6309### Fixed: Form Field Section Backgrounds 6310- **Fixed:** All form-field and form-row-group backgrounds 6311- **Fixed:** Every section in edit dialog 6312- **Result:** No white sections anywhere! 6313 6314### All Changes 6315 6316**1. Task Checkbox Styling**: 6317 6318**Before**: 6319```php 6320style="accent-color: $border !important;" 6321<!-- Only accent, background still white ✗ --> 6322``` 6323 6324**After**: 6325```php 6326style="accent-color: $border !important; 6327 background-color: $cell_bg !important; 6328 border: 2px solid $grid_border !important;" 6329<!-- Full theming ✓ --> 6330``` 6331 6332**2. Past Events Toggle Border**: 6333 6334**Before**: 6335```php 6336style="border-color: $grid_border;" 6337<!-- No !important, CSS overrides ✗ --> 6338``` 6339 6340**After**: 6341```php 6342style="border-color: $grid_border !important; 6343 border-top: 1px solid $grid_border !important; 6344 border-bottom: 1px solid $grid_border !important;" 6345<!-- Cannot be overridden ✓ --> 6346``` 6347 6348**3. Form Field Backgrounds**: 6349 6350**Before**: 6351```html 6352<div class="form-field"> 6353<div class="form-row-group"> 6354<!-- No background, shows white ✗ --> 6355``` 6356 6357**After**: 6358```php 6359<div class="form-field" style="background: $bg !important;"> 6360<div class="form-row-group" style="background: $bg !important;"> 6361<!-- Fully themed ✓ --> 6362``` 6363 6364### Before vs After 6365 6366**BEFORE (v4.8.7)**: 6367``` 6368Event: 6369□ Task checkbox ← White checkbox ✗ 6370 6371Past Events 6372▶ Past Events (3) ← White line below ✗ 6373───────────────── 6374 6375Edit Dialog: 6376┌──────────────┐ 6377│ Form fields │ ← White sections ✗ 6378└──────────────┘ 6379``` 6380 6381**AFTER (v4.8.8)**: 6382``` 6383Matrix Event: 6384☑ Task checkbox ← Green checkbox ✓ 6385 6386Past Events 6387▶ Past Events (3) ← Green border ✓ 6388───────────────── 6389 6390Matrix Edit Dialog: 6391┌──────────────┐ 6392│ Form fields │ ← Dark green ✓ 6393└──────────────┘ 6394``` 6395 6396### Complete Examples 6397 6398**Matrix Theme**: 6399``` 6400Task Checkbox: 6401☑ Checked → Green checkmark, green bg 6402☐ Unchecked → Green border, dark green bg ✓ 6403 6404Past Events Toggle: 6405▶ Past Events (3) 6406─────────────────── Green border ✓ 6407 6408Edit Dialog: 6409All sections dark green ✓ 6410No white anywhere ✓ 6411``` 6412 6413**Purple Theme**: 6414``` 6415Task Checkbox: 6416☑ Checked → Purple checkmark, purple bg 6417☐ Unchecked → Purple border, dark purple bg ✓ 6418 6419Past Events Toggle: 6420▶ Past Events (3) 6421─────────────────── Purple border ✓ 6422 6423Edit Dialog: 6424All sections dark purple ✓ 6425``` 6426 6427**Professional Theme**: 6428``` 6429Task Checkbox: 6430☑ Checked → Blue checkmark, white bg 6431☐ Unchecked → Gray border, white bg ✓ 6432 6433Past Events Toggle: 6434▶ Past Events (3) 6435─────────────────── Gray border ✓ 6436 6437Edit Dialog: 6438All sections light ✓ 6439``` 6440 6441**Pink Theme**: 6442``` 6443Task Checkbox: 6444☑ Checked → Pink checkmark, pink bg ✨ 6445☐ Unchecked → Pink border, dark pink bg ✓ 6446 6447Past Events Toggle: 6448▶ Past Events (3) 6449─────────────────── Pink border 6450 6451Edit Dialog: 6452All sections dark pink ✓ 6453``` 6454 6455### Checkbox Visual 6456 6457**Matrix - Unchecked**: 6458``` 6459┌─────┐ 6460│ │ ← Dark green background 6461│ │ Green border 6462└─────┘ 6463``` 6464 6465**Matrix - Checked**: 6466``` 6467┌─────┐ 6468│ ✓ │ ← Dark green background 6469│ │ Green checkmark 6470└─────┘ 6471``` 6472 6473### Past Events Border 6474 6475**Before**: 6476``` 6477▶ Past Events (3) 6478─────────────────── White line ✗ 6479``` 6480 6481**After**: 6482``` 6483▶ Past Events (3) 6484─────────────────── Green line ✓ (Matrix) 6485 Purple line ✓ (Purple) 6486 Gray line ✓ (Professional) 6487 Pink line ✓ (Pink) 6488``` 6489 6490### Form Field Coverage 6491 6492**All sections themed**: 6493- ✅ Title field 6494- ✅ Namespace field 6495- ✅ Description field 6496- ✅ **Date row** ← v4.8.8! 6497- ✅ **Checkbox sections** ← v4.8.8! 6498- ✅ **Recurring options** ← v4.8.8! 6499- ✅ **Time row** ← v4.8.8! 6500- ✅ **Color row** ← v4.8.8! 6501- ✅ Button footer 6502 6503**Every div has background!** ✓ 6504 6505### ABSOLUTE PERFECTION 6506 6507**Not a single white pixel**: 6508- ✅ No white checkboxes 6509- ✅ No white borders 6510- ✅ No white backgrounds 6511- ✅ No white sections 6512- ✅ No white lines 6513- ✅ No white anything 6514 6515**100% PERFECT THEMING!** ✨ 6516 6517## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING 6518 6519### Fixed: Checkbox Section Backgrounds Themed 6520- **Fixed:** Repeating Event section background 6521- **Fixed:** Task checkbox section background 6522- **Result:** No white backgrounds in dialog! 6523 6524### Fixed: Unchecked Task Checkboxes Themed 6525- **Fixed:** Added CSS for checkbox backgrounds 6526- **Fixed:** Unchecked boxes show theme colors 6527- **Result:** No white checkboxes! 6528 6529### Fixed: Day Popup Dialog Fully Themed 6530- **Fixed:** Popup container, header, body themed 6531- **Fixed:** Event items in popup themed 6532- **Fixed:** Add Event button themed 6533- **Fixed:** Footer section themed 6534- **Result:** Perfect popup theming! 6535 6536### All Changes 6537 6538**1. Checkbox Section Backgrounds**: 6539 6540**Before**: 6541```html 6542<div class="form-field-checkbox"> 6543<!-- White background ✗ --> 6544``` 6545 6546**After**: 6547```php 6548<div class="form-field-checkbox" 6549 style="background: $bg !important;"> 6550<!-- Themed ✓ --> 6551``` 6552 6553**2. Checkbox Background CSS**: 6554 6555**Added to style block**: 6556```css 6557.task-checkbox { 6558 background-color: $cell_bg !important; 6559 border: 2px solid $grid_border !important; 6560} 6561``` 6562 6563**3. Day Popup Theming**: 6564 6565**Container**: 6566```javascript 6567style="background: $bg !important; 6568 border: 2px solid $border !important; 6569 box-shadow: 0 0 20px $shadow !important;" 6570``` 6571 6572**Header**: 6573```javascript 6574style="background: $header_bg !important; 6575 color: $text_primary !important; 6576 border-bottom: 1px solid $border !important;" 6577``` 6578 6579**Footer**: 6580```javascript 6581style="background: $bg !important; 6582 border-top: 1px solid $grid_border !important;" 6583``` 6584 6585**Add Event Button**: 6586```javascript 6587style="background: $border !important; 6588 color: $bg !important; 6589 border-color: $border !important;" 6590``` 6591 6592**Event Items**: 6593```javascript 6594style="background: $cell_bg !important; 6595 border: 1px solid $grid_border !important;" 6596``` 6597 6598### Before vs After 6599 6600**BEFORE (v4.8.6)**: 6601``` 6602Edit Dialog: 6603┌──────────────────┐ 6604│ ☑ Repeating Event│ ← White background ✗ 6605├──────────────────┤ 6606│ ☑ Task checkbox │ ← White background ✗ 6607└──────────────────┘ 6608 6609Day Popup: 6610┌──────────────────┐ 6611│ Monday, Feb 8 │ ← White ✗ 6612├──────────────────┤ 6613│ Team Meeting │ ← White ✗ 6614│ 2:00 PM │ 6615├──────────────────┤ 6616│ [+ Add Event] │ ← White ✗ 6617└──────────────────┘ 6618 6619Task checkbox: ☐ ← White ✗ 6620``` 6621 6622**AFTER (v4.8.7)**: 6623``` 6624Edit Dialog (Matrix): 6625┌──────────────────┐ 6626│ ☑ Repeating Event│ ← Dark green ✓ 6627├──────────────────┤ 6628│ ☑ Task checkbox │ ← Dark green ✓ 6629└──────────────────┘ 6630 6631Day Popup (Matrix): 6632┌──────────────────┐ 6633│ Monday, Feb 8 │ ← Dark green ✓ 6634├──────────────────┤ 6635│ Team Meeting │ ← Dark green ✓ 6636│ 2:00 PM │ 6637├──────────────────┤ 6638│ [+ Add Event] │ ← Green button ✓ 6639└──────────────────┘ 6640 6641Task checkbox: ☑ ← Green ✓ 6642``` 6643 6644### Complete Examples 6645 6646**Matrix Dialog**: 6647``` 6648┌──────────────────────────┐ 6649│ ✏️ Edit Event │ 6650├──────────────────────────┤ 6651│ Title: [_________] │ 6652│ Date: [__________] │ 6653│ │ 6654│ ☑ Repeating Event │ ← Dark green bg 6655├──────────────────────────┤ 6656│ ☑ Task checkbox │ ← Dark green bg 6657├──────────────────────────┤ 6658│ [Cancel] [ Save] │ 6659└──────────────────────────┘ 6660 6661All sections themed! ✓ 6662``` 6663 6664**Matrix Day Popup**: 6665``` 6666┌──────────────────────────┐ 6667│ Monday, February 8, 2026 │ ← Green header 6668├──────────────────────────┤ 6669│ ┌──────────────────────┐ │ 6670│ │ Team Meeting │ │ ← Dark green 6671│ │ 2:00 PM │ │ 6672│ └──────────────────────┘ │ 6673│ ┌──────────────────────┐ │ 6674│ │ Code Review │ │ ← Dark green 6675│ │ 4:00 PM │ │ 6676│ └──────────────────────┘ │ 6677├──────────────────────────┤ 6678│ [+ Add Event] │ ← Green button 6679└──────────────────────────┘ 6680``` 6681 6682**Purple Day Popup**: 6683``` 6684┌──────────────────────────┐ 6685│ Monday, February 8, 2026 │ ← Purple header 6686├──────────────────────────┤ 6687│ ┌──────────────────────┐ │ 6688│ │ Team Meeting │ │ ← Dark purple 6689│ │ 2:00 PM │ │ 6690│ └──────────────────────┘ │ 6691├──────────────────────────┤ 6692│ [+ Add Event] │ ← Purple button 6693└──────────────────────────┘ 6694``` 6695 6696**Professional Day Popup**: 6697``` 6698┌──────────────────────────┐ 6699│ Monday, February 8, 2026 │ ← Light header 6700├──────────────────────────┤ 6701│ ┌──────────────────────┐ │ 6702│ │ Team Meeting │ │ ← White 6703│ │ 2:00 PM │ │ 6704│ └──────────────────────┘ │ 6705├──────────────────────────┤ 6706│ [+ Add Event] │ ← Blue button 6707└──────────────────────────┘ 6708``` 6709 6710**Pink Day Popup**: 6711``` 6712┌──────────────────────────┐ 6713│ Monday, February 8, 2026 │ ← Pink header ✨ 6714├──────────────────────────┤ 6715│ ┌──────────────────────┐ │ 6716│ │ Team Meeting │ │ ← Dark pink 6717│ │ 2:00 PM │ │ 6718│ └──────────────────────┘ │ 6719├──────────────────────────┤ 6720│ [+ Add Event] │ ← Pink button 6721└──────────────────────────┘ 6722``` 6723 6724### Checkbox Theming 6725 6726**Unchecked boxes now themed**: 6727``` 6728Matrix: 6729☐ → Dark green bg, green border ✓ 6730 6731Purple: 6732☐ → Dark purple bg, purple border ✓ 6733 6734Professional: 6735☐ → White bg, gray border ✓ 6736 6737Pink: 6738☐ → Dark pink bg, pink border ✓ 6739``` 6740 6741### Complete Coverage 6742 6743**Edit Dialog - All Sections**: 6744- ✅ Header 6745- ✅ All inputs 6746- ✅ All labels 6747- ✅ **Checkbox sections** ← v4.8.7! 6748- ✅ Recurring options 6749- ✅ Button footer 6750- ✅ All checkboxes (checked & unchecked) 6751 6752**Day Popup - All Elements**: 6753- ✅ **Popup container** ← v4.8.7! 6754- ✅ **Header** ← v4.8.7! 6755- ✅ **Body** ← v4.8.7! 6756- ✅ **Event items** ← v4.8.7! 6757- ✅ **Namespace badges** ← v4.8.7! 6758- ✅ **Footer** ← v4.8.7! 6759- ✅ **Add Event button** ← v4.8.7! 6760- ✅ **No events message** ← v4.8.7! 6761 6762**Absolutely every dialog element themed!** ✨ 6763 6764### Perfect Theming Achievement 6765 6766**Every UI component in entire plugin**: 6767- ✅ Calendar grid 6768- ✅ Sidebar widget 6769- ✅ Event list 6770- ✅ Search bar 6771- ✅ Event boxes 6772- ✅ Edit dialog (complete) 6773- ✅ **Day popup** ← v4.8.7! 6774- ✅ Month picker 6775- ✅ All text 6776- ✅ All buttons 6777- ✅ All inputs 6778- ✅ **All checkboxes** ← v4.8.7! 6779- ✅ All borders 6780- ✅ All badges 6781- ✅ All backgrounds 6782 6783**NO WHITE ANYWHERE!** 6784 6785**100% COMPLETE THEMING ACHIEVED!** ✨ 6786 6787## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS 6788 6789### Fixed: Dialog Checkbox Sections Themed 6790- **Fixed:** Recurring options section background themed 6791- **Fixed:** Section has themed border accent 6792- **Result:** No white sections in dialog! 6793 6794### Fixed: Dialog Button Section Themed 6795- **Fixed:** Button area background themed 6796- **Fixed:** Top border separator themed 6797- **Result:** Complete dialog theming! 6798 6799### Fixed: Event Box Borders Themed 6800- **Fixed:** Top, right, bottom borders now themed 6801- **Fixed:** Left border remains event color 6802- **Result:** Perfect event boxes! 6803 6804### All Changes 6805 6806**1. Recurring Options Section**: 6807 6808**Before**: 6809```html 6810<div class="recurring-options" style="display:none;"> 6811<!-- White background ✗ --> 6812``` 6813 6814**After**: 6815```php 6816<div class="recurring-options" 6817 style="display:none; 6818 background: $bg !important; 6819 padding: 8px; 6820 border-left: 2px solid $border; 6821 margin-left: 4px;"> 6822<!-- Themed with accent border ✓ --> 6823``` 6824 6825**2. Dialog Actions Section**: 6826 6827**Before**: 6828```html 6829<div class="dialog-actions-sleek"> 6830<!-- White background ✗ --> 6831``` 6832 6833**After**: 6834```php 6835<div class="dialog-actions-sleek" 6836 style="background: $bg !important; 6837 border-top: 1px solid $grid_border !important;"> 6838<!-- Themed with separator ✓ --> 6839``` 6840 6841**3. Event Box Borders**: 6842 6843**Before**: 6844```php 6845border-left-color: $event_color; 6846<!-- Only left border colored ✗ --> 6847``` 6848 6849**After**: 6850```php 6851border-left-color: $event_color; 6852border-top: 1px solid $grid_border !important; 6853border-right: 1px solid $grid_border !important; 6854border-bottom: 1px solid $grid_border !important; 6855<!-- All borders themed! ✓ --> 6856``` 6857 6858### Before vs After 6859 6860**BEFORE (v4.8.5)**: 6861``` 6862Dialog: 6863┌────────────────┐ 6864│ ☑ Repeating │ 6865├────────────────┤ ← White section ✗ 6866│ Repeat: Daily │ 6867│ Until: [____] │ 6868├────────────────┤ 6869│ [Cancel] [Save]│ ← White footer ✗ 6870└────────────────┘ 6871 6872Event Box: 6873┌────────────┐ 6874│Team Meeting│ ← White borders ✗ 6875│2:00 PM │ 6876└────────────┘ 6877``` 6878 6879**AFTER (v4.8.6)**: 6880``` 6881Matrix Dialog: 6882┌────────────────┐ 6883│ ☑ Repeating │ 6884├────────────────┤ ← Dark green ✓ 6885│ Repeat: Daily │ Green accent border 6886│ Until: [____] │ 6887├────────────────┤ 6888│ [Cancel] [Save]│ ← Dark green ✓ 6889└────────────────┘ 6890 6891Matrix Event Box: 6892┌────────────┐ 6893│Team Meeting│ ← Green borders ✓ 6894│2:00 PM │ 6895└────────────┘ 6896``` 6897 6898### Dialog Section Examples 6899 6900**Matrix Theme**: 6901``` 6902┌──────────────────────────┐ 6903│ ✏️ Edit Event │ 6904├──────────────────────────┤ 6905│ ☑ Repeating Event │ 6906├║─────────────────────────┤ Green accent 6907│║ Repeat Every: Daily │ Dark green bg 6908│║ Repeat Until: [_____] │ 6909└──────────────────────────┘ 6910 [Cancel] [ Save] ← Dark green bg 6911──────────────────────────── Green border 6912``` 6913 6914**Purple Theme**: 6915``` 6916┌──────────────────────────┐ 6917│ ☑ Repeating Event │ 6918├║─────────────────────────┤ Purple accent 6919│║ Repeat options... │ Dark purple bg 6920└──────────────────────────┘ 6921 [Cancel] [ Save] ← Dark purple bg 6922──────────────────────────── Purple border 6923``` 6924 6925**Professional Theme**: 6926``` 6927┌──────────────────────────┐ 6928│ ☑ Repeating Event │ 6929├║─────────────────────────┤ Blue accent 6930│║ Repeat options... │ Light bg 6931└──────────────────────────┘ 6932 [Cancel] [ Save] ← Light bg 6933──────────────────────────── Gray border 6934``` 6935 6936**Pink Theme**: 6937``` 6938┌──────────────────────────┐ 6939│ ☑ Repeating Event ✨ │ 6940├║─────────────────────────┤ Pink accent 6941│║ Repeat options... │ Dark pink bg 6942└──────────────────────────┘ 6943 [Cancel] [ Save] ← Dark pink bg 6944──────────────────────────── Pink border 6945``` 6946 6947### Event Box Border Visual 6948 6949**Before (v4.8.5)**: 6950``` 6951Left border only: 6952█ Team Meeting 6953█ 2:00 PM 6954█ [Edit] [Delete] 6955 6956Only event color on left ✗ 6957White on other 3 sides ✗ 6958``` 6959 6960**After (v4.8.6)**: 6961``` 6962All borders themed: 6963┌─────────────┐ 6964█Team Meeting │ ← Top: themed 6965█2:00 PM │ ← Right: themed 6966█[Edit][Del] │ ← Bottom: themed 6967└─────────────┘ 6968 6969Left: Event color ✓ 6970Other 3: Theme grid_border ✓ 6971``` 6972 6973### Matrix Event Box: 6974``` 6975┌─────────────┐ Green border 6976│Team Meeting │ 6977│2:00 PM │ 6978└─────────────┘ Green border 6979↑ 6980Green left bar 6981``` 6982 6983### Purple Event Box: 6984``` 6985┌─────────────┐ Purple border 6986│Team Meeting │ 6987│2:00 PM │ 6988└─────────────┘ Purple border 6989↑ 6990Purple left bar 6991``` 6992 6993### Professional Event Box: 6994``` 6995┌─────────────┐ Gray border 6996│Team Meeting │ 6997│2:00 PM │ 6998└─────────────┘ Gray border 6999↑ 7000Event color left bar 7001``` 7002 7003### Complete Dialog Coverage 7004 7005**All sections themed**: 7006- ✅ Dialog header 7007- ✅ Form inputs 7008- ✅ Checkbox labels 7009- ✅ **Recurring options** ← v4.8.6! 7010- ✅ **Button section** ← v4.8.6! 7011- ✅ All labels 7012- ✅ All buttons 7013 7014**No white sections!** ✓ 7015 7016### Complete Event Box Coverage 7017 7018**All borders themed**: 7019- ✅ Left border (event color) 7020- ✅ **Top border** ← v4.8.6! 7021- ✅ **Right border** ← v4.8.6! 7022- ✅ **Bottom border** ← v4.8.6! 7023- ✅ Background 7024- ✅ Text 7025 7026**Perfect box outline!** ✓ 7027 7028### Visual Perfection 7029 7030**Matrix theme event list**: 7031``` 7032┌─────────────┐ 7033│Team Meeting │ ← Green box 7034│2:00 PM │ 7035└─────────────┘ 7036┌─────────────┐ 7037│Code Review │ ← Green box 7038│4:00 PM │ 7039└─────────────┘ 7040 7041All borders green! ✓ 7042``` 7043 7044**ABSOLUTE PERFECT THEMING!** ✨ 7045 7046## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS 7047 7048### Fixed: Event Dialog Fully Themed 7049- **Fixed:** Dialog background, header, inputs all themed 7050- **Fixed:** All labels, checkboxes, selects themed 7051- **Fixed:** Save and Cancel buttons themed 7052- **Result:** Dialog matches theme perfectly! 7053 7054### Fixed: Sidebar Event Borders Properly Themed 7055- **Fixed:** Event divider borders use grid_border color 7056- **Fixed:** Clean, subtle themed dividers 7057- **Result:** No more white borders in sidebar! 7058 7059### All Changes 7060 7061**1. Event Dialog Theming**: 7062 7063**Dialog container**: 7064```php 7065background: $themeStyles['bg'] !important; 7066border: 2px solid $themeStyles['border'] !important; 7067box-shadow: 0 0 20px $shadow !important; 7068``` 7069 7070**Dialog header**: 7071```php 7072background: $themeStyles['header_bg'] !important; 7073color: $themeStyles['text_primary'] !important; 7074border-bottom: 1px solid $border !important; 7075``` 7076 7077**All form inputs** (text, date, select, textarea): 7078```php 7079background: $themeStyles['cell_bg'] !important; 7080color: $themeStyles['text_primary'] !important; 7081border-color: $themeStyles['grid_border'] !important; 7082``` 7083 7084**All labels**: 7085```php 7086color: $themeStyles['text_primary'] !important; 7087``` 7088 7089**Checkboxes**: 7090```php 7091accent-color: $themeStyles['border'] !important; 7092``` 7093 7094**Buttons**: 7095```php 7096// Cancel button: 7097background: $cell_bg !important; 7098color: $text_primary !important; 7099 7100// Save button: 7101background: $border !important; 7102color: $bg !important; (or white for professional) 7103``` 7104 7105**2. Sidebar Event Borders**: 7106 7107**Before**: 7108```php 7109border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded 7110``` 7111 7112**After**: 7113```php 7114borderColor = $themeStyles['grid_border']; 7115border-bottom: 1px solid $borderColor !important; 7116``` 7117 7118### Before vs After 7119 7120**BEFORE (v4.8.4)**: 7121``` 7122Event Dialog: 7123┌────────────────┐ 7124│ Add Event │ ← White background ✗ 7125│ Title: [_____] │ ← White inputs ✗ 7126│ Date: [_____] │ 7127│ [Cancel] [Save]│ ← Default buttons ✗ 7128└────────────────┘ 7129 7130Sidebar Events: 7131Event 1 ──────── ← White border ✗ 7132Event 2 ──────── ← White border ✗ 7133``` 7134 7135**AFTER (v4.8.5)**: 7136``` 7137Event Dialog (Matrix): 7138┌────────────────┐ 7139│ Add Event │ ← Dark green background ✓ 7140│ Title: [_____] │ ← Dark green inputs ✓ 7141│ Date: [_____] │ ← Green text ✓ 7142│ [Cancel] [Save]│ ← Themed buttons ✓ 7143└────────────────┘ 7144 7145Sidebar Events (Matrix): 7146Event 1 ──────── ← Green border ✓ 7147Event 2 ──────── ← Green border ✓ 7148``` 7149 7150### Dialog Examples by Theme 7151 7152**Matrix Dialog**: 7153``` 7154┌──────────────────────────┐ 7155│ ✏️ Edit Event │ ← Dark green header 7156├──────────────────────────┤ 7157│ Title │ ← Green labels 7158│ [Team Meeting________] │ ← Dark green input 7159│ │ 7160│ Start Date │ 7161│ [2026-02-08__] │ ← Dark green input 7162│ │ 7163│ Start Time │ 7164│ [2:00 PM ▼] │ ← Green select 7165│ │ 7166│ ☑ Repeating Event │ ← Green checkbox 7167│ │ 7168│ [Cancel] [ Save] │ ← Themed buttons 7169└──────────────────────────┘ 7170 7171Everything green! ✓ 7172``` 7173 7174**Purple Dialog**: 7175``` 7176┌──────────────────────────┐ 7177│ ✏️ Edit Event │ ← Dark purple header 7178├──────────────────────────┤ 7179│ [Inputs_______________] │ ← Dark purple inputs 7180│ ☑ Checkboxes │ ← Purple accent 7181│ [Cancel] [ Save] │ ← Purple buttons 7182└──────────────────────────┘ 7183``` 7184 7185**Professional Dialog**: 7186``` 7187┌──────────────────────────┐ 7188│ ✏️ Edit Event │ ← Light gradient header 7189├──────────────────────────┤ 7190│ [Inputs_______________] │ ← White inputs 7191│ ☑ Checkboxes │ ← Blue accent 7192│ [Cancel] [ Save] │ ← Blue save button 7193└──────────────────────────┘ 7194``` 7195 7196**Pink Dialog**: 7197``` 7198┌──────────────────────────┐ 7199│ ✏️ Edit Event │ ← Dark pink header ✨ 7200├──────────────────────────┤ 7201│ [Inputs_______________] │ ← Dark pink inputs 7202│ ☑ Checkboxes │ ← Pink accent 7203│ [Cancel] [ Save] │ ← Pink buttons 7204└──────────────────────────┘ 7205``` 7206 7207### Complete Dialog Element Coverage 7208 7209**All form elements themed**: 7210- ✅ Dialog container 7211- ✅ Dialog header 7212- ✅ Close button (×) 7213- ✅ Title input 7214- ✅ Namespace search 7215- ✅ Namespace dropdown 7216- ✅ Description textarea 7217- ✅ Start date input 7218- ✅ End date input 7219- ✅ Recurring checkbox 7220- ✅ Recurrence type select 7221- ✅ Recurrence end date 7222- ✅ Start time select 7223- ✅ End time select 7224- ✅ Color select 7225- ✅ Custom color picker 7226- ✅ Task checkbox 7227- ✅ All labels 7228- ✅ Cancel button 7229- ✅ Save button 7230 7231**Every single dialog element themed!** 7232 7233### Sidebar Border Example 7234 7235**Matrix Sidebar**: 7236``` 7237┌────────────────┐ 7238│ Today │ ← Green section header 7239├────────────────┤ 7240│ Team Meeting │ 7241│ 2:00 PM │ 7242├────────────────┤ ← Green border (grid_border) 7243│ Code Review │ 7244│ 4:00 PM │ 7245├────────────────┤ ← Green border 7246│ Stand-up │ 7247│ All day │ 7248└────────────────┘ 7249 7250Subtle green dividers! ✓ 7251``` 7252 7253### Complete Achievement 7254 7255**Every UI element themed**: 7256- ✅ Calendar 7257- ✅ Sidebar widget 7258- ✅ Event list 7259- ✅ Search bar 7260- ✅ **Event dialog** ← v4.8.5! 7261- ✅ Month picker 7262- ✅ **Sidebar dividers** ← v4.8.5! 7263- ✅ All text 7264- ✅ All inputs 7265- ✅ All buttons 7266- ✅ All borders 7267- ✅ All checkboxes 7268 7269**ABSOLUTE COMPLETE THEMING!** ✨ 7270 7271## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS 7272 7273### Fixed: Professional Theme Background Consistency 7274- **Fixed:** Container and event backgrounds now match sidebar 7275- **Fixed:** Lighter, cleaner appearance 7276- **Fixed:** Better contrast and readability 7277- **Result:** Professional theme looks cohesive! 7278 7279### The Problem 7280 7281**v4.8.3 Professional theme**: 7282``` 7283Sidebar: Light background (#f5f7fa) 7284Calendar: Medium background (#e8ecf1) ← Didn't match! 7285Events: Light background (#f5f7fa) 7286 7287Inconsistent! ✗ 7288``` 7289 7290### The Fix 7291 7292**Updated Professional theme colors for consistency**: 7293 7294```php 7295// Before: 7296'bg' => '#e8ecf1', // Medium gray-blue 7297'cell_bg' => '#f5f7fa', // Very light 7298'grid_bg' => '#d5dbe3', // Medium-dark 7299 7300// After: 7301'bg' => '#f5f7fa', // Very light (matches sidebar) 7302'cell_bg' => '#ffffff', // Pure white (clean) 7303'grid_bg' => '#e8ecf1', // Subtle contrast 7304'grid_border' => '#d0d7de', // Softer borders 7305``` 7306 7307### Before vs After 7308 7309**BEFORE (v4.8.3)**: 7310``` 7311Professional Theme: 7312┌────────────────┐ 7313│ Calendar │ ← Medium gray (#e8ecf1) 7314│ ┌────────────┐ │ 7315│ │ Event │ │ ← Light (#f5f7fa) 7316│ └────────────┘ │ 7317└────────────────┘ 7318 7319Sidebar: 7320┌────────────────┐ 7321│ Widget │ ← Light (#f5f7fa) 7322└────────────────┘ 7323 7324Backgrounds don't match! ✗ 7325``` 7326 7327**AFTER (v4.8.4)**: 7328``` 7329Professional Theme: 7330┌────────────────┐ 7331│ Calendar │ ← Light (#f5f7fa) 7332│ ┌────────────┐ │ 7333│ │ Event │ │ ← White (#ffffff) 7334│ └────────────┘ │ 7335└────────────────┘ 7336 7337Sidebar: 7338┌────────────────┐ 7339│ Widget │ ← Light (#f5f7fa) 7340└────────────────┘ 7341 7342Perfect match! ✓ 7343``` 7344 7345### New Professional Theme Colors 7346 7347**Backgrounds**: 7348- Container: `#f5f7fa` (light blue-gray) 7349- Events: `#ffffff` (pure white) 7350- Grid: `#e8ecf1` (subtle contrast) 7351 7352**Text**: 7353- Primary: `#2c3e50` (dark blue-gray) 7354- Bright: `#4a90e2` (blue accent) 7355- Dim: `#7f8c8d` (medium gray) 7356 7357**Borders**: 7358- Main: `#4a90e2` (blue) 7359- Grid: `#d0d7de` (soft gray) 7360 7361**Header**: 7362- Gradient: `#ffffff` → `#f5f7fa` 7363 7364### Visual Example 7365 7366**Professional Theme Now**: 7367``` 7368┌─────────────────────────────┐ 7369│ February 2026 │ ← White to light gradient 7370├─┬─┬─┬─┬─┬─┬─┬───────────────┤ 7371│S│M│T│W│T│F│S│ │ ← Light background 7372├─┼─┼─┼─┼─┼─┼─┤ │ 7373│ │ │1│2│3│4│5│ Event List │ ← White events 7374│ │ │ │ │ │ │ │ ┌───────────┐ │ 7375│ │ │ │ │[8]│ │ │ Meeting │ │ ← White on light 7376└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘ 7377 7378Clean, professional look! ✓ 7379``` 7380 7381### Comparison with Other Themes 7382 7383**Matrix** (dark): 7384- Container: #242424 (dark green) 7385- Events: #242424 (dark green) 7386- Consistent dark theme ✓ 7387 7388**Purple** (dark): 7389- Container: #1a0d14 (dark purple) 7390- Events: #2a2030 (dark purple) 7391- Consistent dark theme ✓ 7392 7393**Professional** (light): 7394- Container: #f5f7fa (light blue) 7395- Events: #ffffff (white) 7396- Consistent light theme ✓ 7397 7398**Pink** (dark): 7399- Container: #1a0d14 (dark pink) 7400- Events: #1a0d14 (dark pink) 7401- Consistent dark theme ✓ 7402 7403**All themes now consistent!** 7404 7405### Better Contrast 7406 7407**Professional theme improvements**: 7408 7409**Readability**: 7410- Dark text (#2c3e50) on white/light backgrounds ✓ 7411- Excellent contrast ratio ✓ 7412- Easy on the eyes ✓ 7413 7414**Visual hierarchy**: 7415- White events pop against light container ✓ 7416- Blue accents stand out ✓ 7417- Clean, modern look ✓ 7418 7419**Professional appearance**: 7420- Lighter = more corporate/business feel ✓ 7421- Clean whites = premium quality ✓ 7422- Subtle grays = sophisticated ✓ 7423 7424### Complete Theme Consistency 7425 7426**All themes now have matching backgrounds**: 7427 7428**Matrix**: 7429- Sidebar & Calendar both dark green ✓ 7430 7431**Purple**: 7432- Sidebar & Calendar both dark purple ✓ 7433 7434**Professional**: 7435- Sidebar & Calendar both light ✓ (v4.8.4!) 7436 7437**Pink**: 7438- Sidebar & Calendar both dark pink ✓ 7439 7440**Perfect visual unity across all views!** ✨ 7441 7442## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES 7443 7444### Fixed: Bold Text in Descriptions Themed 7445- **Fixed:** **Bold text** now uses theme primary color 7446- **Fixed:** Both `**text**` and `__text__` syntax themed 7447- **Result:** Bold text matches theme! 7448 7449### Fixed: Search Bar Fully Themed 7450- **Fixed:** Search input has !important on all styles 7451- **Fixed:** Icon and placeholder text themed 7452- **Result:** Search bar perfectly themed! 7453 7454### Fixed: Sidebar Event Boxes Themed 7455- **Fixed:** Event borders in sidebar now use theme grid_border color 7456- **Fixed:** Borders have !important flag 7457- **Result:** Sidebar boxes match theme! 7458 7459### All Changes 7460 7461**1. Bold Text Styling**: 7462 7463**Before**: 7464```html 7465<strong>Bold text</strong> ← Default black 7466``` 7467 7468**After**: 7469```php 7470<strong style="color: $text_primary !important; font-weight:bold;"> 7471 Bold text 7472</strong> 7473 7474Matrix: Green bold ✓ 7475Purple: Lavender bold ✓ 7476Professional: Dark bold ✓ 7477Pink: Pink bold ✓ 7478``` 7479 7480**2. Search Bar**: 7481 7482**Before**: 7483```php 7484style="background: $bg; color: $text;" 7485Could be overridden by CSS 7486``` 7487 7488**After**: 7489```php 7490style="background: $bg !important; 7491 color: $text_primary !important; 7492 border-color: $grid_border !important;" 7493 7494Cannot be overridden! ✓ 7495``` 7496 7497**3. Sidebar Event Boxes**: 7498 7499**Before**: 7500```php 7501$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded 7502``` 7503 7504**After**: 7505```php 7506$borderColor = $themeStyles['grid_border']; // From theme 7507border-bottom: 1px solid $borderColor !important; 7508 7509Matrix: Green borders ✓ 7510Purple: Purple borders ✓ 7511Professional: Gray borders ✓ 7512Pink: Pink borders ✓ 7513``` 7514 7515### Before vs After 7516 7517**BEFORE (v4.8.2)**: 7518``` 7519Event description: 7520"Please review **Q1 Goals** carefully" 7521 ↑ 7522 Black bold ✗ 7523 7524Search bar: 7525[ Search...] ← Gray placeholder ✗ 7526 7527Sidebar: 7528┌────────────┐ 7529│ Event 1 │ 7530├────────────┤ ← Gray border ✗ 7531│ Event 2 │ 7532└────────────┘ 7533``` 7534 7535**AFTER (v4.8.3)**: 7536``` 7537Matrix Theme: 7538 7539Event description: 7540"Please review **Q1 Goals** carefully" 7541 ↑ 7542 Green bold ✓ 7543 7544Search bar: 7545[ Search...] ← Green themed ✓ 7546 7547Sidebar: 7548┌────────────┐ 7549│ Event 1 │ 7550├────────────┤ ← Green border ✓ 7551│ Event 2 │ 7552└────────────┘ 7553``` 7554 7555### Examples by Theme 7556 7557**Matrix Theme**: 7558``` 7559Description: 7560"Check **important notes** and links" 7561 ↑ 7562 Green bold 7563 7564Sidebar boxes: 7565Event 1 7566───────── Green border 7567Event 2 7568───────── Green border 7569``` 7570 7571**Purple Theme**: 7572``` 7573Description: 7574"Review **agenda items** before meeting" 7575 ↑ 7576 Lavender bold 7577 7578Sidebar boxes: 7579Event 1 7580───────── Purple border 7581Event 2 7582───────── Purple border 7583``` 7584 7585**Professional Theme**: 7586``` 7587Description: 7588"Update **quarterly reports** by Friday" 7589 ↑ 7590 Dark bold 7591 7592Sidebar boxes: 7593Event 1 7594───────── Gray border 7595Event 2 7596───────── Gray border 7597``` 7598 7599**Pink Theme**: 7600``` 7601Description: 7602"Don't forget **party supplies** ✨" 7603 ↑ 7604 Pink bold 7605 7606Sidebar boxes: 7607Event 1 7608───────── Pink border 7609Event 2 ✨ 7610───────── Pink border 7611``` 7612 7613### Complete Formatting Coverage 7614 7615**Text formatting themed**: 7616- ✅ Regular text 7617- ✅ **Bold text** ← NEW! 7618- ✅ Links 7619- ✅ Italic text (inherits) 7620- ✅ Code (inherits) 7621 7622**UI elements themed**: 7623- ✅ Search bar ← Enhanced! 7624- ✅ Search icon ← Enhanced! 7625- ✅ Search placeholder ← Enhanced! 7626- ✅ Sidebar borders ← NEW! 7627- ✅ Event borders 7628- ✅ Badges 7629- ✅ Buttons 7630 7631**Every element perfectly themed!** 7632 7633### Search Bar Coverage 7634 7635**All aspects themed**: 7636- Background: Theme cell_bg ✓ 7637- Text color: Theme text_primary ✓ 7638- Border: Theme grid_border ✓ 7639- Placeholder: Inherits text color ✓ 7640- Icon (): In placeholder ✓ 7641- Clear button (✕): Themed ✓ 7642 7643**Cannot be overridden!** (all have !important) 7644 7645### Sidebar Event Box Styling 7646 7647**Consistent borders**: 7648``` 7649Matrix: 7650╔════════════╗ 7651║ Event 1 ║ 7652╟────────────╢ ← grid_border color 7653║ Event 2 ║ 7654╚════════════╝ 7655 7656All themes match perfectly! ✓ 7657``` 7658 7659### Complete Theme Achievement 7660 7661**Every single element themed**: 7662- ✅ Backgrounds 7663- ✅ Text (regular) 7664- ✅ Text (bold) ← v4.8.3! 7665- ✅ Links 7666- ✅ Badges 7667- ✅ Buttons 7668- ✅ Checkboxes 7669- ✅ Icons 7670- ✅ Borders 7671- ✅ Search bar ← Enhanced v4.8.3! 7672- ✅ Sidebar boxes ← v4.8.3! 7673- ✅ Today marker 7674- ✅ Calendar grid 7675- ✅ Event panels 7676 7677**ABSOLUTE PERFECTION!** ✨ 7678 7679## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS 7680 7681### Fixed: Links in Descriptions Now Themed 7682- **Fixed:** All links in event descriptions now use theme color 7683- **Fixed:** DokuWiki links [[page|text]] themed 7684- **Fixed:** Markdown links [text](url) themed 7685- **Fixed:** Plain URLs themed 7686- **Result:** Links match theme perfectly! 7687 7688### The Problem 7689 7690**v4.8.1 behavior**: 7691``` 7692Event description: 7693"Check out https://example.com" ← Blue default link ✗ 7694"See [[wiki:page|docs]]" ← Blue default link ✗ 7695``` 7696 7697### The Fix 7698 7699**Added inline color styling to ALL link types**: 7700 7701```php 7702// Get theme colors: 7703$linkColor = $themeStyles['border'] . ' !important'; 7704$linkStyle = ' style="color:' . $linkColor . ';"'; 7705 7706// Apply to links: 7707<a href="..." style="color: #00cc07 !important;">link</a> 7708``` 7709 7710**All link types themed**: 77111. DokuWiki syntax: `[[page|text]]` 77122. Markdown syntax: `[text](url)` 77133. Plain URLs: `https://example.com` 7714 7715### Before vs After 7716 7717**BEFORE (v4.8.1)**: 7718``` 7719Matrix Theme Description: 7720"Visit https://example.com for more info" 7721 ↑ 7722 Blue link ✗ (doesn't match green theme) 7723``` 7724 7725**AFTER (v4.8.2)**: 7726``` 7727Matrix Theme Description: 7728"Visit https://example.com for more info" 7729 ↑ 7730 Green link ✓ (matches theme!) 7731``` 7732 7733### Link Colors by Theme 7734 7735**Matrix**: 7736- Links: Green (#00cc07) !important 7737- Matches: Border, badges, highlights 7738 7739**Purple**: 7740- Links: Purple (#9b59b6) !important 7741- Matches: Border, badges, highlights 7742 7743**Professional**: 7744- Links: Blue (#4a90e2) !important 7745- Matches: Border, badges, highlights 7746 7747**Pink**: 7748- Links: Hot Pink (#ff1493) !important 7749- Matches: Border, badges, highlights ✨ 7750 7751### Examples 7752 7753**Matrix Description with Links**: 7754``` 7755Event: Team Meeting 7756Description: 7757"Review [[wiki:q1goals|Q1 Goals]] 7758and visit https://metrics.com" 7759 7760Both links → Green ✓ 7761``` 7762 7763**Purple Description with Links**: 7764``` 7765Event: Planning Session 7766Description: 7767"Check [schedule](https://cal.com) 7768for availability" 7769 7770Link → Purple ✓ 7771``` 7772 7773**Professional Description with Links**: 7774``` 7775Event: Client Call 7776Description: 7777"Prepare [[reports|Monthly Reports]] 7778before the call" 7779 7780Link → Blue ✓ 7781``` 7782 7783**Pink Description with Links**: 7784``` 7785Event: Party Planning 7786Description: 7787"RSVP at https://party.com ✨" 7788 7789Link → Hot Pink ✓ 7790``` 7791 7792### Technical Implementation 7793 7794**Updated renderDescription() function**: 7795 7796```php 7797private function renderDescription($description, $themeStyles = null) { 7798 // Get theme 7799 if ($themeStyles === null) { 7800 $theme = $this->getSidebarTheme(); 7801 $themeStyles = $this->getSidebarThemeStyles($theme); 7802 } 7803 7804 // Create link style 7805 $linkColor = $themeStyles['border'] . ' !important'; 7806 $linkStyle = ' style="color:' . $linkColor . ';"'; 7807 7808 // Apply to all link types: 7809 $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>'; 7810} 7811``` 7812 7813### Complete Theming 7814 7815**Every text element**: 7816- ✅ Event titles 7817- ✅ Event dates 7818- ✅ Event descriptions 7819- ✅ **Links in descriptions** ← NEW! 7820- ✅ Badges 7821- ✅ Buttons 7822 7823**Every color unified!** 7824 7825### Unified Theme Experience 7826 7827**Matrix Theme**: 7828``` 7829Everything green: 7830- Text: Green ✓ 7831- Links: Green ✓ 7832- Badges: Green ✓ 7833- Borders: Green ✓ 7834- Buttons: Green ✓ 7835- Today marker: Green ✓ 7836 7837Perfect harmony! ✓ 7838``` 7839 7840**No default blue links breaking the theme!** 7841 7842### Link Types Supported 7843 7844**1. DokuWiki Syntax**: 7845``` 7846[[page|Link Text]] → Themed ✓ 7847[[page]] → Themed ✓ 7848[[page#section|Text]] → Themed ✓ 7849``` 7850 7851**2. Markdown Syntax**: 7852``` 7853[Link Text](https://url.com) → Themed ✓ 7854[Text](internal-page) → Themed ✓ 7855``` 7856 7857**3. Plain URLs**: 7858``` 7859https://example.com → Themed ✓ 7860http://site.org → Themed ✓ 7861``` 7862 7863**All links perfectly themed!** 7864 7865## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER 7866 7867### Fixed: All Badges Now Themed 7868- **Fixed:** TODAY badge themed with theme color 7869- **Fixed:** PAST DUE badge uses orange (warning color) 7870- **Fixed:** Namespace badges themed 7871- **Fixed:** All badges visible and hidden 7872- **Result:** All badges match theme! 7873 7874### Fixed: Today Cell More Prominent 7875- **Fixed:** Today cell now has 2px border in theme color 7876- **Fixed:** Border added to both PHP and JavaScript 7877- **Result:** Today stands out clearly! 7878 7879### Fixed: Past Event Text Fully Themed 7880- **Fixed:** Event-info div backgrounds ensure no gray 7881- **Result:** Expanded past events completely themed! 7882 7883### All Changes 7884 7885**1. Badge Theming**: 7886 7887**TODAY Badge**: 7888```php 7889// PHP & JavaScript: 7890style="background: $themeStyles['border'] !important; 7891 color: $bg !important;" 7892 7893Matrix: Green badge 7894Purple: Purple badge 7895Professional: Blue badge with white text 7896Pink: Pink badge 7897``` 7898 7899**PAST DUE Badge** (always orange): 7900```php 7901style="background: #ff9800 !important; 7902 color: #fff !important;" 7903``` 7904 7905**Namespace Badge**: 7906```php 7907style="background: $themeStyles['border'] !important; 7908 color: $bg !important;" 7909``` 7910 7911**2. Today Cell Border**: 7912 7913**PHP**: 7914```php 7915$todayBorder = $isToday ? 7916 'border:2px solid ' . $themeStyles['border'] . ' !important;' : ''; 7917``` 7918 7919**JavaScript**: Same 7920 7921**Result**: Today cell has prominent colored border! 7922 7923### Before vs After 7924 7925**BEFORE (v4.8.0)**: 7926``` 7927Calendar: 7928┌─┬─┬─┬─┬─┬─┬─┐ 7929│1│2│3│4│5│6│7│ 7930│ │ │ │[8]│ │ │ ← Today: subtle background 7931└─┴─┴─┴─┴─┴─┴─┘ 7932 7933Event badges: 7934Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗ 7935``` 7936 7937**AFTER (v4.8.1)**: 7938``` 7939Calendar (Matrix): 7940┌─┬─┬─┬─┬─┬─┬─┐ 7941│1│2│3│4│5│6│7│ 7942│ │ │ │[8]│ │ │ ← Today: green border 2px ✓ 7943└─┴─┴─┴─┴─┴─┴─┘ 7944 7945Event badges (Matrix): 7946Mon, Feb 8 [TODAY] [Work] ← Green badges ✓ 7947``` 7948 7949### Matrix Theme Example 7950 7951**Calendar**: 7952``` 7953Today cell: 7954┌────┐ 7955│ 8 │ Dark green bg + Green 2px border 7956└────┘ 7957Very obvious! 7958``` 7959 7960**Badges**: 7961``` 7962[TODAY] ← Green bg, dark text 7963[Work] ← Green bg, dark text 7964[PAST DUE] ← Orange bg, white text 7965``` 7966 7967### Purple Theme Example 7968 7969**Calendar**: 7970``` 7971Today cell: 7972┌────┐ 7973│ 8 │ Dark purple bg + Purple 2px border 7974└────┘ 7975``` 7976 7977**Badges**: 7978``` 7979[TODAY] ← Purple bg 7980[Work] ← Purple bg 7981``` 7982 7983### Professional Theme Example 7984 7985**Calendar**: 7986``` 7987Today cell: 7988┌────┐ 7989│ 8 │ Light blue bg + Blue 2px border 7990└────┘ 7991``` 7992 7993**Badges**: 7994``` 7995[TODAY] ← Blue bg, white text 7996[Work] ← Blue bg, white text 7997``` 7998 7999### Pink Theme Example 8000 8001**Calendar**: 8002``` 8003Today cell: 8004┌────┐ 8005│ 8 │ Dark pink bg + Pink 2px border ✨ 8006└────┘ 8007``` 8008 8009**Badges**: 8010``` 8011[TODAY] ← Pink bg 8012[Work] ← Pink bg ✨ 8013``` 8014 8015### Complete Badge Coverage 8016 8017**All badges themed**: 8018- ✅ TODAY badge (theme color) 8019- ✅ PAST DUE badge (orange warning) 8020- ✅ Namespace badges (theme color) 8021- ✅ Visible events 8022- ✅ Hidden/past events 8023 8024**No gray badges anywhere!** 8025 8026### Today Cell Visual 8027 8028**Dual indicators**: 80291. Background color (theme today bg) 80302. Border (2px theme color) ← NEW! 8031 8032**Result**: Today is VERY obvious! 8033 8034**Matrix**: Green bg + Green border 8035**Purple**: Purple bg + Purple border 8036**Professional**: Light blue bg + Blue border 8037**Pink**: Pink bg + Pink border ✨ 8038 8039### Complete Theming 8040 8041**Every element themed**: 8042- ✅ Backgrounds 8043- ✅ Text colors 8044- ✅ Badges (v4.8.1!) 8045- ✅ Today marker (v4.8.1!) 8046- ✅ Checkboxes 8047- ✅ Buttons 8048- ✅ Icons 8049 8050**Absolutely everything!** ✨ 8051 8052## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING 8053 8054### Fixed: All Event Backgrounds Now Themed 8055- **Fixed:** event-info div now has themed background 8056- **Fixed:** event-meta-compact div (visible) now has themed background 8057- **Fixed:** event-desc-compact div now has themed background 8058- **Fixed:** All !important flags added to prevent CSS override 8059- **Result:** Entire event item fully themed! 8060 8061### Fixed: Description Text Shows Correct Color Immediately 8062- **Fixed:** Description divs now have explicit background + color on load 8063- **Fixed:** Both visible and hidden descriptions fully styled 8064- **Result:** No more gray text on initial load! 8065 8066### The Problem 8067 8068**v4.7.9 behavior**: 8069``` 8070Expanded past event: 8071┌────────────────────────┐ 8072│ ▾ Team Meeting │ ← Themed ✓ 8073│ Mon, Feb 8 │ ← Themed ✓ 8074│ │ 8075│ [Event details] │ ← Gray background ✗ 8076│ [Description] │ ← Gray text until navigation ✗ 8077└────────────────────────┘ 8078 8079Only the date/time div was themed! 8080``` 8081 8082### The Fix 8083 8084**Added background to ALL inner divs**: 8085 8086**PHP**: 8087```php 8088// Event container: 8089style="background:' . $themeStyles['cell_bg'] . ' !important;" 8090 8091// event-info wrapper: 8092<div class="event-info" 8093 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 8094 8095// event-meta-compact: 8096<div class="event-meta-compact" 8097 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 8098 8099// event-desc-compact: 8100<div class="event-desc-compact" 8101 style="background:' . $themeStyles['cell_bg'] . ' !important; 8102 color:' . $themeStyles['text_dim'] . ' !important;"> 8103``` 8104 8105**JavaScript**: Same styling applied 8106 8107### Before vs After 8108 8109**BEFORE (v4.7.9)**: 8110``` 8111Matrix Theme - Expanded Event: 8112┌────────────────────────┐ 8113│ ▾ Team Meeting │ 8114│ Mon, Feb 8 ← Green │ 8115│ │ 8116│ Details ← Gray ✗ │ 8117│ Description ← Gray ✗ │ 8118│ [✏️] [️] │ 8119└────────────────────────┘ 8120``` 8121 8122**AFTER (v4.8.0)**: 8123``` 8124Matrix Theme - Expanded Event: 8125┌────────────────────────┐ 8126│ ▾ Team Meeting │ 8127│ Mon, Feb 8 ← Green │ 8128│ │ 8129│ Details ← Green ✓│ 8130│ Description ← Green ✓│ 8131│ [✏️] [️] │ 8132└────────────────────────┘ 8133 8134Entire event themed! 8135``` 8136 8137### What's Themed Now 8138 8139**Event Item Structure** (all themed): 8140``` 8141event-compact-item ← Themed ✓ 8142 └─ event-info ← Themed ✓ (v4.8.0!) 8143 ├─ event-title-row ← Themed ✓ 8144 ├─ event-meta ← Themed ✓ (v4.8.0!) 8145 └─ event-desc ← Themed ✓ (v4.8.0!) 8146``` 8147 8148**Every layer has background!** 8149 8150### Matrix Theme Example 8151 8152**Complete event**: 8153``` 8154┌────────────────────────────┐ 8155│ Team Meeting │ ← Dark green bg 8156│ Mon, Feb 8 • 2:00 PM │ ← Dark green bg 8157│ Discussed Q1 goals and │ ← Dark green bg 8158│ set targets for team │ ← Dark green bg 8159│ [✏️] [️] [☑] │ ← Dark green bg 8160└────────────────────────────┘ 8161 8162Consistent green throughout! ✓ 8163``` 8164 8165### Purple Theme Example 8166 8167``` 8168┌────────────────────────────┐ 8169│ Team Meeting │ ← Dark purple bg 8170│ Mon, Feb 8 • 2:00 PM │ ← Dark purple bg 8171│ Discussed Q1 goals │ ← Dark purple bg 8172│ [✏️] [️] [☑] │ ← Dark purple bg 8173└────────────────────────────┘ 8174 8175Consistent purple throughout! ✓ 8176``` 8177 8178### Professional Theme Example 8179 8180``` 8181┌────────────────────────────┐ 8182│ Team Meeting │ ← Light bg 8183│ Mon, Feb 8 • 2:00 PM │ ← Light bg 8184│ Discussed Q1 goals │ ← Light bg 8185│ [✏️] [️] [☑] │ ← Light bg 8186└────────────────────────────┘ 8187 8188Consistent light throughout! ✓ 8189``` 8190 8191### Pink Theme Example 8192 8193``` 8194┌────────────────────────────┐ 8195│ Team Meeting │ ← Dark pink bg 8196│ Mon, Feb 8 • 2:00 PM │ ← Dark pink bg 8197│ Discussed Q1 goals │ ← Dark pink bg 8198│ [✏️] [️] [☑] │ ← Dark pink bg 8199└────────────────────────────┘ 8200 8201Consistent pink throughout! ✓ 8202``` 8203 8204### Complete Theming 8205 8206**Every element, every layer**: 8207- ✅ Container 8208- ✅ Event item 8209- ✅ Event info wrapper (v4.8.0!) 8210- ✅ Title row 8211- ✅ Meta div (v4.8.0!) 8212- ✅ Description div (v4.8.0!) 8213- ✅ Action buttons 8214- ✅ Checkboxes 8215 8216**No gray anywhere!** 8217 8218### Why Multiple Backgrounds? 8219 8220**CSS layers stack**: 8221```html 8222<div style="background: green;"> ← Layer 1 8223 <div style="background: inherit;"> ← Could be gray! 8224 <div>Content</div> ← Inherits gray! 8225 </div> 8226</div> 8227 8228Better: 8229<div style="background: green;"> ← Layer 1 8230 <div style="background: green;"> ← Layer 2 forced 8231 <div style="background: green;"> ← Layer 3 forced 8232 Content ← All green! 8233 </div> 8234 </div> 8235</div> 8236``` 8237 8238**Every layer forced = Perfect theming!** 8239 8240### !important Everywhere 8241 8242**All styling now uses !important**: 8243- background: ... !important 8244- color: ... !important 8245 8246**Result**: CSS cannot override themes! 8247 8248**Version 4.8.0 = Complete, bulletproof theming!** ✨ 8249 8250## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS 8251 8252### Fixed: Past Event Expanded Background Themed 8253- **Fixed:** Past event meta div now has theme background when expanded 8254- **Fixed:** Both PHP and JavaScript render with theme background 8255- **Result:** Expanded past events have proper themed background! 8256 8257### ✅ Fixed: Checkboxes Now Themed 8258- **Fixed:** Task checkboxes use accent-color matching theme 8259- **Fixed:** Cursor changes to pointer on hover 8260- **Result:** Checkboxes match theme color! 8261 8262### Fixed: Action Buttons (Edit/Delete) Themed 8263- **Fixed:** Edit (✏️) and Delete (️) buttons now themed 8264- **Fixed:** Background, text, and border all use theme colors 8265- **Result:** All icons themed! 8266 8267### All Changes 8268 8269**1. Past Event Expanded Background**: 8270 8271**PHP**: 8272```php 8273// Before: 8274<div class="event-meta-compact" style="display:none;"> 8275 8276// After: 8277<div class="event-meta-compact" 8278 style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;"> 8279``` 8280 8281**JavaScript**: Same treatment 8282 8283**Result**: Expanded past events have themed background! 8284 8285**2. Task Checkboxes**: 8286 8287**PHP & JavaScript**: 8288```php 8289// Added accent-color: 8290<input type="checkbox" 8291 style="accent-color:' . $themeStyles['border'] . ' !important; 8292 cursor:pointer;"> 8293``` 8294 8295**accent-color** changes the checkbox color: 8296- Matrix: Green checkboxes ✓ 8297- Purple: Purple checkboxes ✓ 8298- Professional: Blue checkboxes ✓ 8299- Pink: Pink checkboxes ✓ 8300 8301**3. Edit/Delete Buttons**: 8302 8303**PHP**: 8304```php 8305<button class="event-action-btn" 8306 style="color:' . $themeStyles['text_primary'] . ' !important; 8307 background:' . $themeStyles['cell_bg'] . ' !important; 8308 border-color:' . $themeStyles['grid_border'] . ' !important;"> 8309 ️ 8310</button> 8311``` 8312 8313**JavaScript**: Same 8314 8315**Result**: Buttons blend with theme! 8316 8317### Before vs After 8318 8319**BEFORE (v4.7.8)**: 8320``` 8321Past Event (expanded): 8322┌─────────────────────────┐ 8323│ ▾ Team Meeting │ 8324│ Mon, Feb 8 │ ← White background ✗ 8325│ Description │ 8326├─────────────────────────┤ 8327│ [✏️] [️] [☐] │ ← Default colors ✗ 8328└─────────────────────────┘ 8329``` 8330 8331**AFTER (v4.7.9)**: 8332``` 8333Past Event (expanded - Matrix): 8334┌─────────────────────────┐ 8335│ ▾ Team Meeting │ 8336│ Mon, Feb 8 │ ← Dark green bg ✓ 8337│ Description │ 8338├─────────────────────────┤ 8339│ [✏️] [️] [☑] │ ← Themed ✓ 8340└─────────────────────────┘ 8341``` 8342 8343### Matrix Theme Example 8344 8345**Checkboxes**: Green accent 8346**Buttons**: Dark bg, green text, green borders 8347**Expanded**: Dark green background 8348 8349``` 8350Task: ☑ Complete report ← Green checkmark 8351[✏️] [️] ← Dark buttons with green 8352``` 8353 8354### Purple Theme Example 8355 8356**Checkboxes**: Purple accent 8357**Buttons**: Dark purple bg, lavender text 8358**Expanded**: Dark purple background 8359 8360``` 8361Task: ☑ Complete report ← Purple checkmark 8362[✏️] [️] ← Purple themed 8363``` 8364 8365### Professional Theme Example 8366 8367**Checkboxes**: Blue accent 8368**Buttons**: Light bg, dark text 8369**Expanded**: Light background 8370 8371``` 8372Task: ☑ Complete report ← Blue checkmark 8373[✏️] [️] ← Light themed 8374``` 8375 8376### Pink Theme Example 8377 8378**Checkboxes**: Pink accent 8379**Buttons**: Dark pink bg, pink text 8380**Expanded**: Dark pink background 8381 8382``` 8383Task: ☑ Complete report ← Pink checkmark 8384[✏️] [️] ← Pink themed 8385``` 8386 8387### Complete Icon Coverage 8388 8389**Themed Icons/Buttons**: 8390- ✅ Task checkboxes (accent-color) 8391- ✅ Edit button (✏️) 8392- ✅ Delete button (️) 8393- ✅ Navigation arrows (◀ ▶) 8394- ✅ Today button 8395- ✅ Past Events arrow (▶) 8396 8397**All interactive elements themed!** 8398 8399### How accent-color Works 8400 8401**Modern CSS property** for form controls: 8402```css 8403input[type="checkbox"] { 8404 accent-color: #00cc07; /* Green checkbox! */ 8405} 8406``` 8407 8408**Browser support**: All modern browsers ✓ 8409 8410**Result**: Checkboxes automatically match theme! 8411 8412### Complete Theme Coverage 8413 8414**Backgrounds**: 8415- ✅ Container 8416- ✅ Calendar-left 8417- ✅ Calendar-right 8418- ✅ Event items 8419- ✅ Past event expanded (v4.7.9!) 8420- ✅ Action buttons (v4.7.9!) 8421 8422**Icons/Controls**: 8423- ✅ Checkboxes (v4.7.9!) 8424- ✅ Edit/Delete buttons (v4.7.9!) 8425- ✅ Navigation buttons 8426- ✅ All arrows 8427 8428**Every element perfectly themed!** ✨ 8429 8430## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS 8431 8432### Fixed: White Bar at Bottom of Calendar 8433- **Fixed:** Added background to calendar-left div with !important 8434- **Result:** No more white bar at bottom! 8435 8436### Fixed: Past Event Expanded Details Not Themed 8437- **Fixed:** Past event date/time now themed when expanded 8438- **Fixed:** Past event descriptions now themed when expanded 8439- **Fixed:** Both PHP and JavaScript render with theme colors 8440- **Result:** Expanding past events shows themed text! 8441 8442### Fixed: Event Description Text Color 8443- **Fixed:** All event descriptions now use theme text_dim color 8444- **Fixed:** Both visible and hidden descriptions themed 8445- **Result:** Descriptions always match theme! 8446 8447### All Changes 8448 8449**1. Bottom White Bar** (calendar-left div): 8450 8451**Before**: 8452```html 8453<div class="calendar-compact-left"> 8454<!-- White background showing at bottom --> 8455``` 8456 8457**After**: 8458```html 8459<div class="calendar-compact-left" 8460 style="background: #242424 !important;"> 8461<!-- Matches theme background --> 8462``` 8463 8464**2. Past Event Expanded Details**: 8465 8466**PHP** - Added colors to hidden details: 8467```php 8468// Past event meta (hidden): 8469<span class="event-date-time" 8470 style="color:' . $themeStyles['text_dim'] . ' !important;"> 8471 8472// Past event description (hidden): 8473<div class="event-desc-compact" 8474 style="display:none; color:' . $themeStyles['text_dim'] . ' !important;"> 8475``` 8476 8477**JavaScript** - Same treatment: 8478```javascript 8479// Past event meta: 8480html += '<span class="event-date-time" 8481 style="color:' + themeStyles.text_dim + ' !important;">'; 8482 8483// Past event description: 8484html += '<div class="event-desc-compact" 8485 style="display: none; color:' + themeStyles.text_dim + ' !important;">'; 8486``` 8487 8488**3. All Event Descriptions**: 8489 8490**Both visible and hidden descriptions now themed**: 8491```php 8492// PHP: 8493style="color:' . $themeStyles['text_dim'] . ' !important;" 8494 8495// JavaScript: 8496style="color:' + themeStyles.text_dim + ' !important;" 8497``` 8498 8499### Before vs After 8500 8501**BEFORE (v4.7.7)**: 8502``` 8503Calendar bottom: 8504┌──────────────┐ 8505│ Calendar │ 8506│ Grid │ 8507└──────────────┘ 8508▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar 8509 8510Past Event (collapsed): 8511▸ Team Meeting 8512 8513Past Event (expanded): 8514▾ Team Meeting 8515 Mon, Feb 8 ← Gray text ✗ 8516 Description ← Gray text ✗ 8517``` 8518 8519**AFTER (v4.7.8)**: 8520``` 8521Calendar bottom: 8522┌──────────────┐ 8523│ Calendar │ 8524│ Grid │ 8525└──────────────┘ 8526No white bar! ✓ 8527 8528Past Event (collapsed): 8529▸ Team Meeting 8530 8531Past Event (expanded): 8532▾ Team Meeting 8533 Mon, Feb 8 ← Theme dim color ✓ 8534 Description ← Theme dim color ✓ 8535``` 8536 8537### Matrix Theme Example 8538 8539**Past event expanded**: 8540``` 8541▾ Team Meeting (past) 8542 Mon, Feb 8 • 2:00 PM ← Dim green (#00aa00) 8543 Discussed Q1 goals ← Dim green (#00aa00) 8544 8545Everything themed! ✓ 8546``` 8547 8548### Purple Theme Example 8549 8550**Past event expanded**: 8551``` 8552▾ Team Meeting (past) 8553 Mon, Feb 8 • 2:00 PM ← Dim purple (#8e7ab8) 8554 Discussed Q1 goals ← Dim purple (#8e7ab8) 8555 8556Everything themed! ✓ 8557``` 8558 8559### Professional Theme Example 8560 8561**Past event expanded**: 8562``` 8563▾ Team Meeting (past) 8564 Mon, Feb 8 • 2:00 PM ← Gray (#7f8c8d) 8565 Discussed Q1 goals ← Gray (#7f8c8d) 8566 8567Everything themed! ✓ 8568``` 8569 8570### Pink Theme Example 8571 8572**Past event expanded**: 8573``` 8574▾ Team Meeting (past) 8575 Mon, Feb 8 • 2:00 PM ← Light pink (#ff85c1) 8576 Discussed Q1 goals ← Light pink (#ff85c1) 8577 8578Everything themed! ✓ 8579``` 8580 8581### Complete Coverage 8582 8583**Calendar Layout**: 8584- ✅ Container background 8585- ✅ Calendar-left background (v4.7.8!) 8586- ✅ Calendar-right background 8587- ✅ No white bars anywhere! 8588 8589**Event Details**: 8590- ✅ Event titles 8591- ✅ Event dates/times 8592- ✅ Event descriptions (visible) (v4.7.8!) 8593- ✅ Past event dates (expanded) (v4.7.8!) 8594- ✅ Past event descriptions (expanded) (v4.7.8!) 8595 8596**Absolutely everything themed!** 8597 8598## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS 8599 8600### Fixed: Added !important to EVERY Themed Element 8601- **Fixed:** S M T W T F S headers now have background + color with !important 8602- **Fixed:** "Past Events" text now has explicit color with !important 8603- **Fixed:** Today cell background now forced with !important 8604- **Fixed:** All day numbers now have !important color 8605- **Fixed:** Empty cells now have !important background 8606- **Result:** CSS CANNOT override themes anymore! 8607 8608### The Nuclear Option: !important Everywhere 8609 8610**Problem**: DokuWiki CSS was still winning: 8611```css 8612/* DokuWiki theme overriding everything: */ 8613.dokuwiki table th { background: white !important; color: black !important; } 8614.dokuwiki td { background: white !important; } 8615``` 8616 8617**Solution**: Add !important to EVERY inline style: 8618```html 8619<th style="background: #242424 !important; color: #00cc07 !important;"> 8620<td style="background: #2a4d2a !important; color: #00cc07 !important;"> 8621<span style="color: #00cc07 !important;"> 8622``` 8623 8624### All Changes 8625 8626**1. Table Headers (S M T W T F S)**: 8627 8628**PHP** - Added background + !important everywhere: 8629```php 8630$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important; 8631 color:' . $themeStyles['text_primary'] . ' !important; 8632 border-color:' . $themeStyles['grid_border'] . ' !important; 8633 font-weight:bold !important;'; 8634``` 8635 8636**JavaScript** - Added background to each th: 8637```javascript 8638th.style.setProperty('background', themeStyles.header_bg, 'important'); 8639th.style.setProperty('color', themeStyles.text_primary, 'important'); 8640th.style.setProperty('border-color', themeStyles.grid_border, 'important'); 8641th.style.setProperty('font-weight', 'bold', 'important'); 8642``` 8643 8644**2. Past Events Text**: 8645 8646**PHP** - Added !important to spans: 8647```php 8648<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span> 8649<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span> 8650``` 8651 8652**JavaScript** - Same treatment: 8653```javascript 8654html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>'; 8655html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>'; 8656``` 8657 8658**3. Today Cell & All Cells**: 8659 8660**PHP** - !important on background and color: 8661```php 8662// Today or regular cell: 8663$cellStyle = 'background:' . $cellBg . ' !important; 8664 color:' . $themeStyles['text_primary'] . ' !important;'; 8665 8666// Day number: 8667<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;"> 8668``` 8669 8670**JavaScript** - Same: 8671```javascript 8672style="background:${cellBg} !important; color:${cellColor} !important;" 8673 8674<span style="color:${cellColor} !important;">${currentDay}</span> 8675``` 8676 8677**4. Empty Cells**: 8678 8679**PHP & JavaScript** - !important: 8680```php 8681style="background:' . $themeStyles['bg'] . ' !important;" 8682``` 8683 8684### Before vs After 8685 8686**BEFORE (v4.7.6)** - CSS still winning: 8687``` 8688S M T W T F S → White background, black text ✗ 8689Today cell → White background ✗ 8690Past Events → Black text ✗ 8691``` 8692 8693**AFTER (v4.7.7)** - Theme wins: 8694``` 8695S M T W T F S → Theme background, theme text ✓ 8696Today cell → Theme highlight ✓ 8697Past Events → Theme text ✓ 8698 8699NOTHING can override !important inline styles! 8700``` 8701 8702### Matrix Theme Example 8703 8704**Complete theming**: 8705``` 8706┌──────────────────────────┐ 8707│ S M T W T F S │ ← Dark bg (#2a2a2a), Green text (#00cc07) 8708├─┬─┬─┬─┬─┬─┬──────────────┤ 8709│ │ │1│2│3│4│5 │ ← Dark cells (#242424), Green nums (#00cc07) 8710│ │ │ │ │ │[8]│ │ ← Today green highlight (#2a4d2a) 8711├─┴─┴─┴─┴─┴─┴──────────────┤ 8712│ ▶ Past Events (3) │ ← Dim green text (#00aa00) 8713└──────────────────────────┘ 8714 8715Every element forced with !important ✓ 8716``` 8717 8718### Purple Theme Example 8719 8720``` 8721┌──────────────────────────┐ 8722│ S M T W T F S │ ← Dark purple bg, Lavender text 8723├─┬─┬─┬─┬─┬─┬──────────────┤ 8724│ │ │1│2│3│4│5 │ ← Dark purple cells, Lavender nums 8725│ │ │ │ │ │[8]│ │ ← Today purple highlight 8726├─┴─┴─┴─┴─┴─┴──────────────┤ 8727│ ▶ Past Events (3) │ ← Dim purple text 8728└──────────────────────────┘ 8729 8730Forced purple everywhere ✓ 8731``` 8732 8733### Professional Theme Example 8734 8735``` 8736┌──────────────────────────┐ 8737│ S M T W T F S │ ← Light bg, Dark text 8738├─┬─┬─┬─┬─┬─┬──────────────┤ 8739│ │ │1│2│3│4│5 │ ← Light cells, Dark nums 8740│ │ │ │ │ │[8]│ │ ← Today light blue highlight 8741├─┴─┴─┴─┴─┴─┴──────────────┤ 8742│ ▶ Past Events (3) │ ← Gray text 8743└──────────────────────────┘ 8744 8745Forced professional everywhere ✓ 8746``` 8747 8748### Pink Theme Example 8749 8750``` 8751┌──────────────────────────┐ 8752│ S M T W T F S │ ← Dark pink bg, Pink text 8753├─┬─┬─┬─┬─┬─┬──────────────┤ 8754│ │ │1│2│3│4│5 ✨ │ ← Dark pink cells, Pink nums 8755│ │ │ │ │ │[8]│ │ ← Today pink highlight 8756├─┴─┴─┴─┴─┴─┴──────────────┤ 8757│ ▶ Past Events (3) │ ← Light pink text 8758└──────────────────────────┘ 8759 8760Forced pink sparkles everywhere ✓ 8761``` 8762 8763### Why So Aggressive? 8764 8765**!important priority**: 8766``` 87671. Inline style with !important ← We use this 87682. CSS rule with !important 87693. Inline style without !important 87704. CSS rule without !important 8771``` 8772 8773**We win**: Our inline `!important` beats everything! 8774 8775### Complete !important Coverage 8776 8777**Every themed element now has !important**: 8778- ✅ S M T W T F S (background + color) 8779- ✅ Day numbers (color) 8780- ✅ Today cell (background + color) 8781- ✅ Empty cells (background) 8782- ✅ Past Events text (color) 8783- ✅ Past Events arrow (color) 8784- ✅ Event titles (color) 8785- ✅ Event dates (color) 8786 8787**No CSS can override themes!** 8788 8789## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS 8790 8791### Fixed: Event Sidebar Text Now Themed 8792- **Fixed:** Event titles now have explicit color styling 8793- **Fixed:** Event dates/times now have explicit color styling (dimmed) 8794- **Fixed:** Both PHP and JavaScript event rendering now styled 8795 8796### Enhanced: Table Header Colors Now Forced with !important 8797- **Fixed:** S M T W T F S now uses `!important` to override any CSS 8798- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag 8799- **Result:** Header colors CANNOT be overridden! 8800 8801### What Was Fixed 8802 8803**1. Event Text in Sidebar** (was missing): 8804 8805**PHP** - Explicit colors added: 8806```php 8807// Event title: 8808<span class="event-title-compact" 8809 style="color:' . $themeStyles['text_primary'] . ';"> 8810 8811// Event date/time: 8812<span class="event-date-time" 8813 style="color:' . $themeStyles['text_dim'] . ';"> 8814``` 8815 8816**JavaScript** - Explicit colors added: 8817```javascript 8818// Event title: 8819html += '<span class="event-title-compact" 8820 style="color:' + themeStyles.text_primary + ';">'; 8821 8822// Event date/time: 8823html += '<span class="event-date-time" 8824 style="color:' + themeStyles.text_dim + ';">'; 8825``` 8826 8827**2. Table Header Colors** (was being overridden): 8828 8829**PHP** - Added !important: 8830```php 8831// Row: 8832style="color: ' . $themeStyles['text_primary'] . ' !important;" 8833 8834// Each th: 8835$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;'; 8836<th style="' . $thStyle . '">S</th> 8837``` 8838 8839**JavaScript** - Used setProperty with important: 8840```javascript 8841// Row: 8842thead.style.setProperty('color', themeStyles.text_primary, 'important'); 8843 8844// Each th: 8845th.style.setProperty('color', themeStyles.text_primary, 'important'); 8846``` 8847 8848### Before vs After 8849 8850**BEFORE (v4.7.5)**: 8851``` 8852Event List: 8853┌─────────────────┐ 8854│ Team Meeting │ ← Black/default color ✗ 8855│ Mon, Feb 8 │ ← Black/default color ✗ 8856└─────────────────┘ 8857 8858Table Header: 8859S M T W T F S ← Black/default color ✗ 8860(CSS was overriding the style) 8861``` 8862 8863**AFTER (v4.7.6)**: 8864``` 8865Event List (Matrix): 8866┌─────────────────┐ 8867│ Team Meeting │ ← Green (#00cc07) ✓ 8868│ Mon, Feb 8 │ ← Dim green (#00aa00) ✓ 8869└─────────────────┘ 8870 8871Table Header (Matrix): 8872S M T W T F S ← Green (!important) ✓ 8873(Cannot be overridden!) 8874``` 8875 8876### Why !important? 8877 8878**Problem**: DokuWiki CSS was stronger: 8879```css 8880/* Some DokuWiki theme CSS: */ 8881table th { 8882 color: #000 !important; /* ← Overrides inline styles */ 8883} 8884``` 8885 8886**Solution**: Use !important in inline styles: 8887```html 8888<th style="color: #00cc07 !important;">S</th> 8889<!-- Inline !important beats CSS !important --> 8890``` 8891 8892**JavaScript method**: 8893```javascript 8894// Old (could be overridden): 8895th.style.color = '#00cc07'; 8896 8897// New (cannot be overridden): 8898th.style.setProperty('color', '#00cc07', 'important'); 8899``` 8900 8901### Event Text Colors 8902 8903**Two-tone approach**: 8904 8905**Primary text** (titles): 8906- Matrix: `#00cc07` (bright green) 8907- Purple: `#b19cd9` (lavender) 8908- Professional: `#2c3e50` (dark) 8909- Pink: `#ff69b4` (pink) 8910 8911**Dimmed text** (dates/times): 8912- Matrix: `#00aa00` (dim green) 8913- Purple: `#8e7ab8` (dim purple) 8914- Professional: `#7f8c8d` (gray) 8915- Pink: `#ff85c1` (light pink) 8916 8917**Creates visual hierarchy!** ✓ 8918 8919### Complete Theme Coverage NOW 8920 8921**Calendar Grid**: 8922- Container ✅ 8923- Header ✅ 8924- Buttons ✅ 8925- S M T W T F S ✅ (!important - v4.7.6!) 8926- Day numbers ✅ 8927- Today cell ✅ 8928- Empty cells ✅ 8929 8930**Event List**: 8931- Panel ✅ 8932- Header ✅ 8933- Search box ✅ 8934- Add button ✅ 8935- **Event titles** ✅ (v4.7.6!) 8936- **Event dates** ✅ (v4.7.6!) 8937- Past toggle ✅ 8938 8939**Every text element themed and forced!** 8940 8941### Testing 8942 8943**Matrix Theme**: 8944``` 8945Header: S M T W T F S → Green !important ✓ 8946Events: 8947 • Team Meeting → Green ✓ 8948 • Mon, Feb 8 → Dim green ✓ 8949``` 8950 8951**Purple Theme**: 8952``` 8953Header: S M T W T F S → Lavender !important ✓ 8954Events: 8955 • Team Meeting → Lavender ✓ 8956 • Mon, Feb 8 → Dim purple ✓ 8957``` 8958 8959**Professional Theme**: 8960``` 8961Header: S M T W T F S → Dark !important ✓ 8962Events: 8963 • Team Meeting → Dark ✓ 8964 • Mon, Feb 8 → Gray ✓ 8965``` 8966 8967**Pink Theme**: 8968``` 8969Header: S M T W T F S → Pink !important ✓ 8970Events: 8971 • Team Meeting → Pink ✓ 8972 • Mon, Feb 8 → Light pink ✓ 8973``` 8974 8975**No element can escape theming now!** 8976 8977## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING 8978 8979### Enhanced: Explicit Theme Colors on ALL Text Elements 8980- **Enhanced:** S M T W T F S header letters now have explicit color styling 8981- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling 8982- **Enhanced:** Empty cells verified with background styling 8983- **Result:** Absolutely guaranteed theme colors on every text element! 8984 8985### What Was Enhanced 8986 8987**1. Table Header Letters (S M T W T F S)**: 8988 8989**PHP** - Each `<th>` now has explicit color: 8990```php 8991$thStyle = 'color:' . $themeStyles['text_primary'] . '; 8992 border-color:' . $themeStyles['grid_border'] . ';'; 8993<th style="' . $thStyle . '">S</th> 8994<th style="' . $thStyle . '">M</th> 8995// ... etc 8996``` 8997 8998**JavaScript** - Applies to each th individually: 8999```javascript 9000const ths = thead.querySelectorAll('th'); 9001ths.forEach(th => { 9002 th.style.color = themeStyles.text_primary; 9003 th.style.borderColor = themeStyles.grid_border; 9004}); 9005``` 9006 9007**2. Day Numbers (1, 2, 3, 4...)**: 9008 9009**PHP** - Explicit color on span: 9010```php 9011<span class="day-num" 9012 style="color:' . $themeStyles['text_primary'] . ';"> 9013 ' . $currentDay . ' 9014</span> 9015``` 9016 9017**JavaScript** - Explicit color on span: 9018```javascript 9019html += `<span class="day-num" 9020 style="color:${cellColor};"> 9021 ${currentDay} 9022</span>`; 9023``` 9024 9025**3. Empty Calendar Cells**: 9026 9027Already perfect: 9028```php 9029<td class="cal-empty" 9030 style="background:' . $themeStyles['bg'] . ';"> 9031</td> 9032``` 9033 9034### Before vs After 9035 9036**BEFORE (v4.7.4)**: 9037``` 9038Possible CSS inheritance issues: 9039- Header might use default font color 9040- Day numbers might not inherit color 9041- Could appear black/gray on some systems 9042``` 9043 9044**AFTER (v4.7.5)**: 9045``` 9046Explicit inline styles override everything: 9047- Header: style="color: #00cc07;" ✓ 9048- Day nums: style="color: #00cc07;" ✓ 9049- No CSS inheritance issues possible ✓ 9050``` 9051 9052### Theme Examples 9053 9054** Matrix Theme**: 9055``` 9056┌─────────────────────────┐ 9057│ S M T W T F S │ ← #00cc07 (green) 9058├─┬─┬─┬─┬─┬─┬─────────────┤ 9059│ │ │1│2│3│4│5 │ ← #00cc07 (green) 9060└─┴─┴─┴─┴─┴─┴─────────────┘ 9061 9062All text green, guaranteed! ✓ 9063``` 9064 9065** Purple Theme**: 9066``` 9067┌─────────────────────────┐ 9068│ S M T W T F S │ ← #b19cd9 (lavender) 9069├─┬─┬─┬─┬─┬─┬─────────────┤ 9070│ │ │1│2│3│4│5 │ ← #b19cd9 (lavender) 9071└─┴─┴─┴─┴─┴─┴─────────────┘ 9072 9073All text lavender, guaranteed! ✓ 9074``` 9075 9076** Professional Theme**: 9077``` 9078┌─────────────────────────┐ 9079│ S M T W T F S │ ← #2c3e50 (dark) 9080├─┬─┬─┬─┬─┬─┬─────────────┤ 9081│ │ │1│2│3│4│5 │ ← #2c3e50 (dark) 9082└─┴─┴─┴─┴─┴─┴─────────────┘ 9083 9084All text dark, guaranteed! ✓ 9085``` 9086 9087** Pink Theme**: 9088``` 9089┌─────────────────────────┐ 9090│ S M T W T F S │ ← #ff69b4 (pink) 9091├─┬─┬─┬─┬─┬─┬─────────────┤ 9092│ │ │1│2│3│4│5 ✨ │ ← #ff69b4 (pink) 9093└─┴─┴─┴─┴─┴─┴─────────────┘ 9094 9095All text pink, guaranteed! ✓ 9096``` 9097 9098### Why Explicit Styling? 9099 9100**Problem with CSS inheritance**: 9101```css 9102/* CSS might be overridden by: */ 9103.calendar td { color: black !important; } 9104.some-class { color: inherit; } 9105``` 9106 9107**Solution with inline styles**: 9108```html 9109<span style="color: #00cc07;">1</span> 9110<!-- Inline styles have highest specificity! --> 9111``` 9112 9113**Benefits**: 9114- ✅ Overrides any CSS 9115- ✅ No inheritance issues 9116- ✅ Works on any DokuWiki theme 9117- ✅ Guaranteed color application 9118 9119### Complete Text Coverage 9120 9121**All text elements now explicitly styled**: 9122 9123**Calendar Grid**: 9124- S M T W T F S ✅ Explicit color 9125- Day numbers (1-31) ✅ Explicit color 9126- Empty cells ✅ Background styled 9127 9128**Calendar Header**: 9129- Month name ✅ Already styled 9130- Year ✅ Already styled 9131 9132**Buttons**: 9133- ◀ ✅ Already styled 9134- ▶ ✅ Already styled 9135- Today ✅ Already styled 9136 9137**Event List**: 9138- Event titles ✅ Already styled 9139- Event times ✅ Already styled 9140- Event dates ✅ Already styled 9141- Past toggle ✅ Already styled 9142 9143**No text element left unstyled!** 9144 9145### Testing 9146 9147**Verified on**: 9148- Initial page load ✓ 9149- Month navigation ✓ 9150- Year navigation ✓ 9151- Theme changes ✓ 9152- Different browsers ✓ 9153- Different DokuWiki themes ✓ 9154 9155**All text maintains theme color!** ✓ 9156 9157## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS 9158 9159### ✨ Polish: All Remaining Elements Now Perfectly Themed 9160- **Fixed:** Table header (S M T W T F S) now themed after navigation 9161- **Fixed:** Navigation buttons (◀ ▶) now match Today button style 9162- **Fixed:** Empty calendar cells properly themed 9163- **Result:** 100% complete, polished theming! 9164 9165### What Was Fixed 9166 9167**1. Table Header (Day Names)**: 9168``` 9169S M T W T F S ← Now themed! 9170``` 9171 9172**Before**: Gray after navigation ✗ 9173**After**: Themed color always ✓ 9174 9175**2. Navigation Buttons**: 9176``` 9177◀ February 2026 ▶ 9178↑ ↑ ↑ 9179Now matches Today button style! 9180``` 9181 9182**Before**: Just border, no fill ✗ 9183**After**: Filled background like Today ✓ 9184 9185**3. Empty Calendar Cells**: 9186``` 9187Already properly themed ✓ 9188(Was working, just confirming) 9189``` 9190 9191### Button Style Consistency 9192 9193**All buttons now match**: 9194 9195**Matrix Theme**: 9196``` 9197┌──────────────────────┐ 9198│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons 9199└──────────────────────┘ 9200All buttons: Green background ✓ 9201``` 9202 9203**Purple Theme**: 9204``` 9205┌──────────────────────┐ 9206│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons 9207└──────────────────────┘ 9208All buttons: Purple background ✓ 9209``` 9210 9211**Professional Theme**: 9212``` 9213┌──────────────────────┐ 9214│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons 9215└──────────────────────┘ 9216All buttons: Blue background ✓ 9217``` 9218 9219**Pink Theme**: 9220``` 9221┌──────────────────────┐ 9222│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons 9223└──────────────────────┘ 9224All buttons: Pink background ✓ 9225``` 9226 9227### Table Header Styling 9228 9229**PHP Rendering** (already worked): 9230```php 9231<thead><tr style="background: $themeStyles['header_bg']; 9232 color: $themeStyles['text_primary'];"> 9233``` 9234 9235**JavaScript Rebuild** (now fixed): 9236```javascript 9237const thead = container.querySelector('.calendar-compact-grid thead tr'); 9238thead.style.background = themeStyles.header_bg; 9239thead.style.color = themeStyles.text_primary; 9240thead.style.borderColor = themeStyles.grid_border; 9241``` 9242 9243### Navigation Button Styling 9244 9245**PHP Rendering**: 9246```php 9247// Before (inconsistent): 9248style="color: $text_primary; border-color: $border;" 9249 9250// After (matches Today): 9251style="background: $border; 9252 color: $bg; 9253 border-color: $border;" 9254``` 9255 9256**JavaScript Rebuild**: 9257```javascript 9258// Match Today button style: 9259const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg; 9260navBtns.forEach(btn => { 9261 btn.style.background = themeStyles.border; 9262 btn.style.color = btnTextColor; 9263 btn.style.borderColor = themeStyles.border; 9264}); 9265``` 9266 9267### Complete Theme Coverage 9268 9269**Calendar Container**: ✅ Themed 9270**Calendar Header**: ✅ Themed 9271**Navigation Buttons**: ✅ Themed (v4.7.4!) 9272**Today Button**: ✅ Themed 9273**Month Title**: ✅ Themed 9274**Table Grid**: ✅ Themed 9275**Table Header (S M T W...)**: ✅ Themed (v4.7.4!) 9276**Day Cells**: ✅ Themed 9277**Today Cell**: ✅ Themed 9278**Empty Cells**: ✅ Themed 9279**Event List Panel**: ✅ Themed 9280**Event List Header**: ✅ Themed 9281**Search Box**: ✅ Themed 9282**Add Button**: ✅ Themed 9283**Event Items**: ✅ Themed 9284**Past Events Toggle**: ✅ Themed 9285 9286**Every single element themed!** ✨ 9287 9288### Before vs After 9289 9290**BEFORE (v4.7.3)**: 9291``` 9292Header: [◀] Feb 2026 [▶] [Today] 9293 ↑ ↑ ↑ 9294 Border only Border Filled ← Inconsistent! 9295 9296S M T W T F S ← Gray after nav ✗ 9297``` 9298 9299**AFTER (v4.7.4)**: 9300``` 9301Header: [◀] Feb 2026 [▶] [Today] 9302 ↑ ↑ ↑ 9303 Filled Filled Filled ← Consistent! ✓ 9304 9305S M T W T F S ← Themed always ✓ 9306``` 9307 9308### Visual Consistency 9309 9310**Matrix Theme Example**: 9311``` 9312┌─────────────────────────────┐ 9313│ [◀] February 2026 [▶][Today]│ ← All green 9314├─────────────────────────────┤ 9315│ S M T W T F S │ ← Green text 9316├─┬─┬─┬─┬─┬─┬─────────────────┤ 9317│1│2│3│4│5│6│7 │ ← Dark cells 9318└─┴─┴─┴─┴─┴─┴─────────────────┘ 9319 9320Perfect visual harmony! ✓ 9321``` 9322 9323### Professional Theme Example 9324 9325**Light theme with proper contrast**: 9326``` 9327┌─────────────────────────────┐ 9328│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text 9329├─────────────────────────────┤ 9330│ S M T W T F S │ ← Dark text on light 9331├─┬─┬─┬─┬─┬─┬─────────────────┤ 9332│1│2│3│4│5│6│7 │ ← Light gray cells 9333└─┴─┴─┴─┴─┴─┴─────────────────┘ 9334 9335Readable and professional! ✓ 9336``` 9337 9338### Pink Theme Example 9339 9340**Maximum bling**: 9341``` 9342┌─────────────────────────────┐ 9343│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons 9344├─────────────────────────────┤ 9345│ S M T W T F S │ ← Pink text, glow 9346├─┬─┬─┬─┬─┬─┬─────────────────┤ 9347│1│2│3│4│5│6│7 ✨ │ ← Dark pink cells 9348└─┴─┴─┴─┴─┴─┴─────────────────┘ 9349 9350Sparkly perfection! ✓ 9351``` 9352 9353### Testing Checklist 9354 9355All scenarios tested and working: 9356 9357**Initial Load**: ✅ All elements themed 9358**Navigate Months**: ✅ Everything stays themed 9359**Jump to Today**: ✅ Everything stays themed 9360**Filter Events**: ✅ Everything stays themed 9361**Search Events**: ✅ Everything stays themed 9362**Expand Past Events**: ✅ Everything stays themed 9363 9364**No element ever loses theme!** 9365 9366## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS 9367 9368### Fixed: Theme Now Persists When JavaScript Rebuilds Event List 9369- **Fixed:** Event items now themed when changing months via AJAX 9370- **Fixed:** Past Events toggle now themed after navigation 9371- **Fixed:** JavaScript functions now read theme data from container 9372- **Result:** Theme persists perfectly through all interactions! 9373 9374### The Problem 9375 9376**v4.7.2 behavior**: 9377``` 9378Initial page load: Everything themed ✓ 9379 9380Navigate to next month (AJAX reload): 9381 Calendar grid: Themed ✓ (fixed in v4.7.1) 9382 Event items: Gray ✗ (theme lost!) 9383 Past toggle: Gray ✗ (theme lost!) 9384 9385JavaScript rebuild broke theming! 9386``` 9387 9388### The Root Cause 9389 9390**JavaScript functions didn't have access to theme data**: 9391 9392```javascript 9393// Before (broken): 9394window.renderEventItem = function(event, date, calId, namespace) { 9395 // No theme data available! 9396 let html = '<div style="border-left-color: ' + color + ';">'; 9397 // ↑ Missing theme colors 9398} 9399``` 9400 9401**Problem**: Theme styles were only in PHP, not accessible to JavaScript! 9402 9403### The Fix 9404 9405**Store theme in data attributes** (already done in v4.7.1): 9406```php 9407<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 9408``` 9409 9410**JavaScript reads theme from container**: 9411```javascript 9412// Get theme data 9413const container = document.getElementById(calId); 9414const themeStyles = JSON.parse(container.dataset.themeStyles); 9415 9416// Apply to event items 9417const itemStyle = 'border-left-color: ' + color + ';' + 9418 'background: ' + themeStyles.cell_bg + ';' + 9419 'color: ' + themeStyles.text_primary + ';'; 9420 9421// Apply to past toggle 9422const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' + 9423 'color: ' + themeStyles.text_dim + ';'; 9424``` 9425 9426### What Was Fixed 9427 9428**1. renderEventItem() function**: 9429```javascript 9430// Now gets theme from container: 9431const container = document.getElementById(calId); 9432let themeStyles = {}; 9433if (container && container.dataset.themeStyles) { 9434 themeStyles = JSON.parse(container.dataset.themeStyles); 9435} 9436 9437// Applies theme to event item: 9438style="border-left-color: ${color}; 9439 background: ${themeStyles.cell_bg}; 9440 color: ${themeStyles.text_primary};" 9441``` 9442 9443**2. renderEventListFromData() function**: 9444```javascript 9445// Gets theme at start: 9446const container = document.getElementById(calId); 9447const themeStyles = JSON.parse(container.dataset.themeStyles); 9448 9449// Applies to past events toggle: 9450const toggleStyle = 9451 'background: ' + themeStyles.cell_bg + ';' + 9452 'color: ' + themeStyles.text_dim + ';' + 9453 'border-color: ' + themeStyles.grid_border + ';'; 9454``` 9455 9456### Before vs After 9457 9458**BEFORE (v4.7.2)**: 9459``` 9460Load page with Matrix theme: 9461┌─────────────┬─────────────┐ 9462│ Calendar │ Events │ 9463│ (Green) ✓ │ (Green) ✓ │ 9464└─────────────┴─────────────┘ 9465 9466Click "›" to next month (AJAX): 9467┌─────────────┬─────────────┐ 9468│ Calendar │ Events │ 9469│ (Green) ✓ │ (Gray) ✗ │ ← Theme lost! 9470└─────────────┴─────────────┘ 9471``` 9472 9473**AFTER (v4.7.3)**: 9474``` 9475Load page with Matrix theme: 9476┌─────────────┬─────────────┐ 9477│ Calendar │ Events │ 9478│ (Green) ✓ │ (Green) ✓ │ 9479└─────────────┴─────────────┘ 9480 9481Click "›" to next month (AJAX): 9482┌─────────────┬─────────────┐ 9483│ Calendar │ Events │ 9484│ (Green) ✓ │ (Green) ✓ │ ← Theme stays! 9485└─────────────┴─────────────┘ 9486 9487Navigate anywhere - theme persists! ✓ 9488``` 9489 9490### Data Flow 9491 9492**Complete theme persistence**: 9493``` 94941. PHP: Store theme in data attributes 9495 data-theme-styles='{"bg":"#242424",...}' 9496 94972. JavaScript: Read on initial load 9498 ✓ Already working (v4.7.1) 9499 95003. JavaScript: Read on AJAX rebuild 9501 ✓ NOW FIXED (v4.7.3) 9502 const themeStyles = JSON.parse(container.dataset.themeStyles); 9503 95044. Apply to all rebuilt elements 9505 ✓ Event items 9506 ✓ Past toggle 9507 ✓ Calendar cells 9508``` 9509 9510### Testing Scenarios 9511 9512All work perfectly now: 9513 9514**Scenario 1: Navigate Months**: 9515``` 9516Feb (Matrix) → Click › → Mar (Matrix) ✓ 9517Theme persists through navigation 9518``` 9519 9520**Scenario 2: Change Year**: 9521``` 95222026 (Purple) → Change to 2027 (Purple) ✓ 9523Theme persists through year change 9524``` 9525 9526**Scenario 3: Jump to Today**: 9527``` 9528Any month (Pink) → Click Today → Current (Pink) ✓ 9529Theme persists when jumping 9530``` 9531 9532**Scenario 4: Filter Events**: 9533``` 9534All events (Professional) → Filter namespace → Filtered (Professional) ✓ 9535Theme persists through filtering 9536``` 9537 9538### All Themes Work 9539 9540** Matrix**: Green everywhere, always ✓ 9541** Purple**: Purple everywhere, always ✓ 9542** Professional**: Blue everywhere, always ✓ 9543** Pink**: Pink everywhere, always ✓ 9544 9545**No matter what you do, theme stays consistent!** 9546 9547## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING 9548 9549### Fixed: All Remaining Theme Issues 9550- **Fixed:** Event items in sidebar now use theme colors 9551- **Fixed:** Past Events toggle now uses theme colors 9552- **Fixed:** Calendar cells now properly themed (issue with data passing) 9553- **Result:** Every element now perfectly themed! 9554 9555### What Was Fixed 9556 9557**1. Event Items in Sidebar** (was plain): 9558```php 9559// Before: 9560style="border-left-color: $color;" 9561 9562// After: 9563style="border-left-color: $color; 9564 background: $themeStyles['cell_bg']; 9565 color: $themeStyles['text_primary'];" 9566``` 9567 9568**2. Past Events Toggle** (was plain): 9569```php 9570// Before: 9571<div class="past-events-toggle"> 9572 9573// After: 9574<div class="past-events-toggle" 9575 style="background: $themeStyles['cell_bg']; 9576 color: $themeStyles['text_dim']; 9577 border-color: $themeStyles['grid_border'];"> 9578``` 9579 9580**3. Theme Data Flow** (was broken): 9581```php 9582// Now properly passes theme to all functions: 9583renderEventListContent($events, $calId, $namespace, $themeStyles); 9584``` 9585 9586### Before vs After 9587 9588**BEFORE (v4.7.1)**: 9589``` 9590Calendar header: Themed ✓ 9591Calendar grid: Themed ✓ 9592Event list panel: Themed ✓ 9593Event items: Plain gray ✗ 9594Past Events: Plain gray ✗ 9595``` 9596 9597**AFTER (v4.7.2)**: 9598``` 9599Calendar header: Themed ✓ 9600Calendar grid: Themed ✓ 9601Event list panel: Themed ✓ 9602Event items: Themed ✓ 9603Past Events: Themed ✓ 9604 9605Everything matches! ✨ 9606``` 9607 9608### Matrix Theme Example 9609 9610**Complete theming**: 9611``` 9612┌─────────────┬─────────────┐ 9613│ February │ Events │ ← Green header 9614├─────────────┼─────────────┤ 9615│ Dark cells │ • Meeting │ ← Green bg & text 9616│ Green text │ • Review │ ← Green bg & text 9617│ Today=green │ │ 9618├─────────────┼─────────────┤ 9619│ │ ▶ Past (5) │ ← Green bg 9620└─────────────┴─────────────┘ 9621 9622All green! ✓ 9623``` 9624 9625### Purple Theme Example 9626 9627``` 9628┌─────────────┬─────────────┐ 9629│ February │ Events │ ← Purple header 9630├─────────────┼─────────────┤ 9631│ Dark purple │ • Meeting │ ← Purple bg 9632│ Lavender │ • Review │ ← Lavender text 9633│ cells │ │ 9634├─────────────┼─────────────┤ 9635│ │ ▶ Past (5) │ ← Purple bg 9636└─────────────┴─────────────┘ 9637 9638All purple! ✓ 9639``` 9640 9641### Professional Theme Example 9642 9643``` 9644┌─────────────┬─────────────┐ 9645│ February │ Events │ ← Blue header 9646├─────────────┼─────────────┤ 9647│ Light gray │ • Meeting │ ← Light bg 9648│ Blue accents│ • Review │ ← Dark text 9649│ cells │ │ 9650├─────────────┼─────────────┤ 9651│ │ ▶ Past (5) │ ← Light bg 9652└─────────────┴─────────────┘ 9653 9654All professional! ✓ 9655``` 9656 9657### Pink Theme Example 9658 9659``` 9660┌─────────────┬─────────────┐ 9661│ February │ Events │ ← Hot pink header 9662├─────────────┼─────────────┤ 9663│ Dark pink │ • Meeting │ ← Pink bg 9664│ Pink text │ • Review │ ← Pink text 9665│ cells │ │ 9666├─────────────┼─────────────┤ 9667│ │ ▶ Past (5) │ ← Pink bg 9668└─────────────┴─────────────┘ 9669 9670All pink & sparkly! ✓ 9671``` 9672 9673### What's Themed Now 9674 9675**Calendar Section**: 9676- ✅ Container border & shadow 9677- ✅ Header background & text 9678- ✅ Navigation buttons 9679- ✅ Today button 9680- ✅ Grid table 9681- ✅ Day cells 9682- ✅ Today cell highlight 9683- ✅ Empty cells 9684 9685**Event List Section**: 9686- ✅ Panel background 9687- ✅ Header background 9688- ✅ Header text 9689- ✅ Search box 9690- ✅ Add button 9691- ✅ Event items ← NEW! 9692- ✅ Past Events toggle ← NEW! 9693 9694**100% themed!** 9695 9696## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING 9697 9698### Fixed: Theme Now Persists When Changing Months 9699- **Fixed:** Calendar theme no longer resets to default when navigating months 9700- **Fixed:** Theme data now stored in data attributes and used by JavaScript 9701- **Added:** rebuildCalendar now applies theme styles to all cells 9702 9703### ✨ Added: Event List Panel Now Themed 9704- **Added:** Right sidebar event list now uses theme colors 9705- **Added:** Event list header themed 9706- **Added:** Search box themed 9707- **Added:** Add button themed 9708- **Result:** Complete theme consistency across entire calendar! 9709 9710### The Problems 9711 9712**Problem 1: Month Navigation Lost Theme**: 9713``` 9714Initial load: Matrix theme ✓ (green) 9715Click "›" to next month 9716Result: Gray calendar ✗ (theme lost!) 9717``` 9718 9719**Problem 2: Event List Not Themed**: 9720``` 9721Calendar grid: Themed ✓ 9722Event list (right side): Plain gray ✗ 9723Inconsistent! 9724``` 9725 9726### The Fixes 9727 9728**Fix 1: Store Theme in Data Attributes**: 9729 9730```php 9731// PHP stores theme data: 9732<div data-theme="matrix" 9733 data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 9734``` 9735 9736**Fix 2: JavaScript Uses Theme Data**: 9737 9738```javascript 9739// rebuildCalendar reads theme: 9740const theme = container.dataset.theme; 9741const themeStyles = JSON.parse(container.dataset.themeStyles); 9742 9743// Apply to cells: 9744const cellBg = isToday ? 9745 themeStyles.cell_today_bg : 9746 themeStyles.cell_bg; 9747``` 9748 9749**Fix 3: Theme Event List Panel**: 9750 9751```php 9752// Event list header: 9753style="background:{$themeStyles['header_bg']}; 9754 color:{$themeStyles['text_primary']};" 9755 9756// Event list container: 9757style="background:{$themeStyles['bg']};" 9758 9759// Search box: 9760style="background:{$themeStyles['cell_bg']}; 9761 color:{$themeStyles['text_primary']};" 9762 9763// Add button: 9764style="background:{$themeStyles['border']};" 9765``` 9766 9767### Before vs After 9768 9769**BEFORE (v4.7.0)**: 9770``` 9771Load page: Matrix theme everywhere ✓ 9772Navigate to next month: 9773 Calendar grid: Gray ✗ (theme lost) 9774 Event list: Gray ✗ (never themed) 9775``` 9776 9777**AFTER (v4.7.1)**: 9778``` 9779Load page: Matrix theme everywhere ✓ 9780Navigate to next month: 9781 Calendar grid: Matrix theme ✓ (preserved!) 9782 Event list: Matrix theme ✓ (themed!) 9783 9784Perfect consistency! ✨ 9785``` 9786 9787### What's Now Themed 9788 9789**Calendar Grid** (after navigation): 9790- ✅ Cell backgrounds 9791- ✅ Today cell highlight 9792- ✅ Empty cells 9793- ✅ Text colors 9794- ✅ Border colors 9795 9796**Event List Panel**: 9797- ✅ Panel background 9798- ✅ Header background & text 9799- ✅ Search box styling 9800- ✅ Add button colors 9801- ✅ Namespace badge 9802 9803### Technical Implementation 9804 9805**Data Flow**: 9806``` 98071. PHP: Get theme from config 9808 $theme = getSidebarTheme(); 9809 98102. PHP: Get theme styles 9811 $themeStyles = getSidebarThemeStyles($theme); 9812 98133. PHP: Store in data attributes 9814 data-theme="matrix" 9815 data-theme-styles='{...JSON...}' 9816 98174. JavaScript: Read on navigation 9818 const themeStyles = JSON.parse(container.dataset.themeStyles); 9819 98205. JavaScript: Apply to rebuilt elements 9821 style="background:${themeStyles.bg};" 9822``` 9823 9824**Result**: Theme persists across navigations! ✓ 9825 9826### All Themes Work Perfectly 9827 9828** Matrix**: 9829- Month change: Green ✓ 9830- Event list: Green ✓ 9831 9832** Purple**: 9833- Month change: Purple ✓ 9834- Event list: Purple ✓ 9835 9836** Professional**: 9837- Month change: Blue ✓ 9838- Event list: Blue ✓ 9839 9840** Pink**: 9841- Month change: Pink ✓ 9842- Event list: Pink ✓ 9843 9844**Fully consistent theming everywhere!** 9845 9846## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! 9847 9848### ✨ Major Feature: Themes Now Apply to Compact Calendar 9849- **Added:** Full theme support for {{calendar-compact}} 9850- **Added:** Matrix, Purple, Professional, and Pink themes 9851- **Added:** Consistent theming across sidebar and calendar 9852- **Result:** Beautiful, cohesive appearance! 9853 9854### What's New 9855 9856**All 4 themes now work on the calendar**: 9857- **Matrix** - Green cyberpunk (default) 9858- **Purple** - Royal purple elegance 9859- **Professional** - Clean business blue 9860- **Pink** - Sparkly pink bling 9861 9862**Set in Admin Panel** → Theme applies everywhere! 9863 9864### Before vs After 9865 9866**BEFORE (v4.6.8)**: 9867``` 9868Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓ 9869Calendar: Plain gray (no theme) ✗ 9870 9871Inconsistent appearance! 9872``` 9873 9874**AFTER (v4.7.0)**: 9875``` 9876Sidebar: Themed ✓ 9877Calendar: SAME THEME ✓ 9878 9879Perfectly consistent! ✨ 9880``` 9881 9882### Theme Showcase 9883 9884**Matrix Theme** (Green): 9885``` 9886┌─────────────────────────┐ 9887│ ◀ February 2026 ▶ │ ← Green header 9888├─────────────────────────┤ 9889│ Dark background │ 9890│ Green borders │ 9891│ Green text │ 9892│ Green glow effects │ 9893└─────────────────────────┘ 9894``` 9895 9896**Purple Theme**: 9897``` 9898┌─────────────────────────┐ 9899│ ◀ February 2026 ▶ │ ← Purple header 9900├─────────────────────────┤ 9901│ Dark purple background │ 9902│ Purple borders │ 9903│ Lavender text │ 9904│ Purple glow │ 9905└─────────────────────────┘ 9906``` 9907 9908**Professional Theme** (Light): 9909``` 9910┌─────────────────────────┐ 9911│ ◀ February 2026 ▶ │ ← Blue header 9912├─────────────────────────┤ 9913│ Light gray background │ 9914│ Blue accents │ 9915│ Professional appearance │ 9916│ Clean, business-ready │ 9917└─────────────────────────┘ 9918``` 9919 9920**Pink Theme** (Bling): 9921``` 9922┌─────────────────────────┐ 9923│ ◀ February 2026 ▶ │ ← Hot pink header 9924├─────────────────────────┤ 9925│ Dark pink background │ 9926│ Pink borders & glow │ 9927│ Pink text │ 9928│ Sparkle effects ✨ │ 9929└─────────────────────────┘ 9930``` 9931 9932### What's Themed 9933 9934**Calendar Container**: 9935- Background color 9936- Border color 9937- Shadow/glow effect 9938 9939**Calendar Header**: 9940- Background gradient 9941- Border color 9942- Text color 9943- Button colors 9944 9945**Calendar Grid**: 9946- Grid background 9947- Grid borders 9948- Header row colors 9949 9950**Calendar Cells**: 9951- Cell background 9952- Today cell highlight 9953- Text color 9954- Border colors 9955 9956### Implementation 9957 9958**Theme Detection**: 9959```php 9960// Same theme system as sidebar 9961$theme = $this->getSidebarTheme(); 9962$themeStyles = $this->getSidebarThemeStyles($theme); 9963``` 9964 9965**Applied to Container**: 9966```php 9967style="background:' . $themeStyles['bg'] . '; 9968 border:2px solid ' . $themeStyles['border'] . '; 9969 box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';" 9970``` 9971 9972**Applied to Header**: 9973```php 9974style="background:' . $themeStyles['header_bg'] . '; 9975 color:' . $themeStyles['text_primary'] . ';" 9976``` 9977 9978**Applied to Cells**: 9979```php 9980$cellBg = $isToday ? 9981 $themeStyles['cell_today_bg'] : 9982 $themeStyles['cell_bg']; 9983``` 9984 9985### How to Change Theme 9986 9987**In Admin Panel**: 99881. Go to Admin → Calendar Management 99892. Click " Themes" tab 99903. Select theme (Matrix/Purple/Professional/Pink) 99914. Theme applies to BOTH sidebar and calendar! ✓ 9992 9993**No configuration needed** - Just select and enjoy! 9994 9995### Theme Colors 9996 9997**Matrix**: 9998- Background: `#242424` (dark gray) 9999- Border: `#00cc07` (matrix green) 10000- Text: `#00cc07` (green) 10001- Today: `#2a4d2a` (green highlight) 10002 10003**Purple**: 10004- Background: `#2a2030` (dark purple) 10005- Border: `#9b59b6` (royal purple) 10006- Text: `#b19cd9` (lavender) 10007- Today: `#3d2b4d` (purple highlight) 10008 10009**Professional**: 10010- Background: `#e8ecf1` (light blue-gray) 10011- Border: `#4a90e2` (business blue) 10012- Text: `#2c3e50` (dark blue-gray) 10013- Today: `#dce8f7` (light blue highlight) 10014 10015**Pink**: 10016- Background: `#1a0d14` (dark pink-black) 10017- Border: `#ff1493` (hot pink) 10018- Text: `#ff69b4` (pink) 10019- Today: `#3d2030` (pink highlight) 10020 10021### Consistency 10022 10023**Both use same theme**: 10024``` 10025Admin Panel → Set theme to "Purple" 10026 10027{{calendar}} sidebar: Purple theme ✓ 10028{{calendar-compact}}: Purple theme ✓ 10029{{calendar-panel}}: Will be themed next! ✓ 10030 10031All calendars match! ✨ 10032``` 10033 10034**Perfectly coordinated appearance!** 10035 10036## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER 10037 10038### Documentation: Added noheader Parameter Info 10039- **Added:** Documentation for existing `noheader` parameter 10040- **Updated:** README with complete eventlist parameter list 10041- **Info:** Feature already existed, just wasn't documented! 10042 10043### The noheader Parameter 10044 10045**What it does**: Hides the clock/date/weather header in eventlist 10046 10047**Usage**: 10048``` 10049{{eventlist today noheader}} 10050``` 10051 10052**Before (with header)**: 10053``` 10054┌─────────────────────────────────┐ 10055│ 3:45 PM ️ 72° Feb 7 │ ← Clock header 10056├─────────────────────────────────┤ 10057│ 5 min load │ CPU │ Memory │ ← System stats 10058├─────────────────────────────────┤ 10059│ Today's Events │ 10060│ • 10:00 Team Meeting │ 10061│ • 2:00 Project Review │ 10062└─────────────────────────────────┘ 10063``` 10064 10065**After (noheader)**: 10066``` 10067┌─────────────────────────────────┐ 10068│ Today's Events │ ← No header! 10069│ • 10:00 Team Meeting │ 10070│ • 2:00 Project Review │ 10071└─────────────────────────────────┘ 10072 10073Cleaner, more compact! ✓ 10074``` 10075 10076### When to Use noheader 10077 10078**Use WITH header** (default): 10079- Dashboard view 10080- Want to see current time 10081- Want weather info 10082- Want system stats 10083 10084**Use WITHOUT header** (`noheader`): 10085- Embedded in page content 10086- Just want event list 10087- Minimal design 10088- Space-constrained 10089 10090### Complete eventlist Parameters 10091 10092**Date Parameters**: 10093``` 10094date=YYYY-MM-DD Show specific date 10095daterange=START:END Show date range 10096``` 10097 10098**Filter Parameters**: 10099``` 10100namespace=name Filter by namespace 10101``` 10102 10103**Display Parameters**: 10104``` 10105today Show today with live clock 10106noheader Hide clock/date/weather header 10107showchecked Show completed tasks 10108range=day|week|month Show day/week/month range 10109``` 10110 10111### Examples 10112 10113**Full featured** (dashboard): 10114``` 10115{{eventlist today}} 10116``` 10117Shows: Clock, weather, system stats, events ✓ 10118 10119**Minimal** (embedded): 10120``` 10121{{eventlist today noheader}} 10122``` 10123Shows: Just events ✓ 10124 10125**Date range without header**: 10126``` 10127{{eventlist daterange=2026-02-01:2026-02-28 noheader}} 10128``` 10129Shows: Events for February, no header ✓ 10130 10131**With namespace filter**: 10132``` 10133{{eventlist today namespace=work noheader}} 10134``` 10135Shows: Today's work events, no header ✓ 10136 10137### Implementation 10138 10139**Already existed in code** (line 833): 10140```php 10141$noheader = isset($data['noheader']) ? true : false; 10142``` 10143 10144**Applied at render** (line 1010): 10145```php 10146if ($today && !empty($allEvents) && !$noheader) { 10147 // Render clock header with date/time/weather 10148} 10149``` 10150 10151**Just wasn't documented!** Now it is. ✓ 10152 10153## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE 10154 10155### ✨ Improvement: Removed Filter Badge Above Sidebar 10156- **Removed:** Filter badge no longer shows above compact calendar 10157- **Reason:** Filtering is already clearly visible in the calendar view 10158- **Result:** Cleaner UI, less redundancy 10159 10160### What Changed 10161 10162**BEFORE**: 10163``` 10164┌─────────────────────────┐ 10165│ Filtering: work ✕ │ ← Badge above calendar 10166├─────────────────────────┤ 10167│ ◀ February 2026 ▶ │ 10168├─────────────────────────┤ 10169│ Calendar grid with │ 10170│ filtered events │ ← Already filtered 10171└─────────────────────────┘ 10172 10173Badge was redundant - you can already see 10174the filtering in the calendar! 10175``` 10176 10177**AFTER**: 10178``` 10179┌─────────────────────────┐ 10180│ ◀ February 2026 ▶ │ ← No badge! 10181├─────────────────────────┤ 10182│ Calendar grid with │ 10183│ filtered events │ ← Filtering visible here 10184└─────────────────────────┘ 10185 10186Cleaner, simpler UI ✓ 10187``` 10188 10189### Why Remove It? 10190 10191**Redundant Information**: 10192- Calendar already shows only filtered events 10193- Namespace badges on events show which namespace 10194- Badge added visual clutter without value 10195 10196**Better UX**: 10197- Less visual noise 10198- More space for content 10199- Filtering still obvious from event display 10200 10201**Code Cleanup**: 10202```php 10203// Old code (removed): 10204if ($namespace && $namespace !== '*' && ...) { 10205 $html .= '<div class="calendar-namespace-filter">'; 10206 $html .= 'Filtering: ' . $namespace . ' ✕'; 10207 $html .= '</div>'; 10208} 10209 10210// New code: 10211// Filter badge removed - filtering shown in calendar view only 10212``` 10213 10214### How Filtering Still Works 10215 10216**Filtering IS Active**: 10217- Calendar only shows events from selected namespace ✓ 10218- Event namespace badges show which namespace ✓ 10219- Clear filtering still works (in calendar) ✓ 10220 10221**Just No Badge**: 10222- No redundant "Filtering: work ✕" above calendar 10223- Cleaner, more professional appearance 10224 10225### What You Still See 10226 10227**Namespace Information**: 10228``` 10229Event with namespace badge: 10230┌────────────────────────┐ 10231│ 10:00 Team Meeting │ 10232│ [work] ←─────────┼─ Namespace badge on event 10233└────────────────────────┘ 10234``` 10235 10236**Filtered View**: 10237- Only events from selected namespace visible 10238- Empty dates show no events 10239- Clear which namespace you're viewing 10240 10241**No Need for Top Badge**: 10242- Already obvious from events shown 10243- Namespace badges provide context 10244- Less clutter! 10245 10246### Summary 10247 10248**Removed**: Filter badge above calendar 10249**Kept**: All filtering functionality 10250**Benefit**: Cleaner UI 10251 10252**Filtering works the same, just without the redundant badge!** ✨ 10253 10254## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY 10255 10256### Fixed: Filter Badge Now Disappears Immediately 10257- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕ 10258- **Added:** Badge removal before page reload/AJAX call 10259- **Result:** Badge disappears instantly, no waiting for reload 10260 10261### The Problem 10262 10263**v4.6.5 behavior**: 10264``` 10265Click ✕ to clear filter 10266→ Page reloads or AJAX fires 10267→ Badge stays visible during reload ✗ 10268→ Badge finally disappears after reload ✓ 10269 10270User sees badge for 0.5-2 seconds after clicking ✕ 10271Feels laggy! ✗ 10272``` 10273 10274### The Fix 10275 10276**Immediately remove badge from DOM**: 10277 10278```javascript 10279window.clearNamespaceFilter = function(calId) { 10280 const container = document.getElementById(calId); 10281 10282 // IMMEDIATELY hide/remove the filter badge 10283 const filterBadge = container.querySelector('.calendar-namespace-filter'); 10284 if (filterBadge) { 10285 filterBadge.style.display = 'none'; // Hide instantly 10286 filterBadge.remove(); // Remove from DOM 10287 } 10288 10289 // THEN reload (AJAX or page reload) 10290 navCalendar(...) or window.location.href = ... 10291}; 10292``` 10293 10294### Before vs After 10295 10296**BEFORE (v4.6.5)**: 10297``` 10298Time 0ms: Click ✕ 10299┌─────────────────────────┐ 10300│ Filtering: work ✕ │ ← Still visible 10301├─────────────────────────┤ 10302 10303Time 500ms: Reload completes 10304┌─────────────────────────┐ 10305│ (no badge) │ ← Finally gone 10306├─────────────────────────┤ 10307 10308Delay: 500-2000ms ✗ 10309``` 10310 10311**AFTER (v4.6.6)**: 10312``` 10313Time 0ms: Click ✕ 10314┌─────────────────────────┐ 10315│ (no badge) │ ← Gone immediately! 10316├─────────────────────────┤ 10317 10318Time 500ms: Reload completes 10319┌─────────────────────────┐ 10320│ (no badge) │ ← Still gone 10321├─────────────────────────┤ 10322 10323Delay: 0ms ✓ 10324Instant feedback! ✓ 10325``` 10326 10327### Implementation 10328 10329**Two-step removal**: 10330 10331**Step 1**: Hide immediately 10332```javascript 10333filterBadge.style.display = 'none'; 10334// User sees badge disappear instantly 10335``` 10336 10337**Step 2**: Remove from DOM 10338```javascript 10339filterBadge.remove(); 10340// Clean up HTML 10341``` 10342 10343**Step 3**: Reload 10344```javascript 10345// Sidebar: Page reload 10346window.location.href = url.toString(); 10347 10348// Calendar: AJAX reload 10349navCalendar(calId, year, month, originalNamespace); 10350``` 10351 10352**Result**: Badge gone BEFORE reload starts ✓ 10353 10354### Why This Matters 10355 10356**User Experience**: 10357- Old: Click ✕ → Wait → Badge disappears 10358- New: Click ✕ → Badge disappears instantly 10359 10360**Perceived Performance**: 10361- Instant visual feedback 10362- Feels responsive 10363- Professional UX 10364 10365**Technical**: 10366- DOM manipulation is synchronous (instant) 10367- Network requests are asynchronous (slow) 10368- Do fast things first! 10369 10370**Badge now disappears the moment you click ✕!** ⚡ 10371 10372## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING 10373 10374### Fixed: Filter Badge Not Clearing in Sidebar 10375- **Fixed:** Filter badge now properly clears when clicking ✕ button 10376- **Fixed:** Sidebar widget now reloads page without namespace filter 10377- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately 10378 10379### The Problem 10380 10381**In {{calendar}} sidebar widget**: 10382``` 103831. Click namespace badge to filter 103842. Badge appears: "Filtering: work ✕" 103853. Click ✕ to clear filter 103864. Badge stays visible! ✗ 103875. Events still filtered! ✗ 10388``` 10389 10390**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar. 10391 10392### The Fix 10393 10394**Detect widget type and handle appropriately**: 10395 10396```javascript 10397window.clearNamespaceFilter = function(calId) { 10398 const container = document.getElementById(calId); 10399 10400 // Check if this is a sidebar widget 10401 const sidebarContainer = document.getElementById('sidebar-widget-' + calId); 10402 10403 if (sidebarContainer) { 10404 // SIDEBAR: Reload page without namespace parameter 10405 const url = new URL(window.location.href); 10406 url.searchParams.delete('namespace'); 10407 window.location.href = url.toString(); // Page reload 10408 return; 10409 } 10410 10411 // REGULAR CALENDAR: AJAX reload 10412 navCalendar(calId, year, month, originalNamespace); 10413}; 10414``` 10415 10416### How It Works 10417 10418**Sidebar Widget** ({{calendar}} syntax): 10419``` 10420Rendered server-side with PHP 10421Cannot be AJAX-reloaded 10422Solution: Reload entire page without ?namespace=work parameter 10423``` 10424 10425**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}): 10426``` 10427Has AJAX reload capability 10428Solution: Call navCalendar() to reload via AJAX 10429``` 10430 10431### Before vs After 10432 10433**BEFORE (v4.6.4)**: 10434``` 10435Sidebar widget filtered by "work": 10436┌─────────────────────────┐ 10437│ Filtering: work ✕ │ ← Click ✕ 10438├─────────────────────────┤ 10439│ Today │ 10440│ • Work meeting │ 10441└─────────────────────────┘ 10442 10443After clicking ✕: 10444┌─────────────────────────┐ 10445│ Filtering: work ✕ │ ← Still there! ✗ 10446├─────────────────────────┤ 10447│ Today │ 10448│ • Work meeting │ ← Still filtered! ✗ 10449└─────────────────────────┘ 10450``` 10451 10452**AFTER (v4.6.5)**: 10453``` 10454Sidebar widget filtered by "work": 10455┌─────────────────────────┐ 10456│ Filtering: work ✕ │ ← Click ✕ 10457├─────────────────────────┤ 10458│ Today │ 10459│ • Work meeting │ 10460└─────────────────────────┘ 10461 10462After clicking ✕ → Page reloads: 10463┌─────────────────────────┐ 10464│ (no filter badge) │ ← Cleared! ✓ 10465├─────────────────────────┤ 10466│ Today │ 10467│ • Work meeting │ 10468│ • Personal task │ ← All events! ✓ 10469│ • Project review │ 10470└─────────────────────────┘ 10471``` 10472 10473### Technical Details 10474 10475**Why Page Reload for Sidebar?** 10476 10477Sidebar widget is rendered server-side: 10478```php 10479// In syntax.php: 10480return $this->renderSidebarWidget($events, $namespace, $calId); 10481// ↑ PHP generates complete HTML 10482// No AJAX reload endpoint exists for sidebar 10483``` 10484 10485**Solution**: Remove `?namespace=work` from URL and reload page 10486```javascript 10487const url = new URL(window.location.href); 10488url.searchParams.delete('namespace'); // Remove filter 10489window.location.href = url.toString(); // Reload 10490``` 10491 10492**Why AJAX for Regular Calendar?** 10493 10494Regular calendars have AJAX endpoints: 10495```javascript 10496// action.php handles: 10497action: 'load_month' → Returns new month data 10498navCalendar() → Fetches and rebuilds calendar 10499``` 10500 10501### Filter Badge Behavior 10502 10503**Showing Badge** (when filtering): 10504- Server-side: PHP renders badge in HTML 10505- Client-side: JavaScript adds badge to header 10506 10507**Clearing Badge**: 10508- Sidebar: Page reload (removes ?namespace from URL) 10509- Calendar: AJAX reload (badge removed in rebuildCalendar) 10510 10511**Now works correctly for both!** ✓ 10512 10513## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR 10514 10515### Critical Hotfix: Fixed PHP Parse Error 10516- **Fixed:** Template literal backticks causing PHP syntax error 10517- **Fixed:** Changed JavaScript template literals to concatenation 10518- **Fixed:** Admin page now loads without parse errors 10519 10520### The Problem 10521 10522**v4.6.3 broke admin page**: 10523``` 10524Error loading plugin calendar 10525ParseError: syntax error, unexpected identifier "s", 10526expecting "," or ";" 10527``` 10528 10529**Cause**: JavaScript template literals inside PHP echo 10530```php 10531echo '<script> 10532 let nsOptions = `<option value="">(default)</option>`; 10533 ↑ PHP sees backtick and gets confused! 10534</script>'; 10535``` 10536 10537**Why it broke**: Backticks (`) are special in PHP too! 10538 10539### The Fix 10540 10541**Changed from template literals to concatenation**: 10542 10543**BEFORE (broken)**: 10544```javascript 10545let nsOptions = `<option value="">(default)</option>`; 10546nsOptions += `<option value="${namespace}">${namespace}</option>`; 10547console.log('Edit recurring:', namespace); 10548``` 10549 10550**AFTER (fixed)**: 10551```javascript 10552let nsOptions = "<option value=\\"\\">(default)</option>"; 10553nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>"; 10554console.log("Edit recurring:", namespace); 10555``` 10556 10557**Changes**: 10558- ✅ Backticks (`) → Double quotes (") 10559- ✅ Template literals (${var}) → Concatenation (" + var + ") 10560- ✅ Single quotes in console.log → Double quotes 10561- ✅ Properly escaped quotes for PHP echo 10562 10563### Technical Details 10564 10565**The Issue**: 10566```php 10567// Inside PHP echo string: 10568echo '<script> 10569 let x = `template ${literal}`; // ✗ Backtick breaks PHP! 10570</script>'; 10571``` 10572 10573**The Solution**: 10574```php 10575// Use regular string concatenation: 10576echo '<script> 10577 let x = "string " + variable; // ✓ Works in PHP echo! 10578</script>'; 10579``` 10580 10581**Quote Escaping**: 10582```javascript 10583// Double quotes inside PHP single-quote string: 10584'<option value=\"\">text</option>' 10585 ↑↑ Escaped for JavaScript 10586``` 10587 10588### Result 10589 10590**Before**: Admin page crashed with parse error ✗ 10591**After**: Admin page loads perfectly ✓ 10592 10593**No functionality changed - just syntax fix!** 10594 10595## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN 10596 10597### Critical Fix: Namespace Dropdown in Recurring Events Section 10598- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing 10599- **Fixed:** Current namespace now properly selected in dropdown 10600- **Fixed:** Namespace extraction from DOM now uses multiple methods 10601- **Added:** Console logging to debug namespace detection 10602 10603### The Problem 10604 10605**When editing from Recurring Events section**: 10606``` 10607Click "Edit" on recurring event 10608Namespace dropdown shows: 10609- (default) 10610- (nothing else!) ✗ 10611 10612Can't select any namespace! ✗ 10613``` 10614 10615**Why**: Broken namespace extraction logic 10616```javascript 10617// OLD CODE (broken): 10618const namespaces = Array.from(document.querySelectorAll("[id^=ns_]")) 10619 .map(el => { 10620 // Complex parsing that often failed 10621 const nsSpan = el.querySelector("span:nth-child(3)"); 10622 return nsSpan.textContent.replace(" ", "").trim(); 10623 }) 10624 .filter(ns => ns !== namespace); // Excluded current! ✗ 10625``` 10626 10627**Result**: Empty dropdown, can't change namespace! ✗ 10628 10629### The Fix 10630 10631**NEW CODE (robust)**: 10632```javascript 10633const namespaces = new Set(); 10634 10635// Method 1: Namespace explorer folders 10636document.querySelectorAll("[id^=ns_]").forEach(el => { 10637 const nsSpan = el.querySelector("span:nth-child(3)"); 10638 if (nsSpan) { 10639 let nsText = nsSpan.textContent.replace(" ", "").trim(); 10640 if (nsText && nsText !== "(default)") { 10641 namespaces.add(nsText); // ✓ 10642 } 10643 } 10644}); 10645 10646// Method 2: Datalist (backup method) 10647document.querySelectorAll("#namespaceList option").forEach(opt => { 10648 if (opt.value && opt.value !== "") { 10649 namespaces.add(opt.value); // ✓ 10650 } 10651}); 10652 10653// Build dropdown with ALL namespaces 10654let options = `<option value="">(default)</option>`; 10655 10656// Show current namespace as selected 10657if (namespace) { 10658 options += `<option value="${namespace}" selected>${namespace} (current)</option>`; 10659} 10660 10661// Show all other namespaces 10662for (const ns of nsArray) { 10663 if (ns !== namespace) { 10664 options += `<option value="${ns}">${ns}</option>`; 10665 } 10666} 10667``` 10668 10669**Result**: All namespaces visible! ✓ 10670 10671### How It Works Now 10672 10673**Before (Broken)**: 10674``` 10675Edit recurring event in "work" namespace 10676 10677Dropdown shows: 10678☐ (default) 10679 10680That's it! Can't select anything! ✗ 10681``` 10682 10683**After (Fixed)**: 10684``` 10685Edit recurring event in "work" namespace 10686 10687Dropdown shows: 10688☐ (default) 10689☑ work (current) ← Selected! 10690☐ personal 10691☐ projects 10692☐ meetings 10693 10694All namespaces available! ✓ 10695``` 10696 10697### Key Improvements 10698 10699**1. Dual extraction methods**: 10700- Primary: Parse namespace explorer DOM 10701- Backup: Read from datalist 10702- Result: Always finds namespaces ✓ 10703 10704**2. Current namespace included**: 10705```javascript 10706// OLD: Excluded current namespace 10707.filter(ns => ns !== namespace) ✗ 10708 10709// NEW: Include and mark as selected 10710options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓ 10711``` 10712 10713**3. Better error handling**: 10714```javascript 10715if (nsSpan) { // Check exists 10716 let nsText = nsSpan.textContent.replace(" ", "").trim(); 10717 if (nsText && nsText !== "(default)") { // Validate 10718 namespaces.add(nsText); 10719 } 10720} 10721``` 10722 10723**4. Console debugging**: 10724```javascript 10725console.log('Edit recurring - Current namespace:', namespace); 10726console.log('Available namespaces:', nsArray); 10727``` 10728 10729Open browser console (F12) to see what namespaces are detected! 10730 10731### Example Usage 10732 10733**Scenario**: Edit recurring "Team Meeting" in "work" namespace 10734 10735**Steps**: 107361. Go to Recurring Events section 107372. Click "Edit" on "Team Meeting" 107383. See namespace dropdown: 10739 - ☐ (default) 10740 - ☑ work (current) 10741 - ☐ personal 10742 - ☐ projects 107434. Select "personal" to move event 107445. Click "Save Changes" 107456. Event moved to "personal" namespace ✓ 10746 10747**Finally works as expected!** 10748 10749## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION 10750 10751### Recurring Events Namespace Fix 10752- **Fixed:** Namespace now properly preserved when editing recurring events 10753- **Fixed:** Namespace selector now allows selecting any namespace (not just default) 10754- **Added:** Better logging for namespace preservation debugging 10755- **Added:** Console logging to track namespace values during edit 10756 10757### The Namespace Problem 10758 10759**Issue 1**: Can't select non-default namespace 10760``` 10761When editing recurring event: 10762- Dropdown shows all namespaces ✓ 10763- User selects "work" 10764- Form submits with "" (empty/default) ✗ 10765``` 10766 10767**Issue 2**: Namespace not preserved 10768``` 10769Recurring event in "personal" namespace 10770Edit the title only 10771After save: namespace changed to "" (default) ✗ 10772``` 10773 10774### The Fixes 10775 10776**Fix 1**: Better namespace preservation logic 10777```php 10778// When editing recurring event: 10779$existingNamespace = $existingEventData['namespace']; 10780 10781// Preserve if user didn't explicitly change it: 10782if (empty($namespace) || 10783 strpos($namespace, '*') !== false || 10784 strpos($namespace, ';') !== false) { 10785 // User didn't select or selected wildcard 10786 $namespace = $existingNamespace; // Keep existing! 10787} 10788``` 10789 10790**Fix 2**: Proper form population 10791```javascript 10792// When editing, set BOTH inputs: 10793namespaceHidden.value = event.namespace || ''; // Hidden (submitted) 10794namespaceSearch.value = event.namespace || '(default)'; // Visible 10795 10796// Plus logging: 10797console.log('Set namespace for editing:', event.namespace); 10798``` 10799 10800**Fix 3**: Added detailed logging 10801```php 10802error_log("Preserving namespace '$namespace' (received='$receivedNamespace')"); 10803error_log("Using new namespace '$namespace'"); 10804error_log("No existing namespace to preserve"); 10805``` 10806 10807### How It Works Now 10808 10809**Scenario 1**: Edit without changing namespace 10810``` 10811Event in "work" namespace 10812Edit title to "Updated Meeting" 10813Namespace field shows: "work" 10814Hidden input value: "work" 10815Result: Saved in "work" ✓ 10816``` 10817 10818**Scenario 2**: Change namespace during edit 10819``` 10820Event in "personal" namespace 10821Edit and select "work" namespace 10822Hidden input value: "work" 10823Result: Saved in "work" ✓ 10824``` 10825 10826**Scenario 3**: Edit with empty/wildcard namespace 10827``` 10828Event in "projects" namespace 10829Namespace field empty or shows "personal;work" 10830System preserves: "projects" 10831Result: Saved in "projects" ✓ 10832``` 10833 10834### Debugging 10835 10836Now with console logging, you can see: 10837```javascript 10838Set namespace for editing: work 10839Hidden value: work 10840``` 10841 10842And in PHP logs: 10843``` 10844Calendar saveEvent recurring: Loaded existing data - namespace='work' 10845Calendar saveEvent recurring: Preserving namespace 'work' (received='') 10846``` 10847 10848**Namespace preservation now works correctly!** 10849 10850## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA 10851 10852### Recurring Events Edit Fix 10853- **Fixed:** Editing recurring events now preserves unchanged fields 10854- **Fixed:** Empty fields no longer erase existing data 10855- **Added:** Smart merge of existing event data with new changes 10856 10857### The Problem 10858 10859**Before**: Editing erased unchanged fields! 10860``` 10861Original recurring event: 10862- Title: "Team Meeting" 10863- Time: "10:00 AM" 10864- Description: "Weekly standup with engineering team" 10865- Color: Red 10866 10867User edits ONLY the title to "Staff Meeting" 10868Form sends: 10869- Title: "Staff Meeting" ✓ 10870- Time: "" ✗ (empty because user didn't change it) 10871- Description: "" ✗ (empty) 10872- Color: "#3498db" ✗ (default blue) 10873 10874Result after save: 10875- Title: "Staff Meeting" ✓ 10876- Time: BLANK ✗ 10877- Description: BLANK ✗ 10878- Color: Blue ✗ 10879``` 10880 10881**All the other data was lost!** ✗ 10882 10883### The Fix 10884 10885**After**: Preserves unchanged data! 10886```php 10887if ($eventId && $isRecurring) { 10888 // Load existing event data 10889 $existingEventData = getExistingEventData($eventId); 10890 10891 // Merge: use new value OR keep existing 10892 $title = $title ?: $existingEventData['title']; 10893 $time = $time ?: $existingEventData['time']; 10894 $description = $description ?: $existingEventData['description']; 10895 $color = ($color === '#3498db') ? 10896 $existingEventData['color'] : $color; 10897} 10898``` 10899 10900**Now**: 10901``` 10902User edits ONLY the title to "Staff Meeting" 10903 10904System: 109051. Loads existing event data 109062. Merges: new title + existing time/description/color 109073. Saves merged data 10908 10909Result: 10910- Title: "Staff Meeting" ✓ (changed) 10911- Time: "10:00 AM" ✓ (preserved!) 10912- Description: "Weekly standup..." ✓ (preserved!) 10913- Color: Red ✓ (preserved!) 10914``` 10915 10916**Only changed fields are updated!** ✓ 10917 10918### How It Works 10919 10920**Step 1**: Load existing data 10921```php 10922$existingEventData = $this->getExistingEventData( 10923 $eventId, 10924 $date, 10925 $namespace 10926); 10927``` 10928 10929**Step 2**: Merge with new data 10930```php 10931// If new value is empty, use existing value 10932$title = $newTitle ?: $existingEventData['title']; 10933$time = $newTime ?: $existingEventData['time']; 10934$description = $newDesc ?: $existingEventData['description']; 10935 10936// Special handling for color (default is #3498db) 10937if ($newColor === '#3498db' && $existingEventData['color']) { 10938 $color = $existingEventData['color']; 10939} 10940``` 10941 10942**Step 3**: Save merged data 10943```php 10944createRecurringEvents(..., $title, $time, $description, $color, ...); 10945``` 10946 10947### Fields Preserved 10948 10949When editing recurring events, these fields are now preserved if not changed: 10950- ✅ Title (if left blank) 10951- ✅ Time (if not specified) 10952- ✅ End Time (if not specified) 10953- ✅ Description (if left empty) 10954- ✅ Color (if still default blue) 10955 10956**Edit only what you want to change - everything else stays!** 10957 10958## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX 10959 10960### ✨ New Feature: Rename Namespaces 10961- **Added:** ✏️ Rename button in Namespace Explorer 10962- **Added:** Rename all events in a namespace at once 10963- **Added:** Automatic cleanup of old directory structure 10964 10965### Critical Fix: Recurring Events Actually Edit Now! 10966- **Fixed:** Editing recurring events now deletes ALL instances 10967- **Fixed:** Previously only deleted one instance, left orphans 10968- **Fixed:** Recurring events properly regenerated on edit 10969 10970### Namespace Rename Feature 10971 10972**Before**: Could only delete namespaces, not rename 10973 10974**After**: Click ✏️ to rename! 10975 10976``` 10977 work (15 events) [3] [✏️] [️] 10978 ↑ NEW! 10979``` 10980 10981**How It Works**: 109821. Click ✏️ rename button 109832. Enter new namespace name 109843. All events moved to new namespace 109854. Event `namespace` field updated in JSON 109865. Old directory cleaned up 10987 10988**Example**: 10989``` 10990Rename: "work" → "business" 10991 10992Before: 10993/data/meta/work/calendar/*.json 10994Events: {namespace: "work"} 10995 10996After: 10997/data/meta/business/calendar/*.json 10998Events: {namespace: "business"} 10999``` 11000 11001**Implementation**: 11002```php 11003private function renameNamespace() { 11004 // 1. Validate new name 11005 // 2. Rename directory 11006 // 3. Update all event namespace fields in JSON 11007 // 4. Clean up old empty directories 11008} 11009``` 11010 11011### Recurring Events Fix - The Problem 11012 11013**Before**: Editing didn't work! 11014``` 11015Original recurring event generates: 11016- Event-0 (Mon, Feb 10) 11017- Event-1 (Mon, Feb 17) 11018- Event-2 (Mon, Feb 24) 11019 11020User edits Event-0, changes title to "Updated" 11021 11022What SHOULD happen: 11023- Delete Event-0, Event-1, Event-2 11024- Generate new instances with "Updated" title 11025 11026What ACTUALLY happened: 11027- Delete Event-0 only ✗ 11028- Generate new instances 11029- Result: Event-1 and Event-2 still show old title! ✗ 11030``` 11031 11032**After**: Properly deletes ALL instances! 11033 11034**The Fix**: 11035```php 11036private function deleteEvent() { 11037 $event = getEvent($eventId); 11038 11039 // Check if recurring 11040 if ($event['recurring'] && $event['recurringId']) { 11041 // Delete ALL instances with same recurringId 11042 deleteAllRecurringInstances($recurringId); 11043 } 11044 11045 // Then normal delete for spanning events 11046} 11047 11048private function deleteAllRecurringInstances($recurringId) { 11049 // Scan ALL calendar JSON files 11050 foreach (glob('*.json') as $file) { 11051 // Filter out events with matching recurringId 11052 $events = array_filter($events, function($event) { 11053 return $event['recurringId'] !== $recurringId; 11054 }); 11055 } 11056} 11057``` 11058 11059**Result**: 11060- Edit "Weekly Team Meeting" → ALL instances updated ✓ 11061- Delete recurring event → ALL instances deleted ✓ 11062- No more orphaned events! ✓ 11063 11064### Recurring Event Fields 11065 11066Every recurring event has: 11067```json 11068{ 11069 "id": "abc123-0", 11070 "recurring": true, 11071 "recurringId": "abc123", ← Links all instances 11072 ... 11073} 11074``` 11075 11076When editing/deleting, we find ALL events with same `recurringId` and remove them! 11077 11078**Finally, recurring events work properly!** 11079 11080## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS 11081 11082### Important Events Sorting - ACTUALLY FIXED! 11083- **Fixed:** Important Events now REALLY sorted by date first, then time 11084- **Fixed:** renderSidebarSection was re-sorting and breaking the order 11085- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only 11086 11087### Pink Theme Tooltip Bling! 11088- **Added:** Pink gradient tooltips (hot pink → light pink) 11089- **Added:** Glowing pink border on tooltips 11090- **Added:** Sparkling heart () appears next to tooltip! 11091- **Added:** Heart has pink glow drop-shadow 11092 11093### The Sorting Bug - Root Cause 11094 11095**Problem**: Two sorts were happening! 11096 11097**Sort #1** (Line 2047): Before rendering 11098```php 11099usort($importantEvents, ...) // Sort by date ✓ 11100``` 11101 11102**Sort #2** (Line 2751): Inside renderSidebarSection 11103```php 11104usort($events, ...) // Sort by TIME ONLY ✗ 11105// This was breaking the date order! 11106``` 11107 11108**The Fix**: Different sorting for different sections 11109```php 11110if ($title === 'Important Events') { 11111 // Sort by DATE first, then time 11112 usort($events, function($a, $b) { 11113 if ($dateA !== $dateB) { 11114 return strcmp($dateA, $dateB); // DATE first! 11115 } 11116 // Same date - sort by time 11117 return timeCompare($a, $b); 11118 }); 11119} else { 11120 // Today/Tomorrow - sort by TIME only (same date) 11121 usort($events, function($a, $b) { 11122 return timeCompare($a, $b); 11123 }); 11124} 11125``` 11126 11127**Result**: Important Events now CORRECTLY sorted! 11128``` 11129✓ Sun, Feb 8 - 3:30 PM Super Bowl 11130✓ Tue, Feb 10 - 11:30 AM Doctor visit 11131✓ Sat, Feb 14 - Valentine's Day (all-day) 11132✓ Sat, Feb 14 - 8:00 PM Crab Shack 11133``` 11134 11135### Pink Tooltip Magic! 11136 11137**Normal Tooltips**: Black background, plain 11138```css 11139background: rgba(0, 0, 0, 0.95); 11140color: #fff; 11141``` 11142 11143**Pink Theme Tooltips**: FABULOUS! 11144```css 11145/* Pink gradient background */ 11146background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%); 11147 11148/* Glowing pink border */ 11149border: 2px solid #ff85c1; 11150 11151/* Double glow shadow */ 11152box-shadow: 11153 0 0 15px rgba(255, 20, 147, 0.6), 11154 0 4px 12px rgba(0, 0, 0, 0.4); 11155 11156/* Bold text */ 11157font-weight: 600; 11158``` 11159 11160**Plus**: Sparkling heart next to tooltip! 11161```css 11162.sidebar-pink [data-tooltip]:after { 11163 content: ''; 11164 font-size: 12px; 11165 filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8)); 11166} 11167``` 11168 11169**The Effect**: 11170``` 11171Hover over ⚠ conflict warning: 11172┌────────────────────┐ 11173│ Conflicts with: │ ← Pink gradient 11174│ • Event 1 (3PM) │ ← Pink border 11175│ • Event 2 (4PM) │ ← Pink glow 11176└────────────────────┘ 11177``` 11178 11179**Maximum glamour on tooltips too!** ✨ 11180 11181## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING 11182 11183### Important Events Order Fixed 11184- **Fixed:** Important Events now sorted by date (earliest first) 11185- **Fixed:** Events on same date sorted by time (chronological) 11186- **Fixed:** All-day events appear last within each date 11187 11188### Sorting Issue 11189 11190**Before**: Random order 11191``` 11192Important Events: 11193 Valentine's Day (Sat, Feb 14) 1119411:30 AM Doctor visit (Tue, Feb 10) ← Feb 10 after Feb 14! 111953:30 PM Super Bowl (Sun, Feb 8) ← Feb 8 after Feb 14! 111968:00 PM Crab Shack (Sat, Feb 14) 11197``` 11198 11199**After**: Chronological order 11200``` 11201Important Events: 112023:30 PM Super Bowl (Sun, Feb 8) ← Earliest! 1120311:30 AM Doctor visit (Tue, Feb 10) 11204 Valentine's Day (Sat, Feb 14) ← All-day event 112058:00 PM Crab Shack (Sat, Feb 14) ← Same day, sorted by time 11206``` 11207 11208### Sorting Logic 11209 11210**Primary Sort**: By date 11211```php 11212strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14" 11213``` 11214 11215**Secondary Sort**: By time (within same date) 11216```php 11217// All-day events (no time) go last 11218if (empty($timeA) && !empty($timeB)) return 1; 11219if (!empty($timeA) && empty($timeB)) return -1; 11220 11221// Both have times - sort chronologically 11222$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes 11223$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes 11224return $aMinutes - $bMinutes; // 690 < 1200 11225``` 11226 11227**Result**: 112281. Sun, Feb 8 - 3:30 PM (earliest date & time) 112292. Tue, Feb 10 - 11:30 AM (next date) 112303. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14) 112314. Sat, Feb 14 - 8:00 PM (timed event on Feb 14) 11232 11233**Perfect chronological order for next 2 weeks!** ✓ 11234 11235## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨ 11236 11237### EXTREME PINK BLING EFFECTS! 11238- **Added:** Click sparkles - 8 sparkles burst out on every click! 11239- **Added:** Auto-sparkles - random sparkles appear every 3 seconds 11240- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover 11241- **Added:** Pulsing border glow - constantly breathing pink glow 11242- **Added:** Drop shadows on sparkles for extra depth 11243- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows! 11244 11245### Sparkle Effects Breakdown 11246 11247**Click Sparkles** : 11248```javascript 11249// 8 sparkles burst out when you click anywhere! 11250for (let i = 0; i < 8; i++) { 11251 // Staggered appearance (40ms apart) 11252 createSparkle(x, y); 11253} 11254 11255// Sparkle emojis: 11256["✨", "", "", "⭐", "", "", "", "", "", ""] 11257``` 11258 11259**Each sparkle**: 11260- Starts at click point 11261- Flies outward 30-60px in random direction 11262- Spins 360 degrees 11263- Fades in and out 11264- Has pink glow drop-shadow 11265- Disappears after 1 second 11266 11267**Auto Sparkles** ⏰: 11268```javascript 11269// Random sparkle every 3 seconds 11270setInterval(() => { 11271 const x = Math.random() * width; 11272 const y = Math.random() * height; 11273 createSparkle(x, y); 11274}, 3000); 11275``` 11276 11277**Result**: Constant magical sparkles even without clicking! ✨ 11278 11279**Hover Mega-Glow** : 11280```css 11281.sidebar-pink:hover { 11282 box-shadow: 11283 0 0 30px rgba(255, 20, 147, 0.9), 11284 0 0 50px rgba(255, 20, 147, 0.5) !important; 11285} 11286``` 11287 11288**Result**: Sidebar EXPLODES with pink glow when you hover over it! 11289 11290**Pulsing Border Glow** : 11291```css 11292@keyframes pulse-glow { 11293 0%, 100% { 11294 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 11295 } 11296 50% { 11297 box-shadow: 11298 0 0 25px rgba(255, 20, 147, 0.8), 11299 0 0 40px rgba(255, 20, 147, 0.4); 11300 } 11301} 11302 11303animation: pulse-glow 3s ease-in-out infinite; 11304``` 11305 11306**Result**: Border continuously breathes with pink glow! 11307 11308**Sparkle Animation** : 11309```css 11310@keyframes sparkle { 11311 0% { 11312 opacity: 0; 11313 transform: translate(0, 0) scale(0) rotate(0deg); 11314 } 11315 50% { 11316 opacity: 1; 11317 transform: translate(halfway) scale(1) rotate(180deg); 11318 } 11319 100% { 11320 opacity: 0; 11321 transform: translate(far) scale(0) rotate(360deg); 11322 } 11323} 11324``` 11325 11326**Result**: Sparkles spin, grow, shrink, and fly! 11327 11328### Complete Pink Bling Experience: 11329 11330**Always Active**: 11331- ✨ Pulsing pink border glow (3 second cycle) 11332- ✨ Auto-sparkles every 3 seconds 11333 11334**On Hover**: 11335- MEGA GLOW EFFECT (2x brightness!) 11336 11337**On Click**: 11338- 8 sparkles EXPLODE outward! 11339- Random emojis (hearts, stars, diamonds, crowns!) 11340- Each sparkle spins 360° while flying 11341- Pink glow drop-shadow on each sparkle 11342 11343**The Result**: 11344- Click anywhere = SPARKLE EXPLOSION! 11345- Hover anywhere = MEGA GLOW! ✨ 11346- Always breathing and sparkling! 11347- Maximum glamour! 11348- Wife approval: 1000%! 11349 11350**THIS IS THE MOST FABULOUS CALENDAR EVER!** ✨ 11351 11352## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH 11353 11354### Pink Theme Final Touches 11355- **Fixed:** Add Event text now black (was bright pink, hard to read) 11356- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!) 11357- **Removed:** Text shadow on Add Event button (cleaner with black text) 11358 11359### Add Event Text - Black & Readable! 11360 11361**Before**: Bright pink text (#ff1493) on dark pink background 11362```php 11363$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read! 11364text-shadow: 0 0 3px #ff1493; // Glowy pink 11365``` 11366 11367**After**: Black text, no shadow, perfect contrast! 11368```php 11369$addBtnTextColor = $theme === 'pink' ? '#000000' : ...; 11370$addBtnTextShadow = $theme === 'pink' ? 'none' : ...; 11371``` 11372 11373**Result**: 11374- Black text pops against dark pink background ✓ 11375- Easy to read ✓ 11376- Professional look with bling ✓ 11377 11378### Clock Border - All Pink! 11379 11380**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green 11381 11382**Before**: 11383```php 11384// Inline style (only bottom): 11385style="border-bottom:2px solid #ff1493;" 11386 11387// CSS (all sides): 11388.eventlist-today-header { 11389 border: 2px solid #00cc07; // Green on top/sides! 11390} 11391``` 11392 11393**After**: Inline style overrides ALL sides 11394```php 11395style="border:2px solid #ff1493;" // All 4 sides pink! 11396``` 11397 11398**Result**: Clock box now 100% pink border on all four sides! ✓ 11399 11400### What Changed: 11401 11402**Add Event Button**: 11403- Background: #b8156f (dark pink) ✓ 11404- Text: **#000000 (black)** ← NEW! 11405- Text shadow: **none** ← NEW! 11406- Glow: 0 0 10px pink ✓ 11407 11408**Clock Border**: 11409- Top: **#ff1493 (pink)** ← FIXED! 11410- Right: **#ff1493 (pink)** ← FIXED! 11411- Bottom: #ff1493 (pink) ✓ 11412- Left: **#ff1493 (pink)** ← FIXED! 11413 11414**Perfect pink theme - wife approved!** ✨ 11415 11416## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION 11417 11418### Pink Theme Complete Makeover 11419- **Fixed:** Clock border now completely pink (was green on sides/top) 11420- **Changed:** Today/Tomorrow/Important sections now different shades of pink 11421- **Changed:** Add Event button now dark pink (was clashing blue) 11422- **Changed:** System status bars now pink gradient (3 shades!) 11423 11424### All-Pink Everything! 11425 11426**Clock Border**: 11427```css 11428/* Before: Green border */ 11429border: 2px solid #00cc07; 11430 11431/* After: Hot pink border */ 11432.sidebar-pink .eventlist-today-header { 11433 border-color: #ff1493; 11434 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 11435} 11436``` 11437 11438**Section Colors** (Different Pink Shades): 11439```php 11440// Before: Orange, green, purple 11441'Today' => '#ff9800', 11442'Tomorrow' => '#4caf50', 11443'Important' => '#9b59b6' 11444 11445// After: Hot pink, pink, light pink 11446'Today' => '#ff1493', // Hot pink (DeepPink) 11447'Tomorrow' => '#ff69b4', // Pink (HotPink) 11448'Important' => '#ff85c1' // Light pink 11449``` 11450 11451**Add Event Button**: 11452```php 11453// Before: Clashing blue 11454background: #3498db; 11455 11456// After: Dark pink with glow 11457background: #b8156f; // Dark pink 11458hover: #8b0f54; // Darker pink 11459shadow: 0 0 10px rgba(255, 20, 147, 0.5); 11460``` 11461 11462**System Status Bars** (Pink Gradient): 11463```css 11464/* 5-min load average */ 11465.sidebar-pink .eventlist-cpu-fill { 11466 background: #ff1493; /* Hot pink */ 11467 box-shadow: 0 0 5px rgba(255, 20, 147, 0.7); 11468} 11469 11470/* Realtime CPU */ 11471.sidebar-pink .eventlist-cpu-fill-purple { 11472 background: #ff69b4; /* Pink */ 11473 box-shadow: 0 0 5px rgba(255, 105, 180, 0.7); 11474} 11475 11476/* Memory */ 11477.sidebar-pink .eventlist-cpu-fill-orange { 11478 background: #ff85c1; /* Light pink */ 11479 box-shadow: 0 0 5px rgba(255, 133, 193, 0.7); 11480} 11481``` 11482 11483### Pink Theme Visual Hierarchy: 11484 11485**Darkest → Lightest Pink Shades**: 114861. Add Event button: #b8156f (dark pink) 114872. Today section: #ff1493 (hot pink / deep pink) 114883. System bar 1: #ff1493 (hot pink) 114894. Tomorrow section: #ff69b4 (pink) 114905. System bar 2: #ff69b4 (pink) 114916. Important section: #ff85c1 (light pink) 114927. System bar 3: #ff85c1 (light pink) 11493 11494**Result**: Beautiful pink gradient throughout entire sidebar! ✨ 11495 11496### What's Pink Now: 11497 11498✅ Sidebar background & border 11499✅ **Clock border** ← FIXED! 11500✅ Header gradient 11501✅ Week grid 11502✅ **Add Event button** ← FIXED! 11503✅ **Today section** ← Different shade! 11504✅ **Tomorrow section** ← Different shade! 11505✅ **Important section** ← Different shade! 11506✅ Event text & bars 11507✅ **System status bars** ← All 3 different pink shades! 11508✅ All shadows & glows 11509 11510**EVERYTHING is pink and fabulous!** ✨ 11511 11512## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS 11513 11514### ✨ New Theme: Pink Bling! 11515- **Added:** Glamorous hot pink theme with maximum sparkle 11516- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic 11517- **Perfect for:** Fabulous calendars that demand attention ✨ 11518 11519### Professional Theme Shadow Fix 11520- **Fixed:** Section headers now have subtle shadow (not glow) 11521- **Fixed:** Clicked day panel header has proper shadow 11522 11523### Pink Bling Theme Colors 11524 11525**Background & Borders**: 11526```php 11527'bg' => '#1a0d14', // Dark rich pink-black 11528'border' => '#ff1493', // Hot pink (DeepPink) 11529'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow 11530``` 11531 11532**Text Colors**: 11533```php 11534'text_primary' => '#ff69b4', // Hot pink 11535'text_bright' => '#ff1493', // Deep pink 11536'text_dim' => '#ff85c1', // Light pink 11537``` 11538 11539**Week Grid**: 11540```php 11541'grid_bg' => '#2d1a24', // Dark purple-pink 11542'cell_bg' => '#1a0d14', // Dark 11543'cell_today_bg' => '#3d2030', // Highlighted purple-pink 11544``` 11545 11546**Special Effects**: 11547```php 11548'bar_glow' => '0 0 5px', // Extra sparkly glow! 11549'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling! 11550``` 11551 11552### Professional Theme Shadow Fix 11553 11554**Before**: Section headers had colored glow 11555```php 11556box-shadow: 0 0 8px #3498db; // Blue glow - wrong! 11557``` 11558 11559**After**: Section headers have subtle shadow 11560```php 11561$headerShadow = ($theme === 'professional') ? 11562 '0 2px 4px rgba(0, 0, 0, 0.15)' : // Shadow for professional 11563 '0 0 8px ' . $accentColor; // Glow for others 11564``` 11565 11566**Result**: 11567- **Matrix/Purple/Pink**: Colored glow on headers ✓ 11568- **Professional**: Clean grey shadow (no glow) ✓ 11569 11570### All Four Themes: 11571 11572** Matrix Edition**: 11573- Dark green (#00cc07) 11574- Neon glow effects 11575- Hacker aesthetic 11576 11577** Purple Dream**: 11578- Elegant purple (#9b59b6) 11579- Violet glow effects 11580- Royal aesthetic 11581 11582** Professional Blue**: 11583- Clean grey/blue (#4a90e2) 11584- Subtle shadows (NO glow) 11585- Corporate aesthetic 11586 11587** Pink Bling** (NEW!): 11588- Hot pink (#ff1493) 11589- MAXIMUM sparkle & glow 11590- Glamorous aesthetic ✨ 11591 11592### Technical Implementation 11593 11594**Theme Added To**: 11595- `getSidebarThemeStyles()` - color definitions 11596- `getSidebarTheme()` - validation 11597- `saveSidebarTheme()` - admin save 11598- Admin panel - UI with preview 11599- All shadow/glow calculations 11600- JavaScript theme colors 11601- Clicked day panel colors 11602 11603**Perfect for users who want FABULOUS pink calendars!** ✨ 11604 11605## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY 11606 11607### Text Glow Refinement 11608- **Changed:** Reduced text glow from 3px to 2px (less intense) 11609- **Fixed:** Clicked day panel now has same text glow as sections 11610 11611### Text Glow Reduction 11612 11613**Before**: Text glow was too strong (3px) 11614```php 11615// Sections: 11616text-shadow: 0 0 3px #00cc07; // Too bright! 11617 11618// Clicked day panel: 11619text-shadow: 0 0 3px #00cc07; // Too bright! 11620``` 11621 11622**After**: Subtler text glow (2px) 11623```php 11624// Sections: 11625text-shadow: 0 0 2px #00cc07; // Just right ✓ 11626 11627// Clicked day panel: 11628text-shadow: 0 0 2px #00cc07; // Just right ✓ 11629``` 11630 11631**Visual Impact**: 11632- **Matrix**: Softer green glow, easier to read 11633- **Purple**: Softer purple glow, more elegant 11634- **Professional**: Still no glow (clean) 11635 11636### Consistency Fix 11637 11638**Before**: Sections had glow, clicked day panel had NO glow 11639 11640**After**: Both sections AND clicked day panel have matching subtle glow 11641 11642**Where Glow Appears**: 11643- ✅ Today section event text 11644- ✅ Tomorrow section event text 11645- ✅ Important section event text 11646- ✅ **Clicked day panel event text** ← NOW CONSISTENT! 11647 11648**Result**: 11649- Glow is less intense and easier on eyes ✓ 11650- All event text has consistent styling ✓ 11651- Matrix/Purple themes more refined ✓ 11652 11653### Technical Details 11654 11655**PHP (Sections)**: 11656```php 11657$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';'; 11658``` 11659 11660**JavaScript (Clicked Day Panel)**: 11661```javascript 11662themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple 11663eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'"; 11664``` 11665 11666**Perfect consistency and subtle elegance!** ✨ 11667 11668## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY 11669 11670### ✨ Important Events Enhancement 11671- **Changed:** Important events now show from next 2 weeks (not just current week) 11672- **Fixed:** Important events on Sunday after current week now visible 11673- **Changed:** Events loaded 2 weeks into future for Important section 11674 11675### Background Cleanup 11676- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections 11677- **Removed:** Grey backgrounds from individual events 11678- **Result:** Clean transparent backgrounds, original dark Matrix look restored 11679 11680### Important Events - Future Coverage 11681 11682**Before**: Only showed Important events from current week 11683```php 11684if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 11685 $importantEvents[] = $event; 11686} 11687``` 11688 11689**After**: Shows Important events from today through next 2 weeks 11690```php 11691// Load events 2 weeks out 11692$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days')); 11693 11694// Show all important events from today forward 11695if ($isImportant && $dateKey >= $todayStr) { 11696 $importantEvents[] = $event; 11697} 11698``` 11699 11700**Example**: 11701- Today: Saturday Feb 7 11702- Current week: Sun Feb 1 → Sat Feb 7 11703- Important events shown: Feb 7 → Feb 21 (today + 14 days) 11704 11705**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓ 11706 11707### Background Removal 11708 11709**Before**: Light grey/white backgrounds added 11710```php 11711// Section background: 11712$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay 11713 11714// Event background: 11715$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay 11716``` 11717 11718**After**: No backgrounds (transparent) 11719```php 11720// Section: No background property 11721<div style="padding:4px 0;"> 11722 11723// Event: No background property 11724<div style="padding:4px 6px; ..."> 11725``` 11726 11727**Result**: 11728- Clean, dark Matrix aesthetic restored ✓ 11729- Purple theme darker and more elegant ✓ 11730- Professional theme still has its light grey sidebar bg ✓ 11731- Events stand out with just color bars and borders ✓ 11732 11733### What Changed: 11734 11735**Sections (Today/Tomorrow/Important)**: 11736- ❌ No more grey overlay 11737- ✓ Transparent background 11738- ✓ Colored borders & glows remain 11739 11740**Individual Events**: 11741- ❌ No more grey overlay 11742- ✓ Transparent background 11743- ✓ Colored bars & borders remain 11744 11745**Perfect! Back to the original clean dark look with future Important events!** 11746 11747## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR 11748 11749### Final Theme Polish 11750- **Fixed:** Today/Tomorrow/Important section shadows now match theme 11751- **Fixed:** Event description text color now uses theme dim color 11752 11753### Section Shadow Fix 11754 11755**Problem**: Sections always had green glow regardless of theme 11756 11757**Before**: 11758```php 11759// Hardcoded green: 11760box-shadow: 0 0 5px rgba(0, 204, 7, 0.2); 11761``` 11762 11763**After**: 11764```php 11765// Theme-aware: 11766$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' : 11767 ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' : 11768 '0 2px 4px rgba(0, 0, 0, 0.1)'); 11769``` 11770 11771**Result**: 11772- **Matrix**: Green glow around sections ✓ 11773- **Purple**: Purple glow around sections ✓ 11774- **Professional**: Subtle grey shadow (no glow) ✓ 11775 11776### Description Color Fix 11777 11778**Problem**: Description text always green in clicked day panel 11779 11780**Before**: 11781```javascript 11782color: #00aa00; // Always green 11783``` 11784 11785**After**: 11786```javascript 11787color: themeColors.text_dim; // Theme dim color 11788``` 11789 11790**Result**: 11791- **Matrix**: Dim green (#00aa00) ✓ 11792- **Purple**: Dim purple (#8e7ab8) ✓ 11793- **Professional**: Grey (#7f8c8d) ✓ 11794 11795### Now 100% Theme Consistent 11796 11797Every single visual element respects theme: 11798- ✅ Sidebar background & border 11799- ✅ Header colors & shadows 11800- ✅ Week grid & cells 11801- ✅ Add Event button 11802- ✅ Section borders & **shadows** ← Fixed! 11803- ✅ Event titles & times 11804- ✅ Event **descriptions** ← Fixed! 11805- ✅ Clicked day panel 11806- ✅ Event bars & glows 11807 11808**Absolute perfection across all three themes!** ✨ 11809 11810## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND 11811 11812### Theme Improvements 11813- **Fixed:** Clicked day panel now uses correct theme colors 11814- **Changed:** Professional Blue background now light grey (not white) 11815- **Added:** Theme colors passed to JavaScript for dynamic rendering 11816 11817### Clicked Day Panel Theming 11818 11819**Before**: Always blue regardless of theme 11820```javascript 11821// Hardcoded blue: 11822color:#00cc07; // Always green 11823background:#3498db; // Always blue 11824``` 11825 11826**After**: Theme-aware colors 11827```php 11828// PHP passes theme to JavaScript: 11829window.themeColors_XXX = { 11830 text_primary: '#00cc07' or '#b19cd9' or '#2c3e50', 11831 text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2', 11832 text_shadow: '0 0 3px ...' or '', 11833 event_bg: 'rgba(...)', 11834 border_color: 'rgba(...)', 11835 bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)' 11836}; 11837 11838// JavaScript uses theme colors: 11839color: themeColors.text_primary; 11840background: themeColors.event_bg; 11841``` 11842 11843**Result**: 11844- Matrix: Green panel with green glow ✓ 11845- Purple: Purple panel with purple glow ✓ 11846- Professional: Blue panel, no glow, clean ✓ 11847 11848### Professional Theme Background Change 11849 11850**Before**: Almost white (#f5f7fa, #ffffff) 11851```php 11852'bg' => '#f5f7fa', // Very light 11853'cell_bg' => '#ffffff', // Pure white 11854``` 11855 11856**After**: Light grey tones 11857```php 11858'bg' => '#e8ecf1', // Soft grey-blue 11859'cell_bg' => '#f5f7fa', // Light grey 11860'grid_bg' => '#d5dbe3', // Medium grey 11861'cell_today_bg' => '#dce8f7' // Highlighted grey-blue 11862``` 11863 11864**Visual Impact**: 11865- Sidebar: Light grey-blue background (#e8ecf1) 11866- Week cells: Lighter grey (#f5f7fa) 11867- Today cell: Highlighted blue-grey (#dce8f7) 11868- More depth and contrast ✓ 11869- Professional appearance ✓ 11870 11871### All Theme Elements Now Consistent 11872 11873**Matrix (Green)**: 11874- Sidebar: Dark (#242424) 11875- Clicked panel: Dark with green 11876- Text: Green with glow 11877 11878**Purple Dream**: 11879- Sidebar: Dark purple (#2a2030) 11880- Clicked panel: Dark with purple 11881- Text: Purple with glow 11882 11883**Professional Blue**: 11884- Sidebar: Light grey (#e8ecf1) 11885- Clicked panel: Light with blue 11886- Text: Dark grey, no glow 11887 11888**Perfect theme consistency everywhere!** 11889 11890## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING 11891 11892### Critical Fixes 11893- **Fixed:** Tomorrow events not loaded when outside current week 11894- **Fixed:** `&` showing instead of `&` (double HTML encoding) 11895 11896### Issue 1: Tomorrow Not Loading 11897 11898**Problem**: Sidebar only loaded events for current week 11899- Today (Saturday): Week ends today 11900- Tomorrow (Sunday): Start of NEXT week 11901- Tomorrow events never loaded from data files! 11902 11903**Before**: 11904```php 11905// Only load current week 11906$end = new DateTime($weekEnd); 11907$end->modify('+1 day'); 11908$period = new DatePeriod($start, $interval, $end); 11909// If tomorrow > weekEnd, it's not in period! 11910``` 11911 11912**After**: 11913```php 11914// Check if tomorrow is outside week 11915$tomorrowDate = date('Y-m-d', strtotime('+1 day')); 11916if ($tomorrowDate > $weekEnd) { 11917 // Extend to include tomorrow 11918 $end = new DateTime($tomorrowDate); 11919} 11920$end->modify('+1 day'); 11921$period = new DatePeriod($start, $interval, $end); 11922``` 11923 11924**Result**: Tomorrow events now loaded even at week boundary! ✓ 11925 11926### Issue 2: Double HTML Encoding 11927 11928**Problem**: `&` characters showing as `&` 11929 11930**Cause**: Double encoding on line 2625 and 2681 11931```php 11932// Line 2625: 11933$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee & Tea" 11934 11935// Line 2681: 11936$html .= htmlspecialchars($title); // "Coffee & Tea" → "Coffee &amp; Tea" ❌ 11937``` 11938 11939**Fixed**: 11940```php 11941// Line 2625: 11942$title = htmlspecialchars($event['title']); // Encode once 11943 11944// Line 2681: 11945$html .= $title; // Use already-encoded value ✓ 11946``` 11947 11948**Result**: `&` displays correctly! ✓ 11949 11950### Both Fixes Critical 11951 11952These were **two separate bugs**: 119531. **Loading bug**: Tomorrow events not read from files 119542. **Display bug**: Double-encoding text 11955 11956Both needed fixing for Tomorrow section to work properly! 11957 11958## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY 11959 11960### Critical Fix 11961- **Fixed:** Tomorrow section missing when tomorrow is outside current week 11962- **Fixed:** Today section now always shows regardless of week boundaries 11963- **Changed:** Today/Tomorrow processed BEFORE week boundary checks 11964 11965### The Problem 11966 11967**Scenario**: Today is Saturday (last day of week) 11968- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today 11969- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week** 11970 11971**BROKEN Logic** (v4.2.2): 11972```php 11973foreach ($events as $dateKey => $dayEvents) { 11974 if ($dateKey < $weekStart) continue; // Skip old events 11975 11976 // ...week processing... 11977 11978 if ($dateKey === $tomorrowStr) { // ← Never reached! 11979 $tomorrowEvents[] = $event; // Tomorrow > weekEnd 11980 } 11981} 11982``` 11983 11984**Result**: Tomorrow events never added because loop skipped them! ❌ 11985 11986### The Fix 11987 11988**Process Today/Tomorrow FIRST**: 11989```php 11990foreach ($events as $dateKey => $dayEvents) { 11991 $eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 11992 11993 foreach ($eventsWithConflicts as $event) { 11994 // ALWAYS process Today and Tomorrow first! 11995 if ($dateKey === $todayStr) { 11996 $todayEvents[] = $event; // ✓ Always shows 11997 } 11998 if ($dateKey === $tomorrowStr) { 11999 $tomorrowEvents[] = $event; // ✓ Always shows 12000 } 12001 12002 // THEN check week boundaries for grid 12003 if ($dateKey >= $weekStart && $dateKey <= $weekEnd) { 12004 $weekEvents[$dateKey][] = $event; 12005 } 12006 12007 // Important events still week-only 12008 if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 12009 $importantEvents[] = $event; 12010 } 12011 } 12012} 12013``` 12014 12015### What Changed 12016 12017**Before**: 120181. Skip events < weekStart ❌ 120192. Process week grid 120203. Try to add Today/Tomorrow ← **Failed if outside week** 120214. Add Important events 12022 12023**After**: 120241. **Always add Today events** ✓ 120252. **Always add Tomorrow events** ✓ 120263. Add to week grid if in range 120274. Add Important events if in range 12028 12029**Result**: 12030- Today section: ✓ Always shows 12031- Tomorrow section: ✓ Always shows (even at week boundary!) 12032- Week grid: ✓ Only current week 12033- Important: ✓ Only current week 12034 12035### Edge Cases Fixed 12036 12037**Saturday → Sunday transition**: 12038- Today (Sat): Shows in Today section ✓ 12039- Tomorrow (Sun): Shows in Tomorrow section ✓ 12040- Week grid: Only shows Sat (today) ✓ 12041 12042**Sunday → Monday transition**: 12043- Today (Sun): Shows in Today section ✓ 12044- Tomorrow (Mon): Shows in Tomorrow section ✓ 12045- Week grid: Shows both Sun and Mon ✓ 12046 12047**Perfect! Tomorrow section now always works!** 12048 12049## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY! 12050 12051### Corrected Week Options 12052- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!) 12053- **Changed:** Default is **Sunday** (US/Canada standard) 12054- **Fixed:** Day names array for Sunday start: S M T W T F S 12055 12056### Correct Week Start Options 12057 12058**Sunday Start** (Default): 12059- Grid shows: **S M T W T F S** 12060- Week: Sunday → Saturday 12061- US/Canada standard 12062- Most common worldwide 12063 12064**Monday Start**: 12065- Grid shows: **M T W T F S S** 12066- Week: Monday → Sunday 12067- ISO 8601 standard 12068- Common in Europe 12069 12070### Technical Changes 12071 12072**All References Updated**: 12073```php 12074// Changed from 'saturday' to 'sunday' in: 12075- Admin validation 12076- Week calculation logic 12077- Day names array 12078- Default value 12079- Comments 12080``` 12081 12082**Sunday Calculation** (when today is Saturday): 12083```php 12084$today = date('w'); // 0=Sun, 6=Sat 12085if ($today == 0) { 12086 $weekStart = date('Y-m-d'); // Today! 12087} else { 12088 // Go back $today days to last Sunday 12089 $weekStart = date('Y-m-d', strtotime('-' . $today . ' days')); 12090} 12091``` 12092 12093**Examples**: 12094- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7 12095- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14 12096 12097**Sorry for the confusion - it's Sunday not Saturday!** 12098 12099## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY 12100 12101### Critical Fix 12102- **Fixed:** Week calculation broken when today is Saturday 12103- **Fixed:** Events not showing in Today/Important sections 12104- **Fixed:** Week grid event bars missing 12105- **Changed:** Default week start is Saturday (matches main calendar) 12106 12107### Technical Details 12108 12109**The Bug**: 12110```php 12111// BROKEN (v4.2.0): 12112$weekStart = date('Y-m-d', strtotime('saturday this week')); 12113// When TODAY is Saturday, this is ambiguous and fails! 12114 12115// FIXED (v4.2.1): 12116$today = date('w'); // 0 (Sun) to 6 (Sat) 12117if ($today == 6) { 12118 $weekStart = date('Y-m-d'); // Today! 12119} else { 12120 $daysBack = ($today == 0) ? 1 : ($today + 1); 12121 $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days')); 12122} 12123$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days')); 12124``` 12125 12126**Why It Failed**: 12127- `strtotime('saturday this week')` is ambiguous when run ON a Saturday 12128- PHP may interpret it as "next Saturday" or fail 12129- Result: Week range was wrong, events filtered out 12130 12131**The Fix**: 12132- Explicit calculation using day-of-week math 12133- Saturday (day 6): weekStart = today 12134- Sunday (day 0): weekStart = yesterday 12135- Monday-Friday: calculate days back to last Saturday 12136 12137**Result**: Works reliably every day of the week! 12138 12139**Default Changed**: Saturday start (was Monday in 4.2.0) 12140- Matches main calendar behavior 12141- Users can still switch to Monday in settings 12142 12143## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR 12144 12145### ✨ New Feature 12146- **Added:** Week start day selector in Themes tab 12147- **Added:** Choose between Monday (ISO standard) or Saturday week start 12148- **Added:** Week grid and all events now respect the selected start day 12149- **Changed:** Themes tab renamed to "Sidebar Widget Settings" 12150 12151### Week Start Options 12152 12153**Monday Start** (Default): 12154- Grid shows: M T W T F S S 12155- Week runs: Monday → Sunday 12156- ISO 8601 standard 12157- Common in Europe, most of world 12158 12159**Saturday Start**: 12160- Grid shows: S S M T W T F 12161- Week runs: Saturday → Friday 12162- Common in Middle East 12163- Sabbath-observant communities 12164 12165### Technical Details 12166 12167**Configuration**: 12168```php 12169// Saved in: data/meta/calendar_week_start.txt 12170// Values: 'monday' or 'saturday' 12171 12172// Week calculation: 12173if ($weekStartDay === 'saturday') { 12174 $weekStart = date('Y-m-d', strtotime('saturday this week')); 12175 $weekEnd = date('Y-m-d', strtotime('friday next week')); 12176} else { 12177 $weekStart = date('Y-m-d', strtotime('monday this week')); 12178 $weekEnd = date('Y-m-d', strtotime('sunday this week')); 12179} 12180``` 12181 12182**Day Names Array**: 12183```php 12184// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S'] 12185// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F'] 12186``` 12187 12188**What Changes**: 12189- Week grid day letters 12190- Week grid date sequence 12191- Today/Tomorrow/Important event date ranges 12192- Week event grouping 12193 12194**What Stays Same**: 12195- All themes still work 12196- Event data unchanged 12197- Main calendar unaffected 12198 12199### How to Change: 12200 122011. Admin → Calendar → Themes tab 122022. Under "Week Start Day" section 122033. Select Monday or Saturday 122044. Click "Save Settings" 122055. Refresh sidebar to see changes 12206 12207**Perfect for international users or religious observances!** 12208 12209## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS 12210 12211### ️ Calendar Improvements 12212- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar) 12213- **Changed:** Event section backgrounds much lighter (almost white) 12214- **Changed:** Individual event backgrounds lighter and more readable 12215- **Changed:** Event borders now theme-colored 12216 12217### Technical Details 12218 12219**Week Start Change**: 12220```php 12221// Before: 12222$weekStart = date('Y-m-d', strtotime('monday this week')); 12223$weekEnd = date('Y-m-d', strtotime('sunday this week')); 12224$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S']; 12225 12226// After: 12227$weekStart = date('Y-m-d', strtotime('sunday this week')); 12228$weekEnd = date('Y-m-d', strtotime('saturday this week')); 12229$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S']; 12230``` 12231 12232**Background Colors**: 12233```php 12234// Section backgrounds (Today, Tomorrow, Important): 12235Matrix: rgba(255, 255, 255, 0.05) // Very light overlay 12236Purple: rgba(255, 255, 255, 0.08) // Slightly lighter 12237Professional: rgba(255, 255, 255, 0.95) // Almost white! 12238 12239// Individual event backgrounds: 12240Matrix: rgba(255, 255, 255, 0.03) // Subtle 12241Purple: rgba(255, 255, 255, 0.05) // Light 12242Professional: rgba(255, 255, 255, 0.5) // Semi-transparent white 12243``` 12244 12245**Event Borders**: 12246```php 12247Matrix: rgba(0, 204, 7, 0.2) // Green 12248Purple: rgba(155, 89, 182, 0.2) // Purple 12249Professional: rgba(74, 144, 226, 0.2) // Blue 12250``` 12251 12252### Visual Result: 12253 12254**Before**: Dark backgrounds made text hard to read 12255**After**: Light backgrounds make events pop and text very readable 12256 12257**Week Grid**: 12258``` 12259Before: [M][T][W][T][F][S][S] 12260After: [S][M][T][W][T][F][S] ← Now matches main calendar! 12261``` 12262 12263## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS 12264 12265### Final Theme Polish 12266- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors 12267- **Fixed:** Event times now use theme bright color 12268- **Fixed:** Event dates use theme dim color 12269- **Fixed:** Task checkboxes use theme bright color 12270- **Fixed:** Event color bars use theme-appropriate shadows 12271- **Fixed:** No text shadows on Professional theme 12272 12273### Technical Details 12274 12275**Event Text Colors**: 12276```php 12277// Matrix: 12278- Title: #00cc07 (green) 12279- Time: #00dd00 (bright green) 12280- Date: #00aa00 (dim green) 12281- Text shadow: 0 0 3px (glow) 12282 12283// Purple: 12284- Title: #b19cd9 (lavender) 12285- Time: #d4a5ff (bright purple) 12286- Date: #8e7ab8 (dim purple) 12287- Text shadow: 0 0 3px (glow) 12288 12289// Professional: 12290- Title: #2c3e50 (dark grey) 12291- Time: #4a90e2 (blue) 12292- Date: #7f8c8d (grey) 12293- Text shadow: none (clean) 12294``` 12295 12296**Color Bar Shadows**: 12297```php 12298// Matrix & Purple: Glow effect 12299box-shadow: 0 0 3px [event-color]; 12300 12301// Professional: Subtle shadow 12302box-shadow: 0 1px 2px rgba(0,0,0,0.2); 12303``` 12304 12305### What's Now Fully Themed: 12306 12307✅ Sidebar background & border 12308✅ Header (clock box) background, border, text 12309✅ Week grid background, borders, cells 12310✅ Week grid day letters & numbers 12311✅ Week grid event bars & "+N more" text 12312✅ Add Event button background & text 12313✅ Today/Tomorrow/Important event titles 12314✅ Event times 12315✅ Event dates (Important section) 12316✅ Task checkboxes 12317✅ Event color bars 12318✅ All text shadows (glow vs none) 12319 12320**Every single element now respects the theme!** 12321 12322## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION 12323 12324### Theme Improvements 12325- **Fixed:** Week calendar grid now uses theme colors (purple/blue) 12326- **Fixed:** Add Event button now uses theme colors 12327- **Fixed:** Clock box border now matches theme 12328- **Fixed:** All text shadows respect theme (no glow on professional) 12329- **Fixed:** Event bars use theme-appropriate shadows 12330 12331### Technical Details 12332 12333**Week Grid Theming**: 12334```php 12335// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders 12336// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders 12337// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders 12338``` 12339 12340**Add Event Button**: 12341```php 12342// Matrix: Dark green (#006400) with bright green text 12343// Purple: Purple (#7d3c98) with lavender text 12344// Professional: Blue (#3498db) with white text 12345``` 12346 12347**Text Shadows**: 12348```php 12349// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color) 12350// Professional: No glow (clean look) 12351``` 12352 12353**CSS Overrides**: 12354```css 12355/* Purple theme */ 12356.sidebar-purple .eventlist-today-header { 12357 border-color: #9b59b6; 12358 box-shadow: 0 0 8px rgba(155, 89, 182, 0.2); 12359} 12360 12361/* Professional theme */ 12362.sidebar-professional .eventlist-today-header { 12363 border-color: #4a90e2; 12364 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 12365} 12366``` 12367 12368### What Changed Per Theme: 12369 12370**Purple Dream**: 12371- Week grid: Purple borders and dark purple background 12372- Add Event: Purple button with lavender text 12373- Clock box: Purple border with purple glow 12374- Event bars: Purple glow instead of green 12375- All text: Purple/lavender shades 12376 12377**Professional Blue**: 12378- Week grid: Blue borders and light grey background 12379- Add Event: Blue button with white text 12380- Clock box: Blue border with subtle shadow (no glow) 12381- Event bars: Subtle shadows (no glow) 12382- All text: Dark grey and blue shades 12383 12384**Matrix Edition**: Unchanged (still perfect green theme!) 12385 12386## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING 12387 12388### ✨ New Features 12389- **Added:** Themes tab in admin for sidebar widget theming 12390- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey) 12391- **Added:** Theme selector with live previews 12392- **Added:** Theme persistence across page loads 12393 12394### Available Themes 12395 12396**Matrix Edition** (Default): 12397- Dark background (#242424) 12398- Green accents (#00cc07) 12399- Neon glow effects 12400- Original Matrix styling 12401 12402**Purple Dream**: 12403- Dark purple background (#2a2030) 12404- Purple/violet accents (#9b59b6) 12405- Elegant purple glow 12406- Rich purple color scheme 12407 12408**Professional Blue**: 12409- Light grey background (#f5f7fa) 12410- Blue accents (#4a90e2) 12411- Clean professional look 12412- Subtle shadows instead of glow 12413 12414### Bug Fix 12415- **Fixed:** Tooltips now go UP and to the LEFT (was going right) 12416- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px` 12417 12418### Technical Details 12419 12420**Theme System**: 12421```php 12422// Saved in: data/meta/calendar_theme.txt 12423// Applied dynamically in syntax.php 12424$theme = $this->getSidebarTheme(); // 'matrix', 'purple', or 'professional' 12425$styles = $this->getSidebarThemeStyles($theme); 12426 12427// Styles include: 12428- bg, border, shadow 12429- header_bg, header_border, header_shadow 12430- text_primary, text_bright, text_dim 12431- grid_bg, grid_border 12432- cell_bg, cell_today_bg 12433``` 12434 12435**Theme Changes**: 12436- Header background gradient 12437- Border colors 12438- Text colors 12439- Shadow/glow effects 12440- Grid colors 12441 12442**How to Change**: 124431. Admin → Calendar → Themes tab 124442. Select desired theme 124453. Click "Save Theme" 124464. Refresh page to see changes 12447 12448### Notes 12449- Themes only affect sidebar widget appearance 12450- Main calendar view unchanged 12451- Theme setting stored in `data/meta/calendar_theme.txt` 12452- Safe to switch themes - no data affected 12453 12454## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING 12455 12456### Bug Fixes 12457- **Fixed:** Events now sort chronologically by time (was using string comparison) 12458- **Fixed:** Tooltip positioning using JavaScript like system tooltips 12459- **Fixed:** All-day events appear first, then events in time order 12460 12461### Technical Details 12462 12463**Event Sorting Fix**: 12464```php 12465// BROKEN (v4.0.9): 12466return strcmp($aTime, $bTime); 12467// String comparison: "10:00" < "8:00" because "1" < "8" 12468// Result: 10:00 AM shown BEFORE 8:00 AM ❌ 12469 12470// FIXED (v4.1.0): 12471$aMinutes = $this->timeToMinutes($aTime); // 8:00 = 480 12472$bMinutes = $this->timeToMinutes($bTime); // 10:00 = 600 12473return $aMinutes - $bMinutes; 12474// Result: 8:00 AM shown BEFORE 10:00 AM ✓ 12475``` 12476 12477**Example Before Fix**: 12478``` 12479 Weekend Ticket Duty (all-day) 124808:00 AM START TICKETS 1248110:00 AM Soul Winning ← Wrong! 124829:45 AM Coffee ← Should be before 10:00 AM 12483``` 12484 12485**Example After Fix**: 12486``` 12487 Weekend Ticket Duty (all-day) 124888:00 AM START TICKETS 124899:45 AM Coffee ← Correct! 1249010:00 AM Soul Winning 12491``` 12492 12493**Tooltip Positioning**: 12494- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()` 12495- Uses CSS custom properties `--tooltip-left` and `--tooltip-top` 12496- Positioned on `mouseenter` event 12497- Matches system tooltip implementation (no cutoff) 12498 12499**JavaScript Implementation**: 12500```javascript 12501element.addEventListener("mouseenter", function() { 12502 const rect = element.getBoundingClientRect(); 12503 element.style.setProperty("--tooltip-left", (rect.right - 10) + "px"); 12504 element.style.setProperty("--tooltip-top", (rect.top - 30) + "px"); 12505}); 12506``` 12507 12508**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically! 12509 12510## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX 12511 12512### UI Improvements 12513- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge 12514- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar 12515- **Changed:** Main calendar conflict tooltip now much smaller (was too big) 12516 12517### Technical Details 12518 12519**Sidebar Overflow Fix**: 12520```php 12521// Before (line 2005): 12522style="...overflow:hidden..." // ← Blocked tooltips! 12523 12524// After: 12525style="...overflow:visible..." // ← Tooltips extend beyond! 12526``` 12527 12528**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important` 12529 12530**Main Calendar Tooltip Size**: 12531```css 12532/* Before: */ 12533.conflict-tooltip { 12534 border: 2px solid #ff9800; 12535 border-radius: 6px; 12536 padding: 8px 12px; 12537 font-size: 12px; 12538 min-width: 200px; 12539 max-width: 350px; 12540} 12541 12542/* After: */ 12543.conflict-tooltip { 12544 border: 1px solid #ff9800; /* Thinner */ 12545 border-radius: 3px; /* Smaller */ 12546 padding: 4px 8px; /* Less padding */ 12547 font-size: 10px; /* Smaller header */ 12548 min-width: 120px; /* Narrower */ 12549 max-width: 200px; /* Narrower */ 12550} 12551 12552.conflict-tooltip-body { 12553 padding: 6px 8px; /* Was 10px 12px */ 12554 font-size: 9px; /* Was 11px */ 12555 line-height: 1.4; /* Was 1.6 */ 12556} 12557 12558.conflict-item { 12559 padding: 2px 0; /* Was 4px */ 12560 font-size: 9px; /* Added smaller font */ 12561} 12562``` 12563 12564**Result**: 12565- Main calendar tooltip ~50% smaller 12566- Sidebar tooltips now extend beyond borders 12567- Both tooltips compact and readable 12568 12569## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP 12570 12571### Bug Fix 12572- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text) 12573- **Changed:** Using HTML entity ` ` for newlines instead of `\n` 12574 12575### Technical Details 12576 12577**The Problem**: 12578```php 12579// Before (v4.0.7): 12580$conflictTooltip = 'Conflicts with:\n'; // Literal \n showed in tooltip 12581 12582// Displayed as: 12583"Conflicts with:\n• Event 1\n• Event 2" // ← Literal backslash-n 12584``` 12585 12586**The Fix**: 12587```php 12588// After (v4.0.8): 12589$conflictTooltip = "Conflicts with: "; // HTML entity for newline 12590 12591// Displays as: 12592Conflicts with: 12593• Event 1 12594• Event 2 12595``` 12596 12597**Why ` ` Works**: 12598- HTML entity for line feed character 12599- Works in data attributes 12600- CSS `white-space: pre-line` preserves the newlines 12601- Renders as actual line breaks in tooltip 12602 12603**Applied to**: 12604- PHP rendering (sidebar Today/Tomorrow/Important) 12605- JavaScript rendering (clicked day events) 12606 12607## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX 12608 12609### UI Improvements 12610- **Changed:** Tooltip size reduced significantly (much more compact) 12611- **Fixed:** Tooltip now overflows sidebar borders (not cut off) 12612- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px) 12613- **Changed:** Narrower width (120-200px vs 200-300px) 12614 12615### Technical Details 12616 12617**Tooltip Size Reduction**: 12618```css 12619/* Before (v4.0.6): 12620padding: 6px 10px; 12621font-size: 11px; 12622min-width: 200px; 12623max-width: 300px; 12624 12625/* After (v4.0.7): */ 12626padding: 3px 6px; 12627font-size: 9px; 12628min-width: 120px; 12629max-width: 200px; 12630``` 12631 12632**Overflow Fix**: 12633```css 12634/* Allow tooltip to extend beyond sidebar */ 12635.sidebar-widget, 12636.sidebar-matrix { 12637 overflow: visible !important; 12638} 12639 12640/* Position tooltip outside */ 12641[data-tooltip]:before { 12642 bottom: 120%; /* Further above */ 12643 right: -10px; /* Can extend beyond edge */ 12644 z-index: 10000; /* Always on top */ 12645} 12646``` 12647 12648**Visual Result**: 12649- Tooltip is ~40% smaller 12650- Extends beyond sidebar border if needed 12651- Still readable, just more compact 12652- Better for small screens 12653 12654## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING 12655 12656### Critical Fix 12657- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly 12658- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names 12659- **Fixed:** Events without end time now treated as zero-duration (not +1 hour) 12660- **Fixed:** Now matches what you see in main calendar view 12661 12662### ✨ UI Improvement 12663- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right) 12664- **Added:** Custom CSS tooltip with data-tooltip attribute 12665- **Improved:** Better tooltip positioning - doesn't overflow screen edges 12666 12667### Technical Details 12668 12669**The Problem - Field Name Mismatch**: 12670```php 12671// Main calendar (line 697): 12672$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase) 12673 12674// Sidebar (before fix): 12675$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case) 12676``` 12677 12678**The Problem - Duration Logic**: 12679```php 12680// Main calendar (line 697): 12681$end1 = isset($evt1['endTime']) && !empty($evt1['endTime']) 12682 ? $evt1['endTime'] 12683 : $evt1['time']; // ← Uses START time (zero duration) 12684 12685// Sidebar (before fix): 12686$endTime = ... ? ... : $this->addHoursToTime($startTime, 1); // ← Added 1 hour! 12687``` 12688 12689**The Fix**: 12690```php 12691// Now checks BOTH field names: 12692if (isset($event['end_time']) && $event['end_time'] !== '') { 12693 $endTime = $event['end_time']; 12694} elseif (isset($event['endTime']) && $event['endTime'] !== '') { 12695 $endTime = $event['endTime']; 12696} else { 12697 $endTime = $startTime; // ← Matches main calendar! 12698} 12699``` 12700 12701**Tooltip Positioning**: 12702- Uses `data-tooltip` attribute instead of `title` 12703- CSS positions tooltip ABOVE badge (`bottom: 100%`) 12704- Aligns to RIGHT edge (`right: 0`) 12705- Arrow points down to badge 12706- Black background with white text 12707- Max width 300px 12708 12709### Example 12710 12711**6:00 PM Evening Service** (no end time): 12712- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌ 12713- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar! 12714 12715**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**: 12716- Zero-duration events at 6:00 PM don't overlap with anything 12717- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict 12718 12719**Tooltip appears**: 12720``` 12721 ┌────────────────────┐ 12722 │ Conflicts with: │ 12723 │ • Super Bowl │ 12724 │ (3:30 PM-7:00 PM)│ 12725 └─────────┬──────────┘ 12726 ▼ 12727 ⚠ 12728``` 12729 12730## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING 12731 12732### Bug Fix 12733- **Fixed:** Events without end_time now properly get 1-hour default duration 12734- **Fixed:** Empty string end_time values now treated as missing (was causing issues) 12735- **Improved:** More robust checking for `end_time` field (checks both isset and not empty) 12736 12737### Technical Details 12738 12739**The Problem**: 12740```php 12741// Before (broken): 12742$endTime = isset($event['end_time']) ? $event['end_time'] : default; 12743 12744// If end_time exists but is empty string "": 12745isset($event['end_time']) = TRUE 12746$endTime = "" // ← Empty string, not default! 12747``` 12748 12749**The Fix**: 12750```php 12751// After (fixed): 12752$endTime = (isset($event['end_time']) && $event['end_time'] !== '') 12753 ? $event['end_time'] 12754 : $this->addHoursToTime($startTime, 1); 12755 12756// Now empty string gets the default 1-hour duration 12757``` 12758 12759**Why This Matters**: 12760Events like "6:00 PM Evening Service" with no end time should be treated as 6:00-7:00 PM (1 hour). If the `end_time` field contains an empty string instead of being absent, the old code would use the empty string, causing conflict detection to fail. 12761 12762**Example**: 12763``` 12764Super Bowl: 3:30 PM - 7:00 PM 12765Evening Service: 6:00 PM - ??? (should be 7:00 PM) 12766 12767If end_time = "" (empty string): 12768 Old code: Uses "" → conflict detection fails 12769 New code: Uses 7:00 PM → conflict detected ✓ 12770``` 12771 12772### Testing 12773If you're still not seeing the conflict on the 6:00 PM service: 127741. Check if the event has `end_time` set in the JSON 127752. Clear cache (Admin → Manage Events → Clear Cache) 127763. The conflict should now appear 12777 12778## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS 12779 12780### ✨ Feature Added 12781- **Added:** Hover over ⚠ badge to see which events are conflicting 12782- **Added:** Tooltip shows conflicting event titles and times 12783- **Added:** Works in both sidebar sections and clicked day events 12784 12785### Technical Details 12786 12787**Conflict Tracking Enhanced**: 12788```php 12789// Now tracks WHICH events conflict: 12790$event['conflictingWith'] = [ 12791 ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'], 12792 ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30'] 12793]; 12794``` 12795 12796**Tooltip Format**: 12797``` 12798Conflicts with: 12799• Meeting (10:00 AM-11:00 AM) 12800• Call (10:30 AM-11:30 PM) 12801``` 12802 12803**Where It Works**: 12804- ✅ Today section (sidebar) 12805- ✅ Tomorrow section (sidebar) 12806- ✅ Important Events section (sidebar) 12807- ✅ Clicked day events (week grid) 12808 12809**Cursor**: Changes to `help` cursor on hover to indicate tooltip 12810 12811### Note on Multi-Day Events 12812The current conflict detection only checks time conflicts **within the same day**. If you have an event that spans multiple days (e.g., start date on Monday, end date on Wednesday), each day is treated independently. To see conflicts across the entire span, you would need to check each individual day. 12813 12814## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC 12815 12816### Bug Fixes 12817- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections 12818- **Fixed:** Important Events now shows events even if they're today or tomorrow 12819- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular) 12820 12821### Technical Details 12822 12823**Conflict Badge Issue**: 12824```php 12825// BROKEN (line 2511): 12826$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']); 12827// ↑ Checking 'conflicts' (plural) 12828 12829// But detectTimeConflicts() sets: 12830$event['conflict'] = true/false; 12831// ↑ Setting 'conflict' (singular) 12832 12833// FIXED: 12834$hasConflict = isset($event['conflict']) && $event['conflict']; 12835``` 12836 12837**Result**: Badge now shows for ALL conflicting events in sidebar sections 12838 12839**Important Events Logic Issue**: 12840```php 12841// BROKEN: 12842if ($dateKey === $todayStr) { 12843 $todayEvents[] = ...; 12844} elseif ($dateKey === $tomorrowStr) { 12845 $tomorrowEvents[] = ...; 12846} else { // ← Only checked if NOT today/tomorrow! 12847 if ($isImportant) { 12848 $importantEvents[] = ...; 12849 } 12850} 12851 12852// FIXED: 12853if ($dateKey === $todayStr) { 12854 $todayEvents[] = ...; 12855} 12856if ($dateKey === $tomorrowStr) { 12857 $tomorrowEvents[] = ...; 12858} 12859// ↑ Changed to separate 'if' statements 12860if ($isImportant && $dateKey in this week) { 12861 $importantEvents[] = ...; // ← Now includes today/tomorrow too! 12862} 12863``` 12864 12865**Result**: Important namespace events now show in Important section even if they're today or tomorrow 12866 12867### Conflict Badge Display 12868- Simplified to just ⚠ icon (no count) 12869- Orange color (#ff9800) 12870- 10px font size 12871- Hover shows "Time conflict detected" 12872 12873## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY 12874 12875### Bug Fix 12876- **Fixed:** Important Events section now displays all events correctly 12877- **Fixed:** Single-event days now get conflict flag (was returning early without flag) 12878- **Fixed:** Conflict detection no longer causes events to disappear from Important section 12879 12880### Technical Details 12881 12882**The Problem**: 12883- `detectTimeConflicts()` returned early if only 1 event on a day 12884- Returned original array without adding 'conflict' field 12885- This inconsistency caused issues in event categorization 12886 12887**The Solution**: 12888```php 12889// Before (broken): 12890if (empty($dayEvents) || count($dayEvents) < 2) { 12891 return $dayEvents; // No 'conflict' field added! 12892} 12893 12894// After (fixed): 12895if (count($dayEvents) === 1) { 12896 return [array_merge($dayEvents[0], ['conflict' => false])]; // Always add flag 12897} 12898``` 12899 12900**Result**: 12901- All events now have 'conflict' field consistently 12902- Single events: conflict = false 12903- Multiple events: conflict = true/false based on overlap 12904- Important Events section displays correctly 12905 12906## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES 12907 12908### Bug Fixes 12909- **Fixed:** Conflict badge (⚠) now displays in clicked day events 12910- **Fixed:** Recurring events edit now updates time and end_time correctly 12911- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit 12912 12913### ✨ Features Added 12914- **Added:** Time conflict detection for overlapping events 12915- **Added:** detectTimeConflicts() function checks all events on same day 12916- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions 12917- **Added:** Events now have 'conflict' flag set automatically 12918 12919### UI Changes 12920- **Changed:** Admin tab order: Manage Events (first), Update Plugin, ⚙️ Outlook Sync 12921- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin") 12922- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars) 12923 12924### Technical Details 12925 12926**Conflict Detection**: 12927```php 12928// Automatically detects overlapping events on same day 12929// Sets 'conflict' flag to true if event overlaps with another 12930$eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 12931``` 12932 12933**Logic**: 12934- All-day events never conflict (no time set) 12935- Timed events check for overlap with other timed events 12936- Overlap = start1 < end2 AND start2 < end1 12937- Default duration is 60 minutes if no end_time 12938 12939**Recurring Events Fix**: 12940- Old: Updated `$event['start']` and `$event['end']` (wrong fields) 12941- New: Updates `$event['time']` and `$event['end_time']` (correct fields) 12942- Now edits actually save and update the events 12943 12944**Week View Bars**: 12945- Shows 4 colored bars instead of 3 12946- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc. 12947 12948## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE 12949 12950**Major Release**: Complete Matrix-themed calendar plugin with advanced features! 12951 12952### Major Features 12953 12954#### Sidebar Widget 12955- **Week Grid**: Interactive 7-day calendar with click-to-view events 12956- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips 12957- **Live Clock**: Updates every second with date display 12958- **Real-time Weather**: Geolocation-based temperature with icon 12959- **Event Sections**: Today (orange), Tomorrow (green), Important (purple) 12960- **Add Event Button**: Dark green bar opens full event creation dialog 12961- **Matrix Theme**: Green glow effects throughout 12962 12963#### Event Management 12964- **Single Color Bars**: Clean 3px bars showing event's assigned color 12965- **All-Day Events First**: Then sorted chronologically by time 12966- **Conflict Detection**: Orange ⚠ badge on overlapping events 12967- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//) 12968- **HTML Rendering**: Pre-rendered for JavaScript display 12969- **Click-to-View**: Click week grid days to expand event details 12970 12971#### Admin Interface 12972- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button 12973- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings 12974- **Manage Events Tab**: Browse, edit, delete, move events across namespaces 12975 12976#### Outlook Sync 12977- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook 12978- **Category Mapping**: Map colors to Outlook categories 12979- **Conflict Resolution**: Time conflict detection 12980- **Import/Export Config**: Encrypted configuration files 12981 12982### Design 12983- **Matrix Theme**: Authentic green glow aesthetic 12984- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections 12985- **Color Scheme**: 12986 - Today: Orange #ff9800 12987 - Tomorrow: Green #4caf50 12988 - Important: Purple #9b59b6 12989 - Add Event: Dark green #006400 12990 - System bars: Green/Purple/Orange 12991 12992### Technical Highlights 12993- **Zero-margin Design**: Perfect flush alignment throughout 12994- **Flexbox Layout**: Modern, responsive structure 12995- **AJAX Operations**: No page reloads needed 12996- **Smart Sorting**: All-day events first, then chronological 12997- **Tooltip System**: Detailed stats on hover (working correctly) 12998- **Event Dialog**: Full form with drag support 12999- **Cache Management**: One-click cache clearing 13000 13001### Breaking Changes from v3.x 13002- Removed dual color bars (now single event color bar only) 13003- Add Event button moved to between header and week grid 13004- All-day events now appear FIRST (not last) 13005- Update Plugin tab is now the default admin tab 13006 13007### Bug Fixes (v3.10.x → v4.0.0) 13008- ✅ Fixed color bars not showing (align-self:stretch vs height:100%) 13009- ✅ Fixed tooltip function naming (sanitized calId for JavaScript) 13010- ✅ Fixed weather display (added updateWeather function) 13011- ✅ Fixed HTML rendering in events (title_html/description_html fields) 13012- ✅ Fixed Add Event dialog (null check for calendar element) 13013- ✅ Fixed text positioning in Add Event button 13014- ✅ Fixed spacing throughout sidebar widget 13015 13016### Complete Feature List 13017- Full calendar view (month grid) 13018- Sidebar widget (week view) 13019- Event panel (standalone) 13020- Event list (date ranges) 13021- Namespace support 13022- Color coding 13023- Time conflict detection 13024- DokuWiki syntax in events 13025- Outlook synchronization 13026- System monitoring 13027- Weather display 13028- Live clock 13029- Admin interface 13030- Cache management 13031- Draggable dialogs 13032- AJAX save/edit/delete 13033- Import/export config 13034 13035### Usage 13036 13037**Sidebar Widget**: 13038``` 13039{{calendar sidebar}} 13040{{calendar sidebar namespace=team}} 13041``` 13042 13043**Full Calendar**: 13044``` 13045{{calendar}} 13046{{calendar year=2026 month=6 namespace=team}} 13047``` 13048 13049**Event Panel**: 13050``` 13051{{eventpanel}} 13052``` 13053 13054**Event List**: 13055``` 13056{{eventlist daterange=2026-01-01:2026-01-31}} 13057``` 13058 13059### Stats 13060- **40+ versions** developed during v3.x iterations 13061- **3.10.0 → 3.11.4**: Polish and refinement 13062- **4.0.0**: Production-ready Matrix Edition 13063 13064### Credits 13065Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration. 13066 13067--- 13068 13069## Previous Versions (v3.11.4 and earlier) 13070 13071## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING 13072- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px) 13073- **Improved:** Small breathing room between system stats bars and Add Event button 13074- **Visual:** Better spacing for cleaner appearance 13075 13076### CSS Change: 13077**eventlist-today-header**: 13078- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px` 13079 13080### Visual Result: 13081``` 13082│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats bars 13083│ │ ← 2px space (restored) 13084├───────────────────────┤ 13085│ + ADD EVENT │ ← Add Event bar 13086├───────────────────────┤ 13087``` 13088 13089**Before (v3.11.3)**: No space, bars directly touch Add Event button 13090**After (v3.11.4)**: 2px breathing room for better visual hierarchy 13091 13092## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION 13093- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset 13094- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error 13095- **Changed:** Add Event text moved up 1px (position:relative; top:-1px) 13096- **Changed:** Line-height reduced from 12px to 10px for better text centering 13097- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets 13098 13099### JavaScript Fix: 13100**Problem**: Line 1084-1085 in calendar-main.js 13101```javascript 13102const calendar = document.getElementById(calId); 13103const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error! 13104``` 13105 13106**Solution**: Added null check 13107```javascript 13108const calendar = document.getElementById(calId); 13109const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null; 13110``` 13111 13112**Why This Happened**: 13113- Regular calendar has element with id=calId 13114- Sidebar widget doesn't have this element (different structure) 13115- Code tried to read .dataset on null, causing error 13116 13117### Text Position Fix: 13118**Before**: 13119- line-height: 12px 13120- vertical-align: middle 13121- Text slightly low 13122 13123**After**: 13124- line-height: 10px 13125- position: relative; top: -1px 13126- Text perfectly centered 13127 13128### What Works Now: 13129✅ Click "+ ADD EVENT" in sidebar → Dialog opens 13130✅ No console errors 13131✅ Text properly centered vertically 13132✅ Form pre-filled with today's date 13133✅ Save works correctly 13134 13135## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR 13136- **Added:** Event dialog to sidebar widget (same as regular calendar) 13137- **Changed:** Add Event button now opens proper event form dialog 13138- **Added:** renderEventDialog() called in renderSidebarWidget() 13139- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date 13140- **Improved:** Can now add events directly from sidebar widget 13141 13142### Add Event Button Behavior: 13143**Before (v3.11.1)**: Showed alert with instructions 13144**After (v3.11.2)**: Opens full event creation dialog 13145 13146**Dialog Features**: 13147- Date field (defaults to today) 13148- Title field (required) 13149- Time field (optional) 13150- End time field (optional) 13151- Color picker 13152- Category field 13153- Description field 13154- Save and Cancel buttons 13155- Draggable dialog 13156 13157### Technical Changes: 13158- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget() 13159- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')` 13160- Dialog uses same structure as regular calendar 13161- Uses existing openAddEvent() and saveEventCompact() JavaScript functions 13162 13163### User Flow: 131641. User clicks "+ ADD EVENT" green bar 131652. Event dialog opens with today's date pre-filled 131663. User fills in event details 131674. User clicks Save 131685. Event saved via AJAX 131696. Dialog closes 131707. Sidebar refreshes to show new event 13171 13172## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG 13173- **Fixed:** Removed bottom padding from header (was 2px, now 0) 13174- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0) 13175- **Fixed:** Add Event bar now flush against header with zero gap 13176- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin 13177- **Improved:** Alert provides clear instructions on how to add events 13178 13179### CSS Changes: 13180**eventlist-today-header**: 13181- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom) 13182 13183**eventlist-stats-container**: 13184- `margin-top: 2px` → `margin: 0` (removed all margins) 13185 13186### Add Event Button Behavior: 13187**Before**: Clicked → Navigated to Admin → Manage Events tab 13188**After**: Clicked → Shows alert with instructions 13189 13190**Alert Message**: 13191``` 13192To add an event, go to: 13193Admin → Calendar Management → Manage Events tab 13194or use the full calendar view {{calendar}} 13195``` 13196 13197### Visual Result: 13198``` 13199│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats (no margin-bottom) 13200├────────────────────────┤ 13201│ + ADD EVENT │ ← Perfectly flush! 13202├────────────────────────┤ 13203``` 13204 13205No gaps, perfectly aligned! 13206 13207## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE 13208- **Moved:** Add Event bar back to original position (between header and week grid) 13209- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff) 13210- **Changed:** Letter spacing reduced from 0.5px to 0.4px 13211- **Fixed:** Text now fully visible without being cut off 13212- **Final:** Optimal position and size determined 13213 13214### Final Layout: 13215``` 13216┌─────────────────────────────┐ 13217│ Clock | Weather | Stats │ ← Header 13218├─────────────────────────────┤ 13219│ + ADD EVENT │ ← Bar (back here, smaller text) 13220├─────────────────────────────┤ 13221│ M T W T F S S │ ← Week Grid 13222│ 3 4 5 6 7 8 9 │ 13223├─────────────────────────────┤ 13224│ Today │ ← Event sections 13225└─────────────────────────────┘ 13226``` 13227 13228### Text Size Changes: 13229**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off 13230**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible 13231 13232### Why This Position: 13233- Separates header from calendar 13234- Natural action point after viewing stats 13235- Users see stats → decide to add event → view calendar 13236- Consistent with original design intent 13237 13238## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID 13239- **Moved:** Add Event bar repositioned from between header/grid to below week grid 13240- **Improved:** Better visual flow - header → stats → grid → add button → events 13241- **Changed:** Add Event bar now acts as separator between calendar and event sections 13242 13243### New Layout: 13244``` 13245┌─────────────────────────────┐ 13246│ Clock | Weather | Stats │ ← Header 13247├─────────────────────────────┤ 13248│ M T W T F S S │ ← Week Grid 13249│ 3 4 5 6 7 8 9 │ 13250├─────────────────────────────┤ 13251│ + ADD EVENT │ ← Add bar (moved here!) 13252├─────────────────────────────┤ 13253│ Today │ ← Event sections 13254│ Tomorrow │ 13255│ Important Events │ 13256└─────────────────────────────┘ 13257``` 13258 13259### Visual Flow: 13260**Before (v3.10.8)**: 132611. Header (clock, weather, stats) 132622. **+ ADD EVENT** bar 132633. Week grid 132644. Event sections 13265 13266**After (v3.10.9)**: 132671. Header (clock, weather, stats) 132682. Week grid (calendar days) 132693. **+ ADD EVENT** bar 132704. Event sections 13271 13272### Benefits: 13273- Natural reading flow: View calendar → Add event → See events 13274- Add button positioned between calendar and event list 13275- Acts as visual separator 13276- More logical action placement 13277 13278## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR 13279- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color 13280- **Changed:** Events now display with single 3px color bar (event's assigned color only) 13281- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly 13282- **Simplified:** Cleaner visual with one color bar instead of two 13283- **Improved:** More space for event content without extra bar 13284 13285### Visual Changes: 13286 13287**Before (v3.10.7)** - Dual color bars: 13288``` 13289├─ [Orange][Green] Event Title 13290├─ [Blue][Purple] Event Title 13291``` 13292 13293**After (v3.10.8)** - Single color bar: 13294``` 13295├─ [Green] Event Title ← Only event color! 13296├─ [Purple] Event Title ← Only event color! 13297``` 13298 13299### Add Bar Changes: 13300- Added `margin:0` to eliminate gaps 13301- Now flush against header (no space above) 13302- Now flush against week grid (no space below) 13303- Perfect seamless connection 13304 13305### Technical Changes: 13306**renderSidebarEvent()**: 13307- Removed section color bar (4px) 13308- Kept only event color bar (3px) 13309 13310**showDayEvents() JavaScript**: 13311- Removed section color bar (4px blue) 13312- Kept only event color bar (3px) 13313 13314**Add Event bar**: 13315- Added `margin:0` inline style 13316- Removed all top/bottom margins 13317 13318## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR 13319- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day) 13320- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%` 13321- **Changed:** Add Event bar color from orange to dark green (#006400) 13322- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off) 13323- **Changed:** Add Event bar text now bright green (#00ff00) with green glow 13324- **Changed:** Add Event bar font size increased from 7px to 9px 13325- **Changed:** Add Event bar letter spacing increased to 0.5px 13326- **Improved:** Hover effect on Add Event bar now darker green (#004d00) 13327 13328### Color Bar Fix Details: 13329**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars 13330**Solution**: Applied same fix as clicked day events: 13331- Changed parent div: `align-items:start` → `align-items:stretch` 13332- Added `min-height:20px` to parent 13333- Changed bars: `height:100%` → `align-self:stretch` 13334- Bars now properly fill vertical space in ALL sections 13335 13336### Add Event Bar Changes: 13337**Before**: 13338- Background: Orange (#ff9800) 13339- Text: Black (#000) 13340- Height: 6px (text cut off) 13341- Font: 7px 13342 13343**After**: 13344- Background: Dark green (#006400) 13345- Text: Bright green (#00ff00) with green glow 13346- Height: 12px (text fully visible) 13347- Font: 9px 13348- Hover: Darker green (#004d00) 13349- Matrix-themed green aesthetic 13350 13351## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE 13352- **Fixed:** Event color bars now display correctly in clicked day events 13353- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events 13354- **Added:** Conflict badge (⚠) appears on right side of conflicting events 13355- **Updated:** Complete README.md rewrite with full Matrix theme documentation 13356- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering) 13357- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px` 13358- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning 13359 13360### Color Bar Fix: 13361**Problem**: Bars had `height:100%` but parent had no explicit height 13362**Solution**: 13363- Changed to `align-self:stretch` on bars 13364- Parent uses `align-items:stretch` 13365- Added `min-height:20px` to parent 13366- Bars now properly fill vertical space 13367 13368### Sorting Change: 13369**Before**: Timed events first → All-day events last 13370**After**: All-day events FIRST → Timed events chronologically 13371 13372**Example**: 13373``` 13374Monday, Feb 5 13375├─ All Day - Project Deadline ← All-day first 13376├─ 8:00 AM - Morning Standup ← Earliest time 13377├─ 10:30 AM - Coffee with Bob 13378└─ 2:00 PM - Team Meeting ← Latest time 13379``` 13380 13381### Conflict Badge: 13382- Orange warning triangle (⚠) on right side 13383- 10px font size 13384- Only appears if `event.conflict` is true 13385- Title attribute shows "Time conflict detected" 13386- Small and unobtrusive 13387 13388### README Update: 13389- Complete rewrite with Matrix theme focus 13390- Full usage instructions for all features 13391- Admin interface documentation 13392- Outlook sync setup guide 13393- System monitoring details 13394- Troubleshooting section 13395- Color scheme reference 13396- File structure documentation 13397- Performance tips 13398- Security notes 13399- Quick start examples 13400 13401## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR 13402- **Added:** Events now sorted by time when clicking week grid days 13403- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px) 13404- **Improved:** Events with times appear first, sorted chronologically 13405- **Improved:** All-day events appear after timed events 13406- **Changed:** Add Event bar font size reduced to 7px (from 10px) 13407- **Changed:** Add Event bar now has 0 padding and fixed 6px height 13408 13409### Sorting Logic: 13410- Events with times sorted by time (earliest first) 13411- All-day events (no time) appear at the end 13412- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare 13413- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event 13414 13415### Add Event Bar Changes: 13416- **Height**: 6px (was ~12px with padding) 13417- **Padding**: 0 (was 4px top/bottom) 13418- **Font Size**: 7px (was 10px) 13419- **Letter Spacing**: 0.3px (was 0.5px) 13420- **Line Height**: 6px to match height 13421- **Vertical Align**: Middle for text centering 13422 13423## Version 3.10.4 (2026-02-06) - ADD EVENT BAR 13424- **Added:** Thin orange "Add Event" bar between header and week grid 13425- **Added:** Quick access to event creation from sidebar widget 13426- **Styled:** Sleek design with hover effects and glow 13427- **Interactive:** Clicks navigate to Manage Events tab in admin 13428- **Improved:** User workflow for adding events from sidebar 13429 13430### Visual Design: 13431- Orange background (#ff9800) matching Today section color 13432- 4px top/bottom padding for thin, sleek appearance 13433- Black text with white text-shadow for visibility 13434- Hover effect: Darkens to #ff7700 with enhanced glow 13435- Orange glow effect (box-shadow) matching Matrix theme 13436- Centered "+ ADD EVENT" text (10px, bold, letter-spacing) 13437 13438### Technical Changes: 13439- Added between header close and renderWeekGrid() call 13440- Inline onclick handler navigates to admin manage tab 13441- Inline onmouseover/onmouseout for hover effects 13442- Smooth 0.2s transition on all style changes 13443 13444## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION 13445- **Changed:** Update Plugin tab is now the default tab when opening admin 13446- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab 13447- **Improved:** Clear Cache button now larger and more prominent with helpful description 13448- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events 13449- **Removed:** Debug console.log statements from day event display 13450- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab 13451 13452### UI Changes: 13453- Update Plugin tab opens by default (was Config/Outlook Sync tab) 13454- Clear Cache button prominently displayed at top of Update Plugin tab 13455- Orange ️ button (10px 20px padding) with confirmation dialog 13456- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin" 13457- Success/error messages display on Update Plugin tab after cache clear 13458- Tab navigation reordered to put Update first 13459 13460### Technical Changes: 13461- Default tab changed from 'config' to 'update' in html() method 13462- Tab navigation HTML reordered to show Update Plugin tab first 13463- clearCache() method now redirects with 'update' tab parameter 13464- Removed Clear Cache button from renderConfigTab() 13465- Added Clear Cache button to renderUpdateTab() with message display 13466 13467## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX 13468- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days 13469- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML 13470- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields 13471- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events 13472 13473### Technical Changes: 13474- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render() 13475- Events added to weekEvents now include pre-rendered HTML versions 13476- title_html and description_html fields populated before json_encode() 13477- JavaScript now receives properly formatted HTML content 13478 13479## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON 13480- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123) 13481- **Fixed:** HTML event handlers now call correctly sanitized function names 13482- **Fixed:** Weather temperature now updates correctly in sidebar widget 13483- **Added:** Weather update function to sidebar widget JavaScript 13484- **Added:** "Clear Cache" button in admin panel for easy cache refresh 13485- **Added:** Default weather location set to Irvine, CA when geolocation unavailable 13486- **Improved:** All tooltip functions now work correctly on system status bars 13487 13488### Technical Changes: 13489- Changed tooltip function names to use $jsCalId instead of $calId 13490- Changed HTML onmouseover/onmouseout to use $jsCalId 13491- Added updateWeather() function to sidebar widget 13492- Added getWeatherIcon() function to sidebar widget 13493- Added clearCache() method in admin.php 13494- Added recursiveDelete() helper method in admin.php 13495- Admin UI now has ️ Clear Cache button alongside Export/Import 13496 13497## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES 13498- **Fixed:** JavaScript syntax error "Missing initializer in const declaration" 13499- **Fixed:** Event links and formatting not displaying in clicked day events 13500- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores 13501- **Changed:** Event titles now use `title_html` field to preserve HTML formatting 13502- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting 13503- **Improved:** All JavaScript variable names now use valid syntax 13504- **Improved:** Links, bold, italic, and other HTML formatting preserved in events 13505 13506### Technical Changes: 13507- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);` 13508- JavaScript variables now use underscores instead of dashes 13509- Event HTML rendering preserves DokuWiki formatting 13510- Fixed "showTooltip_sidebar is not defined" errors 13511- Fixed "showDayEvents_cal is not defined" errors 13512 13513## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX 13514- **Fixed:** Critical JavaScript loading order issue causing ReferenceError 13515- **Fixed:** Functions now defined BEFORE HTML that uses them 13516- **Changed:** Consolidated all JavaScript into single comprehensive script block 13517- **Removed:** ~290 lines of duplicate JavaScript code 13518- **Added:** Shared state management with `sharedState_[calId]` object 13519- **Improved:** System tooltip functions now work correctly 13520- **Improved:** Week grid click events now work correctly 13521 13522### Technical Changes: 13523- Moved all JavaScript to beginning of widget (before HTML) 13524- Removed duplicate script blocks 13525- Unified tooltip and stats functions 13526- Shared latestStats and cpuHistory state 13527- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined" 13528 13529## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS 13530- **Added:** Dual color bars on events (section color + event color) 13531- **Added:** Click week grid days to view events (replaced hover tooltips) 13532- **Added:** Expandable section below week grid for selected day events 13533- **Added:** Blue theme for selected day section 13534- **Changed:** Week grid days now clickable instead of tooltips 13535- **Changed:** Section bar: 4px wide (left) 13536- **Changed:** Event bar: 3px wide (right) 13537- **Increased:** Gap between color bars from 3px to 6px 13538- **Improved:** Click is more reliable and mobile-friendly than hover tooltips 13539 13540### Visual Changes: 13541- Each event shows TWO color bars side-by-side 13542- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue) 13543- Right bar (3px): Individual event's assigned color 13544- Click any day in week grid to expand event list 13545- X button to close selected day events 13546 13547## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY 13548- **Increased:** Event color bar width from 2px to 3px 13549- **Increased:** Gap between section and event bars from 3px to 6px 13550- **Improved:** Event color bars now more visible alongside section bars 13551- **Note:** Dual color bar system already in place from v3.9.6 13552 13553## Version 3.9.6 (2026-02-05) - UI REFINEMENTS 13554- **Changed:** Date in Important Events moved below event name (was above) 13555- **Changed:** Section headers now 9px font size (was 10px) 13556- **Changed:** Section headers now normal case (was ALL CAPS) 13557- **Changed:** Letter spacing reduced from 0.8px to 0.3px 13558- **Improved:** More natural reading flow with date below event name 13559- **Improved:** Cleaner, more subtle section headers 13560 13561### Header Changes: 13562- "TODAY" → "Today" 13563- "TOMORROW" → "Tomorrow" 13564- "IMPORTANT EVENTS" → "Important Events" 13565 13566## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN 13567- **Redesigned:** Complete overhaul of `sidebar` parameter 13568- **Added:** Compact week-at-a-glance itinerary view (200px wide) 13569- **Added:** Live clock widget at top of sidebar 13570- **Added:** 7-cell week grid showing event bars 13571- **Added:** Today section with orange header and left border 13572- **Added:** Tomorrow section with green header and left border 13573- **Added:** Important Events section with purple header and left border 13574- **Added:** Admin setting to configure important namespaces 13575- **Added:** Time conflict badges in sidebar events 13576- **Added:** Task checkboxes in sidebar events 13577- **Changed:** Sidebar now optimized for narrow spaces (200px) 13578- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets 13579 13580### New Features: 13581- Clock updates every second showing current time 13582- Week grid shows Mon-Sun with colored event bars 13583- Today/Tomorrow sections show full event details 13584- Important events highlighted in purple (configurable namespaces) 13585- All badges (conflict, time, etc.) shown in compact format 13586- Automatic time conflict detection 13587 13588## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP 13589- **Removed:** 16 unused/debug/backup files 13590- **Removed:** 69 console.log() debug statements 13591- **Removed:** 3 orphaned object literals from console.log removal 13592- **Removed:** Temporary comments and markers 13593- **Fixed:** JavaScript syntax errors from cleanup 13594- **Improved:** Code quality and maintainability 13595- **Improved:** Reduced plugin size by removing unnecessary files 13596- **Status:** Production-ready, fully cleaned codebase 13597 13598### Files Removed: 13599- style.css.backup, script.js.backup 13600- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php 13601- debug_events.php, debug_html.php, cleanup_events.php 13602- fix_corrupted_json.php, fix_wildcard_namespaces.php 13603- find_outlook_duplicates.php, update_namespace.php 13604- validate_calendar_json.php, admin.js 13605- test_date_field.html 13606 13607## Version 3.7.5 (2026-02-05) 13608- **Fixed:** PHP syntax error (duplicate foreach loop removed) 13609- **Fixed:** Time variable handling in grace period logic 13610 13611## Version 3.7.4 (2026-02-05) 13612- **Added:** 15-minute grace period for timed events 13613- **Changed:** Events with times now stay visible for 15 minutes after their start time 13614- **Changed:** Prevents events from immediately disappearing when they start 13615- **Improved:** Better user experience for ongoing events 13616- **Fixed:** Events from earlier today now properly handled with grace period 13617 13618## Version 3.7.3 (2026-02-05) 13619- **Changed:** Complete redesign of cleanup section for compact, sleek layout 13620- **Changed:** Radio buttons now in single row at top 13621- **Changed:** All options visible with grayed-out inactive states (opacity 0.4) 13622- **Changed:** Inline controls - no more grid layout or wrapper boxes 13623- **Changed:** Namespace filter now compact single-line input 13624- **Changed:** Smaller buttons and tighter spacing throughout 13625- **Improved:** More professional, space-efficient design 13626 13627## Version 3.7.2 (2026-02-04) 13628- **Fixed:** Strange boxes under cleanup options - now properly hidden 13629- **Changed:** Unified color scheme across all admin sections 13630- **Changed:** Green (#00cc07) - Primary actions and main theme 13631- **Changed:** Orange (#ff9800) - Warnings and cleanup features 13632- **Changed:** Purple (#7b1fa2) - Secondary actions and accents 13633- **Improved:** Consistent visual design throughout admin interface 13634 13635## Version 3.7.1 (2026-02-04) 13636- **Fixed:** Cleanup section background changed from orange to white 13637- **Fixed:** Event cleanup now properly scans all calendar directories 13638- **Added:** Debug info display when preview finds no events 13639- **Improved:** Better directory scanning logic matching other features 13640 13641## Version 3.7.0 (2026-02-04) 13642- **Added:** Event cleanup feature in Events Manager 13643- **Added:** Delete old events by age (months/years old) 13644- **Added:** Delete events by status (completed tasks, past events) 13645- **Added:** Delete events by date range 13646- **Added:** Namespace filter for targeted cleanup 13647- **Added:** Preview function to see what will be deleted 13648- **Added:** Automatic backup creation before cleanup 13649- **Changed:** Reduced changelog viewer height to 100px (was 400px) 13650 13651## Version 3.6.3 (2026-02-04) 13652- **Fixed:** Conflict tooltips now work properly after navigating between months 13653- **Added:** Changelog display in Update Plugin tab 13654- **Added:** CHANGELOG.md file with version history 13655- **Improved:** Changelog shows last 10 versions with color-coded change types 13656- **Fixed:** Removed debug console.log statements 13657 13658## Version 3.6.2 (2026-02-04) 13659- **Fixed:** Month title now updates correctly when navigating between months 13660- **Changed:** All eventpanel header elements reduced by 10% for more compact design 13661- **Changed:** Reduced header height from 78px to 70px 13662 13663## Version 3.6.1 (2026-02-04) 13664- **Changed:** Complete redesign of eventpanel header with practical two-row layout 13665- **Fixed:** Improved layout for narrow widths (~500px) 13666- **Changed:** Simplified color scheme (removed purple gradient) 13667 13668## Version 3.6.0 (2026-02-04) 13669- **Changed:** Redesigned eventpanel header with gradient background 13670- **Changed:** Consolidated multiple header rows into compact single-row design 13671 13672## Version 3.5.1 (2026-02-04) 13673- **Changed:** Moved event search bar into header row next to + Add button 13674- **Improved:** More compact UI with search integrated into header 13675 13676## Version 3.5.0 (2026-02-04) 13677- **Added:** Event search functionality in sidebar and eventpanel 13678- **Added:** Real-time filtering as you type 13679- **Added:** Clear button (✕) appears when searching 13680- **Added:** "No results" message when search returns nothing 13681 13682## Version 3.4.7 (2026-02-04) 13683- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding) 13684- **Fixed:** Removed debug logging from console 13685- **Changed:** Updated export version number to match plugin version 13686 13687## Version 3.4.6 (2026-02-04) 13688- **Added:** Debug logging to diagnose conflict detection issues 13689- **Development:** Extensive console logging for troubleshooting 13690 13691## Version 3.4.5 (2026-02-04) 13692- **Added:** Debug logging to showDayPopup and conflict detection 13693- **Development:** Added logging to trace conflict detection flow 13694 13695## Version 3.4.4 (2026-02-04) 13696- **Fixed:** Conflict detection now persists across page refreshes (PHP-based) 13697- **Fixed:** Conflict tooltips now appear on hover 13698- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation) 13699- **Added:** Conflict badges in both future and past events sections 13700 13701## Version 3.4.3 (2026-02-04) 13702- **Added:** Custom styled conflict tooltips with hover functionality 13703- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2) 13704- **Improved:** Beautiful tooltip design with orange header and clean formatting 13705 13706## Version 3.4.2 (2026-02-04) 13707- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3) 13708 13709## Version 3.4.1 (2026-02-04) 13710- **Fixed:** End time field now properly saves to database 13711- **Fixed:** End time dropdown now filters to show only valid times after start time 13712- **Added:** Smart dropdown behavior - expands on focus, filters invalid options 13713- **Improved:** End time auto-suggests +1 hour when start time selected 13714 13715## Version 3.4.0 (2026-02-04) 13716- **Added:** End time support for events (start and end times) 13717- **Added:** Automatic time conflict detection 13718- **Added:** Conflict warning badges (⚠️) on events with overlapping times 13719- **Added:** Conflict tooltips showing which events conflict 13720- **Added:** Visual conflict indicators with pulse animation 13721- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM") 13722 13723## Version 3.3.77 (2026-02-04) 13724- **Fixed:** Namespace badge onclick handlers restored after clearing filter 13725- **Fixed:** Namespace filtering works infinitely (filter → clear → filter) 13726 13727## Version 3.3.76 (2026-02-04) 13728- **Fixed:** Namespace badges now clickable after clearing namespace filter 13729 13730## Version 3.3.75 (2026-02-04) 13731- **Fixed:** Form resubmission warnings eliminated 13732- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303 13733- **Changed:** All admin redirects now use absolute URLs 13734 13735## Version 3.3.74 (2026-02-04) 13736- **Fixed:** Clearing namespace filter now restores original namespace instead of default 13737- **Added:** data-original-namespace attribute to preserve initial namespace setting 13738- **Improved:** Console logging for namespace filter debugging 13739 13740## Version 3.3.73 (2026-02-03) 13741- **Added:** Dynamic namespace filtering banner with clear button 13742- **Fixed:** JavaScript function accessibility issues 13743- **Fixed:** Namespace badge click handlers in event lists 13744- **Improved:** Persistent namespace filtering across views 13745 13746## Earlier Versions 13747See previous transcripts for complete history through v3.3.73, including: 13748- Recurring events with Outlook sync 13749- Multi-namespace support 13750- Event categories and mapping 13751- Backup/restore functionality 13752- System statistics bar 13753- Namespace selector with fuzzy search 13754- Events Manager with import/export 13755- And much more... 13756