1# Calendar Plugin Changelog 2 3## Version 6.14.2 (2026-02-15) - SYSTEM LOAD TOGGLE 4 5### Added System Load Bars Toggle 6- New toggle in **Admin > Calendar > Themes** tab 7- Choose to show or hide CPU/Memory load indicator bars 8- Setting applies to both event panel and sidebar widget 9- Stored in `data/meta/calendar_show_system_load.txt` 10- JavaScript polling is also disabled when hidden (saves resources) 11 12## Version 6.14.1 (2026-02-14) - SECURITY FIX 13 14### Security Improvements 15- **Authentication required** - Write actions (save, delete, toggle) now require user to be logged in 16- **Improved CSRF token handling** - New `getSecurityToken()` helper function checks multiple sources: 17 - `JSINFO.sectok` (standard) 18 - `window.JSINFO.sectok` 19 - Hidden form field `input[name="sectok"]` 20 - Meta tag `meta[name="sectok"]` 21- Anonymous users can no longer add/edit/delete events 22- Better error messages for authentication and token failures 23 24### Bug Fixes 25- Fixed "Invalid security token" error on clean DokuWiki installations 26- Added debug logging for security token failures 27 28## Version 6.14.0 (2026-02-14) - STABLE RELEASE 29 30### Code Cleanup & Localization 31- Added localization for all static calendar strings (EN/DE) 32- New lang keys: `previous_month`, `next_month`, `print_calendar`, `no_events_scheduled`, `calendar_label`, `details` 33- Code review and cleanup completed 34- Updated README.md and plugin documentation 35 36### Static Calendar Features (v6.13.x consolidated) 37- Read-only presentation mode: `{{calendar static}}` 38- Custom titles: `title="My Events"` 39- Month locking: `month=2` disables navigation 40- Print button with clean itinerary output 41- All themes supported: matrix, pink, purple, professional, wiki, dark, light 42- `noprint` option to hide print functionality 43- Formatted descriptions in tooltips and itinerary 44 45### Other Improvements in 6.13.x 46- Admin menu icon (SVG) 47- Config import fix for `return array()` syntax 48- Mobile touch button fixes 49- Important events in day popup with star icons 50- Time picker grouped by period 51- Multi-day event time validation 52 53## Version 6.13.13 (2026-02-14) - PRINT BUTTON CENTERING 54 55### Fixed Print Button Icon Alignment 56- Added `display: flex`, `align-items: center`, `justify-content: center` 57- Added `padding: 0` and `line-height: 1` 58- Icon now properly centered in circle 59 60## Version 6.13.12 (2026-02-14) - SIMPLE TOOLTIP 61 62### Simplified Hover Tooltip 63- Removed custom JS tooltip (was causing triple popups) 64- Uses native browser `title` attribute only 65- Plain text with formatting converted: `**bold**` → `*bold*`, `//italic//` → `_italic_` 66- Links shown as: `text (url)` 67- Added emoji before time for visual clarity 68- Itinerary still shows full HTML formatting 69 70## Version 6.13.11 (2026-02-14) - FORMATTED DESCRIPTIONS 71 72### Rich Text Formatting in Static Calendar 73- **Hover tooltips** now show formatted text (bold, italic, links, line breaks) 74- **Itinerary descriptions** display with full formatting 75- Uses existing `renderDescription()` function for consistency 76- Supports: `**bold**`, `//italic//`, `[[links]]`, `[markdown](links)`, line breaks 77 78### Technical Details 79- Added `data-tooltip` attribute with rich HTML content 80- New JavaScript tooltip handler with smart positioning 81- CSS styles for `.static-tooltip` and itinerary formatting 82- Tooltips stay within viewport bounds 83 84## Version 6.13.10 (2026-02-14) - PRINT MARGINS FIX v3 85 86### Fixed Print Margins - Inline Styles Approach 87- Removed reliance on `@page` CSS (browser support inconsistent) 88- Uses inline style `padding: 50px 60px` directly on wrapper div 89- Simplified CSS for better browser compatibility 90- Smaller table font (12px) for better fit 91- Set `max-width: 800px` on content wrapper 92 93## Version 6.13.9 (2026-02-14) - PRINT MARGINS FIX v2 94 95### Fixed Print Margins 96- Added `.print-wrapper` div with 0.5in padding/margin 97- Uses both `@page` margin AND wrapper margins for compatibility 98- Set `@page { margin: 1in 0.75in }` (top/bottom 1in, sides 0.75in) 99- Wrapper has `max-width: 7.5in` to fit standard letter size 100- Smaller fonts (0.85em) to fit more content 101- Added 250ms delay before print to ensure styles load 102 103## Version 6.13.8 (2026-02-14) - PRINT MARGINS FIX 104 105### Improved Print Layout 106- Added `@page { margin: 0.75in }` for proper print margins 107- Increased body padding to 40px for screen preview 108- Smaller font sizes to fit better on page 109- Description column limited width with word-wrap 110- Table header repeats on each page (`display: table-header-group`) 111- Rows avoid page breaks in middle (`page-break-inside: avoid`) 112- Print color adjust enabled for backgrounds 113 114## Version 6.13.7 (2026-02-14) - ALL THEMES FOR STATIC CALENDAR 115 116### Added All Theme Options 117Now all themes work with static calendar: 118 119| Theme | Description | 120|-------|-------------| 121| `matrix` | Green on dark (default Matrix style) | 122| `pink` | Pink/magenta on dark | 123| `purple` | Purple/violet on dark | 124| `professional` | Blue on white (business style) | 125| `wiki` | Neutral gray (matches DokuWiki) | 126| `dark` | Blue on dark gray | 127| `light` | Clean white/gray | 128 129### Examples 130``` 131{{calendar theme=matrix static}} 132{{calendar theme=purple static}} 133{{calendar theme=professional static}} 134{{calendar theme=wiki static}} 135``` 136 137## Version 6.13.6 (2026-02-14) - QUOTED PARAMETER FIX 138 139### Fixed Quoted Parameter Parsing 140- Titles with spaces now work: `title="Feb 26 Expense Log"` 141- Uses regex to properly parse: `key="value with spaces"` 142- Supports both double and single quotes 143- Example: `{{calendar title="My Custom Title" static}}` 144 145## Version 6.13.5 (2026-02-14) - STATIC CALENDAR OPTIONS 146 147### New Static Calendar Options 148 149| Option | Description | Example | 150|--------|-------------|---------| 151| `title=X` | Custom title instead of month name | `title="Club Meetings"` | 152| `noprint` | Hide print button and print view | `{{calendar static noprint}}` | 153| `theme=X` | Apply specific theme (matrix, pink, dark, light) | `theme=matrix` | 154 155### Fixed Month/Year Lock 156- When you specify `month=X` or `year=X`, navigation is now disabled 157- `{{calendar month=2 static}}` shows only February with no nav arrows 158- `{{calendar year=2025 month=12 static}}` locks to December 2025 159 160### Examples 161``` 162{{calendar static}} // Navigable, current month 163{{calendar month=2 static}} // Locked to February 164{{calendar title="Team Events" static}} // Custom title 165{{calendar theme=matrix static}} // Matrix theme 166{{calendar namespace=club static noprint}} // No print button 167{{calendar month=3 title="March Meetings" theme=pink static}} 168``` 169 170## Version 6.13.4 (2026-02-14) - DEDICATED PRINT BUTTON 171 172### Added Print Button to Static Calendar 173- New ️ print button in the calendar header 174- Opens a clean popup window with ONLY the itinerary content 175- Automatically triggers print dialog 176- Window closes after printing 177- No DokuWiki headers/footers/sidebars - just the calendar 178 179### How It Works 180- Extracts the print view HTML 181- Creates a new window with minimal styling 182- Calls `window.print()` automatically 183- Clean single-page output 184 185## Version 6.13.3 (2026-02-14) - PRINT BLANK PAGES FIX 186 187### Fixed Blank Pages When Printing 188- Aggressively hide ALL screen view elements and children in print 189- Reset height/width to 0 with !important on grid, cells, events 190- Ensure print view elements have proper display table properties 191- Force all hidden elements to position:absolute off-screen 192 193## Version 6.13.2 (2026-02-14) - STATIC CALENDAR RESPONSIVE FIX 194 195### Improved Static Calendar Layout 196- Changed from `max-width: 900px` to `width: 100%` for full container fit 197- Added `table-layout: fixed` for consistent column widths 198- Added `overflow-x: auto` for horizontal scroll on very small screens 199- Reduced header padding and font sizes for better fit 200- Improved responsive breakpoints for mobile (768px and 480px) 201- Hide time on very small screens to save space 202- Better touch targets for navigation buttons 203 204## Version 6.13.1 (2026-02-14) - STATIC CALENDAR FIX 205 206### Bug Fix 207- Added missing `getImportantNamespaces()` helper method 208- Fixed `loadEventsForMonth` → use existing `loadEvents` method 209- Added multi-namespace/wildcard support to static calendar 210 211## Version 6.13.0 (2026-02-14) - STATIC CALENDAR MODE 212 213### New Static/Presentation Mode 214Read-only calendar view for public display and printing. 215 216**Usage:** 217``` 218{{calendar static}} 219{{calendar namespace=meetings static}} 220``` 221 222**Screen View Features:** 223- Clean calendar grid without edit/delete buttons 224- Month navigation (prev/next arrows) 225- Hover tooltips showing full event details (title, time, description) 226- Important events highlighted with ⭐ and golden background 227- Today's date highlighted 228- Responsive design for mobile 229 230**Print View Features:** 231- Automatically switches to itinerary format when printing 232- Table layout: Date | Time | Event | Details 233- Important events marked with ⭐ 234- Dates grouped (date only shown once per day) 235- Page break handling for long lists 236- Clean black & white friendly output 237 238**Files Changed:** 239- `syntax.php`: Added `renderStaticCalendar()` method 240- `action.php`: Added `getStaticCalendar()` AJAX handler 241- `calendar-main.js`: Added `navStaticCalendar()` function 242- `style.css`: Added static calendar styles + print media queries 243 244## Version 6.12.7 (2026-02-14) - ADMIN MENU ICON 245 246### Added Admin Menu Icon 247- New monochrome SVG calendar icon for DokuWiki admin menu 248- Icon shows calendar with binding rings, header, and date dots 249- Matches DokuWiki's admin interface style 250- Added `getMenuIcon()` method to admin.php 251- Icon file: `images/icon.svg` 252 253## Version 6.12.6 (2026-02-14) - CONFIG IMPORT FIX 254 255### Fixed Config Import Validation 256- Now accepts both `return [` and `return array(` syntax 257- Regex updated from `/return\s*\[/` to `/return\s*(\[|array\s*\()/` 258- Older PHP config files using `return array(...)` now import correctly 259 260## Version 6.12.5 (2026-02-14) - MOBILE BUTTON FIX 261 262### Fixed Delete/Edit Buttons on Mobile 263- Added `type="button"` attribute to prevent form submission issues 264- Added `touchend` event delegation for reliable mobile touch handling 265- Increased button touch targets (32px default, 40px on mobile) 266- Added `touch-action: manipulation` to prevent touch delays 267- Added `-webkit-tap-highlight-color` for visual feedback 268 269### Technical Details 270- Mobile browsers sometimes don't fire `onclick` reliably 271- New `touchend` handler calls `btn.click()` explicitly 272- Larger touch targets meet accessibility guidelines (44px recommended) 273 274## Version 6.12.4 (2026-02-14) - STAR INLINE FIX 275 276### Fixed Star Position in Day Popup 277- Star icon now displays inline with event title (left side) 278- Changed `.popup-event-title` from `flex: 1 1 100%` to `flex: 1 1 auto` 279- Star and title stay on same line instead of star being above 280 281## Version 6.12.3 (2026-02-14) - DAY POPUP IMPORTANT EVENTS 282 283### Important Event Highlighting in Day Popup 284- Events from important namespaces now show ⭐ star icon 285- Golden gradient background highlight for important events 286- Golden border glow effect matching other views 287- Consistent styling across calendar grid, sidebar, and day popup 288 289### Technical Details 290- Added `importantNamespaces` check to `showDayPopup()` function 291- Added `.popup-event-important` and `.popup-event-star` CSS classes 292- Reads important namespaces from `container.dataset.importantNamespaces` 293 294## Version 6.12.2 (2026-02-14) - MULTI-DAY EVENT TIME FIX 295 296### Multi-Day Event End Time 297- End time now allows all times when end date differs from start date 298- Example: Event from 9:00 PM on Feb 28 to 5:00 AM on Feb 29 now works correctly 299- Same-day events still enforce end time > start time 300- Changing end date now triggers time validation update 301 302### Technical Details 303- `updateEndTimeOptions()` checks if `endDate !== startDate` 304- If multi-day, all time options are enabled 305- Added `onchange` handler to both start date and end date fields 306 307## Version 6.12.1 (2026-02-14) - TIME PICKER & EDIT DIALOG FIX 308 309### Improved Time Picker 310- Grouped time options by period (Morning, Afternoon, Evening, Night) 311- Much easier to navigate - no more scrolling through 96 options 312- End time options before start time are now hidden/disabled 313- Invalid end times automatically corrected when start time changes 314 315### Fixed Edit Event Dialog Draggability 316- Edit dialog is now properly draggable (was broken due to async AJAX) 317- Moved `makeDialogDraggable()` call inside the AJAX success callback 318- Removed redundant wrapper patch that didn't work with async code 319 320### Technical Details 321- Time picker uses `<optgroup>` for visual grouping 322- End time validation hides invalid options (not just disables) 323- Both Add and Edit dialogs now call `makeDialogDraggable()` directly 324 325## Version 6.12.0 (2026-02-14) - EVENT EDITOR DIALOG IMPROVEMENTS 326 327### Fixed Event Editor Dialog Draggability 328- Fixed duplicate event listener accumulation that caused performance degradation 329- Each time dialog opened, new drag listeners were added without removing old ones 330- Now properly cleans up old listeners before adding new ones 331- Added `cursor: grabbing` feedback while dragging 332- Dialog position resets when reopened (no more stuck positions) 333- Excluded close button from triggering drag 334 335### Optimized Time Selection Performance 336- Simplified `updateEndTimeOptions()` to be much faster 337- Removed expensive loop through 96 options checking style.display 338- Now just validates current selection and sets new value if invalid 339- Should eliminate freezing/lag when selecting start time 340 341### Technical Details 342- Added `_dragCleanup` function stored on handle element 343- Cleanup called before re-initialization 344- Removed unnecessary `setTranslate` helper function 345 346## Version 6.11.4 (2026-02-13) - JAVASCRIPT LOCALIZATION 347 348### JavaScript Frontend Localization 349- Added `getCalendarLang()` helper function 350- Added `getJsLangStrings()` PHP method 351- Embedded JSON language data in all render functions 352- Localized month names (full + short) 353- Localized dialog titles, confirmations, badges, empty states 354 355## Version 6.11.3 (2026-02-13) - SIDEBAR WIDGET LOCALIZATION 356 357### Sidebar Widget 358- Fixed `\n` in single-quoted strings → double-quoted for proper newlines 359- Localized "Runs every X minutes" cron descriptions 360- Event dialog labels, placeholders, options 361- Day names, ordinal positions, color names 362- Today/Tomorrow/Important section headers 363 364## Version 6.11.2 (2026-02-13) - ADMIN BACKEND LOCALIZATION 365 366### Admin Backend 367- Localized ~220 hardcoded strings in admin.php 368- AJAX JSON responses, redirect messages, error messages 369- Pattern names (Daily, Weekly, Monthly, etc.) 370 371## Version 6.11.1 (2026-02-13) - CONFIG IMPORT BUG FIX 372 373### Bug Fix 374- Fixed regex to accept both `return [` and `return array(` syntax 375- File: `admin.php` lines 5947, 6001 376 377## Version 6.10.6 (2026-02-13) - MANAGE RECURRING DIALOG LOCALIZATION 378 379### Localized Manage Recurring Series Dialog 380Complete translation of the "Manage" button dialog for recurring events: 381 382**Section Headers:** 383- "Manage Recurring Series" → "Wiederkehrende Serie verwalten" 384- "Extend Series" → "Serie erweitern" 385- "Trim Past Events" → "Vergangene Termine kürzen" 386- "Change Pattern" → "Muster ändern" 387- "Change Start Date" → "Startdatum ändern" 388- "Pause Series" / "Resume Series" → "Serie pausieren" / "Serie fortsetzen" 389 390**Labels & Buttons:** 391- All field labels (Add occurrences, Days apart, Remove before, New interval, etc.) 392- Action buttons (Extend, Trim, Change, Shift, Pause, Resume, Close) 393- Interval dropdown options (Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly) 394- Help text and notes 395 396**Confirmation Dialogs:** 397- Trim confirmation with date 398- Respace confirmation 399- Shift confirmation 400 401### Added 60+ Language Strings for Dialogs 402Complete vocabulary for recurring event management in both English and German. 403 404### Note on Browser Validation Messages 405"Please fill out this field" is a browser-native message controlled by the browser's language setting, not our plugin. 406 407## Version 6.10.5 (2026-02-13) - DIALOG LOCALIZATION 408 409### Localized All JavaScript Dialogs 410 411**New Namespace Dialog:** 412- Prompt text with examples now in German 413- Invalid namespace error message 414 415**Rename Namespace Dialog:** 416- Prompt text with current name 417 418**Delete Confirmations:** 419- Delete selected events confirmation 420- Delete namespace confirmation 421- Delete recurring series confirmation 422 423**Trim Recurring Events:** 424- "Counting..." / "Zähle..." 425- "Trimming..." / "Kürze..." 426- "No past recurring events found" message 427- "Found X past recurring events" confirmation 428- Button text resets 429 430### Added 15+ New Dialog Strings 431Both English and German translations for all interactive prompts and confirmations. 432 433## Version 6.10.4 (2026-02-13) - COMPLETE MANAGE TAB LOCALIZATION 434 435### Fixed Remaining English Strings 436 437**Namespace Explorer Control Bar:** 438- "➡️ Move" → "➡️ Verschieben" 439- "➕ New Namespace" → "➕ Neuer Namensraum" 440- " Cleanup" → " Bereinigen" 441- "0 selected" → "0 ausgewählt" 442- "%d selected" → "%d ausgewählt" 443 444**Recurring Events Button Tooltips:** 445- "Edit title, time, namespace, pattern" → "Titel, Zeit, Namensraum, Muster bearbeiten" 446- "Extend, trim, pause, change dates" → "Erweitern, kürzen, pausieren, Daten ändern" 447- "Delete all occurrences" → "Alle Vorkommen löschen" 448 449**JavaScript Confirmation Messages:** 450- "No events selected" → "Keine Termine ausgewählt" 451- Delete confirmation with count 452- Delete namespace confirmation 453- "Scanning..." → "Scanne..." 454- "Cleaning..." → "Bereinige..." 455- "No empty namespaces found" message 456- "Found X item(s) to clean up" → "X Element(e) zum Bereinigen gefunden" 457- "Proceed with cleanup?" → "Mit Bereinigung fortfahren?" 458 459### Technical 460- Added adminLang JavaScript object with all translatable strings 461- All dynamic JavaScript messages now use language system 462 463## Version 6.10.3 (2026-02-13) - RECURRING EVENTS & DROP TARGET LOCALIZATION 464 465### Additional Localization for Manage Events Tab 466 467**Recurring Events Table:** 468- Search placeholder: "Wiederkehrende Termine suchen..." 469- Table headers: Titel, Namensraum, Muster, Zeitraum, Anzahl, Quelle, Aktionen 470- Source labels: Markiert / Erkannt (was Flagged / Detected) 471- Action buttons: Bearb. / Verwalten / Lö. (was Edit / Manage / Del) 472- Pattern badges: Täglich, Wöchentlich, Monatlich, Jährlich, Benutzerdefiniert 473- Footer: "Gesamt: X Serien" (was "Total: X series") 474- No results message 475 476**Namespace Explorer Drop Zones:** 477- Header: " Zielbereich" (was "Drop Target") 478- Drop hint: "Hier ablegen" (was "Drop here") 479- Default namespace label consistent 480 481### Added 25+ New Language Strings 482- Recurring table columns and labels 483- Pattern translations 484- Action button labels 485- Drop zone labels 486 487## Version 6.10.2 (2026-02-13) - MANAGE EVENTS TAB LOCALIZATION 488 489### Localized: Manage Events Tab (Complete) 490All text in the Manage Events admin tab now uses the language system: 491 492**Events Manager Section:** 493- Page title, section header, description 494- Statistics labels (Total Events, Namespaces, JSON Files, Recurring) 495- "Last scanned" timestamp label 496- Button labels (Re-scan Events, Export All Events, Import Events) 497- "View Breakdown by Namespace" expandable section 498- Table headers (Namespace, Events, Files) 499 500**Important Namespaces Section:** 501- Section header and description 502- Visual Effects descriptions (Calendar Grid, Event Sidebar, Sidebar Widget, Day Popup) 503- Save button and hint text 504 505**Cleanup Old Events Section:** 506- Section header and description 507- Radio button labels (By Age, By Status, By Date Range) 508- Age options (Delete events older than, months, years) 509- Status options (Completed tasks, Past events) 510- Date range labels (From, To) 511- Namespace filter label and placeholder 512- Preview and Delete button labels 513- JavaScript confirmation messages 514- Loading/error states 515 516**Recurring Events Section:** 517- Section header 518- Button labels (Trim All Past, Rescan) 519 520**Namespace Explorer Section:** 521- Section header and description 522- Search placeholder 523- Control bar buttons (All, None, Delete, Move to) 524- Datalist placeholder 525 526### Added 60+ New Language Strings 527Both English and German language files expanded with comprehensive admin terminology. 528 529## Version 6.10.1 (2026-02-13) - LANGUAGE SYSTEM FIX 530 531### Bug Fix: Language Files Not Working 532- Fixed `getMenuText()` to use `$this->getLang('menu')` instead of hardcoded string 533- Admin menu now correctly shows "Kalenderverwaltung" in German 534- Admin tabs now use language system: 535 - "Manage Events" → "Termine verwalten" 536 - "Update Plugin" → "Plugin aktualisieren" 537 - "Outlook Sync" → "Outlook-Sync" 538 - "Themes" → "Designs" 539 540### Added More Language Strings 541- Admin tab labels 542- Admin section headers (Event Browser, Important Namespaces, etc.) 543- Sync settings labels 544- Common button labels (Run Now, Download, Upload, Delete, etc.) 545 546## Version 6.10.0 (2026-02-13) - GERMAN LANGUAGE SUPPORT 547 548### New Feature: German Language Translation 549- Added complete German (de) language file 550- Expanded English language file with comprehensive translatable strings 551- Both files include 100+ translation strings covering: 552 - General terms (calendar, events, dates) 553 - Event fields (title, description, time, etc.) 554 - Actions (add, edit, delete, save, cancel) 555 - Task-related terms 556 - Recurring event options 557 - Days of week and months 558 - User messages and confirmations 559 - Search functionality 560 - Sync status messages 561 - Admin section labels 562 - Sidebar widget labels 563 - Time conflict warnings 564 565### Note 566The 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. 567 568## Version 6.9.9 (2026-02-13) - CRITICAL SEARCH FIX 569 570### Bug Fix: Month Search Not Working 571- **Root cause:** Function name collision - there were two `fuzzyMatch` functions 572 - `window.fuzzyMatch` (for namespace search autocomplete) returns a score number or `null` 573 - Local `fuzzyMatch` (for event search) returns `true`/`false` 574- When filtering events, the wrong function was being called, returning `null` for all events 575- **Fix:** Renamed event search functions to `eventSearchNormalize` and `eventSearchMatch` 576- Month search now works correctly on first load and after navigation 577 578### Also in this version 579- Fixed jumpToDate to properly hide search clear button after navigation 580- Removed debug logging from production code 581 582## Version 6.9.8 (2026-02-12) - SEARCH & UI FIXES 583 584### Bug Fixes 585 586**All-Dates Search Navigation Fixed** 587- Clicking a search result now properly navigates to that event's month 588- Opens the day popup showing the event details 589- Was calling non-existent `loadMonth()` - now uses correct `navCalendar()` 590- Clears search results and restores normal event list view 591 592**"No Events" Message Fixed** 593- No longer shows "No events match your search" when in all-dates mode 594- All-dates mode has its own results display; the month-mode message was incorrectly appearing 595 596**Add Button Layout Fixed** 597- Search bar no longer pushes the "+ Add" button off the right edge 598- Search container has constrained max-width (160px) and proper flex settings 599- Header has overflow:hidden to prevent layout issues 600 601**Important Event Stars Fixed** 602- Stars now appear on initial page load (PHP rendering added) 603- Stars positioned outside the bar using CSS ::before pseudo-element 604- Added overflow:visible to event-indicators and event-bar containers 605- Bar remains full width; star sits in the left margin area 606 607### Technical 608- Star uses `event-bar-has-star` class for first-day-only display 609- jumpToDate() properly cleans up search state before navigation 610 611## Version 6.9.7 (2026-02-12) - IMPORTANT NAMESPACE IMPROVEMENTS 612 613### Bug Fix 614- **AJAX refresh now preserves important namespace highlighting** 615 - Important namespaces list now passed to JavaScript via data attribute 616 - Highlighting persists when navigating between months 617 - Works in both main calendar sidebar and standalone event panels 618 619### New Feature: Calendar Grid Star Icons 620- **Important events now show ⭐ on their color bars** in the calendar grid 621 - Small star appears on the first day of important events 622 - Tooltip prefixed with ⭐ for important events 623 - Visual distinction without cluttering the compact grid view 624 625### Admin Section Update 626- **Improved Important Namespaces description** in Admin → Calendar → Manage Events 627 - Now explains all visual effects: 628 - Calendar Grid: ⭐ star on event bars 629 - Event Sidebar: ⭐ star + highlighted background + accent border 630 - Sidebar Widget: Dedicated "Important Events" section 631 - Day Popup: Events shown with full details 632 - Better example placeholder text 633 634### Technical 635- Fixed PHP syntax error in fuzzy search (curly quotes replaced with escape sequences) 636- Important namespaces loaded once and stored in container dataset for JavaScript access 637 638## Version 6.9.6 (2026-02-12) - FUZZY SEARCH & SIDEBAR HIGHLIGHTING 639 640### Fuzzy Search 641- **Improved search matching:** Search is now more forgiving of punctuation differences 642 - "fathers day" matches "Father's Day" 643 - "new years" matches "New Year's Eve" 644 - Smart quotes, apostrophes, dashes, and common punctuation are ignored 645- **Multi-word search:** All words must be present but in any order 646 - "birthday john" matches "John's Birthday Party" 647- Works in both "this month" and "all dates" search modes 648 649### Important Namespace Highlighting (Calendar Sidebar) 650- Events from important namespaces now highlighted in the main calendar's event list sidebar 651- Same visual treatment as the itinerary sidebar widget: 652 - Subtle theme-colored background tint 653 - Right border accent bar 654 - ⭐ star icon before event title 655- Theme-specific colors: 656 - Matrix: green tint 657 - Purple: purple tint 658 - Pink: pink tint 659 - Professional: blue tint 660 - Wiki: light blue tint 661- Configure important namespaces in Admin → Calendar → Sync Settings 662 663## Version 6.9.5 (2026-02-12) - SEARCH MODE TOGGLE 664 665### New Feature: Search Scope Toggle 666- **Search mode button** (/) added next to search input in both calendar views 667- **Default mode** (): Search only the current month's events (fast, local filtering) 668- **All dates mode** (): Search across ALL calendar data via AJAX 669 - Click the button to toggle to (green highlight when active) 670 - Requires at least 2 characters to search 671 - Shows results with date, time, and namespace 672 - Click any result to jump to that date and open the day popup 673 - Limited to 50 results for performance 674- Search placeholder text updates to indicate current mode 675- Compact button design takes minimal space 676 677### UI Details 678- Button sits flush with search input (no gap) 679- Green highlight when "all dates" mode is active 680- Results show full date (e.g., "Mon, Feb 12, 2026") 681- Namespace badge shown for multi-namespace setups 682 683## Version 6.9.4 (2026-02-12) - POPUP IMPROVEMENTS & IMPORTANT HIGHLIGHTING 684 685### Features 686- **Draggable Day Popup:** Calendar day popup window is now draggable by its header 687 - Click and drag the header to move the popup 688 - Header shows move cursor on hover 689 - Clicking the close button (×) still closes normally 690 691- **Important Namespace Highlighting in Sidebar:** 692 - Events from "important" namespaces (defined in Admin → Sync Settings) now have subtle highlighting 693 - Theme-aware background tint (green for Matrix, purple for Purple, pink for Pink, blue for Professional/Wiki) 694 - Right border accent bar for visual distinction 695 - ⭐ star icon appears before event title 696 - Works in Today, Tomorrow, and Important Events sections 697 698### Bug Fix 699- **Fixed event display in day popup:** Long titles no longer cut off the edit/delete buttons 700 - Event title now wraps to multiple lines instead of truncating 701 - Actions buttons always visible 702 - Time, date range, and namespace badges wrap properly 703 - Improved flex layout for better responsiveness 704 705## Version 6.9.3 (2026-02-12) - ADMIN EDIT DIALOG CONSISTENCY 706 707### UI Improvement 708- **Edit Recurring Event dialog** in Admin section now matches the main event editor exactly: 709 - Same dark theme styling (#1e1e1e background, #2c3e50 header) 710 - Same header layout with close button (×) in top-right corner 711 - Same input styling (dark inputs with green accent borders) 712 - Same footer with Cancel/Save buttons layout 713 - Same recurrence options box styling 714 - Consistent spacing, fonts, and colors throughout 715 716## Version 6.9.2 (2026-02-12) - MOBILE DIALOG FIX 717 718### Bug Fix 719- **Fixed:** Description textarea now extends full width on mobile/phone view 720 - Reduced form padding from 12px to 8px on screens ≤480px 721 - Added explicit `width: 100%` and `box-sizing: border-box` to textarea 722 - Ensured all form inputs/selects use full available width on mobile 723 724## Version 6.9.1 (2026-02-11) - ADMIN RECURRING EVENTS INTEGRATION 725 726### Admin Panel Updates 727- **Enhanced Recurring Events Table:** 728 - Pattern column now shows color-coded badges (daily=blue, weekly=green, monthly=orange, yearly=pink) 729 - "First" column renamed to "Range" showing full date span (e.g., "Feb 1, 2026 → Dec 15, 2026") 730 - Patterns now read from stored metadata when available, with smart fallback to detection 731 732- **Edit Recurring Series Dialog:** 733 - Full recurrence pattern editing (not just simple intervals) 734 - "Repeat every [N] [period]" with dropdown for Daily/Weekly/Monthly/Yearly 735 - Weekly: Day-of-week checkboxes (Sun-Sat) with current days pre-selected 736 - Monthly: Radio choice between "Day of month" or "Weekday pattern" 737 - Ordinal weekday selector (First/Second/Third/Fourth/Fifth/Last + day dropdown) 738 - Pre-populates all fields from stored recurrence metadata 739 - Properly reschedules future events using new pattern 740 741- **Manage Series Dialog:** 742 - Updated summary to show date range 743 - Extend/trim/change pattern functions work with new patterns 744 745### Technical Updates 746- `findRecurringEvents()` captures all recurrence metadata from events 747- `formatRecurrencePattern()` generates human-readable pattern descriptions 748- `detectRecurrencePattern()` enhanced to detect more interval variations 749- `editRecurringSeries()` PHP handler processes new recurrence parameters 750- `generateRecurrenceDates()` creates dates matching complex patterns 751- Recurrence metadata preserved and updated across all event occurrences 752 753## Version 6.9.0 (2026-02-11) - ADVANCED RECURRING EVENTS 754 755### New Features 756- **Enhanced Recurring Event Options:** 757 - **Interval support:** Repeat every N days/weeks/months/years (e.g., every 3 months) 758 - **Weekly day selection:** Choose specific days of the week (e.g., Mon, Wed, Fri) 759 - **Monthly options:** 760 - Day of month: Repeat on specific day (e.g., 15th of each month) 761 - Ordinal weekday: Repeat on pattern (e.g., 2nd Wednesday, Last Friday) 762 - **Examples now possible:** 763 - Every 2 weeks on Monday and Thursday 764 - Every 3 months on the 15th 765 - Every other month on the 2nd Wednesday 766 - Every year on the same date 767 - Last Friday of every month 768 769### UI Changes 770- Redesigned recurring options section with bordered container 771- "Repeat every [N] [period]" input with interval number field 772- Day-of-week checkboxes for weekly recurrence 773- Radio buttons for monthly: "Day of month" vs "Weekday pattern" 774- Ordinal dropdown (First/Second/Third/Fourth/Fifth/Last) 775- Day dropdown (Sunday through Saturday) 776- Helper text for end date field 777 778### Technical Details 779- New parameters: recurrenceInterval, weekDays, monthlyType, monthDay, ordinalWeek, ordinalDay 780- Recurrence pattern stored in event data for reference 781- Maximum 365 occurrences (up from 100) to support daily events for a year 782- Smart date iteration for complex patterns 783 784## Version 6.8.1 (2026-02-11) - ITINERARY DEFAULT STATE SETTING 785 786### New Feature 787- **Added:** Option to set itinerary default state (expanded or collapsed) 788 - New setting in Admin → Calendar → Sidebar Widget Settings 789 - " Itinerary Section" with two options: 790 - **Expanded** (default) - Show itinerary sections by default 791 - **Collapsed** - Hide itinerary sections by default (click bar to expand) 792 - Setting persists across page loads 793 - Arrow indicator and content state reflect the saved preference on page load 794 795## Version 6.8.0 (2026-02-11) - COLLAPSIBLE ITINERARY 796 797### New Feature 798- **Added:** Collapsible Itinerary bar in sidebar week view 799 - New "ITINERARY" bar below the week calendar (styled like +ADD EVENT bar) 800 - Click to collapse/expand the Today, Tomorrow, and Important Events sections 801 - Arrow indicator shows expanded (▼) or collapsed (►) state 802 - Smooth animation when collapsing/expanding 803 - Clicking a day in the week grid shows that day's events ABOVE the Itinerary bar 804 - Selected day events remain visible whether itinerary is expanded or collapsed 805 - Shows "No upcoming events" message when there are no itinerary items 806 807### UI Layout (top to bottom) 8081. Header with clock/system stats 8092. +ADD EVENT bar 8103. Week grid (7 days) 8114. Selected day's events (appears when clicking a day) 8125. ITINERARY bar (click to collapse/expand) 8136. Today section (collapsible) 8147. Tomorrow section (collapsible) 8158. Important Events section (collapsible) 816 817## Version 6.7.9 (2026-02-11) - FIX EVENTS MANAGER STATISTICS 818 819### Bug Fixes 820- **Fixed:** Events Manager showing inflated count (1195 instead of ~605) 821 - The `scanDirectoryForStats()` function was counting ALL entries in JSON files 822 - Now properly filters to only count date keys (`YYYY-MM-DD` format) 823 - Now validates events have `id` and `title` before counting 824 - Click " Rescan" to update the statistics with correct count 825 826## Version 6.7.8 (2026-02-11) - FILTER INVALID EVENTS 827 828### Bug Fixes 829- **Fixed:** Event Manager showing "(untitled)" and "mapping" entries 830 - Root cause: Calendar JSON files contain metadata keys (like "mapping") that were being parsed as events 831 - Added date format validation (`YYYY-MM-DD`) to skip non-date keys 832 - Added validation to require `id` and `title` fields for events 833 - Applied fix to all event-reading functions: 834 - `getEventsByNamespace()` - main event listing 835 - `scanNamespaceRecursive()` - namespace scanning 836 - `searchEvents()` - event search 837 - `findEventsByTitle()` - title lookup 838 - `deleteRecurringSeries()` - recurring deletion 839 - `renameRecurringSeries()` - recurring rename 840 - Recurring events scanner 841 - Recurring cleanup function 842 843### Technical Details 844- Date keys must match pattern `/^\d{4}-\d{2}-\d{2}$/` 845- Events must have non-empty `id` and `title` fields 846- All other entries in JSON files are now skipped 847 848## Version 6.7.7 (2026-02-11) - FIX PHP PATH & CLEAR LOG 849 850### Bug Fixes 851- **Fixed:** "sh: 1: '/usr/bin/php': not found" error - removed escapeshellarg() which was adding quotes around the PHP path 852- **Fixed:** "Could not clear log file" - added better error messages showing exact issue 853- **Improved:** findPhpBinary() now uses is_executable() and `which php` for detection 854- **Improved:** clearLogFile() now shows specific error (file not found, not writable, etc.) 855 856## Version 6.7.6 (2026-02-11) - FIX SYNC CONTROLS & LOGGING 857 858### Bug Fixes 859- **Fixed:** Double log entries - sync script logs internally, removed redundant stdout capture 860- **Fixed:** Manual sync not appearing in log - removed `--verbose` flag since script logs directly 861- **Fixed:** Better error messages when sync fails 862 863### Improvements 864- **Improved:** Sync now runs without `--verbose` flag - script logs to file internally 865- **Improved:** Crontab warning if `>>` redirect is detected (causes duplicate entries) 866- **Improved:** Log viewer now shows full path to log file 867- **Improved:** Better pre-flight checks (directory creation, file permissions) 868- **Improved:** PHP binary path is now properly escaped 869 870### Crontab Update Required 871If your crontab has `>> sync.log 2>&1`, remove it to prevent duplicate log entries: 872 873**Before (causes duplicates):** 874``` 875*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php >> /var/www/html/dokuwiki/data/meta/calendar/sync.log 2>&1 876``` 877 878**After (correct):** 879``` 880*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php 881``` 882 883The script automatically logs to `data/meta/calendar/sync.log`. 884 885## Version 6.7.5 (2026-02-11) - FIX SYNC LOG OUTPUT 886 887### Bug Fixes 888- **Fixed:** Sync log not showing output when running sync from admin panel 889 - Added `--verbose` flag to sync command so output is captured 890 - Sync output is now captured and written to the log file 891 - Log directory is created if it doesn't exist 892 - Better error handling if log directory isn't writable 893 - Command being executed is logged for debugging 894 895### Changes 896- Sync now runs in verbose mode when triggered from admin panel 897- All sync output (stdout/stderr) is written to the log file 898- Pre-flight check ensures log directory exists and is writable 899 900## Version 6.7.4 (2026-02-11) - FIX MANUAL SYNC EXECUTION 901 902### Bug Fix 903- **Fixed:** "Could not open input file: sync_outlook.php" when running manual sync 904 - The `$pluginDir` variable was missing from `runSync()` function 905 - Added `$pluginDir = DOKU_PLUGIN . 'calendar'` before building the command 906 - Sync now properly changes to the plugin directory before executing 907 908## Version 6.7.3 (2026-02-11) - FIX ADDITIONAL COUNT TYPE ERRORS 909 910### Bug Fix 911- **Fixed:** Additional TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given" 912 - Fixed in `scanDirectoryForStats()` (line 5453) 913 - Fixed in namespace delete function (line 4137) 914 - Fixed in export function (line 5516) 915 - Fixed in import function (line 5636) 916 - All locations now check `is_array()` before calling `count()` 917 918## Version 6.7.2 (2026-02-11) - FIX EVENT MANAGER TYPE ERROR 919 920### Bug Fix 921- **Fixed:** TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given" 922 - Added array type checks when iterating over calendar event data 923 - Protects against corrupted JSON data where event lists may not be arrays 924 - Added safeguards in `getEventsByNamespace()` and `scanNamespaceRecursive()` 925 926## Version 6.7.1 (2026-02-11) - BULK DELETE FOR BACKUPS 927 928### Changed 929- **Improved:** Backup management now uses bulk selection and delete 930 - Added checkboxes next to each backup file 931 - Added "Select All" checkbox in the action bar 932 - Added "️ Delete Selected" button (appears when backups are selected) 933 - Removed individual delete buttons from each row 934 - Shows count of selected backups 935 - Backups are deleted sequentially with visual feedback 936 937### UI 938- Clean action bar at top of backup table with selection controls 939- Selected count updates in real-time 940- Rows fade out smoothly when deleted 941 942## Version 6.7.0 (2026-02-11) - IMPROVED RESTORE FUNCTION 943 944### Changed 945- **Improved:** Restore function now uses DokuWiki's Extension Manager API 946 - Uses `helper_plugin_extension_extension` for proper installation 947 - Handles permissions correctly through DokuWiki's standard plugin installation process 948 - Falls back to manual instructions if Extension Manager is not available 949 950### How It Works 951When you click " Restore" on a backup: 9521. The plugin loads DokuWiki's extension helper 9532. Calls `installFromLocal()` with the backup ZIP file 9543. DokuWiki's Extension Manager handles file extraction and installation 9554. This ensures proper permissions and follows DokuWiki standards 956 957### Fallback 958If the Extension Manager helper is not available, you'll be prompted to: 959- Download the backup ZIP 960- Go to Admin → Extension Manager → Install 961- Upload the ZIP file manually 962 963## Version 6.6.9 (2026-02-11) - REMOVE RESTORE FUNCTION 964 965### Removed 966- **Removed:** "Restore" button from backup management 967- **Removed:** `restoreBackup()` PHP method 968- **Removed:** `restoreBackup()` JavaScript function 969 970### Added 971- **Added:** Informational note in backup section explaining how to restore: 972 - Download the backup ZIP file 973 - Go to Admin → Extension Manager → Install 974 - Upload the ZIP file there 975 - DokuWiki's extension manager handles installation safely with proper permissions 976 977### Reason 978The 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. 979 980## Version 6.6.8 (2026-02-11) - FIX THEME KEYS & FILE PERMISSIONS 981 982### Bug Fixes 983- **Fixed:** "Undefined array key" warnings for wiki theme (pastdue_color, pastdue_bg, tomorrow_bg, etc.) 984 - Added missing theme keys to `getWikiTemplateColors()` return array 985 986- **Fixed:** "Permission denied" errors for sync.log and sync_state.json 987 - Moved sync files from plugin directory to `data/meta/calendar/` (writable location) 988 - Updated sync_outlook.php, admin.php to use new paths 989 - sync_config.php remains in plugin directory (must be manually configured) 990 991- **Fixed:** `findEventNamespace` now returns the actual DIRECTORY where event file lives 992 - This ensures deletion works correctly when stored namespace differs from file location 993 994### Note on lang.php Permission Error 995If 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. 996 997## Version 6.6.7 (2026-02-11) - FIX NAMESPACE CHANGE BUG (PART 2) 998 999### Bug Fix 1000- **Fixed:** Events in the DEFAULT namespace (no namespace) could not be moved to other namespaces 1001 - Root cause: The comparison `$oldNamespace !== ''` was always FALSE for default namespace events 1002 - Changed to `$oldNamespace !== null` to properly distinguish between "event not found" (null) and "event in default namespace" ('') 1003 - This allows moving events FROM the default namespace TO any other namespace 1004 - Also fixed null coalescing for recurring events: `$oldNamespace ?? $namespace` instead of `$oldNamespace ?: $namespace` 1005 1006## Version 6.6.6 (2026-02-11) - FIX NAMESPACE CHANGE & DELETE BUGS 1007 1008### Bug Fixes 1009- **Fixed:** Changing an event's namespace now properly moves the event instead of creating a duplicate 1010 - Root cause: `findEventNamespace()` was searching in the NEW namespace instead of ALL namespaces 1011 - Now uses wildcard search `'*'` to find the existing event regardless of its current namespace 1012 1013- **Fixed:** Deleting an event no longer causes the calendar to filter by the deleted event's namespace 1014 - Root cause: After deletion, `reloadCalendarData()` was called with the deleted event's namespace 1015 - Now retrieves the calendar's original namespace from `container.dataset.namespace` 1016 - Also fixed in `saveEventCompact()` and `toggleTaskComplete()` for consistency 1017 1018## Version 6.6.5 (2026-02-11) - ADD AUTOCOMPLETE ATTRIBUTES 1019 1020### Improved 1021- Added `autocomplete="new-password"` to client secret input field 1022- Added `autocomplete="email"` to user email input field 1023- Added `autocomplete="off"` to client ID input field 1024- Follows browser best practices for form inputs 1025 1026## Version 6.6.4 (2026-02-11) - FIX GEOLOCATION VIOLATION 1027 1028### Bug Fix 1029- **Fixed:** Browser violation "Only request geolocation information in response to a user gesture" 1030- Weather widget now uses Sacramento as the default location on page load 1031- Geolocation is only requested when user **clicks** on the weather icon 1032- Click the weather icon to get your local weather (browser will prompt for permission) 1033- Weather icon shows tooltip "Click for local weather" and has pointer cursor 1034 1035## Version 6.6.3 (2026-02-11) - FIX MUTATIONOBSERVER ERROR 1036 1037### Bug Fix 1038- **Fixed:** `Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'` error 1039- Root cause: MutationObserver tried to observe `document.body` before DOM was ready 1040- Added `setupMutationObserver()` function that waits for DOMContentLoaded before attaching observer 1041 1042## Version 6.6.2 (2026-02-11) - FIX CONFLICT TOOLTIP JAVASCRIPT LOADING 1043 1044### Bug Fix 1045- **Critical:** Fixed `showConflictTooltip is not defined` and `hideConflictTooltip is not defined` errors 1046- Root cause: `addAssets()` in action.php was loading empty `script.js` instead of `calendar-main.js` 1047- Changed `addAssets()` to load `calendar-main.js` directly 1048- Updated `script.js` to dynamically load `calendar-main.js` as a fallback mechanism 1049 1050## Version 6.6.1 (2026-02-11) - SECURITY FIXES 1051 1052### Security 1053- **Critical:** Removed `eval()` remote code execution vulnerability in config import 1054- **Critical:** Added admin authentication requirement to `get_system_stats.php` endpoint 1055- **High:** Added CSRF token verification to all write operations (save, delete, toggle) 1056- **High:** Fixed path traversal vulnerabilities in namespace delete/rename functions 1057- **High:** Added admin privilege verification to AJAX admin routes 1058 1059### Improved 1060- **Input Validation:** Date format (YYYY-MM-DD), time format (HH:MM), color format (#RRGGBB) 1061- **Input Validation:** Year range (1970-2100), month range (1-12), namespace format 1062- **Input Validation:** Recurrence type whitelist, title/description length limits 1063- **Debug Logging:** All debug logging now conditional on `CALENDAR_DEBUG` constant (off by default) 1064- **JSON Handling:** Added `safeJsonRead()` helper with proper error handling 1065- **Timezone:** Sync script now uses configured timezone instead of hardcoded value 1066 1067### Code Quality 1068- Documented intentional switch fallthrough in `get_system_stats.php` 1069- Standardized error response format 1070 1071## Version 6.6.0 (2026-02-11) - BACKUP & UI IMPROVEMENTS 1072 1073### Fixed 1074- **Backup:** Fixed recursive directory backup to properly include all subdirectories (including `lang/`) 1075- **Backup:** Now uses `SELF_FIRST` iterator to process directories before their contents 1076- **Backup:** Empty directories are now explicitly added with `addEmptyDir()` to preserve structure 1077 1078### UI Change 1079- **Namespace Explorer:** Cleanup status message now appears prominently at top of section 1080- Previously status message was at bottom, easy to miss after cleanup operations 1081 1082## Version 6.5.5 (2026-02-11) - FIX AJAX ROUTING & MOVE CLEANUP BUTTON 1083 1084### Bug Fix 1085- All admin AJAX actions (cleanup, rescan, extend, trim, pause, resume, change start/pattern) were returning "Unknown action" 1086- Root cause: AJAX calls go through `action.php`'s switch statement, not `admin.php`'s `handle()` method 1087- Added routing in `action.php`: new cases forward to `admin.php` via `routeToAdmin()` helper 1088- Added public `handleAjaxAction()` method in `admin.php` as the entry point from `action.php` 1089 1090### UI Change 1091- Moved " Cleanup" button from standalone section to inline next to "➕ New Namespace" in the control bar 1092- Status messages still appear below the namespace explorer 1093 1094## Version 6.5.4 (2026-02-11) - FIX PHP PARSE ERROR IN CLEANUP JS 1095 1096### Bug Fix 1097- Root cause: `style='color:...'` single quotes inside PHP `echo '...'` block terminated the PHP string prematurely 1098- PHP saw `color:#e74c3c` as unexpected PHP code instead of part of the JS string 1099- Fixed all 5 occurrences in cleanupEmptyNamespaces JS: escaped single quotes as `\'` 1100- Added `adminColors` JS object (text, bg, border) injected from PHP `$colors` at render time 1101- Cleanup detail text uses `adminColors.text` to respect DokuWiki template theme colors 1102 1103## Version 6.5.3 (2026-02-11) - FIX CLEANUP NAMESPACES PARSE ERROR 1104 1105### Bug Fix 1106- Fixed PHP parse error on line 1089 caused by `$colors['text']` PHP variable inside JS string concatenation 1107- The cleanup results detail list now uses hardcoded `#666` for text color instead of attempting PHP interpolation within JS runtime code 1108 1109## Version 6.5.2 (2026-02-11) - CLEANUP EMPTY NAMESPACES 1110 1111### New Feature 1112- " Cleanup Empty Namespaces" button added at bottom of Namespace Explorer section 1113- Dry-run scan first: shows exactly what will be removed with bullet-point details in confirm dialog 1114- Removes empty calendar folders (0 JSON files or all-empty JSON files) from any namespace 1115- Removes parent namespace directories if they become empty after calendar folder removal 1116- Root calendar directory is never removed 1117- AJAX-powered with inline status showing results after cleanup 1118- Page auto-reloads after 2 seconds to refresh the namespace explorer view 1119- Recursively scans all nested namespace directories via `findAllCalendarDirsRecursive()` 1120 1121## Version 6.5.1 (2026-02-11) - TRIM ALL PAST: SHOW COUNT BEFORE DELETE 1122 1123### Improved 1124- "Trim All Past" button now does a dry-run count before showing the confirmation dialog 1125- Confirmation shows exact count: "Found 47 past recurring events to remove" 1126- If zero found, shows "No past recurring events found to remove" instead of confirm 1127- PHP handler supports `dry_run` parameter that counts without deleting 1128 1129## Version 6.5.0 (2026-02-11) - BULK TRIM ALL PAST RECURRING EVENTS 1130 1131### Bulk Action 1132- Red "✂️ Trim All Past" button added next to the Rescan button in the Recurring Events section header 1133- Removes ALL past occurrences (before today) from EVERY recurring series in one click 1134- Only removes events with `recurring` or `recurringId` flags — non-recurring events are untouched 1135- Confirmation dialog required before execution 1136- AJAX-powered with inline status showing count removed, then auto-rescans the table 1137- Searches all calendar directories recursively 1138 1139## Version 6.4.9 (2026-02-11) - FIX RECURRING EDIT/DELETE: SEARCH ALL DIRECTORIES 1140 1141### Bug Fix 1142- Edit and Delete recurring series now search ALL calendar directories instead of building a path from the namespace field 1143- Root cause: event's `namespace` field (stored in JSON) can differ from the filesystem directory where the file lives 1144- Both handlers now use `findCalendarDirs()` to collect every calendar directory recursively 1145- Events matched by title AND namespace field (case-insensitive) for precise targeting 1146- Edit handler rewritten: rename/time/namespace updates in Pass 1, interval respace in Pass 2 1147- New `findCalendarDirs()` helper method for recursive directory discovery 1148 1149## Version 6.4.8 (2026-02-11) - FIX PHP PARSE ERROR IN MANAGE DIALOG 1150 1151### Bug Fix 1152- Rewrote `manageRecurringSeries()` JS function using string concatenation instead of template literals 1153- JS template literals (`${...}`) inside PHP echo blocks caused PHP to parse them as variable interpolation 1154- All inline onclick handlers now use `\x27` for single quotes to avoid escaping conflicts 1155 1156## Version 6.4.7 (2026-02-11) - RECURRING EVENTS: FULL MANAGEMENT CONTROLS 1157 1158### New "Manage" Button per Series 1159- Orange "Manage" button opens a comprehensive management dialog for each recurring series 1160 1161### Extend Series 1162- Add N new occurrences after the last event in the series 1163- Configurable interval: Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly 1164- New events copy title, time, color, namespace, and recurring flag from the last event 1165 1166### Trim Past Events 1167- Remove all occurrences before a selected cutoff date 1168- Confirmation required before deletion 1169- Cleans up empty date keys and files automatically 1170 1171### Change Pattern 1172- Respace future occurrences with a new interval 1173- Past events are untouched; only future events are removed and re-created 1174- First future event becomes the anchor date 1175 1176### Change Start Date 1177- Shift ALL occurrences by the difference between old and new start date 1178- Events are removed from old positions and re-created at new positions 1179- Preserves spacing between all events 1180 1181### Pause/Resume 1182- Pause: adds ⏸ prefix and paused flag to all future occurrences 1183- Resume: removes ⏸ prefix and paused flag from all occurrences 1184- Button toggles based on whether series is currently paused 1185 1186### Infrastructure 1187- New shared `recurringAction()` JS helper for all AJAX management operations 1188- New `getRecurringSeriesEvents()` PHP helper for finding all events in a series 1189- Status messages shown inline in the management dialog 1190- Close button triggers automatic rescan to refresh the table 1191 1192## Version 6.4.6 (2026-02-11) - RECURRING EVENTS: RESCAN BUTTON & IMPROVED LOGIC 1193 1194### Rescan Button 1195- Green " Rescan" button added to the Recurring Events section header 1196- AJAX-powered: rescans all calendar data and refreshes the table without page reload 1197- Shows count of found series briefly after scan completes 1198 1199### Improved Detection Logic 1200- Events with `recurring: true` flag are now detected first (grouped by `recurringId`) 1201- Pattern-detected events (3+ same-title occurrences) are found separately and deduplicated 1202- New "Source" column shows ️ Flagged (has recurring flag) vs Detected (pattern match) 1203- Median interval used for pattern detection instead of just first two dates (more robust) 1204- New patterns recognized: Quarterly, Semi-annual, and "Every ~N days" for custom intervals 1205- Empty/invalid titles and malformed date arrays are now skipped safely 1206- Dates are deduplicated before counting (prevents inflated counts from multi-day events) 1207- Nested namespace directories now scanned recursively 1208- Results sorted alphabetically by title 1209 1210## Version 6.4.5 (2026-02-11) - ADMIN VERSION HISTORY OVERHAUL 1211 1212### Version History Viewer 1213- All purple (#7b1fa2) accent colors replaced with green (#00cc07) to match admin theme 1214- Changelog parser now handles `###` subsection headers (rendered as green bold labels) 1215- Plain `- ` bullet items now parsed and categorized under their subsection 1216- Previously only `- **Type:** description` format was recognized 1217 1218### Current Release Button 1219- Green "Current Release" button added between nav arrows 1220- Jumps directly to the card matching the running version from plugin.info.txt 1221- Running version card shows green "RUNNING" badge and thicker green border 1222 1223## Version 6.4.4 (2026-02-11) - WIKI THEME: PAST EVENTS TOGGLE BACKGROUND 1224 1225### Fix 1226- Wiki theme past events pulldown (retracted state) now uses `__background_neu__` (`--cell-today-bg`) 1227- Previously used `--cell-bg` which appeared unthemed/white 1228 1229## Version 6.4.3 (2026-02-11) - WIKI THEME: DAY HEADERS BACKGROUND 1230 1231### Fix 1232- Wiki theme SMTWTFS day headers now use `__background_neu__` (`--cell-today-bg`) instead of `--background-header` 1233 1234## Version 6.4.2 (2026-02-11) - WIKI THEME: DAY HEADERS (INITIAL) 1235 1236### Wiki Theme Day Headers 1237- Added explicit CSS override for `.calendar-theme-wiki .calendar-day-headers` 1238- Day header text uses `--text-primary` (template's `__text__` color) 1239 1240## Version 6.4.1 (2026-02-11) - WIKI THEME: EVENT HIGHLIGHT 1241 1242### Fix 1243- Wiki theme event highlight (when clicking calendar bar) now uses `themeStyles.header_bg` (`__background_alt__`) instead of hardcoded blue (#dce9f5) 1244- Subtle shadow instead of blue glow 1245 1246## Version 6.4.0 (2026-02-11) - DARK READER: SECTION BAR COLOR MATCHING 1247 1248### Fix 1249- Wiki theme section left bar now uses a `<div>` with `background` instead of `border-left` 1250- Dark Reader maps the same color differently for border vs background properties, causing visual mismatch 1251- Both the bar and header now use `background`, so Dark Reader maps them identically 1252- Flex layout wrapper added for wiki theme sections 1253- Wiki fallback colors updated: `border` key now uses `#ccc` (matching `__border__`) instead of `#2b73b7` 1254 1255## Version 6.3.9 (2026-02-10) - WIKI THEME: SECTION BAR FIX (ATTEMPT) 1256 1257### Fix 1258- Simplified wiki section container — removed `wiki-section-container` class 1259- Added `background` from `$themeStyles['bg']` to section container 1260 1261## Version 6.3.8 (2026-02-10) - WIKI THEME: BUTTON & SECTION HEADER COLORS 1262 1263### Wiki Theme Buttons 1264- Nav buttons (< >), Today button, and panel buttons now use `__link__` color background with white text 1265- CSS overrides for `.calendar-theme-wiki .cal-nav-btn`, `.cal-today-btn`, panel buttons 1266 1267### Wiki Theme Section Headers 1268- Today: `__link__` background (accent/link color) 1269- Tomorrow: `__background_alt__` background (alternate background) 1270- Important: `__border__` background (border color) 1271- Each section now has a distinct color from the template palette 1272 1273## Version 6.3.7 (2026-02-10) - WIKI THEME CHECKBOX FIX 1274 1275### Fix 1276- Wiki theme checkbox override changed from `border-color` to full `border: 2px solid` shorthand 1277- Properly overrides the base rule which uses `border` shorthand 1278- Hover state also uses full shorthand 1279 1280## Version 6.3.6 (2026-02-10) - WIKI THEME CHECKBOX BORDER COLOR 1281 1282### Fix 1283- Wiki theme unchecked checkboxes now use `--border-main` (template's `__border__` color) for border 1284- Checked state fills with border color 1285- Hover state uses border color 1286- Applied to calendar, sidebar, and eventlist containers 1287 1288## Version 6.3.5 (2026-02-10) - WIKI THEME: ALLOW DARK READER ON HEADERS 1289 1290### Fix 1291- Wiki theme section headers (Today/Tomorrow/Important) no longer use `!important` or `-webkit-text-fill-color` 1292- Dark Reader can now freely adjust background, text color, and borders on wiki theme headers 1293- Clicked-day panel header and section border-left also unlocked for wiki theme 1294- All other themes (matrix/purple/pink/professional) retain full Dark Reader protection 1295 1296## Version 6.3.4 (2026-02-10) - WIKI THEME: BORDER COLOR FOR HEADERS & BADGES 1297 1298### Wiki Theme Color Remapping 1299- `border` (accent color) now maps to template's `__border__` instead of `__link__` 1300- This affects: section headers (Today/Tomorrow/Important), badges (TODAY, namespace), sidebar widget border, clicked-day panel, `--border-main` CSS variable 1301- `text_bright` still maps to `__link__` for link text and accent text 1302- Section headers all use the same `__border__` color for consistent appearance 1303- Updated COLOR_SCHEME mapping documentation 1304 1305## Version 6.3.3 (2026-02-10) - WIKI THEME SECTION HEADER TEXT COLOR 1306 1307### Fix 1308- Wiki theme Today/Tomorrow/Important section header text now uses `$themeStyles['text_primary']` (mapped from template's `__text__` color) instead of hardcoded white 1309- Clicked-day panel header text also uses template text color for wiki theme 1310- Professional theme remains white text on blue headers 1311 1312## Version 6.3.2 (2026-02-10) - FIX THEME NOT UPDATING ON SIDEBAR EVENTLIST 1313 1314### Bug Fix 1315- Added `$renderer->nocache()` to the render function 1316- DokuWiki was caching the rendered sidebar HTML, so theme changes made in admin were never reflected until the page was manually edited 1317- Now all calendar/eventlist/eventpanel outputs are rendered fresh on each page load, picking up the current theme from `calendar_theme.txt` 1318 1319## Version 6.3.1 (2026-02-10) - EVENTLIST THEMING 1320 1321### {{eventlist}} Theme Support 1322- Eventlist containers now receive theme class (`eventlist-theme-matrix`, etc.) and full CSS variable injection 1323- Dark themes get themed border + glow, light themes get subtle border 1324- Container background set from `$themeStyles['bg']` with `!important` 1325 1326### Eventlist CSS Theme Rules (all 3 dark themes) 1327- Title, header, time, date, body, links, strong, code, namespace badge, empty state 1328- Today header, clock, date — all with `color` + `-webkit-text-fill-color` `!important` 1329- Item borders, section backgrounds, code block backgrounds 1330- Full Dark Reader protection via same inline+CSS approach as calendar/sidebar 1331 1332## Version 6.3.0 (2026-02-10) - DARK READER COMPATIBILITY & COMPLETE THEMING 1333 1334### Dark Reader Browser Extension Compatibility 1335All 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. 1336 1337**Protected elements:** 1338- Section headers (Today/Tomorrow/Important) — background, text color, text-fill-color 1339- Clicked-day panel header — background, text color, close button 1340- All badges (TODAY, PAST DUE, namespace, panel namespace, eventlist-simple) — background, text, text-fill-color 1341- Event titles, meta, descriptions — color with !important via CSS 1342- Day numbers, nav buttons, calendar day headers — color with !important via CSS 1343- System status bars — inline background !important on tracks and fills 1344- System tooltips — background, border-color, text color all set via setProperty with !important 1345- Section left border bars — border-left with !important 1346- Event color indicator bars — border-left-color with !important 1347- Sidebar section event text (Purple and Pink themes) 1348 1349### Complete CSS Variable Audit (41 conversions in v6.1.1) 1350- All remaining hardcoded colors in style.css converted to CSS variable references 1351- Calendar borders, text colors, backgrounds, input focus shadows, accent borders 1352- Only legitimate hardcodes remain (keyframe animations, theme-specific override blocks) 1353 1354### Semantic Color System 1355- New CSS variables: `--pastdue-color`, `--pastdue-bg`, `--pastdue-bg-strong`, `--pastdue-bg-light` 1356- New CSS variables: `--tomorrow-bg`, `--tomorrow-bg-strong`, `--tomorrow-bg-light` 1357- Injected into all 3 CSS var blocks (full calendar, event panel, sidebar widget) 1358- Today/Tomorrow/Important section colors now theme-derived instead of hardcoded 1359 1360### Section Headers Fully Themed 1361- Today/Tomorrow/Important headers use theme accent colors instead of fixed green/orange/purple 1362- Matrix: bright/standard/dim green, Purple: bright/standard/dim purple, Pink: hot/medium/light pink 1363- Professional: blue shades, Wiki: template-derived colors 1364- Dark theme headers use dark background color for text contrast 1365 1366### Pink Theme Enhancements 1367- **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 1368- **Firework button hover** — `pink-firework-burst` keyframe animation with multi-point radiating box-shadows, scale/brightness effects on hover, instant flash on click 1369- **Checkbox glow** — hot pink border with ambient glow, hover intensifies, checked fills with glow 1370 1371### All Theme Checkbox Theming 1372- Matrix: bright green border + green glow, Purple: purple border + purple glow 1373- Pink: hot pink border + pink glow (with enhanced ambient effect) 1374- Hover scales 1.1x with intensified glow on all themes 1375- Checked state fills with theme accent color + outer glow 1376 1377### System Tooltips Themed 1378- Both tooltip functions use theme-derived colors from `$themeStyles` 1379- Green tooltip: `text_bright`, Purple: `border`, Orange: `text_primary` 1380- Background from `$themeStyles['bg']`, divider borders use theme accent colors 1381- All properties set with `style.setProperty(prop, value, "important")` 1382 1383### Namespace Filter Badge Cleanup 1384- Removed inline namespace badge from event side panel header 1385- Filter indicator bar ("Filtering: namespace ✕") retained and working 1386- AJAX-based namespace filtering fully functional via onclick handlers 1387 1388## Version 6.1.0 (2026-02-10) - TODAY INDICATOR, BUTTON HOVER & CHECKBOXES 1389 1390### Today Indicator 1391- **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) 1392- **Added:** Today cell has `--cell-today-bg` background AND a visible inset border glow on hover using `--border-main` 1393- **Added:** `.day-num` now uses `--text-primary` for color instead of relying on browser default 1394 1395### Button Hover/Click Theming 1396- **Fixed:** All buttons now use `filter: brightness(1.3)` on hover for a visible glow effect across all themes 1397- **Fixed:** All buttons use `filter: brightness(0.85)` on click/active for a press-down darkening effect 1398- **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 1399- **Removed:** Generic `opacity: 0.9` hover which was barely visible on dark themes 1400 1401### Checkboxes Themed 1402- **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 1403- **Added:** `accent-color: var(--text-bright)` on all dialog checkboxes (task, recurring) for consistent theme coloring 1404 1405### Form Input Text 1406- **Fixed:** `.input-sleek` now has `color: var(--text-primary)` — form text is visible on dark themes 1407- **Added:** `::placeholder` styling for inputs/textareas using `--text-dim` 1408 1409## Version 6.0.9 (2026-02-09) - FORM TEXT, CELL HOVER & GLOW TUNING 1410 1411### Form Input Text Fix 1412- **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)`. 1413- **Added:** Themed placeholder text (`::placeholder`) for inputs/textareas 1414 1415### Button & Cell Hover Theming 1416- **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` 1417- **Improved:** Nav buttons (`◄`/`►`) and Today button hover now show a themed glow + scale effect instead of just opacity change 1418- **Added:** Active (click) state for nav/today buttons with scale-down feedback 1419- **Improved:** Month picker hover now also shows a subtle theme shadow 1420 1421### Glow Reduced to 1px for Matrix/Purple 1422- Matrix and purple text glow reduced from 2px to 1px across: event titles, descriptions, meta, links, sidebar day numbers, sidebar event titles, sidebar dates 1423- Matrix clock pulse animation reduced from 6px/10px+15px to 2px/4px+6px 1424- Weather text glow reduced to 1px, clock to 2px 1425- Pink remains at 2px (barely noticeable) 1426 1427## Version 6.0.8 (2026-02-09) - LINKS, GLOW CONSISTENCY & PINK TONE-DOWN 1428 1429### Links Themed 1430- **Added:** `.cal-link` CSS class — all links rendered via `renderDescription()` now pick up theme accent color via `--text-bright` 1431- **Fixed:** Sidebar widget links (`a.cal-link`) inherit theme colors 1432- **Fixed:** Event list widget description links (`eventlist-widget-desc a`) use CSS vars 1433- **Fixed:** Simple event list body links/strong/code all themed 1434 1435### Text Glow Consistency 1436- **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 1437- **Added:** Subtle link glow on dark themes 1438- **Added:** Matrix and purple now get the same barely-visible text glow that pink had on sidebar week grid day numbers and event titles 1439 1440### Pink Glow Toned Down 1441- **Reduced:** Sidebar today header box-shadow from `0 0 10px 0.4` to `0 0 6px 0.25` 1442- **Reduced:** Day number sparkle animation from 3px/6px+10px to 2px/3px 1443- **Reduced:** Today cell shimmer from 3px+5px / 8px+12px to 2px+3px / 4px+6px 1444- **Reduced:** Event bar glow pulse from 2px/4px+6px to 1px/2px+3px 1445- **Reduced:** Today hover glow from 10px+15px to 5px+8px 1446- **Reduced:** Event item glow from 2px/5px to 1px/3px 1447- **Reduced:** Calendar container glow from 8px to 5px 1448 1449### Other 1450- **Themed:** Sidebar weather, date, and clock text colors and glow via CSS vars 1451 1452## Version 6.0.7 (2026-02-09) - BADGES, BUTTONS & CONFLICT THEMING 1453 1454- **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 1455- **Fixed:** TODAY badge uses `--border-main` for background instead of hardcoded purple 1456- **Fixed:** Conflict alert badge (`⚠️`) uses `--border-main` background and `--text-bright` border — matches theme accent 1457- **Fixed:** Conflict tooltip header background now set inline from theme vars (tooltip is appended to body, can't inherit CSS vars) 1458- **Fixed:** Conflict tooltip body items use themed text and border colors 1459- **Fixed:** Month picker Go/Cancel buttons themed (`--text-bright` for save, `--cell-bg` for cancel) 1460- **Fixed:** Calendar header month/year hover uses `--cell-today-bg` background 1461- **Fixed:** Inline search input border uses `--border-color` 1462- **Fixed:** Event list header border uses `--border-color` 1463 1464## Version 6.0.6 (2026-02-09) - COMPLETE TEXT THEMING 1465 1466- **Fixed:** Calendar header month/year title had hardcoded dark color — now uses `--text-primary` 1467- **Fixed:** Month/year picker hover used hardcoded gray background and green text — now uses `--cell-today-bg` and `--text-bright` 1468- **Fixed:** Event list items (titles, meta, descriptions, links, code blocks, bold text) — all now theme-aware via CSS vars 1469- **Fixed:** Completed/past event states used hardcoded grays — now use `--cell-bg`, `--text-dim`, `--cell-today-bg` 1470- **Fixed:** Scrollbar track/thumb colors now use theme vars 1471- **Fixed:** Namespace filter indicator (background, label, badge, close button) — all themed 1472- **Fixed:** Panel standalone month picker hover and namespace badge — themed 1473- **Fixed:** Calendar header border-bottom — now uses `--border-color` 1474 1475## Version 6.0.5 (2026-02-09) - THEMED BORDERS & EVENT PANEL 1476 1477- **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). 1478- **Added:** Theme-colored border and glow for event panel (`{{eventpanel}}`) on dark themes using `[data-theme]` attribute selectors 1479- **Themed:** Event panel header (nav buttons, month title, today button, search input, add button) — all now use CSS vars 1480- **Themed:** Panel standalone header background and border 1481 1482## Version 6.0.4 (2026-02-09) - FULL DIALOG THEMING 1483 1484- **Fixed:** Day cell click popup (day-popup) used hardcoded white/gray colors — now fully theme-aware using CSS variables 1485- **Fixed:** Event add/edit dialog (dialog-content-sleek) had hardcoded white background and blue header — now uses theme colors 1486- **Fixed:** Month picker dialog had hardcoded white background and dark text — now themed 1487- **Fixed:** Popup event items, titles, times, descriptions, footer, add-event button, close button — all now use CSS vars with sensible fallbacks 1488- **Fixed:** Form elements (field labels, inputs, checkboxes, recurring options, color pickers) — all reference theme CSS vars 1489- **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. 1490 1491## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB 1492 1493- **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Events Manager and Cleanup sections) 1494- **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage tab sections 1495- **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now independent of Outlook config save 1496- **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value 1497 1498## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX 1499 1500- **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. 1501 1502## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX 1503 1504- **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()` 1505- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller 1506- **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. 1507 1508 1509## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE 1510 1511- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed 1512- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified 1513- **Audited:** style.css (3,218 lines) — balanced braces confirmed 1514- **Audited:** All admin manage tab action handlers verified functional (13 actions) 1515- **New:** Fresh README.md for GitHub with complete documentation 1516- **Includes all v5.5.x fixes:** 1517 - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total)) 1518 - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel 1519 - Conflict badges on past events after AJAX navigation 1520 - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal 1521 1522## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP 1523 1524- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers 1525- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0` 1526- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning 1527- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name 1528- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared 1529- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check 1530- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving 1531- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files 1532- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt 1533- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache 1534- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`) 1535- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries` 1536- **Removed:** Stale "NEW!" comment from Events Manager section 1537 1538## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH 1539 1540- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API 1541- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status) 1542- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run 1543- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing 1544- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total) 1545- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed 1546- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important) 1547- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead 1548- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text 1549- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes) 1550 1551## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH 1552 1553- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys 1554- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional) 1555- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background 1556- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files) 1557- **Changed:** Wiki theme section header text now white for readability on colored backgrounds 1558- **Changed:** Week grid JS theme colors now use actual $themeStyles values 1559 1560## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX 1561 1562- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch) 1563 1564## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING 1565 1566- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner 1567- **Fixed:** Week grid conflict tooltips also fixed (same issue) 1568- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data 1569- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip) 1570 1571## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD 1572 1573- **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) 1574 1575## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS 1576 1577- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body) 1578- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string 1579 1580## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING 1581 1582- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping 1583- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON) 1584- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute 1585- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility 1586 1587## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING 1588 1589- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation 1590- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads 1591- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-) 1592- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1 1593- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds 1594- **Added:** ESC key now also closes day popups and conflict tooltips 1595- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding 1596 1597## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY 1598 1599- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance 1600- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js 1601- **Refactored:** style.css is now the single source of truth for all visual styling 1602- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container 1603- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget) 1604- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars 1605- **Added:** CSS variable injection for {{eventlist panel}} containers 1606- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers 1607- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position 1608- **Added:** Wiki template mapping reads __link__ as accent color from style.ini 1609- **Added:** Detailed CSS variable reference table in style.css header comment 1610- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php 1611- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles 1612- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div 1613- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible) 1614- **Removed:** $isWikiTheme branching from PHP render path 1615 1616## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! 1617 1618### Added: Hearts in Explosions! 1619- **Added:** 8-12 pink hearts in each click explosion 1620- **Added:** Random sizes (12-28px) and directions 1621- **Result:** Extra love in every click! 1622 1623### Fixed: Background CSS Property for Dark Mode Readers 1624- **Fixed:** Added `background: transparent` to CSS (was completely removed) 1625- **Fixed:** Now CSS readers can detect and modify background property 1626- **Why:** Inline styles override transparent, but CSS readers can now see the property 1627- **Result:** Dark mode plugins can now change calendar backgrounds! 1628 1629### The CSS Problem 1630 1631**Why backgrounds weren't changing with dark mode readers**: 1632 1633**Before (v5.3.5)**: 1634```css 1635.calendar-compact-grid tbody td { 1636 /* background removed - set via inline style */ 1637 border: 1px solid... 1638} 1639``` 1640 1641**Problem**: CSS property doesn't exist! 1642- Dark mode readers look for `background` property in CSS 1643- Can't override what doesn't exist 1644- Inline styles work, but readers can't modify them 1645 1646**After (v5.3.6)**: 1647```css 1648.calendar-compact-grid tbody td { 1649 background: transparent; /* Now exists! */ 1650 border: 1px solid... 1651} 1652``` 1653 1654**Solution**: 1655- Property exists in CSS 1656- Dark mode readers can override it 1657- Inline styles still override transparent 1658- Everyone wins! 1659 1660### What's Fixed 1661 1662**Elements now have background property**: 1663- `.calendar-compact-grid tbody td` ✓ 1664- `.calendar-compact-grid tbody td:hover` ✓ 1665- `.event-compact-item` ✓ 1666- `.event-compact-item:hover` ✓ 1667 1668**How it works**: 16691. CSS sets `background: transparent` (default) 16702. Inline styles set actual color (overrides transparent) 16713. Dark mode readers can override CSS property 16724. Works for everyone! 1673 1674### Hearts in Explosion 1675 1676**Click anywhere → Hearts explode!** 1677 1678**Heart details**: 1679- Count: 8-12 per explosion (random) 1680- Size: 12-28px (random variety) 1681- Emoji: (pink heart) 1682- Direction: Random 360° 1683- Speed: 60-140px travel 1684- Duration: 0.8-1.2s 1685- z-index: 9999999 (always visible) 1686 1687**Combined with**: 1688- 25 glowing particles 1689- 40 pixel sparkles 1690- Bright flash 1691- **Total: 73-77 elements!** 1692 1693### Visual Result 1694 1695**Click explosion**: 1696``` 1697 ✦ • ✦ 1698 • • 1699✦ • ! • ✦ 1700 • • 1701 ✦ • ✦ 1702 1703Hearts + Particles + Pixels! 1704``` 1705 1706**Dark mode now works**: 1707```css 1708/* Dark mode reader can now do this: */ 1709.calendar-compact-grid tbody td { 1710 background: #000 !important; /* Works! */ 1711} 1712``` 1713 1714### Why Transparent Works 1715 1716**CSS Cascade**: 17171. CSS: `background: transparent` (lowest priority) 17182. Inline style: `background: #f5f5f5` (overrides CSS) 17193. Dark mode CSS: `background: #000 !important` (overrides inline) 1720 1721**Perfect solution!** ✓ 1722 1723## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! 1724 1725### Fixed: Particles Now Appear Above All Dialogs! 1726- **Fixed:** Increased z-index to 9999999 for all particles 1727- **Fixed:** Particles now visible above event dialogs, month picker, etc. 1728- **Result:** Cursor effects and explosions always visible! 1729 1730### The Z-Index Problem 1731 1732**Before (v5.3.4)**: 1733- Particles: z-index 9999 1734- Dialogs: z-index 10000-999999 1735- **Particles hidden behind dialogs!** 1736 1737**After (v5.3.5)**: 1738- Particles: z-index 9999999 1739- Trail: z-index 9999998 1740- Pixels: z-index 9999997 1741- **Particles ALWAYS on top!** 1742 1743### What's Fixed 1744 1745✅ **Main particles** (explosion orbs) 1746✅ **Cursor trail** (glowing dots) 1747✅ **Pixel sparkles** (tiny bright stars) 1748✅ **Flash effect** (click burst) 1749 1750**All now appear above**: 1751- Event dialog popups 1752- Month picker 1753- Day popups 1754- Any modal overlays 1755 1756### Visual Result 1757 1758**Moving cursor over dialog**: 1759``` 1760┌─────────────────────┐ 1761│ Event Dialog │ 1762│ ✦ • ✦ │ ← Sparkles visible! 1763│ → ✦ │ ← Cursor trail visible! 1764│ • ✦ • │ 1765└─────────────────────┘ 1766``` 1767 1768**Clicking on dialog**: 1769``` 1770┌─────────────────────┐ 1771│ ✦ • ✦ • ✦ │ 1772│ • ! • │ ← Explosion visible! 1773│ ✦ • ✦ • ✦ │ 1774└─────────────────────┘ 1775``` 1776 1777**Perfect visibility everywhere!** ✨ 1778 1779## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX 1780 1781### Fixed: Month Picker Now Themed! 1782- **Fixed:** Jump to Month dialog now uses theme colors 1783- **Fixed:** Dialog background, borders, text all themed 1784- **Fixed:** Select dropdowns use theme colors 1785- **Fixed:** Buttons use theme accent colors 1786- **Result:** Month picker matches calendar theme! 1787 1788### Fixed: Cursor Effects Work in Dialogs! 1789- **Fixed:** Cursor trail now works when hovering over dialogs 1790- **Fixed:** Click explosions work when clicking inside dialogs 1791- **Technical:** Changed to capture phase event listeners 1792- **Result:** Effects work EVERYWHERE now! 1793 1794### Month Picker Theming 1795 1796**Before (v5.3.3)**: 1797- White background (hardcoded) 1798- Black text (hardcoded) 1799- No theme integration 1800- Looked out of place 1801 1802**After (v5.3.4)**: 1803- Dialog background: `theme.bg` 1804- Dialog border: `theme.border` 1805- Text color: `theme.text_primary` 1806- Dropdowns: `theme.cell_bg` + `theme.text_primary` 1807- Cancel button: `theme.cell_bg` 1808- Go button: `theme.border` (accent color) 1809 1810**Fully integrated!** ✅ 1811 1812--- 1813 1814### Theme Examples 1815 1816**Matrix Theme**: 1817``` 1818┌─────────────────────────┐ 1819│ Jump to Month │ ← Dark bg, green border 1820│ [February ▼] [2026 ▼] │ ← Dark dropdowns 1821│ [Cancel] [Go] │ ← Green "Go" button 1822└─────────────────────────┘ 1823``` 1824 1825**Pink Theme**: 1826``` 1827┌─────────────────────────┐ 1828│ Jump to Month │ ← Dark bg, pink border 1829│ [February ▼] [2026 ▼] │ ← Dark dropdowns 1830│ [Cancel] [Go] │ ← Pink "Go" button 1831└─────────────────────────┘ 1832With sparkle effects! ✨ 1833``` 1834 1835**Professional Theme**: 1836``` 1837┌─────────────────────────┐ 1838│ Jump to Month │ ← Clean bg, blue border 1839│ [February ▼] [2026 ▼] │ ← Clean dropdowns 1840│ [Cancel] [Go] │ ← Blue "Go" button 1841└─────────────────────────┘ 1842``` 1843 1844--- 1845 1846### Dialog Cursor Fix 1847 1848**The Problem**: 1849Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects! 1850 1851**The Solution**: 1852Use **capture phase** event listeners: 1853```javascript 1854// Before (bubbling phase) 1855document.addEventListener('click', handler) 1856 1857// After (capture phase) 1858document.addEventListener('click', handler, true) 1859 ↑ 1860 Capture phase! 1861``` 1862 1863**Capture phase runs BEFORE stopPropagation!** 1864 1865--- 1866 1867### Now Works Everywhere 1868 1869✅ **Calendar area** 1870✅ **Event dialogs** 1871✅ **Month picker dialog** 1872✅ **Day popup dialogs** 1873✅ **Anywhere on screen** 1874 1875**No more blocked effects!** 1876 1877--- 1878 1879### Technical Details 1880 1881**Event phases**: 1882``` 18831. Capture phase ← We listen here now! 18842. Target phase 18853. Bubbling phase ← stopPropagation blocks this 1886``` 1887 1888**By using capture phase**: 1889- Events caught before stopPropagation 1890- Works in all dialogs 1891- No conflicts with dialog logic 1892 1893--- 1894 1895### All Dialogs Checked 1896 1897✅ **Month picker** - Now themed! 1898✅ **Event dialog** - Already themed 1899✅ **Day popup** - Already themed 1900 1901**Everything consistent!** 1902 1903--- 1904 1905## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨ 1906 1907### ✨ Added: Bright Neon Pixel Sparkles Everywhere! 1908- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail 1909- **Added:** 40 pixel sparkles in click explosions 1910- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar) 1911- **Result:** Maximum sparkle effect! 1912 1913### Tiny Pixel Sparkles 1914 1915**3-6 tiny bright pixels appear with each cursor movement!** 1916 1917**Characteristics**: 1918- Size: 1-2px (single pixel appearance!) 1919- Colors: Bright neon whites and pinks 1920 - Pure white (#fff) - 40% chance 1921 - Hot pink (#ff1493) 1922 - Pink (#ff69b4) 1923 - Light pink (#ffb6c1) 1924 - Soft pink (#ff85c1) 1925- Glow: Triple-layer shadow (intense!) 1926- Spawn: Random 30px radius around cursor 1927- Animations: 1928 - 50% twinkle in place 1929 - 50% float upward 1930 1931**Creates a cloud of sparkles around your cursor!** 1932 1933--- 1934 1935### Click Explosion Enhanced 1936 1937**Now with 40 EXTRA pixel sparkles!** 1938 1939**Click anywhere → BIG BOOM**: 1940- 25 main glowing particles (6-10px) 1941- **40 tiny pixel sparkles (1-2px)** ← NEW! 1942- Bright white flash 1943- Total: 65+ visual elements! 1944 1945**Pixel sparkles in explosion**: 1946- Shoot outward in all directions 1947- Random distances (30-110px) 1948- Multiple bright colors 1949- Some twinkle, some explode 1950- Creates stellar effect! 1951 1952--- 1953 1954### Entire Screen Coverage 1955 1956**Effects now work EVERYWHERE!** 1957 1958**Before (v5.3.2)**: 1959- Only inside calendar viewport 1960- Limited to calendar area 1961 1962**After (v5.3.3)**: 1963- Works on entire screen! ✓ 1964- Cursor trail follows everywhere 1965- Click explosions anywhere 1966- Used `position: fixed` + `clientX/Y` 1967 1968**Move anywhere on the page for sparkles!** 1969 1970--- 1971 1972### Visual Effect 1973 1974**Cursor movement**: 1975``` 1976 • ✦ • ← Tiny pixels 1977 • ✦ • ← Glowing trail 1978✦ • → • ✦ ← Cursor 1979 • ✦ • ← Mixed sizes 1980 • ✦ • ← Sparkle cloud 1981``` 1982 1983**Click explosion**: 1984``` 1985 ✦ • ✦ • ✦ 1986 ✦ • • ✦ 1987✦ • ! • ✦ 1988 ✦ • • ✦ 1989 ✦ • ✦ • ✦ 1990 199165+ particles total! 1992``` 1993 1994--- 1995 1996### Sparkle Details 1997 1998**Trail Pixels** (3-6 per movement): 1999- Size: 1-2px 2000- Spawn rate: Every 40ms 2001- Spread: 30px radius 2002- Duration: 0.6-0.8s 2003- 50% twinkle, 50% float 2004 2005**Explosion Pixels** (40 total): 2006- Size: 1-3px 2007- Spread: 30-110px radius 2008- Duration: 0.4-0.8s 2009- All directions 2010- Intense glow 2011 2012**Main Particles** (25 total): 2013- Size: 4-10px 2014- Spread: 50-150px 2015- Full color palette 2016- Original firework effect 2017 2018--- 2019 2020### Color Distribution 2021 2022**Pixel sparkles favor white**: 2023- 40% pure white (#fff) - brightest! 2024- 60% pink shades - variety 2025 2026**Creates brilliant sparkle effect!** 2027 2028--- 2029 2030### Performance 2031 2032**Still optimized**: 2033- Trail: 30ms throttle 2034- Pixels: 40ms throttle 2035- Auto-cleanup 2036- Hardware accelerated 2037- Smooth 60fps 2038 2039**Lots of sparkles, zero lag!** 2040 2041--- 2042 2043### Full-Screen Magic 2044 2045**Pink theme calendar detected**: 2046```javascript 2047if (pink calendar exists) { 2048 Enable effects for ENTIRE SCREEN 2049 Not just calendar area 2050} 2051``` 2052 2053**Works everywhere on page!** ✨ 2054 2055--- 2056 2057## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! 2058 2059### Changed: Glowing Pink Particles Instead of Emoji Sparkles! 2060- **Removed:** Emoji sparkle images (✨) 2061- **Added:** Glowing pink particle trail following cursor 2062- **Added:** FIREWORKS explosion on click! 2063- **Result:** Beautiful glowing effects, not emoji! 2064 2065### Glowing Cursor Trail 2066 2067**Pink glowing dots follow your cursor!** 2068- Small glowing pink orbs (8px) 2069- Radial gradient glow effect 2070- Multiple box-shadows for depth 2071- Fade out smoothly (0.5s) 2072- Throttled to 30ms for smoothness 2073 2074``` 2075 • • 2076 • → • ← Your cursor 2077 • • 2078``` 2079 2080**Not emoji - actual glowing particles!** 2081 2082--- 2083 2084### Click Fireworks! 2085 2086**Click anywhere on the calendar → BOOM!** 2087 2088**20 pink particles explode outward!** 2089- Radial burst pattern (360° coverage) 2090- Random speeds (50-150px travel) 2091- 4 shades of pink: 2092 - Hot pink (#ff1493) 2093 - Pink (#ff69b4) 2094 - Light pink (#ff85c1) 2095 - Very light pink (#ffc0cb) 2096- Random sizes (4-10px) 2097- Individual glowing halos 2098- Smooth explosion animation 2099 2100**Plus a bright flash at click point!** 2101- 30px radius glow 2102- Intense pink flash 2103- Fades quickly (0.3s) 2104 2105--- 2106 2107### Visual Effect 2108 2109**Cursor movement**: 2110``` 2111 • 2112 • • • 2113 • → • ← Glowing trail 2114 • • • 2115 • 2116``` 2117 2118**Click explosion**: 2119``` 2120 • • • 2121 • • 2122 • BOOM! • ← 20 particles 2123 • • 2124 • • • 2125``` 2126 2127**All particles glow with pink halos!** 2128 2129--- 2130 2131### Particle Details 2132 2133**Trail Particles**: 2134- Size: 8x8px 2135- Color: Pink radial gradient 2136- Shadow: 10px + 20px glow layers 2137- Duration: 0.5s fade 2138- Rate: 30ms throttle 2139 2140**Explosion Particles**: 2141- Size: 4-10px (random) 2142- Colors: 4 pink shades (random) 2143- Shadow: 10px + 20px glow (matches color) 2144- Duration: 0.6-1.0s (random) 2145- Pattern: Perfect circle burst 2146 2147**Flash Effect**: 2148- Size: 30x30px 2149- Color: Bright hot pink 2150- Shadow: 30px + 50px mega-glow 2151- Duration: 0.3s instant fade 2152 2153--- 2154 2155### Performance 2156 2157**Optimized for smoothness**: 2158- Trail throttled to 30ms 2159- Auto-cleanup after animations 2160- CSS hardware acceleration 2161- No memory leaks 2162- Smooth 60fps 2163 2164**Won't slow you down!** 2165 2166--- 2167 2168### Comparison 2169 2170**Before (v5.3.1)**: 2171- ✨ Emoji sparkle images 2172- Static unicode characters 2173- Limited visual impact 2174 2175**After (v5.3.2)**: 2176- Glowing pink particles 2177- Radial gradients + shadows 2178- Beautiful firework explosions 2179- Much more impressive! 2180 2181--- 2182 2183### Only Pink Theme 2184 2185**These effects only appear**: 2186- On `.calendar-theme-pink` elements 2187- Other themes unaffected 2188- Pure pink magic! 2189 2190--- 2191 2192## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨ 2193 2194### ✨ Added: MySpace-Style Sparkle Trail! 2195- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!) 2196- **Toned down:** Reduced glow effects for better taste 2197- **Added:** Sparkles appear on cell hover 2198- **Added:** Sparkles on event hover (left and right sides!) 2199- **Added:** Sparkles on today's cell corners 2200- **Added:** Sparkles on navigation buttons 2201- **Added:** Sparkles in calendar header 2202- **Result:** Pure nostalgic MySpace magic! ✨ 2203 2204### MySpace Sparkle Cursor Trail 2205 2206**The classic effect from 2006!** 2207- Sparkles follow your cursor as you move 2208- Random sizes (12-22px) 2209- Random slight offsets for natural feel 2210- Float up and fade out animation 2211- Throttled to 50ms (smooth, not laggy) 2212- Only on pink theme calendars 2213 2214``` 2215 ✨ 2216 ✨ ✨ 2217✨ → ✨ (cursor trail) 2218 ✨ ✨ 2219 ✨ 2220``` 2221 2222**Pure nostalgia!** 2223 2224--- 2225 2226### Sparkles Everywhere 2227 2228**Calendar cells**: 2229- Hover over any day → ✨ floats up 2230- Smooth 1.5s animation 2231- Centered sparkle 2232 2233**Event items**: 2234- Hover → ✨ on left side 2235- Hover → ✨ on right side 2236- Staggered animations (0.4s delay) 2237- Continuous twinkling 2238 2239**Today's cell**: 2240- ✨ in top-right corner (continuous) 2241- ✨ in bottom-left corner (offset timing) 2242- Always sparkling! 2243 2244**Navigation buttons**: 2245- Hover on < or > → ✨ appears top-right 2246- One-time float animation 2247 2248**Calendar header**: 2249- ✨ on left side (continuous) 2250- ✨ on right side (offset 1s) 2251- Always twinkling 2252 2253--- 2254 2255### Toned Down Glows 2256 2257**Before (v5.3.0)**: TOO MUCH GLOW! 2258- 50px shadows 2259- 4-layer effects 2260- Overwhelming 2261 2262**After (v5.3.1)**: Just right! 2263- 8-15px max shadows (subtle) 2264- 2-layer effects 2265- Professional with personality 2266 2267**Glow reductions**: 2268- Today shimmer: 35px → 12px 2269- Today hover: 50px → 15px 2270- Event glow: 18px → 6px 2271- Badge pulse: 25px → 8px 2272- Container glow: 20px → 8px 2273 2274**Much more tasteful!** 2275 2276--- 2277 2278### Sparkle Animations 2279 2280**sparkle-twinkle** (0.8s): 2281``` 2282Opacity: 0 → 1 → 1 → 0 2283Scale: 0 → 1 → 1 → 0 2284Rotation: 0° → 180° → 360° 2285``` 2286 2287**sparkle-float** (1.5s): 2288``` 2289Moves up: 0px → -50px 2290Opacity: 0 → 1 → 1 → 0 2291Scale: 0 → 1 → 0.8 → 0 2292``` 2293 2294**Pure MySpace magic!** ✨ 2295 2296--- 2297 2298### Where Sparkles Appear 2299 2300✅ **Cursor trail** (continuous while moving) 2301✅ **Calendar cells** (on hover) 2302✅ **Event items** (on hover, left + right) 2303✅ **Today's cell** (continuous, corners) 2304✅ **Navigation buttons** (on hover) 2305✅ **Calendar header** (continuous, sides) 2306 2307**Sparkles EVERYWHERE!** ✨✨✨ 2308 2309--- 2310 2311### Performance 2312 2313**Cursor trail**: 2314- Throttled to 50ms 2315- Auto-cleanup after 1s 2316- No memory leaks 2317- Smooth 60fps 2318 2319**CSS animations**: 2320- Hardware accelerated 2321- No JavaScript overhead (except cursor) 2322- Efficient transforms 2323 2324**Won't slow down your browser!** 2325 2326--- 2327 2328### Pure Nostalgia 2329 2330**Remember MySpace profiles?** 2331- Glitter graphics ✨ 2332- Sparkle cursors ✨ 2333- Auto-play music (ok, we didn't add that) 2334- Animated GIF backgrounds 2335- Comic Sans everywhere 2336 2337**We brought back the sparkles!** ✨ 2338 2339--- 2340 2341### Theme Comparison 2342 2343**Other themes**: Professional and clean 2344**Pink theme**: ✨ SPARKLES EVERYWHERE ✨ 2345 2346**Only pink theme gets the magic!** 2347 2348--- 2349 2350## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨ 2351 2352### Added: Pink Theme Gets BLING! 2353- **Added:** Shimmering animation for today's cell 2354- **Added:** Sparkling text effect on today's date 2355- **Added:** Glowing pulse for event bars 2356- **Added:** Gradient shimmer on headers 2357- **Added:** Extra glow on hover effects 2358- **Added:** Pulsing urgent badge for past due items 2359- **Result:** Pink theme is now FABULOUS! ✨ 2360 2361### Shimmer Effects 2362 2363**Today's Cell**: 2364- Continuous shimmer animation (2 second loop) 2365- Multi-layer glow effect 2366- Pink and hot pink overlapping shadows 2367- Pulses from subtle to intense 2368- Extra sparkle on hover 2369 2370**Today's Date Number**: 2371- Sparkle animation (1.5 second loop) 2372- Text shadow glow effect 2373- Slight scale pulse (100% → 105%) 2374- Pink to hot pink shadow transition 2375 2376### Glow Effects 2377 2378**Event Bars**: 2379- Continuous glow pulse (2 second loop) 2380- Uses event's own color 2381- Adds pink accent glow layer 2382- Creates depth and dimension 2383 2384**Event Items**: 2385- Subtle base glow 2386- Enhanced glow on hover 2387- Slight slide animation on hover 2388- Professional yet playful 2389 2390### Gradient Shimmer 2391 2392**Headers**: 2393- Animated gradient background 2394- 3-color pink gradient flow 2395- Smooth 3-second animation 2396- Creates movement and life 2397- Applies to calendar header and event list header 2398 2399### Badge Effects 2400 2401**TODAY Badge**: 2402- Sparkle animation 2403- Synchronized with today's date 2404- Extra prominence 2405 2406**PAST DUE Badge**: 2407- Urgent pulsing effect (1 second loop) 2408- Orange glow intensifies 2409- Draws attention to urgent items 2410- Faster pulse for urgency 2411 2412### Container Bling 2413 2414**Main Container**: 2415- Multi-layer pink glow 2416- Soft outer shadow 2417- Creates floating effect 2418- Subtle but elegant 2419 2420### Animation Details 2421 2422**pink-shimmer** (2s loop): 2423``` 2424Start: Subtle 5px glow 2425Peak: Intense 35px multi-layer glow 2426End: Back to subtle 2427``` 2428 2429**pink-sparkle** (1.5s loop): 2430``` 2431Start: Base glow + scale 1.0 2432Peak: Intense glow + scale 1.05 2433End: Back to base 2434``` 2435 2436**pink-glow-pulse** (2s loop): 2437``` 2438Start: Small glow (3px, 6px) 2439Peak: Large glow (6px, 12px, 18px) 2440End: Back to small 2441``` 2442 2443**pink-gradient-shimmer** (3s loop): 2444``` 2445Gradient flows across element 2446Creates wave effect 2447Smooth continuous motion 2448``` 2449 2450**pink-pulse-urgent** (1s loop - faster!): 2451``` 2452Start: Orange glow 5px 2453Peak: Orange glow 25px (intense) 2454End: Back to 5px 2455``` 2456 2457### Visual Experience 2458 2459**Today's Cell**: 2460``` 2461┌──┬──┬──┬──┬──┬──┬──┐ 2462│ │ │ ✨ │ │ │ │ │ ← Shimmers constantly 2463│ │ │[9]│ │ │ │ │ ← Sparkles 2464│ │ │ ✨ │ │ │ │ │ ← Glows and pulses 2465└──┴──┴──┴──┴──┴──┴──┘ 2466``` 2467 2468**Event Bars**: 2469``` 2470━━━━━━━ ← Glows and pulses 2471━━━━━━━ ← Each bar animated 2472━━━━━━━ ← Creates rhythm 2473``` 2474 2475**Headers**: 2476``` 2477╔═════════════════════╗ 2478║ ~~~~~~~~~~ ║ ← Gradient flows 2479║ February 2026 ║ ← Shimmer effect 2480╚═════════════════════╝ 2481``` 2482 2483### Theme Comparison 2484 2485**Before (v5.2.8)**: 2486- Pink colors 2487- Static elements 2488- Standard shadows 2489 2490**After (v5.3.0)**: 2491- Pink colors ✓ 2492- Animated shimmer ✨ 2493- Sparkling effects 2494- Glowing pulses ✨ 2495- Moving gradients 2496- BLING! 2497 2498### Performance 2499 2500**All animations**: 2501- Hardware accelerated (transform, opacity) 2502- Smooth 60fps 2503- CSS animations (no JavaScript) 2504- Minimal CPU usage 2505- Disabled in reduced-motion preference 2506 2507### Only for Pink Theme 2508 2509**Effects only apply when**: 2510```css 2511.calendar-theme-pink 2512``` 2513 2514**Other themes unaffected**: 2515- Matrix stays Matrix 2516- Professional stays Professional 2517- Purple stays Purple 2518- Wiki stays clean 2519 2520**Pink gets all the bling!** ✨ 2521 2522### Use Cases 2523 2524**Perfect for**: 2525- Celebrating occasions 2526- Fun team calendars 2527- Personal style expression 2528- Standing out 2529- Making calendar time fabulous 2530 2531**Not just pink, but BLING pink!** ✨ 2532 2533## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS 2534 2535### Fixed: Today's Date Box Now Uses Theme Colors 2536- **Fixed:** Today's day number box now uses theme border color 2537- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light) 2538- **Result:** Today box matches the theme perfectly! 2539 2540### The Issue 2541 2542Today's date had a hardcoded green box: 2543 2544**In style.css**: 2545```css 2546.cal-today .day-num { 2547 background: #008800; /* Hardcoded green! */ 2548 color: white; 2549} 2550``` 2551 2552**Didn't adapt to themes at all!** 2553 2554### The Fix 2555 2556**Now uses theme colors**: 2557```php 2558// Today's day number 2559if ($isToday) { 2560 background: $themeStyles['border'], // Theme's accent color! 2561 color: (professional theme) ? white : bg color 2562} 2563``` 2564 2565### Theme Examples 2566 2567**Matrix Theme**: 2568- Box background: `#00cc07` (matrix green) 2569- Text color: `#242424` (dark background) 2570 2571**Purple Theme**: 2572- Box background: `#9b59b6` (purple) 2573- Text color: `#2a2030` (dark background) 2574 2575**Professional Theme**: 2576- Box background: `#4a90e2` (blue) 2577- Text color: `#ffffff` (white text) 2578 2579**Pink Theme**: 2580- Box background: `#ff1493` (hot pink) 2581- Text color: `#1a0d14` (dark background) 2582 2583**Wiki Theme**: 2584- Box background: Template's `__border__` color 2585- Text color: Template's `__background_site__` color 2586 2587### Visual Result 2588 2589**Matrix Theme**: 2590``` 2591┌──┬──┬──┬──┬──┬──┬──┐ 2592│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2593└──┴──┴──┴──┴──┴──┴──┘ 2594 ↑ 2595 Green box (#00cc07) 2596``` 2597 2598**Professional Theme**: 2599``` 2600┌──┬──┬──┬──┬──┬──┬──┐ 2601│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2602└──┴──┴──┴──┴──┴──┴──┘ 2603 ↑ 2604 Blue box (#4a90e2) 2605``` 2606 2607**Wiki Theme**: 2608``` 2609┌──┬──┬──┬──┬──┬──┬──┐ 2610│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2611└──┴──┴──┴──┴──┴──┴──┘ 2612 ↑ 2613 Template border color 2614``` 2615 2616### Implementation 2617 2618**Inline styles added**: 2619- Background uses `$themeStyles['border']` (theme accent) 2620- Text color uses `$themeStyles['bg']` for contrast 2621- Special case: Professional theme uses white text 2622- All with `!important` to override CSS 2623 2624**CSS cleaned up**: 2625- Removed hardcoded `#008800` background 2626- Removed hardcoded `white` color 2627- Kept structural styles (border-radius, font-weight) 2628 2629### Benefits 2630 2631**Theme Consistency**: 2632- Today box matches theme accent color 2633- Proper contrast with background 2634- Professional appearance 2635 2636**Automatic Adaptation**: 2637- Works with all themes 2638- Works with custom wiki template colors 2639- No manual adjustment needed 2640 2641**Visual Harmony**: 2642- Border color used throughout theme 2643- Today box reinforces theme identity 2644- Consistent design language 2645 2646## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH 2647 2648### Fixed: Table Grid Background Now Matches Cells 2649- **Found:** `grid_bg` was using `__background_alt__` (different from cells!) 2650- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells) 2651- **Result:** Table background no longer shows through cells! 2652 2653### The Layer Problem 2654 2655The table itself had a DIFFERENT background color than its cells! 2656 2657**Before (v5.2.6)**: 2658```php 2659'grid_bg' => __background_alt__, // Table background (#e8e8e8) 2660'cell_bg' => __background_site__, // Cell background (#f5f5f5) 2661``` 2662 2663**The table background was showing THROUGH the cells!** 2664 2665### Why This Happened 2666 2667**Visual layers**: 2668``` 2669Table Element 2670├─ background: __background_alt__ (#e8e8e8) ← Different! 2671└─ Cells 2672 └─ background: __background_site__ (#f5f5f5) ← Different! 2673 2674The table background shows through any gaps! 2675``` 2676 2677### The Fix 2678 2679**After (v5.2.7)**: 2680```php 2681'grid_bg' => __background_site__, // Table background (#f5f5f5) ✓ 2682'cell_bg' => __background_site__, // Cell background (#f5f5f5) ✓ 2683``` 2684 2685**NOW THEY MATCH!** 2686 2687### Where grid_bg Is Used 2688 2689The table element itself: 2690```html 2691<table style="background: __background_alt__"> ← Was showing through! 2692 <tbody> 2693 <tr> 2694 <td style="background: __background_site__">1</td> 2695 </tr> 2696 </tbody> 2697</table> 2698``` 2699 2700Even with cell inline styles, the TABLE background shows through! 2701 2702### All Background Sources Now Unified 2703 2704**Everything now uses __background_site__**: 2705- `bg` → __background_site__ ✓ 2706- `header_bg` → __background_site__ ✓ 2707- `grid_bg` → __background_site__ ✓ (JUST FIXED!) 2708- `cell_bg` → __background_site__ ✓ 2709 2710**Perfect consistency!** 2711 2712### Why It Was Different 2713 2714**Originally the grid was meant to show borders**: 2715- `grid_bg` was `__background_alt__` (slightly different) 2716- Created visual separation between cells 2717- But with transparent/thin cells, it showed through! 2718 2719**Now unified for consistency!** 2720 2721### Visual Result 2722 2723**Before (layers visible)**: 2724``` 2725┌─────────────────┐ 2726│ Grid (#e8e8e8) │ ← Showing through! 2727│ ┌──┬──┬──┐ │ 2728│ │ │ │ │ │ ← Cells (#f5f5f5) 2729│ └──┴──┴──┘ │ 2730└─────────────────┘ 2731``` 2732 2733**After (unified)**: 2734``` 2735┌─────────────────┐ 2736│ Grid (#f5f5f5) │ ← Same color! 2737│ ┌──┬──┬──┐ │ 2738│ │ │ │ │ │ ← Cells (#f5f5f5) 2739│ └──┴──┴──┘ │ 2740└─────────────────┘ 2741Perfect match! 2742``` 2743 2744### Complete Background Mapping 2745 2746**All using __background_site__ now**: 2747- Main container background 2748- Left panel background 2749- Right panel background 2750- Eventlist background 2751- Calendar grid background ← JUST FIXED 2752- Calendar cell backgrounds 2753- Event item backgrounds 2754- Clock header background 2755- Search input background 2756- Past events toggle 2757 2758**EVERYTHING UNIFIED!** 2759 2760## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS 2761 2762### Fixed: Removed Container Backgrounds Showing Through 2763- **Found:** `.calendar-compact-container` had `background: #ffffff;` 2764- **Found:** `.calendar-compact-left` had `background: #fafafa;` 2765- **Found:** `.calendar-compact-right` had `background: #ffffff;` 2766- **Found:** `.event-search-input-inline` had `background: white;` 2767- **Found:** `.past-events-toggle` had `background: #f5f5f5;` 2768- **Result:** Container backgrounds no longer show through cells! 2769 2770### The Container Problem 2771 2772The parent containers had hardcoded backgrounds that were showing through! 2773 2774**Container backgrounds (lines 4-91)**: 2775```css 2776.calendar-compact-container { 2777 background: #ffffff; /* ← Main container! */ 2778} 2779 2780.calendar-compact-left { 2781 background: #fafafa; /* ← Left panel (calendar side)! */ 2782} 2783 2784.calendar-compact-right { 2785 background: #ffffff; /* ← Right panel (events side)! */ 2786} 2787``` 2788 2789**These were showing through the cells and events!** 2790 2791### Why Containers Matter 2792 2793Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through: 2794 2795``` 2796Container (#fafafa) ← Showing through! 2797 └─ Table Cell (#f5f5f5) ← Transparent areas 2798 └─ Content 2799``` 2800 2801### All Backgrounds Removed 2802 2803**v5.2.6 removes**: 2804- `.calendar-compact-container` background 2805- `.calendar-compact-left` background 2806- `.calendar-compact-right` background 2807- `.event-search-input-inline` background 2808- `.past-events-toggle` background & hover 2809 2810**v5.2.5 removed**: 2811- `.calendar-compact-grid tbody td` background 2812- `.calendar-compact-grid thead th` background 2813 2814**v5.2.4 removed**: 2815- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds 2816 2817**v5.2.3 removed**: 2818- `.event-compact-item` background 2819 2820**ALL container and element backgrounds eliminated!** 2821 2822### What Should Work Now 2823 2824**Calendar cells**: No container background showing through ✓ 2825**Event items**: No container background showing through ✓ 2826**Search bar**: Uses template color ✓ 2827**Past events toggle**: Uses template color ✓ 2828 2829### Complete List of Fixes 2830 2831**Containers**: 2832- Main container ✓ 2833- Left panel ✓ 2834- Right panel ✓ 2835 2836**Elements**: 2837- Table cells ✓ 2838- Event items ✓ 2839- Search input ✓ 2840- Past events toggle ✓ 2841 2842**EVERYTHING removed!** 2843 2844### Critical: Clear Caches 2845 2846**Must clear caches or won't work**: 28471. Hard refresh: Ctrl+Shift+R (5 times!) 28482. Clear DokuWiki cache 28493. Close browser completely 28504. Reopen and test 2851 2852**CSS caching is EXTREMELY persistent!** 2853 2854## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS 2855 2856### Fixed: Removed Hardcoded Backgrounds from Table Cells 2857- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`! 2858- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`! 2859- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`! 2860- **Fixed:** Removed ALL hardcoded backgrounds from table CSS 2861- **Result:** Calendar table cells finally use template colors! 2862 2863### The REAL Culprits 2864 2865The generic table CSS was overriding everything! 2866 2867**In style.css (lines 307-356)**: 2868```css 2869.calendar-compact-grid thead th { 2870 background: #f8f8f8; /* ← Header cells hardcoded! */ 2871} 2872 2873.calendar-compact-grid tbody td { 2874 background: #ffffff; /* ← ALL table cells hardcoded! */ 2875} 2876 2877.calendar-compact-grid tbody td:hover { 2878 background: #f0f7ff; /* ← Hover state hardcoded! */ 2879} 2880``` 2881 2882**These apply to ALL `<td>` and `<th>` elements in the calendar table!** 2883 2884### Why This Was the Last One 2885 2886**CSS Specificity Order**: 28871. `.calendar-compact-grid tbody td` (generic - applies to ALL cells) 28882. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells) 28893. Inline styles (should win but didn't) 2890 2891**We removed the specific ones (v5.2.4), but the generic one was still there!** 2892 2893### What We've Removed 2894 2895**v5.2.3**: 2896- `.event-compact-item` background 2897- `.event-compact-item:hover` background 2898 2899**v5.2.4**: 2900- `.cal-empty` background & hover 2901- `.cal-today` background & hover 2902- `.cal-has-events` background & hover 2903 2904**v5.2.5 (FINAL)**: 2905- `.calendar-compact-grid tbody td` background ✓ 2906- `.calendar-compact-grid tbody td:hover` background ✓ 2907- `.calendar-compact-grid thead th` background ✓ 2908 2909**All CSS background overrides ELIMINATED!** 2910 2911### Why It Took 5 Versions 2912 2913**CSS had layers of hardcoded backgrounds**: 2914 2915``` 2916Layer 1: Table cells (.calendar-compact-grid tbody td) 2917 ↓ Overrode inline styles 2918Layer 2: Cell states (.cal-today, .cal-empty, etc.) 2919 ↓ Overrode table cells 2920Layer 3: Event items (.event-compact-item) 2921 ↓ Overrode inline styles 2922 2923ALL had to be removed! 2924``` 2925 2926**We kept finding more specific CSS, but the base table CSS was there all along!** 2927 2928### Visual Result 2929 2930**NOW everything matches**: 2931``` 2932Calendar Table: 2933┌──┬──┬──┬──┬──┬──┬──┐ 2934│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__ 2935├──┼──┼──┼──┼──┼──┼──┤ 2936│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__ 2937├──┼──┼──┼──┼──┼──┼──┤ 2938│ 8│ 9│10│11│12│13│14│ ← All: __background_site__ 2939└──┴──┴──┴──┴──┴──┴──┘ 2940 2941Sidebar Events: 2942┌────────────────────────┐ 2943│ Event │ ← __background_site__ 2944│ Event │ ← __background_site__ 2945└────────────────────────┘ 2946 2947FINALLY ALL MATCHING! ✓ 2948``` 2949 2950### Complete List of Removed CSS 2951 2952**ALL hardcoded backgrounds removed**: 2953- `.event-compact-item` background 2954- `.event-compact-item:hover` background 2955- `.cal-empty` background & hover 2956- `.cal-today` background & hover 2957- `.cal-has-events` background & hover 2958- `.calendar-compact-grid tbody td` background ← NEW 2959- `.calendar-compact-grid tbody td:hover` background ← NEW 2960- `.calendar-compact-grid thead th` background ← NEW 2961 2962**Every single CSS background override is GONE!** 2963 2964### Testing Steps 2965 2966**After installing v5.2.5**: 2967 29681. **Clear browser cache**: Ctrl+Shift+R (3 times!) 29692. **Clear DokuWiki cache**: Click the button 29703. **Close browser completely**: Restart it 29714. **Visit page**: Should finally see matching backgrounds 2972 2973**CSS is EXTREMELY sticky - may need to clear multiple times!** 2974 2975### This Should Be It 2976 2977**No more CSS overrides exist** (we've checked the entire file): 2978- Table cells ✓ Fixed 2979- Cell states ✓ Fixed 2980- Event items ✓ Fixed 2981- Headers ✓ Fixed 2982- Hover states ✓ Fixed 2983 2984**All backgrounds now come from inline styles using template colors!** 2985 2986## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS 2987 2988### Fixed: Removed Hardcoded Backgrounds from Calendar Cells 2989- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`! 2990- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS 2991- **Result:** Calendar cells now use template colors! 2992 2993### The Second Culprit 2994 2995MORE hardcoded backgrounds in the CSS file! 2996 2997**In style.css (lines 359-382)**: 2998```css 2999.cal-empty { 3000 background: #fafafa !important; /* ← Overriding inline styles! */ 3001} 3002 3003.cal-today { 3004 background: #e8f5e9 !important; /* ← Overriding today cell! */ 3005} 3006 3007.cal-today:hover { 3008 background: #c8e6c9 !important; /* ← Overriding hover! */ 3009} 3010 3011.cal-has-events { 3012 background: #fffbf0; /* ← Overriding event cells! */ 3013} 3014 3015.cal-has-events:hover { 3016 background: #fff4d9; /* ← Overriding hover! */ 3017} 3018``` 3019 3020**These were ALL overriding the inline styles!** 3021 3022### The Fix 3023 3024**Removed all hardcoded backgrounds**: 3025```css 3026.cal-empty { 3027 /* background removed - inline style handles this */ 3028 cursor: default !important; 3029} 3030 3031.cal-today { 3032 /* background removed - inline style handles this */ 3033} 3034 3035.cal-has-events { 3036 /* background removed - inline style handles this */ 3037} 3038 3039/* Hover states also removed */ 3040``` 3041 3042### What Was Overridden 3043 3044**v5.2.3 fixed**: 3045- Event items in sidebar ✓ 3046 3047**v5.2.4 fixes**: 3048- Calendar day cells ✓ 3049- Today cell ✓ 3050- Empty cells ✓ 3051- Cells with events ✓ 3052- All hover states ✓ 3053 3054### Why This Kept Happening 3055 3056**CSS had hardcoded backgrounds everywhere**: 30571. Event items: `#ffffff` (fixed in v5.2.3) 30582. Calendar cells: Multiple colors (fixed in v5.2.4) 30593. **All with `!important` flags!** 3060 3061**The inline styles couldn't override them!** 3062 3063### Visual Result 3064 3065**Now ALL backgrounds match**: 3066``` 3067Calendar Grid: 3068┌──┬──┬──┬──┬──┬──┬──┐ 3069│ │ │ │ │ │ │ │ ← All use __background_site__ 3070├──┼──┼──┼──┼──┼──┼──┤ 3071│ │██│ │ │ │ │ │ ← Today uses __background_neu__ 3072├──┼──┼──┼──┼──┼──┼──┤ 3073│ │ │ │ │ │ │ │ ← All match template 3074└──┴──┴──┴──┴──┴──┴──┘ 3075 3076Sidebar Events: 3077┌────────────────────────┐ 3078│ Event │ ← Uses __background_site__ 3079│ Event │ ← Uses __background_site__ 3080└────────────────────────┘ 3081 3082Perfect consistency! 3083``` 3084 3085### CSS Removed 3086 3087**Calendar cells**: 3088- `.cal-empty` background 3089- `.cal-empty:hover` background 3090- `.cal-today` background 3091- `.cal-today:hover` background 3092- `.cal-has-events` background 3093- `.cal-has-events:hover` background 3094 3095**All gone!** ✓ 3096 3097### Important: Clear Caches Again! 3098 3099After installing v5.2.4: 3100 31011. **Hard refresh browser**: Ctrl+Shift+R (twice!) 31022. **Clear DokuWiki cache**: Admin → Clear Cache 31033. **May need to restart browser**: To clear CSS cache 3104 3105**Old CSS is VERY sticky!** 3106 3107### Why It Took So Long 3108 3109**Multiple CSS overrides**: 3110- Event items (v5.2.3) ✓ Fixed 3111- Calendar cells (v5.2.4) ✓ Fixed 3112- Each with different classes 3113- Each with `!important` 3114- Hidden throughout CSS file 3115 3116**Found them all now!** 3117 3118## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS 3119 3120### Fixed: Removed Hardcoded Backgrounds from CSS 3121- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles! 3122- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS 3123- **Result:** Event backgrounds now properly use template colors! 3124 3125### The Root Cause 3126 3127The CSS file was overriding the inline styles with hardcoded white backgrounds! 3128 3129**In style.css (lines 599-616)**: 3130```css 3131.event-compact-item { 3132 background: #ffffff; /* ← This was overriding inline styles! */ 3133} 3134 3135.event-compact-item:hover { 3136 background: #f8f9fa; /* ← And this on hover! */ 3137} 3138``` 3139 3140**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade! 3141 3142### The Fix 3143 3144**Removed hardcoded backgrounds from CSS**: 3145```css 3146.event-compact-item { 3147 /* background removed - set via inline style with template colors */ 3148 display: flex; 3149 /* ... other styles ... */ 3150} 3151 3152.event-compact-item:hover { 3153 box-shadow: 0 1px 3px rgba(0,0,0,0.08); 3154 /* background removed - inline style handles this */ 3155} 3156``` 3157 3158### Why This Was So Difficult to Find 3159 3160**CSS Specificity & Cascade**: 31611. Inline styles with `!important` should win 31622. But CSS that comes after can still apply 31633. The hardcoded `background: #ffffff` was silently overriding 31644. All the PHP code was correct - it was the CSS! 3165 3166**What We Were Doing**: 3167- ✓ Reading template colors correctly 3168- ✓ Setting `cell_bg` to `__background_site__` correctly 3169- ✓ Applying inline styles with `!important` correctly 3170- ✗ CSS file was overriding everything! 3171 3172### What Was Affected 3173 3174**Event items in**: 3175- Main calendar sidebar 3176- Standalone event list 3177- Sidebar widget 3178- All event displays 3179 3180**All had white backgrounds hardcoded in CSS!** 3181 3182### Now Working 3183 3184**Events use template colors**: 3185```html 3186<div class="event-compact-item" 3187 style="background: #f5f5f5 !important; ..."> 3188 ← Now this inline style actually works! 3189</div> 3190``` 3191 3192**No CSS override** ✓ 3193 3194### Testing 3195 3196To verify this works: 31971. Clear browser cache (important!) 31982. Clear DokuWiki cache 31993. Reload page 32004. Events should now match eventlist background 3201 3202**Browser caching can make old CSS persist!** 3203 3204### Visual Result 3205 3206**All backgrounds now matching**: 3207``` 3208┌────────────────────────────┐ 3209│ Eventlist (#f5f5f5) │ ← Template color 3210├────────────────────────────┤ 3211│ Event (#f5f5f5) │ ← Template color (was #ffffff) 3212├────────────────────────────┤ 3213│ Event (#f5f5f5) │ ← Template color (was #ffffff) 3214└────────────────────────────┘ 3215 3216Perfect match! 3217``` 3218 3219### Why Everything Else Worked 3220 3221**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds: 3222- They only had inline styles ✓ 3223- Inline styles worked correctly ✓ 3224- Only event items had the CSS override ✗ 3225 3226### Important Notes 3227 3228**Clear caches**: 3229- Browser cache (Ctrl+Shift+R or Cmd+Shift+R) 3230- DokuWiki cache (Admin → Clear Cache) 3231- Old CSS may be cached! 3232 3233**This was the culprit all along!** 3234 3235## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND 3236 3237### Fixed: Clock Area Now Matches Event Cells 3238- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`) 3239- **Result:** Clock/Today header matches event cell backgrounds! 3240 3241### The Issue 3242 3243The clock area (Today header) was using a different background: 3244 3245**Before (v5.2.1)**: 3246```php 3247'header_bg' => __background_alt__, // Different color (gray #e8e8e8) 3248'cell_bg' => __background_site__, // Event cells (#f5f5f5) 3249``` 3250 3251**After (v5.2.2)**: 3252```php 3253'header_bg' => __background_site__, // Same as cells (#f5f5f5) ✓ 3254'cell_bg' => __background_site__, // Event cells (#f5f5f5) ✓ 3255``` 3256 3257### What's the Clock Area? 3258 3259The clock/Today header in the sidebar: 3260``` 3261┌────────────────────────────┐ 3262│ 3:45:23 PM │ ← Clock area (header_bg) 3263│ ️ --° | Sun, Feb 9, 2026 │ 3264└────────────────────────────┘ 3265``` 3266 3267### All Backgrounds Now Unified 3268 3269**Everything now uses __background_site__**: 3270- Eventlist background ✓ 3271- Calendar cells ✓ 3272- Event items ✓ 3273- Clock/Today header ✓ 3274- Sidebar widget ✓ 3275- All backgrounds match! ✓ 3276 3277### Visual Result 3278 3279**Complete consistency**: 3280``` 3281┌────────────────────────────┐ 3282│ 3:45:23 PM │ ← Same background 3283│ ️ --° | Sun, Feb 9, 2026 │ 3284├────────────────────────────┤ 3285│ Meeting at 2pm │ ← Same background 3286│ Description... │ 3287├────────────────────────────┤ 3288│ Another event │ ← Same background 3289│ More details... │ 3290└────────────────────────────┘ 3291 3292All using __background_site__ (#f5f5f5) 3293``` 3294 3295**Perfect visual harmony!** 3296 3297## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND 3298 3299### Fixed: Calendar Cells Now Match Eventlist Background 3300- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`) 3301- **Result:** Calendar cells now match the eventlist background perfectly! 3302 3303### The Real Issue 3304 3305The eventlist was showing the CORRECT background color all along! 3306 3307**Eventlist was using**: 3308- `bg` → `__background_site__` ✓ (This was correct!) 3309 3310**Calendar cells were using**: 3311- `cell_bg` → `__background__` ✗ (This was wrong!) 3312 3313**They didn't match!** 3314 3315### The Correct Fix 3316 3317**Now everything uses __background_site__**: 3318```php 3319'bg' => __background_site__, // Eventlist (was already correct) 3320'cell_bg' => __background_site__, // Cells (now fixed to match) 3321``` 3322 3323### Why __background_site__? 3324 3325The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background: 3326 3327``` 3328Page Layout: 3329┌────────────────────────────────────┐ 3330│ __background_site__ (page bg) │ ← This is where calendar lives 3331│ │ 3332│ ┌──────────────────────────────┐ │ 3333│ │ __background__ (content bg) │ │ ← Wiki article content 3334│ │ │ │ 3335│ └──────────────────────────────┘ │ 3336│ │ 3337└────────────────────────────────────┘ 3338``` 3339 3340**Calendar should match the page background, not the content background!** 3341 3342### Template Example 3343 3344Typical DokuWiki template: 3345```ini 3346__background_site__ = "#f5f5f5" (Light gray - page background) 3347__background__ = "#ffffff" (White - content area) 3348``` 3349 3350**Before (v5.2.0)**: 3351- Eventlist: `#f5f5f5` (light gray) ✓ Correct 3352- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match 3353 3354**After (v5.2.1)**: 3355- Eventlist: `#f5f5f5` (light gray) ✓ Correct 3356- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED! 3357 3358### All Backgrounds Now Unified 3359 3360**Everything now uses __background_site__**: 3361- Eventlist sidebar background ✓ 3362- Main calendar background ✓ 3363- Calendar day cells ✓ 3364- Sidebar widget ✓ 3365- Event items ✓ 3366- Input fields ✓ 3367- Buttons ✓ 3368 3369**All perfectly matched to the page background!** 3370 3371### Why Version 5.2.0 Was Wrong 3372 3373I 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. 3374 3375**The eventlist knew what it was doing all along!** The cells just needed to catch up. 3376 3377## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS 3378**Note**: This version went the wrong direction. See v5.2.1 for the correct fix. 3379 3380### Fixed: All Backgrounds Now Use __background__ 3381- **Fixed:** `bg` now uses `__background__` instead of `__background_site__` 3382- **Fixed:** Eventlist, calendar cells, and sidebar all match now 3383- **Result:** Completely unified background throughout! 3384 3385### The Issue 3386 3387Different parts of the calendar were using different background sources: 3388 3389**Before (v5.1.9)**: 3390```php 3391'bg' => __background_site__ // Eventlist background (outer page) 3392'cell_bg' => __background__ // Cell backgrounds (content area) 3393``` 3394 3395**These are different colors!** 3396- `__background_site__` = Outer page wrapper (often gray) 3397- `__background__` = Main content area (often white) 3398 3399### The Fix 3400 3401**After (v5.2.0)**: 3402```php 3403'bg' => __background__ // Eventlist background ✓ 3404'cell_bg' => __background__ // Cell backgrounds ✓ 3405``` 3406 3407**Both use the same source!** 3408 3409### What Uses 'bg' 3410 3411The `bg` color is used for: 3412- Eventlist sidebar background 3413- Main calendar container 3414- Sidebar widget background 3415- Form backgrounds 3416- Event dialogs 3417 3418### What Uses 'cell_bg' 3419 3420The `cell_bg` color is used for: 3421- Calendar day cells 3422- Event item backgrounds 3423- Input field backgrounds 3424- Button backgrounds 3425 3426### Why This Matters 3427 3428**Template color hierarchy**: 3429``` 3430__background_site__ → Outer page/body (e.g., #f5f5f5 light gray) 3431__background__ → Main content area (e.g., #ffffff white) 3432__background_alt__ → Sections/headers 3433__background_neu__ → Highlights 3434``` 3435 3436**We want all calendar backgrounds to match the main content area!** 3437 3438### Visual Comparison 3439 3440**Before (v5.1.9)**: Mismatched backgrounds 3441``` 3442┌────────────────────────────────┐ 3443│ Eventlist (gray #f5f5f5) │ ← __background_site__ 3444└────────────────────────────────┘ 3445 3446┌────────────────────────────────┐ 3447│ Calendar │ 3448│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 3449│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 3450│ └──┴──┴──┴──┴──┴──┴──┘ │ 3451└────────────────────────────────┘ 3452Different colors - looks inconsistent 3453``` 3454 3455**After (v5.2.0)**: Unified backgrounds 3456``` 3457┌────────────────────────────────┐ 3458│ Eventlist (white #fff) │ ← __background__ 3459└────────────────────────────────┘ 3460 3461┌────────────────────────────────┐ 3462│ Calendar │ 3463│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 3464│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 3465│ └──┴──┴──┴──┴──┴──┴──┘ │ 3466└────────────────────────────────┘ 3467Same color - perfectly consistent! 3468``` 3469 3470### Template Examples 3471 3472**Light Template**: 3473```ini 3474__background_site__ = "#f5f5f5" (light gray) 3475__background__ = "#ffffff" (white) 3476``` 3477 3478**Before**: Eventlist gray, cells white 3479**After**: Eventlist white, cells white ✓ 3480 3481**Dark Template**: 3482```ini 3483__background_site__ = "#1a1a1a" (very dark) 3484__background__ = "#2d2d2d" (dark) 3485``` 3486 3487**Before**: Eventlist very dark, cells dark 3488**After**: Eventlist dark, cells dark ✓ 3489 3490### Benefits 3491 3492**Visual Consistency**: 3493- All backgrounds match 3494- Clean, unified appearance 3495- Professional look 3496 3497**Correct Template Integration**: 3498- Uses content area color (not page wrapper) 3499- Matches wiki content area 3500- Proper color hierarchy 3501 3502**Works Everywhere**: 3503- Light templates ✓ 3504- Dark templates ✓ 3505- Custom templates ✓ 3506 3507### All Backgrounds Unified 3508 3509**Now using __background__**: 3510- Eventlist background ✓ 3511- Calendar cells ✓ 3512- Sidebar widget ✓ 3513- Event items ✓ 3514- Input fields ✓ 3515- Buttons ✓ 3516- Dialogs ✓ 3517 3518**Perfect harmony throughout!** 3519 3520## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS 3521 3522### Fixed: Wiki Theme Event Backgrounds Not Showing 3523- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!) 3524- **Fixed:** Replaced CSS variables with actual hex colors 3525- **Result:** Event backgrounds now show correctly with template colors! 3526 3527### The Problem 3528 3529CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes! 3530 3531**Before (broken)**: 3532```php 3533'cell_bg' => 'var(--__background__, #fff)', // Doesn't work in inline styles! 3534``` 3535 3536**After (fixed)**: 3537```php 3538'cell_bg' => '#fff', // Actual hex color works! 3539``` 3540 3541### What Was Affected 3542 3543**When style.ini read successfully**: 3544- ✅ Worked fine (uses actual hex colors from file) 3545 3546**When style.ini fallback used**: 3547- ❌ Events had no background 3548- ❌ CSS variables don't work in inline styles 3549- ❌ Looked broken 3550 3551### The Fix 3552 3553**Wiki theme fallback now uses real colors**: 3554```php 3555'wiki' => [ 3556 'bg' => '#f5f5f5', // Real hex (was: var(--__background_site__)) 3557 'border' => '#ccc', // Real hex (was: var(--__border__)) 3558 'cell_bg' => '#fff', // Real hex (was: var(--__background__)) 3559 'cell_today_bg' => '#eee', // Real hex (was: var(--__background_neu__)) 3560 'text_primary' => '#333', // Real hex (was: var(--__text__)) 3561 'text_bright' => '#2b73b7', // Real hex (was: var(--__link__)) 3562 'text_dim' => '#666', // Real hex (was: var(--__text_neu__)) 3563 'grid_bg' => '#e8e8e8', // Real hex (was: var(--__background_alt__)) 3564 // ... all colors now use real hex values 3565] 3566``` 3567 3568### Why CSS Variables Don't Work 3569 3570**CSS variables work**: 3571```css 3572.some-class { 3573 background: var(--__background__, #fff); /* ✓ Works in CSS */ 3574} 3575``` 3576 3577**CSS variables DON'T work**: 3578```html 3579<div style="background: var(--__background__, #fff)"> <!-- ✗ Doesn't work --> 3580``` 3581 3582### How It Works Now 3583 3584**Priority system**: 35851. **Try reading style.ini** → Use actual template hex colors ✓ 35862. **If file not found** → Use fallback hex colors ✓ 35873. **Never use CSS variables in inline styles** ✓ 3588 3589**Both paths now work correctly!** 3590 3591### Visual Result 3592 3593**Events now have proper backgrounds**: 3594``` 3595┌──────────────────────────┐ 3596│ Meeting at 2pm │ ← White background (#fff) 3597│ Description here... │ 3598│ [✏️ Edit] [️ Delete] │ 3599└──────────────────────────┘ 3600 3601Not: 3602┌──────────────────────────┐ 3603│ Meeting at 2pm │ ← No background (broken) 3604│ Description here... │ 3605└──────────────────────────┘ 3606``` 3607 3608### Affected Areas 3609 3610**All event displays**: 3611- Main calendar events ✓ 3612- Sidebar widget events ✓ 3613- Event list items ✓ 3614- Event backgrounds ✓ 3615- Button backgrounds ✓ 3616- Input field backgrounds ✓ 3617 3618**Everything uses real colors now!** 3619 3620## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT 3621 3622### Reorganized: Better Update Tab Layout 3623- **Moved:** Current Version section to the top 3624- **Combined:** Upload and Important Notes side-by-side 3625- **Improved:** Space-efficient two-column layout 3626- **Result:** More information visible at once! 3627 3628### New Layout Order 3629 3630**Version 5.1.8**: 3631``` 36321. Current Version (at top - see what you have) 36332. Upload + Important Notes (side-by-side) 36343. Recent Changes (changelog) 36354. Backups 3636``` 3637 3638### Side-by-Side Design 3639 3640**Upload form (left 60%) + Important Notes (right 40%)**: 3641``` 3642┌──────────────────────────────────────────┐ 3643│ Current Version │ 3644│ Version: 5.1.8 │ 3645│ ✅ Permissions: OK │ 3646└──────────────────────────────────────────┘ 3647 3648┌─────────────────────┬────────────────────┐ 3649│ Upload New │ ⚠️ Important Notes │ 3650│ [Choose File] │ • Replaces files │ 3651│ ☑ Backup first │ • Config preserved │ 3652│ [Upload] [Clear] │ • Events safe │ 3653└─────────────────────┴────────────────────┘ 3654``` 3655 3656### Benefits 3657 3658**Current Version First**: 3659- See what you have immediately 3660- Check permissions at a glance 3661- Know if ready to update 3662 3663**Side-by-Side Layout**: 3664- Upload form and warnings together 3665- Read notes while choosing file 3666- More efficient use of space 3667- Less scrolling needed 3668 3669**Better Information Flow**: 36701. See current version ✓ 36712. Upload new version with notes visible ✓ 36723. Review recent changes ✓ 36734. Manage backups ✓ 3674 3675### Visual Comparison 3676 3677**Before (v5.1.7)**: 3678``` 3679Important Notes (full width) 3680↓ 3681Upload Form (full width) 3682↓ 3683Current Version 3684↓ 3685Recent Changes 3686↓ 3687Backups 3688``` 3689 3690**After (v5.1.8)**: 3691``` 3692Current Version (full width) 3693↓ 3694Upload (60%) | Notes (40%) 3695↓ 3696Recent Changes 3697↓ 3698Backups 3699``` 3700 3701**More compact, better organized!** 3702 3703### Responsive Design 3704 3705**Wide screens**: 3706- Upload and notes side-by-side 3707- Full 1200px width utilized 3708- Efficient space usage 3709 3710**Narrow screens**: 3711- Sections stack gracefully 3712- Flex layout adapts 3713- Still fully functional 3714 3715### Layout Details 3716 3717**Current Version Section**: 3718- Full width (1200px max) 3719- Shows version, author, description 3720- Permission status with icons 3721- Helpful fix commands if needed 3722 3723**Upload/Notes Section**: 3724- Flexbox layout with gap 3725- Upload: `flex:1` (grows) 3726- Notes: `flex:0 0 350px` (fixed 350px) 3727- Both have proper min-width 3728 3729**Recent Changes Section**: 3730- Full width (1200px max) 3731- Compact scrollable view 3732- Color-coded change types 3733- Last 10 versions shown 3734 3735**Backups Section**: 3736- Full width (1200px max) 3737- Manual backup button 3738- Scrollable file list 3739- All actions accessible 3740 3741### Improved Max Widths 3742 3743All sections now use `max-width:1200px` (previously 900px): 3744- Better use of wide screens 3745- Still responsive on narrow screens 3746- Consistent throughout tab 3747 3748## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR 3749 3750### Fixed: Extra Closing Brace 3751- **Fixed:** ParseError on line 1936 (extra closing brace) 3752- **Result:** Manual backup feature now works correctly! 3753 3754### What Was Wrong 3755 3756Extra `}` after the backup section: 3757 3758**Before (broken)**: 3759```php 3760echo '</div>'; 3761} // ← Extra closing brace! 3762 3763echo '<script> 3764``` 3765 3766**After (fixed)**: 3767```php 3768echo '</div>'; 3769 3770echo '<script> 3771``` 3772 3773**Manual backup feature now fully functional!** ✅ 3774 3775## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND 3776 3777### Added: Create Backup Manually Anytime 3778- **Added:** "Create Backup Now" button in Backups section 3779- **Added:** Manual backup action handler with full verification 3780- **Added:** Backups section always visible (even with no backups) 3781- **Added:** Success message showing file size and file count 3782- **Result:** Create backups anytime without needing to upload! 3783 3784### Manual Backup Button 3785 3786**New Layout**: 3787``` 3788┌─────────────────────────────────────┐ 3789│ Backups [ Create Backup Now] │ 3790├─────────────────────────────────────┤ 3791│ Backup File Size │ 3792│ calendar.backup.v5.1.6... 243 KB │ 3793│ [ Download] [✏️ Rename] [️ Delete] │ 3794└─────────────────────────────────────┘ 3795``` 3796 3797**Always visible - even with no backups**: 3798``` 3799┌─────────────────────────────────────┐ 3800│ Backups [ Create Backup Now] │ 3801├─────────────────────────────────────┤ 3802│ No backups yet. Click "Create │ 3803│ Backup Now" to create your first │ 3804│ backup. │ 3805└─────────────────────────────────────┘ 3806``` 3807 3808### How It Works 3809 3810**Click the button**: 38111. Confirm: "Create a backup of the current plugin version?" 38122. System creates backup ZIP 38133. Verifies: File count (30+ files) 38144. Verifies: File size (200KB+) 38155. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)" 3816 3817**Backup naming**: 3818``` 3819calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 3820 ^^^^^^ 3821 "manual" tag identifies manual backups 3822``` 3823 3824### Use Cases 3825 3826**Before updates**: 3827- Create safety backup before uploading new version 3828- Have multiple restore points 3829- Test new features with fallback 3830 3831**Regular backups**: 3832- Weekly/monthly backup schedule 3833- Before making configuration changes 3834- After important customizations 3835 3836**Development**: 3837- Backup before code experiments 3838- Save working states 3839- Quick rollback points 3840 3841### Full Verification 3842 3843**Same checks as automatic backups**: 3844- ✅ File count check (minimum 10, expected 30+) 3845- ✅ File size check (minimum 1KB, expected 200KB+) 3846- ✅ Existence check (file actually created) 3847- ✅ Automatic cleanup on failure 3848 3849**Success message includes**: 3850- Backup filename 3851- File size (human-readable) 3852- Number of files backed up 3853 3854### Example Messages 3855 3856**Success**: 3857``` 3858✓ Manual backup created successfully: 3859 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 3860 (243 KB, 31 files) 3861``` 3862 3863**Failure Examples**: 3864``` 3865❌ Plugin directory is not readable. 3866 Please check permissions. 3867 3868❌ Backup incomplete: Only 5 files were added (expected 30+). 3869 Backup failed. 3870 3871❌ Backup file is too small (342 bytes). 3872 Only 3 files were added. Backup failed. 3873``` 3874 3875### Benefits 3876 3877**On-Demand Safety**: 3878- Create backups anytime 3879- No need to upload new version 3880- Quick and easy 3881 3882**Peace of Mind**: 3883- Backup before risky changes 3884- Multiple restore points 3885- Safe experimentation 3886 3887**Professional Workflow**: 3888- Regular backup schedule 3889- Version snapshots 3890- Disaster recovery 3891 3892### Backup Section Improvements 3893 3894**Always Visible**: 3895- Section shows even with 0 backups 3896- Button always accessible 3897- Clear call-to-action 3898 3899**Better Header**: 3900- Title and button on same row 3901- Clean, professional layout 3902- Space-efficient design 3903 3904### Technical Details 3905 3906**New Action**: `create_manual_backup` 3907 3908**New Function**: `createManualBackup()` 3909- Gets current version 3910- Creates timestamped filename with "manual" tag 3911- Uses same verification as auto-backups 3912- Shows detailed success/error messages 3913 3914**File Naming Convention**: 3915``` 3916Automatic (on upload): 3917calendar.backup.v5.1.6.2026-02-09_12-30-45.zip 3918 3919Manual (button click): 3920calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 3921 ^^^^^^^ 3922 Easy to identify! 3923``` 3924 3925### Permissions Required 3926 3927- **Read access**: Plugin directory 3928- **Write access**: Parent plugins directory 3929 3930**Same as automatic backups** - no additional permissions needed! 3931 3932## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION 3933 3934### Enhanced: Backup Creation with Robust Verification 3935- **Added:** File count validation (must have 10+ files) 3936- **Added:** File size validation (must be 1KB+ minimum) 3937- **Added:** Return value from addDirectoryToZip (counts files added) 3938- **Added:** Detailed error messages showing file count 3939- **Added:** Automatic deletion of invalid/incomplete backups 3940- **Enhanced:** Exception handling with proper error propagation 3941- **Result:** Backups are now guaranteed to be complete or fail clearly! 3942 3943### What Changed 3944 3945**Before (v5.1.4)**: 3946```php 3947$this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 3948$zip->close(); 3949// No verification - could create empty or partial backup 3950``` 3951 3952**After (v5.1.5)**: 3953```php 3954$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 3955$zip->close(); 3956 3957// Verify backup exists 3958if (!file_exists($backupPath)) { 3959 redirect('Backup file was not created'); 3960} 3961 3962// Verify backup has content 3963$backupSize = filesize($backupPath); 3964if ($backupSize < 1000) { 3965 unlink($backupPath); 3966 redirect('Backup too small: ' . $backupSize . ' bytes'); 3967} 3968 3969// Verify file count 3970if ($fileCount < 10) { 3971 unlink($backupPath); 3972 redirect('Only ' . $fileCount . ' files added (expected 30+)'); 3973} 3974``` 3975 3976### Backup Validation Checks 3977 3978**Three-Layer Verification**: 3979 39801. **File Count Check**: 3981 - Minimum: 10 files required 3982 - Expected: 30+ files 3983 - Action: Delete backup if too few files 3984 39852. **Size Check**: 3986 - Minimum: 1KB (1000 bytes) 3987 - Expected: 200-250KB 3988 - Action: Delete backup if too small 3989 39903. **Existence Check**: 3991 - Verify file was actually created 3992 - Check ZIP archive is valid 3993 - Action: Error if file missing 3994 3995### Enhanced Error Reporting 3996 3997**Detailed Error Messages**: 3998``` 3999❌ "Backup file was not created" 4000❌ "Backup too small (342 bytes). Only 3 files added." 4001❌ "Only 5 files added (expected 30+). Backup aborted." 4002❌ "Too many errors adding files: Failed to add X, Y, Z..." 4003❌ "Directory does not exist: /path/to/dir" 4004❌ "Directory is not readable: /path/to/dir" 4005``` 4006 4007**Now you know exactly what went wrong!** 4008 4009### Improved addDirectoryToZip Function 4010 4011**Returns File Count**: 4012```php 4013private function addDirectoryToZip($zip, $dir, $zipPath = '') { 4014 $fileCount = 0; 4015 $errors = []; 4016 4017 // Validation 4018 if (!is_dir($dir)) throw new Exception("Directory does not exist"); 4019 if (!is_readable($dir)) throw new Exception("Not readable"); 4020 4021 // Add files 4022 foreach ($files as $file) { 4023 if ($zip->addFile($filePath, $relativePath)) { 4024 $fileCount++; 4025 } else { 4026 $errors[] = "Failed to add: " . $filename; 4027 } 4028 } 4029 4030 // Check error threshold 4031 if (count($errors) > 5) { 4032 throw new Exception("Too many errors"); 4033 } 4034 4035 return $fileCount; // Returns count for verification! 4036} 4037``` 4038 4039### Safety Features 4040 4041**Invalid Backup Cleanup**: 4042- Failed backups are automatically deleted 4043- No partial/corrupt backups left behind 4044- Clean error state 4045 4046**Error Threshold**: 4047- Allow up to 5 minor file errors (logs warnings) 4048- More than 5 errors = complete failure 4049- Prevents partially corrupt backups 4050 4051**Directory Validation**: 4052- Check directory exists before processing 4053- Check directory is readable 4054- Fail fast with clear errors 4055 4056### Benefits 4057 4058**Guaranteed Complete Backups**: 4059- ✅ All files included or backup fails 4060- ✅ No silent failures 4061- ✅ Clear error messages 4062- ✅ Automatic cleanup 4063 4064**Better Debugging**: 4065- Know exactly how many files were added 4066- See specific errors for missing files 4067- Understand why backup failed 4068 4069**User Confidence**: 4070- Backup succeeds = complete backup 4071- Backup fails = clear error message 4072- No ambiguity 4073 4074### Example Scenarios 4075 4076**Scenario 1: Permission Issue** 4077``` 4078User uploads new version 4079System starts backup 4080Error: "Directory is not readable: /lib/plugins/calendar/" 4081Backup fails before creating file 4082User sees clear error message 4083``` 4084 4085**Scenario 2: Partial Backup** 4086``` 4087User uploads new version 4088System creates backup 4089Only 5 files added (disk issue?) 4090Size: 450 bytes 4091Verification fails 4092Incomplete backup deleted 4093Error: "Only 5 files added (expected 30+)" 4094``` 4095 4096**Scenario 3: Success** 4097``` 4098User uploads new version 4099System creates backup 410031 files added 4101Size: 240KB 4102All verifications pass ✅ 4103Update proceeds 4104``` 4105 4106### Testing Recommendations 4107 4108After installing v5.1.5: 41091. Upload a new version with backup enabled 41102. Check for success message 41113. Verify backup file exists in /lib/plugins/ 41124. Check backup file size (should be ~240KB) 41135. If backup fails, read error message carefully 4114 4115**Your backups are now bulletproof!** 4116 4117## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED 4118 4119### ✅ Verified: Backup System Working Correctly 4120- **Verified:** addDirectoryToZip function includes all files recursively 4121- **Verified:** Backups contain all 31+ files from calendar directory 4122- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed) 4123- **Info:** Backup sizes grow slightly with each version (more code = more features!) 4124- **Result:** Backup system is working perfectly! 4125 4126### Backup System Details 4127 4128**What Gets Backed Up**: 4129- All PHP files (syntax.php, admin.php, action.php, etc.) 4130- All JavaScript files (calendar-main.js, script.js) 4131- All documentation (CHANGELOG.md, README.md, all guides) 4132- All configuration (sync_config.php) 4133- All language files 4134- All assets and resources 4135- **Everything in the calendar/ directory!** 4136 4137**Backup Size Analysis**: 4138``` 4139Version 5.0.4: 233KB (normal) 4140Version 5.0.5: 234KB (normal) 4141Version 5.0.6: 235KB (normal) 4142Version 5.0.7: 236KB (normal) 4143Version 5.0.8: 237KB (normal) 4144Version 5.0.9: 237KB (normal) 4145Version 5.1.0: 238KB (normal) 4146Version 5.1.1: 238KB (normal) 4147Version 5.1.2: 240KB (normal - added AJAX features) 4148Version 5.1.3: 240KB (normal) 4149``` 4150 4151**Why Sizes Grow**: 4152- More features = more code 4153- Longer CHANGELOG 4154- Additional documentation 4155- New functionality 4156- **This is expected and normal!** 4157 4158**Compression Ratio**: 4159``` 4160Uncompressed: ~1.0 MB (source files) 4161Compressed: ~240 KB (ZIP archive) 4162Ratio: ~24% (excellent compression!) 4163``` 4164 4165### Backup File Contents 4166 4167**31 Files Included**: 4168``` 4169admin.php (216KB - main admin interface) 4170syntax.php (173KB - calendar rendering) 4171calendar-main.js (102KB - JavaScript functionality) 4172CHANGELOG.md (268KB - complete version history) 4173style.css (57KB - all styling) 4174action.php (38KB - DokuWiki actions) 4175sync_outlook.php (32KB - Outlook integration) 4176+ 24 other files (docs, configs, helpers) 4177``` 4178 4179**All files successfully included!** ✅ 4180 4181### How Backups Work 4182 4183**Creation Process**: 41841. User uploads new plugin version 41852. Checkbox "Create backup first" (checked by default) 41863. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip` 41874. Backup saved to: `/lib/plugins/` directory 41885. Then proceeds with update 4189 4190**Backup Function**: 4191```php 4192private function addDirectoryToZip($zip, $dir, $zipPath = '') { 4193 $files = new RecursiveIteratorIterator( 4194 new RecursiveDirectoryIterator($dir), 4195 RecursiveIteratorIterator::LEAVES_ONLY 4196 ); 4197 foreach ($files as $file) { 4198 if (!$file->isDir()) { 4199 $zip->addFile($filePath, $relativePath); 4200 } 4201 } 4202} 4203``` 4204 4205**Recursive = Gets Everything!** ✅ 4206 4207### Verification Results 4208 4209**Test Results**: 4210- ✅ All 31 files present in zip 4211- ✅ All subdirectories included (lang/en/) 4212- ✅ File sizes match originals 4213- ✅ Compression works properly 4214- ✅ No files missing 4215- ✅ Backup can be restored 4216 4217**File Count**: 4218``` 4219Source directory: 31 files 4220Backup ZIP: 34 items (31 files + 3 directories) 4221Status: COMPLETE ✅ 4222``` 4223 4224### Backup Best Practices 4225 4226**Always enabled by default** ✅ 4227**Stored in accessible location** ✅ 4228**Timestamped filenames** ✅ 4229**Complete directory backup** ✅ 4230**Easy to restore** ✅ 4231 4232### Conclusion 4233 4234The backup system is working perfectly. The file sizes are appropriate and expected: 4235- Compressed size: ~240KB (good compression) 4236- Uncompressed size: ~1MB (all source files) 4237- All files included: YES ✅ 4238- Growing size over versions: Normal (more features!) 4239 4240**Your backups are complete and reliable!** 4241 4242## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR 4243 4244### Fixed: JavaScript Syntax Error in AJAX Function 4245- **Fixed:** ParseError on line 1947 (deleteBackup function) 4246- **Fixed:** Escaped all single quotes in JavaScript strings 4247- **Result:** AJAX backup deletion now works correctly! 4248 4249### What Was Wrong 4250 4251JavaScript inside PHP echo needs escaped quotes: 4252 4253**Before (broken)**: 4254```javascript 4255formData.append('action', 'delete_backup'); // PHP interprets quotes 4256``` 4257 4258**After (fixed)**: 4259```javascript 4260formData.append(\'action\', \'delete_backup\'); // Escaped for PHP 4261``` 4262 4263### All Quotes Escaped 4264 4265Fixed in deleteBackup function: 4266- ✅ FormData.append() calls 4267- ✅ fetch() URL 4268- ✅ querySelector() calls 4269- ✅ createElement() call 4270- ✅ All string literals 4271- ✅ Error messages 4272 4273**JavaScript now works!** ✓ 4274 4275## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT 4276 4277### Improved: Update Tab Further Refined 4278- **Moved:** Important Notes to very top (above upload) 4279- **Enhanced:** Delete backup now uses AJAX (no page refresh!) 4280- **Added:** Smooth fade-out animation when deleting backups 4281- **Added:** Success message after deletion 4282- **Auto-remove:** Backup section disappears if last backup deleted 4283- **Result:** Smoother, more polished experience! 4284 4285### New Layout Order 4286 4287**Final Order (v5.1.2)**: 4288``` 42891. ⚠️ Important Notes (warnings at top) 42902. Upload New Version (with Clear Cache button) 42913. Current Version (info) 42924. Recent Changes (changelog) 42935. Available Backups (if any) 4294``` 4295 4296### AJAX Backup Deletion 4297 4298**Before (v5.1.1)**: 4299- Click Delete → Page refreshes → Scroll back down 4300- Lose position on page 4301- Page reload is jarring 4302 4303**After (v5.1.2)**: 4304- Click Delete → Confirm 4305- Row fades out smoothly 4306- Row disappears 4307- Success message shows at top 4308- Success message fades after 3 seconds 4309- If last backup: entire section fades away 4310- **No page refresh!** ✓ 4311 4312### Visual Flow 4313 4314**Delete Animation**: 4315``` 43161. Click ️ Delete 43172. Confirm dialog 43183. Row fades out (0.3s) 43194. Row removed 43205. Success message appears 43216. Message fades after 3s 4322``` 4323 4324**If Last Backup**: 4325``` 43261. Delete last backup 43272. Row fades out 43283. Entire "Available Backups" section fades 43294. Section removed 43305. Clean interface ✓ 4331``` 4332 4333### Success Message 4334 4335After deleting: 4336``` 4337┌──────────────────────────────┐ 4338│ ✓ Backup deleted: filename │ ← Appears at top 4339└──────────────────────────────┘ 4340 Fades after 3 seconds 4341``` 4342 4343### Benefits 4344 4345**Important Notes First**: 4346- Warnings before actions ✓ 4347- Read before uploading ✓ 4348- Clear expectations ✓ 4349 4350**AJAX Deletion**: 4351- No page refresh ✓ 4352- Smooth animations ✓ 4353- Stay in context ✓ 4354- Professional feel ✓ 4355 4356**Auto-Cleanup**: 4357- Empty list disappears ✓ 4358- Clean interface ✓ 4359- No clutter ✓ 4360 4361### Technical Implementation 4362 4363**AJAX Request**: 4364```javascript 4365fetch('?do=admin&page=calendar&tab=update', { 4366 method: 'POST', 4367 body: formData 4368}) 4369``` 4370 4371**DOM Manipulation**: 4372- Fade out row 4373- Remove element 4374- Show success 4375- Remove section if empty 4376 4377**Smooth Transitions**: 4378- 300ms fade animations 4379- Clean visual feedback 4380- Professional polish 4381 4382## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB 4383 4384### Improved: Update Tab Layout Reorganized 4385- **Moved:** Upload section to the top of the page 4386- **Added:** Clear Cache button next to Upload & Install button 4387- **Changed:** "Current Version" section moved below upload 4388- **Result:** Better workflow - upload first, then see version info! 4389 4390### New Layout Order 4391 4392**Before (v5.1.0)**: 4393``` 43941. Clear Cache (standalone) 43952. Current Version 43963. Recent Changes 43974. Upload New Version 43985. Warning Box 43996. Backups 4400``` 4401 4402**After (v5.1.1)**: 4403``` 44041. Upload New Version (with Clear Cache button side-by-side) 44052. Warning Box 44063. Current Version 44074. Recent Changes 44085. Backups 4409``` 4410 4411### Visual Result 4412 4413**Top of Update Tab**: 4414``` 4415┌─────────────────────────────────┐ 4416│ Upload New Version │ 4417│ ┌─────────────────────────────┐ │ 4418│ │ [Choose File] │ │ 4419│ │ ☑ Create backup first │ │ 4420│ │ ┌──────────────┬──────────┐ │ │ 4421│ │ │ Upload & │️ Clear │ │ │ 4422│ │ │ Install │ Cache │ │ │ 4423│ │ └──────────────┴──────────┘ │ │ 4424│ └─────────────────────────────┘ │ 4425│ │ 4426│ ⚠️ Important Notes │ 4427│ • Will replace all files │ 4428│ • Config preserved │ 4429│ │ 4430│ Current Version │ 4431│ Version: 5.1.1 │ 4432└─────────────────────────────────┘ 4433``` 4434 4435### Benefits 4436 4437**Better Workflow**: 4438- Primary action (upload) is first 4439- Clear cache conveniently next to install 4440- No scrolling to find upload button 4441- Logical top-to-bottom flow 4442 4443**Side-by-Side Buttons**: 4444- Upload & Install (green) 4445- Clear Cache (orange) 4446- Both common actions together 4447- Easy to access after upload 4448 4449**Improved UX**: 4450- Upload is most important → now at top 4451- Version info is reference → moved down 4452- Related actions grouped 4453- Cleaner organization 4454 4455### Button Layout 4456 4457``` 4458┌──────────────────┬──────────────┐ 4459│ Upload & │ ️ Clear │ 4460│ Install │ Cache │ 4461│ (Green) │ (Orange) │ 4462└──────────────────┴──────────────┘ 4463``` 4464 4465**Green = Primary Action** 4466**Orange = Secondary Action** 4467 4468Both easily accessible! 4469 4470## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND 4471 4472### Changed: Admin Section Backgrounds Now Use __background__ 4473- **Changed:** All section boxes now use `__background__` instead of `__background_alt__` 4474- **Result:** Cleaner, more unified admin interface! 4475 4476### Background Usage Update 4477 4478**Before (v5.0.9)**: 4479```php 4480Section boxes: bg_alt (__background_alt__) 4481Content areas: bg (__background__) 4482``` 4483 4484**After (v5.1.0)**: 4485```php 4486Section boxes: bg (__background__) 4487Content areas: bg (__background__) 4488``` 4489 4490### Why This Change? 4491 4492**More unified appearance**: 4493- Sections and content use same background 4494- Creates cleaner, more cohesive look 4495- Borders provide visual separation 4496- Matches typical admin UI patterns 4497 4498**Template color hierarchy**: 4499``` 4500__background_site__ → Outer page wrapper 4501__background__ → Content & sections (BOTH now use this) 4502__background_alt__ → Reserved for special panels/highlights 4503__background_neu__ → Special highlights 4504``` 4505 4506### Visual Result 4507 4508**Light Template**: 4509```ini 4510__background__ = "#ffffff" 4511__background_alt__ = "#e8e8e8" 4512``` 4513 4514**Before**: 4515``` 4516Admin Page: 4517┌─────────────────────┐ 4518│ ┌─────────────────┐ │ 4519│ │ Section Box │ │ ← Gray (#e8e8e8) 4520│ │ ┌─────────────┐ │ │ 4521│ │ │ Content │ │ │ ← White (#fff) 4522│ │ └─────────────┘ │ │ 4523│ └─────────────────┘ │ 4524└─────────────────────┘ 4525Two-tone appearance 4526``` 4527 4528**After**: 4529``` 4530Admin Page: 4531┌─────────────────────┐ 4532│ ┌─────────────────┐ │ 4533│ │ Section Box │ │ ← White (#fff) 4534│ │ ┌─────────────┐ │ │ 4535│ │ │ Content │ │ │ ← White (#fff) 4536│ │ └─────────────┘ │ │ 4537│ └─────────────────┘ │ 4538└─────────────────────┘ 4539Unified, clean appearance 4540Borders provide separation 4541``` 4542 4543**Dark Template**: 4544```ini 4545__background__ = "#2d2d2d" 4546__background_alt__ = "#3a3a3a" 4547``` 4548 4549**After**: 4550``` 4551Admin Page: 4552┌─────────────────────┐ 4553│ ┌─────────────────┐ │ 4554│ │ Section Box │ │ ← Dark (#2d2d2d) 4555│ │ ┌─────────────┐ │ │ 4556│ │ │ Content │ │ │ ← Dark (#2d2d2d) 4557│ │ └─────────────┘ │ │ 4558│ └─────────────────┘ │ 4559└─────────────────────┘ 4560Unified dark appearance 4561Accent borders provide definition 4562``` 4563 4564### Benefits 4565 4566**Cleaner Look**: 4567- No more alternating gray/white 4568- More professional appearance 4569- Less visual noise 4570- Unified color scheme 4571 4572**Better Consistency**: 4573- Matches modern admin UI patterns 4574- Borders define sections, not colors 4575- Simpler, cleaner design 4576- Easier on the eyes 4577 4578**Template Friendly**: 4579- Works with any background color 4580- Light or dark templates 4581- Custom colors 4582- Always looks cohesive 4583 4584### All Sections Updated 4585 4586✅ Outlook Sync config sections 4587✅ Manage Events sections 4588✅ Update Plugin sections 4589✅ Themes tab sections 4590✅ Week start day section 4591✅ All form sections 4592 4593**Complete unified theming!** 4594 4595## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB 4596 4597### Fixed: Syntax Error in Theme Cards 4598- **Fixed:** ParseError on line 4461 (Purple theme card) 4599- **Fixed:** Malformed ternary expressions from sed replacement 4600- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki) 4601- **Result:** Admin pages work correctly! 4602 4603### What Was Wrong 4604 4605The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions: 4606 4607**Before (broken)**: 4608```php 4609? '#9b59b6' : ' . $colors['border'] . ') 4610// Extra quote and dot created syntax error 4611``` 4612 4613**After (fixed)**: 4614```php 4615? '#9b59b6' : $colors['border']) 4616// Clean ternary expression 4617``` 4618 4619### All Theme Cards Fixed 4620 4621- ✅ Purple Dream card 4622- ✅ Professional Blue card 4623- ✅ Pink Bling card 4624- ✅ Wiki Default card 4625 4626### Now Working 4627 4628**Theme selection page loads** ✓ 4629**All cards display properly** ✓ 4630**Template colors applied** ✓ 4631**No syntax errors** ✓ 4632 4633## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING 4634 4635### Fixed: Themes Tab Backgrounds & Correct Template Color Mapping 4636- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites) 4637- **Fixed:** Main background now uses `__background__` instead of `__background_site__` 4638- **Fixed:** Theme selection cards use template backgrounds 4639- **Fixed:** Week start options use template backgrounds 4640- **Result:** Perfect color mapping throughout admin! 4641 4642### Color Mapping Correction 4643 4644**Before (v5.0.7)**: 4645```php 4646bg: __background_site__ // Wrong - this is outer page bg 4647bg_alt: __background_alt__ 4648``` 4649 4650**After (v5.0.8)**: 4651```php 4652bg: __background__ // Correct - main content bg 4653bg_alt: __background_alt__ 4654``` 4655 4656### Why This Matters 4657 4658**Template color hierarchy**: 4659``` 4660__background_site__ → Outer page/site background 4661__background__ → Main content area (CORRECT for admin) 4662__background_alt__ → Sections/panels 4663__background_neu__ → Highlights 4664``` 4665 4666**Admin should use**: 4667- `__background__` for input fields, content areas 4668- `__background_alt__` for section boxes, panels 4669 4670### Themes Tab Fixed 4671 4672**Removed all hardcoded colors**: 4673```php 4674Before: '#ddd', '#fff', '#dee2e6' 4675After: $colors['border'], $colors['bg'], $colors['border'] 4676``` 4677 4678**Now themed**: 4679- ✅ Week start section background 4680- ✅ Week start option backgrounds 4681- ✅ Theme card backgrounds 4682- ✅ Theme card borders 4683- ✅ All borders throughout 4684 4685### Visual Result 4686 4687**Light Template**: 4688```ini 4689__background__ = "#ffffff" 4690__background_alt__ = "#e8e8e8" 4691``` 4692 4693**Admin Before (v5.0.7)**: 4694``` 4695Input fields: #f5f5f5 (site bg - wrong) 4696Sections: #e8e8e8 (alt bg - correct) 4697``` 4698 4699**Admin After (v5.0.8)**: 4700``` 4701Input fields: #ffffff (content bg - correct!) 4702Sections: #e8e8e8 (alt bg - correct!) 4703``` 4704 4705**Dark Template**: 4706```ini 4707__background__ = "#2d2d2d" 4708__background_alt__ = "#3a3a3a" 4709``` 4710 4711**Admin After (v5.0.8)**: 4712``` 4713Input fields: #2d2d2d (content bg - perfect!) 4714Sections: #3a3a3a (alt bg - perfect!) 4715``` 4716 4717### Complete Themes Tab 4718 4719**Week Start Options**: 4720``` 4721┌─────────────────────────┐ 4722│ Week Start Day │ ← bg_alt 4723│ ┌─────────┬───────────┐ │ 4724│ │ Monday │ Sunday │ │ ← bg (when not selected) 4725│ └─────────┴───────────┘ │ 4726└─────────────────────────┘ 4727``` 4728 4729**Theme Cards**: 4730``` 4731┌─────────────────────────┐ 4732│ Matrix Edition │ ← bg (when not selected) 4733│ Classic green theme │ border (when not selected) 4734└─────────────────────────┘ 4735 4736┌═════════════════════════┐ 4737│ Purple Dream │ ← rgba green tint (when selected) 4738│ Elegant purple theme │ #00cc07 border (when selected) 4739└═════════════════════════┘ 4740``` 4741 4742### Perfect Integration 4743 4744**All admin pages now**: 4745- Content areas: `__background__` ✓ 4746- Section boxes: `__background_alt__` ✓ 4747- Borders: `__border__` ✓ 4748- Text: `__text__` ✓ 4749 4750**Matches wiki perfectly**: 4751- Same white content areas 4752- Same gray section boxes 4753- Same border colors 4754- Same text colors 4755 4756### No More Issues 4757 4758**Fixed**: 4759- ❌ Site background on content areas → ✅ Content background 4760- ❌ Hardcoded white on themes tab → ✅ Template background 4761- ❌ Hardcoded borders (#ddd) → ✅ Template borders 4762 4763**Result**: 4764- Perfect color hierarchy ✓ 4765- Correct background levels ✓ 4766- Complete template integration ✓ 4767 4768## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING 4769 4770### Fixed: All Admin Backgrounds Use Template Colors 4771- **Fixed:** All section backgrounds use `__background_alt__` 4772- **Fixed:** All content backgrounds use `__background__` 4773- **Fixed:** All borders use `__border__` 4774- **Fixed:** All text uses `__text__` 4775- **Result:** Complete admin template integration! 4776 4777### All Replacements 4778 4779**Backgrounds**: 4780```php 4781Before: background: #f9f9f9 4782After: background: ' . $colors['bg_alt'] . ' 4783 4784Before: background: #fff / background: white 4785After: background: ' . $colors['bg'] . ' 4786``` 4787 4788**Borders**: 4789```php 4790Before: border: 1px solid #ddd 4791Before: border: 1px solid #e0e0e0 4792Before: border: 1px solid #eee 4793After: border: 1px solid ' . $colors['border'] . ' 4794``` 4795 4796**Text**: 4797```php 4798Before: color: #333 4799Before: color: #666 4800After: color: ' . $colors['text'] . ' 4801``` 4802 4803### Complete Admin Coverage 4804 4805**All tabs now themed**: 4806- ✅ Manage Events tab 4807- ✅ Update Plugin tab 4808- ✅ Outlook Sync tab 4809- ✅ Themes tab 4810- ✅ Tab navigation 4811- ✅ All sections 4812- ✅ All inputs 4813- ✅ All borders 4814- ✅ All text 4815 4816### Visual Result 4817 4818**Light Template**: 4819``` 4820Admin Page: 4821┌──────────────────────────┐ 4822│ Tab Navigation │ ← Template borders 4823├──────────────────────────┤ 4824│ Section Headers │ ← bg_alt (light gray) 4825│ ┌──────────────────────┐ │ 4826│ │ Form Inputs │ │ ← bg (white) 4827│ │ Content Areas │ │ 4828│ └──────────────────────┘ │ 4829└──────────────────────────┘ 4830All template colors! ✓ 4831``` 4832 4833**Dark Template**: 4834``` 4835Admin Page: 4836┌──────────────────────────┐ 4837│ Tab Navigation │ ← Template borders 4838├──────────────────────────┤ 4839│ Section Headers │ ← bg_alt (dark gray) 4840│ ┌──────────────────────┐ │ 4841│ │ Form Inputs │ │ ← bg (darker) 4842│ │ Content Areas │ │ 4843│ └──────────────────────┘ │ 4844└──────────────────────────┘ 4845All template colors! ✓ 4846``` 4847 4848### Template Color Mapping 4849 4850**Used throughout admin**: 4851``` 4852__background_site__ → $colors['bg'] (main backgrounds) 4853__background_alt__ → $colors['bg_alt'] (section backgrounds) 4854__text__ → $colors['text'] (all text) 4855__border__ → $colors['border'] (all borders) 4856__link__ → $colors['link'] (links - future) 4857``` 4858 4859### Examples by Section 4860 4861**Manage Events**: 4862- Event list backgrounds: `bg_alt` 4863- Event item backgrounds: `bg` 4864- Borders: `border` 4865- Text: `text` 4866 4867**Update Plugin**: 4868- Section backgrounds: `bg_alt` 4869- Content areas: `bg` 4870- Borders: `border` 4871- Text: `text` 4872 4873**Outlook Sync**: 4874- Config sections: `bg_alt` 4875- Input fields: `bg` 4876- Borders: `border` 4877- Labels: `text` 4878 4879**Themes Tab**: 4880- Theme cards: `bg_alt` 4881- Preview areas: `bg` 4882- Borders: `border` 4883- Descriptions: `text` 4884 4885### Benefits 4886 4887**Seamless Integration**: 4888- Matches wiki admin area perfectly 4889- Same colors throughout wiki 4890- Professional appearance 4891- Consistent experience 4892 4893**Automatic Adaptation**: 4894- Light templates: Light admin 4895- Dark templates: Dark admin 4896- Custom templates: Uses custom colors 4897 4898**No White Boxes**: 4899- Every background themed 4900- Every border themed 4901- Every text themed 4902- Complete consistency 4903 4904### PERFECT HARMONY 4905 4906**Frontend (Calendar)**: 4907- Wiki theme uses style.ini ✓ 4908- Perfect template match ✓ 4909 4910**Backend (Admin)**: 4911- Reads same style.ini ✓ 4912- Perfect template match ✓ 4913 4914**Complete Unity**: 4915- Same colors everywhere ✓ 4916- Seamless experience ✓ 4917- Professional polish ✓ 4918 4919## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS 4920 4921### Enhanced: Month/Year Header & Admin Pages Use Template Colors 4922- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme 4923- **Added:** Admin pages read template's style.ini file 4924- **Added:** `getTemplateColors()` function in admin class 4925- **Fixed:** Tab navigation uses template text and border colors 4926- **Result:** Complete template integration everywhere! 4927 4928### Month/Year Header 4929 4930**Before**: 4931```php 4932color: __text__ // Same as primary text 4933``` 4934 4935**After (Wiki Theme)**: 4936```php 4937color: __text_neu__ // Dimmed text (subtle) 4938``` 4939 4940### Admin Pages Enhancement 4941 4942**New `getTemplateColors()` function**: 4943- Reads template's style.ini file 4944- Extracts color replacements 4945- Provides colors to all admin tabs 4946- Falls back to sensible defaults 4947 4948**Colors used**: 4949```php 4950bg: __background_site__ 4951bg_alt: __background_alt__ 4952text: __text__ 4953border: __border__ 4954link: __link__ 4955``` 4956 4957**Applied to**: 4958- Tab navigation borders 4959- Tab text colors 4960- All admin sections 4961- Ready for future enhancements 4962 4963### Visual Result 4964 4965**Calendar Header**: 4966``` 4967┌────────────────────┐ 4968│ ‹ February 2026 › │ ← __text_neu__ (dimmed) 4969└────────────────────┘ 4970Subtle and elegant ✓ 4971``` 4972 4973**Admin Navigation**: 4974``` 4975 Manage Events | Update | ⚙️ Config | Themes 4976───────────────────────────────────────────────── 4977Active tab: Green (#00cc07) 4978Inactive tabs: Template text color 4979Border: Template border color 4980``` 4981 4982### Template Integration 4983 4984**Light Template**: 4985```ini 4986__text_neu__ = "#666666" 4987__border__ = "#cccccc" 4988``` 4989**Result**: 4990- Month/Year: Medium gray (subtle) 4991- Admin borders: Light gray 4992- Tab text: Dark gray 4993 4994**Dark Template**: 4995```ini 4996__text_neu__ = "#999999" 4997__border__ = "#555555" 4998``` 4999**Result**: 5000- Month/Year: Light gray (subtle) 5001- Admin borders: Medium gray 5002- Tab text: Bright gray 5003 5004### Benefits 5005 5006**Calendar Frontend**: 5007- Month/Year header more subtle 5008- Better visual hierarchy 5009- Less prominent, more elegant 5010 5011**Admin Backend**: 5012- Uses template colors 5013- Matches wiki admin area 5014- Consistent experience 5015- Professional appearance 5016 5017### Future-Ready 5018 5019The `getTemplateColors()` function is now available for: 5020- ✅ Tab navigation (implemented) 5021- Section backgrounds (ready) 5022- Button colors (ready) 5023- Input fields (ready) 5024- Success/error messages (ready) 5025 5026**Foundation laid for complete admin theming!** 5027 5028## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS 5029 5030### Fixed: Add Event Bar & Section Headers Use Template Colors 5031- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme 5032- **Fixed:** "Today" header uses `__text_neu__` 5033- **Fixed:** "Tomorrow" header uses `__text__` 5034- **Fixed:** "Important Events" header uses `__border__` 5035- **Result:** Perfect template color integration! 5036 5037### All Changes 5038 5039**Add Event Bar (Wiki Theme)**: 5040 5041**Before**: 5042```php 5043background: #3498db // Generic blue 5044``` 5045 5046**After**: 5047```php 5048background: __background_alt__ // Template alternate bg 5049text: __text__ // Template text color 5050hover: __background_neu__ // Template neutral bg 5051``` 5052 5053**Section Headers (Wiki Theme)**: 5054 5055**Before**: 5056```php 5057Today: #ff9800 // Orange 5058Tomorrow: #4caf50 // Green 5059Important Events: #9b59b6 // Purple 5060``` 5061 5062**After**: 5063```php 5064Today: __text_neu__ // Template dimmed text 5065Tomorrow: __text__ // Template primary text 5066Important Events: __border__ // Template border color 5067``` 5068 5069### Visual Result 5070 5071**Wiki Default Theme**: 5072``` 5073Add Event Bar: 5074┌────────────────┐ 5075│ + ADD EVENT │ ← Template alt background 5076└────────────────┘ 5077 5078Sections: 5079━━━━━━━━━━━━━━━━ 5080Today ← Dimmed text color (__text_neu__) 5081• Team Meeting 5082 5083Tomorrow ← Primary text color (__text__) 5084• Code Review 5085 5086Important Events ← Border color (__border__) 5087• Project Deadline 5088``` 5089 5090### Example with DokuWiki Default Template 5091 5092**Template colors**: 5093```ini 5094__background_alt__ = "#e8e8e8" 5095__text__ = "#333333" 5096__text_neu__ = "#666666" 5097__border__ = "#cccccc" 5098``` 5099 5100**Calendar result**: 5101``` 5102Add Event Bar: Light gray (#e8e8e8) 5103Today header: Medium gray (#666666) 5104Tomorrow header: Dark gray (#333333) 5105Important Events header: Border gray (#cccccc) 5106``` 5107 5108### Example with Dark Template 5109 5110**Template colors**: 5111```ini 5112__background_alt__ = "#2d2d2d" 5113__text__ = "#e0e0e0" 5114__text_neu__ = "#999999" 5115__border__ = "#555555" 5116``` 5117 5118**Calendar result**: 5119``` 5120Add Event Bar: Dark gray (#2d2d2d) 5121Today header: Light gray (#999999) 5122Tomorrow header: Bright gray (#e0e0e0) 5123Important Events header: Medium gray (#555555) 5124``` 5125 5126### Perfect Harmony 5127 5128All sidebar elements now use template colors: 5129- ✅ Add Event bar background 5130- ✅ Add Event bar text 5131- ✅ Today section header 5132- ✅ Tomorrow section header 5133- ✅ Important Events header 5134- ✅ Calendar cells 5135- ✅ Grid backgrounds 5136- ✅ All borders 5137 5138**Complete template integration!** 5139 5140## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS 5141 5142### Fixed: Calendar Cells Use Correct Template Color 5143- **Fixed:** Calendar cells now use `__background__` from template 5144- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__` 5145- **Result:** Calendar cells match main content area background! 5146 5147### Color Mapping Update 5148 5149**Before (v5.0.3)**: 5150```php 5151cell_bg: __background_neu__ // Wrong - this is for neutral/alternate 5152``` 5153 5154**After (v5.0.4)**: 5155```php 5156cell_bg: __background__ // Correct - main content background 5157``` 5158 5159### Template Color Usage 5160 5161**Wiki Default theme now uses**: 5162``` 5163__background_site__ → Overall page background 5164__background__ → Calendar cells (main content bg) 5165__background_alt__ → Grid background, headers 5166__background_neu__ → Today cell highlight 5167__text__ → Primary text 5168__text_neu__ → Dimmed text 5169__link__ → Links, bright text 5170__border__ → All borders 5171``` 5172 5173### Visual Result 5174 5175**Before**: 5176``` 5177Calendar with template colors: 5178┌─────┬─────┬─────┐ 5179│ Mon │ Tue │ Wed │ 5180├─────┼─────┼─────┤ 5181│ 8 │ 9 │ 10 │ ← Neutral gray (wrong) 5182└─────┴─────┴─────┘ 5183``` 5184 5185**After**: 5186``` 5187Calendar with template colors: 5188┌─────┬─────┬─────┐ 5189│ Mon │ Tue │ Wed │ 5190├─────┼─────┼─────┤ 5191│ 8 │ 9 │ 10 │ ← White/content bg (correct!) 5192└─────┴─────┴─────┘ 5193``` 5194 5195### Example Template Colors 5196 5197**DokuWiki Default**: 5198```ini 5199__background__ = "#ffffff" 5200``` 5201**Result**: White calendar cells ✓ 5202 5203**Dark Template**: 5204```ini 5205__background__ = "#2d2d2d" 5206``` 5207**Result**: Dark calendar cells ✓ 5208 5209**Custom Template**: 5210```ini 5211__background__ = "#f9f9f9" 5212``` 5213**Result**: Custom color cells ✓ 5214 5215### Perfect Matching 5216 5217Calendar cells now match: 5218- ✅ Main content area background 5219- ✅ Article/page background 5220- ✅ Content box background 5221- ✅ Same as wiki text background 5222 5223**Seamless integration!** 5224 5225## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI 5226 5227### Enhanced: Wiki Default Theme Reads Template Colors 5228- **Added:** Function to read colors from DokuWiki template's style.ini file 5229- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 5230- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 5231- **Uses:** Actual template colors instead of CSS variables 5232- **Result:** Perfect color matching with any DokuWiki template! 5233 5234### How It Works 5235 5236**New Function: `getWikiTemplateColors()`** 5237 52381. **Detects** current DokuWiki template name 52392. **Reads** the template's `style.ini` file 52403. **Parses** color replacements section 52414. **Maps** template colors to calendar theme 52425. **Falls back** to CSS variables if file not found 5243 5244### Colors Read from style.ini 5245 5246**Template color replacements used**: 5247```php 5248__background_site__ → bg, header_bg 5249__background_alt__ → grid_bg, cell_today_bg 5250__background_neu__ → cell_bg 5251__text__ → text_primary 5252__text_neu__ → text_dim 5253__link__ → text_bright 5254__border__ → border, grid_border 5255``` 5256 5257### Example style.ini Mapping 5258 5259**Template style.ini**: 5260```ini 5261[replacements] 5262__background_site__ = "#f8f9fa" 5263__background_alt__ = "#e9ecef" 5264__background_neu__ = "#dee2e6" 5265__text__ = "#212529" 5266__text_neu__ = "#6c757d" 5267__link__ = "#0d6efd" 5268__border__ = "#ced4da" 5269``` 5270 5271**Calendar theme result**: 5272```php 5273bg: #f8f9fa 5274header_bg: #e9ecef 5275grid_bg: #e9ecef 5276cell_bg: #dee2e6 5277text_primary: #212529 5278text_dim: #6c757d 5279text_bright: #0d6efd 5280border: #ced4da 5281grid_border: #ced4da 5282``` 5283 5284### Before vs After 5285 5286**Before (v5.0.2)**: 5287``` 5288Wiki Default theme used: 5289- CSS variables (var(--__background__, #fff)) 5290- Required browser CSS variable support 5291- Fallback to generic colors 5292``` 5293 5294**After (v5.0.3)**: 5295``` 5296Wiki Default theme uses: 5297- Actual colors from template's style.ini 5298- Exact template color values 5299- No CSS variable dependency 5300- Perfect color matching! 5301``` 5302 5303### File Location Priority 5304 5305Checks in order: 53061. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 53072. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 53083. Falls back to CSS variables if neither found 5309 5310### Benefits 5311 5312**More accurate colors**: 5313- Uses exact template color values ✓ 5314- No CSS variable interpolation ✓ 5315- Consistent across all browsers ✓ 5316 5317**Better compatibility**: 5318- Works with older browsers ✓ 5319- No CSS variable support needed ✓ 5320- Direct color values ✓ 5321 5322**Perfect matching**: 5323- Reads template's actual colors ✓ 5324- Same colors as wiki pages ✓ 5325- Seamless integration ✓ 5326 5327### Template Examples 5328 5329**DokuWiki Default Template**: 5330``` 5331Reads: lib/tpl/dokuwiki/style.ini 5332Gets: Default DokuWiki colors 5333Result: Perfect classic DokuWiki look 5334``` 5335 5336**Bootstrap Template**: 5337``` 5338Reads: lib/tpl/bootstrap3/style.ini 5339Gets: Bootstrap color scheme 5340Result: Perfect Bootstrap integration 5341``` 5342 5343**Custom Template**: 5344``` 5345Reads: conf/tpl/mycustom/style.ini 5346Gets: Your custom colors 5347Result: Perfect custom theme match 5348``` 5349 5350### Fallback Chain 5351 53521. **Try** reading style.ini from template 53532. **If found** → Use exact colors from file 53543. **If not found** → Use CSS variables 53554. **If no CSS vars** → Use fallback colors 5356 5357**Always works, always matches!** ✓ 5358 5359## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL 5360 5361### Fixed: Wiki Default Theme Day Panel Colors 5362- **Fixed:** Day popup panel now uses DokuWiki CSS variables 5363- **Fixed:** Panel background matches wiki theme 5364- **Fixed:** Panel header matches wiki theme 5365- **Fixed:** Border colors use wiki theme 5366- **Fixed:** Text colors use wiki theme 5367- **Result:** Perfect integration with DokuWiki templates! 5368 5369### All Changes 5370 5371**Day Panel Colors (Wiki Default)**: 5372 5373**Before**: 5374```php 5375background: rgba(36, 36, 36, 0.5) // Dark gray (wrong!) 5376header: #3498db // Blue (wrong!) 5377``` 5378 5379**After**: 5380```php 5381background: var(--__background__, #fff) 5382header: var(--__background_alt__, #e8e8e8) 5383header_text: var(--__text__, #333) 5384border: var(--__border__, #ccc) 5385shadow: 0 2px 4px rgba(0, 0, 0, 0.1) 5386``` 5387 5388**Event Colors (Wiki Default)**: 5389```php 5390event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5)) 5391border_color: var(--__border__, rgba(204, 204, 204, 0.3)) 5392bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15) 5393``` 5394 5395### Before vs After 5396 5397**Before (v5.0.1)**: 5398``` 5399Wiki Default - Click Week Cell: 5400┌────────────────┐ 5401│ Monday, Feb 8 │ ← Blue header (wrong) 5402├────────────────┤ 5403│ Team Meeting │ ← Dark gray bg (wrong) 5404│ 2:00 PM │ 5405└────────────────┘ 5406Doesn't match wiki theme 5407``` 5408 5409**After (v5.0.2)**: 5410``` 5411Wiki Default - Click Week Cell: 5412 5413Light Wiki Theme: 5414┌────────────────┐ 5415│ Monday, Feb 8 │ ← Light gray header ✓ 5416├────────────────┤ 5417│ Team Meeting │ ← White bg ✓ 5418│ 2:00 PM │ Dark text ✓ 5419└────────────────┘ 5420 5421Dark Wiki Theme: 5422┌────────────────┐ 5423│ Monday, Feb 8 │ ← Dark header ✓ 5424├────────────────┤ 5425│ Team Meeting │ ← Dark bg ✓ 5426│ 2:00 PM │ Light text ✓ 5427└────────────────┘ 5428 5429Perfectly matches wiki! 5430``` 5431 5432### CSS Variables Used 5433 5434**Wiki Default theme now uses**: 5435- `--__background__` - Main background (panel body) 5436- `--__background_alt__` - Alternate bg (panel header, events) 5437- `--__text__` - Text color (header text) 5438- `--__border__` - Border color (panel border, event borders) 5439 5440**With fallbacks**: 5441```css 5442var(--__background__, #fff) /* white fallback */ 5443var(--__background_alt__, #e8e8e8) /* light gray fallback */ 5444var(--__text__, #333) /* dark text fallback */ 5445var(--__border__, #ccc) /* gray border fallback */ 5446``` 5447 5448### Perfect Adaptation 5449 5450**Light Templates**: 5451- Light panel backgrounds ✓ 5452- Dark text ✓ 5453- Subtle borders ✓ 5454- Clean appearance ✓ 5455 5456**Dark Templates**: 5457- Dark panel backgrounds ✓ 5458- Light text ✓ 5459- Visible borders ✓ 5460- Perfect contrast ✓ 5461 5462**Custom Templates**: 5463- Uses template's CSS variables ✓ 5464- Automatic adaptation ✓ 5465- Seamless integration ✓ 5466 5467### Now Truly Adaptive 5468 5469Wiki Default theme now properly uses DokuWiki CSS variables for: 5470- ✅ Calendar grid 5471- ✅ Sidebar widget 5472- ✅ Event list 5473- ✅ **Day panel** ← v5.0.2! 5474- ✅ All backgrounds 5475- ✅ All text 5476- ✅ All borders 5477 5478**Complete wiki integration!** 5479 5480## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS 5481 5482### Enhanced: Time Conflict Tooltips Now Themed 5483- **Fixed:** Conflict tooltips now match calendar theme 5484- **Added:** Theme-aware background, border, text colors 5485- **Added:** Theme-aware shadow effects 5486- **Result:** Complete visual consistency! 5487 5488### Tooltip Theming 5489 5490**Now uses theme colors for**: 5491- Background: Theme background color 5492- Border: Theme border color 5493- Header text: Theme primary text color 5494- Item text: Theme dim text color 5495- Shadow: Theme shadow color 5496 5497### Before vs After 5498 5499**Before (v5.0.0)**: 5500``` 5501Hover ⚠️ badge: 5502┌─────────────────┐ 5503│ ⚠️ Time Conflicts│ ← Default colors 5504│ • Event A │ 5505│ • Event B │ 5506└─────────────────┘ 5507``` 5508 5509**After (v5.0.1)**: 5510``` 5511Matrix Theme: 5512┌─────────────────┐ 5513│ ⚠️ Time Conflicts│ ← Green header 5514│ • Event A │ ← Green text 5515│ • Event B │ Dark green bg 5516└─────────────────┘ 5517 5518Purple Theme: 5519┌─────────────────┐ 5520│ ⚠️ Time Conflicts│ ← Purple header 5521│ • Event A │ ← Purple text 5522│ • Event B │ Dark purple bg 5523└─────────────────┘ 5524 5525Professional Theme: 5526┌─────────────────┐ 5527│ ⚠️ Time Conflicts│ ← Blue header 5528│ • Event A │ ← Dark text 5529│ • Event B │ Light bg 5530└─────────────────┘ 5531 5532Pink Theme: 5533┌─────────────────┐ 5534│ ⚠️ Time Conflicts│ ← Pink header ✨ 5535│ • Event A │ ← Pink text 5536│ • Event B │ Dark pink bg 5537└─────────────────┘ 5538 5539Wiki Default: 5540┌─────────────────┐ 5541│ ⚠️ Time Conflicts│ ← Adapts to wiki 5542│ • Event A │ ← Wiki colors 5543│ • Event B │ 5544└─────────────────┘ 5545``` 5546 5547### Now 100% Complete 5548 5549**Every tooltip themed**: 5550- ✅ Conflict tooltips 5551- ✅ All other tooltips (if any) 5552- ✅ Perfect consistency 5553 5554**Absolute perfection!** ✨ 5555 5556## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION 5557 5558### Major Milestone: Version 5.0 5559 5560This 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. 5561 5562### Complete Feature Set 5563 5564**5 Beautiful Themes**: 5565- Matrix Edition (Green with glow) 5566- Purple Dream (Elegant purple) 5567- Professional Blue (Clean and modern) 5568- Pink Bling (Maximum sparkle) 5569- Wiki Default (Auto-adapts to your DokuWiki theme) 5570 5571**100% Theme Coverage**: 5572- ✅ Calendar grid and cells 5573- ✅ Event boxes and borders 5574- ✅ Sidebar widget 5575- ✅ Event list panel 5576- ✅ Search functionality 5577- ✅ Edit/Add dialogs (complete) 5578- ✅ Day popup dialogs 5579- ✅ Month picker 5580- ✅ All text (primary, dim, bright) 5581- ✅ All buttons 5582- ✅ All inputs and forms 5583- ✅ All checkboxes 5584- ✅ All borders 5585- ✅ All badges and labels 5586- ✅ Event highlight effects 5587 5588**Perfect Visual Consistency**: 5589- No white pixels anywhere 5590- No unthemed elements 5591- No default colors 5592- Complete visual unity 5593 5594### Major Improvements in v5.0 5595 55961. **Complete Dialog Theming** (v4.8.5-4.8.7) 5597 - Edit event dialog fully themed 5598 - Day popup dialog fully themed 5599 - All form inputs themed 5600 - All checkboxes themed 5601 - All buttons themed 5602 56032. **Event Box Border Perfection** (v4.8.6) 5604 - All 4 borders themed (top, right, bottom, left) 5605 - Sidebar event dividers themed 5606 - Past Events toggle border themed 5607 56083. **Checkbox Field Borders** (v4.9.0) 5609 - Repeating Event section border themed 5610 - Task checkbox section border themed 5611 56124. **Wiki Default Theme** (v4.10.0) 5613 - New 5th theme 5614 - Uses DokuWiki CSS variables 5615 - Auto-adapts to any wiki template 5616 - Perfect for seamless integration 5617 56185. **Clean Text Appearance** (v4.11.0) 5619 - Removed text glow from Matrix 5620 - Removed text glow from Purple 5621 - Removed text glow from Professional 5622 - Removed text glow from Wiki Default 5623 - Kept text glow on Pink Bling only 5624 56256. **Event Highlight Effects** (v4.12.0-4.12.1) 5626 - Theme-aware highlight glow 5627 - Click event bar → event glows 5628 - 3-second themed glow effect 5629 - Smooth animations 5630 5631### See RELEASE_NOTES.md for Complete Details 5632 5633For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release. 5634 5635## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION 5636 5637### Fixed: Event Highlight Now Working 5638- **Fixed:** Used setProperty() to properly apply !important styles 5639- **Added:** Console logging for debugging 5640- **Fixed:** Proper style application with important flag 5641- **Result:** Highlight glow now works correctly! 5642 5643### Technical Fix 5644 5645**Before (not working)**: 5646```javascript 5647eventItem.style.background = color + ' !important'; // Doesn't work 5648``` 5649 5650**After (working)**: 5651```javascript 5652eventItem.style.setProperty('background', color, 'important'); // Works! 5653``` 5654 5655### Added Debug Logging 5656 5657Console now shows: 5658- "Highlighting event: [calId] [eventId] [date]" 5659- "Found event item: [element]" 5660- "Theme: [theme name]" 5661- "Highlight colors: [bg] [shadow]" 5662- "Applied highlight styles" 5663- "Removing highlight" (after 3 seconds) 5664 5665### Now Working 5666 5667Click any event bar → Event glows with theme colors ✓ 5668 5669## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW 5670 5671### ✨ Enhanced: Event Click Highlight Now Theme-Aware 5672- **Fixed:** Restored event highlight glow when clicking calendar bars 5673- **Improved:** Highlight now matches each theme's colors 5674- **Added:** Stronger glow effect for better visibility 5675- **Duration:** 3 seconds with smooth fade 5676- **Result:** Beautiful themed highlights for all themes! 5677 5678### How It Works 5679 5680When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow: 5681 5682**Matrix Theme**: 5683```javascript 5684Background: Darker green (#1a3d1a) 5685Glow: Double green glow (0 0 20px + 0 0 40px) 5686Color: rgba(0, 204, 7, 0.8) 5687``` 5688 5689**Purple Theme**: 5690```javascript 5691Background: Darker purple (#3d2b4d) 5692Glow: Double purple glow 5693Color: rgba(155, 89, 182, 0.8) 5694``` 5695 5696**Professional Theme**: 5697```javascript 5698Background: Light blue (#e3f2fd) 5699Glow: Single blue glow 5700Color: rgba(74, 144, 226, 0.4) 5701``` 5702 5703**Pink Theme**: 5704```javascript 5705Background: Darker pink (#3d2030) 5706Glow: Double pink glow ✨ 5707Color: rgba(255, 20, 147, 0.8) 5708``` 5709 5710**Wiki Theme**: 5711```javascript 5712Background: var(--__background_neu__) 5713Glow: Blue glow (adapts to wiki) 5714Color: rgba(43, 115, 183, 0.4) 5715``` 5716 5717### Visual Examples 5718 5719**Matrix - Click Event**: 5720``` 5721Calendar: 5722┌─────────────┐ 5723│ 2:00 PM │ ← Click this bar 5724└─────────────┘ 5725 5726Event List: 5727╔═════════════════════╗ 5728║ Team Meeting ║ ← GLOWS GREEN 5729║ 2:00 PM ║ for 3 seconds 5730╚═════════════════════╝ 5731 ↑↑↑ Strong green glow ↑↑↑ 5732``` 5733 5734**Purple - Click Event**: 5735``` 5736Calendar: 5737┌─────────────┐ 5738│ 4:00 PM │ ← Click 5739└─────────────┘ 5740 5741Event List: 5742╔═════════════════════╗ 5743║ Code Review ║ ← GLOWS PURPLE 5744║ 4:00 PM ║ for 3 seconds 5745╚═════════════════════╝ 5746 ↑↑↑ Strong purple glow ↑↑↑ 5747``` 5748 5749**Pink - Click Event**: 5750``` 5751Calendar: 5752┌─────────────┐ 5753│ 1:00 PM │ ← Click 5754└─────────────┘ 5755 5756Event List: 5757╔═════════════════════╗ 5758║ Lunch Date ║ ← GLOWS PINK 5759║ 1:00 PM ✨ ║ for 3 seconds 5760╚═════════════════════╝ 5761 ↑↑↑ MAXIMUM SPARKLE ↑↑↑ 5762``` 5763 5764### Glow Specifications 5765 5766**Matrix**: 5767- Background: Dark green 5768- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)` 5769- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)` 5770- Effect: Strong green pulse 5771 5772**Purple**: 5773- Background: Dark purple 5774- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)` 5775- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)` 5776- Effect: Strong purple pulse 5777 5778**Professional**: 5779- Background: Light blue 5780- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)` 5781- Effect: Subtle blue glow 5782 5783**Pink**: 5784- Background: Dark pink 5785- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)` 5786- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)` 5787- Effect: MAXIMUM SPARKLE ✨ 5788 5789**Wiki**: 5790- Background: Theme neutral color 5791- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)` 5792- Effect: Adapts to wiki theme 5793 5794### User Experience 5795 5796**Click event bar** → Event highlights with themed glow 5797**Auto-scroll** → Event scrolls into view smoothly 5798**3 second glow** → Fade out after 3 seconds 5799**Smooth transition** → 0.3s ease-in-out 5800 5801### Perfect for Finding Events 5802 5803**Large event lists**: Quickly locate the clicked event ✓ 5804**Visual feedback**: Know which event you clicked ✓ 5805**Theme consistency**: Matches your chosen theme ✓ 5806**Smooth animation**: Professional appearance ✓ 5807 5808### All Themes Covered 5809 5810- ✅ Matrix: Green glow 5811- ✅ Purple: Purple glow 5812- ✅ Professional: Blue glow 5813- ✅ Pink: Maximum pink sparkle 5814- ✅ Wiki: Adaptive glow 5815 5816**Click any event bar and watch it glow!** ✨ 5817 5818## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES 5819 5820### Changed: Text Glow Now Pink-Only 5821- **Removed:** Text shadow/glow from Matrix theme 5822- **Removed:** Text shadow/glow from Purple theme 5823- **Removed:** Text shadow/glow from Professional theme (already had none) 5824- **Removed:** Text shadow/glow from Wiki Default theme 5825- **Kept:** Text shadow/glow ONLY on Pink Bling theme 5826- **Result:** Cleaner look for Matrix, Purple, and Wiki themes! 5827 5828### All Changes 5829 5830**Before (Matrix, Purple)**: 5831```css 5832text-shadow: 0 0 2px $text_color; /* Glow effect */ 5833``` 5834 5835**After (Matrix, Purple, Professional, Wiki)**: 5836```css 5837text-shadow: none; /* Clean, no glow */ 5838``` 5839 5840**Pink Bling (unchanged)**: 5841```css 5842text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */ 5843``` 5844 5845### Text Shadow Removed From 5846 5847**Sidebar day numbers**: No glow ✓ 5848**Event titles**: No glow ✓ 5849**Event dates**: No glow ✓ 5850**Add Event button**: No glow ✓ 5851**Day popup events**: No glow ✓ 5852 5853### Before vs After 5854 5855**BEFORE (Matrix)**: 5856``` 5857Event Title ✨ ← Glowing green text 58582:00 PM ✨ ← Glowing text 5859``` 5860 5861**AFTER (Matrix)**: 5862``` 5863Event Title ← Clean green text 58642:00 PM ← Clean text 5865``` 5866 5867**Pink Bling (Still Glows)**: 5868``` 5869Event Title ✨ ← Still glowing! 58702:00 PM ✨ ← Maximum sparkle! 5871``` 5872 5873### Theme Appearances 5874 5875** Matrix Edition**: 5876- Clean green text 5877- No glow effects 5878- Professional appearance 5879- Still has border glow 5880 5881** Purple Dream**: 5882- Clean purple text 5883- No glow effects 5884- Elegant appearance 5885- Still has border glow 5886 5887** Professional Blue**: 5888- Clean text (unchanged) 5889- No glow effects 5890- Modern appearance 5891 5892** Pink Bling**: 5893- Glowing pink text ✨ 5894- Maximum glow effects 5895- Sparkle everywhere! 5896- All the bling! 5897 5898** Wiki Default**: 5899- Clean text 5900- No glow effects 5901- Matches wiki theme 5902 5903### Glow Effects Remaining 5904 5905**Border/box glow**: Still present on all themes ✓ 5906**Pink text glow**: Only on Pink Bling ✓ 5907**Shadow effects**: Still on buttons/boxes ✓ 5908 5909**Only TEXT glow removed from non-pink themes!** 5910 5911### Result 5912 5913**Cleaner, more professional look** for: 5914- Matrix ✓ 5915- Purple ✓ 5916- Professional ✓ 5917- Wiki Default ✓ 5918 5919**Maximum sparkle** for: 5920- Pink Bling ✨✓ 5921 5922**Best of both worlds!** 5923 5924## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME 5925 5926### New: Wiki Default Theme 5927- **Added:** 5th theme that automatically matches your DokuWiki template 5928- **Uses:** CSS variables from your wiki theme 5929- **Adapts:** Automatically works with light and dark themes 5930- **Perfect:** Seamless integration with any DokuWiki template 5931 5932### How It Works 5933 5934**Wiki theme uses DokuWiki CSS variables**: 5935```css 5936bg: var(--__background_site__, #f5f5f5) 5937border: var(--__border__, #ccc) 5938text_primary: var(--__text__, #333) 5939text_bright: var(--__link__, #2b73b7) 5940text_dim: var(--__text_neu__, #666) 5941cell_bg: var(--__background__, #fff) 5942grid_border: var(--__border__, #ccc) 5943``` 5944 5945**With fallbacks for older DokuWiki versions**: 5946- If CSS variables exist → Use them ✓ 5947- If not available → Use fallback values ✓ 5948 5949### All 5 Themes 5950 5951**1. Matrix Edition** (Default) 5952- Dark green with neon glow 5953- Matrix-style effects 5954- Original theme 5955 5956**2. Purple Dream** 5957- Rich purple with violet accents 5958- Elegant and sophisticated 5959- Soft glow effects 5960 5961**3. Professional Blue** 5962- Clean blue and grey 5963- Modern professional 5964- No glow effects 5965 5966**4. Pink Bling** 5967- Glamorous hot pink 5968- Maximum sparkle ✨ 5969- Hearts and diamonds 5970 5971**5. Wiki Default** ← NEW! 5972- Matches your wiki template 5973- Auto-adapts to light/dark 5974- Perfect integration 5975 5976### Examples 5977 5978**Light Wiki Template**: 5979``` 5980Wiki Default theme shows: 5981- Light backgrounds (#f5f5f5) 5982- Dark text (#333) 5983- Light inputs (#fff) 5984- Gray borders (#ccc) 5985 5986Matches perfectly! ✓ 5987``` 5988 5989**Dark Wiki Template**: 5990``` 5991Wiki Default theme shows: 5992- Dark backgrounds (from template) 5993- Light text (from template) 5994- Dark inputs (from template) 5995- Dark borders (from template) 5996 5997Matches perfectly! ✓ 5998``` 5999 6000**Bootstrap Template**: 6001``` 6002Uses Bootstrap's colors 6003Matches perfectly! ✓ 6004``` 6005 6006**Material Template**: 6007``` 6008Uses Material's colors 6009Matches perfectly! ✓ 6010``` 6011 6012### CSS Variables Used 6013 6014**DokuWiki provides**: 6015- `--__background_site__`: Page background 6016- `--__background_alt__`: Section backgrounds 6017- `--__background__`: Content backgrounds 6018- `--__text__`: Primary text color 6019- `--__link__`: Link color 6020- `--__text_neu__`: Dimmed text 6021- `--__border__`: Border color 6022- `--__background_neu__`: Neutral background 6023 6024**All with fallbacks**: 6025```css 6026var(--__background_site__, #f5f5f5) 6027/* Falls back to light gray if variable doesn't exist */ 6028``` 6029 6030### Perfect for Every Template 6031 6032**Custom templates**: Automatically adapts ✓ 6033**Light themes**: Perfect match ✓ 6034**Dark themes**: Perfect match ✓ 6035**Any DokuWiki version**: Works with fallbacks ✓ 6036 6037### Complete Theme Collection 6038 6039Now with **5 gorgeous themes**: 6040- 3 dark themes (Matrix, Purple, Pink) 6041- 1 light theme (Professional) 6042- 1 adaptive theme (Wiki Default) ← NEW! 6043 6044**Something for everyone!** 6045 6046## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS 6047 6048### Fixed: Checkbox Field Borders Themed 6049- **Fixed:** Added border-color to checkbox field divs 6050- **Fixed:** Repeating Event section border 6051- **Fixed:** Task checkbox section border 6052- **Result:** No white borders around checkboxes! 6053 6054### Changes 6055 6056**Checkbox Field Border Styling**: 6057 6058**Before**: 6059```html 6060<div class="form-field-checkbox" 6061 style="background: $bg !important;"> 6062<!-- Border shows white ✗ --> 6063``` 6064 6065**After**: 6066```php 6067<div class="form-field-checkbox" 6068 style="background: $bg !important; 6069 border-color: $grid_border !important;"> 6070<!-- Border themed ✓ --> 6071``` 6072 6073### Before vs After 6074 6075**BEFORE (v4.8.8)**: 6076``` 6077Edit Dialog: 6078┌──────────────────┐ 6079│ ☑ Repeating ║│ ← White border ✗ 6080└──────────────────┘ 6081┌──────────────────┐ 6082│ ☑ Task checkbox ║│ ← White border ✗ 6083└──────────────────┘ 6084``` 6085 6086**AFTER (v4.9.0)**: 6087``` 6088Matrix Edit Dialog: 6089┌──────────────────┐ 6090│ ☑ Repeating │ ← Green border ✓ 6091└──────────────────┘ 6092┌──────────────────┐ 6093│ ☑ Task checkbox │ ← Green border ✓ 6094└──────────────────┘ 6095``` 6096 6097### ABSOLUTE PERFECTION ACHIEVED 6098 6099**Every element themed**: 6100- ✅ All inputs 6101- ✅ All labels 6102- ✅ All sections 6103- ✅ **Checkbox field borders** ← v4.9.0! 6104- ✅ All buttons 6105- ✅ All checkboxes 6106- ✅ No white anywhere 6107 6108**100% COMPLETE!** ✨ 6109 6110## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 6111 6112### Fixed: Checkbox Field Borders Themed 6113- **Fixed:** Added border-color to checkbox field divs 6114- **Fixed:** Repeating Event section border 6115- **Fixed:** Task checkbox section border 6116- **Result:** No white borders around checkboxes! 6117 6118### Fixed: Admin Sections Respect Wiki Theme 6119- **Fixed:** All admin backgrounds use CSS variables 6120- **Fixed:** Text colors use wiki text color 6121- **Fixed:** Borders use wiki border color 6122- **Result:** Admin matches wiki theme perfectly! 6123 6124### All Changes 6125 6126**1. Checkbox Field Border Styling**: 6127 6128**Before**: 6129```html 6130<div class="form-field-checkbox" 6131 style="background: $bg !important;"> 6132<!-- Border shows white ✗ --> 6133``` 6134 6135**After**: 6136```php 6137<div class="form-field-checkbox" 6138 style="background: $bg !important; 6139 border-color: $grid_border !important;"> 6140<!-- Border themed ✓ --> 6141``` 6142 6143**2. Admin CSS Variables**: 6144 6145**Added CSS variables for wiki theme compatibility**: 6146```css 6147.calendar-admin-wrapper { 6148 background: var(--__background_site__, #f5f5f5); 6149 color: var(--__text__, #333); 6150} 6151.calendar-admin-section { 6152 background: var(--__background_alt__, #fafafa); 6153} 6154.calendar-admin-input { 6155 background: var(--__background__, #fff); 6156 color: var(--__text__, #333); 6157} 6158``` 6159 6160**Replaced hardcoded colors**: 6161```php 6162// Before: 6163background: #f9f9f9 6164background: white 6165color: #333 6166border: 1px solid #ddd 6167 6168// After: 6169background: var(--__background_alt__, #f9f9f9) 6170background: var(--__background__, #fff) 6171color: var(--__text__, #333) 6172border: 1px solid var(--__border__, #ddd) 6173``` 6174 6175### Before vs After 6176 6177**BEFORE (v4.8.8)**: 6178``` 6179Edit Dialog: 6180┌──────────────────┐ 6181│ ☑ Repeating ║│ ← White border ✗ 6182└──────────────────┘ 6183┌──────────────────┐ 6184│ ☑ Task checkbox ║│ ← White border ✗ 6185└──────────────────┘ 6186 6187Admin Page (Dark Wiki Theme): 6188┌──────────────────┐ 6189│ Light sections │ ← White boxes ✗ 6190│ Light inputs │ ← Doesn't match ✗ 6191└──────────────────┘ 6192``` 6193 6194**AFTER (v4.8.9)**: 6195``` 6196Matrix Edit Dialog: 6197┌──────────────────┐ 6198│ ☑ Repeating │ ← Green border ✓ 6199└──────────────────┘ 6200┌──────────────────┐ 6201│ ☑ Task checkbox │ ← Green border ✓ 6202└──────────────────┘ 6203 6204Admin (Dark Wiki Theme): 6205┌──────────────────┐ 6206│ Dark sections │ ← Matches wiki ✓ 6207│ Dark inputs │ ← Perfect match ✓ 6208└──────────────────┘ 6209``` 6210 6211### Admin Theme Examples 6212 6213**Light Wiki Theme**: 6214``` 6215Admin page backgrounds: Light 6216Section boxes: Light gray 6217Inputs: White 6218Borders: Gray 6219Text: Dark 6220 6221Perfect match! ✓ 6222``` 6223 6224**Dark Wiki Theme**: 6225``` 6226Admin page backgrounds: Dark 6227Section boxes: Darker gray 6228Inputs: Dark 6229Borders: Dark gray 6230Text: Light 6231 6232Perfect match! ✓ 6233``` 6234 6235**DokuWiki Default**: 6236``` 6237Uses wiki's CSS variables 6238Automatically adapts 6239Always matches! ✓ 6240``` 6241 6242### Complete Coverage 6243 6244**Edit Dialog**: 6245- ✅ All inputs themed 6246- ✅ All labels themed 6247- ✅ All sections themed 6248- ✅ **Checkbox borders** ← v4.8.9! 6249- ✅ All buttons themed 6250- ✅ No white anywhere 6251 6252**Admin Interface**: 6253- ✅ **Tab navigation** ← v4.8.9! 6254- ✅ **Section boxes** ← v4.8.9! 6255- ✅ **Input fields** ← v4.8.9! 6256- ✅ **Text colors** ← v4.8.9! 6257- ✅ **Borders** ← v4.8.9! 6258- ✅ All tabs (Manage, Update, Outlook, Themes) 6259 6260### CSS Variables Used 6261 6262**DokuWiki provides these**: 6263- `--__background_site__`: Page background 6264- `--__background_alt__`: Alternate background 6265- `--__background__`: Primary background (inputs) 6266- `--__text__`: Text color 6267- `--__border__`: Border color 6268 6269**Fallbacks provided for older DokuWiki**: 6270```css 6271var(--__background_site__, #f5f5f5) 6272var(--__background_alt__, #fafafa) 6273var(--__background__, #fff) 6274var(--__text__, #333) 6275var(--__border__, #ddd) 6276``` 6277 6278### Perfect Adaptation 6279 6280**Admin now adapts to ANY wiki theme**: 6281- Light themes → Light admin ✓ 6282- Dark themes → Dark admin ✓ 6283- Custom themes → Matches perfectly ✓ 6284- No hardcoded colors ✓ 6285 6286**Calendar themes still work**: 6287- Matrix, Purple, Professional, Pink ✓ 6288- Independent from wiki theme ✓ 6289- Admin respects wiki ✓ 6290- Calendar respects calendar theme ✓ 6291 6292### FINAL PERFECTION 6293 6294**Frontend (Calendar)**: 6295- Complete theming ✓ 6296- 4 beautiful themes ✓ 6297- Every pixel themed ✓ 6298 6299**Backend (Admin)**: 6300- Respects wiki theme ✓ 6301- Works with any theme ✓ 6302- Perfect compatibility ✓ 6303 6304**ABSOLUTELY EVERYTHING THEMED!** ✨ 6305 6306## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 6307 6308### Fixed: Task Checkboxes Now Fully Themed 6309- **Fixed:** Added background-color and border inline 6310- **Fixed:** Both PHP and JavaScript versions 6311- **Result:** No white checkboxes! 6312 6313### Fixed: Past Events Toggle Border 6314- **Fixed:** Added !important to border styling 6315- **Fixed:** Explicit top and bottom borders 6316- **Result:** No white line under toggle! 6317 6318### Fixed: Form Field Section Backgrounds 6319- **Fixed:** All form-field and form-row-group backgrounds 6320- **Fixed:** Every section in edit dialog 6321- **Result:** No white sections anywhere! 6322 6323### All Changes 6324 6325**1. Task Checkbox Styling**: 6326 6327**Before**: 6328```php 6329style="accent-color: $border !important;" 6330<!-- Only accent, background still white ✗ --> 6331``` 6332 6333**After**: 6334```php 6335style="accent-color: $border !important; 6336 background-color: $cell_bg !important; 6337 border: 2px solid $grid_border !important;" 6338<!-- Full theming ✓ --> 6339``` 6340 6341**2. Past Events Toggle Border**: 6342 6343**Before**: 6344```php 6345style="border-color: $grid_border;" 6346<!-- No !important, CSS overrides ✗ --> 6347``` 6348 6349**After**: 6350```php 6351style="border-color: $grid_border !important; 6352 border-top: 1px solid $grid_border !important; 6353 border-bottom: 1px solid $grid_border !important;" 6354<!-- Cannot be overridden ✓ --> 6355``` 6356 6357**3. Form Field Backgrounds**: 6358 6359**Before**: 6360```html 6361<div class="form-field"> 6362<div class="form-row-group"> 6363<!-- No background, shows white ✗ --> 6364``` 6365 6366**After**: 6367```php 6368<div class="form-field" style="background: $bg !important;"> 6369<div class="form-row-group" style="background: $bg !important;"> 6370<!-- Fully themed ✓ --> 6371``` 6372 6373### Before vs After 6374 6375**BEFORE (v4.8.7)**: 6376``` 6377Event: 6378□ Task checkbox ← White checkbox ✗ 6379 6380Past Events 6381▶ Past Events (3) ← White line below ✗ 6382───────────────── 6383 6384Edit Dialog: 6385┌──────────────┐ 6386│ Form fields │ ← White sections ✗ 6387└──────────────┘ 6388``` 6389 6390**AFTER (v4.8.8)**: 6391``` 6392Matrix Event: 6393☑ Task checkbox ← Green checkbox ✓ 6394 6395Past Events 6396▶ Past Events (3) ← Green border ✓ 6397───────────────── 6398 6399Matrix Edit Dialog: 6400┌──────────────┐ 6401│ Form fields │ ← Dark green ✓ 6402└──────────────┘ 6403``` 6404 6405### Complete Examples 6406 6407**Matrix Theme**: 6408``` 6409Task Checkbox: 6410☑ Checked → Green checkmark, green bg 6411☐ Unchecked → Green border, dark green bg ✓ 6412 6413Past Events Toggle: 6414▶ Past Events (3) 6415─────────────────── Green border ✓ 6416 6417Edit Dialog: 6418All sections dark green ✓ 6419No white anywhere ✓ 6420``` 6421 6422**Purple Theme**: 6423``` 6424Task Checkbox: 6425☑ Checked → Purple checkmark, purple bg 6426☐ Unchecked → Purple border, dark purple bg ✓ 6427 6428Past Events Toggle: 6429▶ Past Events (3) 6430─────────────────── Purple border ✓ 6431 6432Edit Dialog: 6433All sections dark purple ✓ 6434``` 6435 6436**Professional Theme**: 6437``` 6438Task Checkbox: 6439☑ Checked → Blue checkmark, white bg 6440☐ Unchecked → Gray border, white bg ✓ 6441 6442Past Events Toggle: 6443▶ Past Events (3) 6444─────────────────── Gray border ✓ 6445 6446Edit Dialog: 6447All sections light ✓ 6448``` 6449 6450**Pink Theme**: 6451``` 6452Task Checkbox: 6453☑ Checked → Pink checkmark, pink bg ✨ 6454☐ Unchecked → Pink border, dark pink bg ✓ 6455 6456Past Events Toggle: 6457▶ Past Events (3) 6458─────────────────── Pink border 6459 6460Edit Dialog: 6461All sections dark pink ✓ 6462``` 6463 6464### Checkbox Visual 6465 6466**Matrix - Unchecked**: 6467``` 6468┌─────┐ 6469│ │ ← Dark green background 6470│ │ Green border 6471└─────┘ 6472``` 6473 6474**Matrix - Checked**: 6475``` 6476┌─────┐ 6477│ ✓ │ ← Dark green background 6478│ │ Green checkmark 6479└─────┘ 6480``` 6481 6482### Past Events Border 6483 6484**Before**: 6485``` 6486▶ Past Events (3) 6487─────────────────── White line ✗ 6488``` 6489 6490**After**: 6491``` 6492▶ Past Events (3) 6493─────────────────── Green line ✓ (Matrix) 6494 Purple line ✓ (Purple) 6495 Gray line ✓ (Professional) 6496 Pink line ✓ (Pink) 6497``` 6498 6499### Form Field Coverage 6500 6501**All sections themed**: 6502- ✅ Title field 6503- ✅ Namespace field 6504- ✅ Description field 6505- ✅ **Date row** ← v4.8.8! 6506- ✅ **Checkbox sections** ← v4.8.8! 6507- ✅ **Recurring options** ← v4.8.8! 6508- ✅ **Time row** ← v4.8.8! 6509- ✅ **Color row** ← v4.8.8! 6510- ✅ Button footer 6511 6512**Every div has background!** ✓ 6513 6514### ABSOLUTE PERFECTION 6515 6516**Not a single white pixel**: 6517- ✅ No white checkboxes 6518- ✅ No white borders 6519- ✅ No white backgrounds 6520- ✅ No white sections 6521- ✅ No white lines 6522- ✅ No white anything 6523 6524**100% PERFECT THEMING!** ✨ 6525 6526## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING 6527 6528### Fixed: Checkbox Section Backgrounds Themed 6529- **Fixed:** Repeating Event section background 6530- **Fixed:** Task checkbox section background 6531- **Result:** No white backgrounds in dialog! 6532 6533### Fixed: Unchecked Task Checkboxes Themed 6534- **Fixed:** Added CSS for checkbox backgrounds 6535- **Fixed:** Unchecked boxes show theme colors 6536- **Result:** No white checkboxes! 6537 6538### Fixed: Day Popup Dialog Fully Themed 6539- **Fixed:** Popup container, header, body themed 6540- **Fixed:** Event items in popup themed 6541- **Fixed:** Add Event button themed 6542- **Fixed:** Footer section themed 6543- **Result:** Perfect popup theming! 6544 6545### All Changes 6546 6547**1. Checkbox Section Backgrounds**: 6548 6549**Before**: 6550```html 6551<div class="form-field-checkbox"> 6552<!-- White background ✗ --> 6553``` 6554 6555**After**: 6556```php 6557<div class="form-field-checkbox" 6558 style="background: $bg !important;"> 6559<!-- Themed ✓ --> 6560``` 6561 6562**2. Checkbox Background CSS**: 6563 6564**Added to style block**: 6565```css 6566.task-checkbox { 6567 background-color: $cell_bg !important; 6568 border: 2px solid $grid_border !important; 6569} 6570``` 6571 6572**3. Day Popup Theming**: 6573 6574**Container**: 6575```javascript 6576style="background: $bg !important; 6577 border: 2px solid $border !important; 6578 box-shadow: 0 0 20px $shadow !important;" 6579``` 6580 6581**Header**: 6582```javascript 6583style="background: $header_bg !important; 6584 color: $text_primary !important; 6585 border-bottom: 1px solid $border !important;" 6586``` 6587 6588**Footer**: 6589```javascript 6590style="background: $bg !important; 6591 border-top: 1px solid $grid_border !important;" 6592``` 6593 6594**Add Event Button**: 6595```javascript 6596style="background: $border !important; 6597 color: $bg !important; 6598 border-color: $border !important;" 6599``` 6600 6601**Event Items**: 6602```javascript 6603style="background: $cell_bg !important; 6604 border: 1px solid $grid_border !important;" 6605``` 6606 6607### Before vs After 6608 6609**BEFORE (v4.8.6)**: 6610``` 6611Edit Dialog: 6612┌──────────────────┐ 6613│ ☑ Repeating Event│ ← White background ✗ 6614├──────────────────┤ 6615│ ☑ Task checkbox │ ← White background ✗ 6616└──────────────────┘ 6617 6618Day Popup: 6619┌──────────────────┐ 6620│ Monday, Feb 8 │ ← White ✗ 6621├──────────────────┤ 6622│ Team Meeting │ ← White ✗ 6623│ 2:00 PM │ 6624├──────────────────┤ 6625│ [+ Add Event] │ ← White ✗ 6626└──────────────────┘ 6627 6628Task checkbox: ☐ ← White ✗ 6629``` 6630 6631**AFTER (v4.8.7)**: 6632``` 6633Edit Dialog (Matrix): 6634┌──────────────────┐ 6635│ ☑ Repeating Event│ ← Dark green ✓ 6636├──────────────────┤ 6637│ ☑ Task checkbox │ ← Dark green ✓ 6638└──────────────────┘ 6639 6640Day Popup (Matrix): 6641┌──────────────────┐ 6642│ Monday, Feb 8 │ ← Dark green ✓ 6643├──────────────────┤ 6644│ Team Meeting │ ← Dark green ✓ 6645│ 2:00 PM │ 6646├──────────────────┤ 6647│ [+ Add Event] │ ← Green button ✓ 6648└──────────────────┘ 6649 6650Task checkbox: ☑ ← Green ✓ 6651``` 6652 6653### Complete Examples 6654 6655**Matrix Dialog**: 6656``` 6657┌──────────────────────────┐ 6658│ ✏️ Edit Event │ 6659├──────────────────────────┤ 6660│ Title: [_________] │ 6661│ Date: [__________] │ 6662│ │ 6663│ ☑ Repeating Event │ ← Dark green bg 6664├──────────────────────────┤ 6665│ ☑ Task checkbox │ ← Dark green bg 6666├──────────────────────────┤ 6667│ [Cancel] [ Save] │ 6668└──────────────────────────┘ 6669 6670All sections themed! ✓ 6671``` 6672 6673**Matrix Day Popup**: 6674``` 6675┌──────────────────────────┐ 6676│ Monday, February 8, 2026 │ ← Green header 6677├──────────────────────────┤ 6678│ ┌──────────────────────┐ │ 6679│ │ Team Meeting │ │ ← Dark green 6680│ │ 2:00 PM │ │ 6681│ └──────────────────────┘ │ 6682│ ┌──────────────────────┐ │ 6683│ │ Code Review │ │ ← Dark green 6684│ │ 4:00 PM │ │ 6685│ └──────────────────────┘ │ 6686├──────────────────────────┤ 6687│ [+ Add Event] │ ← Green button 6688└──────────────────────────┘ 6689``` 6690 6691**Purple Day Popup**: 6692``` 6693┌──────────────────────────┐ 6694│ Monday, February 8, 2026 │ ← Purple header 6695├──────────────────────────┤ 6696│ ┌──────────────────────┐ │ 6697│ │ Team Meeting │ │ ← Dark purple 6698│ │ 2:00 PM │ │ 6699│ └──────────────────────┘ │ 6700├──────────────────────────┤ 6701│ [+ Add Event] │ ← Purple button 6702└──────────────────────────┘ 6703``` 6704 6705**Professional Day Popup**: 6706``` 6707┌──────────────────────────┐ 6708│ Monday, February 8, 2026 │ ← Light header 6709├──────────────────────────┤ 6710│ ┌──────────────────────┐ │ 6711│ │ Team Meeting │ │ ← White 6712│ │ 2:00 PM │ │ 6713│ └──────────────────────┘ │ 6714├──────────────────────────┤ 6715│ [+ Add Event] │ ← Blue button 6716└──────────────────────────┘ 6717``` 6718 6719**Pink Day Popup**: 6720``` 6721┌──────────────────────────┐ 6722│ Monday, February 8, 2026 │ ← Pink header ✨ 6723├──────────────────────────┤ 6724│ ┌──────────────────────┐ │ 6725│ │ Team Meeting │ │ ← Dark pink 6726│ │ 2:00 PM │ │ 6727│ └──────────────────────┘ │ 6728├──────────────────────────┤ 6729│ [+ Add Event] │ ← Pink button 6730└──────────────────────────┘ 6731``` 6732 6733### Checkbox Theming 6734 6735**Unchecked boxes now themed**: 6736``` 6737Matrix: 6738☐ → Dark green bg, green border ✓ 6739 6740Purple: 6741☐ → Dark purple bg, purple border ✓ 6742 6743Professional: 6744☐ → White bg, gray border ✓ 6745 6746Pink: 6747☐ → Dark pink bg, pink border ✓ 6748``` 6749 6750### Complete Coverage 6751 6752**Edit Dialog - All Sections**: 6753- ✅ Header 6754- ✅ All inputs 6755- ✅ All labels 6756- ✅ **Checkbox sections** ← v4.8.7! 6757- ✅ Recurring options 6758- ✅ Button footer 6759- ✅ All checkboxes (checked & unchecked) 6760 6761**Day Popup - All Elements**: 6762- ✅ **Popup container** ← v4.8.7! 6763- ✅ **Header** ← v4.8.7! 6764- ✅ **Body** ← v4.8.7! 6765- ✅ **Event items** ← v4.8.7! 6766- ✅ **Namespace badges** ← v4.8.7! 6767- ✅ **Footer** ← v4.8.7! 6768- ✅ **Add Event button** ← v4.8.7! 6769- ✅ **No events message** ← v4.8.7! 6770 6771**Absolutely every dialog element themed!** ✨ 6772 6773### Perfect Theming Achievement 6774 6775**Every UI component in entire plugin**: 6776- ✅ Calendar grid 6777- ✅ Sidebar widget 6778- ✅ Event list 6779- ✅ Search bar 6780- ✅ Event boxes 6781- ✅ Edit dialog (complete) 6782- ✅ **Day popup** ← v4.8.7! 6783- ✅ Month picker 6784- ✅ All text 6785- ✅ All buttons 6786- ✅ All inputs 6787- ✅ **All checkboxes** ← v4.8.7! 6788- ✅ All borders 6789- ✅ All badges 6790- ✅ All backgrounds 6791 6792**NO WHITE ANYWHERE!** 6793 6794**100% COMPLETE THEMING ACHIEVED!** ✨ 6795 6796## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS 6797 6798### Fixed: Dialog Checkbox Sections Themed 6799- **Fixed:** Recurring options section background themed 6800- **Fixed:** Section has themed border accent 6801- **Result:** No white sections in dialog! 6802 6803### Fixed: Dialog Button Section Themed 6804- **Fixed:** Button area background themed 6805- **Fixed:** Top border separator themed 6806- **Result:** Complete dialog theming! 6807 6808### Fixed: Event Box Borders Themed 6809- **Fixed:** Top, right, bottom borders now themed 6810- **Fixed:** Left border remains event color 6811- **Result:** Perfect event boxes! 6812 6813### All Changes 6814 6815**1. Recurring Options Section**: 6816 6817**Before**: 6818```html 6819<div class="recurring-options" style="display:none;"> 6820<!-- White background ✗ --> 6821``` 6822 6823**After**: 6824```php 6825<div class="recurring-options" 6826 style="display:none; 6827 background: $bg !important; 6828 padding: 8px; 6829 border-left: 2px solid $border; 6830 margin-left: 4px;"> 6831<!-- Themed with accent border ✓ --> 6832``` 6833 6834**2. Dialog Actions Section**: 6835 6836**Before**: 6837```html 6838<div class="dialog-actions-sleek"> 6839<!-- White background ✗ --> 6840``` 6841 6842**After**: 6843```php 6844<div class="dialog-actions-sleek" 6845 style="background: $bg !important; 6846 border-top: 1px solid $grid_border !important;"> 6847<!-- Themed with separator ✓ --> 6848``` 6849 6850**3. Event Box Borders**: 6851 6852**Before**: 6853```php 6854border-left-color: $event_color; 6855<!-- Only left border colored ✗ --> 6856``` 6857 6858**After**: 6859```php 6860border-left-color: $event_color; 6861border-top: 1px solid $grid_border !important; 6862border-right: 1px solid $grid_border !important; 6863border-bottom: 1px solid $grid_border !important; 6864<!-- All borders themed! ✓ --> 6865``` 6866 6867### Before vs After 6868 6869**BEFORE (v4.8.5)**: 6870``` 6871Dialog: 6872┌────────────────┐ 6873│ ☑ Repeating │ 6874├────────────────┤ ← White section ✗ 6875│ Repeat: Daily │ 6876│ Until: [____] │ 6877├────────────────┤ 6878│ [Cancel] [Save]│ ← White footer ✗ 6879└────────────────┘ 6880 6881Event Box: 6882┌────────────┐ 6883│Team Meeting│ ← White borders ✗ 6884│2:00 PM │ 6885└────────────┘ 6886``` 6887 6888**AFTER (v4.8.6)**: 6889``` 6890Matrix Dialog: 6891┌────────────────┐ 6892│ ☑ Repeating │ 6893├────────────────┤ ← Dark green ✓ 6894│ Repeat: Daily │ Green accent border 6895│ Until: [____] │ 6896├────────────────┤ 6897│ [Cancel] [Save]│ ← Dark green ✓ 6898└────────────────┘ 6899 6900Matrix Event Box: 6901┌────────────┐ 6902│Team Meeting│ ← Green borders ✓ 6903│2:00 PM │ 6904└────────────┘ 6905``` 6906 6907### Dialog Section Examples 6908 6909**Matrix Theme**: 6910``` 6911┌──────────────────────────┐ 6912│ ✏️ Edit Event │ 6913├──────────────────────────┤ 6914│ ☑ Repeating Event │ 6915├║─────────────────────────┤ Green accent 6916│║ Repeat Every: Daily │ Dark green bg 6917│║ Repeat Until: [_____] │ 6918└──────────────────────────┘ 6919 [Cancel] [ Save] ← Dark green bg 6920──────────────────────────── Green border 6921``` 6922 6923**Purple Theme**: 6924``` 6925┌──────────────────────────┐ 6926│ ☑ Repeating Event │ 6927├║─────────────────────────┤ Purple accent 6928│║ Repeat options... │ Dark purple bg 6929└──────────────────────────┘ 6930 [Cancel] [ Save] ← Dark purple bg 6931──────────────────────────── Purple border 6932``` 6933 6934**Professional Theme**: 6935``` 6936┌──────────────────────────┐ 6937│ ☑ Repeating Event │ 6938├║─────────────────────────┤ Blue accent 6939│║ Repeat options... │ Light bg 6940└──────────────────────────┘ 6941 [Cancel] [ Save] ← Light bg 6942──────────────────────────── Gray border 6943``` 6944 6945**Pink Theme**: 6946``` 6947┌──────────────────────────┐ 6948│ ☑ Repeating Event ✨ │ 6949├║─────────────────────────┤ Pink accent 6950│║ Repeat options... │ Dark pink bg 6951└──────────────────────────┘ 6952 [Cancel] [ Save] ← Dark pink bg 6953──────────────────────────── Pink border 6954``` 6955 6956### Event Box Border Visual 6957 6958**Before (v4.8.5)**: 6959``` 6960Left border only: 6961█ Team Meeting 6962█ 2:00 PM 6963█ [Edit] [Delete] 6964 6965Only event color on left ✗ 6966White on other 3 sides ✗ 6967``` 6968 6969**After (v4.8.6)**: 6970``` 6971All borders themed: 6972┌─────────────┐ 6973█Team Meeting │ ← Top: themed 6974█2:00 PM │ ← Right: themed 6975█[Edit][Del] │ ← Bottom: themed 6976└─────────────┘ 6977 6978Left: Event color ✓ 6979Other 3: Theme grid_border ✓ 6980``` 6981 6982### Matrix Event Box: 6983``` 6984┌─────────────┐ Green border 6985│Team Meeting │ 6986│2:00 PM │ 6987└─────────────┘ Green border 6988↑ 6989Green left bar 6990``` 6991 6992### Purple Event Box: 6993``` 6994┌─────────────┐ Purple border 6995│Team Meeting │ 6996│2:00 PM │ 6997└─────────────┘ Purple border 6998↑ 6999Purple left bar 7000``` 7001 7002### Professional Event Box: 7003``` 7004┌─────────────┐ Gray border 7005│Team Meeting │ 7006│2:00 PM │ 7007└─────────────┘ Gray border 7008↑ 7009Event color left bar 7010``` 7011 7012### Complete Dialog Coverage 7013 7014**All sections themed**: 7015- ✅ Dialog header 7016- ✅ Form inputs 7017- ✅ Checkbox labels 7018- ✅ **Recurring options** ← v4.8.6! 7019- ✅ **Button section** ← v4.8.6! 7020- ✅ All labels 7021- ✅ All buttons 7022 7023**No white sections!** ✓ 7024 7025### Complete Event Box Coverage 7026 7027**All borders themed**: 7028- ✅ Left border (event color) 7029- ✅ **Top border** ← v4.8.6! 7030- ✅ **Right border** ← v4.8.6! 7031- ✅ **Bottom border** ← v4.8.6! 7032- ✅ Background 7033- ✅ Text 7034 7035**Perfect box outline!** ✓ 7036 7037### Visual Perfection 7038 7039**Matrix theme event list**: 7040``` 7041┌─────────────┐ 7042│Team Meeting │ ← Green box 7043│2:00 PM │ 7044└─────────────┘ 7045┌─────────────┐ 7046│Code Review │ ← Green box 7047│4:00 PM │ 7048└─────────────┘ 7049 7050All borders green! ✓ 7051``` 7052 7053**ABSOLUTE PERFECT THEMING!** ✨ 7054 7055## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS 7056 7057### Fixed: Event Dialog Fully Themed 7058- **Fixed:** Dialog background, header, inputs all themed 7059- **Fixed:** All labels, checkboxes, selects themed 7060- **Fixed:** Save and Cancel buttons themed 7061- **Result:** Dialog matches theme perfectly! 7062 7063### Fixed: Sidebar Event Borders Properly Themed 7064- **Fixed:** Event divider borders use grid_border color 7065- **Fixed:** Clean, subtle themed dividers 7066- **Result:** No more white borders in sidebar! 7067 7068### All Changes 7069 7070**1. Event Dialog Theming**: 7071 7072**Dialog container**: 7073```php 7074background: $themeStyles['bg'] !important; 7075border: 2px solid $themeStyles['border'] !important; 7076box-shadow: 0 0 20px $shadow !important; 7077``` 7078 7079**Dialog header**: 7080```php 7081background: $themeStyles['header_bg'] !important; 7082color: $themeStyles['text_primary'] !important; 7083border-bottom: 1px solid $border !important; 7084``` 7085 7086**All form inputs** (text, date, select, textarea): 7087```php 7088background: $themeStyles['cell_bg'] !important; 7089color: $themeStyles['text_primary'] !important; 7090border-color: $themeStyles['grid_border'] !important; 7091``` 7092 7093**All labels**: 7094```php 7095color: $themeStyles['text_primary'] !important; 7096``` 7097 7098**Checkboxes**: 7099```php 7100accent-color: $themeStyles['border'] !important; 7101``` 7102 7103**Buttons**: 7104```php 7105// Cancel button: 7106background: $cell_bg !important; 7107color: $text_primary !important; 7108 7109// Save button: 7110background: $border !important; 7111color: $bg !important; (or white for professional) 7112``` 7113 7114**2. Sidebar Event Borders**: 7115 7116**Before**: 7117```php 7118border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded 7119``` 7120 7121**After**: 7122```php 7123borderColor = $themeStyles['grid_border']; 7124border-bottom: 1px solid $borderColor !important; 7125``` 7126 7127### Before vs After 7128 7129**BEFORE (v4.8.4)**: 7130``` 7131Event Dialog: 7132┌────────────────┐ 7133│ Add Event │ ← White background ✗ 7134│ Title: [_____] │ ← White inputs ✗ 7135│ Date: [_____] │ 7136│ [Cancel] [Save]│ ← Default buttons ✗ 7137└────────────────┘ 7138 7139Sidebar Events: 7140Event 1 ──────── ← White border ✗ 7141Event 2 ──────── ← White border ✗ 7142``` 7143 7144**AFTER (v4.8.5)**: 7145``` 7146Event Dialog (Matrix): 7147┌────────────────┐ 7148│ Add Event │ ← Dark green background ✓ 7149│ Title: [_____] │ ← Dark green inputs ✓ 7150│ Date: [_____] │ ← Green text ✓ 7151│ [Cancel] [Save]│ ← Themed buttons ✓ 7152└────────────────┘ 7153 7154Sidebar Events (Matrix): 7155Event 1 ──────── ← Green border ✓ 7156Event 2 ──────── ← Green border ✓ 7157``` 7158 7159### Dialog Examples by Theme 7160 7161**Matrix Dialog**: 7162``` 7163┌──────────────────────────┐ 7164│ ✏️ Edit Event │ ← Dark green header 7165├──────────────────────────┤ 7166│ Title │ ← Green labels 7167│ [Team Meeting________] │ ← Dark green input 7168│ │ 7169│ Start Date │ 7170│ [2026-02-08__] │ ← Dark green input 7171│ │ 7172│ Start Time │ 7173│ [2:00 PM ▼] │ ← Green select 7174│ │ 7175│ ☑ Repeating Event │ ← Green checkbox 7176│ │ 7177│ [Cancel] [ Save] │ ← Themed buttons 7178└──────────────────────────┘ 7179 7180Everything green! ✓ 7181``` 7182 7183**Purple Dialog**: 7184``` 7185┌──────────────────────────┐ 7186│ ✏️ Edit Event │ ← Dark purple header 7187├──────────────────────────┤ 7188│ [Inputs_______________] │ ← Dark purple inputs 7189│ ☑ Checkboxes │ ← Purple accent 7190│ [Cancel] [ Save] │ ← Purple buttons 7191└──────────────────────────┘ 7192``` 7193 7194**Professional Dialog**: 7195``` 7196┌──────────────────────────┐ 7197│ ✏️ Edit Event │ ← Light gradient header 7198├──────────────────────────┤ 7199│ [Inputs_______________] │ ← White inputs 7200│ ☑ Checkboxes │ ← Blue accent 7201│ [Cancel] [ Save] │ ← Blue save button 7202└──────────────────────────┘ 7203``` 7204 7205**Pink Dialog**: 7206``` 7207┌──────────────────────────┐ 7208│ ✏️ Edit Event │ ← Dark pink header ✨ 7209├──────────────────────────┤ 7210│ [Inputs_______________] │ ← Dark pink inputs 7211│ ☑ Checkboxes │ ← Pink accent 7212│ [Cancel] [ Save] │ ← Pink buttons 7213└──────────────────────────┘ 7214``` 7215 7216### Complete Dialog Element Coverage 7217 7218**All form elements themed**: 7219- ✅ Dialog container 7220- ✅ Dialog header 7221- ✅ Close button (×) 7222- ✅ Title input 7223- ✅ Namespace search 7224- ✅ Namespace dropdown 7225- ✅ Description textarea 7226- ✅ Start date input 7227- ✅ End date input 7228- ✅ Recurring checkbox 7229- ✅ Recurrence type select 7230- ✅ Recurrence end date 7231- ✅ Start time select 7232- ✅ End time select 7233- ✅ Color select 7234- ✅ Custom color picker 7235- ✅ Task checkbox 7236- ✅ All labels 7237- ✅ Cancel button 7238- ✅ Save button 7239 7240**Every single dialog element themed!** 7241 7242### Sidebar Border Example 7243 7244**Matrix Sidebar**: 7245``` 7246┌────────────────┐ 7247│ Today │ ← Green section header 7248├────────────────┤ 7249│ Team Meeting │ 7250│ 2:00 PM │ 7251├────────────────┤ ← Green border (grid_border) 7252│ Code Review │ 7253│ 4:00 PM │ 7254├────────────────┤ ← Green border 7255│ Stand-up │ 7256│ All day │ 7257└────────────────┘ 7258 7259Subtle green dividers! ✓ 7260``` 7261 7262### Complete Achievement 7263 7264**Every UI element themed**: 7265- ✅ Calendar 7266- ✅ Sidebar widget 7267- ✅ Event list 7268- ✅ Search bar 7269- ✅ **Event dialog** ← v4.8.5! 7270- ✅ Month picker 7271- ✅ **Sidebar dividers** ← v4.8.5! 7272- ✅ All text 7273- ✅ All inputs 7274- ✅ All buttons 7275- ✅ All borders 7276- ✅ All checkboxes 7277 7278**ABSOLUTE COMPLETE THEMING!** ✨ 7279 7280## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS 7281 7282### Fixed: Professional Theme Background Consistency 7283- **Fixed:** Container and event backgrounds now match sidebar 7284- **Fixed:** Lighter, cleaner appearance 7285- **Fixed:** Better contrast and readability 7286- **Result:** Professional theme looks cohesive! 7287 7288### The Problem 7289 7290**v4.8.3 Professional theme**: 7291``` 7292Sidebar: Light background (#f5f7fa) 7293Calendar: Medium background (#e8ecf1) ← Didn't match! 7294Events: Light background (#f5f7fa) 7295 7296Inconsistent! ✗ 7297``` 7298 7299### The Fix 7300 7301**Updated Professional theme colors for consistency**: 7302 7303```php 7304// Before: 7305'bg' => '#e8ecf1', // Medium gray-blue 7306'cell_bg' => '#f5f7fa', // Very light 7307'grid_bg' => '#d5dbe3', // Medium-dark 7308 7309// After: 7310'bg' => '#f5f7fa', // Very light (matches sidebar) 7311'cell_bg' => '#ffffff', // Pure white (clean) 7312'grid_bg' => '#e8ecf1', // Subtle contrast 7313'grid_border' => '#d0d7de', // Softer borders 7314``` 7315 7316### Before vs After 7317 7318**BEFORE (v4.8.3)**: 7319``` 7320Professional Theme: 7321┌────────────────┐ 7322│ Calendar │ ← Medium gray (#e8ecf1) 7323│ ┌────────────┐ │ 7324│ │ Event │ │ ← Light (#f5f7fa) 7325│ └────────────┘ │ 7326└────────────────┘ 7327 7328Sidebar: 7329┌────────────────┐ 7330│ Widget │ ← Light (#f5f7fa) 7331└────────────────┘ 7332 7333Backgrounds don't match! ✗ 7334``` 7335 7336**AFTER (v4.8.4)**: 7337``` 7338Professional Theme: 7339┌────────────────┐ 7340│ Calendar │ ← Light (#f5f7fa) 7341│ ┌────────────┐ │ 7342│ │ Event │ │ ← White (#ffffff) 7343│ └────────────┘ │ 7344└────────────────┘ 7345 7346Sidebar: 7347┌────────────────┐ 7348│ Widget │ ← Light (#f5f7fa) 7349└────────────────┘ 7350 7351Perfect match! ✓ 7352``` 7353 7354### New Professional Theme Colors 7355 7356**Backgrounds**: 7357- Container: `#f5f7fa` (light blue-gray) 7358- Events: `#ffffff` (pure white) 7359- Grid: `#e8ecf1` (subtle contrast) 7360 7361**Text**: 7362- Primary: `#2c3e50` (dark blue-gray) 7363- Bright: `#4a90e2` (blue accent) 7364- Dim: `#7f8c8d` (medium gray) 7365 7366**Borders**: 7367- Main: `#4a90e2` (blue) 7368- Grid: `#d0d7de` (soft gray) 7369 7370**Header**: 7371- Gradient: `#ffffff` → `#f5f7fa` 7372 7373### Visual Example 7374 7375**Professional Theme Now**: 7376``` 7377┌─────────────────────────────┐ 7378│ February 2026 │ ← White to light gradient 7379├─┬─┬─┬─┬─┬─┬─┬───────────────┤ 7380│S│M│T│W│T│F│S│ │ ← Light background 7381├─┼─┼─┼─┼─┼─┼─┤ │ 7382│ │ │1│2│3│4│5│ Event List │ ← White events 7383│ │ │ │ │ │ │ │ ┌───────────┐ │ 7384│ │ │ │ │[8]│ │ │ Meeting │ │ ← White on light 7385└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘ 7386 7387Clean, professional look! ✓ 7388``` 7389 7390### Comparison with Other Themes 7391 7392**Matrix** (dark): 7393- Container: #242424 (dark green) 7394- Events: #242424 (dark green) 7395- Consistent dark theme ✓ 7396 7397**Purple** (dark): 7398- Container: #1a0d14 (dark purple) 7399- Events: #2a2030 (dark purple) 7400- Consistent dark theme ✓ 7401 7402**Professional** (light): 7403- Container: #f5f7fa (light blue) 7404- Events: #ffffff (white) 7405- Consistent light theme ✓ 7406 7407**Pink** (dark): 7408- Container: #1a0d14 (dark pink) 7409- Events: #1a0d14 (dark pink) 7410- Consistent dark theme ✓ 7411 7412**All themes now consistent!** 7413 7414### Better Contrast 7415 7416**Professional theme improvements**: 7417 7418**Readability**: 7419- Dark text (#2c3e50) on white/light backgrounds ✓ 7420- Excellent contrast ratio ✓ 7421- Easy on the eyes ✓ 7422 7423**Visual hierarchy**: 7424- White events pop against light container ✓ 7425- Blue accents stand out ✓ 7426- Clean, modern look ✓ 7427 7428**Professional appearance**: 7429- Lighter = more corporate/business feel ✓ 7430- Clean whites = premium quality ✓ 7431- Subtle grays = sophisticated ✓ 7432 7433### Complete Theme Consistency 7434 7435**All themes now have matching backgrounds**: 7436 7437**Matrix**: 7438- Sidebar & Calendar both dark green ✓ 7439 7440**Purple**: 7441- Sidebar & Calendar both dark purple ✓ 7442 7443**Professional**: 7444- Sidebar & Calendar both light ✓ (v4.8.4!) 7445 7446**Pink**: 7447- Sidebar & Calendar both dark pink ✓ 7448 7449**Perfect visual unity across all views!** ✨ 7450 7451## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES 7452 7453### Fixed: Bold Text in Descriptions Themed 7454- **Fixed:** **Bold text** now uses theme primary color 7455- **Fixed:** Both `**text**` and `__text__` syntax themed 7456- **Result:** Bold text matches theme! 7457 7458### Fixed: Search Bar Fully Themed 7459- **Fixed:** Search input has !important on all styles 7460- **Fixed:** Icon and placeholder text themed 7461- **Result:** Search bar perfectly themed! 7462 7463### Fixed: Sidebar Event Boxes Themed 7464- **Fixed:** Event borders in sidebar now use theme grid_border color 7465- **Fixed:** Borders have !important flag 7466- **Result:** Sidebar boxes match theme! 7467 7468### All Changes 7469 7470**1. Bold Text Styling**: 7471 7472**Before**: 7473```html 7474<strong>Bold text</strong> ← Default black 7475``` 7476 7477**After**: 7478```php 7479<strong style="color: $text_primary !important; font-weight:bold;"> 7480 Bold text 7481</strong> 7482 7483Matrix: Green bold ✓ 7484Purple: Lavender bold ✓ 7485Professional: Dark bold ✓ 7486Pink: Pink bold ✓ 7487``` 7488 7489**2. Search Bar**: 7490 7491**Before**: 7492```php 7493style="background: $bg; color: $text;" 7494Could be overridden by CSS 7495``` 7496 7497**After**: 7498```php 7499style="background: $bg !important; 7500 color: $text_primary !important; 7501 border-color: $grid_border !important;" 7502 7503Cannot be overridden! ✓ 7504``` 7505 7506**3. Sidebar Event Boxes**: 7507 7508**Before**: 7509```php 7510$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded 7511``` 7512 7513**After**: 7514```php 7515$borderColor = $themeStyles['grid_border']; // From theme 7516border-bottom: 1px solid $borderColor !important; 7517 7518Matrix: Green borders ✓ 7519Purple: Purple borders ✓ 7520Professional: Gray borders ✓ 7521Pink: Pink borders ✓ 7522``` 7523 7524### Before vs After 7525 7526**BEFORE (v4.8.2)**: 7527``` 7528Event description: 7529"Please review **Q1 Goals** carefully" 7530 ↑ 7531 Black bold ✗ 7532 7533Search bar: 7534[ Search...] ← Gray placeholder ✗ 7535 7536Sidebar: 7537┌────────────┐ 7538│ Event 1 │ 7539├────────────┤ ← Gray border ✗ 7540│ Event 2 │ 7541└────────────┘ 7542``` 7543 7544**AFTER (v4.8.3)**: 7545``` 7546Matrix Theme: 7547 7548Event description: 7549"Please review **Q1 Goals** carefully" 7550 ↑ 7551 Green bold ✓ 7552 7553Search bar: 7554[ Search...] ← Green themed ✓ 7555 7556Sidebar: 7557┌────────────┐ 7558│ Event 1 │ 7559├────────────┤ ← Green border ✓ 7560│ Event 2 │ 7561└────────────┘ 7562``` 7563 7564### Examples by Theme 7565 7566**Matrix Theme**: 7567``` 7568Description: 7569"Check **important notes** and links" 7570 ↑ 7571 Green bold 7572 7573Sidebar boxes: 7574Event 1 7575───────── Green border 7576Event 2 7577───────── Green border 7578``` 7579 7580**Purple Theme**: 7581``` 7582Description: 7583"Review **agenda items** before meeting" 7584 ↑ 7585 Lavender bold 7586 7587Sidebar boxes: 7588Event 1 7589───────── Purple border 7590Event 2 7591───────── Purple border 7592``` 7593 7594**Professional Theme**: 7595``` 7596Description: 7597"Update **quarterly reports** by Friday" 7598 ↑ 7599 Dark bold 7600 7601Sidebar boxes: 7602Event 1 7603───────── Gray border 7604Event 2 7605───────── Gray border 7606``` 7607 7608**Pink Theme**: 7609``` 7610Description: 7611"Don't forget **party supplies** ✨" 7612 ↑ 7613 Pink bold 7614 7615Sidebar boxes: 7616Event 1 7617───────── Pink border 7618Event 2 ✨ 7619───────── Pink border 7620``` 7621 7622### Complete Formatting Coverage 7623 7624**Text formatting themed**: 7625- ✅ Regular text 7626- ✅ **Bold text** ← NEW! 7627- ✅ Links 7628- ✅ Italic text (inherits) 7629- ✅ Code (inherits) 7630 7631**UI elements themed**: 7632- ✅ Search bar ← Enhanced! 7633- ✅ Search icon ← Enhanced! 7634- ✅ Search placeholder ← Enhanced! 7635- ✅ Sidebar borders ← NEW! 7636- ✅ Event borders 7637- ✅ Badges 7638- ✅ Buttons 7639 7640**Every element perfectly themed!** 7641 7642### Search Bar Coverage 7643 7644**All aspects themed**: 7645- Background: Theme cell_bg ✓ 7646- Text color: Theme text_primary ✓ 7647- Border: Theme grid_border ✓ 7648- Placeholder: Inherits text color ✓ 7649- Icon (): In placeholder ✓ 7650- Clear button (✕): Themed ✓ 7651 7652**Cannot be overridden!** (all have !important) 7653 7654### Sidebar Event Box Styling 7655 7656**Consistent borders**: 7657``` 7658Matrix: 7659╔════════════╗ 7660║ Event 1 ║ 7661╟────────────╢ ← grid_border color 7662║ Event 2 ║ 7663╚════════════╝ 7664 7665All themes match perfectly! ✓ 7666``` 7667 7668### Complete Theme Achievement 7669 7670**Every single element themed**: 7671- ✅ Backgrounds 7672- ✅ Text (regular) 7673- ✅ Text (bold) ← v4.8.3! 7674- ✅ Links 7675- ✅ Badges 7676- ✅ Buttons 7677- ✅ Checkboxes 7678- ✅ Icons 7679- ✅ Borders 7680- ✅ Search bar ← Enhanced v4.8.3! 7681- ✅ Sidebar boxes ← v4.8.3! 7682- ✅ Today marker 7683- ✅ Calendar grid 7684- ✅ Event panels 7685 7686**ABSOLUTE PERFECTION!** ✨ 7687 7688## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS 7689 7690### Fixed: Links in Descriptions Now Themed 7691- **Fixed:** All links in event descriptions now use theme color 7692- **Fixed:** DokuWiki links [[page|text]] themed 7693- **Fixed:** Markdown links [text](url) themed 7694- **Fixed:** Plain URLs themed 7695- **Result:** Links match theme perfectly! 7696 7697### The Problem 7698 7699**v4.8.1 behavior**: 7700``` 7701Event description: 7702"Check out https://example.com" ← Blue default link ✗ 7703"See [[wiki:page|docs]]" ← Blue default link ✗ 7704``` 7705 7706### The Fix 7707 7708**Added inline color styling to ALL link types**: 7709 7710```php 7711// Get theme colors: 7712$linkColor = $themeStyles['border'] . ' !important'; 7713$linkStyle = ' style="color:' . $linkColor . ';"'; 7714 7715// Apply to links: 7716<a href="..." style="color: #00cc07 !important;">link</a> 7717``` 7718 7719**All link types themed**: 77201. DokuWiki syntax: `[[page|text]]` 77212. Markdown syntax: `[text](url)` 77223. Plain URLs: `https://example.com` 7723 7724### Before vs After 7725 7726**BEFORE (v4.8.1)**: 7727``` 7728Matrix Theme Description: 7729"Visit https://example.com for more info" 7730 ↑ 7731 Blue link ✗ (doesn't match green theme) 7732``` 7733 7734**AFTER (v4.8.2)**: 7735``` 7736Matrix Theme Description: 7737"Visit https://example.com for more info" 7738 ↑ 7739 Green link ✓ (matches theme!) 7740``` 7741 7742### Link Colors by Theme 7743 7744**Matrix**: 7745- Links: Green (#00cc07) !important 7746- Matches: Border, badges, highlights 7747 7748**Purple**: 7749- Links: Purple (#9b59b6) !important 7750- Matches: Border, badges, highlights 7751 7752**Professional**: 7753- Links: Blue (#4a90e2) !important 7754- Matches: Border, badges, highlights 7755 7756**Pink**: 7757- Links: Hot Pink (#ff1493) !important 7758- Matches: Border, badges, highlights ✨ 7759 7760### Examples 7761 7762**Matrix Description with Links**: 7763``` 7764Event: Team Meeting 7765Description: 7766"Review [[wiki:q1goals|Q1 Goals]] 7767and visit https://metrics.com" 7768 7769Both links → Green ✓ 7770``` 7771 7772**Purple Description with Links**: 7773``` 7774Event: Planning Session 7775Description: 7776"Check [schedule](https://cal.com) 7777for availability" 7778 7779Link → Purple ✓ 7780``` 7781 7782**Professional Description with Links**: 7783``` 7784Event: Client Call 7785Description: 7786"Prepare [[reports|Monthly Reports]] 7787before the call" 7788 7789Link → Blue ✓ 7790``` 7791 7792**Pink Description with Links**: 7793``` 7794Event: Party Planning 7795Description: 7796"RSVP at https://party.com ✨" 7797 7798Link → Hot Pink ✓ 7799``` 7800 7801### Technical Implementation 7802 7803**Updated renderDescription() function**: 7804 7805```php 7806private function renderDescription($description, $themeStyles = null) { 7807 // Get theme 7808 if ($themeStyles === null) { 7809 $theme = $this->getSidebarTheme(); 7810 $themeStyles = $this->getSidebarThemeStyles($theme); 7811 } 7812 7813 // Create link style 7814 $linkColor = $themeStyles['border'] . ' !important'; 7815 $linkStyle = ' style="color:' . $linkColor . ';"'; 7816 7817 // Apply to all link types: 7818 $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>'; 7819} 7820``` 7821 7822### Complete Theming 7823 7824**Every text element**: 7825- ✅ Event titles 7826- ✅ Event dates 7827- ✅ Event descriptions 7828- ✅ **Links in descriptions** ← NEW! 7829- ✅ Badges 7830- ✅ Buttons 7831 7832**Every color unified!** 7833 7834### Unified Theme Experience 7835 7836**Matrix Theme**: 7837``` 7838Everything green: 7839- Text: Green ✓ 7840- Links: Green ✓ 7841- Badges: Green ✓ 7842- Borders: Green ✓ 7843- Buttons: Green ✓ 7844- Today marker: Green ✓ 7845 7846Perfect harmony! ✓ 7847``` 7848 7849**No default blue links breaking the theme!** 7850 7851### Link Types Supported 7852 7853**1. DokuWiki Syntax**: 7854``` 7855[[page|Link Text]] → Themed ✓ 7856[[page]] → Themed ✓ 7857[[page#section|Text]] → Themed ✓ 7858``` 7859 7860**2. Markdown Syntax**: 7861``` 7862[Link Text](https://url.com) → Themed ✓ 7863[Text](internal-page) → Themed ✓ 7864``` 7865 7866**3. Plain URLs**: 7867``` 7868https://example.com → Themed ✓ 7869http://site.org → Themed ✓ 7870``` 7871 7872**All links perfectly themed!** 7873 7874## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER 7875 7876### Fixed: All Badges Now Themed 7877- **Fixed:** TODAY badge themed with theme color 7878- **Fixed:** PAST DUE badge uses orange (warning color) 7879- **Fixed:** Namespace badges themed 7880- **Fixed:** All badges visible and hidden 7881- **Result:** All badges match theme! 7882 7883### Fixed: Today Cell More Prominent 7884- **Fixed:** Today cell now has 2px border in theme color 7885- **Fixed:** Border added to both PHP and JavaScript 7886- **Result:** Today stands out clearly! 7887 7888### Fixed: Past Event Text Fully Themed 7889- **Fixed:** Event-info div backgrounds ensure no gray 7890- **Result:** Expanded past events completely themed! 7891 7892### All Changes 7893 7894**1. Badge Theming**: 7895 7896**TODAY Badge**: 7897```php 7898// PHP & JavaScript: 7899style="background: $themeStyles['border'] !important; 7900 color: $bg !important;" 7901 7902Matrix: Green badge 7903Purple: Purple badge 7904Professional: Blue badge with white text 7905Pink: Pink badge 7906``` 7907 7908**PAST DUE Badge** (always orange): 7909```php 7910style="background: #ff9800 !important; 7911 color: #fff !important;" 7912``` 7913 7914**Namespace Badge**: 7915```php 7916style="background: $themeStyles['border'] !important; 7917 color: $bg !important;" 7918``` 7919 7920**2. Today Cell Border**: 7921 7922**PHP**: 7923```php 7924$todayBorder = $isToday ? 7925 'border:2px solid ' . $themeStyles['border'] . ' !important;' : ''; 7926``` 7927 7928**JavaScript**: Same 7929 7930**Result**: Today cell has prominent colored border! 7931 7932### Before vs After 7933 7934**BEFORE (v4.8.0)**: 7935``` 7936Calendar: 7937┌─┬─┬─┬─┬─┬─┬─┐ 7938│1│2│3│4│5│6│7│ 7939│ │ │ │[8]│ │ │ ← Today: subtle background 7940└─┴─┴─┴─┴─┴─┴─┘ 7941 7942Event badges: 7943Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗ 7944``` 7945 7946**AFTER (v4.8.1)**: 7947``` 7948Calendar (Matrix): 7949┌─┬─┬─┬─┬─┬─┬─┐ 7950│1│2│3│4│5│6│7│ 7951│ │ │ │[8]│ │ │ ← Today: green border 2px ✓ 7952└─┴─┴─┴─┴─┴─┴─┘ 7953 7954Event badges (Matrix): 7955Mon, Feb 8 [TODAY] [Work] ← Green badges ✓ 7956``` 7957 7958### Matrix Theme Example 7959 7960**Calendar**: 7961``` 7962Today cell: 7963┌────┐ 7964│ 8 │ Dark green bg + Green 2px border 7965└────┘ 7966Very obvious! 7967``` 7968 7969**Badges**: 7970``` 7971[TODAY] ← Green bg, dark text 7972[Work] ← Green bg, dark text 7973[PAST DUE] ← Orange bg, white text 7974``` 7975 7976### Purple Theme Example 7977 7978**Calendar**: 7979``` 7980Today cell: 7981┌────┐ 7982│ 8 │ Dark purple bg + Purple 2px border 7983└────┘ 7984``` 7985 7986**Badges**: 7987``` 7988[TODAY] ← Purple bg 7989[Work] ← Purple bg 7990``` 7991 7992### Professional Theme Example 7993 7994**Calendar**: 7995``` 7996Today cell: 7997┌────┐ 7998│ 8 │ Light blue bg + Blue 2px border 7999└────┘ 8000``` 8001 8002**Badges**: 8003``` 8004[TODAY] ← Blue bg, white text 8005[Work] ← Blue bg, white text 8006``` 8007 8008### Pink Theme Example 8009 8010**Calendar**: 8011``` 8012Today cell: 8013┌────┐ 8014│ 8 │ Dark pink bg + Pink 2px border ✨ 8015└────┘ 8016``` 8017 8018**Badges**: 8019``` 8020[TODAY] ← Pink bg 8021[Work] ← Pink bg ✨ 8022``` 8023 8024### Complete Badge Coverage 8025 8026**All badges themed**: 8027- ✅ TODAY badge (theme color) 8028- ✅ PAST DUE badge (orange warning) 8029- ✅ Namespace badges (theme color) 8030- ✅ Visible events 8031- ✅ Hidden/past events 8032 8033**No gray badges anywhere!** 8034 8035### Today Cell Visual 8036 8037**Dual indicators**: 80381. Background color (theme today bg) 80392. Border (2px theme color) ← NEW! 8040 8041**Result**: Today is VERY obvious! 8042 8043**Matrix**: Green bg + Green border 8044**Purple**: Purple bg + Purple border 8045**Professional**: Light blue bg + Blue border 8046**Pink**: Pink bg + Pink border ✨ 8047 8048### Complete Theming 8049 8050**Every element themed**: 8051- ✅ Backgrounds 8052- ✅ Text colors 8053- ✅ Badges (v4.8.1!) 8054- ✅ Today marker (v4.8.1!) 8055- ✅ Checkboxes 8056- ✅ Buttons 8057- ✅ Icons 8058 8059**Absolutely everything!** ✨ 8060 8061## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING 8062 8063### Fixed: All Event Backgrounds Now Themed 8064- **Fixed:** event-info div now has themed background 8065- **Fixed:** event-meta-compact div (visible) now has themed background 8066- **Fixed:** event-desc-compact div now has themed background 8067- **Fixed:** All !important flags added to prevent CSS override 8068- **Result:** Entire event item fully themed! 8069 8070### Fixed: Description Text Shows Correct Color Immediately 8071- **Fixed:** Description divs now have explicit background + color on load 8072- **Fixed:** Both visible and hidden descriptions fully styled 8073- **Result:** No more gray text on initial load! 8074 8075### The Problem 8076 8077**v4.7.9 behavior**: 8078``` 8079Expanded past event: 8080┌────────────────────────┐ 8081│ ▾ Team Meeting │ ← Themed ✓ 8082│ Mon, Feb 8 │ ← Themed ✓ 8083│ │ 8084│ [Event details] │ ← Gray background ✗ 8085│ [Description] │ ← Gray text until navigation ✗ 8086└────────────────────────┘ 8087 8088Only the date/time div was themed! 8089``` 8090 8091### The Fix 8092 8093**Added background to ALL inner divs**: 8094 8095**PHP**: 8096```php 8097// Event container: 8098style="background:' . $themeStyles['cell_bg'] . ' !important;" 8099 8100// event-info wrapper: 8101<div class="event-info" 8102 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 8103 8104// event-meta-compact: 8105<div class="event-meta-compact" 8106 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 8107 8108// event-desc-compact: 8109<div class="event-desc-compact" 8110 style="background:' . $themeStyles['cell_bg'] . ' !important; 8111 color:' . $themeStyles['text_dim'] . ' !important;"> 8112``` 8113 8114**JavaScript**: Same styling applied 8115 8116### Before vs After 8117 8118**BEFORE (v4.7.9)**: 8119``` 8120Matrix Theme - Expanded Event: 8121┌────────────────────────┐ 8122│ ▾ Team Meeting │ 8123│ Mon, Feb 8 ← Green │ 8124│ │ 8125│ Details ← Gray ✗ │ 8126│ Description ← Gray ✗ │ 8127│ [✏️] [️] │ 8128└────────────────────────┘ 8129``` 8130 8131**AFTER (v4.8.0)**: 8132``` 8133Matrix Theme - Expanded Event: 8134┌────────────────────────┐ 8135│ ▾ Team Meeting │ 8136│ Mon, Feb 8 ← Green │ 8137│ │ 8138│ Details ← Green ✓│ 8139│ Description ← Green ✓│ 8140│ [✏️] [️] │ 8141└────────────────────────┘ 8142 8143Entire event themed! 8144``` 8145 8146### What's Themed Now 8147 8148**Event Item Structure** (all themed): 8149``` 8150event-compact-item ← Themed ✓ 8151 └─ event-info ← Themed ✓ (v4.8.0!) 8152 ├─ event-title-row ← Themed ✓ 8153 ├─ event-meta ← Themed ✓ (v4.8.0!) 8154 └─ event-desc ← Themed ✓ (v4.8.0!) 8155``` 8156 8157**Every layer has background!** 8158 8159### Matrix Theme Example 8160 8161**Complete event**: 8162``` 8163┌────────────────────────────┐ 8164│ Team Meeting │ ← Dark green bg 8165│ Mon, Feb 8 • 2:00 PM │ ← Dark green bg 8166│ Discussed Q1 goals and │ ← Dark green bg 8167│ set targets for team │ ← Dark green bg 8168│ [✏️] [️] [☑] │ ← Dark green bg 8169└────────────────────────────┘ 8170 8171Consistent green throughout! ✓ 8172``` 8173 8174### Purple Theme Example 8175 8176``` 8177┌────────────────────────────┐ 8178│ Team Meeting │ ← Dark purple bg 8179│ Mon, Feb 8 • 2:00 PM │ ← Dark purple bg 8180│ Discussed Q1 goals │ ← Dark purple bg 8181│ [✏️] [️] [☑] │ ← Dark purple bg 8182└────────────────────────────┘ 8183 8184Consistent purple throughout! ✓ 8185``` 8186 8187### Professional Theme Example 8188 8189``` 8190┌────────────────────────────┐ 8191│ Team Meeting │ ← Light bg 8192│ Mon, Feb 8 • 2:00 PM │ ← Light bg 8193│ Discussed Q1 goals │ ← Light bg 8194│ [✏️] [️] [☑] │ ← Light bg 8195└────────────────────────────┘ 8196 8197Consistent light throughout! ✓ 8198``` 8199 8200### Pink Theme Example 8201 8202``` 8203┌────────────────────────────┐ 8204│ Team Meeting │ ← Dark pink bg 8205│ Mon, Feb 8 • 2:00 PM │ ← Dark pink bg 8206│ Discussed Q1 goals │ ← Dark pink bg 8207│ [✏️] [️] [☑] │ ← Dark pink bg 8208└────────────────────────────┘ 8209 8210Consistent pink throughout! ✓ 8211``` 8212 8213### Complete Theming 8214 8215**Every element, every layer**: 8216- ✅ Container 8217- ✅ Event item 8218- ✅ Event info wrapper (v4.8.0!) 8219- ✅ Title row 8220- ✅ Meta div (v4.8.0!) 8221- ✅ Description div (v4.8.0!) 8222- ✅ Action buttons 8223- ✅ Checkboxes 8224 8225**No gray anywhere!** 8226 8227### Why Multiple Backgrounds? 8228 8229**CSS layers stack**: 8230```html 8231<div style="background: green;"> ← Layer 1 8232 <div style="background: inherit;"> ← Could be gray! 8233 <div>Content</div> ← Inherits gray! 8234 </div> 8235</div> 8236 8237Better: 8238<div style="background: green;"> ← Layer 1 8239 <div style="background: green;"> ← Layer 2 forced 8240 <div style="background: green;"> ← Layer 3 forced 8241 Content ← All green! 8242 </div> 8243 </div> 8244</div> 8245``` 8246 8247**Every layer forced = Perfect theming!** 8248 8249### !important Everywhere 8250 8251**All styling now uses !important**: 8252- background: ... !important 8253- color: ... !important 8254 8255**Result**: CSS cannot override themes! 8256 8257**Version 4.8.0 = Complete, bulletproof theming!** ✨ 8258 8259## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS 8260 8261### Fixed: Past Event Expanded Background Themed 8262- **Fixed:** Past event meta div now has theme background when expanded 8263- **Fixed:** Both PHP and JavaScript render with theme background 8264- **Result:** Expanded past events have proper themed background! 8265 8266### ✅ Fixed: Checkboxes Now Themed 8267- **Fixed:** Task checkboxes use accent-color matching theme 8268- **Fixed:** Cursor changes to pointer on hover 8269- **Result:** Checkboxes match theme color! 8270 8271### Fixed: Action Buttons (Edit/Delete) Themed 8272- **Fixed:** Edit (✏️) and Delete (️) buttons now themed 8273- **Fixed:** Background, text, and border all use theme colors 8274- **Result:** All icons themed! 8275 8276### All Changes 8277 8278**1. Past Event Expanded Background**: 8279 8280**PHP**: 8281```php 8282// Before: 8283<div class="event-meta-compact" style="display:none;"> 8284 8285// After: 8286<div class="event-meta-compact" 8287 style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;"> 8288``` 8289 8290**JavaScript**: Same treatment 8291 8292**Result**: Expanded past events have themed background! 8293 8294**2. Task Checkboxes**: 8295 8296**PHP & JavaScript**: 8297```php 8298// Added accent-color: 8299<input type="checkbox" 8300 style="accent-color:' . $themeStyles['border'] . ' !important; 8301 cursor:pointer;"> 8302``` 8303 8304**accent-color** changes the checkbox color: 8305- Matrix: Green checkboxes ✓ 8306- Purple: Purple checkboxes ✓ 8307- Professional: Blue checkboxes ✓ 8308- Pink: Pink checkboxes ✓ 8309 8310**3. Edit/Delete Buttons**: 8311 8312**PHP**: 8313```php 8314<button class="event-action-btn" 8315 style="color:' . $themeStyles['text_primary'] . ' !important; 8316 background:' . $themeStyles['cell_bg'] . ' !important; 8317 border-color:' . $themeStyles['grid_border'] . ' !important;"> 8318 ️ 8319</button> 8320``` 8321 8322**JavaScript**: Same 8323 8324**Result**: Buttons blend with theme! 8325 8326### Before vs After 8327 8328**BEFORE (v4.7.8)**: 8329``` 8330Past Event (expanded): 8331┌─────────────────────────┐ 8332│ ▾ Team Meeting │ 8333│ Mon, Feb 8 │ ← White background ✗ 8334│ Description │ 8335├─────────────────────────┤ 8336│ [✏️] [️] [☐] │ ← Default colors ✗ 8337└─────────────────────────┘ 8338``` 8339 8340**AFTER (v4.7.9)**: 8341``` 8342Past Event (expanded - Matrix): 8343┌─────────────────────────┐ 8344│ ▾ Team Meeting │ 8345│ Mon, Feb 8 │ ← Dark green bg ✓ 8346│ Description │ 8347├─────────────────────────┤ 8348│ [✏️] [️] [☑] │ ← Themed ✓ 8349└─────────────────────────┘ 8350``` 8351 8352### Matrix Theme Example 8353 8354**Checkboxes**: Green accent 8355**Buttons**: Dark bg, green text, green borders 8356**Expanded**: Dark green background 8357 8358``` 8359Task: ☑ Complete report ← Green checkmark 8360[✏️] [️] ← Dark buttons with green 8361``` 8362 8363### Purple Theme Example 8364 8365**Checkboxes**: Purple accent 8366**Buttons**: Dark purple bg, lavender text 8367**Expanded**: Dark purple background 8368 8369``` 8370Task: ☑ Complete report ← Purple checkmark 8371[✏️] [️] ← Purple themed 8372``` 8373 8374### Professional Theme Example 8375 8376**Checkboxes**: Blue accent 8377**Buttons**: Light bg, dark text 8378**Expanded**: Light background 8379 8380``` 8381Task: ☑ Complete report ← Blue checkmark 8382[✏️] [️] ← Light themed 8383``` 8384 8385### Pink Theme Example 8386 8387**Checkboxes**: Pink accent 8388**Buttons**: Dark pink bg, pink text 8389**Expanded**: Dark pink background 8390 8391``` 8392Task: ☑ Complete report ← Pink checkmark 8393[✏️] [️] ← Pink themed 8394``` 8395 8396### Complete Icon Coverage 8397 8398**Themed Icons/Buttons**: 8399- ✅ Task checkboxes (accent-color) 8400- ✅ Edit button (✏️) 8401- ✅ Delete button (️) 8402- ✅ Navigation arrows (◀ ▶) 8403- ✅ Today button 8404- ✅ Past Events arrow (▶) 8405 8406**All interactive elements themed!** 8407 8408### How accent-color Works 8409 8410**Modern CSS property** for form controls: 8411```css 8412input[type="checkbox"] { 8413 accent-color: #00cc07; /* Green checkbox! */ 8414} 8415``` 8416 8417**Browser support**: All modern browsers ✓ 8418 8419**Result**: Checkboxes automatically match theme! 8420 8421### Complete Theme Coverage 8422 8423**Backgrounds**: 8424- ✅ Container 8425- ✅ Calendar-left 8426- ✅ Calendar-right 8427- ✅ Event items 8428- ✅ Past event expanded (v4.7.9!) 8429- ✅ Action buttons (v4.7.9!) 8430 8431**Icons/Controls**: 8432- ✅ Checkboxes (v4.7.9!) 8433- ✅ Edit/Delete buttons (v4.7.9!) 8434- ✅ Navigation buttons 8435- ✅ All arrows 8436 8437**Every element perfectly themed!** ✨ 8438 8439## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS 8440 8441### Fixed: White Bar at Bottom of Calendar 8442- **Fixed:** Added background to calendar-left div with !important 8443- **Result:** No more white bar at bottom! 8444 8445### Fixed: Past Event Expanded Details Not Themed 8446- **Fixed:** Past event date/time now themed when expanded 8447- **Fixed:** Past event descriptions now themed when expanded 8448- **Fixed:** Both PHP and JavaScript render with theme colors 8449- **Result:** Expanding past events shows themed text! 8450 8451### Fixed: Event Description Text Color 8452- **Fixed:** All event descriptions now use theme text_dim color 8453- **Fixed:** Both visible and hidden descriptions themed 8454- **Result:** Descriptions always match theme! 8455 8456### All Changes 8457 8458**1. Bottom White Bar** (calendar-left div): 8459 8460**Before**: 8461```html 8462<div class="calendar-compact-left"> 8463<!-- White background showing at bottom --> 8464``` 8465 8466**After**: 8467```html 8468<div class="calendar-compact-left" 8469 style="background: #242424 !important;"> 8470<!-- Matches theme background --> 8471``` 8472 8473**2. Past Event Expanded Details**: 8474 8475**PHP** - Added colors to hidden details: 8476```php 8477// Past event meta (hidden): 8478<span class="event-date-time" 8479 style="color:' . $themeStyles['text_dim'] . ' !important;"> 8480 8481// Past event description (hidden): 8482<div class="event-desc-compact" 8483 style="display:none; color:' . $themeStyles['text_dim'] . ' !important;"> 8484``` 8485 8486**JavaScript** - Same treatment: 8487```javascript 8488// Past event meta: 8489html += '<span class="event-date-time" 8490 style="color:' + themeStyles.text_dim + ' !important;">'; 8491 8492// Past event description: 8493html += '<div class="event-desc-compact" 8494 style="display: none; color:' + themeStyles.text_dim + ' !important;">'; 8495``` 8496 8497**3. All Event Descriptions**: 8498 8499**Both visible and hidden descriptions now themed**: 8500```php 8501// PHP: 8502style="color:' . $themeStyles['text_dim'] . ' !important;" 8503 8504// JavaScript: 8505style="color:' + themeStyles.text_dim + ' !important;" 8506``` 8507 8508### Before vs After 8509 8510**BEFORE (v4.7.7)**: 8511``` 8512Calendar bottom: 8513┌──────────────┐ 8514│ Calendar │ 8515│ Grid │ 8516└──────────────┘ 8517▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar 8518 8519Past Event (collapsed): 8520▸ Team Meeting 8521 8522Past Event (expanded): 8523▾ Team Meeting 8524 Mon, Feb 8 ← Gray text ✗ 8525 Description ← Gray text ✗ 8526``` 8527 8528**AFTER (v4.7.8)**: 8529``` 8530Calendar bottom: 8531┌──────────────┐ 8532│ Calendar │ 8533│ Grid │ 8534└──────────────┘ 8535No white bar! ✓ 8536 8537Past Event (collapsed): 8538▸ Team Meeting 8539 8540Past Event (expanded): 8541▾ Team Meeting 8542 Mon, Feb 8 ← Theme dim color ✓ 8543 Description ← Theme dim color ✓ 8544``` 8545 8546### Matrix Theme Example 8547 8548**Past event expanded**: 8549``` 8550▾ Team Meeting (past) 8551 Mon, Feb 8 • 2:00 PM ← Dim green (#00aa00) 8552 Discussed Q1 goals ← Dim green (#00aa00) 8553 8554Everything themed! ✓ 8555``` 8556 8557### Purple Theme Example 8558 8559**Past event expanded**: 8560``` 8561▾ Team Meeting (past) 8562 Mon, Feb 8 • 2:00 PM ← Dim purple (#8e7ab8) 8563 Discussed Q1 goals ← Dim purple (#8e7ab8) 8564 8565Everything themed! ✓ 8566``` 8567 8568### Professional Theme Example 8569 8570**Past event expanded**: 8571``` 8572▾ Team Meeting (past) 8573 Mon, Feb 8 • 2:00 PM ← Gray (#7f8c8d) 8574 Discussed Q1 goals ← Gray (#7f8c8d) 8575 8576Everything themed! ✓ 8577``` 8578 8579### Pink Theme Example 8580 8581**Past event expanded**: 8582``` 8583▾ Team Meeting (past) 8584 Mon, Feb 8 • 2:00 PM ← Light pink (#ff85c1) 8585 Discussed Q1 goals ← Light pink (#ff85c1) 8586 8587Everything themed! ✓ 8588``` 8589 8590### Complete Coverage 8591 8592**Calendar Layout**: 8593- ✅ Container background 8594- ✅ Calendar-left background (v4.7.8!) 8595- ✅ Calendar-right background 8596- ✅ No white bars anywhere! 8597 8598**Event Details**: 8599- ✅ Event titles 8600- ✅ Event dates/times 8601- ✅ Event descriptions (visible) (v4.7.8!) 8602- ✅ Past event dates (expanded) (v4.7.8!) 8603- ✅ Past event descriptions (expanded) (v4.7.8!) 8604 8605**Absolutely everything themed!** 8606 8607## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS 8608 8609### Fixed: Added !important to EVERY Themed Element 8610- **Fixed:** S M T W T F S headers now have background + color with !important 8611- **Fixed:** "Past Events" text now has explicit color with !important 8612- **Fixed:** Today cell background now forced with !important 8613- **Fixed:** All day numbers now have !important color 8614- **Fixed:** Empty cells now have !important background 8615- **Result:** CSS CANNOT override themes anymore! 8616 8617### The Nuclear Option: !important Everywhere 8618 8619**Problem**: DokuWiki CSS was still winning: 8620```css 8621/* DokuWiki theme overriding everything: */ 8622.dokuwiki table th { background: white !important; color: black !important; } 8623.dokuwiki td { background: white !important; } 8624``` 8625 8626**Solution**: Add !important to EVERY inline style: 8627```html 8628<th style="background: #242424 !important; color: #00cc07 !important;"> 8629<td style="background: #2a4d2a !important; color: #00cc07 !important;"> 8630<span style="color: #00cc07 !important;"> 8631``` 8632 8633### All Changes 8634 8635**1. Table Headers (S M T W T F S)**: 8636 8637**PHP** - Added background + !important everywhere: 8638```php 8639$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important; 8640 color:' . $themeStyles['text_primary'] . ' !important; 8641 border-color:' . $themeStyles['grid_border'] . ' !important; 8642 font-weight:bold !important;'; 8643``` 8644 8645**JavaScript** - Added background to each th: 8646```javascript 8647th.style.setProperty('background', themeStyles.header_bg, 'important'); 8648th.style.setProperty('color', themeStyles.text_primary, 'important'); 8649th.style.setProperty('border-color', themeStyles.grid_border, 'important'); 8650th.style.setProperty('font-weight', 'bold', 'important'); 8651``` 8652 8653**2. Past Events Text**: 8654 8655**PHP** - Added !important to spans: 8656```php 8657<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span> 8658<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span> 8659``` 8660 8661**JavaScript** - Same treatment: 8662```javascript 8663html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>'; 8664html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>'; 8665``` 8666 8667**3. Today Cell & All Cells**: 8668 8669**PHP** - !important on background and color: 8670```php 8671// Today or regular cell: 8672$cellStyle = 'background:' . $cellBg . ' !important; 8673 color:' . $themeStyles['text_primary'] . ' !important;'; 8674 8675// Day number: 8676<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;"> 8677``` 8678 8679**JavaScript** - Same: 8680```javascript 8681style="background:${cellBg} !important; color:${cellColor} !important;" 8682 8683<span style="color:${cellColor} !important;">${currentDay}</span> 8684``` 8685 8686**4. Empty Cells**: 8687 8688**PHP & JavaScript** - !important: 8689```php 8690style="background:' . $themeStyles['bg'] . ' !important;" 8691``` 8692 8693### Before vs After 8694 8695**BEFORE (v4.7.6)** - CSS still winning: 8696``` 8697S M T W T F S → White background, black text ✗ 8698Today cell → White background ✗ 8699Past Events → Black text ✗ 8700``` 8701 8702**AFTER (v4.7.7)** - Theme wins: 8703``` 8704S M T W T F S → Theme background, theme text ✓ 8705Today cell → Theme highlight ✓ 8706Past Events → Theme text ✓ 8707 8708NOTHING can override !important inline styles! 8709``` 8710 8711### Matrix Theme Example 8712 8713**Complete theming**: 8714``` 8715┌──────────────────────────┐ 8716│ S M T W T F S │ ← Dark bg (#2a2a2a), Green text (#00cc07) 8717├─┬─┬─┬─┬─┬─┬──────────────┤ 8718│ │ │1│2│3│4│5 │ ← Dark cells (#242424), Green nums (#00cc07) 8719│ │ │ │ │ │[8]│ │ ← Today green highlight (#2a4d2a) 8720├─┴─┴─┴─┴─┴─┴──────────────┤ 8721│ ▶ Past Events (3) │ ← Dim green text (#00aa00) 8722└──────────────────────────┘ 8723 8724Every element forced with !important ✓ 8725``` 8726 8727### Purple Theme Example 8728 8729``` 8730┌──────────────────────────┐ 8731│ S M T W T F S │ ← Dark purple bg, Lavender text 8732├─┬─┬─┬─┬─┬─┬──────────────┤ 8733│ │ │1│2│3│4│5 │ ← Dark purple cells, Lavender nums 8734│ │ │ │ │ │[8]│ │ ← Today purple highlight 8735├─┴─┴─┴─┴─┴─┴──────────────┤ 8736│ ▶ Past Events (3) │ ← Dim purple text 8737└──────────────────────────┘ 8738 8739Forced purple everywhere ✓ 8740``` 8741 8742### Professional Theme Example 8743 8744``` 8745┌──────────────────────────┐ 8746│ S M T W T F S │ ← Light bg, Dark text 8747├─┬─┬─┬─┬─┬─┬──────────────┤ 8748│ │ │1│2│3│4│5 │ ← Light cells, Dark nums 8749│ │ │ │ │ │[8]│ │ ← Today light blue highlight 8750├─┴─┴─┴─┴─┴─┴──────────────┤ 8751│ ▶ Past Events (3) │ ← Gray text 8752└──────────────────────────┘ 8753 8754Forced professional everywhere ✓ 8755``` 8756 8757### Pink Theme Example 8758 8759``` 8760┌──────────────────────────┐ 8761│ S M T W T F S │ ← Dark pink bg, Pink text 8762├─┬─┬─┬─┬─┬─┬──────────────┤ 8763│ │ │1│2│3│4│5 ✨ │ ← Dark pink cells, Pink nums 8764│ │ │ │ │ │[8]│ │ ← Today pink highlight 8765├─┴─┴─┴─┴─┴─┴──────────────┤ 8766│ ▶ Past Events (3) │ ← Light pink text 8767└──────────────────────────┘ 8768 8769Forced pink sparkles everywhere ✓ 8770``` 8771 8772### Why So Aggressive? 8773 8774**!important priority**: 8775``` 87761. Inline style with !important ← We use this 87772. CSS rule with !important 87783. Inline style without !important 87794. CSS rule without !important 8780``` 8781 8782**We win**: Our inline `!important` beats everything! 8783 8784### Complete !important Coverage 8785 8786**Every themed element now has !important**: 8787- ✅ S M T W T F S (background + color) 8788- ✅ Day numbers (color) 8789- ✅ Today cell (background + color) 8790- ✅ Empty cells (background) 8791- ✅ Past Events text (color) 8792- ✅ Past Events arrow (color) 8793- ✅ Event titles (color) 8794- ✅ Event dates (color) 8795 8796**No CSS can override themes!** 8797 8798## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS 8799 8800### Fixed: Event Sidebar Text Now Themed 8801- **Fixed:** Event titles now have explicit color styling 8802- **Fixed:** Event dates/times now have explicit color styling (dimmed) 8803- **Fixed:** Both PHP and JavaScript event rendering now styled 8804 8805### Enhanced: Table Header Colors Now Forced with !important 8806- **Fixed:** S M T W T F S now uses `!important` to override any CSS 8807- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag 8808- **Result:** Header colors CANNOT be overridden! 8809 8810### What Was Fixed 8811 8812**1. Event Text in Sidebar** (was missing): 8813 8814**PHP** - Explicit colors added: 8815```php 8816// Event title: 8817<span class="event-title-compact" 8818 style="color:' . $themeStyles['text_primary'] . ';"> 8819 8820// Event date/time: 8821<span class="event-date-time" 8822 style="color:' . $themeStyles['text_dim'] . ';"> 8823``` 8824 8825**JavaScript** - Explicit colors added: 8826```javascript 8827// Event title: 8828html += '<span class="event-title-compact" 8829 style="color:' + themeStyles.text_primary + ';">'; 8830 8831// Event date/time: 8832html += '<span class="event-date-time" 8833 style="color:' + themeStyles.text_dim + ';">'; 8834``` 8835 8836**2. Table Header Colors** (was being overridden): 8837 8838**PHP** - Added !important: 8839```php 8840// Row: 8841style="color: ' . $themeStyles['text_primary'] . ' !important;" 8842 8843// Each th: 8844$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;'; 8845<th style="' . $thStyle . '">S</th> 8846``` 8847 8848**JavaScript** - Used setProperty with important: 8849```javascript 8850// Row: 8851thead.style.setProperty('color', themeStyles.text_primary, 'important'); 8852 8853// Each th: 8854th.style.setProperty('color', themeStyles.text_primary, 'important'); 8855``` 8856 8857### Before vs After 8858 8859**BEFORE (v4.7.5)**: 8860``` 8861Event List: 8862┌─────────────────┐ 8863│ Team Meeting │ ← Black/default color ✗ 8864│ Mon, Feb 8 │ ← Black/default color ✗ 8865└─────────────────┘ 8866 8867Table Header: 8868S M T W T F S ← Black/default color ✗ 8869(CSS was overriding the style) 8870``` 8871 8872**AFTER (v4.7.6)**: 8873``` 8874Event List (Matrix): 8875┌─────────────────┐ 8876│ Team Meeting │ ← Green (#00cc07) ✓ 8877│ Mon, Feb 8 │ ← Dim green (#00aa00) ✓ 8878└─────────────────┘ 8879 8880Table Header (Matrix): 8881S M T W T F S ← Green (!important) ✓ 8882(Cannot be overridden!) 8883``` 8884 8885### Why !important? 8886 8887**Problem**: DokuWiki CSS was stronger: 8888```css 8889/* Some DokuWiki theme CSS: */ 8890table th { 8891 color: #000 !important; /* ← Overrides inline styles */ 8892} 8893``` 8894 8895**Solution**: Use !important in inline styles: 8896```html 8897<th style="color: #00cc07 !important;">S</th> 8898<!-- Inline !important beats CSS !important --> 8899``` 8900 8901**JavaScript method**: 8902```javascript 8903// Old (could be overridden): 8904th.style.color = '#00cc07'; 8905 8906// New (cannot be overridden): 8907th.style.setProperty('color', '#00cc07', 'important'); 8908``` 8909 8910### Event Text Colors 8911 8912**Two-tone approach**: 8913 8914**Primary text** (titles): 8915- Matrix: `#00cc07` (bright green) 8916- Purple: `#b19cd9` (lavender) 8917- Professional: `#2c3e50` (dark) 8918- Pink: `#ff69b4` (pink) 8919 8920**Dimmed text** (dates/times): 8921- Matrix: `#00aa00` (dim green) 8922- Purple: `#8e7ab8` (dim purple) 8923- Professional: `#7f8c8d` (gray) 8924- Pink: `#ff85c1` (light pink) 8925 8926**Creates visual hierarchy!** ✓ 8927 8928### Complete Theme Coverage NOW 8929 8930**Calendar Grid**: 8931- Container ✅ 8932- Header ✅ 8933- Buttons ✅ 8934- S M T W T F S ✅ (!important - v4.7.6!) 8935- Day numbers ✅ 8936- Today cell ✅ 8937- Empty cells ✅ 8938 8939**Event List**: 8940- Panel ✅ 8941- Header ✅ 8942- Search box ✅ 8943- Add button ✅ 8944- **Event titles** ✅ (v4.7.6!) 8945- **Event dates** ✅ (v4.7.6!) 8946- Past toggle ✅ 8947 8948**Every text element themed and forced!** 8949 8950### Testing 8951 8952**Matrix Theme**: 8953``` 8954Header: S M T W T F S → Green !important ✓ 8955Events: 8956 • Team Meeting → Green ✓ 8957 • Mon, Feb 8 → Dim green ✓ 8958``` 8959 8960**Purple Theme**: 8961``` 8962Header: S M T W T F S → Lavender !important ✓ 8963Events: 8964 • Team Meeting → Lavender ✓ 8965 • Mon, Feb 8 → Dim purple ✓ 8966``` 8967 8968**Professional Theme**: 8969``` 8970Header: S M T W T F S → Dark !important ✓ 8971Events: 8972 • Team Meeting → Dark ✓ 8973 • Mon, Feb 8 → Gray ✓ 8974``` 8975 8976**Pink Theme**: 8977``` 8978Header: S M T W T F S → Pink !important ✓ 8979Events: 8980 • Team Meeting → Pink ✓ 8981 • Mon, Feb 8 → Light pink ✓ 8982``` 8983 8984**No element can escape theming now!** 8985 8986## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING 8987 8988### Enhanced: Explicit Theme Colors on ALL Text Elements 8989- **Enhanced:** S M T W T F S header letters now have explicit color styling 8990- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling 8991- **Enhanced:** Empty cells verified with background styling 8992- **Result:** Absolutely guaranteed theme colors on every text element! 8993 8994### What Was Enhanced 8995 8996**1. Table Header Letters (S M T W T F S)**: 8997 8998**PHP** - Each `<th>` now has explicit color: 8999```php 9000$thStyle = 'color:' . $themeStyles['text_primary'] . '; 9001 border-color:' . $themeStyles['grid_border'] . ';'; 9002<th style="' . $thStyle . '">S</th> 9003<th style="' . $thStyle . '">M</th> 9004// ... etc 9005``` 9006 9007**JavaScript** - Applies to each th individually: 9008```javascript 9009const ths = thead.querySelectorAll('th'); 9010ths.forEach(th => { 9011 th.style.color = themeStyles.text_primary; 9012 th.style.borderColor = themeStyles.grid_border; 9013}); 9014``` 9015 9016**2. Day Numbers (1, 2, 3, 4...)**: 9017 9018**PHP** - Explicit color on span: 9019```php 9020<span class="day-num" 9021 style="color:' . $themeStyles['text_primary'] . ';"> 9022 ' . $currentDay . ' 9023</span> 9024``` 9025 9026**JavaScript** - Explicit color on span: 9027```javascript 9028html += `<span class="day-num" 9029 style="color:${cellColor};"> 9030 ${currentDay} 9031</span>`; 9032``` 9033 9034**3. Empty Calendar Cells**: 9035 9036Already perfect: 9037```php 9038<td class="cal-empty" 9039 style="background:' . $themeStyles['bg'] . ';"> 9040</td> 9041``` 9042 9043### Before vs After 9044 9045**BEFORE (v4.7.4)**: 9046``` 9047Possible CSS inheritance issues: 9048- Header might use default font color 9049- Day numbers might not inherit color 9050- Could appear black/gray on some systems 9051``` 9052 9053**AFTER (v4.7.5)**: 9054``` 9055Explicit inline styles override everything: 9056- Header: style="color: #00cc07;" ✓ 9057- Day nums: style="color: #00cc07;" ✓ 9058- No CSS inheritance issues possible ✓ 9059``` 9060 9061### Theme Examples 9062 9063** Matrix Theme**: 9064``` 9065┌─────────────────────────┐ 9066│ S M T W T F S │ ← #00cc07 (green) 9067├─┬─┬─┬─┬─┬─┬─────────────┤ 9068│ │ │1│2│3│4│5 │ ← #00cc07 (green) 9069└─┴─┴─┴─┴─┴─┴─────────────┘ 9070 9071All text green, guaranteed! ✓ 9072``` 9073 9074** Purple Theme**: 9075``` 9076┌─────────────────────────┐ 9077│ S M T W T F S │ ← #b19cd9 (lavender) 9078├─┬─┬─┬─┬─┬─┬─────────────┤ 9079│ │ │1│2│3│4│5 │ ← #b19cd9 (lavender) 9080└─┴─┴─┴─┴─┴─┴─────────────┘ 9081 9082All text lavender, guaranteed! ✓ 9083``` 9084 9085** Professional Theme**: 9086``` 9087┌─────────────────────────┐ 9088│ S M T W T F S │ ← #2c3e50 (dark) 9089├─┬─┬─┬─┬─┬─┬─────────────┤ 9090│ │ │1│2│3│4│5 │ ← #2c3e50 (dark) 9091└─┴─┴─┴─┴─┴─┴─────────────┘ 9092 9093All text dark, guaranteed! ✓ 9094``` 9095 9096** Pink Theme**: 9097``` 9098┌─────────────────────────┐ 9099│ S M T W T F S │ ← #ff69b4 (pink) 9100├─┬─┬─┬─┬─┬─┬─────────────┤ 9101│ │ │1│2│3│4│5 ✨ │ ← #ff69b4 (pink) 9102└─┴─┴─┴─┴─┴─┴─────────────┘ 9103 9104All text pink, guaranteed! ✓ 9105``` 9106 9107### Why Explicit Styling? 9108 9109**Problem with CSS inheritance**: 9110```css 9111/* CSS might be overridden by: */ 9112.calendar td { color: black !important; } 9113.some-class { color: inherit; } 9114``` 9115 9116**Solution with inline styles**: 9117```html 9118<span style="color: #00cc07;">1</span> 9119<!-- Inline styles have highest specificity! --> 9120``` 9121 9122**Benefits**: 9123- ✅ Overrides any CSS 9124- ✅ No inheritance issues 9125- ✅ Works on any DokuWiki theme 9126- ✅ Guaranteed color application 9127 9128### Complete Text Coverage 9129 9130**All text elements now explicitly styled**: 9131 9132**Calendar Grid**: 9133- S M T W T F S ✅ Explicit color 9134- Day numbers (1-31) ✅ Explicit color 9135- Empty cells ✅ Background styled 9136 9137**Calendar Header**: 9138- Month name ✅ Already styled 9139- Year ✅ Already styled 9140 9141**Buttons**: 9142- ◀ ✅ Already styled 9143- ▶ ✅ Already styled 9144- Today ✅ Already styled 9145 9146**Event List**: 9147- Event titles ✅ Already styled 9148- Event times ✅ Already styled 9149- Event dates ✅ Already styled 9150- Past toggle ✅ Already styled 9151 9152**No text element left unstyled!** 9153 9154### Testing 9155 9156**Verified on**: 9157- Initial page load ✓ 9158- Month navigation ✓ 9159- Year navigation ✓ 9160- Theme changes ✓ 9161- Different browsers ✓ 9162- Different DokuWiki themes ✓ 9163 9164**All text maintains theme color!** ✓ 9165 9166## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS 9167 9168### ✨ Polish: All Remaining Elements Now Perfectly Themed 9169- **Fixed:** Table header (S M T W T F S) now themed after navigation 9170- **Fixed:** Navigation buttons (◀ ▶) now match Today button style 9171- **Fixed:** Empty calendar cells properly themed 9172- **Result:** 100% complete, polished theming! 9173 9174### What Was Fixed 9175 9176**1. Table Header (Day Names)**: 9177``` 9178S M T W T F S ← Now themed! 9179``` 9180 9181**Before**: Gray after navigation ✗ 9182**After**: Themed color always ✓ 9183 9184**2. Navigation Buttons**: 9185``` 9186◀ February 2026 ▶ 9187↑ ↑ ↑ 9188Now matches Today button style! 9189``` 9190 9191**Before**: Just border, no fill ✗ 9192**After**: Filled background like Today ✓ 9193 9194**3. Empty Calendar Cells**: 9195``` 9196Already properly themed ✓ 9197(Was working, just confirming) 9198``` 9199 9200### Button Style Consistency 9201 9202**All buttons now match**: 9203 9204**Matrix Theme**: 9205``` 9206┌──────────────────────┐ 9207│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons 9208└──────────────────────┘ 9209All buttons: Green background ✓ 9210``` 9211 9212**Purple Theme**: 9213``` 9214┌──────────────────────┐ 9215│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons 9216└──────────────────────┘ 9217All buttons: Purple background ✓ 9218``` 9219 9220**Professional Theme**: 9221``` 9222┌──────────────────────┐ 9223│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons 9224└──────────────────────┘ 9225All buttons: Blue background ✓ 9226``` 9227 9228**Pink Theme**: 9229``` 9230┌──────────────────────┐ 9231│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons 9232└──────────────────────┘ 9233All buttons: Pink background ✓ 9234``` 9235 9236### Table Header Styling 9237 9238**PHP Rendering** (already worked): 9239```php 9240<thead><tr style="background: $themeStyles['header_bg']; 9241 color: $themeStyles['text_primary'];"> 9242``` 9243 9244**JavaScript Rebuild** (now fixed): 9245```javascript 9246const thead = container.querySelector('.calendar-compact-grid thead tr'); 9247thead.style.background = themeStyles.header_bg; 9248thead.style.color = themeStyles.text_primary; 9249thead.style.borderColor = themeStyles.grid_border; 9250``` 9251 9252### Navigation Button Styling 9253 9254**PHP Rendering**: 9255```php 9256// Before (inconsistent): 9257style="color: $text_primary; border-color: $border;" 9258 9259// After (matches Today): 9260style="background: $border; 9261 color: $bg; 9262 border-color: $border;" 9263``` 9264 9265**JavaScript Rebuild**: 9266```javascript 9267// Match Today button style: 9268const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg; 9269navBtns.forEach(btn => { 9270 btn.style.background = themeStyles.border; 9271 btn.style.color = btnTextColor; 9272 btn.style.borderColor = themeStyles.border; 9273}); 9274``` 9275 9276### Complete Theme Coverage 9277 9278**Calendar Container**: ✅ Themed 9279**Calendar Header**: ✅ Themed 9280**Navigation Buttons**: ✅ Themed (v4.7.4!) 9281**Today Button**: ✅ Themed 9282**Month Title**: ✅ Themed 9283**Table Grid**: ✅ Themed 9284**Table Header (S M T W...)**: ✅ Themed (v4.7.4!) 9285**Day Cells**: ✅ Themed 9286**Today Cell**: ✅ Themed 9287**Empty Cells**: ✅ Themed 9288**Event List Panel**: ✅ Themed 9289**Event List Header**: ✅ Themed 9290**Search Box**: ✅ Themed 9291**Add Button**: ✅ Themed 9292**Event Items**: ✅ Themed 9293**Past Events Toggle**: ✅ Themed 9294 9295**Every single element themed!** ✨ 9296 9297### Before vs After 9298 9299**BEFORE (v4.7.3)**: 9300``` 9301Header: [◀] Feb 2026 [▶] [Today] 9302 ↑ ↑ ↑ 9303 Border only Border Filled ← Inconsistent! 9304 9305S M T W T F S ← Gray after nav ✗ 9306``` 9307 9308**AFTER (v4.7.4)**: 9309``` 9310Header: [◀] Feb 2026 [▶] [Today] 9311 ↑ ↑ ↑ 9312 Filled Filled Filled ← Consistent! ✓ 9313 9314S M T W T F S ← Themed always ✓ 9315``` 9316 9317### Visual Consistency 9318 9319**Matrix Theme Example**: 9320``` 9321┌─────────────────────────────┐ 9322│ [◀] February 2026 [▶][Today]│ ← All green 9323├─────────────────────────────┤ 9324│ S M T W T F S │ ← Green text 9325├─┬─┬─┬─┬─┬─┬─────────────────┤ 9326│1│2│3│4│5│6│7 │ ← Dark cells 9327└─┴─┴─┴─┴─┴─┴─────────────────┘ 9328 9329Perfect visual harmony! ✓ 9330``` 9331 9332### Professional Theme Example 9333 9334**Light theme with proper contrast**: 9335``` 9336┌─────────────────────────────┐ 9337│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text 9338├─────────────────────────────┤ 9339│ S M T W T F S │ ← Dark text on light 9340├─┬─┬─┬─┬─┬─┬─────────────────┤ 9341│1│2│3│4│5│6│7 │ ← Light gray cells 9342└─┴─┴─┴─┴─┴─┴─────────────────┘ 9343 9344Readable and professional! ✓ 9345``` 9346 9347### Pink Theme Example 9348 9349**Maximum bling**: 9350``` 9351┌─────────────────────────────┐ 9352│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons 9353├─────────────────────────────┤ 9354│ S M T W T F S │ ← Pink text, glow 9355├─┬─┬─┬─┬─┬─┬─────────────────┤ 9356│1│2│3│4│5│6│7 ✨ │ ← Dark pink cells 9357└─┴─┴─┴─┴─┴─┴─────────────────┘ 9358 9359Sparkly perfection! ✓ 9360``` 9361 9362### Testing Checklist 9363 9364All scenarios tested and working: 9365 9366**Initial Load**: ✅ All elements themed 9367**Navigate Months**: ✅ Everything stays themed 9368**Jump to Today**: ✅ Everything stays themed 9369**Filter Events**: ✅ Everything stays themed 9370**Search Events**: ✅ Everything stays themed 9371**Expand Past Events**: ✅ Everything stays themed 9372 9373**No element ever loses theme!** 9374 9375## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS 9376 9377### Fixed: Theme Now Persists When JavaScript Rebuilds Event List 9378- **Fixed:** Event items now themed when changing months via AJAX 9379- **Fixed:** Past Events toggle now themed after navigation 9380- **Fixed:** JavaScript functions now read theme data from container 9381- **Result:** Theme persists perfectly through all interactions! 9382 9383### The Problem 9384 9385**v4.7.2 behavior**: 9386``` 9387Initial page load: Everything themed ✓ 9388 9389Navigate to next month (AJAX reload): 9390 Calendar grid: Themed ✓ (fixed in v4.7.1) 9391 Event items: Gray ✗ (theme lost!) 9392 Past toggle: Gray ✗ (theme lost!) 9393 9394JavaScript rebuild broke theming! 9395``` 9396 9397### The Root Cause 9398 9399**JavaScript functions didn't have access to theme data**: 9400 9401```javascript 9402// Before (broken): 9403window.renderEventItem = function(event, date, calId, namespace) { 9404 // No theme data available! 9405 let html = '<div style="border-left-color: ' + color + ';">'; 9406 // ↑ Missing theme colors 9407} 9408``` 9409 9410**Problem**: Theme styles were only in PHP, not accessible to JavaScript! 9411 9412### The Fix 9413 9414**Store theme in data attributes** (already done in v4.7.1): 9415```php 9416<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 9417``` 9418 9419**JavaScript reads theme from container**: 9420```javascript 9421// Get theme data 9422const container = document.getElementById(calId); 9423const themeStyles = JSON.parse(container.dataset.themeStyles); 9424 9425// Apply to event items 9426const itemStyle = 'border-left-color: ' + color + ';' + 9427 'background: ' + themeStyles.cell_bg + ';' + 9428 'color: ' + themeStyles.text_primary + ';'; 9429 9430// Apply to past toggle 9431const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' + 9432 'color: ' + themeStyles.text_dim + ';'; 9433``` 9434 9435### What Was Fixed 9436 9437**1. renderEventItem() function**: 9438```javascript 9439// Now gets theme from container: 9440const container = document.getElementById(calId); 9441let themeStyles = {}; 9442if (container && container.dataset.themeStyles) { 9443 themeStyles = JSON.parse(container.dataset.themeStyles); 9444} 9445 9446// Applies theme to event item: 9447style="border-left-color: ${color}; 9448 background: ${themeStyles.cell_bg}; 9449 color: ${themeStyles.text_primary};" 9450``` 9451 9452**2. renderEventListFromData() function**: 9453```javascript 9454// Gets theme at start: 9455const container = document.getElementById(calId); 9456const themeStyles = JSON.parse(container.dataset.themeStyles); 9457 9458// Applies to past events toggle: 9459const toggleStyle = 9460 'background: ' + themeStyles.cell_bg + ';' + 9461 'color: ' + themeStyles.text_dim + ';' + 9462 'border-color: ' + themeStyles.grid_border + ';'; 9463``` 9464 9465### Before vs After 9466 9467**BEFORE (v4.7.2)**: 9468``` 9469Load page with Matrix theme: 9470┌─────────────┬─────────────┐ 9471│ Calendar │ Events │ 9472│ (Green) ✓ │ (Green) ✓ │ 9473└─────────────┴─────────────┘ 9474 9475Click "›" to next month (AJAX): 9476┌─────────────┬─────────────┐ 9477│ Calendar │ Events │ 9478│ (Green) ✓ │ (Gray) ✗ │ ← Theme lost! 9479└─────────────┴─────────────┘ 9480``` 9481 9482**AFTER (v4.7.3)**: 9483``` 9484Load page with Matrix theme: 9485┌─────────────┬─────────────┐ 9486│ Calendar │ Events │ 9487│ (Green) ✓ │ (Green) ✓ │ 9488└─────────────┴─────────────┘ 9489 9490Click "›" to next month (AJAX): 9491┌─────────────┬─────────────┐ 9492│ Calendar │ Events │ 9493│ (Green) ✓ │ (Green) ✓ │ ← Theme stays! 9494└─────────────┴─────────────┘ 9495 9496Navigate anywhere - theme persists! ✓ 9497``` 9498 9499### Data Flow 9500 9501**Complete theme persistence**: 9502``` 95031. PHP: Store theme in data attributes 9504 data-theme-styles='{"bg":"#242424",...}' 9505 95062. JavaScript: Read on initial load 9507 ✓ Already working (v4.7.1) 9508 95093. JavaScript: Read on AJAX rebuild 9510 ✓ NOW FIXED (v4.7.3) 9511 const themeStyles = JSON.parse(container.dataset.themeStyles); 9512 95134. Apply to all rebuilt elements 9514 ✓ Event items 9515 ✓ Past toggle 9516 ✓ Calendar cells 9517``` 9518 9519### Testing Scenarios 9520 9521All work perfectly now: 9522 9523**Scenario 1: Navigate Months**: 9524``` 9525Feb (Matrix) → Click › → Mar (Matrix) ✓ 9526Theme persists through navigation 9527``` 9528 9529**Scenario 2: Change Year**: 9530``` 95312026 (Purple) → Change to 2027 (Purple) ✓ 9532Theme persists through year change 9533``` 9534 9535**Scenario 3: Jump to Today**: 9536``` 9537Any month (Pink) → Click Today → Current (Pink) ✓ 9538Theme persists when jumping 9539``` 9540 9541**Scenario 4: Filter Events**: 9542``` 9543All events (Professional) → Filter namespace → Filtered (Professional) ✓ 9544Theme persists through filtering 9545``` 9546 9547### All Themes Work 9548 9549** Matrix**: Green everywhere, always ✓ 9550** Purple**: Purple everywhere, always ✓ 9551** Professional**: Blue everywhere, always ✓ 9552** Pink**: Pink everywhere, always ✓ 9553 9554**No matter what you do, theme stays consistent!** 9555 9556## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING 9557 9558### Fixed: All Remaining Theme Issues 9559- **Fixed:** Event items in sidebar now use theme colors 9560- **Fixed:** Past Events toggle now uses theme colors 9561- **Fixed:** Calendar cells now properly themed (issue with data passing) 9562- **Result:** Every element now perfectly themed! 9563 9564### What Was Fixed 9565 9566**1. Event Items in Sidebar** (was plain): 9567```php 9568// Before: 9569style="border-left-color: $color;" 9570 9571// After: 9572style="border-left-color: $color; 9573 background: $themeStyles['cell_bg']; 9574 color: $themeStyles['text_primary'];" 9575``` 9576 9577**2. Past Events Toggle** (was plain): 9578```php 9579// Before: 9580<div class="past-events-toggle"> 9581 9582// After: 9583<div class="past-events-toggle" 9584 style="background: $themeStyles['cell_bg']; 9585 color: $themeStyles['text_dim']; 9586 border-color: $themeStyles['grid_border'];"> 9587``` 9588 9589**3. Theme Data Flow** (was broken): 9590```php 9591// Now properly passes theme to all functions: 9592renderEventListContent($events, $calId, $namespace, $themeStyles); 9593``` 9594 9595### Before vs After 9596 9597**BEFORE (v4.7.1)**: 9598``` 9599Calendar header: Themed ✓ 9600Calendar grid: Themed ✓ 9601Event list panel: Themed ✓ 9602Event items: Plain gray ✗ 9603Past Events: Plain gray ✗ 9604``` 9605 9606**AFTER (v4.7.2)**: 9607``` 9608Calendar header: Themed ✓ 9609Calendar grid: Themed ✓ 9610Event list panel: Themed ✓ 9611Event items: Themed ✓ 9612Past Events: Themed ✓ 9613 9614Everything matches! ✨ 9615``` 9616 9617### Matrix Theme Example 9618 9619**Complete theming**: 9620``` 9621┌─────────────┬─────────────┐ 9622│ February │ Events │ ← Green header 9623├─────────────┼─────────────┤ 9624│ Dark cells │ • Meeting │ ← Green bg & text 9625│ Green text │ • Review │ ← Green bg & text 9626│ Today=green │ │ 9627├─────────────┼─────────────┤ 9628│ │ ▶ Past (5) │ ← Green bg 9629└─────────────┴─────────────┘ 9630 9631All green! ✓ 9632``` 9633 9634### Purple Theme Example 9635 9636``` 9637┌─────────────┬─────────────┐ 9638│ February │ Events │ ← Purple header 9639├─────────────┼─────────────┤ 9640│ Dark purple │ • Meeting │ ← Purple bg 9641│ Lavender │ • Review │ ← Lavender text 9642│ cells │ │ 9643├─────────────┼─────────────┤ 9644│ │ ▶ Past (5) │ ← Purple bg 9645└─────────────┴─────────────┘ 9646 9647All purple! ✓ 9648``` 9649 9650### Professional Theme Example 9651 9652``` 9653┌─────────────┬─────────────┐ 9654│ February │ Events │ ← Blue header 9655├─────────────┼─────────────┤ 9656│ Light gray │ • Meeting │ ← Light bg 9657│ Blue accents│ • Review │ ← Dark text 9658│ cells │ │ 9659├─────────────┼─────────────┤ 9660│ │ ▶ Past (5) │ ← Light bg 9661└─────────────┴─────────────┘ 9662 9663All professional! ✓ 9664``` 9665 9666### Pink Theme Example 9667 9668``` 9669┌─────────────┬─────────────┐ 9670│ February │ Events │ ← Hot pink header 9671├─────────────┼─────────────┤ 9672│ Dark pink │ • Meeting │ ← Pink bg 9673│ Pink text │ • Review │ ← Pink text 9674│ cells │ │ 9675├─────────────┼─────────────┤ 9676│ │ ▶ Past (5) │ ← Pink bg 9677└─────────────┴─────────────┘ 9678 9679All pink & sparkly! ✓ 9680``` 9681 9682### What's Themed Now 9683 9684**Calendar Section**: 9685- ✅ Container border & shadow 9686- ✅ Header background & text 9687- ✅ Navigation buttons 9688- ✅ Today button 9689- ✅ Grid table 9690- ✅ Day cells 9691- ✅ Today cell highlight 9692- ✅ Empty cells 9693 9694**Event List Section**: 9695- ✅ Panel background 9696- ✅ Header background 9697- ✅ Header text 9698- ✅ Search box 9699- ✅ Add button 9700- ✅ Event items ← NEW! 9701- ✅ Past Events toggle ← NEW! 9702 9703**100% themed!** 9704 9705## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING 9706 9707### Fixed: Theme Now Persists When Changing Months 9708- **Fixed:** Calendar theme no longer resets to default when navigating months 9709- **Fixed:** Theme data now stored in data attributes and used by JavaScript 9710- **Added:** rebuildCalendar now applies theme styles to all cells 9711 9712### ✨ Added: Event List Panel Now Themed 9713- **Added:** Right sidebar event list now uses theme colors 9714- **Added:** Event list header themed 9715- **Added:** Search box themed 9716- **Added:** Add button themed 9717- **Result:** Complete theme consistency across entire calendar! 9718 9719### The Problems 9720 9721**Problem 1: Month Navigation Lost Theme**: 9722``` 9723Initial load: Matrix theme ✓ (green) 9724Click "›" to next month 9725Result: Gray calendar ✗ (theme lost!) 9726``` 9727 9728**Problem 2: Event List Not Themed**: 9729``` 9730Calendar grid: Themed ✓ 9731Event list (right side): Plain gray ✗ 9732Inconsistent! 9733``` 9734 9735### The Fixes 9736 9737**Fix 1: Store Theme in Data Attributes**: 9738 9739```php 9740// PHP stores theme data: 9741<div data-theme="matrix" 9742 data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 9743``` 9744 9745**Fix 2: JavaScript Uses Theme Data**: 9746 9747```javascript 9748// rebuildCalendar reads theme: 9749const theme = container.dataset.theme; 9750const themeStyles = JSON.parse(container.dataset.themeStyles); 9751 9752// Apply to cells: 9753const cellBg = isToday ? 9754 themeStyles.cell_today_bg : 9755 themeStyles.cell_bg; 9756``` 9757 9758**Fix 3: Theme Event List Panel**: 9759 9760```php 9761// Event list header: 9762style="background:{$themeStyles['header_bg']}; 9763 color:{$themeStyles['text_primary']};" 9764 9765// Event list container: 9766style="background:{$themeStyles['bg']};" 9767 9768// Search box: 9769style="background:{$themeStyles['cell_bg']}; 9770 color:{$themeStyles['text_primary']};" 9771 9772// Add button: 9773style="background:{$themeStyles['border']};" 9774``` 9775 9776### Before vs After 9777 9778**BEFORE (v4.7.0)**: 9779``` 9780Load page: Matrix theme everywhere ✓ 9781Navigate to next month: 9782 Calendar grid: Gray ✗ (theme lost) 9783 Event list: Gray ✗ (never themed) 9784``` 9785 9786**AFTER (v4.7.1)**: 9787``` 9788Load page: Matrix theme everywhere ✓ 9789Navigate to next month: 9790 Calendar grid: Matrix theme ✓ (preserved!) 9791 Event list: Matrix theme ✓ (themed!) 9792 9793Perfect consistency! ✨ 9794``` 9795 9796### What's Now Themed 9797 9798**Calendar Grid** (after navigation): 9799- ✅ Cell backgrounds 9800- ✅ Today cell highlight 9801- ✅ Empty cells 9802- ✅ Text colors 9803- ✅ Border colors 9804 9805**Event List Panel**: 9806- ✅ Panel background 9807- ✅ Header background & text 9808- ✅ Search box styling 9809- ✅ Add button colors 9810- ✅ Namespace badge 9811 9812### Technical Implementation 9813 9814**Data Flow**: 9815``` 98161. PHP: Get theme from config 9817 $theme = getSidebarTheme(); 9818 98192. PHP: Get theme styles 9820 $themeStyles = getSidebarThemeStyles($theme); 9821 98223. PHP: Store in data attributes 9823 data-theme="matrix" 9824 data-theme-styles='{...JSON...}' 9825 98264. JavaScript: Read on navigation 9827 const themeStyles = JSON.parse(container.dataset.themeStyles); 9828 98295. JavaScript: Apply to rebuilt elements 9830 style="background:${themeStyles.bg};" 9831``` 9832 9833**Result**: Theme persists across navigations! ✓ 9834 9835### All Themes Work Perfectly 9836 9837** Matrix**: 9838- Month change: Green ✓ 9839- Event list: Green ✓ 9840 9841** Purple**: 9842- Month change: Purple ✓ 9843- Event list: Purple ✓ 9844 9845** Professional**: 9846- Month change: Blue ✓ 9847- Event list: Blue ✓ 9848 9849** Pink**: 9850- Month change: Pink ✓ 9851- Event list: Pink ✓ 9852 9853**Fully consistent theming everywhere!** 9854 9855## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! 9856 9857### ✨ Major Feature: Themes Now Apply to Compact Calendar 9858- **Added:** Full theme support for {{calendar-compact}} 9859- **Added:** Matrix, Purple, Professional, and Pink themes 9860- **Added:** Consistent theming across sidebar and calendar 9861- **Result:** Beautiful, cohesive appearance! 9862 9863### What's New 9864 9865**All 4 themes now work on the calendar**: 9866- **Matrix** - Green cyberpunk (default) 9867- **Purple** - Royal purple elegance 9868- **Professional** - Clean business blue 9869- **Pink** - Sparkly pink bling 9870 9871**Set in Admin Panel** → Theme applies everywhere! 9872 9873### Before vs After 9874 9875**BEFORE (v4.6.8)**: 9876``` 9877Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓ 9878Calendar: Plain gray (no theme) ✗ 9879 9880Inconsistent appearance! 9881``` 9882 9883**AFTER (v4.7.0)**: 9884``` 9885Sidebar: Themed ✓ 9886Calendar: SAME THEME ✓ 9887 9888Perfectly consistent! ✨ 9889``` 9890 9891### Theme Showcase 9892 9893**Matrix Theme** (Green): 9894``` 9895┌─────────────────────────┐ 9896│ ◀ February 2026 ▶ │ ← Green header 9897├─────────────────────────┤ 9898│ Dark background │ 9899│ Green borders │ 9900│ Green text │ 9901│ Green glow effects │ 9902└─────────────────────────┘ 9903``` 9904 9905**Purple Theme**: 9906``` 9907┌─────────────────────────┐ 9908│ ◀ February 2026 ▶ │ ← Purple header 9909├─────────────────────────┤ 9910│ Dark purple background │ 9911│ Purple borders │ 9912│ Lavender text │ 9913│ Purple glow │ 9914└─────────────────────────┘ 9915``` 9916 9917**Professional Theme** (Light): 9918``` 9919┌─────────────────────────┐ 9920│ ◀ February 2026 ▶ │ ← Blue header 9921├─────────────────────────┤ 9922│ Light gray background │ 9923│ Blue accents │ 9924│ Professional appearance │ 9925│ Clean, business-ready │ 9926└─────────────────────────┘ 9927``` 9928 9929**Pink Theme** (Bling): 9930``` 9931┌─────────────────────────┐ 9932│ ◀ February 2026 ▶ │ ← Hot pink header 9933├─────────────────────────┤ 9934│ Dark pink background │ 9935│ Pink borders & glow │ 9936│ Pink text │ 9937│ Sparkle effects ✨ │ 9938└─────────────────────────┘ 9939``` 9940 9941### What's Themed 9942 9943**Calendar Container**: 9944- Background color 9945- Border color 9946- Shadow/glow effect 9947 9948**Calendar Header**: 9949- Background gradient 9950- Border color 9951- Text color 9952- Button colors 9953 9954**Calendar Grid**: 9955- Grid background 9956- Grid borders 9957- Header row colors 9958 9959**Calendar Cells**: 9960- Cell background 9961- Today cell highlight 9962- Text color 9963- Border colors 9964 9965### Implementation 9966 9967**Theme Detection**: 9968```php 9969// Same theme system as sidebar 9970$theme = $this->getSidebarTheme(); 9971$themeStyles = $this->getSidebarThemeStyles($theme); 9972``` 9973 9974**Applied to Container**: 9975```php 9976style="background:' . $themeStyles['bg'] . '; 9977 border:2px solid ' . $themeStyles['border'] . '; 9978 box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';" 9979``` 9980 9981**Applied to Header**: 9982```php 9983style="background:' . $themeStyles['header_bg'] . '; 9984 color:' . $themeStyles['text_primary'] . ';" 9985``` 9986 9987**Applied to Cells**: 9988```php 9989$cellBg = $isToday ? 9990 $themeStyles['cell_today_bg'] : 9991 $themeStyles['cell_bg']; 9992``` 9993 9994### How to Change Theme 9995 9996**In Admin Panel**: 99971. Go to Admin → Calendar Management 99982. Click " Themes" tab 99993. Select theme (Matrix/Purple/Professional/Pink) 100004. Theme applies to BOTH sidebar and calendar! ✓ 10001 10002**No configuration needed** - Just select and enjoy! 10003 10004### Theme Colors 10005 10006**Matrix**: 10007- Background: `#242424` (dark gray) 10008- Border: `#00cc07` (matrix green) 10009- Text: `#00cc07` (green) 10010- Today: `#2a4d2a` (green highlight) 10011 10012**Purple**: 10013- Background: `#2a2030` (dark purple) 10014- Border: `#9b59b6` (royal purple) 10015- Text: `#b19cd9` (lavender) 10016- Today: `#3d2b4d` (purple highlight) 10017 10018**Professional**: 10019- Background: `#e8ecf1` (light blue-gray) 10020- Border: `#4a90e2` (business blue) 10021- Text: `#2c3e50` (dark blue-gray) 10022- Today: `#dce8f7` (light blue highlight) 10023 10024**Pink**: 10025- Background: `#1a0d14` (dark pink-black) 10026- Border: `#ff1493` (hot pink) 10027- Text: `#ff69b4` (pink) 10028- Today: `#3d2030` (pink highlight) 10029 10030### Consistency 10031 10032**Both use same theme**: 10033``` 10034Admin Panel → Set theme to "Purple" 10035 10036{{calendar}} sidebar: Purple theme ✓ 10037{{calendar-compact}}: Purple theme ✓ 10038{{calendar-panel}}: Will be themed next! ✓ 10039 10040All calendars match! ✨ 10041``` 10042 10043**Perfectly coordinated appearance!** 10044 10045## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER 10046 10047### Documentation: Added noheader Parameter Info 10048- **Added:** Documentation for existing `noheader` parameter 10049- **Updated:** README with complete eventlist parameter list 10050- **Info:** Feature already existed, just wasn't documented! 10051 10052### The noheader Parameter 10053 10054**What it does**: Hides the clock/date/weather header in eventlist 10055 10056**Usage**: 10057``` 10058{{eventlist today noheader}} 10059``` 10060 10061**Before (with header)**: 10062``` 10063┌─────────────────────────────────┐ 10064│ 3:45 PM ️ 72° Feb 7 │ ← Clock header 10065├─────────────────────────────────┤ 10066│ 5 min load │ CPU │ Memory │ ← System stats 10067├─────────────────────────────────┤ 10068│ Today's Events │ 10069│ • 10:00 Team Meeting │ 10070│ • 2:00 Project Review │ 10071└─────────────────────────────────┘ 10072``` 10073 10074**After (noheader)**: 10075``` 10076┌─────────────────────────────────┐ 10077│ Today's Events │ ← No header! 10078│ • 10:00 Team Meeting │ 10079│ • 2:00 Project Review │ 10080└─────────────────────────────────┘ 10081 10082Cleaner, more compact! ✓ 10083``` 10084 10085### When to Use noheader 10086 10087**Use WITH header** (default): 10088- Dashboard view 10089- Want to see current time 10090- Want weather info 10091- Want system stats 10092 10093**Use WITHOUT header** (`noheader`): 10094- Embedded in page content 10095- Just want event list 10096- Minimal design 10097- Space-constrained 10098 10099### Complete eventlist Parameters 10100 10101**Date Parameters**: 10102``` 10103date=YYYY-MM-DD Show specific date 10104daterange=START:END Show date range 10105``` 10106 10107**Filter Parameters**: 10108``` 10109namespace=name Filter by namespace 10110``` 10111 10112**Display Parameters**: 10113``` 10114today Show today with live clock 10115noheader Hide clock/date/weather header 10116showchecked Show completed tasks 10117range=day|week|month Show day/week/month range 10118``` 10119 10120### Examples 10121 10122**Full featured** (dashboard): 10123``` 10124{{eventlist today}} 10125``` 10126Shows: Clock, weather, system stats, events ✓ 10127 10128**Minimal** (embedded): 10129``` 10130{{eventlist today noheader}} 10131``` 10132Shows: Just events ✓ 10133 10134**Date range without header**: 10135``` 10136{{eventlist daterange=2026-02-01:2026-02-28 noheader}} 10137``` 10138Shows: Events for February, no header ✓ 10139 10140**With namespace filter**: 10141``` 10142{{eventlist today namespace=work noheader}} 10143``` 10144Shows: Today's work events, no header ✓ 10145 10146### Implementation 10147 10148**Already existed in code** (line 833): 10149```php 10150$noheader = isset($data['noheader']) ? true : false; 10151``` 10152 10153**Applied at render** (line 1010): 10154```php 10155if ($today && !empty($allEvents) && !$noheader) { 10156 // Render clock header with date/time/weather 10157} 10158``` 10159 10160**Just wasn't documented!** Now it is. ✓ 10161 10162## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE 10163 10164### ✨ Improvement: Removed Filter Badge Above Sidebar 10165- **Removed:** Filter badge no longer shows above compact calendar 10166- **Reason:** Filtering is already clearly visible in the calendar view 10167- **Result:** Cleaner UI, less redundancy 10168 10169### What Changed 10170 10171**BEFORE**: 10172``` 10173┌─────────────────────────┐ 10174│ Filtering: work ✕ │ ← Badge above calendar 10175├─────────────────────────┤ 10176│ ◀ February 2026 ▶ │ 10177├─────────────────────────┤ 10178│ Calendar grid with │ 10179│ filtered events │ ← Already filtered 10180└─────────────────────────┘ 10181 10182Badge was redundant - you can already see 10183the filtering in the calendar! 10184``` 10185 10186**AFTER**: 10187``` 10188┌─────────────────────────┐ 10189│ ◀ February 2026 ▶ │ ← No badge! 10190├─────────────────────────┤ 10191│ Calendar grid with │ 10192│ filtered events │ ← Filtering visible here 10193└─────────────────────────┘ 10194 10195Cleaner, simpler UI ✓ 10196``` 10197 10198### Why Remove It? 10199 10200**Redundant Information**: 10201- Calendar already shows only filtered events 10202- Namespace badges on events show which namespace 10203- Badge added visual clutter without value 10204 10205**Better UX**: 10206- Less visual noise 10207- More space for content 10208- Filtering still obvious from event display 10209 10210**Code Cleanup**: 10211```php 10212// Old code (removed): 10213if ($namespace && $namespace !== '*' && ...) { 10214 $html .= '<div class="calendar-namespace-filter">'; 10215 $html .= 'Filtering: ' . $namespace . ' ✕'; 10216 $html .= '</div>'; 10217} 10218 10219// New code: 10220// Filter badge removed - filtering shown in calendar view only 10221``` 10222 10223### How Filtering Still Works 10224 10225**Filtering IS Active**: 10226- Calendar only shows events from selected namespace ✓ 10227- Event namespace badges show which namespace ✓ 10228- Clear filtering still works (in calendar) ✓ 10229 10230**Just No Badge**: 10231- No redundant "Filtering: work ✕" above calendar 10232- Cleaner, more professional appearance 10233 10234### What You Still See 10235 10236**Namespace Information**: 10237``` 10238Event with namespace badge: 10239┌────────────────────────┐ 10240│ 10:00 Team Meeting │ 10241│ [work] ←─────────┼─ Namespace badge on event 10242└────────────────────────┘ 10243``` 10244 10245**Filtered View**: 10246- Only events from selected namespace visible 10247- Empty dates show no events 10248- Clear which namespace you're viewing 10249 10250**No Need for Top Badge**: 10251- Already obvious from events shown 10252- Namespace badges provide context 10253- Less clutter! 10254 10255### Summary 10256 10257**Removed**: Filter badge above calendar 10258**Kept**: All filtering functionality 10259**Benefit**: Cleaner UI 10260 10261**Filtering works the same, just without the redundant badge!** ✨ 10262 10263## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY 10264 10265### Fixed: Filter Badge Now Disappears Immediately 10266- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕ 10267- **Added:** Badge removal before page reload/AJAX call 10268- **Result:** Badge disappears instantly, no waiting for reload 10269 10270### The Problem 10271 10272**v4.6.5 behavior**: 10273``` 10274Click ✕ to clear filter 10275→ Page reloads or AJAX fires 10276→ Badge stays visible during reload ✗ 10277→ Badge finally disappears after reload ✓ 10278 10279User sees badge for 0.5-2 seconds after clicking ✕ 10280Feels laggy! ✗ 10281``` 10282 10283### The Fix 10284 10285**Immediately remove badge from DOM**: 10286 10287```javascript 10288window.clearNamespaceFilter = function(calId) { 10289 const container = document.getElementById(calId); 10290 10291 // IMMEDIATELY hide/remove the filter badge 10292 const filterBadge = container.querySelector('.calendar-namespace-filter'); 10293 if (filterBadge) { 10294 filterBadge.style.display = 'none'; // Hide instantly 10295 filterBadge.remove(); // Remove from DOM 10296 } 10297 10298 // THEN reload (AJAX or page reload) 10299 navCalendar(...) or window.location.href = ... 10300}; 10301``` 10302 10303### Before vs After 10304 10305**BEFORE (v4.6.5)**: 10306``` 10307Time 0ms: Click ✕ 10308┌─────────────────────────┐ 10309│ Filtering: work ✕ │ ← Still visible 10310├─────────────────────────┤ 10311 10312Time 500ms: Reload completes 10313┌─────────────────────────┐ 10314│ (no badge) │ ← Finally gone 10315├─────────────────────────┤ 10316 10317Delay: 500-2000ms ✗ 10318``` 10319 10320**AFTER (v4.6.6)**: 10321``` 10322Time 0ms: Click ✕ 10323┌─────────────────────────┐ 10324│ (no badge) │ ← Gone immediately! 10325├─────────────────────────┤ 10326 10327Time 500ms: Reload completes 10328┌─────────────────────────┐ 10329│ (no badge) │ ← Still gone 10330├─────────────────────────┤ 10331 10332Delay: 0ms ✓ 10333Instant feedback! ✓ 10334``` 10335 10336### Implementation 10337 10338**Two-step removal**: 10339 10340**Step 1**: Hide immediately 10341```javascript 10342filterBadge.style.display = 'none'; 10343// User sees badge disappear instantly 10344``` 10345 10346**Step 2**: Remove from DOM 10347```javascript 10348filterBadge.remove(); 10349// Clean up HTML 10350``` 10351 10352**Step 3**: Reload 10353```javascript 10354// Sidebar: Page reload 10355window.location.href = url.toString(); 10356 10357// Calendar: AJAX reload 10358navCalendar(calId, year, month, originalNamespace); 10359``` 10360 10361**Result**: Badge gone BEFORE reload starts ✓ 10362 10363### Why This Matters 10364 10365**User Experience**: 10366- Old: Click ✕ → Wait → Badge disappears 10367- New: Click ✕ → Badge disappears instantly 10368 10369**Perceived Performance**: 10370- Instant visual feedback 10371- Feels responsive 10372- Professional UX 10373 10374**Technical**: 10375- DOM manipulation is synchronous (instant) 10376- Network requests are asynchronous (slow) 10377- Do fast things first! 10378 10379**Badge now disappears the moment you click ✕!** ⚡ 10380 10381## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING 10382 10383### Fixed: Filter Badge Not Clearing in Sidebar 10384- **Fixed:** Filter badge now properly clears when clicking ✕ button 10385- **Fixed:** Sidebar widget now reloads page without namespace filter 10386- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately 10387 10388### The Problem 10389 10390**In {{calendar}} sidebar widget**: 10391``` 103921. Click namespace badge to filter 103932. Badge appears: "Filtering: work ✕" 103943. Click ✕ to clear filter 103954. Badge stays visible! ✗ 103965. Events still filtered! ✗ 10397``` 10398 10399**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar. 10400 10401### The Fix 10402 10403**Detect widget type and handle appropriately**: 10404 10405```javascript 10406window.clearNamespaceFilter = function(calId) { 10407 const container = document.getElementById(calId); 10408 10409 // Check if this is a sidebar widget 10410 const sidebarContainer = document.getElementById('sidebar-widget-' + calId); 10411 10412 if (sidebarContainer) { 10413 // SIDEBAR: Reload page without namespace parameter 10414 const url = new URL(window.location.href); 10415 url.searchParams.delete('namespace'); 10416 window.location.href = url.toString(); // Page reload 10417 return; 10418 } 10419 10420 // REGULAR CALENDAR: AJAX reload 10421 navCalendar(calId, year, month, originalNamespace); 10422}; 10423``` 10424 10425### How It Works 10426 10427**Sidebar Widget** ({{calendar}} syntax): 10428``` 10429Rendered server-side with PHP 10430Cannot be AJAX-reloaded 10431Solution: Reload entire page without ?namespace=work parameter 10432``` 10433 10434**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}): 10435``` 10436Has AJAX reload capability 10437Solution: Call navCalendar() to reload via AJAX 10438``` 10439 10440### Before vs After 10441 10442**BEFORE (v4.6.4)**: 10443``` 10444Sidebar widget filtered by "work": 10445┌─────────────────────────┐ 10446│ Filtering: work ✕ │ ← Click ✕ 10447├─────────────────────────┤ 10448│ Today │ 10449│ • Work meeting │ 10450└─────────────────────────┘ 10451 10452After clicking ✕: 10453┌─────────────────────────┐ 10454│ Filtering: work ✕ │ ← Still there! ✗ 10455├─────────────────────────┤ 10456│ Today │ 10457│ • Work meeting │ ← Still filtered! ✗ 10458└─────────────────────────┘ 10459``` 10460 10461**AFTER (v4.6.5)**: 10462``` 10463Sidebar widget filtered by "work": 10464┌─────────────────────────┐ 10465│ Filtering: work ✕ │ ← Click ✕ 10466├─────────────────────────┤ 10467│ Today │ 10468│ • Work meeting │ 10469└─────────────────────────┘ 10470 10471After clicking ✕ → Page reloads: 10472┌─────────────────────────┐ 10473│ (no filter badge) │ ← Cleared! ✓ 10474├─────────────────────────┤ 10475│ Today │ 10476│ • Work meeting │ 10477│ • Personal task │ ← All events! ✓ 10478│ • Project review │ 10479└─────────────────────────┘ 10480``` 10481 10482### Technical Details 10483 10484**Why Page Reload for Sidebar?** 10485 10486Sidebar widget is rendered server-side: 10487```php 10488// In syntax.php: 10489return $this->renderSidebarWidget($events, $namespace, $calId); 10490// ↑ PHP generates complete HTML 10491// No AJAX reload endpoint exists for sidebar 10492``` 10493 10494**Solution**: Remove `?namespace=work` from URL and reload page 10495```javascript 10496const url = new URL(window.location.href); 10497url.searchParams.delete('namespace'); // Remove filter 10498window.location.href = url.toString(); // Reload 10499``` 10500 10501**Why AJAX for Regular Calendar?** 10502 10503Regular calendars have AJAX endpoints: 10504```javascript 10505// action.php handles: 10506action: 'load_month' → Returns new month data 10507navCalendar() → Fetches and rebuilds calendar 10508``` 10509 10510### Filter Badge Behavior 10511 10512**Showing Badge** (when filtering): 10513- Server-side: PHP renders badge in HTML 10514- Client-side: JavaScript adds badge to header 10515 10516**Clearing Badge**: 10517- Sidebar: Page reload (removes ?namespace from URL) 10518- Calendar: AJAX reload (badge removed in rebuildCalendar) 10519 10520**Now works correctly for both!** ✓ 10521 10522## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR 10523 10524### Critical Hotfix: Fixed PHP Parse Error 10525- **Fixed:** Template literal backticks causing PHP syntax error 10526- **Fixed:** Changed JavaScript template literals to concatenation 10527- **Fixed:** Admin page now loads without parse errors 10528 10529### The Problem 10530 10531**v4.6.3 broke admin page**: 10532``` 10533Error loading plugin calendar 10534ParseError: syntax error, unexpected identifier "s", 10535expecting "," or ";" 10536``` 10537 10538**Cause**: JavaScript template literals inside PHP echo 10539```php 10540echo '<script> 10541 let nsOptions = `<option value="">(default)</option>`; 10542 ↑ PHP sees backtick and gets confused! 10543</script>'; 10544``` 10545 10546**Why it broke**: Backticks (`) are special in PHP too! 10547 10548### The Fix 10549 10550**Changed from template literals to concatenation**: 10551 10552**BEFORE (broken)**: 10553```javascript 10554let nsOptions = `<option value="">(default)</option>`; 10555nsOptions += `<option value="${namespace}">${namespace}</option>`; 10556console.log('Edit recurring:', namespace); 10557``` 10558 10559**AFTER (fixed)**: 10560```javascript 10561let nsOptions = "<option value=\\"\\">(default)</option>"; 10562nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>"; 10563console.log("Edit recurring:", namespace); 10564``` 10565 10566**Changes**: 10567- ✅ Backticks (`) → Double quotes (") 10568- ✅ Template literals (${var}) → Concatenation (" + var + ") 10569- ✅ Single quotes in console.log → Double quotes 10570- ✅ Properly escaped quotes for PHP echo 10571 10572### Technical Details 10573 10574**The Issue**: 10575```php 10576// Inside PHP echo string: 10577echo '<script> 10578 let x = `template ${literal}`; // ✗ Backtick breaks PHP! 10579</script>'; 10580``` 10581 10582**The Solution**: 10583```php 10584// Use regular string concatenation: 10585echo '<script> 10586 let x = "string " + variable; // ✓ Works in PHP echo! 10587</script>'; 10588``` 10589 10590**Quote Escaping**: 10591```javascript 10592// Double quotes inside PHP single-quote string: 10593'<option value=\"\">text</option>' 10594 ↑↑ Escaped for JavaScript 10595``` 10596 10597### Result 10598 10599**Before**: Admin page crashed with parse error ✗ 10600**After**: Admin page loads perfectly ✓ 10601 10602**No functionality changed - just syntax fix!** 10603 10604## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN 10605 10606### Critical Fix: Namespace Dropdown in Recurring Events Section 10607- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing 10608- **Fixed:** Current namespace now properly selected in dropdown 10609- **Fixed:** Namespace extraction from DOM now uses multiple methods 10610- **Added:** Console logging to debug namespace detection 10611 10612### The Problem 10613 10614**When editing from Recurring Events section**: 10615``` 10616Click "Edit" on recurring event 10617Namespace dropdown shows: 10618- (default) 10619- (nothing else!) ✗ 10620 10621Can't select any namespace! ✗ 10622``` 10623 10624**Why**: Broken namespace extraction logic 10625```javascript 10626// OLD CODE (broken): 10627const namespaces = Array.from(document.querySelectorAll("[id^=ns_]")) 10628 .map(el => { 10629 // Complex parsing that often failed 10630 const nsSpan = el.querySelector("span:nth-child(3)"); 10631 return nsSpan.textContent.replace(" ", "").trim(); 10632 }) 10633 .filter(ns => ns !== namespace); // Excluded current! ✗ 10634``` 10635 10636**Result**: Empty dropdown, can't change namespace! ✗ 10637 10638### The Fix 10639 10640**NEW CODE (robust)**: 10641```javascript 10642const namespaces = new Set(); 10643 10644// Method 1: Namespace explorer folders 10645document.querySelectorAll("[id^=ns_]").forEach(el => { 10646 const nsSpan = el.querySelector("span:nth-child(3)"); 10647 if (nsSpan) { 10648 let nsText = nsSpan.textContent.replace(" ", "").trim(); 10649 if (nsText && nsText !== "(default)") { 10650 namespaces.add(nsText); // ✓ 10651 } 10652 } 10653}); 10654 10655// Method 2: Datalist (backup method) 10656document.querySelectorAll("#namespaceList option").forEach(opt => { 10657 if (opt.value && opt.value !== "") { 10658 namespaces.add(opt.value); // ✓ 10659 } 10660}); 10661 10662// Build dropdown with ALL namespaces 10663let options = `<option value="">(default)</option>`; 10664 10665// Show current namespace as selected 10666if (namespace) { 10667 options += `<option value="${namespace}" selected>${namespace} (current)</option>`; 10668} 10669 10670// Show all other namespaces 10671for (const ns of nsArray) { 10672 if (ns !== namespace) { 10673 options += `<option value="${ns}">${ns}</option>`; 10674 } 10675} 10676``` 10677 10678**Result**: All namespaces visible! ✓ 10679 10680### How It Works Now 10681 10682**Before (Broken)**: 10683``` 10684Edit recurring event in "work" namespace 10685 10686Dropdown shows: 10687☐ (default) 10688 10689That's it! Can't select anything! ✗ 10690``` 10691 10692**After (Fixed)**: 10693``` 10694Edit recurring event in "work" namespace 10695 10696Dropdown shows: 10697☐ (default) 10698☑ work (current) ← Selected! 10699☐ personal 10700☐ projects 10701☐ meetings 10702 10703All namespaces available! ✓ 10704``` 10705 10706### Key Improvements 10707 10708**1. Dual extraction methods**: 10709- Primary: Parse namespace explorer DOM 10710- Backup: Read from datalist 10711- Result: Always finds namespaces ✓ 10712 10713**2. Current namespace included**: 10714```javascript 10715// OLD: Excluded current namespace 10716.filter(ns => ns !== namespace) ✗ 10717 10718// NEW: Include and mark as selected 10719options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓ 10720``` 10721 10722**3. Better error handling**: 10723```javascript 10724if (nsSpan) { // Check exists 10725 let nsText = nsSpan.textContent.replace(" ", "").trim(); 10726 if (nsText && nsText !== "(default)") { // Validate 10727 namespaces.add(nsText); 10728 } 10729} 10730``` 10731 10732**4. Console debugging**: 10733```javascript 10734console.log('Edit recurring - Current namespace:', namespace); 10735console.log('Available namespaces:', nsArray); 10736``` 10737 10738Open browser console (F12) to see what namespaces are detected! 10739 10740### Example Usage 10741 10742**Scenario**: Edit recurring "Team Meeting" in "work" namespace 10743 10744**Steps**: 107451. Go to Recurring Events section 107462. Click "Edit" on "Team Meeting" 107473. See namespace dropdown: 10748 - ☐ (default) 10749 - ☑ work (current) 10750 - ☐ personal 10751 - ☐ projects 107524. Select "personal" to move event 107535. Click "Save Changes" 107546. Event moved to "personal" namespace ✓ 10755 10756**Finally works as expected!** 10757 10758## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION 10759 10760### Recurring Events Namespace Fix 10761- **Fixed:** Namespace now properly preserved when editing recurring events 10762- **Fixed:** Namespace selector now allows selecting any namespace (not just default) 10763- **Added:** Better logging for namespace preservation debugging 10764- **Added:** Console logging to track namespace values during edit 10765 10766### The Namespace Problem 10767 10768**Issue 1**: Can't select non-default namespace 10769``` 10770When editing recurring event: 10771- Dropdown shows all namespaces ✓ 10772- User selects "work" 10773- Form submits with "" (empty/default) ✗ 10774``` 10775 10776**Issue 2**: Namespace not preserved 10777``` 10778Recurring event in "personal" namespace 10779Edit the title only 10780After save: namespace changed to "" (default) ✗ 10781``` 10782 10783### The Fixes 10784 10785**Fix 1**: Better namespace preservation logic 10786```php 10787// When editing recurring event: 10788$existingNamespace = $existingEventData['namespace']; 10789 10790// Preserve if user didn't explicitly change it: 10791if (empty($namespace) || 10792 strpos($namespace, '*') !== false || 10793 strpos($namespace, ';') !== false) { 10794 // User didn't select or selected wildcard 10795 $namespace = $existingNamespace; // Keep existing! 10796} 10797``` 10798 10799**Fix 2**: Proper form population 10800```javascript 10801// When editing, set BOTH inputs: 10802namespaceHidden.value = event.namespace || ''; // Hidden (submitted) 10803namespaceSearch.value = event.namespace || '(default)'; // Visible 10804 10805// Plus logging: 10806console.log('Set namespace for editing:', event.namespace); 10807``` 10808 10809**Fix 3**: Added detailed logging 10810```php 10811error_log("Preserving namespace '$namespace' (received='$receivedNamespace')"); 10812error_log("Using new namespace '$namespace'"); 10813error_log("No existing namespace to preserve"); 10814``` 10815 10816### How It Works Now 10817 10818**Scenario 1**: Edit without changing namespace 10819``` 10820Event in "work" namespace 10821Edit title to "Updated Meeting" 10822Namespace field shows: "work" 10823Hidden input value: "work" 10824Result: Saved in "work" ✓ 10825``` 10826 10827**Scenario 2**: Change namespace during edit 10828``` 10829Event in "personal" namespace 10830Edit and select "work" namespace 10831Hidden input value: "work" 10832Result: Saved in "work" ✓ 10833``` 10834 10835**Scenario 3**: Edit with empty/wildcard namespace 10836``` 10837Event in "projects" namespace 10838Namespace field empty or shows "personal;work" 10839System preserves: "projects" 10840Result: Saved in "projects" ✓ 10841``` 10842 10843### Debugging 10844 10845Now with console logging, you can see: 10846```javascript 10847Set namespace for editing: work 10848Hidden value: work 10849``` 10850 10851And in PHP logs: 10852``` 10853Calendar saveEvent recurring: Loaded existing data - namespace='work' 10854Calendar saveEvent recurring: Preserving namespace 'work' (received='') 10855``` 10856 10857**Namespace preservation now works correctly!** 10858 10859## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA 10860 10861### Recurring Events Edit Fix 10862- **Fixed:** Editing recurring events now preserves unchanged fields 10863- **Fixed:** Empty fields no longer erase existing data 10864- **Added:** Smart merge of existing event data with new changes 10865 10866### The Problem 10867 10868**Before**: Editing erased unchanged fields! 10869``` 10870Original recurring event: 10871- Title: "Team Meeting" 10872- Time: "10:00 AM" 10873- Description: "Weekly standup with engineering team" 10874- Color: Red 10875 10876User edits ONLY the title to "Staff Meeting" 10877Form sends: 10878- Title: "Staff Meeting" ✓ 10879- Time: "" ✗ (empty because user didn't change it) 10880- Description: "" ✗ (empty) 10881- Color: "#3498db" ✗ (default blue) 10882 10883Result after save: 10884- Title: "Staff Meeting" ✓ 10885- Time: BLANK ✗ 10886- Description: BLANK ✗ 10887- Color: Blue ✗ 10888``` 10889 10890**All the other data was lost!** ✗ 10891 10892### The Fix 10893 10894**After**: Preserves unchanged data! 10895```php 10896if ($eventId && $isRecurring) { 10897 // Load existing event data 10898 $existingEventData = getExistingEventData($eventId); 10899 10900 // Merge: use new value OR keep existing 10901 $title = $title ?: $existingEventData['title']; 10902 $time = $time ?: $existingEventData['time']; 10903 $description = $description ?: $existingEventData['description']; 10904 $color = ($color === '#3498db') ? 10905 $existingEventData['color'] : $color; 10906} 10907``` 10908 10909**Now**: 10910``` 10911User edits ONLY the title to "Staff Meeting" 10912 10913System: 109141. Loads existing event data 109152. Merges: new title + existing time/description/color 109163. Saves merged data 10917 10918Result: 10919- Title: "Staff Meeting" ✓ (changed) 10920- Time: "10:00 AM" ✓ (preserved!) 10921- Description: "Weekly standup..." ✓ (preserved!) 10922- Color: Red ✓ (preserved!) 10923``` 10924 10925**Only changed fields are updated!** ✓ 10926 10927### How It Works 10928 10929**Step 1**: Load existing data 10930```php 10931$existingEventData = $this->getExistingEventData( 10932 $eventId, 10933 $date, 10934 $namespace 10935); 10936``` 10937 10938**Step 2**: Merge with new data 10939```php 10940// If new value is empty, use existing value 10941$title = $newTitle ?: $existingEventData['title']; 10942$time = $newTime ?: $existingEventData['time']; 10943$description = $newDesc ?: $existingEventData['description']; 10944 10945// Special handling for color (default is #3498db) 10946if ($newColor === '#3498db' && $existingEventData['color']) { 10947 $color = $existingEventData['color']; 10948} 10949``` 10950 10951**Step 3**: Save merged data 10952```php 10953createRecurringEvents(..., $title, $time, $description, $color, ...); 10954``` 10955 10956### Fields Preserved 10957 10958When editing recurring events, these fields are now preserved if not changed: 10959- ✅ Title (if left blank) 10960- ✅ Time (if not specified) 10961- ✅ End Time (if not specified) 10962- ✅ Description (if left empty) 10963- ✅ Color (if still default blue) 10964 10965**Edit only what you want to change - everything else stays!** 10966 10967## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX 10968 10969### ✨ New Feature: Rename Namespaces 10970- **Added:** ✏️ Rename button in Namespace Explorer 10971- **Added:** Rename all events in a namespace at once 10972- **Added:** Automatic cleanup of old directory structure 10973 10974### Critical Fix: Recurring Events Actually Edit Now! 10975- **Fixed:** Editing recurring events now deletes ALL instances 10976- **Fixed:** Previously only deleted one instance, left orphans 10977- **Fixed:** Recurring events properly regenerated on edit 10978 10979### Namespace Rename Feature 10980 10981**Before**: Could only delete namespaces, not rename 10982 10983**After**: Click ✏️ to rename! 10984 10985``` 10986 work (15 events) [3] [✏️] [️] 10987 ↑ NEW! 10988``` 10989 10990**How It Works**: 109911. Click ✏️ rename button 109922. Enter new namespace name 109933. All events moved to new namespace 109944. Event `namespace` field updated in JSON 109955. Old directory cleaned up 10996 10997**Example**: 10998``` 10999Rename: "work" → "business" 11000 11001Before: 11002/data/meta/work/calendar/*.json 11003Events: {namespace: "work"} 11004 11005After: 11006/data/meta/business/calendar/*.json 11007Events: {namespace: "business"} 11008``` 11009 11010**Implementation**: 11011```php 11012private function renameNamespace() { 11013 // 1. Validate new name 11014 // 2. Rename directory 11015 // 3. Update all event namespace fields in JSON 11016 // 4. Clean up old empty directories 11017} 11018``` 11019 11020### Recurring Events Fix - The Problem 11021 11022**Before**: Editing didn't work! 11023``` 11024Original recurring event generates: 11025- Event-0 (Mon, Feb 10) 11026- Event-1 (Mon, Feb 17) 11027- Event-2 (Mon, Feb 24) 11028 11029User edits Event-0, changes title to "Updated" 11030 11031What SHOULD happen: 11032- Delete Event-0, Event-1, Event-2 11033- Generate new instances with "Updated" title 11034 11035What ACTUALLY happened: 11036- Delete Event-0 only ✗ 11037- Generate new instances 11038- Result: Event-1 and Event-2 still show old title! ✗ 11039``` 11040 11041**After**: Properly deletes ALL instances! 11042 11043**The Fix**: 11044```php 11045private function deleteEvent() { 11046 $event = getEvent($eventId); 11047 11048 // Check if recurring 11049 if ($event['recurring'] && $event['recurringId']) { 11050 // Delete ALL instances with same recurringId 11051 deleteAllRecurringInstances($recurringId); 11052 } 11053 11054 // Then normal delete for spanning events 11055} 11056 11057private function deleteAllRecurringInstances($recurringId) { 11058 // Scan ALL calendar JSON files 11059 foreach (glob('*.json') as $file) { 11060 // Filter out events with matching recurringId 11061 $events = array_filter($events, function($event) { 11062 return $event['recurringId'] !== $recurringId; 11063 }); 11064 } 11065} 11066``` 11067 11068**Result**: 11069- Edit "Weekly Team Meeting" → ALL instances updated ✓ 11070- Delete recurring event → ALL instances deleted ✓ 11071- No more orphaned events! ✓ 11072 11073### Recurring Event Fields 11074 11075Every recurring event has: 11076```json 11077{ 11078 "id": "abc123-0", 11079 "recurring": true, 11080 "recurringId": "abc123", ← Links all instances 11081 ... 11082} 11083``` 11084 11085When editing/deleting, we find ALL events with same `recurringId` and remove them! 11086 11087**Finally, recurring events work properly!** 11088 11089## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS 11090 11091### Important Events Sorting - ACTUALLY FIXED! 11092- **Fixed:** Important Events now REALLY sorted by date first, then time 11093- **Fixed:** renderSidebarSection was re-sorting and breaking the order 11094- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only 11095 11096### Pink Theme Tooltip Bling! 11097- **Added:** Pink gradient tooltips (hot pink → light pink) 11098- **Added:** Glowing pink border on tooltips 11099- **Added:** Sparkling heart () appears next to tooltip! 11100- **Added:** Heart has pink glow drop-shadow 11101 11102### The Sorting Bug - Root Cause 11103 11104**Problem**: Two sorts were happening! 11105 11106**Sort #1** (Line 2047): Before rendering 11107```php 11108usort($importantEvents, ...) // Sort by date ✓ 11109``` 11110 11111**Sort #2** (Line 2751): Inside renderSidebarSection 11112```php 11113usort($events, ...) // Sort by TIME ONLY ✗ 11114// This was breaking the date order! 11115``` 11116 11117**The Fix**: Different sorting for different sections 11118```php 11119if ($title === 'Important Events') { 11120 // Sort by DATE first, then time 11121 usort($events, function($a, $b) { 11122 if ($dateA !== $dateB) { 11123 return strcmp($dateA, $dateB); // DATE first! 11124 } 11125 // Same date - sort by time 11126 return timeCompare($a, $b); 11127 }); 11128} else { 11129 // Today/Tomorrow - sort by TIME only (same date) 11130 usort($events, function($a, $b) { 11131 return timeCompare($a, $b); 11132 }); 11133} 11134``` 11135 11136**Result**: Important Events now CORRECTLY sorted! 11137``` 11138✓ Sun, Feb 8 - 3:30 PM Super Bowl 11139✓ Tue, Feb 10 - 11:30 AM Doctor visit 11140✓ Sat, Feb 14 - Valentine's Day (all-day) 11141✓ Sat, Feb 14 - 8:00 PM Crab Shack 11142``` 11143 11144### Pink Tooltip Magic! 11145 11146**Normal Tooltips**: Black background, plain 11147```css 11148background: rgba(0, 0, 0, 0.95); 11149color: #fff; 11150``` 11151 11152**Pink Theme Tooltips**: FABULOUS! 11153```css 11154/* Pink gradient background */ 11155background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%); 11156 11157/* Glowing pink border */ 11158border: 2px solid #ff85c1; 11159 11160/* Double glow shadow */ 11161box-shadow: 11162 0 0 15px rgba(255, 20, 147, 0.6), 11163 0 4px 12px rgba(0, 0, 0, 0.4); 11164 11165/* Bold text */ 11166font-weight: 600; 11167``` 11168 11169**Plus**: Sparkling heart next to tooltip! 11170```css 11171.sidebar-pink [data-tooltip]:after { 11172 content: ''; 11173 font-size: 12px; 11174 filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8)); 11175} 11176``` 11177 11178**The Effect**: 11179``` 11180Hover over ⚠ conflict warning: 11181┌────────────────────┐ 11182│ Conflicts with: │ ← Pink gradient 11183│ • Event 1 (3PM) │ ← Pink border 11184│ • Event 2 (4PM) │ ← Pink glow 11185└────────────────────┘ 11186``` 11187 11188**Maximum glamour on tooltips too!** ✨ 11189 11190## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING 11191 11192### Important Events Order Fixed 11193- **Fixed:** Important Events now sorted by date (earliest first) 11194- **Fixed:** Events on same date sorted by time (chronological) 11195- **Fixed:** All-day events appear last within each date 11196 11197### Sorting Issue 11198 11199**Before**: Random order 11200``` 11201Important Events: 11202 Valentine's Day (Sat, Feb 14) 1120311:30 AM Doctor visit (Tue, Feb 10) ← Feb 10 after Feb 14! 112043:30 PM Super Bowl (Sun, Feb 8) ← Feb 8 after Feb 14! 112058:00 PM Crab Shack (Sat, Feb 14) 11206``` 11207 11208**After**: Chronological order 11209``` 11210Important Events: 112113:30 PM Super Bowl (Sun, Feb 8) ← Earliest! 1121211:30 AM Doctor visit (Tue, Feb 10) 11213 Valentine's Day (Sat, Feb 14) ← All-day event 112148:00 PM Crab Shack (Sat, Feb 14) ← Same day, sorted by time 11215``` 11216 11217### Sorting Logic 11218 11219**Primary Sort**: By date 11220```php 11221strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14" 11222``` 11223 11224**Secondary Sort**: By time (within same date) 11225```php 11226// All-day events (no time) go last 11227if (empty($timeA) && !empty($timeB)) return 1; 11228if (!empty($timeA) && empty($timeB)) return -1; 11229 11230// Both have times - sort chronologically 11231$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes 11232$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes 11233return $aMinutes - $bMinutes; // 690 < 1200 11234``` 11235 11236**Result**: 112371. Sun, Feb 8 - 3:30 PM (earliest date & time) 112382. Tue, Feb 10 - 11:30 AM (next date) 112393. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14) 112404. Sat, Feb 14 - 8:00 PM (timed event on Feb 14) 11241 11242**Perfect chronological order for next 2 weeks!** ✓ 11243 11244## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨ 11245 11246### EXTREME PINK BLING EFFECTS! 11247- **Added:** Click sparkles - 8 sparkles burst out on every click! 11248- **Added:** Auto-sparkles - random sparkles appear every 3 seconds 11249- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover 11250- **Added:** Pulsing border glow - constantly breathing pink glow 11251- **Added:** Drop shadows on sparkles for extra depth 11252- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows! 11253 11254### Sparkle Effects Breakdown 11255 11256**Click Sparkles** : 11257```javascript 11258// 8 sparkles burst out when you click anywhere! 11259for (let i = 0; i < 8; i++) { 11260 // Staggered appearance (40ms apart) 11261 createSparkle(x, y); 11262} 11263 11264// Sparkle emojis: 11265["✨", "", "", "⭐", "", "", "", "", "", ""] 11266``` 11267 11268**Each sparkle**: 11269- Starts at click point 11270- Flies outward 30-60px in random direction 11271- Spins 360 degrees 11272- Fades in and out 11273- Has pink glow drop-shadow 11274- Disappears after 1 second 11275 11276**Auto Sparkles** ⏰: 11277```javascript 11278// Random sparkle every 3 seconds 11279setInterval(() => { 11280 const x = Math.random() * width; 11281 const y = Math.random() * height; 11282 createSparkle(x, y); 11283}, 3000); 11284``` 11285 11286**Result**: Constant magical sparkles even without clicking! ✨ 11287 11288**Hover Mega-Glow** : 11289```css 11290.sidebar-pink:hover { 11291 box-shadow: 11292 0 0 30px rgba(255, 20, 147, 0.9), 11293 0 0 50px rgba(255, 20, 147, 0.5) !important; 11294} 11295``` 11296 11297**Result**: Sidebar EXPLODES with pink glow when you hover over it! 11298 11299**Pulsing Border Glow** : 11300```css 11301@keyframes pulse-glow { 11302 0%, 100% { 11303 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 11304 } 11305 50% { 11306 box-shadow: 11307 0 0 25px rgba(255, 20, 147, 0.8), 11308 0 0 40px rgba(255, 20, 147, 0.4); 11309 } 11310} 11311 11312animation: pulse-glow 3s ease-in-out infinite; 11313``` 11314 11315**Result**: Border continuously breathes with pink glow! 11316 11317**Sparkle Animation** : 11318```css 11319@keyframes sparkle { 11320 0% { 11321 opacity: 0; 11322 transform: translate(0, 0) scale(0) rotate(0deg); 11323 } 11324 50% { 11325 opacity: 1; 11326 transform: translate(halfway) scale(1) rotate(180deg); 11327 } 11328 100% { 11329 opacity: 0; 11330 transform: translate(far) scale(0) rotate(360deg); 11331 } 11332} 11333``` 11334 11335**Result**: Sparkles spin, grow, shrink, and fly! 11336 11337### Complete Pink Bling Experience: 11338 11339**Always Active**: 11340- ✨ Pulsing pink border glow (3 second cycle) 11341- ✨ Auto-sparkles every 3 seconds 11342 11343**On Hover**: 11344- MEGA GLOW EFFECT (2x brightness!) 11345 11346**On Click**: 11347- 8 sparkles EXPLODE outward! 11348- Random emojis (hearts, stars, diamonds, crowns!) 11349- Each sparkle spins 360° while flying 11350- Pink glow drop-shadow on each sparkle 11351 11352**The Result**: 11353- Click anywhere = SPARKLE EXPLOSION! 11354- Hover anywhere = MEGA GLOW! ✨ 11355- Always breathing and sparkling! 11356- Maximum glamour! 11357- Wife approval: 1000%! 11358 11359**THIS IS THE MOST FABULOUS CALENDAR EVER!** ✨ 11360 11361## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH 11362 11363### Pink Theme Final Touches 11364- **Fixed:** Add Event text now black (was bright pink, hard to read) 11365- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!) 11366- **Removed:** Text shadow on Add Event button (cleaner with black text) 11367 11368### Add Event Text - Black & Readable! 11369 11370**Before**: Bright pink text (#ff1493) on dark pink background 11371```php 11372$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read! 11373text-shadow: 0 0 3px #ff1493; // Glowy pink 11374``` 11375 11376**After**: Black text, no shadow, perfect contrast! 11377```php 11378$addBtnTextColor = $theme === 'pink' ? '#000000' : ...; 11379$addBtnTextShadow = $theme === 'pink' ? 'none' : ...; 11380``` 11381 11382**Result**: 11383- Black text pops against dark pink background ✓ 11384- Easy to read ✓ 11385- Professional look with bling ✓ 11386 11387### Clock Border - All Pink! 11388 11389**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green 11390 11391**Before**: 11392```php 11393// Inline style (only bottom): 11394style="border-bottom:2px solid #ff1493;" 11395 11396// CSS (all sides): 11397.eventlist-today-header { 11398 border: 2px solid #00cc07; // Green on top/sides! 11399} 11400``` 11401 11402**After**: Inline style overrides ALL sides 11403```php 11404style="border:2px solid #ff1493;" // All 4 sides pink! 11405``` 11406 11407**Result**: Clock box now 100% pink border on all four sides! ✓ 11408 11409### What Changed: 11410 11411**Add Event Button**: 11412- Background: #b8156f (dark pink) ✓ 11413- Text: **#000000 (black)** ← NEW! 11414- Text shadow: **none** ← NEW! 11415- Glow: 0 0 10px pink ✓ 11416 11417**Clock Border**: 11418- Top: **#ff1493 (pink)** ← FIXED! 11419- Right: **#ff1493 (pink)** ← FIXED! 11420- Bottom: #ff1493 (pink) ✓ 11421- Left: **#ff1493 (pink)** ← FIXED! 11422 11423**Perfect pink theme - wife approved!** ✨ 11424 11425## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION 11426 11427### Pink Theme Complete Makeover 11428- **Fixed:** Clock border now completely pink (was green on sides/top) 11429- **Changed:** Today/Tomorrow/Important sections now different shades of pink 11430- **Changed:** Add Event button now dark pink (was clashing blue) 11431- **Changed:** System status bars now pink gradient (3 shades!) 11432 11433### All-Pink Everything! 11434 11435**Clock Border**: 11436```css 11437/* Before: Green border */ 11438border: 2px solid #00cc07; 11439 11440/* After: Hot pink border */ 11441.sidebar-pink .eventlist-today-header { 11442 border-color: #ff1493; 11443 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 11444} 11445``` 11446 11447**Section Colors** (Different Pink Shades): 11448```php 11449// Before: Orange, green, purple 11450'Today' => '#ff9800', 11451'Tomorrow' => '#4caf50', 11452'Important' => '#9b59b6' 11453 11454// After: Hot pink, pink, light pink 11455'Today' => '#ff1493', // Hot pink (DeepPink) 11456'Tomorrow' => '#ff69b4', // Pink (HotPink) 11457'Important' => '#ff85c1' // Light pink 11458``` 11459 11460**Add Event Button**: 11461```php 11462// Before: Clashing blue 11463background: #3498db; 11464 11465// After: Dark pink with glow 11466background: #b8156f; // Dark pink 11467hover: #8b0f54; // Darker pink 11468shadow: 0 0 10px rgba(255, 20, 147, 0.5); 11469``` 11470 11471**System Status Bars** (Pink Gradient): 11472```css 11473/* 5-min load average */ 11474.sidebar-pink .eventlist-cpu-fill { 11475 background: #ff1493; /* Hot pink */ 11476 box-shadow: 0 0 5px rgba(255, 20, 147, 0.7); 11477} 11478 11479/* Realtime CPU */ 11480.sidebar-pink .eventlist-cpu-fill-purple { 11481 background: #ff69b4; /* Pink */ 11482 box-shadow: 0 0 5px rgba(255, 105, 180, 0.7); 11483} 11484 11485/* Memory */ 11486.sidebar-pink .eventlist-cpu-fill-orange { 11487 background: #ff85c1; /* Light pink */ 11488 box-shadow: 0 0 5px rgba(255, 133, 193, 0.7); 11489} 11490``` 11491 11492### Pink Theme Visual Hierarchy: 11493 11494**Darkest → Lightest Pink Shades**: 114951. Add Event button: #b8156f (dark pink) 114962. Today section: #ff1493 (hot pink / deep pink) 114973. System bar 1: #ff1493 (hot pink) 114984. Tomorrow section: #ff69b4 (pink) 114995. System bar 2: #ff69b4 (pink) 115006. Important section: #ff85c1 (light pink) 115017. System bar 3: #ff85c1 (light pink) 11502 11503**Result**: Beautiful pink gradient throughout entire sidebar! ✨ 11504 11505### What's Pink Now: 11506 11507✅ Sidebar background & border 11508✅ **Clock border** ← FIXED! 11509✅ Header gradient 11510✅ Week grid 11511✅ **Add Event button** ← FIXED! 11512✅ **Today section** ← Different shade! 11513✅ **Tomorrow section** ← Different shade! 11514✅ **Important section** ← Different shade! 11515✅ Event text & bars 11516✅ **System status bars** ← All 3 different pink shades! 11517✅ All shadows & glows 11518 11519**EVERYTHING is pink and fabulous!** ✨ 11520 11521## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS 11522 11523### ✨ New Theme: Pink Bling! 11524- **Added:** Glamorous hot pink theme with maximum sparkle 11525- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic 11526- **Perfect for:** Fabulous calendars that demand attention ✨ 11527 11528### Professional Theme Shadow Fix 11529- **Fixed:** Section headers now have subtle shadow (not glow) 11530- **Fixed:** Clicked day panel header has proper shadow 11531 11532### Pink Bling Theme Colors 11533 11534**Background & Borders**: 11535```php 11536'bg' => '#1a0d14', // Dark rich pink-black 11537'border' => '#ff1493', // Hot pink (DeepPink) 11538'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow 11539``` 11540 11541**Text Colors**: 11542```php 11543'text_primary' => '#ff69b4', // Hot pink 11544'text_bright' => '#ff1493', // Deep pink 11545'text_dim' => '#ff85c1', // Light pink 11546``` 11547 11548**Week Grid**: 11549```php 11550'grid_bg' => '#2d1a24', // Dark purple-pink 11551'cell_bg' => '#1a0d14', // Dark 11552'cell_today_bg' => '#3d2030', // Highlighted purple-pink 11553``` 11554 11555**Special Effects**: 11556```php 11557'bar_glow' => '0 0 5px', // Extra sparkly glow! 11558'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling! 11559``` 11560 11561### Professional Theme Shadow Fix 11562 11563**Before**: Section headers had colored glow 11564```php 11565box-shadow: 0 0 8px #3498db; // Blue glow - wrong! 11566``` 11567 11568**After**: Section headers have subtle shadow 11569```php 11570$headerShadow = ($theme === 'professional') ? 11571 '0 2px 4px rgba(0, 0, 0, 0.15)' : // Shadow for professional 11572 '0 0 8px ' . $accentColor; // Glow for others 11573``` 11574 11575**Result**: 11576- **Matrix/Purple/Pink**: Colored glow on headers ✓ 11577- **Professional**: Clean grey shadow (no glow) ✓ 11578 11579### All Four Themes: 11580 11581** Matrix Edition**: 11582- Dark green (#00cc07) 11583- Neon glow effects 11584- Hacker aesthetic 11585 11586** Purple Dream**: 11587- Elegant purple (#9b59b6) 11588- Violet glow effects 11589- Royal aesthetic 11590 11591** Professional Blue**: 11592- Clean grey/blue (#4a90e2) 11593- Subtle shadows (NO glow) 11594- Corporate aesthetic 11595 11596** Pink Bling** (NEW!): 11597- Hot pink (#ff1493) 11598- MAXIMUM sparkle & glow 11599- Glamorous aesthetic ✨ 11600 11601### Technical Implementation 11602 11603**Theme Added To**: 11604- `getSidebarThemeStyles()` - color definitions 11605- `getSidebarTheme()` - validation 11606- `saveSidebarTheme()` - admin save 11607- Admin panel - UI with preview 11608- All shadow/glow calculations 11609- JavaScript theme colors 11610- Clicked day panel colors 11611 11612**Perfect for users who want FABULOUS pink calendars!** ✨ 11613 11614## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY 11615 11616### Text Glow Refinement 11617- **Changed:** Reduced text glow from 3px to 2px (less intense) 11618- **Fixed:** Clicked day panel now has same text glow as sections 11619 11620### Text Glow Reduction 11621 11622**Before**: Text glow was too strong (3px) 11623```php 11624// Sections: 11625text-shadow: 0 0 3px #00cc07; // Too bright! 11626 11627// Clicked day panel: 11628text-shadow: 0 0 3px #00cc07; // Too bright! 11629``` 11630 11631**After**: Subtler text glow (2px) 11632```php 11633// Sections: 11634text-shadow: 0 0 2px #00cc07; // Just right ✓ 11635 11636// Clicked day panel: 11637text-shadow: 0 0 2px #00cc07; // Just right ✓ 11638``` 11639 11640**Visual Impact**: 11641- **Matrix**: Softer green glow, easier to read 11642- **Purple**: Softer purple glow, more elegant 11643- **Professional**: Still no glow (clean) 11644 11645### Consistency Fix 11646 11647**Before**: Sections had glow, clicked day panel had NO glow 11648 11649**After**: Both sections AND clicked day panel have matching subtle glow 11650 11651**Where Glow Appears**: 11652- ✅ Today section event text 11653- ✅ Tomorrow section event text 11654- ✅ Important section event text 11655- ✅ **Clicked day panel event text** ← NOW CONSISTENT! 11656 11657**Result**: 11658- Glow is less intense and easier on eyes ✓ 11659- All event text has consistent styling ✓ 11660- Matrix/Purple themes more refined ✓ 11661 11662### Technical Details 11663 11664**PHP (Sections)**: 11665```php 11666$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';'; 11667``` 11668 11669**JavaScript (Clicked Day Panel)**: 11670```javascript 11671themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple 11672eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'"; 11673``` 11674 11675**Perfect consistency and subtle elegance!** ✨ 11676 11677## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY 11678 11679### ✨ Important Events Enhancement 11680- **Changed:** Important events now show from next 2 weeks (not just current week) 11681- **Fixed:** Important events on Sunday after current week now visible 11682- **Changed:** Events loaded 2 weeks into future for Important section 11683 11684### Background Cleanup 11685- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections 11686- **Removed:** Grey backgrounds from individual events 11687- **Result:** Clean transparent backgrounds, original dark Matrix look restored 11688 11689### Important Events - Future Coverage 11690 11691**Before**: Only showed Important events from current week 11692```php 11693if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 11694 $importantEvents[] = $event; 11695} 11696``` 11697 11698**After**: Shows Important events from today through next 2 weeks 11699```php 11700// Load events 2 weeks out 11701$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days')); 11702 11703// Show all important events from today forward 11704if ($isImportant && $dateKey >= $todayStr) { 11705 $importantEvents[] = $event; 11706} 11707``` 11708 11709**Example**: 11710- Today: Saturday Feb 7 11711- Current week: Sun Feb 1 → Sat Feb 7 11712- Important events shown: Feb 7 → Feb 21 (today + 14 days) 11713 11714**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓ 11715 11716### Background Removal 11717 11718**Before**: Light grey/white backgrounds added 11719```php 11720// Section background: 11721$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay 11722 11723// Event background: 11724$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay 11725``` 11726 11727**After**: No backgrounds (transparent) 11728```php 11729// Section: No background property 11730<div style="padding:4px 0;"> 11731 11732// Event: No background property 11733<div style="padding:4px 6px; ..."> 11734``` 11735 11736**Result**: 11737- Clean, dark Matrix aesthetic restored ✓ 11738- Purple theme darker and more elegant ✓ 11739- Professional theme still has its light grey sidebar bg ✓ 11740- Events stand out with just color bars and borders ✓ 11741 11742### What Changed: 11743 11744**Sections (Today/Tomorrow/Important)**: 11745- ❌ No more grey overlay 11746- ✓ Transparent background 11747- ✓ Colored borders & glows remain 11748 11749**Individual Events**: 11750- ❌ No more grey overlay 11751- ✓ Transparent background 11752- ✓ Colored bars & borders remain 11753 11754**Perfect! Back to the original clean dark look with future Important events!** 11755 11756## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR 11757 11758### Final Theme Polish 11759- **Fixed:** Today/Tomorrow/Important section shadows now match theme 11760- **Fixed:** Event description text color now uses theme dim color 11761 11762### Section Shadow Fix 11763 11764**Problem**: Sections always had green glow regardless of theme 11765 11766**Before**: 11767```php 11768// Hardcoded green: 11769box-shadow: 0 0 5px rgba(0, 204, 7, 0.2); 11770``` 11771 11772**After**: 11773```php 11774// Theme-aware: 11775$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' : 11776 ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' : 11777 '0 2px 4px rgba(0, 0, 0, 0.1)'); 11778``` 11779 11780**Result**: 11781- **Matrix**: Green glow around sections ✓ 11782- **Purple**: Purple glow around sections ✓ 11783- **Professional**: Subtle grey shadow (no glow) ✓ 11784 11785### Description Color Fix 11786 11787**Problem**: Description text always green in clicked day panel 11788 11789**Before**: 11790```javascript 11791color: #00aa00; // Always green 11792``` 11793 11794**After**: 11795```javascript 11796color: themeColors.text_dim; // Theme dim color 11797``` 11798 11799**Result**: 11800- **Matrix**: Dim green (#00aa00) ✓ 11801- **Purple**: Dim purple (#8e7ab8) ✓ 11802- **Professional**: Grey (#7f8c8d) ✓ 11803 11804### Now 100% Theme Consistent 11805 11806Every single visual element respects theme: 11807- ✅ Sidebar background & border 11808- ✅ Header colors & shadows 11809- ✅ Week grid & cells 11810- ✅ Add Event button 11811- ✅ Section borders & **shadows** ← Fixed! 11812- ✅ Event titles & times 11813- ✅ Event **descriptions** ← Fixed! 11814- ✅ Clicked day panel 11815- ✅ Event bars & glows 11816 11817**Absolute perfection across all three themes!** ✨ 11818 11819## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND 11820 11821### Theme Improvements 11822- **Fixed:** Clicked day panel now uses correct theme colors 11823- **Changed:** Professional Blue background now light grey (not white) 11824- **Added:** Theme colors passed to JavaScript for dynamic rendering 11825 11826### Clicked Day Panel Theming 11827 11828**Before**: Always blue regardless of theme 11829```javascript 11830// Hardcoded blue: 11831color:#00cc07; // Always green 11832background:#3498db; // Always blue 11833``` 11834 11835**After**: Theme-aware colors 11836```php 11837// PHP passes theme to JavaScript: 11838window.themeColors_XXX = { 11839 text_primary: '#00cc07' or '#b19cd9' or '#2c3e50', 11840 text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2', 11841 text_shadow: '0 0 3px ...' or '', 11842 event_bg: 'rgba(...)', 11843 border_color: 'rgba(...)', 11844 bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)' 11845}; 11846 11847// JavaScript uses theme colors: 11848color: themeColors.text_primary; 11849background: themeColors.event_bg; 11850``` 11851 11852**Result**: 11853- Matrix: Green panel with green glow ✓ 11854- Purple: Purple panel with purple glow ✓ 11855- Professional: Blue panel, no glow, clean ✓ 11856 11857### Professional Theme Background Change 11858 11859**Before**: Almost white (#f5f7fa, #ffffff) 11860```php 11861'bg' => '#f5f7fa', // Very light 11862'cell_bg' => '#ffffff', // Pure white 11863``` 11864 11865**After**: Light grey tones 11866```php 11867'bg' => '#e8ecf1', // Soft grey-blue 11868'cell_bg' => '#f5f7fa', // Light grey 11869'grid_bg' => '#d5dbe3', // Medium grey 11870'cell_today_bg' => '#dce8f7' // Highlighted grey-blue 11871``` 11872 11873**Visual Impact**: 11874- Sidebar: Light grey-blue background (#e8ecf1) 11875- Week cells: Lighter grey (#f5f7fa) 11876- Today cell: Highlighted blue-grey (#dce8f7) 11877- More depth and contrast ✓ 11878- Professional appearance ✓ 11879 11880### All Theme Elements Now Consistent 11881 11882**Matrix (Green)**: 11883- Sidebar: Dark (#242424) 11884- Clicked panel: Dark with green 11885- Text: Green with glow 11886 11887**Purple Dream**: 11888- Sidebar: Dark purple (#2a2030) 11889- Clicked panel: Dark with purple 11890- Text: Purple with glow 11891 11892**Professional Blue**: 11893- Sidebar: Light grey (#e8ecf1) 11894- Clicked panel: Light with blue 11895- Text: Dark grey, no glow 11896 11897**Perfect theme consistency everywhere!** 11898 11899## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING 11900 11901### Critical Fixes 11902- **Fixed:** Tomorrow events not loaded when outside current week 11903- **Fixed:** `&` showing instead of `&` (double HTML encoding) 11904 11905### Issue 1: Tomorrow Not Loading 11906 11907**Problem**: Sidebar only loaded events for current week 11908- Today (Saturday): Week ends today 11909- Tomorrow (Sunday): Start of NEXT week 11910- Tomorrow events never loaded from data files! 11911 11912**Before**: 11913```php 11914// Only load current week 11915$end = new DateTime($weekEnd); 11916$end->modify('+1 day'); 11917$period = new DatePeriod($start, $interval, $end); 11918// If tomorrow > weekEnd, it's not in period! 11919``` 11920 11921**After**: 11922```php 11923// Check if tomorrow is outside week 11924$tomorrowDate = date('Y-m-d', strtotime('+1 day')); 11925if ($tomorrowDate > $weekEnd) { 11926 // Extend to include tomorrow 11927 $end = new DateTime($tomorrowDate); 11928} 11929$end->modify('+1 day'); 11930$period = new DatePeriod($start, $interval, $end); 11931``` 11932 11933**Result**: Tomorrow events now loaded even at week boundary! ✓ 11934 11935### Issue 2: Double HTML Encoding 11936 11937**Problem**: `&` characters showing as `&` 11938 11939**Cause**: Double encoding on line 2625 and 2681 11940```php 11941// Line 2625: 11942$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee & Tea" 11943 11944// Line 2681: 11945$html .= htmlspecialchars($title); // "Coffee & Tea" → "Coffee &amp; Tea" ❌ 11946``` 11947 11948**Fixed**: 11949```php 11950// Line 2625: 11951$title = htmlspecialchars($event['title']); // Encode once 11952 11953// Line 2681: 11954$html .= $title; // Use already-encoded value ✓ 11955``` 11956 11957**Result**: `&` displays correctly! ✓ 11958 11959### Both Fixes Critical 11960 11961These were **two separate bugs**: 119621. **Loading bug**: Tomorrow events not read from files 119632. **Display bug**: Double-encoding text 11964 11965Both needed fixing for Tomorrow section to work properly! 11966 11967## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY 11968 11969### Critical Fix 11970- **Fixed:** Tomorrow section missing when tomorrow is outside current week 11971- **Fixed:** Today section now always shows regardless of week boundaries 11972- **Changed:** Today/Tomorrow processed BEFORE week boundary checks 11973 11974### The Problem 11975 11976**Scenario**: Today is Saturday (last day of week) 11977- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today 11978- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week** 11979 11980**BROKEN Logic** (v4.2.2): 11981```php 11982foreach ($events as $dateKey => $dayEvents) { 11983 if ($dateKey < $weekStart) continue; // Skip old events 11984 11985 // ...week processing... 11986 11987 if ($dateKey === $tomorrowStr) { // ← Never reached! 11988 $tomorrowEvents[] = $event; // Tomorrow > weekEnd 11989 } 11990} 11991``` 11992 11993**Result**: Tomorrow events never added because loop skipped them! ❌ 11994 11995### The Fix 11996 11997**Process Today/Tomorrow FIRST**: 11998```php 11999foreach ($events as $dateKey => $dayEvents) { 12000 $eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 12001 12002 foreach ($eventsWithConflicts as $event) { 12003 // ALWAYS process Today and Tomorrow first! 12004 if ($dateKey === $todayStr) { 12005 $todayEvents[] = $event; // ✓ Always shows 12006 } 12007 if ($dateKey === $tomorrowStr) { 12008 $tomorrowEvents[] = $event; // ✓ Always shows 12009 } 12010 12011 // THEN check week boundaries for grid 12012 if ($dateKey >= $weekStart && $dateKey <= $weekEnd) { 12013 $weekEvents[$dateKey][] = $event; 12014 } 12015 12016 // Important events still week-only 12017 if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 12018 $importantEvents[] = $event; 12019 } 12020 } 12021} 12022``` 12023 12024### What Changed 12025 12026**Before**: 120271. Skip events < weekStart ❌ 120282. Process week grid 120293. Try to add Today/Tomorrow ← **Failed if outside week** 120304. Add Important events 12031 12032**After**: 120331. **Always add Today events** ✓ 120342. **Always add Tomorrow events** ✓ 120353. Add to week grid if in range 120364. Add Important events if in range 12037 12038**Result**: 12039- Today section: ✓ Always shows 12040- Tomorrow section: ✓ Always shows (even at week boundary!) 12041- Week grid: ✓ Only current week 12042- Important: ✓ Only current week 12043 12044### Edge Cases Fixed 12045 12046**Saturday → Sunday transition**: 12047- Today (Sat): Shows in Today section ✓ 12048- Tomorrow (Sun): Shows in Tomorrow section ✓ 12049- Week grid: Only shows Sat (today) ✓ 12050 12051**Sunday → Monday transition**: 12052- Today (Sun): Shows in Today section ✓ 12053- Tomorrow (Mon): Shows in Tomorrow section ✓ 12054- Week grid: Shows both Sun and Mon ✓ 12055 12056**Perfect! Tomorrow section now always works!** 12057 12058## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY! 12059 12060### Corrected Week Options 12061- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!) 12062- **Changed:** Default is **Sunday** (US/Canada standard) 12063- **Fixed:** Day names array for Sunday start: S M T W T F S 12064 12065### Correct Week Start Options 12066 12067**Sunday Start** (Default): 12068- Grid shows: **S M T W T F S** 12069- Week: Sunday → Saturday 12070- US/Canada standard 12071- Most common worldwide 12072 12073**Monday Start**: 12074- Grid shows: **M T W T F S S** 12075- Week: Monday → Sunday 12076- ISO 8601 standard 12077- Common in Europe 12078 12079### Technical Changes 12080 12081**All References Updated**: 12082```php 12083// Changed from 'saturday' to 'sunday' in: 12084- Admin validation 12085- Week calculation logic 12086- Day names array 12087- Default value 12088- Comments 12089``` 12090 12091**Sunday Calculation** (when today is Saturday): 12092```php 12093$today = date('w'); // 0=Sun, 6=Sat 12094if ($today == 0) { 12095 $weekStart = date('Y-m-d'); // Today! 12096} else { 12097 // Go back $today days to last Sunday 12098 $weekStart = date('Y-m-d', strtotime('-' . $today . ' days')); 12099} 12100``` 12101 12102**Examples**: 12103- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7 12104- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14 12105 12106**Sorry for the confusion - it's Sunday not Saturday!** 12107 12108## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY 12109 12110### Critical Fix 12111- **Fixed:** Week calculation broken when today is Saturday 12112- **Fixed:** Events not showing in Today/Important sections 12113- **Fixed:** Week grid event bars missing 12114- **Changed:** Default week start is Saturday (matches main calendar) 12115 12116### Technical Details 12117 12118**The Bug**: 12119```php 12120// BROKEN (v4.2.0): 12121$weekStart = date('Y-m-d', strtotime('saturday this week')); 12122// When TODAY is Saturday, this is ambiguous and fails! 12123 12124// FIXED (v4.2.1): 12125$today = date('w'); // 0 (Sun) to 6 (Sat) 12126if ($today == 6) { 12127 $weekStart = date('Y-m-d'); // Today! 12128} else { 12129 $daysBack = ($today == 0) ? 1 : ($today + 1); 12130 $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days')); 12131} 12132$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days')); 12133``` 12134 12135**Why It Failed**: 12136- `strtotime('saturday this week')` is ambiguous when run ON a Saturday 12137- PHP may interpret it as "next Saturday" or fail 12138- Result: Week range was wrong, events filtered out 12139 12140**The Fix**: 12141- Explicit calculation using day-of-week math 12142- Saturday (day 6): weekStart = today 12143- Sunday (day 0): weekStart = yesterday 12144- Monday-Friday: calculate days back to last Saturday 12145 12146**Result**: Works reliably every day of the week! 12147 12148**Default Changed**: Saturday start (was Monday in 4.2.0) 12149- Matches main calendar behavior 12150- Users can still switch to Monday in settings 12151 12152## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR 12153 12154### ✨ New Feature 12155- **Added:** Week start day selector in Themes tab 12156- **Added:** Choose between Monday (ISO standard) or Saturday week start 12157- **Added:** Week grid and all events now respect the selected start day 12158- **Changed:** Themes tab renamed to "Sidebar Widget Settings" 12159 12160### Week Start Options 12161 12162**Monday Start** (Default): 12163- Grid shows: M T W T F S S 12164- Week runs: Monday → Sunday 12165- ISO 8601 standard 12166- Common in Europe, most of world 12167 12168**Saturday Start**: 12169- Grid shows: S S M T W T F 12170- Week runs: Saturday → Friday 12171- Common in Middle East 12172- Sabbath-observant communities 12173 12174### Technical Details 12175 12176**Configuration**: 12177```php 12178// Saved in: data/meta/calendar_week_start.txt 12179// Values: 'monday' or 'saturday' 12180 12181// Week calculation: 12182if ($weekStartDay === 'saturday') { 12183 $weekStart = date('Y-m-d', strtotime('saturday this week')); 12184 $weekEnd = date('Y-m-d', strtotime('friday next week')); 12185} else { 12186 $weekStart = date('Y-m-d', strtotime('monday this week')); 12187 $weekEnd = date('Y-m-d', strtotime('sunday this week')); 12188} 12189``` 12190 12191**Day Names Array**: 12192```php 12193// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S'] 12194// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F'] 12195``` 12196 12197**What Changes**: 12198- Week grid day letters 12199- Week grid date sequence 12200- Today/Tomorrow/Important event date ranges 12201- Week event grouping 12202 12203**What Stays Same**: 12204- All themes still work 12205- Event data unchanged 12206- Main calendar unaffected 12207 12208### How to Change: 12209 122101. Admin → Calendar → Themes tab 122112. Under "Week Start Day" section 122123. Select Monday or Saturday 122134. Click "Save Settings" 122145. Refresh sidebar to see changes 12215 12216**Perfect for international users or religious observances!** 12217 12218## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS 12219 12220### ️ Calendar Improvements 12221- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar) 12222- **Changed:** Event section backgrounds much lighter (almost white) 12223- **Changed:** Individual event backgrounds lighter and more readable 12224- **Changed:** Event borders now theme-colored 12225 12226### Technical Details 12227 12228**Week Start Change**: 12229```php 12230// Before: 12231$weekStart = date('Y-m-d', strtotime('monday this week')); 12232$weekEnd = date('Y-m-d', strtotime('sunday this week')); 12233$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S']; 12234 12235// After: 12236$weekStart = date('Y-m-d', strtotime('sunday this week')); 12237$weekEnd = date('Y-m-d', strtotime('saturday this week')); 12238$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S']; 12239``` 12240 12241**Background Colors**: 12242```php 12243// Section backgrounds (Today, Tomorrow, Important): 12244Matrix: rgba(255, 255, 255, 0.05) // Very light overlay 12245Purple: rgba(255, 255, 255, 0.08) // Slightly lighter 12246Professional: rgba(255, 255, 255, 0.95) // Almost white! 12247 12248// Individual event backgrounds: 12249Matrix: rgba(255, 255, 255, 0.03) // Subtle 12250Purple: rgba(255, 255, 255, 0.05) // Light 12251Professional: rgba(255, 255, 255, 0.5) // Semi-transparent white 12252``` 12253 12254**Event Borders**: 12255```php 12256Matrix: rgba(0, 204, 7, 0.2) // Green 12257Purple: rgba(155, 89, 182, 0.2) // Purple 12258Professional: rgba(74, 144, 226, 0.2) // Blue 12259``` 12260 12261### Visual Result: 12262 12263**Before**: Dark backgrounds made text hard to read 12264**After**: Light backgrounds make events pop and text very readable 12265 12266**Week Grid**: 12267``` 12268Before: [M][T][W][T][F][S][S] 12269After: [S][M][T][W][T][F][S] ← Now matches main calendar! 12270``` 12271 12272## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS 12273 12274### Final Theme Polish 12275- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors 12276- **Fixed:** Event times now use theme bright color 12277- **Fixed:** Event dates use theme dim color 12278- **Fixed:** Task checkboxes use theme bright color 12279- **Fixed:** Event color bars use theme-appropriate shadows 12280- **Fixed:** No text shadows on Professional theme 12281 12282### Technical Details 12283 12284**Event Text Colors**: 12285```php 12286// Matrix: 12287- Title: #00cc07 (green) 12288- Time: #00dd00 (bright green) 12289- Date: #00aa00 (dim green) 12290- Text shadow: 0 0 3px (glow) 12291 12292// Purple: 12293- Title: #b19cd9 (lavender) 12294- Time: #d4a5ff (bright purple) 12295- Date: #8e7ab8 (dim purple) 12296- Text shadow: 0 0 3px (glow) 12297 12298// Professional: 12299- Title: #2c3e50 (dark grey) 12300- Time: #4a90e2 (blue) 12301- Date: #7f8c8d (grey) 12302- Text shadow: none (clean) 12303``` 12304 12305**Color Bar Shadows**: 12306```php 12307// Matrix & Purple: Glow effect 12308box-shadow: 0 0 3px [event-color]; 12309 12310// Professional: Subtle shadow 12311box-shadow: 0 1px 2px rgba(0,0,0,0.2); 12312``` 12313 12314### What's Now Fully Themed: 12315 12316✅ Sidebar background & border 12317✅ Header (clock box) background, border, text 12318✅ Week grid background, borders, cells 12319✅ Week grid day letters & numbers 12320✅ Week grid event bars & "+N more" text 12321✅ Add Event button background & text 12322✅ Today/Tomorrow/Important event titles 12323✅ Event times 12324✅ Event dates (Important section) 12325✅ Task checkboxes 12326✅ Event color bars 12327✅ All text shadows (glow vs none) 12328 12329**Every single element now respects the theme!** 12330 12331## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION 12332 12333### Theme Improvements 12334- **Fixed:** Week calendar grid now uses theme colors (purple/blue) 12335- **Fixed:** Add Event button now uses theme colors 12336- **Fixed:** Clock box border now matches theme 12337- **Fixed:** All text shadows respect theme (no glow on professional) 12338- **Fixed:** Event bars use theme-appropriate shadows 12339 12340### Technical Details 12341 12342**Week Grid Theming**: 12343```php 12344// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders 12345// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders 12346// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders 12347``` 12348 12349**Add Event Button**: 12350```php 12351// Matrix: Dark green (#006400) with bright green text 12352// Purple: Purple (#7d3c98) with lavender text 12353// Professional: Blue (#3498db) with white text 12354``` 12355 12356**Text Shadows**: 12357```php 12358// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color) 12359// Professional: No glow (clean look) 12360``` 12361 12362**CSS Overrides**: 12363```css 12364/* Purple theme */ 12365.sidebar-purple .eventlist-today-header { 12366 border-color: #9b59b6; 12367 box-shadow: 0 0 8px rgba(155, 89, 182, 0.2); 12368} 12369 12370/* Professional theme */ 12371.sidebar-professional .eventlist-today-header { 12372 border-color: #4a90e2; 12373 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 12374} 12375``` 12376 12377### What Changed Per Theme: 12378 12379**Purple Dream**: 12380- Week grid: Purple borders and dark purple background 12381- Add Event: Purple button with lavender text 12382- Clock box: Purple border with purple glow 12383- Event bars: Purple glow instead of green 12384- All text: Purple/lavender shades 12385 12386**Professional Blue**: 12387- Week grid: Blue borders and light grey background 12388- Add Event: Blue button with white text 12389- Clock box: Blue border with subtle shadow (no glow) 12390- Event bars: Subtle shadows (no glow) 12391- All text: Dark grey and blue shades 12392 12393**Matrix Edition**: Unchanged (still perfect green theme!) 12394 12395## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING 12396 12397### ✨ New Features 12398- **Added:** Themes tab in admin for sidebar widget theming 12399- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey) 12400- **Added:** Theme selector with live previews 12401- **Added:** Theme persistence across page loads 12402 12403### Available Themes 12404 12405**Matrix Edition** (Default): 12406- Dark background (#242424) 12407- Green accents (#00cc07) 12408- Neon glow effects 12409- Original Matrix styling 12410 12411**Purple Dream**: 12412- Dark purple background (#2a2030) 12413- Purple/violet accents (#9b59b6) 12414- Elegant purple glow 12415- Rich purple color scheme 12416 12417**Professional Blue**: 12418- Light grey background (#f5f7fa) 12419- Blue accents (#4a90e2) 12420- Clean professional look 12421- Subtle shadows instead of glow 12422 12423### Bug Fix 12424- **Fixed:** Tooltips now go UP and to the LEFT (was going right) 12425- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px` 12426 12427### Technical Details 12428 12429**Theme System**: 12430```php 12431// Saved in: data/meta/calendar_theme.txt 12432// Applied dynamically in syntax.php 12433$theme = $this->getSidebarTheme(); // 'matrix', 'purple', or 'professional' 12434$styles = $this->getSidebarThemeStyles($theme); 12435 12436// Styles include: 12437- bg, border, shadow 12438- header_bg, header_border, header_shadow 12439- text_primary, text_bright, text_dim 12440- grid_bg, grid_border 12441- cell_bg, cell_today_bg 12442``` 12443 12444**Theme Changes**: 12445- Header background gradient 12446- Border colors 12447- Text colors 12448- Shadow/glow effects 12449- Grid colors 12450 12451**How to Change**: 124521. Admin → Calendar → Themes tab 124532. Select desired theme 124543. Click "Save Theme" 124554. Refresh page to see changes 12456 12457### Notes 12458- Themes only affect sidebar widget appearance 12459- Main calendar view unchanged 12460- Theme setting stored in `data/meta/calendar_theme.txt` 12461- Safe to switch themes - no data affected 12462 12463## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING 12464 12465### Bug Fixes 12466- **Fixed:** Events now sort chronologically by time (was using string comparison) 12467- **Fixed:** Tooltip positioning using JavaScript like system tooltips 12468- **Fixed:** All-day events appear first, then events in time order 12469 12470### Technical Details 12471 12472**Event Sorting Fix**: 12473```php 12474// BROKEN (v4.0.9): 12475return strcmp($aTime, $bTime); 12476// String comparison: "10:00" < "8:00" because "1" < "8" 12477// Result: 10:00 AM shown BEFORE 8:00 AM ❌ 12478 12479// FIXED (v4.1.0): 12480$aMinutes = $this->timeToMinutes($aTime); // 8:00 = 480 12481$bMinutes = $this->timeToMinutes($bTime); // 10:00 = 600 12482return $aMinutes - $bMinutes; 12483// Result: 8:00 AM shown BEFORE 10:00 AM ✓ 12484``` 12485 12486**Example Before Fix**: 12487``` 12488 Weekend Ticket Duty (all-day) 124898:00 AM START TICKETS 1249010:00 AM Soul Winning ← Wrong! 124919:45 AM Coffee ← Should be before 10:00 AM 12492``` 12493 12494**Example After Fix**: 12495``` 12496 Weekend Ticket Duty (all-day) 124978:00 AM START TICKETS 124989:45 AM Coffee ← Correct! 1249910:00 AM Soul Winning 12500``` 12501 12502**Tooltip Positioning**: 12503- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()` 12504- Uses CSS custom properties `--tooltip-left` and `--tooltip-top` 12505- Positioned on `mouseenter` event 12506- Matches system tooltip implementation (no cutoff) 12507 12508**JavaScript Implementation**: 12509```javascript 12510element.addEventListener("mouseenter", function() { 12511 const rect = element.getBoundingClientRect(); 12512 element.style.setProperty("--tooltip-left", (rect.right - 10) + "px"); 12513 element.style.setProperty("--tooltip-top", (rect.top - 30) + "px"); 12514}); 12515``` 12516 12517**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically! 12518 12519## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX 12520 12521### UI Improvements 12522- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge 12523- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar 12524- **Changed:** Main calendar conflict tooltip now much smaller (was too big) 12525 12526### Technical Details 12527 12528**Sidebar Overflow Fix**: 12529```php 12530// Before (line 2005): 12531style="...overflow:hidden..." // ← Blocked tooltips! 12532 12533// After: 12534style="...overflow:visible..." // ← Tooltips extend beyond! 12535``` 12536 12537**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important` 12538 12539**Main Calendar Tooltip Size**: 12540```css 12541/* Before: */ 12542.conflict-tooltip { 12543 border: 2px solid #ff9800; 12544 border-radius: 6px; 12545 padding: 8px 12px; 12546 font-size: 12px; 12547 min-width: 200px; 12548 max-width: 350px; 12549} 12550 12551/* After: */ 12552.conflict-tooltip { 12553 border: 1px solid #ff9800; /* Thinner */ 12554 border-radius: 3px; /* Smaller */ 12555 padding: 4px 8px; /* Less padding */ 12556 font-size: 10px; /* Smaller header */ 12557 min-width: 120px; /* Narrower */ 12558 max-width: 200px; /* Narrower */ 12559} 12560 12561.conflict-tooltip-body { 12562 padding: 6px 8px; /* Was 10px 12px */ 12563 font-size: 9px; /* Was 11px */ 12564 line-height: 1.4; /* Was 1.6 */ 12565} 12566 12567.conflict-item { 12568 padding: 2px 0; /* Was 4px */ 12569 font-size: 9px; /* Added smaller font */ 12570} 12571``` 12572 12573**Result**: 12574- Main calendar tooltip ~50% smaller 12575- Sidebar tooltips now extend beyond borders 12576- Both tooltips compact and readable 12577 12578## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP 12579 12580### Bug Fix 12581- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text) 12582- **Changed:** Using HTML entity ` ` for newlines instead of `\n` 12583 12584### Technical Details 12585 12586**The Problem**: 12587```php 12588// Before (v4.0.7): 12589$conflictTooltip = 'Conflicts with:\n'; // Literal \n showed in tooltip 12590 12591// Displayed as: 12592"Conflicts with:\n• Event 1\n• Event 2" // ← Literal backslash-n 12593``` 12594 12595**The Fix**: 12596```php 12597// After (v4.0.8): 12598$conflictTooltip = "Conflicts with: "; // HTML entity for newline 12599 12600// Displays as: 12601Conflicts with: 12602• Event 1 12603• Event 2 12604``` 12605 12606**Why ` ` Works**: 12607- HTML entity for line feed character 12608- Works in data attributes 12609- CSS `white-space: pre-line` preserves the newlines 12610- Renders as actual line breaks in tooltip 12611 12612**Applied to**: 12613- PHP rendering (sidebar Today/Tomorrow/Important) 12614- JavaScript rendering (clicked day events) 12615 12616## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX 12617 12618### UI Improvements 12619- **Changed:** Tooltip size reduced significantly (much more compact) 12620- **Fixed:** Tooltip now overflows sidebar borders (not cut off) 12621- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px) 12622- **Changed:** Narrower width (120-200px vs 200-300px) 12623 12624### Technical Details 12625 12626**Tooltip Size Reduction**: 12627```css 12628/* Before (v4.0.6): 12629padding: 6px 10px; 12630font-size: 11px; 12631min-width: 200px; 12632max-width: 300px; 12633 12634/* After (v4.0.7): */ 12635padding: 3px 6px; 12636font-size: 9px; 12637min-width: 120px; 12638max-width: 200px; 12639``` 12640 12641**Overflow Fix**: 12642```css 12643/* Allow tooltip to extend beyond sidebar */ 12644.sidebar-widget, 12645.sidebar-matrix { 12646 overflow: visible !important; 12647} 12648 12649/* Position tooltip outside */ 12650[data-tooltip]:before { 12651 bottom: 120%; /* Further above */ 12652 right: -10px; /* Can extend beyond edge */ 12653 z-index: 10000; /* Always on top */ 12654} 12655``` 12656 12657**Visual Result**: 12658- Tooltip is ~40% smaller 12659- Extends beyond sidebar border if needed 12660- Still readable, just more compact 12661- Better for small screens 12662 12663## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING 12664 12665### Critical Fix 12666- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly 12667- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names 12668- **Fixed:** Events without end time now treated as zero-duration (not +1 hour) 12669- **Fixed:** Now matches what you see in main calendar view 12670 12671### ✨ UI Improvement 12672- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right) 12673- **Added:** Custom CSS tooltip with data-tooltip attribute 12674- **Improved:** Better tooltip positioning - doesn't overflow screen edges 12675 12676### Technical Details 12677 12678**The Problem - Field Name Mismatch**: 12679```php 12680// Main calendar (line 697): 12681$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase) 12682 12683// Sidebar (before fix): 12684$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case) 12685``` 12686 12687**The Problem - Duration Logic**: 12688```php 12689// Main calendar (line 697): 12690$end1 = isset($evt1['endTime']) && !empty($evt1['endTime']) 12691 ? $evt1['endTime'] 12692 : $evt1['time']; // ← Uses START time (zero duration) 12693 12694// Sidebar (before fix): 12695$endTime = ... ? ... : $this->addHoursToTime($startTime, 1); // ← Added 1 hour! 12696``` 12697 12698**The Fix**: 12699```php 12700// Now checks BOTH field names: 12701if (isset($event['end_time']) && $event['end_time'] !== '') { 12702 $endTime = $event['end_time']; 12703} elseif (isset($event['endTime']) && $event['endTime'] !== '') { 12704 $endTime = $event['endTime']; 12705} else { 12706 $endTime = $startTime; // ← Matches main calendar! 12707} 12708``` 12709 12710**Tooltip Positioning**: 12711- Uses `data-tooltip` attribute instead of `title` 12712- CSS positions tooltip ABOVE badge (`bottom: 100%`) 12713- Aligns to RIGHT edge (`right: 0`) 12714- Arrow points down to badge 12715- Black background with white text 12716- Max width 300px 12717 12718### Example 12719 12720**6:00 PM Evening Service** (no end time): 12721- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌ 12722- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar! 12723 12724**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**: 12725- Zero-duration events at 6:00 PM don't overlap with anything 12726- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict 12727 12728**Tooltip appears**: 12729``` 12730 ┌────────────────────┐ 12731 │ Conflicts with: │ 12732 │ • Super Bowl │ 12733 │ (3:30 PM-7:00 PM)│ 12734 └─────────┬──────────┘ 12735 ▼ 12736 ⚠ 12737``` 12738 12739## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING 12740 12741### Bug Fix 12742- **Fixed:** Events without end_time now properly get 1-hour default duration 12743- **Fixed:** Empty string end_time values now treated as missing (was causing issues) 12744- **Improved:** More robust checking for `end_time` field (checks both isset and not empty) 12745 12746### Technical Details 12747 12748**The Problem**: 12749```php 12750// Before (broken): 12751$endTime = isset($event['end_time']) ? $event['end_time'] : default; 12752 12753// If end_time exists but is empty string "": 12754isset($event['end_time']) = TRUE 12755$endTime = "" // ← Empty string, not default! 12756``` 12757 12758**The Fix**: 12759```php 12760// After (fixed): 12761$endTime = (isset($event['end_time']) && $event['end_time'] !== '') 12762 ? $event['end_time'] 12763 : $this->addHoursToTime($startTime, 1); 12764 12765// Now empty string gets the default 1-hour duration 12766``` 12767 12768**Why This Matters**: 12769Events 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. 12770 12771**Example**: 12772``` 12773Super Bowl: 3:30 PM - 7:00 PM 12774Evening Service: 6:00 PM - ??? (should be 7:00 PM) 12775 12776If end_time = "" (empty string): 12777 Old code: Uses "" → conflict detection fails 12778 New code: Uses 7:00 PM → conflict detected ✓ 12779``` 12780 12781### Testing 12782If you're still not seeing the conflict on the 6:00 PM service: 127831. Check if the event has `end_time` set in the JSON 127842. Clear cache (Admin → Manage Events → Clear Cache) 127853. The conflict should now appear 12786 12787## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS 12788 12789### ✨ Feature Added 12790- **Added:** Hover over ⚠ badge to see which events are conflicting 12791- **Added:** Tooltip shows conflicting event titles and times 12792- **Added:** Works in both sidebar sections and clicked day events 12793 12794### Technical Details 12795 12796**Conflict Tracking Enhanced**: 12797```php 12798// Now tracks WHICH events conflict: 12799$event['conflictingWith'] = [ 12800 ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'], 12801 ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30'] 12802]; 12803``` 12804 12805**Tooltip Format**: 12806``` 12807Conflicts with: 12808• Meeting (10:00 AM-11:00 AM) 12809• Call (10:30 AM-11:30 PM) 12810``` 12811 12812**Where It Works**: 12813- ✅ Today section (sidebar) 12814- ✅ Tomorrow section (sidebar) 12815- ✅ Important Events section (sidebar) 12816- ✅ Clicked day events (week grid) 12817 12818**Cursor**: Changes to `help` cursor on hover to indicate tooltip 12819 12820### Note on Multi-Day Events 12821The 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. 12822 12823## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC 12824 12825### Bug Fixes 12826- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections 12827- **Fixed:** Important Events now shows events even if they're today or tomorrow 12828- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular) 12829 12830### Technical Details 12831 12832**Conflict Badge Issue**: 12833```php 12834// BROKEN (line 2511): 12835$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']); 12836// ↑ Checking 'conflicts' (plural) 12837 12838// But detectTimeConflicts() sets: 12839$event['conflict'] = true/false; 12840// ↑ Setting 'conflict' (singular) 12841 12842// FIXED: 12843$hasConflict = isset($event['conflict']) && $event['conflict']; 12844``` 12845 12846**Result**: Badge now shows for ALL conflicting events in sidebar sections 12847 12848**Important Events Logic Issue**: 12849```php 12850// BROKEN: 12851if ($dateKey === $todayStr) { 12852 $todayEvents[] = ...; 12853} elseif ($dateKey === $tomorrowStr) { 12854 $tomorrowEvents[] = ...; 12855} else { // ← Only checked if NOT today/tomorrow! 12856 if ($isImportant) { 12857 $importantEvents[] = ...; 12858 } 12859} 12860 12861// FIXED: 12862if ($dateKey === $todayStr) { 12863 $todayEvents[] = ...; 12864} 12865if ($dateKey === $tomorrowStr) { 12866 $tomorrowEvents[] = ...; 12867} 12868// ↑ Changed to separate 'if' statements 12869if ($isImportant && $dateKey in this week) { 12870 $importantEvents[] = ...; // ← Now includes today/tomorrow too! 12871} 12872``` 12873 12874**Result**: Important namespace events now show in Important section even if they're today or tomorrow 12875 12876### Conflict Badge Display 12877- Simplified to just ⚠ icon (no count) 12878- Orange color (#ff9800) 12879- 10px font size 12880- Hover shows "Time conflict detected" 12881 12882## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY 12883 12884### Bug Fix 12885- **Fixed:** Important Events section now displays all events correctly 12886- **Fixed:** Single-event days now get conflict flag (was returning early without flag) 12887- **Fixed:** Conflict detection no longer causes events to disappear from Important section 12888 12889### Technical Details 12890 12891**The Problem**: 12892- `detectTimeConflicts()` returned early if only 1 event on a day 12893- Returned original array without adding 'conflict' field 12894- This inconsistency caused issues in event categorization 12895 12896**The Solution**: 12897```php 12898// Before (broken): 12899if (empty($dayEvents) || count($dayEvents) < 2) { 12900 return $dayEvents; // No 'conflict' field added! 12901} 12902 12903// After (fixed): 12904if (count($dayEvents) === 1) { 12905 return [array_merge($dayEvents[0], ['conflict' => false])]; // Always add flag 12906} 12907``` 12908 12909**Result**: 12910- All events now have 'conflict' field consistently 12911- Single events: conflict = false 12912- Multiple events: conflict = true/false based on overlap 12913- Important Events section displays correctly 12914 12915## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES 12916 12917### Bug Fixes 12918- **Fixed:** Conflict badge (⚠) now displays in clicked day events 12919- **Fixed:** Recurring events edit now updates time and end_time correctly 12920- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit 12921 12922### ✨ Features Added 12923- **Added:** Time conflict detection for overlapping events 12924- **Added:** detectTimeConflicts() function checks all events on same day 12925- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions 12926- **Added:** Events now have 'conflict' flag set automatically 12927 12928### UI Changes 12929- **Changed:** Admin tab order: Manage Events (first), Update Plugin, ⚙️ Outlook Sync 12930- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin") 12931- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars) 12932 12933### Technical Details 12934 12935**Conflict Detection**: 12936```php 12937// Automatically detects overlapping events on same day 12938// Sets 'conflict' flag to true if event overlaps with another 12939$eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 12940``` 12941 12942**Logic**: 12943- All-day events never conflict (no time set) 12944- Timed events check for overlap with other timed events 12945- Overlap = start1 < end2 AND start2 < end1 12946- Default duration is 60 minutes if no end_time 12947 12948**Recurring Events Fix**: 12949- Old: Updated `$event['start']` and `$event['end']` (wrong fields) 12950- New: Updates `$event['time']` and `$event['end_time']` (correct fields) 12951- Now edits actually save and update the events 12952 12953**Week View Bars**: 12954- Shows 4 colored bars instead of 3 12955- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc. 12956 12957## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE 12958 12959**Major Release**: Complete Matrix-themed calendar plugin with advanced features! 12960 12961### Major Features 12962 12963#### Sidebar Widget 12964- **Week Grid**: Interactive 7-day calendar with click-to-view events 12965- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips 12966- **Live Clock**: Updates every second with date display 12967- **Real-time Weather**: Geolocation-based temperature with icon 12968- **Event Sections**: Today (orange), Tomorrow (green), Important (purple) 12969- **Add Event Button**: Dark green bar opens full event creation dialog 12970- **Matrix Theme**: Green glow effects throughout 12971 12972#### Event Management 12973- **Single Color Bars**: Clean 3px bars showing event's assigned color 12974- **All-Day Events First**: Then sorted chronologically by time 12975- **Conflict Detection**: Orange ⚠ badge on overlapping events 12976- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//) 12977- **HTML Rendering**: Pre-rendered for JavaScript display 12978- **Click-to-View**: Click week grid days to expand event details 12979 12980#### Admin Interface 12981- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button 12982- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings 12983- **Manage Events Tab**: Browse, edit, delete, move events across namespaces 12984 12985#### Outlook Sync 12986- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook 12987- **Category Mapping**: Map colors to Outlook categories 12988- **Conflict Resolution**: Time conflict detection 12989- **Import/Export Config**: Encrypted configuration files 12990 12991### Design 12992- **Matrix Theme**: Authentic green glow aesthetic 12993- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections 12994- **Color Scheme**: 12995 - Today: Orange #ff9800 12996 - Tomorrow: Green #4caf50 12997 - Important: Purple #9b59b6 12998 - Add Event: Dark green #006400 12999 - System bars: Green/Purple/Orange 13000 13001### Technical Highlights 13002- **Zero-margin Design**: Perfect flush alignment throughout 13003- **Flexbox Layout**: Modern, responsive structure 13004- **AJAX Operations**: No page reloads needed 13005- **Smart Sorting**: All-day events first, then chronological 13006- **Tooltip System**: Detailed stats on hover (working correctly) 13007- **Event Dialog**: Full form with drag support 13008- **Cache Management**: One-click cache clearing 13009 13010### Breaking Changes from v3.x 13011- Removed dual color bars (now single event color bar only) 13012- Add Event button moved to between header and week grid 13013- All-day events now appear FIRST (not last) 13014- Update Plugin tab is now the default admin tab 13015 13016### Bug Fixes (v3.10.x → v4.0.0) 13017- ✅ Fixed color bars not showing (align-self:stretch vs height:100%) 13018- ✅ Fixed tooltip function naming (sanitized calId for JavaScript) 13019- ✅ Fixed weather display (added updateWeather function) 13020- ✅ Fixed HTML rendering in events (title_html/description_html fields) 13021- ✅ Fixed Add Event dialog (null check for calendar element) 13022- ✅ Fixed text positioning in Add Event button 13023- ✅ Fixed spacing throughout sidebar widget 13024 13025### Complete Feature List 13026- Full calendar view (month grid) 13027- Sidebar widget (week view) 13028- Event panel (standalone) 13029- Event list (date ranges) 13030- Namespace support 13031- Color coding 13032- Time conflict detection 13033- DokuWiki syntax in events 13034- Outlook synchronization 13035- System monitoring 13036- Weather display 13037- Live clock 13038- Admin interface 13039- Cache management 13040- Draggable dialogs 13041- AJAX save/edit/delete 13042- Import/export config 13043 13044### Usage 13045 13046**Sidebar Widget**: 13047``` 13048{{calendar sidebar}} 13049{{calendar sidebar namespace=team}} 13050``` 13051 13052**Full Calendar**: 13053``` 13054{{calendar}} 13055{{calendar year=2026 month=6 namespace=team}} 13056``` 13057 13058**Event Panel**: 13059``` 13060{{eventpanel}} 13061``` 13062 13063**Event List**: 13064``` 13065{{eventlist daterange=2026-01-01:2026-01-31}} 13066``` 13067 13068### Stats 13069- **40+ versions** developed during v3.x iterations 13070- **3.10.0 → 3.11.4**: Polish and refinement 13071- **4.0.0**: Production-ready Matrix Edition 13072 13073### Credits 13074Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration. 13075 13076--- 13077 13078## Previous Versions (v3.11.4 and earlier) 13079 13080## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING 13081- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px) 13082- **Improved:** Small breathing room between system stats bars and Add Event button 13083- **Visual:** Better spacing for cleaner appearance 13084 13085### CSS Change: 13086**eventlist-today-header**: 13087- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px` 13088 13089### Visual Result: 13090``` 13091│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats bars 13092│ │ ← 2px space (restored) 13093├───────────────────────┤ 13094│ + ADD EVENT │ ← Add Event bar 13095├───────────────────────┤ 13096``` 13097 13098**Before (v3.11.3)**: No space, bars directly touch Add Event button 13099**After (v3.11.4)**: 2px breathing room for better visual hierarchy 13100 13101## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION 13102- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset 13103- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error 13104- **Changed:** Add Event text moved up 1px (position:relative; top:-1px) 13105- **Changed:** Line-height reduced from 12px to 10px for better text centering 13106- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets 13107 13108### JavaScript Fix: 13109**Problem**: Line 1084-1085 in calendar-main.js 13110```javascript 13111const calendar = document.getElementById(calId); 13112const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error! 13113``` 13114 13115**Solution**: Added null check 13116```javascript 13117const calendar = document.getElementById(calId); 13118const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null; 13119``` 13120 13121**Why This Happened**: 13122- Regular calendar has element with id=calId 13123- Sidebar widget doesn't have this element (different structure) 13124- Code tried to read .dataset on null, causing error 13125 13126### Text Position Fix: 13127**Before**: 13128- line-height: 12px 13129- vertical-align: middle 13130- Text slightly low 13131 13132**After**: 13133- line-height: 10px 13134- position: relative; top: -1px 13135- Text perfectly centered 13136 13137### What Works Now: 13138✅ Click "+ ADD EVENT" in sidebar → Dialog opens 13139✅ No console errors 13140✅ Text properly centered vertically 13141✅ Form pre-filled with today's date 13142✅ Save works correctly 13143 13144## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR 13145- **Added:** Event dialog to sidebar widget (same as regular calendar) 13146- **Changed:** Add Event button now opens proper event form dialog 13147- **Added:** renderEventDialog() called in renderSidebarWidget() 13148- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date 13149- **Improved:** Can now add events directly from sidebar widget 13150 13151### Add Event Button Behavior: 13152**Before (v3.11.1)**: Showed alert with instructions 13153**After (v3.11.2)**: Opens full event creation dialog 13154 13155**Dialog Features**: 13156- Date field (defaults to today) 13157- Title field (required) 13158- Time field (optional) 13159- End time field (optional) 13160- Color picker 13161- Category field 13162- Description field 13163- Save and Cancel buttons 13164- Draggable dialog 13165 13166### Technical Changes: 13167- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget() 13168- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')` 13169- Dialog uses same structure as regular calendar 13170- Uses existing openAddEvent() and saveEventCompact() JavaScript functions 13171 13172### User Flow: 131731. User clicks "+ ADD EVENT" green bar 131742. Event dialog opens with today's date pre-filled 131753. User fills in event details 131764. User clicks Save 131775. Event saved via AJAX 131786. Dialog closes 131797. Sidebar refreshes to show new event 13180 13181## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG 13182- **Fixed:** Removed bottom padding from header (was 2px, now 0) 13183- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0) 13184- **Fixed:** Add Event bar now flush against header with zero gap 13185- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin 13186- **Improved:** Alert provides clear instructions on how to add events 13187 13188### CSS Changes: 13189**eventlist-today-header**: 13190- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom) 13191 13192**eventlist-stats-container**: 13193- `margin-top: 2px` → `margin: 0` (removed all margins) 13194 13195### Add Event Button Behavior: 13196**Before**: Clicked → Navigated to Admin → Manage Events tab 13197**After**: Clicked → Shows alert with instructions 13198 13199**Alert Message**: 13200``` 13201To add an event, go to: 13202Admin → Calendar Management → Manage Events tab 13203or use the full calendar view {{calendar}} 13204``` 13205 13206### Visual Result: 13207``` 13208│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats (no margin-bottom) 13209├────────────────────────┤ 13210│ + ADD EVENT │ ← Perfectly flush! 13211├────────────────────────┤ 13212``` 13213 13214No gaps, perfectly aligned! 13215 13216## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE 13217- **Moved:** Add Event bar back to original position (between header and week grid) 13218- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff) 13219- **Changed:** Letter spacing reduced from 0.5px to 0.4px 13220- **Fixed:** Text now fully visible without being cut off 13221- **Final:** Optimal position and size determined 13222 13223### Final Layout: 13224``` 13225┌─────────────────────────────┐ 13226│ Clock | Weather | Stats │ ← Header 13227├─────────────────────────────┤ 13228│ + ADD EVENT │ ← Bar (back here, smaller text) 13229├─────────────────────────────┤ 13230│ M T W T F S S │ ← Week Grid 13231│ 3 4 5 6 7 8 9 │ 13232├─────────────────────────────┤ 13233│ Today │ ← Event sections 13234└─────────────────────────────┘ 13235``` 13236 13237### Text Size Changes: 13238**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off 13239**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible 13240 13241### Why This Position: 13242- Separates header from calendar 13243- Natural action point after viewing stats 13244- Users see stats → decide to add event → view calendar 13245- Consistent with original design intent 13246 13247## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID 13248- **Moved:** Add Event bar repositioned from between header/grid to below week grid 13249- **Improved:** Better visual flow - header → stats → grid → add button → events 13250- **Changed:** Add Event bar now acts as separator between calendar and event sections 13251 13252### New Layout: 13253``` 13254┌─────────────────────────────┐ 13255│ Clock | Weather | Stats │ ← Header 13256├─────────────────────────────┤ 13257│ M T W T F S S │ ← Week Grid 13258│ 3 4 5 6 7 8 9 │ 13259├─────────────────────────────┤ 13260│ + ADD EVENT │ ← Add bar (moved here!) 13261├─────────────────────────────┤ 13262│ Today │ ← Event sections 13263│ Tomorrow │ 13264│ Important Events │ 13265└─────────────────────────────┘ 13266``` 13267 13268### Visual Flow: 13269**Before (v3.10.8)**: 132701. Header (clock, weather, stats) 132712. **+ ADD EVENT** bar 132723. Week grid 132734. Event sections 13274 13275**After (v3.10.9)**: 132761. Header (clock, weather, stats) 132772. Week grid (calendar days) 132783. **+ ADD EVENT** bar 132794. Event sections 13280 13281### Benefits: 13282- Natural reading flow: View calendar → Add event → See events 13283- Add button positioned between calendar and event list 13284- Acts as visual separator 13285- More logical action placement 13286 13287## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR 13288- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color 13289- **Changed:** Events now display with single 3px color bar (event's assigned color only) 13290- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly 13291- **Simplified:** Cleaner visual with one color bar instead of two 13292- **Improved:** More space for event content without extra bar 13293 13294### Visual Changes: 13295 13296**Before (v3.10.7)** - Dual color bars: 13297``` 13298├─ [Orange][Green] Event Title 13299├─ [Blue][Purple] Event Title 13300``` 13301 13302**After (v3.10.8)** - Single color bar: 13303``` 13304├─ [Green] Event Title ← Only event color! 13305├─ [Purple] Event Title ← Only event color! 13306``` 13307 13308### Add Bar Changes: 13309- Added `margin:0` to eliminate gaps 13310- Now flush against header (no space above) 13311- Now flush against week grid (no space below) 13312- Perfect seamless connection 13313 13314### Technical Changes: 13315**renderSidebarEvent()**: 13316- Removed section color bar (4px) 13317- Kept only event color bar (3px) 13318 13319**showDayEvents() JavaScript**: 13320- Removed section color bar (4px blue) 13321- Kept only event color bar (3px) 13322 13323**Add Event bar**: 13324- Added `margin:0` inline style 13325- Removed all top/bottom margins 13326 13327## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR 13328- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day) 13329- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%` 13330- **Changed:** Add Event bar color from orange to dark green (#006400) 13331- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off) 13332- **Changed:** Add Event bar text now bright green (#00ff00) with green glow 13333- **Changed:** Add Event bar font size increased from 7px to 9px 13334- **Changed:** Add Event bar letter spacing increased to 0.5px 13335- **Improved:** Hover effect on Add Event bar now darker green (#004d00) 13336 13337### Color Bar Fix Details: 13338**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars 13339**Solution**: Applied same fix as clicked day events: 13340- Changed parent div: `align-items:start` → `align-items:stretch` 13341- Added `min-height:20px` to parent 13342- Changed bars: `height:100%` → `align-self:stretch` 13343- Bars now properly fill vertical space in ALL sections 13344 13345### Add Event Bar Changes: 13346**Before**: 13347- Background: Orange (#ff9800) 13348- Text: Black (#000) 13349- Height: 6px (text cut off) 13350- Font: 7px 13351 13352**After**: 13353- Background: Dark green (#006400) 13354- Text: Bright green (#00ff00) with green glow 13355- Height: 12px (text fully visible) 13356- Font: 9px 13357- Hover: Darker green (#004d00) 13358- Matrix-themed green aesthetic 13359 13360## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE 13361- **Fixed:** Event color bars now display correctly in clicked day events 13362- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events 13363- **Added:** Conflict badge (⚠) appears on right side of conflicting events 13364- **Updated:** Complete README.md rewrite with full Matrix theme documentation 13365- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering) 13366- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px` 13367- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning 13368 13369### Color Bar Fix: 13370**Problem**: Bars had `height:100%` but parent had no explicit height 13371**Solution**: 13372- Changed to `align-self:stretch` on bars 13373- Parent uses `align-items:stretch` 13374- Added `min-height:20px` to parent 13375- Bars now properly fill vertical space 13376 13377### Sorting Change: 13378**Before**: Timed events first → All-day events last 13379**After**: All-day events FIRST → Timed events chronologically 13380 13381**Example**: 13382``` 13383Monday, Feb 5 13384├─ All Day - Project Deadline ← All-day first 13385├─ 8:00 AM - Morning Standup ← Earliest time 13386├─ 10:30 AM - Coffee with Bob 13387└─ 2:00 PM - Team Meeting ← Latest time 13388``` 13389 13390### Conflict Badge: 13391- Orange warning triangle (⚠) on right side 13392- 10px font size 13393- Only appears if `event.conflict` is true 13394- Title attribute shows "Time conflict detected" 13395- Small and unobtrusive 13396 13397### README Update: 13398- Complete rewrite with Matrix theme focus 13399- Full usage instructions for all features 13400- Admin interface documentation 13401- Outlook sync setup guide 13402- System monitoring details 13403- Troubleshooting section 13404- Color scheme reference 13405- File structure documentation 13406- Performance tips 13407- Security notes 13408- Quick start examples 13409 13410## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR 13411- **Added:** Events now sorted by time when clicking week grid days 13412- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px) 13413- **Improved:** Events with times appear first, sorted chronologically 13414- **Improved:** All-day events appear after timed events 13415- **Changed:** Add Event bar font size reduced to 7px (from 10px) 13416- **Changed:** Add Event bar now has 0 padding and fixed 6px height 13417 13418### Sorting Logic: 13419- Events with times sorted by time (earliest first) 13420- All-day events (no time) appear at the end 13421- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare 13422- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event 13423 13424### Add Event Bar Changes: 13425- **Height**: 6px (was ~12px with padding) 13426- **Padding**: 0 (was 4px top/bottom) 13427- **Font Size**: 7px (was 10px) 13428- **Letter Spacing**: 0.3px (was 0.5px) 13429- **Line Height**: 6px to match height 13430- **Vertical Align**: Middle for text centering 13431 13432## Version 3.10.4 (2026-02-06) - ADD EVENT BAR 13433- **Added:** Thin orange "Add Event" bar between header and week grid 13434- **Added:** Quick access to event creation from sidebar widget 13435- **Styled:** Sleek design with hover effects and glow 13436- **Interactive:** Clicks navigate to Manage Events tab in admin 13437- **Improved:** User workflow for adding events from sidebar 13438 13439### Visual Design: 13440- Orange background (#ff9800) matching Today section color 13441- 4px top/bottom padding for thin, sleek appearance 13442- Black text with white text-shadow for visibility 13443- Hover effect: Darkens to #ff7700 with enhanced glow 13444- Orange glow effect (box-shadow) matching Matrix theme 13445- Centered "+ ADD EVENT" text (10px, bold, letter-spacing) 13446 13447### Technical Changes: 13448- Added between header close and renderWeekGrid() call 13449- Inline onclick handler navigates to admin manage tab 13450- Inline onmouseover/onmouseout for hover effects 13451- Smooth 0.2s transition on all style changes 13452 13453## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION 13454- **Changed:** Update Plugin tab is now the default tab when opening admin 13455- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab 13456- **Improved:** Clear Cache button now larger and more prominent with helpful description 13457- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events 13458- **Removed:** Debug console.log statements from day event display 13459- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab 13460 13461### UI Changes: 13462- Update Plugin tab opens by default (was Config/Outlook Sync tab) 13463- Clear Cache button prominently displayed at top of Update Plugin tab 13464- Orange ️ button (10px 20px padding) with confirmation dialog 13465- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin" 13466- Success/error messages display on Update Plugin tab after cache clear 13467- Tab navigation reordered to put Update first 13468 13469### Technical Changes: 13470- Default tab changed from 'config' to 'update' in html() method 13471- Tab navigation HTML reordered to show Update Plugin tab first 13472- clearCache() method now redirects with 'update' tab parameter 13473- Removed Clear Cache button from renderConfigTab() 13474- Added Clear Cache button to renderUpdateTab() with message display 13475 13476## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX 13477- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days 13478- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML 13479- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields 13480- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events 13481 13482### Technical Changes: 13483- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render() 13484- Events added to weekEvents now include pre-rendered HTML versions 13485- title_html and description_html fields populated before json_encode() 13486- JavaScript now receives properly formatted HTML content 13487 13488## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON 13489- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123) 13490- **Fixed:** HTML event handlers now call correctly sanitized function names 13491- **Fixed:** Weather temperature now updates correctly in sidebar widget 13492- **Added:** Weather update function to sidebar widget JavaScript 13493- **Added:** "Clear Cache" button in admin panel for easy cache refresh 13494- **Added:** Default weather location set to Irvine, CA when geolocation unavailable 13495- **Improved:** All tooltip functions now work correctly on system status bars 13496 13497### Technical Changes: 13498- Changed tooltip function names to use $jsCalId instead of $calId 13499- Changed HTML onmouseover/onmouseout to use $jsCalId 13500- Added updateWeather() function to sidebar widget 13501- Added getWeatherIcon() function to sidebar widget 13502- Added clearCache() method in admin.php 13503- Added recursiveDelete() helper method in admin.php 13504- Admin UI now has ️ Clear Cache button alongside Export/Import 13505 13506## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES 13507- **Fixed:** JavaScript syntax error "Missing initializer in const declaration" 13508- **Fixed:** Event links and formatting not displaying in clicked day events 13509- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores 13510- **Changed:** Event titles now use `title_html` field to preserve HTML formatting 13511- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting 13512- **Improved:** All JavaScript variable names now use valid syntax 13513- **Improved:** Links, bold, italic, and other HTML formatting preserved in events 13514 13515### Technical Changes: 13516- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);` 13517- JavaScript variables now use underscores instead of dashes 13518- Event HTML rendering preserves DokuWiki formatting 13519- Fixed "showTooltip_sidebar is not defined" errors 13520- Fixed "showDayEvents_cal is not defined" errors 13521 13522## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX 13523- **Fixed:** Critical JavaScript loading order issue causing ReferenceError 13524- **Fixed:** Functions now defined BEFORE HTML that uses them 13525- **Changed:** Consolidated all JavaScript into single comprehensive script block 13526- **Removed:** ~290 lines of duplicate JavaScript code 13527- **Added:** Shared state management with `sharedState_[calId]` object 13528- **Improved:** System tooltip functions now work correctly 13529- **Improved:** Week grid click events now work correctly 13530 13531### Technical Changes: 13532- Moved all JavaScript to beginning of widget (before HTML) 13533- Removed duplicate script blocks 13534- Unified tooltip and stats functions 13535- Shared latestStats and cpuHistory state 13536- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined" 13537 13538## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS 13539- **Added:** Dual color bars on events (section color + event color) 13540- **Added:** Click week grid days to view events (replaced hover tooltips) 13541- **Added:** Expandable section below week grid for selected day events 13542- **Added:** Blue theme for selected day section 13543- **Changed:** Week grid days now clickable instead of tooltips 13544- **Changed:** Section bar: 4px wide (left) 13545- **Changed:** Event bar: 3px wide (right) 13546- **Increased:** Gap between color bars from 3px to 6px 13547- **Improved:** Click is more reliable and mobile-friendly than hover tooltips 13548 13549### Visual Changes: 13550- Each event shows TWO color bars side-by-side 13551- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue) 13552- Right bar (3px): Individual event's assigned color 13553- Click any day in week grid to expand event list 13554- X button to close selected day events 13555 13556## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY 13557- **Increased:** Event color bar width from 2px to 3px 13558- **Increased:** Gap between section and event bars from 3px to 6px 13559- **Improved:** Event color bars now more visible alongside section bars 13560- **Note:** Dual color bar system already in place from v3.9.6 13561 13562## Version 3.9.6 (2026-02-05) - UI REFINEMENTS 13563- **Changed:** Date in Important Events moved below event name (was above) 13564- **Changed:** Section headers now 9px font size (was 10px) 13565- **Changed:** Section headers now normal case (was ALL CAPS) 13566- **Changed:** Letter spacing reduced from 0.8px to 0.3px 13567- **Improved:** More natural reading flow with date below event name 13568- **Improved:** Cleaner, more subtle section headers 13569 13570### Header Changes: 13571- "TODAY" → "Today" 13572- "TOMORROW" → "Tomorrow" 13573- "IMPORTANT EVENTS" → "Important Events" 13574 13575## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN 13576- **Redesigned:** Complete overhaul of `sidebar` parameter 13577- **Added:** Compact week-at-a-glance itinerary view (200px wide) 13578- **Added:** Live clock widget at top of sidebar 13579- **Added:** 7-cell week grid showing event bars 13580- **Added:** Today section with orange header and left border 13581- **Added:** Tomorrow section with green header and left border 13582- **Added:** Important Events section with purple header and left border 13583- **Added:** Admin setting to configure important namespaces 13584- **Added:** Time conflict badges in sidebar events 13585- **Added:** Task checkboxes in sidebar events 13586- **Changed:** Sidebar now optimized for narrow spaces (200px) 13587- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets 13588 13589### New Features: 13590- Clock updates every second showing current time 13591- Week grid shows Mon-Sun with colored event bars 13592- Today/Tomorrow sections show full event details 13593- Important events highlighted in purple (configurable namespaces) 13594- All badges (conflict, time, etc.) shown in compact format 13595- Automatic time conflict detection 13596 13597## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP 13598- **Removed:** 16 unused/debug/backup files 13599- **Removed:** 69 console.log() debug statements 13600- **Removed:** 3 orphaned object literals from console.log removal 13601- **Removed:** Temporary comments and markers 13602- **Fixed:** JavaScript syntax errors from cleanup 13603- **Improved:** Code quality and maintainability 13604- **Improved:** Reduced plugin size by removing unnecessary files 13605- **Status:** Production-ready, fully cleaned codebase 13606 13607### Files Removed: 13608- style.css.backup, script.js.backup 13609- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php 13610- debug_events.php, debug_html.php, cleanup_events.php 13611- fix_corrupted_json.php, fix_wildcard_namespaces.php 13612- find_outlook_duplicates.php, update_namespace.php 13613- validate_calendar_json.php, admin.js 13614- test_date_field.html 13615 13616## Version 3.7.5 (2026-02-05) 13617- **Fixed:** PHP syntax error (duplicate foreach loop removed) 13618- **Fixed:** Time variable handling in grace period logic 13619 13620## Version 3.7.4 (2026-02-05) 13621- **Added:** 15-minute grace period for timed events 13622- **Changed:** Events with times now stay visible for 15 minutes after their start time 13623- **Changed:** Prevents events from immediately disappearing when they start 13624- **Improved:** Better user experience for ongoing events 13625- **Fixed:** Events from earlier today now properly handled with grace period 13626 13627## Version 3.7.3 (2026-02-05) 13628- **Changed:** Complete redesign of cleanup section for compact, sleek layout 13629- **Changed:** Radio buttons now in single row at top 13630- **Changed:** All options visible with grayed-out inactive states (opacity 0.4) 13631- **Changed:** Inline controls - no more grid layout or wrapper boxes 13632- **Changed:** Namespace filter now compact single-line input 13633- **Changed:** Smaller buttons and tighter spacing throughout 13634- **Improved:** More professional, space-efficient design 13635 13636## Version 3.7.2 (2026-02-04) 13637- **Fixed:** Strange boxes under cleanup options - now properly hidden 13638- **Changed:** Unified color scheme across all admin sections 13639- **Changed:** Green (#00cc07) - Primary actions and main theme 13640- **Changed:** Orange (#ff9800) - Warnings and cleanup features 13641- **Changed:** Purple (#7b1fa2) - Secondary actions and accents 13642- **Improved:** Consistent visual design throughout admin interface 13643 13644## Version 3.7.1 (2026-02-04) 13645- **Fixed:** Cleanup section background changed from orange to white 13646- **Fixed:** Event cleanup now properly scans all calendar directories 13647- **Added:** Debug info display when preview finds no events 13648- **Improved:** Better directory scanning logic matching other features 13649 13650## Version 3.7.0 (2026-02-04) 13651- **Added:** Event cleanup feature in Events Manager 13652- **Added:** Delete old events by age (months/years old) 13653- **Added:** Delete events by status (completed tasks, past events) 13654- **Added:** Delete events by date range 13655- **Added:** Namespace filter for targeted cleanup 13656- **Added:** Preview function to see what will be deleted 13657- **Added:** Automatic backup creation before cleanup 13658- **Changed:** Reduced changelog viewer height to 100px (was 400px) 13659 13660## Version 3.6.3 (2026-02-04) 13661- **Fixed:** Conflict tooltips now work properly after navigating between months 13662- **Added:** Changelog display in Update Plugin tab 13663- **Added:** CHANGELOG.md file with version history 13664- **Improved:** Changelog shows last 10 versions with color-coded change types 13665- **Fixed:** Removed debug console.log statements 13666 13667## Version 3.6.2 (2026-02-04) 13668- **Fixed:** Month title now updates correctly when navigating between months 13669- **Changed:** All eventpanel header elements reduced by 10% for more compact design 13670- **Changed:** Reduced header height from 78px to 70px 13671 13672## Version 3.6.1 (2026-02-04) 13673- **Changed:** Complete redesign of eventpanel header with practical two-row layout 13674- **Fixed:** Improved layout for narrow widths (~500px) 13675- **Changed:** Simplified color scheme (removed purple gradient) 13676 13677## Version 3.6.0 (2026-02-04) 13678- **Changed:** Redesigned eventpanel header with gradient background 13679- **Changed:** Consolidated multiple header rows into compact single-row design 13680 13681## Version 3.5.1 (2026-02-04) 13682- **Changed:** Moved event search bar into header row next to + Add button 13683- **Improved:** More compact UI with search integrated into header 13684 13685## Version 3.5.0 (2026-02-04) 13686- **Added:** Event search functionality in sidebar and eventpanel 13687- **Added:** Real-time filtering as you type 13688- **Added:** Clear button (✕) appears when searching 13689- **Added:** "No results" message when search returns nothing 13690 13691## Version 3.4.7 (2026-02-04) 13692- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding) 13693- **Fixed:** Removed debug logging from console 13694- **Changed:** Updated export version number to match plugin version 13695 13696## Version 3.4.6 (2026-02-04) 13697- **Added:** Debug logging to diagnose conflict detection issues 13698- **Development:** Extensive console logging for troubleshooting 13699 13700## Version 3.4.5 (2026-02-04) 13701- **Added:** Debug logging to showDayPopup and conflict detection 13702- **Development:** Added logging to trace conflict detection flow 13703 13704## Version 3.4.4 (2026-02-04) 13705- **Fixed:** Conflict detection now persists across page refreshes (PHP-based) 13706- **Fixed:** Conflict tooltips now appear on hover 13707- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation) 13708- **Added:** Conflict badges in both future and past events sections 13709 13710## Version 3.4.3 (2026-02-04) 13711- **Added:** Custom styled conflict tooltips with hover functionality 13712- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2) 13713- **Improved:** Beautiful tooltip design with orange header and clean formatting 13714 13715## Version 3.4.2 (2026-02-04) 13716- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3) 13717 13718## Version 3.4.1 (2026-02-04) 13719- **Fixed:** End time field now properly saves to database 13720- **Fixed:** End time dropdown now filters to show only valid times after start time 13721- **Added:** Smart dropdown behavior - expands on focus, filters invalid options 13722- **Improved:** End time auto-suggests +1 hour when start time selected 13723 13724## Version 3.4.0 (2026-02-04) 13725- **Added:** End time support for events (start and end times) 13726- **Added:** Automatic time conflict detection 13727- **Added:** Conflict warning badges (⚠️) on events with overlapping times 13728- **Added:** Conflict tooltips showing which events conflict 13729- **Added:** Visual conflict indicators with pulse animation 13730- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM") 13731 13732## Version 3.3.77 (2026-02-04) 13733- **Fixed:** Namespace badge onclick handlers restored after clearing filter 13734- **Fixed:** Namespace filtering works infinitely (filter → clear → filter) 13735 13736## Version 3.3.76 (2026-02-04) 13737- **Fixed:** Namespace badges now clickable after clearing namespace filter 13738 13739## Version 3.3.75 (2026-02-04) 13740- **Fixed:** Form resubmission warnings eliminated 13741- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303 13742- **Changed:** All admin redirects now use absolute URLs 13743 13744## Version 3.3.74 (2026-02-04) 13745- **Fixed:** Clearing namespace filter now restores original namespace instead of default 13746- **Added:** data-original-namespace attribute to preserve initial namespace setting 13747- **Improved:** Console logging for namespace filter debugging 13748 13749## Version 3.3.73 (2026-02-03) 13750- **Added:** Dynamic namespace filtering banner with clear button 13751- **Fixed:** JavaScript function accessibility issues 13752- **Fixed:** Namespace badge click handlers in event lists 13753- **Improved:** Persistent namespace filtering across views 13754 13755## Earlier Versions 13756See previous transcripts for complete history through v3.3.73, including: 13757- Recurring events with Outlook sync 13758- Multi-namespace support 13759- Event categories and mapping 13760- Backup/restore functionality 13761- System statistics bar 13762- Namespace selector with fuzzy search 13763- Events Manager with import/export 13764- And much more... 13765