1# Calendar Plugin Changelog 2 3## Version 6.11.4 (2026-02-13) - JAVASCRIPT LOCALIZATION 4 5### JavaScript Localization (calendar-main.js) 6- Added `getCalendarLang()` helper to read embedded language strings 7- Added `getMonthNames()` and `getMonthNamesShort()` helpers for localized arrays 8- Localized all month names (full and abbreviated) 9- Localized dialog titles: "Add Event" / "Edit Event" 10- Localized "Delete this event?" confirmation 11- Localized "Events" header 12- Localized "Past Events (X)" toggle 13- Localized "No events this month" / "No events on this day" messages 14- Localized "+ Add Event" buttons 15- Localized "Important" tooltip 16- Localized "PAST DUE" and "TODAY" badges 17 18### Language Strings Integration 19- Added `getJsLangStrings()` method to syntax.php 20- Embedded JSON language data in all calendar render functions: 21 - Main calendar (renderCompactCalendar) 22 - Event panel (renderEventPanelOnly) 23 - Sidebar widget (renderSidebarWidget) 24 25### New Language Strings 26- Month names (full): January-December 27- Month names (short): Jan-Dec 28- Badge labels: PAST DUE, TODAY 29- Additional: no_events_week, no_events_month, add_event_short 30 31--- 32 33## Version 6.11.3 (2026-02-13) - SIDEBAR WIDGET LOCALIZATION 34 35### Fixed 36- **Fixed newline issue in confirmation dialogs** - Changed all `\n` in single-quoted PHP strings to double-quoted strings so JavaScript receives proper newlines 37- **Localized "Runs every X minutes"** - Cron interval descriptions now use language strings 38 39### Sidebar Widget Localization (syntax.php) 40- Today/Tomorrow/Important section headers 41- Event dialog: all labels, placeholders, options 42- Day names (short and full) 43- Ordinal positions (First, Second, Third...) 44- Color names (Blue, Green, Red...) 45- Recurring event options (Day(s), Week(s), Month(s)...) 46- Buttons (Save, Cancel, Add) 47- Search placeholder and tooltips 48 49### New Language Strings Added 50- ~70 new sidebar/frontend strings per language file 51- Full German translations for all frontend UI 52 53--- 54 55## Version 6.11.2 (2026-02-13) - ADMIN LOCALIZATION COMPLETE 56 57### Complete Admin Backend Localization 58- **Total getLang() calls increased from ~287 to 508** 59- All AJAX JSON response messages now localized 60- All redirect messages now localized 61- Fixed: Cache cleared/not found messages 62- Fixed: Recurring event deleted/updated messages 63- Fixed: Event management messages (moved, not found, file errors) 64- Fixed: Namespace management (create, delete, rename, validation errors) 65- Fixed: Sync process messages (script not found, log file errors, completion/failure) 66- Fixed: Config import/export messages (encryption, validation, success/error) 67- Fixed: Theme saved message 68- Fixed: Backup/restore messages (creation, deletion, rename, restore errors) 69- Fixed: intervalToPattern function returns localized pattern names 70 71### Language Strings Added 72- English: ~100 new strings 73- German: ~100 new translated strings 74 75--- 76 77## Version 6.11.1 (2026-02-13) - CONFIG IMPORT FIX 78 79### Fixed Config Import 80- **Bug Fix:** Import config now accepts both `return [` (short syntax) and `return array(` (long syntax) 81- **Bug Fix:** Added trim to handle whitespace in encrypted config data 82- **Improved:** Better error messages when decryption fails (indicates different DokuWiki installation) 83- **Improved:** Additional validation with trim on decrypted content 84 85--- 86 87## Version 6.11.0 (2026-02-13) - COMPLETE GERMAN LOCALIZATION 88 89### Complete Localization of All Admin Tabs 90 91**Edit Recurring Dialog (editRecurringSeries function):** 92- Dialog header: "Edit Recurring Event" → "Wiederkehrenden Termin bearbeiten" 93- All field labels (Title, Start Time, End Time, Namespace) 94- "Changes apply to ALL occurrences of:" → "Änderungen gelten für ALLE Vorkommen von:" 95- Recurrence pattern section (Repeat every, On these days, Repeat on) 96- Day of month / Weekday pattern options 97- Repeat Until with hint text 98- Cancel / Save Changes buttons 99- Day names (short and full) from language files 100- Ordinal labels (First, Second, Third, etc.) 101- Recurrence type options (Day(s), Week(s), Month(s), Year(s)) 102 103**Update Plugin Tab:** 104- "Update Plugin" → "Plugin aktualisieren" 105- "Current Version" → "Aktuelle Version" 106- All labels (Version, Author, Description, Location) 107- Permissions section with status messages 108- "Upload New Version" → "Neue Version hochladen" 109- "Create backup before updating" → "Backup vor Aktualisierung erstellen" 110- "Upload & Install" → "Hochladen & Installieren" 111- "Clear Cache" → "Cache leeren" 112- All Important Notes items 113- "Version History" → "Versionsgeschichte" 114- "Current Release" button → "Aktuelle Version" 115- "RUNNING" label → "AKTIV" 116- "Backups" → "Backups" 117- All backup table headers and action buttons (Download, Restore, Rename) 118 119**Outlook Sync Tab:** 120- "Outlook Sync Configuration" → "Outlook-Sync-Konfiguration" 121- "Export Config" / "Import Config" buttons 122- "Microsoft Azure App Credentials" → "Microsoft Azure App-Anmeldedaten" 123- All field labels (Tenant ID, Client ID, Client Secret, etc.) 124- "Outlook Settings" → "Outlook-Einstellungen" 125- "Sync Options" → "Sync-Optionen" 126- Checkbox labels for sync options 127- "Namespace → Category" mapping section 128- "Event Color → Category" mapping section 129- "Save Configuration" → "Konfiguration speichern" 130 131**Themes Tab:** 132- "Sidebar Widget Settings" → "Seitenleisten-Widget-Einstellungen" 133- "Week Start Day" section with Monday/Sunday options 134- "Itinerary Section" with Expanded/Collapsed options 135- "Visual Theme" → "Visuelles Design" 136- All theme names and descriptions 137- "Save Settings" → "Einstellungen speichern" 138 139### Added 120+ New Language Strings 140Comprehensive vocabulary for all admin interface elements in both English and German. 141 142### Technical Implementation 143- Extended $jsAdminLang object with additional Edit Recurring Dialog strings 144- Updated editRecurringSeries JavaScript function to use adminLang.* variables 145- All PHP echo statements now use $this->getLang() calls 146- Theme descriptions kept consistent with visual preview styling 147 148--- 149 150## Version 6.10.6 (2026-02-13) - MANAGE RECURRING DIALOG LOCALIZATION 151 152### Localized Manage Recurring Series Dialog 153Complete translation of the "Manage" button dialog for recurring events: 154 155**Section Headers:** 156- "Manage Recurring Series" → "Wiederkehrende Serie verwalten" 157- "Extend Series" → "Serie erweitern" 158- "Trim Past Events" → "Vergangene Termine kürzen" 159- "Change Pattern" → "Muster ändern" 160- "Change Start Date" → "Startdatum ändern" 161- "Pause Series" / "Resume Series" → "Serie pausieren" / "Serie fortsetzen" 162 163**Labels & Buttons:** 164- All field labels (Add occurrences, Days apart, Remove before, New interval, etc.) 165- Action buttons (Extend, Trim, Change, Shift, Pause, Resume, Close) 166- Interval dropdown options (Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly) 167- Help text and notes 168 169**Confirmation Dialogs:** 170- Trim confirmation with date 171- Respace confirmation 172- Shift confirmation 173 174### Added 60+ Language Strings for Dialogs 175Complete vocabulary for recurring event management in both English and German. 176 177### Note on Browser Validation Messages 178"Please fill out this field" is a browser-native message controlled by the browser's language setting, not our plugin. 179 180## Version 6.10.5 (2026-02-13) - DIALOG LOCALIZATION 181 182### Localized All JavaScript Dialogs 183 184**New Namespace Dialog:** 185- Prompt text with examples now in German 186- Invalid namespace error message 187 188**Rename Namespace Dialog:** 189- Prompt text with current name 190 191**Delete Confirmations:** 192- Delete selected events confirmation 193- Delete namespace confirmation 194- Delete recurring series confirmation 195 196**Trim Recurring Events:** 197- "Counting..." / "Zähle..." 198- "Trimming..." / "Kürze..." 199- "No past recurring events found" message 200- "Found X past recurring events" confirmation 201- Button text resets 202 203### Added 15+ New Dialog Strings 204Both English and German translations for all interactive prompts and confirmations. 205 206## Version 6.10.4 (2026-02-13) - COMPLETE MANAGE TAB LOCALIZATION 207 208### Fixed Remaining English Strings 209 210**Namespace Explorer Control Bar:** 211- "➡️ Move" → "➡️ Verschieben" 212- "➕ New Namespace" → "➕ Neuer Namensraum" 213- " Cleanup" → " Bereinigen" 214- "0 selected" → "0 ausgewählt" 215- "%d selected" → "%d ausgewählt" 216 217**Recurring Events Button Tooltips:** 218- "Edit title, time, namespace, pattern" → "Titel, Zeit, Namensraum, Muster bearbeiten" 219- "Extend, trim, pause, change dates" → "Erweitern, kürzen, pausieren, Daten ändern" 220- "Delete all occurrences" → "Alle Vorkommen löschen" 221 222**JavaScript Confirmation Messages:** 223- "No events selected" → "Keine Termine ausgewählt" 224- Delete confirmation with count 225- Delete namespace confirmation 226- "Scanning..." → "Scanne..." 227- "Cleaning..." → "Bereinige..." 228- "No empty namespaces found" message 229- "Found X item(s) to clean up" → "X Element(e) zum Bereinigen gefunden" 230- "Proceed with cleanup?" → "Mit Bereinigung fortfahren?" 231 232### Technical 233- Added adminLang JavaScript object with all translatable strings 234- All dynamic JavaScript messages now use language system 235 236## Version 6.10.3 (2026-02-13) - RECURRING EVENTS & DROP TARGET LOCALIZATION 237 238### Additional Localization for Manage Events Tab 239 240**Recurring Events Table:** 241- Search placeholder: "Wiederkehrende Termine suchen..." 242- Table headers: Titel, Namensraum, Muster, Zeitraum, Anzahl, Quelle, Aktionen 243- Source labels: Markiert / Erkannt (was Flagged / Detected) 244- Action buttons: Bearb. / Verwalten / Lö. (was Edit / Manage / Del) 245- Pattern badges: Täglich, Wöchentlich, Monatlich, Jährlich, Benutzerdefiniert 246- Footer: "Gesamt: X Serien" (was "Total: X series") 247- No results message 248 249**Namespace Explorer Drop Zones:** 250- Header: " Zielbereich" (was "Drop Target") 251- Drop hint: "Hier ablegen" (was "Drop here") 252- Default namespace label consistent 253 254### Added 25+ New Language Strings 255- Recurring table columns and labels 256- Pattern translations 257- Action button labels 258- Drop zone labels 259 260## Version 6.10.2 (2026-02-13) - MANAGE EVENTS TAB LOCALIZATION 261 262### Localized: Manage Events Tab (Complete) 263All text in the Manage Events admin tab now uses the language system: 264 265**Events Manager Section:** 266- Page title, section header, description 267- Statistics labels (Total Events, Namespaces, JSON Files, Recurring) 268- "Last scanned" timestamp label 269- Button labels (Re-scan Events, Export All Events, Import Events) 270- "View Breakdown by Namespace" expandable section 271- Table headers (Namespace, Events, Files) 272 273**Important Namespaces Section:** 274- Section header and description 275- Visual Effects descriptions (Calendar Grid, Event Sidebar, Sidebar Widget, Day Popup) 276- Save button and hint text 277 278**Cleanup Old Events Section:** 279- Section header and description 280- Radio button labels (By Age, By Status, By Date Range) 281- Age options (Delete events older than, months, years) 282- Status options (Completed tasks, Past events) 283- Date range labels (From, To) 284- Namespace filter label and placeholder 285- Preview and Delete button labels 286- JavaScript confirmation messages 287- Loading/error states 288 289**Recurring Events Section:** 290- Section header 291- Button labels (Trim All Past, Rescan) 292 293**Namespace Explorer Section:** 294- Section header and description 295- Search placeholder 296- Control bar buttons (All, None, Delete, Move to) 297- Datalist placeholder 298 299### Added 60+ New Language Strings 300Both English and German language files expanded with comprehensive admin terminology. 301 302## Version 6.10.1 (2026-02-13) - LANGUAGE SYSTEM FIX 303 304### Bug Fix: Language Files Not Working 305- Fixed `getMenuText()` to use `$this->getLang('menu')` instead of hardcoded string 306- Admin menu now correctly shows "Kalenderverwaltung" in German 307- Admin tabs now use language system: 308 - "Manage Events" → "Termine verwalten" 309 - "Update Plugin" → "Plugin aktualisieren" 310 - "Outlook Sync" → "Outlook-Sync" 311 - "Themes" → "Designs" 312 313### Added More Language Strings 314- Admin tab labels 315- Admin section headers (Event Browser, Important Namespaces, etc.) 316- Sync settings labels 317- Common button labels (Run Now, Download, Upload, Delete, etc.) 318 319## Version 6.10.0 (2026-02-13) - GERMAN LANGUAGE SUPPORT 320 321### New Feature: German Language Translation 322- Added complete German (de) language file 323- Expanded English language file with comprehensive translatable strings 324- Both files include 100+ translation strings covering: 325 - General terms (calendar, events, dates) 326 - Event fields (title, description, time, etc.) 327 - Actions (add, edit, delete, save, cancel) 328 - Task-related terms 329 - Recurring event options 330 - Days of week and months 331 - User messages and confirmations 332 - Search functionality 333 - Sync status messages 334 - Admin section labels 335 - Sidebar widget labels 336 - Time conflict warnings 337 338### Note 339The language strings are now available for future implementation throughout the plugin UI. Currently the admin menu uses the language system; other strings can be integrated as needed. 340 341## Version 6.9.9 (2026-02-13) - CRITICAL SEARCH FIX 342 343### Bug Fix: Month Search Not Working 344- **Root cause:** Function name collision - there were two `fuzzyMatch` functions 345 - `window.fuzzyMatch` (for namespace search autocomplete) returns a score number or `null` 346 - Local `fuzzyMatch` (for event search) returns `true`/`false` 347- When filtering events, the wrong function was being called, returning `null` for all events 348- **Fix:** Renamed event search functions to `eventSearchNormalize` and `eventSearchMatch` 349- Month search now works correctly on first load and after navigation 350 351### Also in this version 352- Fixed jumpToDate to properly hide search clear button after navigation 353- Removed debug logging from production code 354 355## Version 6.9.8 (2026-02-12) - SEARCH & UI FIXES 356 357### Bug Fixes 358 359**All-Dates Search Navigation Fixed** 360- Clicking a search result now properly navigates to that event's month 361- Opens the day popup showing the event details 362- Was calling non-existent `loadMonth()` - now uses correct `navCalendar()` 363- Clears search results and restores normal event list view 364 365**"No Events" Message Fixed** 366- No longer shows "No events match your search" when in all-dates mode 367- All-dates mode has its own results display; the month-mode message was incorrectly appearing 368 369**Add Button Layout Fixed** 370- Search bar no longer pushes the "+ Add" button off the right edge 371- Search container has constrained max-width (160px) and proper flex settings 372- Header has overflow:hidden to prevent layout issues 373 374**Important Event Stars Fixed** 375- Stars now appear on initial page load (PHP rendering added) 376- Stars positioned outside the bar using CSS ::before pseudo-element 377- Added overflow:visible to event-indicators and event-bar containers 378- Bar remains full width; star sits in the left margin area 379 380### Technical 381- Star uses `event-bar-has-star` class for first-day-only display 382- jumpToDate() properly cleans up search state before navigation 383 384## Version 6.9.7 (2026-02-12) - IMPORTANT NAMESPACE IMPROVEMENTS 385 386### Bug Fix 387- **AJAX refresh now preserves important namespace highlighting** 388 - Important namespaces list now passed to JavaScript via data attribute 389 - Highlighting persists when navigating between months 390 - Works in both main calendar sidebar and standalone event panels 391 392### New Feature: Calendar Grid Star Icons 393- **Important events now show ⭐ on their color bars** in the calendar grid 394 - Small star appears on the first day of important events 395 - Tooltip prefixed with ⭐ for important events 396 - Visual distinction without cluttering the compact grid view 397 398### Admin Section Update 399- **Improved Important Namespaces description** in Admin → Calendar → Manage Events 400 - Now explains all visual effects: 401 - Calendar Grid: ⭐ star on event bars 402 - Event Sidebar: ⭐ star + highlighted background + accent border 403 - Sidebar Widget: Dedicated "Important Events" section 404 - Day Popup: Events shown with full details 405 - Better example placeholder text 406 407### Technical 408- Fixed PHP syntax error in fuzzy search (curly quotes replaced with escape sequences) 409- Important namespaces loaded once and stored in container dataset for JavaScript access 410 411## Version 6.9.6 (2026-02-12) - FUZZY SEARCH & SIDEBAR HIGHLIGHTING 412 413### Fuzzy Search 414- **Improved search matching:** Search is now more forgiving of punctuation differences 415 - "fathers day" matches "Father's Day" 416 - "new years" matches "New Year's Eve" 417 - Smart quotes, apostrophes, dashes, and common punctuation are ignored 418- **Multi-word search:** All words must be present but in any order 419 - "birthday john" matches "John's Birthday Party" 420- Works in both "this month" and "all dates" search modes 421 422### Important Namespace Highlighting (Calendar Sidebar) 423- Events from important namespaces now highlighted in the main calendar's event list sidebar 424- Same visual treatment as the itinerary sidebar widget: 425 - Subtle theme-colored background tint 426 - Right border accent bar 427 - ⭐ star icon before event title 428- Theme-specific colors: 429 - Matrix: green tint 430 - Purple: purple tint 431 - Pink: pink tint 432 - Professional: blue tint 433 - Wiki: light blue tint 434- Configure important namespaces in Admin → Calendar → Sync Settings 435 436## Version 6.9.5 (2026-02-12) - SEARCH MODE TOGGLE 437 438### New Feature: Search Scope Toggle 439- **Search mode button** (/) added next to search input in both calendar views 440- **Default mode** (): Search only the current month's events (fast, local filtering) 441- **All dates mode** (): Search across ALL calendar data via AJAX 442 - Click the button to toggle to (green highlight when active) 443 - Requires at least 2 characters to search 444 - Shows results with date, time, and namespace 445 - Click any result to jump to that date and open the day popup 446 - Limited to 50 results for performance 447- Search placeholder text updates to indicate current mode 448- Compact button design takes minimal space 449 450### UI Details 451- Button sits flush with search input (no gap) 452- Green highlight when "all dates" mode is active 453- Results show full date (e.g., "Mon, Feb 12, 2026") 454- Namespace badge shown for multi-namespace setups 455 456## Version 6.9.4 (2026-02-12) - POPUP IMPROVEMENTS & IMPORTANT HIGHLIGHTING 457 458### Features 459- **Draggable Day Popup:** Calendar day popup window is now draggable by its header 460 - Click and drag the header to move the popup 461 - Header shows move cursor on hover 462 - Clicking the close button (×) still closes normally 463 464- **Important Namespace Highlighting in Sidebar:** 465 - Events from "important" namespaces (defined in Admin → Sync Settings) now have subtle highlighting 466 - Theme-aware background tint (green for Matrix, purple for Purple, pink for Pink, blue for Professional/Wiki) 467 - Right border accent bar for visual distinction 468 - ⭐ star icon appears before event title 469 - Works in Today, Tomorrow, and Important Events sections 470 471### Bug Fix 472- **Fixed event display in day popup:** Long titles no longer cut off the edit/delete buttons 473 - Event title now wraps to multiple lines instead of truncating 474 - Actions buttons always visible 475 - Time, date range, and namespace badges wrap properly 476 - Improved flex layout for better responsiveness 477 478## Version 6.9.3 (2026-02-12) - ADMIN EDIT DIALOG CONSISTENCY 479 480### UI Improvement 481- **Edit Recurring Event dialog** in Admin section now matches the main event editor exactly: 482 - Same dark theme styling (#1e1e1e background, #2c3e50 header) 483 - Same header layout with close button (×) in top-right corner 484 - Same input styling (dark inputs with green accent borders) 485 - Same footer with Cancel/Save buttons layout 486 - Same recurrence options box styling 487 - Consistent spacing, fonts, and colors throughout 488 489## Version 6.9.2 (2026-02-12) - MOBILE DIALOG FIX 490 491### Bug Fix 492- **Fixed:** Description textarea now extends full width on mobile/phone view 493 - Reduced form padding from 12px to 8px on screens ≤480px 494 - Added explicit `width: 100%` and `box-sizing: border-box` to textarea 495 - Ensured all form inputs/selects use full available width on mobile 496 497## Version 6.9.1 (2026-02-11) - ADMIN RECURRING EVENTS INTEGRATION 498 499### Admin Panel Updates 500- **Enhanced Recurring Events Table:** 501 - Pattern column now shows color-coded badges (daily=blue, weekly=green, monthly=orange, yearly=pink) 502 - "First" column renamed to "Range" showing full date span (e.g., "Feb 1, 2026 → Dec 15, 2026") 503 - Patterns now read from stored metadata when available, with smart fallback to detection 504 505- **Edit Recurring Series Dialog:** 506 - Full recurrence pattern editing (not just simple intervals) 507 - "Repeat every [N] [period]" with dropdown for Daily/Weekly/Monthly/Yearly 508 - Weekly: Day-of-week checkboxes (Sun-Sat) with current days pre-selected 509 - Monthly: Radio choice between "Day of month" or "Weekday pattern" 510 - Ordinal weekday selector (First/Second/Third/Fourth/Fifth/Last + day dropdown) 511 - Pre-populates all fields from stored recurrence metadata 512 - Properly reschedules future events using new pattern 513 514- **Manage Series Dialog:** 515 - Updated summary to show date range 516 - Extend/trim/change pattern functions work with new patterns 517 518### Technical Updates 519- `findRecurringEvents()` captures all recurrence metadata from events 520- `formatRecurrencePattern()` generates human-readable pattern descriptions 521- `detectRecurrencePattern()` enhanced to detect more interval variations 522- `editRecurringSeries()` PHP handler processes new recurrence parameters 523- `generateRecurrenceDates()` creates dates matching complex patterns 524- Recurrence metadata preserved and updated across all event occurrences 525 526## Version 6.9.0 (2026-02-11) - ADVANCED RECURRING EVENTS 527 528### New Features 529- **Enhanced Recurring Event Options:** 530 - **Interval support:** Repeat every N days/weeks/months/years (e.g., every 3 months) 531 - **Weekly day selection:** Choose specific days of the week (e.g., Mon, Wed, Fri) 532 - **Monthly options:** 533 - Day of month: Repeat on specific day (e.g., 15th of each month) 534 - Ordinal weekday: Repeat on pattern (e.g., 2nd Wednesday, Last Friday) 535 - **Examples now possible:** 536 - Every 2 weeks on Monday and Thursday 537 - Every 3 months on the 15th 538 - Every other month on the 2nd Wednesday 539 - Every year on the same date 540 - Last Friday of every month 541 542### UI Changes 543- Redesigned recurring options section with bordered container 544- "Repeat every [N] [period]" input with interval number field 545- Day-of-week checkboxes for weekly recurrence 546- Radio buttons for monthly: "Day of month" vs "Weekday pattern" 547- Ordinal dropdown (First/Second/Third/Fourth/Fifth/Last) 548- Day dropdown (Sunday through Saturday) 549- Helper text for end date field 550 551### Technical Details 552- New parameters: recurrenceInterval, weekDays, monthlyType, monthDay, ordinalWeek, ordinalDay 553- Recurrence pattern stored in event data for reference 554- Maximum 365 occurrences (up from 100) to support daily events for a year 555- Smart date iteration for complex patterns 556 557## Version 6.8.1 (2026-02-11) - ITINERARY DEFAULT STATE SETTING 558 559### New Feature 560- **Added:** Option to set itinerary default state (expanded or collapsed) 561 - New setting in Admin → Calendar → Sidebar Widget Settings 562 - " Itinerary Section" with two options: 563 - **Expanded** (default) - Show itinerary sections by default 564 - **Collapsed** - Hide itinerary sections by default (click bar to expand) 565 - Setting persists across page loads 566 - Arrow indicator and content state reflect the saved preference on page load 567 568## Version 6.8.0 (2026-02-11) - COLLAPSIBLE ITINERARY 569 570### New Feature 571- **Added:** Collapsible Itinerary bar in sidebar week view 572 - New "ITINERARY" bar below the week calendar (styled like +ADD EVENT bar) 573 - Click to collapse/expand the Today, Tomorrow, and Important Events sections 574 - Arrow indicator shows expanded (▼) or collapsed (►) state 575 - Smooth animation when collapsing/expanding 576 - Clicking a day in the week grid shows that day's events ABOVE the Itinerary bar 577 - Selected day events remain visible whether itinerary is expanded or collapsed 578 - Shows "No upcoming events" message when there are no itinerary items 579 580### UI Layout (top to bottom) 5811. Header with clock/system stats 5822. +ADD EVENT bar 5833. Week grid (7 days) 5844. Selected day's events (appears when clicking a day) 5855. ITINERARY bar (click to collapse/expand) 5866. Today section (collapsible) 5877. Tomorrow section (collapsible) 5888. Important Events section (collapsible) 589 590## Version 6.7.9 (2026-02-11) - FIX EVENTS MANAGER STATISTICS 591 592### Bug Fixes 593- **Fixed:** Events Manager showing inflated count (1195 instead of ~605) 594 - The `scanDirectoryForStats()` function was counting ALL entries in JSON files 595 - Now properly filters to only count date keys (`YYYY-MM-DD` format) 596 - Now validates events have `id` and `title` before counting 597 - Click " Rescan" to update the statistics with correct count 598 599## Version 6.7.8 (2026-02-11) - FILTER INVALID EVENTS 600 601### Bug Fixes 602- **Fixed:** Event Manager showing "(untitled)" and "mapping" entries 603 - Root cause: Calendar JSON files contain metadata keys (like "mapping") that were being parsed as events 604 - Added date format validation (`YYYY-MM-DD`) to skip non-date keys 605 - Added validation to require `id` and `title` fields for events 606 - Applied fix to all event-reading functions: 607 - `getEventsByNamespace()` - main event listing 608 - `scanNamespaceRecursive()` - namespace scanning 609 - `searchEvents()` - event search 610 - `findEventsByTitle()` - title lookup 611 - `deleteRecurringSeries()` - recurring deletion 612 - `renameRecurringSeries()` - recurring rename 613 - Recurring events scanner 614 - Recurring cleanup function 615 616### Technical Details 617- Date keys must match pattern `/^\d{4}-\d{2}-\d{2}$/` 618- Events must have non-empty `id` and `title` fields 619- All other entries in JSON files are now skipped 620 621## Version 6.7.7 (2026-02-11) - FIX PHP PATH & CLEAR LOG 622 623### Bug Fixes 624- **Fixed:** "sh: 1: '/usr/bin/php': not found" error - removed escapeshellarg() which was adding quotes around the PHP path 625- **Fixed:** "Could not clear log file" - added better error messages showing exact issue 626- **Improved:** findPhpBinary() now uses is_executable() and `which php` for detection 627- **Improved:** clearLogFile() now shows specific error (file not found, not writable, etc.) 628 629## Version 6.7.6 (2026-02-11) - FIX SYNC CONTROLS & LOGGING 630 631### Bug Fixes 632- **Fixed:** Double log entries - sync script logs internally, removed redundant stdout capture 633- **Fixed:** Manual sync not appearing in log - removed `--verbose` flag since script logs directly 634- **Fixed:** Better error messages when sync fails 635 636### Improvements 637- **Improved:** Sync now runs without `--verbose` flag - script logs to file internally 638- **Improved:** Crontab warning if `>>` redirect is detected (causes duplicate entries) 639- **Improved:** Log viewer now shows full path to log file 640- **Improved:** Better pre-flight checks (directory creation, file permissions) 641- **Improved:** PHP binary path is now properly escaped 642 643### Crontab Update Required 644If your crontab has `>> sync.log 2>&1`, remove it to prevent duplicate log entries: 645 646**Before (causes duplicates):** 647``` 648*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php >> /var/www/html/dokuwiki/data/meta/calendar/sync.log 2>&1 649``` 650 651**After (correct):** 652``` 653*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php 654``` 655 656The script automatically logs to `data/meta/calendar/sync.log`. 657 658## Version 6.7.5 (2026-02-11) - FIX SYNC LOG OUTPUT 659 660### Bug Fixes 661- **Fixed:** Sync log not showing output when running sync from admin panel 662 - Added `--verbose` flag to sync command so output is captured 663 - Sync output is now captured and written to the log file 664 - Log directory is created if it doesn't exist 665 - Better error handling if log directory isn't writable 666 - Command being executed is logged for debugging 667 668### Changes 669- Sync now runs in verbose mode when triggered from admin panel 670- All sync output (stdout/stderr) is written to the log file 671- Pre-flight check ensures log directory exists and is writable 672 673## Version 6.7.4 (2026-02-11) - FIX MANUAL SYNC EXECUTION 674 675### Bug Fix 676- **Fixed:** "Could not open input file: sync_outlook.php" when running manual sync 677 - The `$pluginDir` variable was missing from `runSync()` function 678 - Added `$pluginDir = DOKU_PLUGIN . 'calendar'` before building the command 679 - Sync now properly changes to the plugin directory before executing 680 681## Version 6.7.3 (2026-02-11) - FIX ADDITIONAL COUNT TYPE ERRORS 682 683### Bug Fix 684- **Fixed:** Additional TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given" 685 - Fixed in `scanDirectoryForStats()` (line 5453) 686 - Fixed in namespace delete function (line 4137) 687 - Fixed in export function (line 5516) 688 - Fixed in import function (line 5636) 689 - All locations now check `is_array()` before calling `count()` 690 691## Version 6.7.2 (2026-02-11) - FIX EVENT MANAGER TYPE ERROR 692 693### Bug Fix 694- **Fixed:** TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given" 695 - Added array type checks when iterating over calendar event data 696 - Protects against corrupted JSON data where event lists may not be arrays 697 - Added safeguards in `getEventsByNamespace()` and `scanNamespaceRecursive()` 698 699## Version 6.7.1 (2026-02-11) - BULK DELETE FOR BACKUPS 700 701### Changed 702- **Improved:** Backup management now uses bulk selection and delete 703 - Added checkboxes next to each backup file 704 - Added "Select All" checkbox in the action bar 705 - Added "️ Delete Selected" button (appears when backups are selected) 706 - Removed individual delete buttons from each row 707 - Shows count of selected backups 708 - Backups are deleted sequentially with visual feedback 709 710### UI 711- Clean action bar at top of backup table with selection controls 712- Selected count updates in real-time 713- Rows fade out smoothly when deleted 714 715## Version 6.7.0 (2026-02-11) - IMPROVED RESTORE FUNCTION 716 717### Changed 718- **Improved:** Restore function now uses DokuWiki's Extension Manager API 719 - Uses `helper_plugin_extension_extension` for proper installation 720 - Handles permissions correctly through DokuWiki's standard plugin installation process 721 - Falls back to manual instructions if Extension Manager is not available 722 723### How It Works 724When you click " Restore" on a backup: 7251. The plugin loads DokuWiki's extension helper 7262. Calls `installFromLocal()` with the backup ZIP file 7273. DokuWiki's Extension Manager handles file extraction and installation 7284. This ensures proper permissions and follows DokuWiki standards 729 730### Fallback 731If the Extension Manager helper is not available, you'll be prompted to: 732- Download the backup ZIP 733- Go to Admin → Extension Manager → Install 734- Upload the ZIP file manually 735 736## Version 6.6.9 (2026-02-11) - REMOVE RESTORE FUNCTION 737 738### Removed 739- **Removed:** "Restore" button from backup management 740- **Removed:** `restoreBackup()` PHP method 741- **Removed:** `restoreBackup()` JavaScript function 742 743### Added 744- **Added:** Informational note in backup section explaining how to restore: 745 - Download the backup ZIP file 746 - Go to Admin → Extension Manager → Install 747 - Upload the ZIP file there 748 - DokuWiki's extension manager handles installation safely with proper permissions 749 750### Reason 751The restore function required write access to the plugin directory, which web servers typically don't have (and shouldn't have) for security reasons. Using DokuWiki's built-in Extension Manager is the safer and more reliable approach. 752 753## Version 6.6.8 (2026-02-11) - FIX THEME KEYS & FILE PERMISSIONS 754 755### Bug Fixes 756- **Fixed:** "Undefined array key" warnings for wiki theme (pastdue_color, pastdue_bg, tomorrow_bg, etc.) 757 - Added missing theme keys to `getWikiTemplateColors()` return array 758 759- **Fixed:** "Permission denied" errors for sync.log and sync_state.json 760 - Moved sync files from plugin directory to `data/meta/calendar/` (writable location) 761 - Updated sync_outlook.php, admin.php to use new paths 762 - sync_config.php remains in plugin directory (must be manually configured) 763 764- **Fixed:** `findEventNamespace` now returns the actual DIRECTORY where event file lives 765 - This ensures deletion works correctly when stored namespace differs from file location 766 767### Note on lang.php Permission Error 768If you see a permission error for lang/en/lang.php, this occurs when trying to restore/update the plugin via admin panel and the web server doesn't have write access to the plugin directory. This is normal security - update via command line or FTP instead. 769 770## Version 6.6.7 (2026-02-11) - FIX NAMESPACE CHANGE BUG (PART 2) 771 772### Bug Fix 773- **Fixed:** Events in the DEFAULT namespace (no namespace) could not be moved to other namespaces 774 - Root cause: The comparison `$oldNamespace !== ''` was always FALSE for default namespace events 775 - Changed to `$oldNamespace !== null` to properly distinguish between "event not found" (null) and "event in default namespace" ('') 776 - This allows moving events FROM the default namespace TO any other namespace 777 - Also fixed null coalescing for recurring events: `$oldNamespace ?? $namespace` instead of `$oldNamespace ?: $namespace` 778 779## Version 6.6.6 (2026-02-11) - FIX NAMESPACE CHANGE & DELETE BUGS 780 781### Bug Fixes 782- **Fixed:** Changing an event's namespace now properly moves the event instead of creating a duplicate 783 - Root cause: `findEventNamespace()` was searching in the NEW namespace instead of ALL namespaces 784 - Now uses wildcard search `'*'` to find the existing event regardless of its current namespace 785 786- **Fixed:** Deleting an event no longer causes the calendar to filter by the deleted event's namespace 787 - Root cause: After deletion, `reloadCalendarData()` was called with the deleted event's namespace 788 - Now retrieves the calendar's original namespace from `container.dataset.namespace` 789 - Also fixed in `saveEventCompact()` and `toggleTaskComplete()` for consistency 790 791## Version 6.6.5 (2026-02-11) - ADD AUTOCOMPLETE ATTRIBUTES 792 793### Improved 794- Added `autocomplete="new-password"` to client secret input field 795- Added `autocomplete="email"` to user email input field 796- Added `autocomplete="off"` to client ID input field 797- Follows browser best practices for form inputs 798 799## Version 6.6.4 (2026-02-11) - FIX GEOLOCATION VIOLATION 800 801### Bug Fix 802- **Fixed:** Browser violation "Only request geolocation information in response to a user gesture" 803- Weather widget now uses Sacramento as the default location on page load 804- Geolocation is only requested when user **clicks** on the weather icon 805- Click the weather icon to get your local weather (browser will prompt for permission) 806- Weather icon shows tooltip "Click for local weather" and has pointer cursor 807 808## Version 6.6.3 (2026-02-11) - FIX MUTATIONOBSERVER ERROR 809 810### Bug Fix 811- **Fixed:** `Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'` error 812- Root cause: MutationObserver tried to observe `document.body` before DOM was ready 813- Added `setupMutationObserver()` function that waits for DOMContentLoaded before attaching observer 814 815## Version 6.6.2 (2026-02-11) - FIX CONFLICT TOOLTIP JAVASCRIPT LOADING 816 817### Bug Fix 818- **Critical:** Fixed `showConflictTooltip is not defined` and `hideConflictTooltip is not defined` errors 819- Root cause: `addAssets()` in action.php was loading empty `script.js` instead of `calendar-main.js` 820- Changed `addAssets()` to load `calendar-main.js` directly 821- Updated `script.js` to dynamically load `calendar-main.js` as a fallback mechanism 822 823## Version 6.6.1 (2026-02-11) - SECURITY FIXES 824 825### Security 826- **Critical:** Removed `eval()` remote code execution vulnerability in config import 827- **Critical:** Added admin authentication requirement to `get_system_stats.php` endpoint 828- **High:** Added CSRF token verification to all write operations (save, delete, toggle) 829- **High:** Fixed path traversal vulnerabilities in namespace delete/rename functions 830- **High:** Added admin privilege verification to AJAX admin routes 831 832### Improved 833- **Input Validation:** Date format (YYYY-MM-DD), time format (HH:MM), color format (#RRGGBB) 834- **Input Validation:** Year range (1970-2100), month range (1-12), namespace format 835- **Input Validation:** Recurrence type whitelist, title/description length limits 836- **Debug Logging:** All debug logging now conditional on `CALENDAR_DEBUG` constant (off by default) 837- **JSON Handling:** Added `safeJsonRead()` helper with proper error handling 838- **Timezone:** Sync script now uses configured timezone instead of hardcoded value 839 840### Code Quality 841- Documented intentional switch fallthrough in `get_system_stats.php` 842- Standardized error response format 843 844## Version 6.6.0 (2026-02-11) - BACKUP & UI IMPROVEMENTS 845 846### Fixed 847- **Backup:** Fixed recursive directory backup to properly include all subdirectories (including `lang/`) 848- **Backup:** Now uses `SELF_FIRST` iterator to process directories before their contents 849- **Backup:** Empty directories are now explicitly added with `addEmptyDir()` to preserve structure 850 851### UI Change 852- **Namespace Explorer:** Cleanup status message now appears prominently at top of section 853- Previously status message was at bottom, easy to miss after cleanup operations 854 855## Version 6.5.5 (2026-02-11) - FIX AJAX ROUTING & MOVE CLEANUP BUTTON 856 857### Bug Fix 858- All admin AJAX actions (cleanup, rescan, extend, trim, pause, resume, change start/pattern) were returning "Unknown action" 859- Root cause: AJAX calls go through `action.php`'s switch statement, not `admin.php`'s `handle()` method 860- Added routing in `action.php`: new cases forward to `admin.php` via `routeToAdmin()` helper 861- Added public `handleAjaxAction()` method in `admin.php` as the entry point from `action.php` 862 863### UI Change 864- Moved " Cleanup" button from standalone section to inline next to "➕ New Namespace" in the control bar 865- Status messages still appear below the namespace explorer 866 867## Version 6.5.4 (2026-02-11) - FIX PHP PARSE ERROR IN CLEANUP JS 868 869### Bug Fix 870- Root cause: `style='color:...'` single quotes inside PHP `echo '...'` block terminated the PHP string prematurely 871- PHP saw `color:#e74c3c` as unexpected PHP code instead of part of the JS string 872- Fixed all 5 occurrences in cleanupEmptyNamespaces JS: escaped single quotes as `\'` 873- Added `adminColors` JS object (text, bg, border) injected from PHP `$colors` at render time 874- Cleanup detail text uses `adminColors.text` to respect DokuWiki template theme colors 875 876## Version 6.5.3 (2026-02-11) - FIX CLEANUP NAMESPACES PARSE ERROR 877 878### Bug Fix 879- Fixed PHP parse error on line 1089 caused by `$colors['text']` PHP variable inside JS string concatenation 880- The cleanup results detail list now uses hardcoded `#666` for text color instead of attempting PHP interpolation within JS runtime code 881 882## Version 6.5.2 (2026-02-11) - CLEANUP EMPTY NAMESPACES 883 884### New Feature 885- " Cleanup Empty Namespaces" button added at bottom of Namespace Explorer section 886- Dry-run scan first: shows exactly what will be removed with bullet-point details in confirm dialog 887- Removes empty calendar folders (0 JSON files or all-empty JSON files) from any namespace 888- Removes parent namespace directories if they become empty after calendar folder removal 889- Root calendar directory is never removed 890- AJAX-powered with inline status showing results after cleanup 891- Page auto-reloads after 2 seconds to refresh the namespace explorer view 892- Recursively scans all nested namespace directories via `findAllCalendarDirsRecursive()` 893 894## Version 6.5.1 (2026-02-11) - TRIM ALL PAST: SHOW COUNT BEFORE DELETE 895 896### Improved 897- "Trim All Past" button now does a dry-run count before showing the confirmation dialog 898- Confirmation shows exact count: "Found 47 past recurring events to remove" 899- If zero found, shows "No past recurring events found to remove" instead of confirm 900- PHP handler supports `dry_run` parameter that counts without deleting 901 902## Version 6.5.0 (2026-02-11) - BULK TRIM ALL PAST RECURRING EVENTS 903 904### Bulk Action 905- Red "✂️ Trim All Past" button added next to the Rescan button in the Recurring Events section header 906- Removes ALL past occurrences (before today) from EVERY recurring series in one click 907- Only removes events with `recurring` or `recurringId` flags — non-recurring events are untouched 908- Confirmation dialog required before execution 909- AJAX-powered with inline status showing count removed, then auto-rescans the table 910- Searches all calendar directories recursively 911 912## Version 6.4.9 (2026-02-11) - FIX RECURRING EDIT/DELETE: SEARCH ALL DIRECTORIES 913 914### Bug Fix 915- Edit and Delete recurring series now search ALL calendar directories instead of building a path from the namespace field 916- Root cause: event's `namespace` field (stored in JSON) can differ from the filesystem directory where the file lives 917- Both handlers now use `findCalendarDirs()` to collect every calendar directory recursively 918- Events matched by title AND namespace field (case-insensitive) for precise targeting 919- Edit handler rewritten: rename/time/namespace updates in Pass 1, interval respace in Pass 2 920- New `findCalendarDirs()` helper method for recursive directory discovery 921 922## Version 6.4.8 (2026-02-11) - FIX PHP PARSE ERROR IN MANAGE DIALOG 923 924### Bug Fix 925- Rewrote `manageRecurringSeries()` JS function using string concatenation instead of template literals 926- JS template literals (`${...}`) inside PHP echo blocks caused PHP to parse them as variable interpolation 927- All inline onclick handlers now use `\x27` for single quotes to avoid escaping conflicts 928 929## Version 6.4.7 (2026-02-11) - RECURRING EVENTS: FULL MANAGEMENT CONTROLS 930 931### New "Manage" Button per Series 932- Orange "Manage" button opens a comprehensive management dialog for each recurring series 933 934### Extend Series 935- Add N new occurrences after the last event in the series 936- Configurable interval: Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly 937- New events copy title, time, color, namespace, and recurring flag from the last event 938 939### Trim Past Events 940- Remove all occurrences before a selected cutoff date 941- Confirmation required before deletion 942- Cleans up empty date keys and files automatically 943 944### Change Pattern 945- Respace future occurrences with a new interval 946- Past events are untouched; only future events are removed and re-created 947- First future event becomes the anchor date 948 949### Change Start Date 950- Shift ALL occurrences by the difference between old and new start date 951- Events are removed from old positions and re-created at new positions 952- Preserves spacing between all events 953 954### Pause/Resume 955- Pause: adds ⏸ prefix and paused flag to all future occurrences 956- Resume: removes ⏸ prefix and paused flag from all occurrences 957- Button toggles based on whether series is currently paused 958 959### Infrastructure 960- New shared `recurringAction()` JS helper for all AJAX management operations 961- New `getRecurringSeriesEvents()` PHP helper for finding all events in a series 962- Status messages shown inline in the management dialog 963- Close button triggers automatic rescan to refresh the table 964 965## Version 6.4.6 (2026-02-11) - RECURRING EVENTS: RESCAN BUTTON & IMPROVED LOGIC 966 967### Rescan Button 968- Green " Rescan" button added to the Recurring Events section header 969- AJAX-powered: rescans all calendar data and refreshes the table without page reload 970- Shows count of found series briefly after scan completes 971 972### Improved Detection Logic 973- Events with `recurring: true` flag are now detected first (grouped by `recurringId`) 974- Pattern-detected events (3+ same-title occurrences) are found separately and deduplicated 975- New "Source" column shows ️ Flagged (has recurring flag) vs Detected (pattern match) 976- Median interval used for pattern detection instead of just first two dates (more robust) 977- New patterns recognized: Quarterly, Semi-annual, and "Every ~N days" for custom intervals 978- Empty/invalid titles and malformed date arrays are now skipped safely 979- Dates are deduplicated before counting (prevents inflated counts from multi-day events) 980- Nested namespace directories now scanned recursively 981- Results sorted alphabetically by title 982 983## Version 6.4.5 (2026-02-11) - ADMIN VERSION HISTORY OVERHAUL 984 985### Version History Viewer 986- All purple (#7b1fa2) accent colors replaced with green (#00cc07) to match admin theme 987- Changelog parser now handles `###` subsection headers (rendered as green bold labels) 988- Plain `- ` bullet items now parsed and categorized under their subsection 989- Previously only `- **Type:** description` format was recognized 990 991### Current Release Button 992- Green "Current Release" button added between nav arrows 993- Jumps directly to the card matching the running version from plugin.info.txt 994- Running version card shows green "RUNNING" badge and thicker green border 995 996## Version 6.4.4 (2026-02-11) - WIKI THEME: PAST EVENTS TOGGLE BACKGROUND 997 998### Fix 999- Wiki theme past events pulldown (retracted state) now uses `__background_neu__` (`--cell-today-bg`) 1000- Previously used `--cell-bg` which appeared unthemed/white 1001 1002## Version 6.4.3 (2026-02-11) - WIKI THEME: DAY HEADERS BACKGROUND 1003 1004### Fix 1005- Wiki theme SMTWTFS day headers now use `__background_neu__` (`--cell-today-bg`) instead of `--background-header` 1006 1007## Version 6.4.2 (2026-02-11) - WIKI THEME: DAY HEADERS (INITIAL) 1008 1009### Wiki Theme Day Headers 1010- Added explicit CSS override for `.calendar-theme-wiki .calendar-day-headers` 1011- Day header text uses `--text-primary` (template's `__text__` color) 1012 1013## Version 6.4.1 (2026-02-11) - WIKI THEME: EVENT HIGHLIGHT 1014 1015### Fix 1016- Wiki theme event highlight (when clicking calendar bar) now uses `themeStyles.header_bg` (`__background_alt__`) instead of hardcoded blue (#dce9f5) 1017- Subtle shadow instead of blue glow 1018 1019## Version 6.4.0 (2026-02-11) - DARK READER: SECTION BAR COLOR MATCHING 1020 1021### Fix 1022- Wiki theme section left bar now uses a `<div>` with `background` instead of `border-left` 1023- Dark Reader maps the same color differently for border vs background properties, causing visual mismatch 1024- Both the bar and header now use `background`, so Dark Reader maps them identically 1025- Flex layout wrapper added for wiki theme sections 1026- Wiki fallback colors updated: `border` key now uses `#ccc` (matching `__border__`) instead of `#2b73b7` 1027 1028## Version 6.3.9 (2026-02-10) - WIKI THEME: SECTION BAR FIX (ATTEMPT) 1029 1030### Fix 1031- Simplified wiki section container — removed `wiki-section-container` class 1032- Added `background` from `$themeStyles['bg']` to section container 1033 1034## Version 6.3.8 (2026-02-10) - WIKI THEME: BUTTON & SECTION HEADER COLORS 1035 1036### Wiki Theme Buttons 1037- Nav buttons (< >), Today button, and panel buttons now use `__link__` color background with white text 1038- CSS overrides for `.calendar-theme-wiki .cal-nav-btn`, `.cal-today-btn`, panel buttons 1039 1040### Wiki Theme Section Headers 1041- Today: `__link__` background (accent/link color) 1042- Tomorrow: `__background_alt__` background (alternate background) 1043- Important: `__border__` background (border color) 1044- Each section now has a distinct color from the template palette 1045 1046## Version 6.3.7 (2026-02-10) - WIKI THEME CHECKBOX FIX 1047 1048### Fix 1049- Wiki theme checkbox override changed from `border-color` to full `border: 2px solid` shorthand 1050- Properly overrides the base rule which uses `border` shorthand 1051- Hover state also uses full shorthand 1052 1053## Version 6.3.6 (2026-02-10) - WIKI THEME CHECKBOX BORDER COLOR 1054 1055### Fix 1056- Wiki theme unchecked checkboxes now use `--border-main` (template's `__border__` color) for border 1057- Checked state fills with border color 1058- Hover state uses border color 1059- Applied to calendar, sidebar, and eventlist containers 1060 1061## Version 6.3.5 (2026-02-10) - WIKI THEME: ALLOW DARK READER ON HEADERS 1062 1063### Fix 1064- Wiki theme section headers (Today/Tomorrow/Important) no longer use `!important` or `-webkit-text-fill-color` 1065- Dark Reader can now freely adjust background, text color, and borders on wiki theme headers 1066- Clicked-day panel header and section border-left also unlocked for wiki theme 1067- All other themes (matrix/purple/pink/professional) retain full Dark Reader protection 1068 1069## Version 6.3.4 (2026-02-10) - WIKI THEME: BORDER COLOR FOR HEADERS & BADGES 1070 1071### Wiki Theme Color Remapping 1072- `border` (accent color) now maps to template's `__border__` instead of `__link__` 1073- This affects: section headers (Today/Tomorrow/Important), badges (TODAY, namespace), sidebar widget border, clicked-day panel, `--border-main` CSS variable 1074- `text_bright` still maps to `__link__` for link text and accent text 1075- Section headers all use the same `__border__` color for consistent appearance 1076- Updated COLOR_SCHEME mapping documentation 1077 1078## Version 6.3.3 (2026-02-10) - WIKI THEME SECTION HEADER TEXT COLOR 1079 1080### Fix 1081- Wiki theme Today/Tomorrow/Important section header text now uses `$themeStyles['text_primary']` (mapped from template's `__text__` color) instead of hardcoded white 1082- Clicked-day panel header text also uses template text color for wiki theme 1083- Professional theme remains white text on blue headers 1084 1085## Version 6.3.2 (2026-02-10) - FIX THEME NOT UPDATING ON SIDEBAR EVENTLIST 1086 1087### Bug Fix 1088- Added `$renderer->nocache()` to the render function 1089- DokuWiki was caching the rendered sidebar HTML, so theme changes made in admin were never reflected until the page was manually edited 1090- Now all calendar/eventlist/eventpanel outputs are rendered fresh on each page load, picking up the current theme from `calendar_theme.txt` 1091 1092## Version 6.3.1 (2026-02-10) - EVENTLIST THEMING 1093 1094### {{eventlist}} Theme Support 1095- Eventlist containers now receive theme class (`eventlist-theme-matrix`, etc.) and full CSS variable injection 1096- Dark themes get themed border + glow, light themes get subtle border 1097- Container background set from `$themeStyles['bg']` with `!important` 1098 1099### Eventlist CSS Theme Rules (all 3 dark themes) 1100- Title, header, time, date, body, links, strong, code, namespace badge, empty state 1101- Today header, clock, date — all with `color` + `-webkit-text-fill-color` `!important` 1102- Item borders, section backgrounds, code block backgrounds 1103- Full Dark Reader protection via same inline+CSS approach as calendar/sidebar 1104 1105## Version 6.3.0 (2026-02-10) - DARK READER COMPATIBILITY & COMPLETE THEMING 1106 1107### Dark Reader Browser Extension Compatibility 1108All dark themes (Matrix, Purple, Pink) now render correctly when the Dark Reader browser extension is active. The approach uses targeted inline `!important` styles and `-webkit-text-fill-color` overrides — no page-wide locks, no blanket CSS resets, no filter manipulation. 1109 1110**Protected elements:** 1111- Section headers (Today/Tomorrow/Important) — background, text color, text-fill-color 1112- Clicked-day panel header — background, text color, close button 1113- All badges (TODAY, PAST DUE, namespace, panel namespace, eventlist-simple) — background, text, text-fill-color 1114- Event titles, meta, descriptions — color with !important via CSS 1115- Day numbers, nav buttons, calendar day headers — color with !important via CSS 1116- System status bars — inline background !important on tracks and fills 1117- System tooltips — background, border-color, text color all set via setProperty with !important 1118- Section left border bars — border-left with !important 1119- Event color indicator bars — border-left-color with !important 1120- Sidebar section event text (Purple and Pink themes) 1121 1122### Complete CSS Variable Audit (41 conversions in v6.1.1) 1123- All remaining hardcoded colors in style.css converted to CSS variable references 1124- Calendar borders, text colors, backgrounds, input focus shadows, accent borders 1125- Only legitimate hardcodes remain (keyframe animations, theme-specific override blocks) 1126 1127### Semantic Color System 1128- New CSS variables: `--pastdue-color`, `--pastdue-bg`, `--pastdue-bg-strong`, `--pastdue-bg-light` 1129- New CSS variables: `--tomorrow-bg`, `--tomorrow-bg-strong`, `--tomorrow-bg-light` 1130- Injected into all 3 CSS var blocks (full calendar, event panel, sidebar widget) 1131- Today/Tomorrow/Important section colors now theme-derived instead of hardcoded 1132 1133### Section Headers Fully Themed 1134- Today/Tomorrow/Important headers use theme accent colors instead of fixed green/orange/purple 1135- Matrix: bright/standard/dim green, Purple: bright/standard/dim purple, Pink: hot/medium/light pink 1136- Professional: blue shades, Wiki: template-derived colors 1137- Dark theme headers use dark background color for text contrast 1138 1139### Pink Theme Enhancements 1140- **Heart today indicator** — day number displayed inside a ♥ with hot pink glow, centered via inline-flex, `pink-heart-beat` animation with realistic double-beat pulse 1141- **Firework button hover** — `pink-firework-burst` keyframe animation with multi-point radiating box-shadows, scale/brightness effects on hover, instant flash on click 1142- **Checkbox glow** — hot pink border with ambient glow, hover intensifies, checked fills with glow 1143 1144### All Theme Checkbox Theming 1145- Matrix: bright green border + green glow, Purple: purple border + purple glow 1146- Pink: hot pink border + pink glow (with enhanced ambient effect) 1147- Hover scales 1.1x with intensified glow on all themes 1148- Checked state fills with theme accent color + outer glow 1149 1150### System Tooltips Themed 1151- Both tooltip functions use theme-derived colors from `$themeStyles` 1152- Green tooltip: `text_bright`, Purple: `border`, Orange: `text_primary` 1153- Background from `$themeStyles['bg']`, divider borders use theme accent colors 1154- All properties set with `style.setProperty(prop, value, "important")` 1155 1156### Namespace Filter Badge Cleanup 1157- Removed inline namespace badge from event side panel header 1158- Filter indicator bar ("Filtering: namespace ✕") retained and working 1159- AJAX-based namespace filtering fully functional via onclick handlers 1160 1161## Version 6.1.0 (2026-02-10) - TODAY INDICATOR, BUTTON HOVER & CHECKBOXES 1162 1163### Today Indicator 1164- **Added:** Today's day number now shows as a filled circle with theme accent color background and contrasting text (like Google Calendar's today indicator) 1165- **Added:** Today cell has `--cell-today-bg` background AND a visible inset border glow on hover using `--border-main` 1166- **Added:** `.day-num` now uses `--text-primary` for color instead of relying on browser default 1167 1168### Button Hover/Click Theming 1169- **Fixed:** All buttons now use `filter: brightness(1.3)` on hover for a visible glow effect across all themes 1170- **Fixed:** All buttons use `filter: brightness(0.85)` on click/active for a press-down darkening effect 1171- **Fixed:** Cal nav buttons (‹/›), Today button, +Add Event button, panel nav/today/add buttons, dialog Save/Cancel buttons, month picker Go/Cancel buttons, popup + Add Event button — ALL now have visible themed hover/click feedback with shadow 1172- **Removed:** Generic `opacity: 0.9` hover which was barely visible on dark themes 1173 1174### Checkboxes Themed 1175- **Added:** Custom checkbox styling for `.task-checkbox` — uses `appearance: none` with themed border (`--border-main`), hover glow, and filled accent background when checked with ✓ mark 1176- **Added:** `accent-color: var(--text-bright)` on all dialog checkboxes (task, recurring) for consistent theme coloring 1177 1178### Form Input Text 1179- **Fixed:** `.input-sleek` now has `color: var(--text-primary)` — form text is visible on dark themes 1180- **Added:** `::placeholder` styling for inputs/textareas using `--text-dim` 1181 1182## Version 6.0.9 (2026-02-09) - FORM TEXT, CELL HOVER & GLOW TUNING 1183 1184### Form Input Text Fix 1185- **Fixed:** Form input text (`input-sleek`, `textarea-sleek`, `select`) had no `color` property — browser defaulted to black, invisible on dark themes. Now uses `var(--text-primary)`. 1186- **Added:** Themed placeholder text (`::placeholder`) for inputs/textareas 1187 1188### Button & Cell Hover Theming 1189- **Added:** Calendar day cells (`.cal-day`) now have a themed hover effect — background shifts to `--cell-today-bg` with an inset border glow using `--border-main` 1190- **Improved:** Nav buttons (`◄`/`►`) and Today button hover now show a themed glow + scale effect instead of just opacity change 1191- **Added:** Active (click) state for nav/today buttons with scale-down feedback 1192- **Improved:** Month picker hover now also shows a subtle theme shadow 1193 1194### Glow Reduced to 1px for Matrix/Purple 1195- Matrix and purple text glow reduced from 2px to 1px across: event titles, descriptions, meta, links, sidebar day numbers, sidebar event titles, sidebar dates 1196- Matrix clock pulse animation reduced from 6px/10px+15px to 2px/4px+6px 1197- Weather text glow reduced to 1px, clock to 2px 1198- Pink remains at 2px (barely noticeable) 1199 1200## Version 6.0.8 (2026-02-09) - LINKS, GLOW CONSISTENCY & PINK TONE-DOWN 1201 1202### Links Themed 1203- **Added:** `.cal-link` CSS class — all links rendered via `renderDescription()` now pick up theme accent color via `--text-bright` 1204- **Fixed:** Sidebar widget links (`a.cal-link`) inherit theme colors 1205- **Fixed:** Event list widget description links (`eventlist-widget-desc a`) use CSS vars 1206- **Fixed:** Simple event list body links/strong/code all themed 1207 1208### Text Glow Consistency 1209- **Added:** Subtle `text-shadow: 0 0 2px` glow on event titles, meta, and descriptions for all three dark themes (matrix, purple, pink) in the main calendar and event panel 1210- **Added:** Subtle link glow on dark themes 1211- **Added:** Matrix and purple now get the same barely-visible text glow that pink had on sidebar week grid day numbers and event titles 1212 1213### Pink Glow Toned Down 1214- **Reduced:** Sidebar today header box-shadow from `0 0 10px 0.4` to `0 0 6px 0.25` 1215- **Reduced:** Day number sparkle animation from 3px/6px+10px to 2px/3px 1216- **Reduced:** Today cell shimmer from 3px+5px / 8px+12px to 2px+3px / 4px+6px 1217- **Reduced:** Event bar glow pulse from 2px/4px+6px to 1px/2px+3px 1218- **Reduced:** Today hover glow from 10px+15px to 5px+8px 1219- **Reduced:** Event item glow from 2px/5px to 1px/3px 1220- **Reduced:** Calendar container glow from 8px to 5px 1221 1222### Other 1223- **Themed:** Sidebar weather, date, and clock text colors and glow via CSS vars 1224 1225## Version 6.0.7 (2026-02-09) - BADGES, BUTTONS & CONFLICT THEMING 1226 1227- **Fixed:** Namespace badges (`.namespace-badge`, `.event-namespace-badge`, `.panel-ns-badge`, standalone header badge) — all now use theme accent colors instead of hardcoded green/blue 1228- **Fixed:** TODAY badge uses `--border-main` for background instead of hardcoded purple 1229- **Fixed:** Conflict alert badge (`⚠️`) uses `--border-main` background and `--text-bright` border — matches theme accent 1230- **Fixed:** Conflict tooltip header background now set inline from theme vars (tooltip is appended to body, can't inherit CSS vars) 1231- **Fixed:** Conflict tooltip body items use themed text and border colors 1232- **Fixed:** Month picker Go/Cancel buttons themed (`--text-bright` for save, `--cell-bg` for cancel) 1233- **Fixed:** Calendar header month/year hover uses `--cell-today-bg` background 1234- **Fixed:** Inline search input border uses `--border-color` 1235- **Fixed:** Event list header border uses `--border-color` 1236 1237## Version 6.0.6 (2026-02-09) - COMPLETE TEXT THEMING 1238 1239- **Fixed:** Calendar header month/year title had hardcoded dark color — now uses `--text-primary` 1240- **Fixed:** Month/year picker hover used hardcoded gray background and green text — now uses `--cell-today-bg` and `--text-bright` 1241- **Fixed:** Event list items (titles, meta, descriptions, links, code blocks, bold text) — all now theme-aware via CSS vars 1242- **Fixed:** Completed/past event states used hardcoded grays — now use `--cell-bg`, `--text-dim`, `--cell-today-bg` 1243- **Fixed:** Scrollbar track/thumb colors now use theme vars 1244- **Fixed:** Namespace filter indicator (background, label, badge, close button) — all themed 1245- **Fixed:** Panel standalone month picker hover and namespace badge — themed 1246- **Fixed:** Calendar header border-bottom — now uses `--border-color` 1247 1248## Version 6.0.5 (2026-02-09) - THEMED BORDERS & EVENT PANEL 1249 1250- **Added:** Theme-colored border and glow for calendar container on matrix, purple, and pink themes — matches the sidebar widget's `2px solid` + `box-shadow` glow style. Professional and wiki themes unchanged (keep subtle 1px gray border). 1251- **Added:** Theme-colored border and glow for event panel (`{{eventpanel}}`) on dark themes using `[data-theme]` attribute selectors 1252- **Themed:** Event panel header (nav buttons, month title, today button, search input, add button) — all now use CSS vars 1253- **Themed:** Panel standalone header background and border 1254 1255## Version 6.0.4 (2026-02-09) - FULL DIALOG THEMING 1256 1257- **Fixed:** Day cell click popup (day-popup) used hardcoded white/gray colors — now fully theme-aware using CSS variables 1258- **Fixed:** Event add/edit dialog (dialog-content-sleek) had hardcoded white background and blue header — now uses theme colors 1259- **Fixed:** Month picker dialog had hardcoded white background and dark text — now themed 1260- **Fixed:** Popup event items, titles, times, descriptions, footer, add-event button, close button — all now use CSS vars with sensible fallbacks 1261- **Fixed:** Form elements (field labels, inputs, checkboxes, recurring options, color pickers) — all reference theme CSS vars 1262- **How it works:** `propagateThemeVars()` copies CSS variables from the calendar container to dialogs/popups (which are `position:fixed` or appended to `document.body`). All CSS selectors now reference these variables with fallbacks for graceful degradation. 1263 1264## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB 1265 1266- **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Events Manager and Cleanup sections) 1267- **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage tab sections 1268- **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now independent of Outlook config save 1269- **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value 1270 1271## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX 1272 1273- **Fixed:** In Firefox, the SMTWTFS day-of-week header row was rendering at the same height as calendar day cells (58px instead of 22px). Firefox ignores `max-height` on `<th>` table cells per CSS spec. Replaced `<thead><tr><th>` with a CSS grid `<div>` outside the table, making header height fully independent of table cell sizing. Works consistently across Chrome, Firefox, Safari, and Edge. 1274 1275## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX 1276 1277- **Fixed:** `theme=wiki` (and all `theme=` parameters) had no effect — all three render functions (`renderCompactCalendar`, `renderEventPanelOnly`, `renderSidebarWidget`) were ignoring the syntax parameter and always reading the admin global default via `getSidebarTheme()` 1278- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller 1279- **How it works now:** `{{calendar theme=wiki}}`, `{{eventlist sidebar theme=purple}}`, `{{eventpanel theme=professional}}` all correctly apply the specified theme. The admin-configured default is used as fallback only when no `theme=` parameter is present. 1280 1281 1282## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE 1283 1284- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed 1285- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified 1286- **Audited:** style.css (3,218 lines) — balanced braces confirmed 1287- **Audited:** All admin manage tab action handlers verified functional (13 actions) 1288- **New:** Fresh README.md for GitHub with complete documentation 1289- **Includes all v5.5.x fixes:** 1290 - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total)) 1291 - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel 1292 - Conflict badges on past events after AJAX navigation 1293 - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal 1294 1295## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP 1296 1297- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers 1298- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0` 1299- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning 1300- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name 1301- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared 1302- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check 1303- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving 1304- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files 1305- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt 1306- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache 1307- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`) 1308- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries` 1309- **Removed:** Stale "NEW!" comment from Events Manager section 1310 1311## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH 1312 1313- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API 1314- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status) 1315- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run 1316- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing 1317- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total) 1318- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed 1319- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important) 1320- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead 1321- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text 1322- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes) 1323 1324## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH 1325 1326- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys 1327- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional) 1328- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background 1329- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files) 1330- **Changed:** Wiki theme section header text now white for readability on colored backgrounds 1331- **Changed:** Week grid JS theme colors now use actual $themeStyles values 1332 1333## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX 1334 1335- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch) 1336 1337## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING 1338 1339- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner 1340- **Fixed:** Week grid conflict tooltips also fixed (same issue) 1341- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data 1342- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip) 1343 1344## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD 1345 1346- **Fixed:** Past events now expand on click from initial page load (PHP-rendered items were missing onclick="togglePastEventExpand(this)" handler that the JS-rebuilt version had) 1347 1348## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS 1349 1350- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body) 1351- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string 1352 1353## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING 1354 1355- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping 1356- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON) 1357- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute 1358- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility 1359 1360## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING 1361 1362- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation 1363- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads 1364- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-) 1365- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1 1366- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds 1367- **Added:** ESC key now also closes day popups and conflict tooltips 1368- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding 1369 1370## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY 1371 1372- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance 1373- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js 1374- **Refactored:** style.css is now the single source of truth for all visual styling 1375- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container 1376- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget) 1377- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars 1378- **Added:** CSS variable injection for {{eventlist panel}} containers 1379- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers 1380- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position 1381- **Added:** Wiki template mapping reads __link__ as accent color from style.ini 1382- **Added:** Detailed CSS variable reference table in style.css header comment 1383- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php 1384- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles 1385- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div 1386- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible) 1387- **Removed:** $isWikiTheme branching from PHP render path 1388 1389## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! 1390 1391### Added: Hearts in Explosions! 1392- **Added:** 8-12 pink hearts in each click explosion 1393- **Added:** Random sizes (12-28px) and directions 1394- **Result:** Extra love in every click! 1395 1396### Fixed: Background CSS Property for Dark Mode Readers 1397- **Fixed:** Added `background: transparent` to CSS (was completely removed) 1398- **Fixed:** Now CSS readers can detect and modify background property 1399- **Why:** Inline styles override transparent, but CSS readers can now see the property 1400- **Result:** Dark mode plugins can now change calendar backgrounds! 1401 1402### The CSS Problem 1403 1404**Why backgrounds weren't changing with dark mode readers**: 1405 1406**Before (v5.3.5)**: 1407```css 1408.calendar-compact-grid tbody td { 1409 /* background removed - set via inline style */ 1410 border: 1px solid... 1411} 1412``` 1413 1414**Problem**: CSS property doesn't exist! 1415- Dark mode readers look for `background` property in CSS 1416- Can't override what doesn't exist 1417- Inline styles work, but readers can't modify them 1418 1419**After (v5.3.6)**: 1420```css 1421.calendar-compact-grid tbody td { 1422 background: transparent; /* Now exists! */ 1423 border: 1px solid... 1424} 1425``` 1426 1427**Solution**: 1428- Property exists in CSS 1429- Dark mode readers can override it 1430- Inline styles still override transparent 1431- Everyone wins! 1432 1433### What's Fixed 1434 1435**Elements now have background property**: 1436- `.calendar-compact-grid tbody td` ✓ 1437- `.calendar-compact-grid tbody td:hover` ✓ 1438- `.event-compact-item` ✓ 1439- `.event-compact-item:hover` ✓ 1440 1441**How it works**: 14421. CSS sets `background: transparent` (default) 14432. Inline styles set actual color (overrides transparent) 14443. Dark mode readers can override CSS property 14454. Works for everyone! 1446 1447### Hearts in Explosion 1448 1449**Click anywhere → Hearts explode!** 1450 1451**Heart details**: 1452- Count: 8-12 per explosion (random) 1453- Size: 12-28px (random variety) 1454- Emoji: (pink heart) 1455- Direction: Random 360° 1456- Speed: 60-140px travel 1457- Duration: 0.8-1.2s 1458- z-index: 9999999 (always visible) 1459 1460**Combined with**: 1461- 25 glowing particles 1462- 40 pixel sparkles 1463- Bright flash 1464- **Total: 73-77 elements!** 1465 1466### Visual Result 1467 1468**Click explosion**: 1469``` 1470 ✦ • ✦ 1471 • • 1472✦ • ! • ✦ 1473 • • 1474 ✦ • ✦ 1475 1476Hearts + Particles + Pixels! 1477``` 1478 1479**Dark mode now works**: 1480```css 1481/* Dark mode reader can now do this: */ 1482.calendar-compact-grid tbody td { 1483 background: #000 !important; /* Works! */ 1484} 1485``` 1486 1487### Why Transparent Works 1488 1489**CSS Cascade**: 14901. CSS: `background: transparent` (lowest priority) 14912. Inline style: `background: #f5f5f5` (overrides CSS) 14923. Dark mode CSS: `background: #000 !important` (overrides inline) 1493 1494**Perfect solution!** ✓ 1495 1496## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! 1497 1498### Fixed: Particles Now Appear Above All Dialogs! 1499- **Fixed:** Increased z-index to 9999999 for all particles 1500- **Fixed:** Particles now visible above event dialogs, month picker, etc. 1501- **Result:** Cursor effects and explosions always visible! 1502 1503### The Z-Index Problem 1504 1505**Before (v5.3.4)**: 1506- Particles: z-index 9999 1507- Dialogs: z-index 10000-999999 1508- **Particles hidden behind dialogs!** 1509 1510**After (v5.3.5)**: 1511- Particles: z-index 9999999 1512- Trail: z-index 9999998 1513- Pixels: z-index 9999997 1514- **Particles ALWAYS on top!** 1515 1516### What's Fixed 1517 1518✅ **Main particles** (explosion orbs) 1519✅ **Cursor trail** (glowing dots) 1520✅ **Pixel sparkles** (tiny bright stars) 1521✅ **Flash effect** (click burst) 1522 1523**All now appear above**: 1524- Event dialog popups 1525- Month picker 1526- Day popups 1527- Any modal overlays 1528 1529### Visual Result 1530 1531**Moving cursor over dialog**: 1532``` 1533┌─────────────────────┐ 1534│ Event Dialog │ 1535│ ✦ • ✦ │ ← Sparkles visible! 1536│ → ✦ │ ← Cursor trail visible! 1537│ • ✦ • │ 1538└─────────────────────┘ 1539``` 1540 1541**Clicking on dialog**: 1542``` 1543┌─────────────────────┐ 1544│ ✦ • ✦ • ✦ │ 1545│ • ! • │ ← Explosion visible! 1546│ ✦ • ✦ • ✦ │ 1547└─────────────────────┘ 1548``` 1549 1550**Perfect visibility everywhere!** ✨ 1551 1552## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX 1553 1554### Fixed: Month Picker Now Themed! 1555- **Fixed:** Jump to Month dialog now uses theme colors 1556- **Fixed:** Dialog background, borders, text all themed 1557- **Fixed:** Select dropdowns use theme colors 1558- **Fixed:** Buttons use theme accent colors 1559- **Result:** Month picker matches calendar theme! 1560 1561### Fixed: Cursor Effects Work in Dialogs! 1562- **Fixed:** Cursor trail now works when hovering over dialogs 1563- **Fixed:** Click explosions work when clicking inside dialogs 1564- **Technical:** Changed to capture phase event listeners 1565- **Result:** Effects work EVERYWHERE now! 1566 1567### Month Picker Theming 1568 1569**Before (v5.3.3)**: 1570- White background (hardcoded) 1571- Black text (hardcoded) 1572- No theme integration 1573- Looked out of place 1574 1575**After (v5.3.4)**: 1576- Dialog background: `theme.bg` 1577- Dialog border: `theme.border` 1578- Text color: `theme.text_primary` 1579- Dropdowns: `theme.cell_bg` + `theme.text_primary` 1580- Cancel button: `theme.cell_bg` 1581- Go button: `theme.border` (accent color) 1582 1583**Fully integrated!** ✅ 1584 1585--- 1586 1587### Theme Examples 1588 1589**Matrix Theme**: 1590``` 1591┌─────────────────────────┐ 1592│ Jump to Month │ ← Dark bg, green border 1593│ [February ▼] [2026 ▼] │ ← Dark dropdowns 1594│ [Cancel] [Go] │ ← Green "Go" button 1595└─────────────────────────┘ 1596``` 1597 1598**Pink Theme**: 1599``` 1600┌─────────────────────────┐ 1601│ Jump to Month │ ← Dark bg, pink border 1602│ [February ▼] [2026 ▼] │ ← Dark dropdowns 1603│ [Cancel] [Go] │ ← Pink "Go" button 1604└─────────────────────────┘ 1605With sparkle effects! ✨ 1606``` 1607 1608**Professional Theme**: 1609``` 1610┌─────────────────────────┐ 1611│ Jump to Month │ ← Clean bg, blue border 1612│ [February ▼] [2026 ▼] │ ← Clean dropdowns 1613│ [Cancel] [Go] │ ← Blue "Go" button 1614└─────────────────────────┘ 1615``` 1616 1617--- 1618 1619### Dialog Cursor Fix 1620 1621**The Problem**: 1622Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects! 1623 1624**The Solution**: 1625Use **capture phase** event listeners: 1626```javascript 1627// Before (bubbling phase) 1628document.addEventListener('click', handler) 1629 1630// After (capture phase) 1631document.addEventListener('click', handler, true) 1632 ↑ 1633 Capture phase! 1634``` 1635 1636**Capture phase runs BEFORE stopPropagation!** 1637 1638--- 1639 1640### Now Works Everywhere 1641 1642✅ **Calendar area** 1643✅ **Event dialogs** 1644✅ **Month picker dialog** 1645✅ **Day popup dialogs** 1646✅ **Anywhere on screen** 1647 1648**No more blocked effects!** 1649 1650--- 1651 1652### Technical Details 1653 1654**Event phases**: 1655``` 16561. Capture phase ← We listen here now! 16572. Target phase 16583. Bubbling phase ← stopPropagation blocks this 1659``` 1660 1661**By using capture phase**: 1662- Events caught before stopPropagation 1663- Works in all dialogs 1664- No conflicts with dialog logic 1665 1666--- 1667 1668### All Dialogs Checked 1669 1670✅ **Month picker** - Now themed! 1671✅ **Event dialog** - Already themed 1672✅ **Day popup** - Already themed 1673 1674**Everything consistent!** 1675 1676--- 1677 1678## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨ 1679 1680### ✨ Added: Bright Neon Pixel Sparkles Everywhere! 1681- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail 1682- **Added:** 40 pixel sparkles in click explosions 1683- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar) 1684- **Result:** Maximum sparkle effect! 1685 1686### Tiny Pixel Sparkles 1687 1688**3-6 tiny bright pixels appear with each cursor movement!** 1689 1690**Characteristics**: 1691- Size: 1-2px (single pixel appearance!) 1692- Colors: Bright neon whites and pinks 1693 - Pure white (#fff) - 40% chance 1694 - Hot pink (#ff1493) 1695 - Pink (#ff69b4) 1696 - Light pink (#ffb6c1) 1697 - Soft pink (#ff85c1) 1698- Glow: Triple-layer shadow (intense!) 1699- Spawn: Random 30px radius around cursor 1700- Animations: 1701 - 50% twinkle in place 1702 - 50% float upward 1703 1704**Creates a cloud of sparkles around your cursor!** 1705 1706--- 1707 1708### Click Explosion Enhanced 1709 1710**Now with 40 EXTRA pixel sparkles!** 1711 1712**Click anywhere → BIG BOOM**: 1713- 25 main glowing particles (6-10px) 1714- **40 tiny pixel sparkles (1-2px)** ← NEW! 1715- Bright white flash 1716- Total: 65+ visual elements! 1717 1718**Pixel sparkles in explosion**: 1719- Shoot outward in all directions 1720- Random distances (30-110px) 1721- Multiple bright colors 1722- Some twinkle, some explode 1723- Creates stellar effect! 1724 1725--- 1726 1727### Entire Screen Coverage 1728 1729**Effects now work EVERYWHERE!** 1730 1731**Before (v5.3.2)**: 1732- Only inside calendar viewport 1733- Limited to calendar area 1734 1735**After (v5.3.3)**: 1736- Works on entire screen! ✓ 1737- Cursor trail follows everywhere 1738- Click explosions anywhere 1739- Used `position: fixed` + `clientX/Y` 1740 1741**Move anywhere on the page for sparkles!** 1742 1743--- 1744 1745### Visual Effect 1746 1747**Cursor movement**: 1748``` 1749 • ✦ • ← Tiny pixels 1750 • ✦ • ← Glowing trail 1751✦ • → • ✦ ← Cursor 1752 • ✦ • ← Mixed sizes 1753 • ✦ • ← Sparkle cloud 1754``` 1755 1756**Click explosion**: 1757``` 1758 ✦ • ✦ • ✦ 1759 ✦ • • ✦ 1760✦ • ! • ✦ 1761 ✦ • • ✦ 1762 ✦ • ✦ • ✦ 1763 176465+ particles total! 1765``` 1766 1767--- 1768 1769### Sparkle Details 1770 1771**Trail Pixels** (3-6 per movement): 1772- Size: 1-2px 1773- Spawn rate: Every 40ms 1774- Spread: 30px radius 1775- Duration: 0.6-0.8s 1776- 50% twinkle, 50% float 1777 1778**Explosion Pixels** (40 total): 1779- Size: 1-3px 1780- Spread: 30-110px radius 1781- Duration: 0.4-0.8s 1782- All directions 1783- Intense glow 1784 1785**Main Particles** (25 total): 1786- Size: 4-10px 1787- Spread: 50-150px 1788- Full color palette 1789- Original firework effect 1790 1791--- 1792 1793### Color Distribution 1794 1795**Pixel sparkles favor white**: 1796- 40% pure white (#fff) - brightest! 1797- 60% pink shades - variety 1798 1799**Creates brilliant sparkle effect!** 1800 1801--- 1802 1803### Performance 1804 1805**Still optimized**: 1806- Trail: 30ms throttle 1807- Pixels: 40ms throttle 1808- Auto-cleanup 1809- Hardware accelerated 1810- Smooth 60fps 1811 1812**Lots of sparkles, zero lag!** 1813 1814--- 1815 1816### Full-Screen Magic 1817 1818**Pink theme calendar detected**: 1819```javascript 1820if (pink calendar exists) { 1821 Enable effects for ENTIRE SCREEN 1822 Not just calendar area 1823} 1824``` 1825 1826**Works everywhere on page!** ✨ 1827 1828--- 1829 1830## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! 1831 1832### Changed: Glowing Pink Particles Instead of Emoji Sparkles! 1833- **Removed:** Emoji sparkle images (✨) 1834- **Added:** Glowing pink particle trail following cursor 1835- **Added:** FIREWORKS explosion on click! 1836- **Result:** Beautiful glowing effects, not emoji! 1837 1838### Glowing Cursor Trail 1839 1840**Pink glowing dots follow your cursor!** 1841- Small glowing pink orbs (8px) 1842- Radial gradient glow effect 1843- Multiple box-shadows for depth 1844- Fade out smoothly (0.5s) 1845- Throttled to 30ms for smoothness 1846 1847``` 1848 • • 1849 • → • ← Your cursor 1850 • • 1851``` 1852 1853**Not emoji - actual glowing particles!** 1854 1855--- 1856 1857### Click Fireworks! 1858 1859**Click anywhere on the calendar → BOOM!** 1860 1861**20 pink particles explode outward!** 1862- Radial burst pattern (360° coverage) 1863- Random speeds (50-150px travel) 1864- 4 shades of pink: 1865 - Hot pink (#ff1493) 1866 - Pink (#ff69b4) 1867 - Light pink (#ff85c1) 1868 - Very light pink (#ffc0cb) 1869- Random sizes (4-10px) 1870- Individual glowing halos 1871- Smooth explosion animation 1872 1873**Plus a bright flash at click point!** 1874- 30px radius glow 1875- Intense pink flash 1876- Fades quickly (0.3s) 1877 1878--- 1879 1880### Visual Effect 1881 1882**Cursor movement**: 1883``` 1884 • 1885 • • • 1886 • → • ← Glowing trail 1887 • • • 1888 • 1889``` 1890 1891**Click explosion**: 1892``` 1893 • • • 1894 • • 1895 • BOOM! • ← 20 particles 1896 • • 1897 • • • 1898``` 1899 1900**All particles glow with pink halos!** 1901 1902--- 1903 1904### Particle Details 1905 1906**Trail Particles**: 1907- Size: 8x8px 1908- Color: Pink radial gradient 1909- Shadow: 10px + 20px glow layers 1910- Duration: 0.5s fade 1911- Rate: 30ms throttle 1912 1913**Explosion Particles**: 1914- Size: 4-10px (random) 1915- Colors: 4 pink shades (random) 1916- Shadow: 10px + 20px glow (matches color) 1917- Duration: 0.6-1.0s (random) 1918- Pattern: Perfect circle burst 1919 1920**Flash Effect**: 1921- Size: 30x30px 1922- Color: Bright hot pink 1923- Shadow: 30px + 50px mega-glow 1924- Duration: 0.3s instant fade 1925 1926--- 1927 1928### Performance 1929 1930**Optimized for smoothness**: 1931- Trail throttled to 30ms 1932- Auto-cleanup after animations 1933- CSS hardware acceleration 1934- No memory leaks 1935- Smooth 60fps 1936 1937**Won't slow you down!** 1938 1939--- 1940 1941### Comparison 1942 1943**Before (v5.3.1)**: 1944- ✨ Emoji sparkle images 1945- Static unicode characters 1946- Limited visual impact 1947 1948**After (v5.3.2)**: 1949- Glowing pink particles 1950- Radial gradients + shadows 1951- Beautiful firework explosions 1952- Much more impressive! 1953 1954--- 1955 1956### Only Pink Theme 1957 1958**These effects only appear**: 1959- On `.calendar-theme-pink` elements 1960- Other themes unaffected 1961- Pure pink magic! 1962 1963--- 1964 1965## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨ 1966 1967### ✨ Added: MySpace-Style Sparkle Trail! 1968- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!) 1969- **Toned down:** Reduced glow effects for better taste 1970- **Added:** Sparkles appear on cell hover 1971- **Added:** Sparkles on event hover (left and right sides!) 1972- **Added:** Sparkles on today's cell corners 1973- **Added:** Sparkles on navigation buttons 1974- **Added:** Sparkles in calendar header 1975- **Result:** Pure nostalgic MySpace magic! ✨ 1976 1977### MySpace Sparkle Cursor Trail 1978 1979**The classic effect from 2006!** 1980- Sparkles follow your cursor as you move 1981- Random sizes (12-22px) 1982- Random slight offsets for natural feel 1983- Float up and fade out animation 1984- Throttled to 50ms (smooth, not laggy) 1985- Only on pink theme calendars 1986 1987``` 1988 ✨ 1989 ✨ ✨ 1990✨ → ✨ (cursor trail) 1991 ✨ ✨ 1992 ✨ 1993``` 1994 1995**Pure nostalgia!** 1996 1997--- 1998 1999### Sparkles Everywhere 2000 2001**Calendar cells**: 2002- Hover over any day → ✨ floats up 2003- Smooth 1.5s animation 2004- Centered sparkle 2005 2006**Event items**: 2007- Hover → ✨ on left side 2008- Hover → ✨ on right side 2009- Staggered animations (0.4s delay) 2010- Continuous twinkling 2011 2012**Today's cell**: 2013- ✨ in top-right corner (continuous) 2014- ✨ in bottom-left corner (offset timing) 2015- Always sparkling! 2016 2017**Navigation buttons**: 2018- Hover on < or > → ✨ appears top-right 2019- One-time float animation 2020 2021**Calendar header**: 2022- ✨ on left side (continuous) 2023- ✨ on right side (offset 1s) 2024- Always twinkling 2025 2026--- 2027 2028### Toned Down Glows 2029 2030**Before (v5.3.0)**: TOO MUCH GLOW! 2031- 50px shadows 2032- 4-layer effects 2033- Overwhelming 2034 2035**After (v5.3.1)**: Just right! 2036- 8-15px max shadows (subtle) 2037- 2-layer effects 2038- Professional with personality 2039 2040**Glow reductions**: 2041- Today shimmer: 35px → 12px 2042- Today hover: 50px → 15px 2043- Event glow: 18px → 6px 2044- Badge pulse: 25px → 8px 2045- Container glow: 20px → 8px 2046 2047**Much more tasteful!** 2048 2049--- 2050 2051### Sparkle Animations 2052 2053**sparkle-twinkle** (0.8s): 2054``` 2055Opacity: 0 → 1 → 1 → 0 2056Scale: 0 → 1 → 1 → 0 2057Rotation: 0° → 180° → 360° 2058``` 2059 2060**sparkle-float** (1.5s): 2061``` 2062Moves up: 0px → -50px 2063Opacity: 0 → 1 → 1 → 0 2064Scale: 0 → 1 → 0.8 → 0 2065``` 2066 2067**Pure MySpace magic!** ✨ 2068 2069--- 2070 2071### Where Sparkles Appear 2072 2073✅ **Cursor trail** (continuous while moving) 2074✅ **Calendar cells** (on hover) 2075✅ **Event items** (on hover, left + right) 2076✅ **Today's cell** (continuous, corners) 2077✅ **Navigation buttons** (on hover) 2078✅ **Calendar header** (continuous, sides) 2079 2080**Sparkles EVERYWHERE!** ✨✨✨ 2081 2082--- 2083 2084### Performance 2085 2086**Cursor trail**: 2087- Throttled to 50ms 2088- Auto-cleanup after 1s 2089- No memory leaks 2090- Smooth 60fps 2091 2092**CSS animations**: 2093- Hardware accelerated 2094- No JavaScript overhead (except cursor) 2095- Efficient transforms 2096 2097**Won't slow down your browser!** 2098 2099--- 2100 2101### Pure Nostalgia 2102 2103**Remember MySpace profiles?** 2104- Glitter graphics ✨ 2105- Sparkle cursors ✨ 2106- Auto-play music (ok, we didn't add that) 2107- Animated GIF backgrounds 2108- Comic Sans everywhere 2109 2110**We brought back the sparkles!** ✨ 2111 2112--- 2113 2114### Theme Comparison 2115 2116**Other themes**: Professional and clean 2117**Pink theme**: ✨ SPARKLES EVERYWHERE ✨ 2118 2119**Only pink theme gets the magic!** 2120 2121--- 2122 2123## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨ 2124 2125### Added: Pink Theme Gets BLING! 2126- **Added:** Shimmering animation for today's cell 2127- **Added:** Sparkling text effect on today's date 2128- **Added:** Glowing pulse for event bars 2129- **Added:** Gradient shimmer on headers 2130- **Added:** Extra glow on hover effects 2131- **Added:** Pulsing urgent badge for past due items 2132- **Result:** Pink theme is now FABULOUS! ✨ 2133 2134### Shimmer Effects 2135 2136**Today's Cell**: 2137- Continuous shimmer animation (2 second loop) 2138- Multi-layer glow effect 2139- Pink and hot pink overlapping shadows 2140- Pulses from subtle to intense 2141- Extra sparkle on hover 2142 2143**Today's Date Number**: 2144- Sparkle animation (1.5 second loop) 2145- Text shadow glow effect 2146- Slight scale pulse (100% → 105%) 2147- Pink to hot pink shadow transition 2148 2149### Glow Effects 2150 2151**Event Bars**: 2152- Continuous glow pulse (2 second loop) 2153- Uses event's own color 2154- Adds pink accent glow layer 2155- Creates depth and dimension 2156 2157**Event Items**: 2158- Subtle base glow 2159- Enhanced glow on hover 2160- Slight slide animation on hover 2161- Professional yet playful 2162 2163### Gradient Shimmer 2164 2165**Headers**: 2166- Animated gradient background 2167- 3-color pink gradient flow 2168- Smooth 3-second animation 2169- Creates movement and life 2170- Applies to calendar header and event list header 2171 2172### Badge Effects 2173 2174**TODAY Badge**: 2175- Sparkle animation 2176- Synchronized with today's date 2177- Extra prominence 2178 2179**PAST DUE Badge**: 2180- Urgent pulsing effect (1 second loop) 2181- Orange glow intensifies 2182- Draws attention to urgent items 2183- Faster pulse for urgency 2184 2185### Container Bling 2186 2187**Main Container**: 2188- Multi-layer pink glow 2189- Soft outer shadow 2190- Creates floating effect 2191- Subtle but elegant 2192 2193### Animation Details 2194 2195**pink-shimmer** (2s loop): 2196``` 2197Start: Subtle 5px glow 2198Peak: Intense 35px multi-layer glow 2199End: Back to subtle 2200``` 2201 2202**pink-sparkle** (1.5s loop): 2203``` 2204Start: Base glow + scale 1.0 2205Peak: Intense glow + scale 1.05 2206End: Back to base 2207``` 2208 2209**pink-glow-pulse** (2s loop): 2210``` 2211Start: Small glow (3px, 6px) 2212Peak: Large glow (6px, 12px, 18px) 2213End: Back to small 2214``` 2215 2216**pink-gradient-shimmer** (3s loop): 2217``` 2218Gradient flows across element 2219Creates wave effect 2220Smooth continuous motion 2221``` 2222 2223**pink-pulse-urgent** (1s loop - faster!): 2224``` 2225Start: Orange glow 5px 2226Peak: Orange glow 25px (intense) 2227End: Back to 5px 2228``` 2229 2230### Visual Experience 2231 2232**Today's Cell**: 2233``` 2234┌──┬──┬──┬──┬──┬──┬──┐ 2235│ │ │ ✨ │ │ │ │ │ ← Shimmers constantly 2236│ │ │[9]│ │ │ │ │ ← Sparkles 2237│ │ │ ✨ │ │ │ │ │ ← Glows and pulses 2238└──┴──┴──┴──┴──┴──┴──┘ 2239``` 2240 2241**Event Bars**: 2242``` 2243━━━━━━━ ← Glows and pulses 2244━━━━━━━ ← Each bar animated 2245━━━━━━━ ← Creates rhythm 2246``` 2247 2248**Headers**: 2249``` 2250╔═════════════════════╗ 2251║ ~~~~~~~~~~ ║ ← Gradient flows 2252║ February 2026 ║ ← Shimmer effect 2253╚═════════════════════╝ 2254``` 2255 2256### Theme Comparison 2257 2258**Before (v5.2.8)**: 2259- Pink colors 2260- Static elements 2261- Standard shadows 2262 2263**After (v5.3.0)**: 2264- Pink colors ✓ 2265- Animated shimmer ✨ 2266- Sparkling effects 2267- Glowing pulses ✨ 2268- Moving gradients 2269- BLING! 2270 2271### Performance 2272 2273**All animations**: 2274- Hardware accelerated (transform, opacity) 2275- Smooth 60fps 2276- CSS animations (no JavaScript) 2277- Minimal CPU usage 2278- Disabled in reduced-motion preference 2279 2280### Only for Pink Theme 2281 2282**Effects only apply when**: 2283```css 2284.calendar-theme-pink 2285``` 2286 2287**Other themes unaffected**: 2288- Matrix stays Matrix 2289- Professional stays Professional 2290- Purple stays Purple 2291- Wiki stays clean 2292 2293**Pink gets all the bling!** ✨ 2294 2295### Use Cases 2296 2297**Perfect for**: 2298- Celebrating occasions 2299- Fun team calendars 2300- Personal style expression 2301- Standing out 2302- Making calendar time fabulous 2303 2304**Not just pink, but BLING pink!** ✨ 2305 2306## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS 2307 2308### Fixed: Today's Date Box Now Uses Theme Colors 2309- **Fixed:** Today's day number box now uses theme border color 2310- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light) 2311- **Result:** Today box matches the theme perfectly! 2312 2313### The Issue 2314 2315Today's date had a hardcoded green box: 2316 2317**In style.css**: 2318```css 2319.cal-today .day-num { 2320 background: #008800; /* Hardcoded green! */ 2321 color: white; 2322} 2323``` 2324 2325**Didn't adapt to themes at all!** 2326 2327### The Fix 2328 2329**Now uses theme colors**: 2330```php 2331// Today's day number 2332if ($isToday) { 2333 background: $themeStyles['border'], // Theme's accent color! 2334 color: (professional theme) ? white : bg color 2335} 2336``` 2337 2338### Theme Examples 2339 2340**Matrix Theme**: 2341- Box background: `#00cc07` (matrix green) 2342- Text color: `#242424` (dark background) 2343 2344**Purple Theme**: 2345- Box background: `#9b59b6` (purple) 2346- Text color: `#2a2030` (dark background) 2347 2348**Professional Theme**: 2349- Box background: `#4a90e2` (blue) 2350- Text color: `#ffffff` (white text) 2351 2352**Pink Theme**: 2353- Box background: `#ff1493` (hot pink) 2354- Text color: `#1a0d14` (dark background) 2355 2356**Wiki Theme**: 2357- Box background: Template's `__border__` color 2358- Text color: Template's `__background_site__` color 2359 2360### Visual Result 2361 2362**Matrix Theme**: 2363``` 2364┌──┬──┬──┬──┬──┬──┬──┐ 2365│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2366└──┴──┴──┴──┴──┴──┴──┘ 2367 ↑ 2368 Green box (#00cc07) 2369``` 2370 2371**Professional Theme**: 2372``` 2373┌──┬──┬──┬──┬──┬──┬──┐ 2374│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2375└──┴──┴──┴──┴──┴──┴──┘ 2376 ↑ 2377 Blue box (#4a90e2) 2378``` 2379 2380**Wiki Theme**: 2381``` 2382┌──┬──┬──┬──┬──┬──┬──┐ 2383│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2384└──┴──┴──┴──┴──┴──┴──┘ 2385 ↑ 2386 Template border color 2387``` 2388 2389### Implementation 2390 2391**Inline styles added**: 2392- Background uses `$themeStyles['border']` (theme accent) 2393- Text color uses `$themeStyles['bg']` for contrast 2394- Special case: Professional theme uses white text 2395- All with `!important` to override CSS 2396 2397**CSS cleaned up**: 2398- Removed hardcoded `#008800` background 2399- Removed hardcoded `white` color 2400- Kept structural styles (border-radius, font-weight) 2401 2402### Benefits 2403 2404**Theme Consistency**: 2405- Today box matches theme accent color 2406- Proper contrast with background 2407- Professional appearance 2408 2409**Automatic Adaptation**: 2410- Works with all themes 2411- Works with custom wiki template colors 2412- No manual adjustment needed 2413 2414**Visual Harmony**: 2415- Border color used throughout theme 2416- Today box reinforces theme identity 2417- Consistent design language 2418 2419## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH 2420 2421### Fixed: Table Grid Background Now Matches Cells 2422- **Found:** `grid_bg` was using `__background_alt__` (different from cells!) 2423- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells) 2424- **Result:** Table background no longer shows through cells! 2425 2426### The Layer Problem 2427 2428The table itself had a DIFFERENT background color than its cells! 2429 2430**Before (v5.2.6)**: 2431```php 2432'grid_bg' => __background_alt__, // Table background (#e8e8e8) 2433'cell_bg' => __background_site__, // Cell background (#f5f5f5) 2434``` 2435 2436**The table background was showing THROUGH the cells!** 2437 2438### Why This Happened 2439 2440**Visual layers**: 2441``` 2442Table Element 2443├─ background: __background_alt__ (#e8e8e8) ← Different! 2444└─ Cells 2445 └─ background: __background_site__ (#f5f5f5) ← Different! 2446 2447The table background shows through any gaps! 2448``` 2449 2450### The Fix 2451 2452**After (v5.2.7)**: 2453```php 2454'grid_bg' => __background_site__, // Table background (#f5f5f5) ✓ 2455'cell_bg' => __background_site__, // Cell background (#f5f5f5) ✓ 2456``` 2457 2458**NOW THEY MATCH!** 2459 2460### Where grid_bg Is Used 2461 2462The table element itself: 2463```html 2464<table style="background: __background_alt__"> ← Was showing through! 2465 <tbody> 2466 <tr> 2467 <td style="background: __background_site__">1</td> 2468 </tr> 2469 </tbody> 2470</table> 2471``` 2472 2473Even with cell inline styles, the TABLE background shows through! 2474 2475### All Background Sources Now Unified 2476 2477**Everything now uses __background_site__**: 2478- `bg` → __background_site__ ✓ 2479- `header_bg` → __background_site__ ✓ 2480- `grid_bg` → __background_site__ ✓ (JUST FIXED!) 2481- `cell_bg` → __background_site__ ✓ 2482 2483**Perfect consistency!** 2484 2485### Why It Was Different 2486 2487**Originally the grid was meant to show borders**: 2488- `grid_bg` was `__background_alt__` (slightly different) 2489- Created visual separation between cells 2490- But with transparent/thin cells, it showed through! 2491 2492**Now unified for consistency!** 2493 2494### Visual Result 2495 2496**Before (layers visible)**: 2497``` 2498┌─────────────────┐ 2499│ Grid (#e8e8e8) │ ← Showing through! 2500│ ┌──┬──┬──┐ │ 2501│ │ │ │ │ │ ← Cells (#f5f5f5) 2502│ └──┴──┴──┘ │ 2503└─────────────────┘ 2504``` 2505 2506**After (unified)**: 2507``` 2508┌─────────────────┐ 2509│ Grid (#f5f5f5) │ ← Same color! 2510│ ┌──┬──┬──┐ │ 2511│ │ │ │ │ │ ← Cells (#f5f5f5) 2512│ └──┴──┴──┘ │ 2513└─────────────────┘ 2514Perfect match! 2515``` 2516 2517### Complete Background Mapping 2518 2519**All using __background_site__ now**: 2520- Main container background 2521- Left panel background 2522- Right panel background 2523- Eventlist background 2524- Calendar grid background ← JUST FIXED 2525- Calendar cell backgrounds 2526- Event item backgrounds 2527- Clock header background 2528- Search input background 2529- Past events toggle 2530 2531**EVERYTHING UNIFIED!** 2532 2533## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS 2534 2535### Fixed: Removed Container Backgrounds Showing Through 2536- **Found:** `.calendar-compact-container` had `background: #ffffff;` 2537- **Found:** `.calendar-compact-left` had `background: #fafafa;` 2538- **Found:** `.calendar-compact-right` had `background: #ffffff;` 2539- **Found:** `.event-search-input-inline` had `background: white;` 2540- **Found:** `.past-events-toggle` had `background: #f5f5f5;` 2541- **Result:** Container backgrounds no longer show through cells! 2542 2543### The Container Problem 2544 2545The parent containers had hardcoded backgrounds that were showing through! 2546 2547**Container backgrounds (lines 4-91)**: 2548```css 2549.calendar-compact-container { 2550 background: #ffffff; /* ← Main container! */ 2551} 2552 2553.calendar-compact-left { 2554 background: #fafafa; /* ← Left panel (calendar side)! */ 2555} 2556 2557.calendar-compact-right { 2558 background: #ffffff; /* ← Right panel (events side)! */ 2559} 2560``` 2561 2562**These were showing through the cells and events!** 2563 2564### Why Containers Matter 2565 2566Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through: 2567 2568``` 2569Container (#fafafa) ← Showing through! 2570 └─ Table Cell (#f5f5f5) ← Transparent areas 2571 └─ Content 2572``` 2573 2574### All Backgrounds Removed 2575 2576**v5.2.6 removes**: 2577- `.calendar-compact-container` background 2578- `.calendar-compact-left` background 2579- `.calendar-compact-right` background 2580- `.event-search-input-inline` background 2581- `.past-events-toggle` background & hover 2582 2583**v5.2.5 removed**: 2584- `.calendar-compact-grid tbody td` background 2585- `.calendar-compact-grid thead th` background 2586 2587**v5.2.4 removed**: 2588- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds 2589 2590**v5.2.3 removed**: 2591- `.event-compact-item` background 2592 2593**ALL container and element backgrounds eliminated!** 2594 2595### What Should Work Now 2596 2597**Calendar cells**: No container background showing through ✓ 2598**Event items**: No container background showing through ✓ 2599**Search bar**: Uses template color ✓ 2600**Past events toggle**: Uses template color ✓ 2601 2602### Complete List of Fixes 2603 2604**Containers**: 2605- Main container ✓ 2606- Left panel ✓ 2607- Right panel ✓ 2608 2609**Elements**: 2610- Table cells ✓ 2611- Event items ✓ 2612- Search input ✓ 2613- Past events toggle ✓ 2614 2615**EVERYTHING removed!** 2616 2617### Critical: Clear Caches 2618 2619**Must clear caches or won't work**: 26201. Hard refresh: Ctrl+Shift+R (5 times!) 26212. Clear DokuWiki cache 26223. Close browser completely 26234. Reopen and test 2624 2625**CSS caching is EXTREMELY persistent!** 2626 2627## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS 2628 2629### Fixed: Removed Hardcoded Backgrounds from Table Cells 2630- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`! 2631- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`! 2632- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`! 2633- **Fixed:** Removed ALL hardcoded backgrounds from table CSS 2634- **Result:** Calendar table cells finally use template colors! 2635 2636### The REAL Culprits 2637 2638The generic table CSS was overriding everything! 2639 2640**In style.css (lines 307-356)**: 2641```css 2642.calendar-compact-grid thead th { 2643 background: #f8f8f8; /* ← Header cells hardcoded! */ 2644} 2645 2646.calendar-compact-grid tbody td { 2647 background: #ffffff; /* ← ALL table cells hardcoded! */ 2648} 2649 2650.calendar-compact-grid tbody td:hover { 2651 background: #f0f7ff; /* ← Hover state hardcoded! */ 2652} 2653``` 2654 2655**These apply to ALL `<td>` and `<th>` elements in the calendar table!** 2656 2657### Why This Was the Last One 2658 2659**CSS Specificity Order**: 26601. `.calendar-compact-grid tbody td` (generic - applies to ALL cells) 26612. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells) 26623. Inline styles (should win but didn't) 2663 2664**We removed the specific ones (v5.2.4), but the generic one was still there!** 2665 2666### What We've Removed 2667 2668**v5.2.3**: 2669- `.event-compact-item` background 2670- `.event-compact-item:hover` background 2671 2672**v5.2.4**: 2673- `.cal-empty` background & hover 2674- `.cal-today` background & hover 2675- `.cal-has-events` background & hover 2676 2677**v5.2.5 (FINAL)**: 2678- `.calendar-compact-grid tbody td` background ✓ 2679- `.calendar-compact-grid tbody td:hover` background ✓ 2680- `.calendar-compact-grid thead th` background ✓ 2681 2682**All CSS background overrides ELIMINATED!** 2683 2684### Why It Took 5 Versions 2685 2686**CSS had layers of hardcoded backgrounds**: 2687 2688``` 2689Layer 1: Table cells (.calendar-compact-grid tbody td) 2690 ↓ Overrode inline styles 2691Layer 2: Cell states (.cal-today, .cal-empty, etc.) 2692 ↓ Overrode table cells 2693Layer 3: Event items (.event-compact-item) 2694 ↓ Overrode inline styles 2695 2696ALL had to be removed! 2697``` 2698 2699**We kept finding more specific CSS, but the base table CSS was there all along!** 2700 2701### Visual Result 2702 2703**NOW everything matches**: 2704``` 2705Calendar Table: 2706┌──┬──┬──┬──┬──┬──┬──┐ 2707│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__ 2708├──┼──┼──┼──┼──┼──┼──┤ 2709│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__ 2710├──┼──┼──┼──┼──┼──┼──┤ 2711│ 8│ 9│10│11│12│13│14│ ← All: __background_site__ 2712└──┴──┴──┴──┴──┴──┴──┘ 2713 2714Sidebar Events: 2715┌────────────────────────┐ 2716│ Event │ ← __background_site__ 2717│ Event │ ← __background_site__ 2718└────────────────────────┘ 2719 2720FINALLY ALL MATCHING! ✓ 2721``` 2722 2723### Complete List of Removed CSS 2724 2725**ALL hardcoded backgrounds removed**: 2726- `.event-compact-item` background 2727- `.event-compact-item:hover` background 2728- `.cal-empty` background & hover 2729- `.cal-today` background & hover 2730- `.cal-has-events` background & hover 2731- `.calendar-compact-grid tbody td` background ← NEW 2732- `.calendar-compact-grid tbody td:hover` background ← NEW 2733- `.calendar-compact-grid thead th` background ← NEW 2734 2735**Every single CSS background override is GONE!** 2736 2737### Testing Steps 2738 2739**After installing v5.2.5**: 2740 27411. **Clear browser cache**: Ctrl+Shift+R (3 times!) 27422. **Clear DokuWiki cache**: Click the button 27433. **Close browser completely**: Restart it 27444. **Visit page**: Should finally see matching backgrounds 2745 2746**CSS is EXTREMELY sticky - may need to clear multiple times!** 2747 2748### This Should Be It 2749 2750**No more CSS overrides exist** (we've checked the entire file): 2751- Table cells ✓ Fixed 2752- Cell states ✓ Fixed 2753- Event items ✓ Fixed 2754- Headers ✓ Fixed 2755- Hover states ✓ Fixed 2756 2757**All backgrounds now come from inline styles using template colors!** 2758 2759## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS 2760 2761### Fixed: Removed Hardcoded Backgrounds from Calendar Cells 2762- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`! 2763- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS 2764- **Result:** Calendar cells now use template colors! 2765 2766### The Second Culprit 2767 2768MORE hardcoded backgrounds in the CSS file! 2769 2770**In style.css (lines 359-382)**: 2771```css 2772.cal-empty { 2773 background: #fafafa !important; /* ← Overriding inline styles! */ 2774} 2775 2776.cal-today { 2777 background: #e8f5e9 !important; /* ← Overriding today cell! */ 2778} 2779 2780.cal-today:hover { 2781 background: #c8e6c9 !important; /* ← Overriding hover! */ 2782} 2783 2784.cal-has-events { 2785 background: #fffbf0; /* ← Overriding event cells! */ 2786} 2787 2788.cal-has-events:hover { 2789 background: #fff4d9; /* ← Overriding hover! */ 2790} 2791``` 2792 2793**These were ALL overriding the inline styles!** 2794 2795### The Fix 2796 2797**Removed all hardcoded backgrounds**: 2798```css 2799.cal-empty { 2800 /* background removed - inline style handles this */ 2801 cursor: default !important; 2802} 2803 2804.cal-today { 2805 /* background removed - inline style handles this */ 2806} 2807 2808.cal-has-events { 2809 /* background removed - inline style handles this */ 2810} 2811 2812/* Hover states also removed */ 2813``` 2814 2815### What Was Overridden 2816 2817**v5.2.3 fixed**: 2818- Event items in sidebar ✓ 2819 2820**v5.2.4 fixes**: 2821- Calendar day cells ✓ 2822- Today cell ✓ 2823- Empty cells ✓ 2824- Cells with events ✓ 2825- All hover states ✓ 2826 2827### Why This Kept Happening 2828 2829**CSS had hardcoded backgrounds everywhere**: 28301. Event items: `#ffffff` (fixed in v5.2.3) 28312. Calendar cells: Multiple colors (fixed in v5.2.4) 28323. **All with `!important` flags!** 2833 2834**The inline styles couldn't override them!** 2835 2836### Visual Result 2837 2838**Now ALL backgrounds match**: 2839``` 2840Calendar Grid: 2841┌──┬──┬──┬──┬──┬──┬──┐ 2842│ │ │ │ │ │ │ │ ← All use __background_site__ 2843├──┼──┼──┼──┼──┼──┼──┤ 2844│ │██│ │ │ │ │ │ ← Today uses __background_neu__ 2845├──┼──┼──┼──┼──┼──┼──┤ 2846│ │ │ │ │ │ │ │ ← All match template 2847└──┴──┴──┴──┴──┴──┴──┘ 2848 2849Sidebar Events: 2850┌────────────────────────┐ 2851│ Event │ ← Uses __background_site__ 2852│ Event │ ← Uses __background_site__ 2853└────────────────────────┘ 2854 2855Perfect consistency! 2856``` 2857 2858### CSS Removed 2859 2860**Calendar cells**: 2861- `.cal-empty` background 2862- `.cal-empty:hover` background 2863- `.cal-today` background 2864- `.cal-today:hover` background 2865- `.cal-has-events` background 2866- `.cal-has-events:hover` background 2867 2868**All gone!** ✓ 2869 2870### Important: Clear Caches Again! 2871 2872After installing v5.2.4: 2873 28741. **Hard refresh browser**: Ctrl+Shift+R (twice!) 28752. **Clear DokuWiki cache**: Admin → Clear Cache 28763. **May need to restart browser**: To clear CSS cache 2877 2878**Old CSS is VERY sticky!** 2879 2880### Why It Took So Long 2881 2882**Multiple CSS overrides**: 2883- Event items (v5.2.3) ✓ Fixed 2884- Calendar cells (v5.2.4) ✓ Fixed 2885- Each with different classes 2886- Each with `!important` 2887- Hidden throughout CSS file 2888 2889**Found them all now!** 2890 2891## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS 2892 2893### Fixed: Removed Hardcoded Backgrounds from CSS 2894- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles! 2895- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS 2896- **Result:** Event backgrounds now properly use template colors! 2897 2898### The Root Cause 2899 2900The CSS file was overriding the inline styles with hardcoded white backgrounds! 2901 2902**In style.css (lines 599-616)**: 2903```css 2904.event-compact-item { 2905 background: #ffffff; /* ← This was overriding inline styles! */ 2906} 2907 2908.event-compact-item:hover { 2909 background: #f8f9fa; /* ← And this on hover! */ 2910} 2911``` 2912 2913**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade! 2914 2915### The Fix 2916 2917**Removed hardcoded backgrounds from CSS**: 2918```css 2919.event-compact-item { 2920 /* background removed - set via inline style with template colors */ 2921 display: flex; 2922 /* ... other styles ... */ 2923} 2924 2925.event-compact-item:hover { 2926 box-shadow: 0 1px 3px rgba(0,0,0,0.08); 2927 /* background removed - inline style handles this */ 2928} 2929``` 2930 2931### Why This Was So Difficult to Find 2932 2933**CSS Specificity & Cascade**: 29341. Inline styles with `!important` should win 29352. But CSS that comes after can still apply 29363. The hardcoded `background: #ffffff` was silently overriding 29374. All the PHP code was correct - it was the CSS! 2938 2939**What We Were Doing**: 2940- ✓ Reading template colors correctly 2941- ✓ Setting `cell_bg` to `__background_site__` correctly 2942- ✓ Applying inline styles with `!important` correctly 2943- ✗ CSS file was overriding everything! 2944 2945### What Was Affected 2946 2947**Event items in**: 2948- Main calendar sidebar 2949- Standalone event list 2950- Sidebar widget 2951- All event displays 2952 2953**All had white backgrounds hardcoded in CSS!** 2954 2955### Now Working 2956 2957**Events use template colors**: 2958```html 2959<div class="event-compact-item" 2960 style="background: #f5f5f5 !important; ..."> 2961 ← Now this inline style actually works! 2962</div> 2963``` 2964 2965**No CSS override** ✓ 2966 2967### Testing 2968 2969To verify this works: 29701. Clear browser cache (important!) 29712. Clear DokuWiki cache 29723. Reload page 29734. Events should now match eventlist background 2974 2975**Browser caching can make old CSS persist!** 2976 2977### Visual Result 2978 2979**All backgrounds now matching**: 2980``` 2981┌────────────────────────────┐ 2982│ Eventlist (#f5f5f5) │ ← Template color 2983├────────────────────────────┤ 2984│ Event (#f5f5f5) │ ← Template color (was #ffffff) 2985├────────────────────────────┤ 2986│ Event (#f5f5f5) │ ← Template color (was #ffffff) 2987└────────────────────────────┘ 2988 2989Perfect match! 2990``` 2991 2992### Why Everything Else Worked 2993 2994**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds: 2995- They only had inline styles ✓ 2996- Inline styles worked correctly ✓ 2997- Only event items had the CSS override ✗ 2998 2999### Important Notes 3000 3001**Clear caches**: 3002- Browser cache (Ctrl+Shift+R or Cmd+Shift+R) 3003- DokuWiki cache (Admin → Clear Cache) 3004- Old CSS may be cached! 3005 3006**This was the culprit all along!** 3007 3008## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND 3009 3010### Fixed: Clock Area Now Matches Event Cells 3011- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`) 3012- **Result:** Clock/Today header matches event cell backgrounds! 3013 3014### The Issue 3015 3016The clock area (Today header) was using a different background: 3017 3018**Before (v5.2.1)**: 3019```php 3020'header_bg' => __background_alt__, // Different color (gray #e8e8e8) 3021'cell_bg' => __background_site__, // Event cells (#f5f5f5) 3022``` 3023 3024**After (v5.2.2)**: 3025```php 3026'header_bg' => __background_site__, // Same as cells (#f5f5f5) ✓ 3027'cell_bg' => __background_site__, // Event cells (#f5f5f5) ✓ 3028``` 3029 3030### What's the Clock Area? 3031 3032The clock/Today header in the sidebar: 3033``` 3034┌────────────────────────────┐ 3035│ 3:45:23 PM │ ← Clock area (header_bg) 3036│ ️ --° | Sun, Feb 9, 2026 │ 3037└────────────────────────────┘ 3038``` 3039 3040### All Backgrounds Now Unified 3041 3042**Everything now uses __background_site__**: 3043- Eventlist background ✓ 3044- Calendar cells ✓ 3045- Event items ✓ 3046- Clock/Today header ✓ 3047- Sidebar widget ✓ 3048- All backgrounds match! ✓ 3049 3050### Visual Result 3051 3052**Complete consistency**: 3053``` 3054┌────────────────────────────┐ 3055│ 3:45:23 PM │ ← Same background 3056│ ️ --° | Sun, Feb 9, 2026 │ 3057├────────────────────────────┤ 3058│ Meeting at 2pm │ ← Same background 3059│ Description... │ 3060├────────────────────────────┤ 3061│ Another event │ ← Same background 3062│ More details... │ 3063└────────────────────────────┘ 3064 3065All using __background_site__ (#f5f5f5) 3066``` 3067 3068**Perfect visual harmony!** 3069 3070## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND 3071 3072### Fixed: Calendar Cells Now Match Eventlist Background 3073- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`) 3074- **Result:** Calendar cells now match the eventlist background perfectly! 3075 3076### The Real Issue 3077 3078The eventlist was showing the CORRECT background color all along! 3079 3080**Eventlist was using**: 3081- `bg` → `__background_site__` ✓ (This was correct!) 3082 3083**Calendar cells were using**: 3084- `cell_bg` → `__background__` ✗ (This was wrong!) 3085 3086**They didn't match!** 3087 3088### The Correct Fix 3089 3090**Now everything uses __background_site__**: 3091```php 3092'bg' => __background_site__, // Eventlist (was already correct) 3093'cell_bg' => __background_site__, // Cells (now fixed to match) 3094``` 3095 3096### Why __background_site__? 3097 3098The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background: 3099 3100``` 3101Page Layout: 3102┌────────────────────────────────────┐ 3103│ __background_site__ (page bg) │ ← This is where calendar lives 3104│ │ 3105│ ┌──────────────────────────────┐ │ 3106│ │ __background__ (content bg) │ │ ← Wiki article content 3107│ │ │ │ 3108│ └──────────────────────────────┘ │ 3109│ │ 3110└────────────────────────────────────┘ 3111``` 3112 3113**Calendar should match the page background, not the content background!** 3114 3115### Template Example 3116 3117Typical DokuWiki template: 3118```ini 3119__background_site__ = "#f5f5f5" (Light gray - page background) 3120__background__ = "#ffffff" (White - content area) 3121``` 3122 3123**Before (v5.2.0)**: 3124- Eventlist: `#f5f5f5` (light gray) ✓ Correct 3125- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match 3126 3127**After (v5.2.1)**: 3128- Eventlist: `#f5f5f5` (light gray) ✓ Correct 3129- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED! 3130 3131### All Backgrounds Now Unified 3132 3133**Everything now uses __background_site__**: 3134- Eventlist sidebar background ✓ 3135- Main calendar background ✓ 3136- Calendar day cells ✓ 3137- Sidebar widget ✓ 3138- Event items ✓ 3139- Input fields ✓ 3140- Buttons ✓ 3141 3142**All perfectly matched to the page background!** 3143 3144### Why Version 5.2.0 Was Wrong 3145 3146I incorrectly assumed `__background__` was the right color because it's often white. But the eventlist was already correct using `__background_site__` to match the page, not the content area. 3147 3148**The eventlist knew what it was doing all along!** The cells just needed to catch up. 3149 3150## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS 3151**Note**: This version went the wrong direction. See v5.2.1 for the correct fix. 3152 3153### Fixed: All Backgrounds Now Use __background__ 3154- **Fixed:** `bg` now uses `__background__` instead of `__background_site__` 3155- **Fixed:** Eventlist, calendar cells, and sidebar all match now 3156- **Result:** Completely unified background throughout! 3157 3158### The Issue 3159 3160Different parts of the calendar were using different background sources: 3161 3162**Before (v5.1.9)**: 3163```php 3164'bg' => __background_site__ // Eventlist background (outer page) 3165'cell_bg' => __background__ // Cell backgrounds (content area) 3166``` 3167 3168**These are different colors!** 3169- `__background_site__` = Outer page wrapper (often gray) 3170- `__background__` = Main content area (often white) 3171 3172### The Fix 3173 3174**After (v5.2.0)**: 3175```php 3176'bg' => __background__ // Eventlist background ✓ 3177'cell_bg' => __background__ // Cell backgrounds ✓ 3178``` 3179 3180**Both use the same source!** 3181 3182### What Uses 'bg' 3183 3184The `bg` color is used for: 3185- Eventlist sidebar background 3186- Main calendar container 3187- Sidebar widget background 3188- Form backgrounds 3189- Event dialogs 3190 3191### What Uses 'cell_bg' 3192 3193The `cell_bg` color is used for: 3194- Calendar day cells 3195- Event item backgrounds 3196- Input field backgrounds 3197- Button backgrounds 3198 3199### Why This Matters 3200 3201**Template color hierarchy**: 3202``` 3203__background_site__ → Outer page/body (e.g., #f5f5f5 light gray) 3204__background__ → Main content area (e.g., #ffffff white) 3205__background_alt__ → Sections/headers 3206__background_neu__ → Highlights 3207``` 3208 3209**We want all calendar backgrounds to match the main content area!** 3210 3211### Visual Comparison 3212 3213**Before (v5.1.9)**: Mismatched backgrounds 3214``` 3215┌────────────────────────────────┐ 3216│ Eventlist (gray #f5f5f5) │ ← __background_site__ 3217└────────────────────────────────┘ 3218 3219┌────────────────────────────────┐ 3220│ Calendar │ 3221│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 3222│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 3223│ └──┴──┴──┴──┴──┴──┴──┘ │ 3224└────────────────────────────────┘ 3225Different colors - looks inconsistent 3226``` 3227 3228**After (v5.2.0)**: Unified backgrounds 3229``` 3230┌────────────────────────────────┐ 3231│ Eventlist (white #fff) │ ← __background__ 3232└────────────────────────────────┘ 3233 3234┌────────────────────────────────┐ 3235│ Calendar │ 3236│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 3237│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 3238│ └──┴──┴──┴──┴──┴──┴──┘ │ 3239└────────────────────────────────┘ 3240Same color - perfectly consistent! 3241``` 3242 3243### Template Examples 3244 3245**Light Template**: 3246```ini 3247__background_site__ = "#f5f5f5" (light gray) 3248__background__ = "#ffffff" (white) 3249``` 3250 3251**Before**: Eventlist gray, cells white 3252**After**: Eventlist white, cells white ✓ 3253 3254**Dark Template**: 3255```ini 3256__background_site__ = "#1a1a1a" (very dark) 3257__background__ = "#2d2d2d" (dark) 3258``` 3259 3260**Before**: Eventlist very dark, cells dark 3261**After**: Eventlist dark, cells dark ✓ 3262 3263### Benefits 3264 3265**Visual Consistency**: 3266- All backgrounds match 3267- Clean, unified appearance 3268- Professional look 3269 3270**Correct Template Integration**: 3271- Uses content area color (not page wrapper) 3272- Matches wiki content area 3273- Proper color hierarchy 3274 3275**Works Everywhere**: 3276- Light templates ✓ 3277- Dark templates ✓ 3278- Custom templates ✓ 3279 3280### All Backgrounds Unified 3281 3282**Now using __background__**: 3283- Eventlist background ✓ 3284- Calendar cells ✓ 3285- Sidebar widget ✓ 3286- Event items ✓ 3287- Input fields ✓ 3288- Buttons ✓ 3289- Dialogs ✓ 3290 3291**Perfect harmony throughout!** 3292 3293## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS 3294 3295### Fixed: Wiki Theme Event Backgrounds Not Showing 3296- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!) 3297- **Fixed:** Replaced CSS variables with actual hex colors 3298- **Result:** Event backgrounds now show correctly with template colors! 3299 3300### The Problem 3301 3302CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes! 3303 3304**Before (broken)**: 3305```php 3306'cell_bg' => 'var(--__background__, #fff)', // Doesn't work in inline styles! 3307``` 3308 3309**After (fixed)**: 3310```php 3311'cell_bg' => '#fff', // Actual hex color works! 3312``` 3313 3314### What Was Affected 3315 3316**When style.ini read successfully**: 3317- ✅ Worked fine (uses actual hex colors from file) 3318 3319**When style.ini fallback used**: 3320- ❌ Events had no background 3321- ❌ CSS variables don't work in inline styles 3322- ❌ Looked broken 3323 3324### The Fix 3325 3326**Wiki theme fallback now uses real colors**: 3327```php 3328'wiki' => [ 3329 'bg' => '#f5f5f5', // Real hex (was: var(--__background_site__)) 3330 'border' => '#ccc', // Real hex (was: var(--__border__)) 3331 'cell_bg' => '#fff', // Real hex (was: var(--__background__)) 3332 'cell_today_bg' => '#eee', // Real hex (was: var(--__background_neu__)) 3333 'text_primary' => '#333', // Real hex (was: var(--__text__)) 3334 'text_bright' => '#2b73b7', // Real hex (was: var(--__link__)) 3335 'text_dim' => '#666', // Real hex (was: var(--__text_neu__)) 3336 'grid_bg' => '#e8e8e8', // Real hex (was: var(--__background_alt__)) 3337 // ... all colors now use real hex values 3338] 3339``` 3340 3341### Why CSS Variables Don't Work 3342 3343**CSS variables work**: 3344```css 3345.some-class { 3346 background: var(--__background__, #fff); /* ✓ Works in CSS */ 3347} 3348``` 3349 3350**CSS variables DON'T work**: 3351```html 3352<div style="background: var(--__background__, #fff)"> <!-- ✗ Doesn't work --> 3353``` 3354 3355### How It Works Now 3356 3357**Priority system**: 33581. **Try reading style.ini** → Use actual template hex colors ✓ 33592. **If file not found** → Use fallback hex colors ✓ 33603. **Never use CSS variables in inline styles** ✓ 3361 3362**Both paths now work correctly!** 3363 3364### Visual Result 3365 3366**Events now have proper backgrounds**: 3367``` 3368┌──────────────────────────┐ 3369│ Meeting at 2pm │ ← White background (#fff) 3370│ Description here... │ 3371│ [✏️ Edit] [️ Delete] │ 3372└──────────────────────────┘ 3373 3374Not: 3375┌──────────────────────────┐ 3376│ Meeting at 2pm │ ← No background (broken) 3377│ Description here... │ 3378└──────────────────────────┘ 3379``` 3380 3381### Affected Areas 3382 3383**All event displays**: 3384- Main calendar events ✓ 3385- Sidebar widget events ✓ 3386- Event list items ✓ 3387- Event backgrounds ✓ 3388- Button backgrounds ✓ 3389- Input field backgrounds ✓ 3390 3391**Everything uses real colors now!** 3392 3393## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT 3394 3395### Reorganized: Better Update Tab Layout 3396- **Moved:** Current Version section to the top 3397- **Combined:** Upload and Important Notes side-by-side 3398- **Improved:** Space-efficient two-column layout 3399- **Result:** More information visible at once! 3400 3401### New Layout Order 3402 3403**Version 5.1.8**: 3404``` 34051. Current Version (at top - see what you have) 34062. Upload + Important Notes (side-by-side) 34073. Recent Changes (changelog) 34084. Backups 3409``` 3410 3411### Side-by-Side Design 3412 3413**Upload form (left 60%) + Important Notes (right 40%)**: 3414``` 3415┌──────────────────────────────────────────┐ 3416│ Current Version │ 3417│ Version: 5.1.8 │ 3418│ ✅ Permissions: OK │ 3419└──────────────────────────────────────────┘ 3420 3421┌─────────────────────┬────────────────────┐ 3422│ Upload New │ ⚠️ Important Notes │ 3423│ [Choose File] │ • Replaces files │ 3424│ ☑ Backup first │ • Config preserved │ 3425│ [Upload] [Clear] │ • Events safe │ 3426└─────────────────────┴────────────────────┘ 3427``` 3428 3429### Benefits 3430 3431**Current Version First**: 3432- See what you have immediately 3433- Check permissions at a glance 3434- Know if ready to update 3435 3436**Side-by-Side Layout**: 3437- Upload form and warnings together 3438- Read notes while choosing file 3439- More efficient use of space 3440- Less scrolling needed 3441 3442**Better Information Flow**: 34431. See current version ✓ 34442. Upload new version with notes visible ✓ 34453. Review recent changes ✓ 34464. Manage backups ✓ 3447 3448### Visual Comparison 3449 3450**Before (v5.1.7)**: 3451``` 3452Important Notes (full width) 3453↓ 3454Upload Form (full width) 3455↓ 3456Current Version 3457↓ 3458Recent Changes 3459↓ 3460Backups 3461``` 3462 3463**After (v5.1.8)**: 3464``` 3465Current Version (full width) 3466↓ 3467Upload (60%) | Notes (40%) 3468↓ 3469Recent Changes 3470↓ 3471Backups 3472``` 3473 3474**More compact, better organized!** 3475 3476### Responsive Design 3477 3478**Wide screens**: 3479- Upload and notes side-by-side 3480- Full 1200px width utilized 3481- Efficient space usage 3482 3483**Narrow screens**: 3484- Sections stack gracefully 3485- Flex layout adapts 3486- Still fully functional 3487 3488### Layout Details 3489 3490**Current Version Section**: 3491- Full width (1200px max) 3492- Shows version, author, description 3493- Permission status with icons 3494- Helpful fix commands if needed 3495 3496**Upload/Notes Section**: 3497- Flexbox layout with gap 3498- Upload: `flex:1` (grows) 3499- Notes: `flex:0 0 350px` (fixed 350px) 3500- Both have proper min-width 3501 3502**Recent Changes Section**: 3503- Full width (1200px max) 3504- Compact scrollable view 3505- Color-coded change types 3506- Last 10 versions shown 3507 3508**Backups Section**: 3509- Full width (1200px max) 3510- Manual backup button 3511- Scrollable file list 3512- All actions accessible 3513 3514### Improved Max Widths 3515 3516All sections now use `max-width:1200px` (previously 900px): 3517- Better use of wide screens 3518- Still responsive on narrow screens 3519- Consistent throughout tab 3520 3521## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR 3522 3523### Fixed: Extra Closing Brace 3524- **Fixed:** ParseError on line 1936 (extra closing brace) 3525- **Result:** Manual backup feature now works correctly! 3526 3527### What Was Wrong 3528 3529Extra `}` after the backup section: 3530 3531**Before (broken)**: 3532```php 3533echo '</div>'; 3534} // ← Extra closing brace! 3535 3536echo '<script> 3537``` 3538 3539**After (fixed)**: 3540```php 3541echo '</div>'; 3542 3543echo '<script> 3544``` 3545 3546**Manual backup feature now fully functional!** ✅ 3547 3548## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND 3549 3550### Added: Create Backup Manually Anytime 3551- **Added:** "Create Backup Now" button in Backups section 3552- **Added:** Manual backup action handler with full verification 3553- **Added:** Backups section always visible (even with no backups) 3554- **Added:** Success message showing file size and file count 3555- **Result:** Create backups anytime without needing to upload! 3556 3557### Manual Backup Button 3558 3559**New Layout**: 3560``` 3561┌─────────────────────────────────────┐ 3562│ Backups [ Create Backup Now] │ 3563├─────────────────────────────────────┤ 3564│ Backup File Size │ 3565│ calendar.backup.v5.1.6... 243 KB │ 3566│ [ Download] [✏️ Rename] [️ Delete] │ 3567└─────────────────────────────────────┘ 3568``` 3569 3570**Always visible - even with no backups**: 3571``` 3572┌─────────────────────────────────────┐ 3573│ Backups [ Create Backup Now] │ 3574├─────────────────────────────────────┤ 3575│ No backups yet. Click "Create │ 3576│ Backup Now" to create your first │ 3577│ backup. │ 3578└─────────────────────────────────────┘ 3579``` 3580 3581### How It Works 3582 3583**Click the button**: 35841. Confirm: "Create a backup of the current plugin version?" 35852. System creates backup ZIP 35863. Verifies: File count (30+ files) 35874. Verifies: File size (200KB+) 35885. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)" 3589 3590**Backup naming**: 3591``` 3592calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 3593 ^^^^^^ 3594 "manual" tag identifies manual backups 3595``` 3596 3597### Use Cases 3598 3599**Before updates**: 3600- Create safety backup before uploading new version 3601- Have multiple restore points 3602- Test new features with fallback 3603 3604**Regular backups**: 3605- Weekly/monthly backup schedule 3606- Before making configuration changes 3607- After important customizations 3608 3609**Development**: 3610- Backup before code experiments 3611- Save working states 3612- Quick rollback points 3613 3614### Full Verification 3615 3616**Same checks as automatic backups**: 3617- ✅ File count check (minimum 10, expected 30+) 3618- ✅ File size check (minimum 1KB, expected 200KB+) 3619- ✅ Existence check (file actually created) 3620- ✅ Automatic cleanup on failure 3621 3622**Success message includes**: 3623- Backup filename 3624- File size (human-readable) 3625- Number of files backed up 3626 3627### Example Messages 3628 3629**Success**: 3630``` 3631✓ Manual backup created successfully: 3632 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 3633 (243 KB, 31 files) 3634``` 3635 3636**Failure Examples**: 3637``` 3638❌ Plugin directory is not readable. 3639 Please check permissions. 3640 3641❌ Backup incomplete: Only 5 files were added (expected 30+). 3642 Backup failed. 3643 3644❌ Backup file is too small (342 bytes). 3645 Only 3 files were added. Backup failed. 3646``` 3647 3648### Benefits 3649 3650**On-Demand Safety**: 3651- Create backups anytime 3652- No need to upload new version 3653- Quick and easy 3654 3655**Peace of Mind**: 3656- Backup before risky changes 3657- Multiple restore points 3658- Safe experimentation 3659 3660**Professional Workflow**: 3661- Regular backup schedule 3662- Version snapshots 3663- Disaster recovery 3664 3665### Backup Section Improvements 3666 3667**Always Visible**: 3668- Section shows even with 0 backups 3669- Button always accessible 3670- Clear call-to-action 3671 3672**Better Header**: 3673- Title and button on same row 3674- Clean, professional layout 3675- Space-efficient design 3676 3677### Technical Details 3678 3679**New Action**: `create_manual_backup` 3680 3681**New Function**: `createManualBackup()` 3682- Gets current version 3683- Creates timestamped filename with "manual" tag 3684- Uses same verification as auto-backups 3685- Shows detailed success/error messages 3686 3687**File Naming Convention**: 3688``` 3689Automatic (on upload): 3690calendar.backup.v5.1.6.2026-02-09_12-30-45.zip 3691 3692Manual (button click): 3693calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 3694 ^^^^^^^ 3695 Easy to identify! 3696``` 3697 3698### Permissions Required 3699 3700- **Read access**: Plugin directory 3701- **Write access**: Parent plugins directory 3702 3703**Same as automatic backups** - no additional permissions needed! 3704 3705## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION 3706 3707### Enhanced: Backup Creation with Robust Verification 3708- **Added:** File count validation (must have 10+ files) 3709- **Added:** File size validation (must be 1KB+ minimum) 3710- **Added:** Return value from addDirectoryToZip (counts files added) 3711- **Added:** Detailed error messages showing file count 3712- **Added:** Automatic deletion of invalid/incomplete backups 3713- **Enhanced:** Exception handling with proper error propagation 3714- **Result:** Backups are now guaranteed to be complete or fail clearly! 3715 3716### What Changed 3717 3718**Before (v5.1.4)**: 3719```php 3720$this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 3721$zip->close(); 3722// No verification - could create empty or partial backup 3723``` 3724 3725**After (v5.1.5)**: 3726```php 3727$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 3728$zip->close(); 3729 3730// Verify backup exists 3731if (!file_exists($backupPath)) { 3732 redirect('Backup file was not created'); 3733} 3734 3735// Verify backup has content 3736$backupSize = filesize($backupPath); 3737if ($backupSize < 1000) { 3738 unlink($backupPath); 3739 redirect('Backup too small: ' . $backupSize . ' bytes'); 3740} 3741 3742// Verify file count 3743if ($fileCount < 10) { 3744 unlink($backupPath); 3745 redirect('Only ' . $fileCount . ' files added (expected 30+)'); 3746} 3747``` 3748 3749### Backup Validation Checks 3750 3751**Three-Layer Verification**: 3752 37531. **File Count Check**: 3754 - Minimum: 10 files required 3755 - Expected: 30+ files 3756 - Action: Delete backup if too few files 3757 37582. **Size Check**: 3759 - Minimum: 1KB (1000 bytes) 3760 - Expected: 200-250KB 3761 - Action: Delete backup if too small 3762 37633. **Existence Check**: 3764 - Verify file was actually created 3765 - Check ZIP archive is valid 3766 - Action: Error if file missing 3767 3768### Enhanced Error Reporting 3769 3770**Detailed Error Messages**: 3771``` 3772❌ "Backup file was not created" 3773❌ "Backup too small (342 bytes). Only 3 files added." 3774❌ "Only 5 files added (expected 30+). Backup aborted." 3775❌ "Too many errors adding files: Failed to add X, Y, Z..." 3776❌ "Directory does not exist: /path/to/dir" 3777❌ "Directory is not readable: /path/to/dir" 3778``` 3779 3780**Now you know exactly what went wrong!** 3781 3782### Improved addDirectoryToZip Function 3783 3784**Returns File Count**: 3785```php 3786private function addDirectoryToZip($zip, $dir, $zipPath = '') { 3787 $fileCount = 0; 3788 $errors = []; 3789 3790 // Validation 3791 if (!is_dir($dir)) throw new Exception("Directory does not exist"); 3792 if (!is_readable($dir)) throw new Exception("Not readable"); 3793 3794 // Add files 3795 foreach ($files as $file) { 3796 if ($zip->addFile($filePath, $relativePath)) { 3797 $fileCount++; 3798 } else { 3799 $errors[] = "Failed to add: " . $filename; 3800 } 3801 } 3802 3803 // Check error threshold 3804 if (count($errors) > 5) { 3805 throw new Exception("Too many errors"); 3806 } 3807 3808 return $fileCount; // Returns count for verification! 3809} 3810``` 3811 3812### Safety Features 3813 3814**Invalid Backup Cleanup**: 3815- Failed backups are automatically deleted 3816- No partial/corrupt backups left behind 3817- Clean error state 3818 3819**Error Threshold**: 3820- Allow up to 5 minor file errors (logs warnings) 3821- More than 5 errors = complete failure 3822- Prevents partially corrupt backups 3823 3824**Directory Validation**: 3825- Check directory exists before processing 3826- Check directory is readable 3827- Fail fast with clear errors 3828 3829### Benefits 3830 3831**Guaranteed Complete Backups**: 3832- ✅ All files included or backup fails 3833- ✅ No silent failures 3834- ✅ Clear error messages 3835- ✅ Automatic cleanup 3836 3837**Better Debugging**: 3838- Know exactly how many files were added 3839- See specific errors for missing files 3840- Understand why backup failed 3841 3842**User Confidence**: 3843- Backup succeeds = complete backup 3844- Backup fails = clear error message 3845- No ambiguity 3846 3847### Example Scenarios 3848 3849**Scenario 1: Permission Issue** 3850``` 3851User uploads new version 3852System starts backup 3853Error: "Directory is not readable: /lib/plugins/calendar/" 3854Backup fails before creating file 3855User sees clear error message 3856``` 3857 3858**Scenario 2: Partial Backup** 3859``` 3860User uploads new version 3861System creates backup 3862Only 5 files added (disk issue?) 3863Size: 450 bytes 3864Verification fails 3865Incomplete backup deleted 3866Error: "Only 5 files added (expected 30+)" 3867``` 3868 3869**Scenario 3: Success** 3870``` 3871User uploads new version 3872System creates backup 387331 files added 3874Size: 240KB 3875All verifications pass ✅ 3876Update proceeds 3877``` 3878 3879### Testing Recommendations 3880 3881After installing v5.1.5: 38821. Upload a new version with backup enabled 38832. Check for success message 38843. Verify backup file exists in /lib/plugins/ 38854. Check backup file size (should be ~240KB) 38865. If backup fails, read error message carefully 3887 3888**Your backups are now bulletproof!** 3889 3890## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED 3891 3892### ✅ Verified: Backup System Working Correctly 3893- **Verified:** addDirectoryToZip function includes all files recursively 3894- **Verified:** Backups contain all 31+ files from calendar directory 3895- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed) 3896- **Info:** Backup sizes grow slightly with each version (more code = more features!) 3897- **Result:** Backup system is working perfectly! 3898 3899### Backup System Details 3900 3901**What Gets Backed Up**: 3902- All PHP files (syntax.php, admin.php, action.php, etc.) 3903- All JavaScript files (calendar-main.js, script.js) 3904- All documentation (CHANGELOG.md, README.md, all guides) 3905- All configuration (sync_config.php) 3906- All language files 3907- All assets and resources 3908- **Everything in the calendar/ directory!** 3909 3910**Backup Size Analysis**: 3911``` 3912Version 5.0.4: 233KB (normal) 3913Version 5.0.5: 234KB (normal) 3914Version 5.0.6: 235KB (normal) 3915Version 5.0.7: 236KB (normal) 3916Version 5.0.8: 237KB (normal) 3917Version 5.0.9: 237KB (normal) 3918Version 5.1.0: 238KB (normal) 3919Version 5.1.1: 238KB (normal) 3920Version 5.1.2: 240KB (normal - added AJAX features) 3921Version 5.1.3: 240KB (normal) 3922``` 3923 3924**Why Sizes Grow**: 3925- More features = more code 3926- Longer CHANGELOG 3927- Additional documentation 3928- New functionality 3929- **This is expected and normal!** 3930 3931**Compression Ratio**: 3932``` 3933Uncompressed: ~1.0 MB (source files) 3934Compressed: ~240 KB (ZIP archive) 3935Ratio: ~24% (excellent compression!) 3936``` 3937 3938### Backup File Contents 3939 3940**31 Files Included**: 3941``` 3942admin.php (216KB - main admin interface) 3943syntax.php (173KB - calendar rendering) 3944calendar-main.js (102KB - JavaScript functionality) 3945CHANGELOG.md (268KB - complete version history) 3946style.css (57KB - all styling) 3947action.php (38KB - DokuWiki actions) 3948sync_outlook.php (32KB - Outlook integration) 3949+ 24 other files (docs, configs, helpers) 3950``` 3951 3952**All files successfully included!** ✅ 3953 3954### How Backups Work 3955 3956**Creation Process**: 39571. User uploads new plugin version 39582. Checkbox "Create backup first" (checked by default) 39593. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip` 39604. Backup saved to: `/lib/plugins/` directory 39615. Then proceeds with update 3962 3963**Backup Function**: 3964```php 3965private function addDirectoryToZip($zip, $dir, $zipPath = '') { 3966 $files = new RecursiveIteratorIterator( 3967 new RecursiveDirectoryIterator($dir), 3968 RecursiveIteratorIterator::LEAVES_ONLY 3969 ); 3970 foreach ($files as $file) { 3971 if (!$file->isDir()) { 3972 $zip->addFile($filePath, $relativePath); 3973 } 3974 } 3975} 3976``` 3977 3978**Recursive = Gets Everything!** ✅ 3979 3980### Verification Results 3981 3982**Test Results**: 3983- ✅ All 31 files present in zip 3984- ✅ All subdirectories included (lang/en/) 3985- ✅ File sizes match originals 3986- ✅ Compression works properly 3987- ✅ No files missing 3988- ✅ Backup can be restored 3989 3990**File Count**: 3991``` 3992Source directory: 31 files 3993Backup ZIP: 34 items (31 files + 3 directories) 3994Status: COMPLETE ✅ 3995``` 3996 3997### Backup Best Practices 3998 3999**Always enabled by default** ✅ 4000**Stored in accessible location** ✅ 4001**Timestamped filenames** ✅ 4002**Complete directory backup** ✅ 4003**Easy to restore** ✅ 4004 4005### Conclusion 4006 4007The backup system is working perfectly. The file sizes are appropriate and expected: 4008- Compressed size: ~240KB (good compression) 4009- Uncompressed size: ~1MB (all source files) 4010- All files included: YES ✅ 4011- Growing size over versions: Normal (more features!) 4012 4013**Your backups are complete and reliable!** 4014 4015## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR 4016 4017### Fixed: JavaScript Syntax Error in AJAX Function 4018- **Fixed:** ParseError on line 1947 (deleteBackup function) 4019- **Fixed:** Escaped all single quotes in JavaScript strings 4020- **Result:** AJAX backup deletion now works correctly! 4021 4022### What Was Wrong 4023 4024JavaScript inside PHP echo needs escaped quotes: 4025 4026**Before (broken)**: 4027```javascript 4028formData.append('action', 'delete_backup'); // PHP interprets quotes 4029``` 4030 4031**After (fixed)**: 4032```javascript 4033formData.append(\'action\', \'delete_backup\'); // Escaped for PHP 4034``` 4035 4036### All Quotes Escaped 4037 4038Fixed in deleteBackup function: 4039- ✅ FormData.append() calls 4040- ✅ fetch() URL 4041- ✅ querySelector() calls 4042- ✅ createElement() call 4043- ✅ All string literals 4044- ✅ Error messages 4045 4046**JavaScript now works!** ✓ 4047 4048## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT 4049 4050### Improved: Update Tab Further Refined 4051- **Moved:** Important Notes to very top (above upload) 4052- **Enhanced:** Delete backup now uses AJAX (no page refresh!) 4053- **Added:** Smooth fade-out animation when deleting backups 4054- **Added:** Success message after deletion 4055- **Auto-remove:** Backup section disappears if last backup deleted 4056- **Result:** Smoother, more polished experience! 4057 4058### New Layout Order 4059 4060**Final Order (v5.1.2)**: 4061``` 40621. ⚠️ Important Notes (warnings at top) 40632. Upload New Version (with Clear Cache button) 40643. Current Version (info) 40654. Recent Changes (changelog) 40665. Available Backups (if any) 4067``` 4068 4069### AJAX Backup Deletion 4070 4071**Before (v5.1.1)**: 4072- Click Delete → Page refreshes → Scroll back down 4073- Lose position on page 4074- Page reload is jarring 4075 4076**After (v5.1.2)**: 4077- Click Delete → Confirm 4078- Row fades out smoothly 4079- Row disappears 4080- Success message shows at top 4081- Success message fades after 3 seconds 4082- If last backup: entire section fades away 4083- **No page refresh!** ✓ 4084 4085### Visual Flow 4086 4087**Delete Animation**: 4088``` 40891. Click ️ Delete 40902. Confirm dialog 40913. Row fades out (0.3s) 40924. Row removed 40935. Success message appears 40946. Message fades after 3s 4095``` 4096 4097**If Last Backup**: 4098``` 40991. Delete last backup 41002. Row fades out 41013. Entire "Available Backups" section fades 41024. Section removed 41035. Clean interface ✓ 4104``` 4105 4106### Success Message 4107 4108After deleting: 4109``` 4110┌──────────────────────────────┐ 4111│ ✓ Backup deleted: filename │ ← Appears at top 4112└──────────────────────────────┘ 4113 Fades after 3 seconds 4114``` 4115 4116### Benefits 4117 4118**Important Notes First**: 4119- Warnings before actions ✓ 4120- Read before uploading ✓ 4121- Clear expectations ✓ 4122 4123**AJAX Deletion**: 4124- No page refresh ✓ 4125- Smooth animations ✓ 4126- Stay in context ✓ 4127- Professional feel ✓ 4128 4129**Auto-Cleanup**: 4130- Empty list disappears ✓ 4131- Clean interface ✓ 4132- No clutter ✓ 4133 4134### Technical Implementation 4135 4136**AJAX Request**: 4137```javascript 4138fetch('?do=admin&page=calendar&tab=update', { 4139 method: 'POST', 4140 body: formData 4141}) 4142``` 4143 4144**DOM Manipulation**: 4145- Fade out row 4146- Remove element 4147- Show success 4148- Remove section if empty 4149 4150**Smooth Transitions**: 4151- 300ms fade animations 4152- Clean visual feedback 4153- Professional polish 4154 4155## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB 4156 4157### Improved: Update Tab Layout Reorganized 4158- **Moved:** Upload section to the top of the page 4159- **Added:** Clear Cache button next to Upload & Install button 4160- **Changed:** "Current Version" section moved below upload 4161- **Result:** Better workflow - upload first, then see version info! 4162 4163### New Layout Order 4164 4165**Before (v5.1.0)**: 4166``` 41671. Clear Cache (standalone) 41682. Current Version 41693. Recent Changes 41704. Upload New Version 41715. Warning Box 41726. Backups 4173``` 4174 4175**After (v5.1.1)**: 4176``` 41771. Upload New Version (with Clear Cache button side-by-side) 41782. Warning Box 41793. Current Version 41804. Recent Changes 41815. Backups 4182``` 4183 4184### Visual Result 4185 4186**Top of Update Tab**: 4187``` 4188┌─────────────────────────────────┐ 4189│ Upload New Version │ 4190│ ┌─────────────────────────────┐ │ 4191│ │ [Choose File] │ │ 4192│ │ ☑ Create backup first │ │ 4193│ │ ┌──────────────┬──────────┐ │ │ 4194│ │ │ Upload & │️ Clear │ │ │ 4195│ │ │ Install │ Cache │ │ │ 4196│ │ └──────────────┴──────────┘ │ │ 4197│ └─────────────────────────────┘ │ 4198│ │ 4199│ ⚠️ Important Notes │ 4200│ • Will replace all files │ 4201│ • Config preserved │ 4202│ │ 4203│ Current Version │ 4204│ Version: 5.1.1 │ 4205└─────────────────────────────────┘ 4206``` 4207 4208### Benefits 4209 4210**Better Workflow**: 4211- Primary action (upload) is first 4212- Clear cache conveniently next to install 4213- No scrolling to find upload button 4214- Logical top-to-bottom flow 4215 4216**Side-by-Side Buttons**: 4217- Upload & Install (green) 4218- Clear Cache (orange) 4219- Both common actions together 4220- Easy to access after upload 4221 4222**Improved UX**: 4223- Upload is most important → now at top 4224- Version info is reference → moved down 4225- Related actions grouped 4226- Cleaner organization 4227 4228### Button Layout 4229 4230``` 4231┌──────────────────┬──────────────┐ 4232│ Upload & │ ️ Clear │ 4233│ Install │ Cache │ 4234│ (Green) │ (Orange) │ 4235└──────────────────┴──────────────┘ 4236``` 4237 4238**Green = Primary Action** 4239**Orange = Secondary Action** 4240 4241Both easily accessible! 4242 4243## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND 4244 4245### Changed: Admin Section Backgrounds Now Use __background__ 4246- **Changed:** All section boxes now use `__background__` instead of `__background_alt__` 4247- **Result:** Cleaner, more unified admin interface! 4248 4249### Background Usage Update 4250 4251**Before (v5.0.9)**: 4252```php 4253Section boxes: bg_alt (__background_alt__) 4254Content areas: bg (__background__) 4255``` 4256 4257**After (v5.1.0)**: 4258```php 4259Section boxes: bg (__background__) 4260Content areas: bg (__background__) 4261``` 4262 4263### Why This Change? 4264 4265**More unified appearance**: 4266- Sections and content use same background 4267- Creates cleaner, more cohesive look 4268- Borders provide visual separation 4269- Matches typical admin UI patterns 4270 4271**Template color hierarchy**: 4272``` 4273__background_site__ → Outer page wrapper 4274__background__ → Content & sections (BOTH now use this) 4275__background_alt__ → Reserved for special panels/highlights 4276__background_neu__ → Special highlights 4277``` 4278 4279### Visual Result 4280 4281**Light Template**: 4282```ini 4283__background__ = "#ffffff" 4284__background_alt__ = "#e8e8e8" 4285``` 4286 4287**Before**: 4288``` 4289Admin Page: 4290┌─────────────────────┐ 4291│ ┌─────────────────┐ │ 4292│ │ Section Box │ │ ← Gray (#e8e8e8) 4293│ │ ┌─────────────┐ │ │ 4294│ │ │ Content │ │ │ ← White (#fff) 4295│ │ └─────────────┘ │ │ 4296│ └─────────────────┘ │ 4297└─────────────────────┘ 4298Two-tone appearance 4299``` 4300 4301**After**: 4302``` 4303Admin Page: 4304┌─────────────────────┐ 4305│ ┌─────────────────┐ │ 4306│ │ Section Box │ │ ← White (#fff) 4307│ │ ┌─────────────┐ │ │ 4308│ │ │ Content │ │ │ ← White (#fff) 4309│ │ └─────────────┘ │ │ 4310│ └─────────────────┘ │ 4311└─────────────────────┘ 4312Unified, clean appearance 4313Borders provide separation 4314``` 4315 4316**Dark Template**: 4317```ini 4318__background__ = "#2d2d2d" 4319__background_alt__ = "#3a3a3a" 4320``` 4321 4322**After**: 4323``` 4324Admin Page: 4325┌─────────────────────┐ 4326│ ┌─────────────────┐ │ 4327│ │ Section Box │ │ ← Dark (#2d2d2d) 4328│ │ ┌─────────────┐ │ │ 4329│ │ │ Content │ │ │ ← Dark (#2d2d2d) 4330│ │ └─────────────┘ │ │ 4331│ └─────────────────┘ │ 4332└─────────────────────┘ 4333Unified dark appearance 4334Accent borders provide definition 4335``` 4336 4337### Benefits 4338 4339**Cleaner Look**: 4340- No more alternating gray/white 4341- More professional appearance 4342- Less visual noise 4343- Unified color scheme 4344 4345**Better Consistency**: 4346- Matches modern admin UI patterns 4347- Borders define sections, not colors 4348- Simpler, cleaner design 4349- Easier on the eyes 4350 4351**Template Friendly**: 4352- Works with any background color 4353- Light or dark templates 4354- Custom colors 4355- Always looks cohesive 4356 4357### All Sections Updated 4358 4359✅ Outlook Sync config sections 4360✅ Manage Events sections 4361✅ Update Plugin sections 4362✅ Themes tab sections 4363✅ Week start day section 4364✅ All form sections 4365 4366**Complete unified theming!** 4367 4368## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB 4369 4370### Fixed: Syntax Error in Theme Cards 4371- **Fixed:** ParseError on line 4461 (Purple theme card) 4372- **Fixed:** Malformed ternary expressions from sed replacement 4373- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki) 4374- **Result:** Admin pages work correctly! 4375 4376### What Was Wrong 4377 4378The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions: 4379 4380**Before (broken)**: 4381```php 4382? '#9b59b6' : ' . $colors['border'] . ') 4383// Extra quote and dot created syntax error 4384``` 4385 4386**After (fixed)**: 4387```php 4388? '#9b59b6' : $colors['border']) 4389// Clean ternary expression 4390``` 4391 4392### All Theme Cards Fixed 4393 4394- ✅ Purple Dream card 4395- ✅ Professional Blue card 4396- ✅ Pink Bling card 4397- ✅ Wiki Default card 4398 4399### Now Working 4400 4401**Theme selection page loads** ✓ 4402**All cards display properly** ✓ 4403**Template colors applied** ✓ 4404**No syntax errors** ✓ 4405 4406## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING 4407 4408### Fixed: Themes Tab Backgrounds & Correct Template Color Mapping 4409- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites) 4410- **Fixed:** Main background now uses `__background__` instead of `__background_site__` 4411- **Fixed:** Theme selection cards use template backgrounds 4412- **Fixed:** Week start options use template backgrounds 4413- **Result:** Perfect color mapping throughout admin! 4414 4415### Color Mapping Correction 4416 4417**Before (v5.0.7)**: 4418```php 4419bg: __background_site__ // Wrong - this is outer page bg 4420bg_alt: __background_alt__ 4421``` 4422 4423**After (v5.0.8)**: 4424```php 4425bg: __background__ // Correct - main content bg 4426bg_alt: __background_alt__ 4427``` 4428 4429### Why This Matters 4430 4431**Template color hierarchy**: 4432``` 4433__background_site__ → Outer page/site background 4434__background__ → Main content area (CORRECT for admin) 4435__background_alt__ → Sections/panels 4436__background_neu__ → Highlights 4437``` 4438 4439**Admin should use**: 4440- `__background__` for input fields, content areas 4441- `__background_alt__` for section boxes, panels 4442 4443### Themes Tab Fixed 4444 4445**Removed all hardcoded colors**: 4446```php 4447Before: '#ddd', '#fff', '#dee2e6' 4448After: $colors['border'], $colors['bg'], $colors['border'] 4449``` 4450 4451**Now themed**: 4452- ✅ Week start section background 4453- ✅ Week start option backgrounds 4454- ✅ Theme card backgrounds 4455- ✅ Theme card borders 4456- ✅ All borders throughout 4457 4458### Visual Result 4459 4460**Light Template**: 4461```ini 4462__background__ = "#ffffff" 4463__background_alt__ = "#e8e8e8" 4464``` 4465 4466**Admin Before (v5.0.7)**: 4467``` 4468Input fields: #f5f5f5 (site bg - wrong) 4469Sections: #e8e8e8 (alt bg - correct) 4470``` 4471 4472**Admin After (v5.0.8)**: 4473``` 4474Input fields: #ffffff (content bg - correct!) 4475Sections: #e8e8e8 (alt bg - correct!) 4476``` 4477 4478**Dark Template**: 4479```ini 4480__background__ = "#2d2d2d" 4481__background_alt__ = "#3a3a3a" 4482``` 4483 4484**Admin After (v5.0.8)**: 4485``` 4486Input fields: #2d2d2d (content bg - perfect!) 4487Sections: #3a3a3a (alt bg - perfect!) 4488``` 4489 4490### Complete Themes Tab 4491 4492**Week Start Options**: 4493``` 4494┌─────────────────────────┐ 4495│ Week Start Day │ ← bg_alt 4496│ ┌─────────┬───────────┐ │ 4497│ │ Monday │ Sunday │ │ ← bg (when not selected) 4498│ └─────────┴───────────┘ │ 4499└─────────────────────────┘ 4500``` 4501 4502**Theme Cards**: 4503``` 4504┌─────────────────────────┐ 4505│ Matrix Edition │ ← bg (when not selected) 4506│ Classic green theme │ border (when not selected) 4507└─────────────────────────┘ 4508 4509┌═════════════════════════┐ 4510│ Purple Dream │ ← rgba green tint (when selected) 4511│ Elegant purple theme │ #00cc07 border (when selected) 4512└═════════════════════════┘ 4513``` 4514 4515### Perfect Integration 4516 4517**All admin pages now**: 4518- Content areas: `__background__` ✓ 4519- Section boxes: `__background_alt__` ✓ 4520- Borders: `__border__` ✓ 4521- Text: `__text__` ✓ 4522 4523**Matches wiki perfectly**: 4524- Same white content areas 4525- Same gray section boxes 4526- Same border colors 4527- Same text colors 4528 4529### No More Issues 4530 4531**Fixed**: 4532- ❌ Site background on content areas → ✅ Content background 4533- ❌ Hardcoded white on themes tab → ✅ Template background 4534- ❌ Hardcoded borders (#ddd) → ✅ Template borders 4535 4536**Result**: 4537- Perfect color hierarchy ✓ 4538- Correct background levels ✓ 4539- Complete template integration ✓ 4540 4541## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING 4542 4543### Fixed: All Admin Backgrounds Use Template Colors 4544- **Fixed:** All section backgrounds use `__background_alt__` 4545- **Fixed:** All content backgrounds use `__background__` 4546- **Fixed:** All borders use `__border__` 4547- **Fixed:** All text uses `__text__` 4548- **Result:** Complete admin template integration! 4549 4550### All Replacements 4551 4552**Backgrounds**: 4553```php 4554Before: background: #f9f9f9 4555After: background: ' . $colors['bg_alt'] . ' 4556 4557Before: background: #fff / background: white 4558After: background: ' . $colors['bg'] . ' 4559``` 4560 4561**Borders**: 4562```php 4563Before: border: 1px solid #ddd 4564Before: border: 1px solid #e0e0e0 4565Before: border: 1px solid #eee 4566After: border: 1px solid ' . $colors['border'] . ' 4567``` 4568 4569**Text**: 4570```php 4571Before: color: #333 4572Before: color: #666 4573After: color: ' . $colors['text'] . ' 4574``` 4575 4576### Complete Admin Coverage 4577 4578**All tabs now themed**: 4579- ✅ Manage Events tab 4580- ✅ Update Plugin tab 4581- ✅ Outlook Sync tab 4582- ✅ Themes tab 4583- ✅ Tab navigation 4584- ✅ All sections 4585- ✅ All inputs 4586- ✅ All borders 4587- ✅ All text 4588 4589### Visual Result 4590 4591**Light Template**: 4592``` 4593Admin Page: 4594┌──────────────────────────┐ 4595│ Tab Navigation │ ← Template borders 4596├──────────────────────────┤ 4597│ Section Headers │ ← bg_alt (light gray) 4598│ ┌──────────────────────┐ │ 4599│ │ Form Inputs │ │ ← bg (white) 4600│ │ Content Areas │ │ 4601│ └──────────────────────┘ │ 4602└──────────────────────────┘ 4603All template colors! ✓ 4604``` 4605 4606**Dark Template**: 4607``` 4608Admin Page: 4609┌──────────────────────────┐ 4610│ Tab Navigation │ ← Template borders 4611├──────────────────────────┤ 4612│ Section Headers │ ← bg_alt (dark gray) 4613│ ┌──────────────────────┐ │ 4614│ │ Form Inputs │ │ ← bg (darker) 4615│ │ Content Areas │ │ 4616│ └──────────────────────┘ │ 4617└──────────────────────────┘ 4618All template colors! ✓ 4619``` 4620 4621### Template Color Mapping 4622 4623**Used throughout admin**: 4624``` 4625__background_site__ → $colors['bg'] (main backgrounds) 4626__background_alt__ → $colors['bg_alt'] (section backgrounds) 4627__text__ → $colors['text'] (all text) 4628__border__ → $colors['border'] (all borders) 4629__link__ → $colors['link'] (links - future) 4630``` 4631 4632### Examples by Section 4633 4634**Manage Events**: 4635- Event list backgrounds: `bg_alt` 4636- Event item backgrounds: `bg` 4637- Borders: `border` 4638- Text: `text` 4639 4640**Update Plugin**: 4641- Section backgrounds: `bg_alt` 4642- Content areas: `bg` 4643- Borders: `border` 4644- Text: `text` 4645 4646**Outlook Sync**: 4647- Config sections: `bg_alt` 4648- Input fields: `bg` 4649- Borders: `border` 4650- Labels: `text` 4651 4652**Themes Tab**: 4653- Theme cards: `bg_alt` 4654- Preview areas: `bg` 4655- Borders: `border` 4656- Descriptions: `text` 4657 4658### Benefits 4659 4660**Seamless Integration**: 4661- Matches wiki admin area perfectly 4662- Same colors throughout wiki 4663- Professional appearance 4664- Consistent experience 4665 4666**Automatic Adaptation**: 4667- Light templates: Light admin 4668- Dark templates: Dark admin 4669- Custom templates: Uses custom colors 4670 4671**No White Boxes**: 4672- Every background themed 4673- Every border themed 4674- Every text themed 4675- Complete consistency 4676 4677### PERFECT HARMONY 4678 4679**Frontend (Calendar)**: 4680- Wiki theme uses style.ini ✓ 4681- Perfect template match ✓ 4682 4683**Backend (Admin)**: 4684- Reads same style.ini ✓ 4685- Perfect template match ✓ 4686 4687**Complete Unity**: 4688- Same colors everywhere ✓ 4689- Seamless experience ✓ 4690- Professional polish ✓ 4691 4692## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS 4693 4694### Enhanced: Month/Year Header & Admin Pages Use Template Colors 4695- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme 4696- **Added:** Admin pages read template's style.ini file 4697- **Added:** `getTemplateColors()` function in admin class 4698- **Fixed:** Tab navigation uses template text and border colors 4699- **Result:** Complete template integration everywhere! 4700 4701### Month/Year Header 4702 4703**Before**: 4704```php 4705color: __text__ // Same as primary text 4706``` 4707 4708**After (Wiki Theme)**: 4709```php 4710color: __text_neu__ // Dimmed text (subtle) 4711``` 4712 4713### Admin Pages Enhancement 4714 4715**New `getTemplateColors()` function**: 4716- Reads template's style.ini file 4717- Extracts color replacements 4718- Provides colors to all admin tabs 4719- Falls back to sensible defaults 4720 4721**Colors used**: 4722```php 4723bg: __background_site__ 4724bg_alt: __background_alt__ 4725text: __text__ 4726border: __border__ 4727link: __link__ 4728``` 4729 4730**Applied to**: 4731- Tab navigation borders 4732- Tab text colors 4733- All admin sections 4734- Ready for future enhancements 4735 4736### Visual Result 4737 4738**Calendar Header**: 4739``` 4740┌────────────────────┐ 4741│ ‹ February 2026 › │ ← __text_neu__ (dimmed) 4742└────────────────────┘ 4743Subtle and elegant ✓ 4744``` 4745 4746**Admin Navigation**: 4747``` 4748 Manage Events | Update | ⚙️ Config | Themes 4749───────────────────────────────────────────────── 4750Active tab: Green (#00cc07) 4751Inactive tabs: Template text color 4752Border: Template border color 4753``` 4754 4755### Template Integration 4756 4757**Light Template**: 4758```ini 4759__text_neu__ = "#666666" 4760__border__ = "#cccccc" 4761``` 4762**Result**: 4763- Month/Year: Medium gray (subtle) 4764- Admin borders: Light gray 4765- Tab text: Dark gray 4766 4767**Dark Template**: 4768```ini 4769__text_neu__ = "#999999" 4770__border__ = "#555555" 4771``` 4772**Result**: 4773- Month/Year: Light gray (subtle) 4774- Admin borders: Medium gray 4775- Tab text: Bright gray 4776 4777### Benefits 4778 4779**Calendar Frontend**: 4780- Month/Year header more subtle 4781- Better visual hierarchy 4782- Less prominent, more elegant 4783 4784**Admin Backend**: 4785- Uses template colors 4786- Matches wiki admin area 4787- Consistent experience 4788- Professional appearance 4789 4790### Future-Ready 4791 4792The `getTemplateColors()` function is now available for: 4793- ✅ Tab navigation (implemented) 4794- Section backgrounds (ready) 4795- Button colors (ready) 4796- Input fields (ready) 4797- Success/error messages (ready) 4798 4799**Foundation laid for complete admin theming!** 4800 4801## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS 4802 4803### Fixed: Add Event Bar & Section Headers Use Template Colors 4804- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme 4805- **Fixed:** "Today" header uses `__text_neu__` 4806- **Fixed:** "Tomorrow" header uses `__text__` 4807- **Fixed:** "Important Events" header uses `__border__` 4808- **Result:** Perfect template color integration! 4809 4810### All Changes 4811 4812**Add Event Bar (Wiki Theme)**: 4813 4814**Before**: 4815```php 4816background: #3498db // Generic blue 4817``` 4818 4819**After**: 4820```php 4821background: __background_alt__ // Template alternate bg 4822text: __text__ // Template text color 4823hover: __background_neu__ // Template neutral bg 4824``` 4825 4826**Section Headers (Wiki Theme)**: 4827 4828**Before**: 4829```php 4830Today: #ff9800 // Orange 4831Tomorrow: #4caf50 // Green 4832Important Events: #9b59b6 // Purple 4833``` 4834 4835**After**: 4836```php 4837Today: __text_neu__ // Template dimmed text 4838Tomorrow: __text__ // Template primary text 4839Important Events: __border__ // Template border color 4840``` 4841 4842### Visual Result 4843 4844**Wiki Default Theme**: 4845``` 4846Add Event Bar: 4847┌────────────────┐ 4848│ + ADD EVENT │ ← Template alt background 4849└────────────────┘ 4850 4851Sections: 4852━━━━━━━━━━━━━━━━ 4853Today ← Dimmed text color (__text_neu__) 4854• Team Meeting 4855 4856Tomorrow ← Primary text color (__text__) 4857• Code Review 4858 4859Important Events ← Border color (__border__) 4860• Project Deadline 4861``` 4862 4863### Example with DokuWiki Default Template 4864 4865**Template colors**: 4866```ini 4867__background_alt__ = "#e8e8e8" 4868__text__ = "#333333" 4869__text_neu__ = "#666666" 4870__border__ = "#cccccc" 4871``` 4872 4873**Calendar result**: 4874``` 4875Add Event Bar: Light gray (#e8e8e8) 4876Today header: Medium gray (#666666) 4877Tomorrow header: Dark gray (#333333) 4878Important Events header: Border gray (#cccccc) 4879``` 4880 4881### Example with Dark Template 4882 4883**Template colors**: 4884```ini 4885__background_alt__ = "#2d2d2d" 4886__text__ = "#e0e0e0" 4887__text_neu__ = "#999999" 4888__border__ = "#555555" 4889``` 4890 4891**Calendar result**: 4892``` 4893Add Event Bar: Dark gray (#2d2d2d) 4894Today header: Light gray (#999999) 4895Tomorrow header: Bright gray (#e0e0e0) 4896Important Events header: Medium gray (#555555) 4897``` 4898 4899### Perfect Harmony 4900 4901All sidebar elements now use template colors: 4902- ✅ Add Event bar background 4903- ✅ Add Event bar text 4904- ✅ Today section header 4905- ✅ Tomorrow section header 4906- ✅ Important Events header 4907- ✅ Calendar cells 4908- ✅ Grid backgrounds 4909- ✅ All borders 4910 4911**Complete template integration!** 4912 4913## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS 4914 4915### Fixed: Calendar Cells Use Correct Template Color 4916- **Fixed:** Calendar cells now use `__background__` from template 4917- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__` 4918- **Result:** Calendar cells match main content area background! 4919 4920### Color Mapping Update 4921 4922**Before (v5.0.3)**: 4923```php 4924cell_bg: __background_neu__ // Wrong - this is for neutral/alternate 4925``` 4926 4927**After (v5.0.4)**: 4928```php 4929cell_bg: __background__ // Correct - main content background 4930``` 4931 4932### Template Color Usage 4933 4934**Wiki Default theme now uses**: 4935``` 4936__background_site__ → Overall page background 4937__background__ → Calendar cells (main content bg) 4938__background_alt__ → Grid background, headers 4939__background_neu__ → Today cell highlight 4940__text__ → Primary text 4941__text_neu__ → Dimmed text 4942__link__ → Links, bright text 4943__border__ → All borders 4944``` 4945 4946### Visual Result 4947 4948**Before**: 4949``` 4950Calendar with template colors: 4951┌─────┬─────┬─────┐ 4952│ Mon │ Tue │ Wed │ 4953├─────┼─────┼─────┤ 4954│ 8 │ 9 │ 10 │ ← Neutral gray (wrong) 4955└─────┴─────┴─────┘ 4956``` 4957 4958**After**: 4959``` 4960Calendar with template colors: 4961┌─────┬─────┬─────┐ 4962│ Mon │ Tue │ Wed │ 4963├─────┼─────┼─────┤ 4964│ 8 │ 9 │ 10 │ ← White/content bg (correct!) 4965└─────┴─────┴─────┘ 4966``` 4967 4968### Example Template Colors 4969 4970**DokuWiki Default**: 4971```ini 4972__background__ = "#ffffff" 4973``` 4974**Result**: White calendar cells ✓ 4975 4976**Dark Template**: 4977```ini 4978__background__ = "#2d2d2d" 4979``` 4980**Result**: Dark calendar cells ✓ 4981 4982**Custom Template**: 4983```ini 4984__background__ = "#f9f9f9" 4985``` 4986**Result**: Custom color cells ✓ 4987 4988### Perfect Matching 4989 4990Calendar cells now match: 4991- ✅ Main content area background 4992- ✅ Article/page background 4993- ✅ Content box background 4994- ✅ Same as wiki text background 4995 4996**Seamless integration!** 4997 4998## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI 4999 5000### Enhanced: Wiki Default Theme Reads Template Colors 5001- **Added:** Function to read colors from DokuWiki template's style.ini file 5002- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 5003- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 5004- **Uses:** Actual template colors instead of CSS variables 5005- **Result:** Perfect color matching with any DokuWiki template! 5006 5007### How It Works 5008 5009**New Function: `getWikiTemplateColors()`** 5010 50111. **Detects** current DokuWiki template name 50122. **Reads** the template's `style.ini` file 50133. **Parses** color replacements section 50144. **Maps** template colors to calendar theme 50155. **Falls back** to CSS variables if file not found 5016 5017### Colors Read from style.ini 5018 5019**Template color replacements used**: 5020```php 5021__background_site__ → bg, header_bg 5022__background_alt__ → grid_bg, cell_today_bg 5023__background_neu__ → cell_bg 5024__text__ → text_primary 5025__text_neu__ → text_dim 5026__link__ → text_bright 5027__border__ → border, grid_border 5028``` 5029 5030### Example style.ini Mapping 5031 5032**Template style.ini**: 5033```ini 5034[replacements] 5035__background_site__ = "#f8f9fa" 5036__background_alt__ = "#e9ecef" 5037__background_neu__ = "#dee2e6" 5038__text__ = "#212529" 5039__text_neu__ = "#6c757d" 5040__link__ = "#0d6efd" 5041__border__ = "#ced4da" 5042``` 5043 5044**Calendar theme result**: 5045```php 5046bg: #f8f9fa 5047header_bg: #e9ecef 5048grid_bg: #e9ecef 5049cell_bg: #dee2e6 5050text_primary: #212529 5051text_dim: #6c757d 5052text_bright: #0d6efd 5053border: #ced4da 5054grid_border: #ced4da 5055``` 5056 5057### Before vs After 5058 5059**Before (v5.0.2)**: 5060``` 5061Wiki Default theme used: 5062- CSS variables (var(--__background__, #fff)) 5063- Required browser CSS variable support 5064- Fallback to generic colors 5065``` 5066 5067**After (v5.0.3)**: 5068``` 5069Wiki Default theme uses: 5070- Actual colors from template's style.ini 5071- Exact template color values 5072- No CSS variable dependency 5073- Perfect color matching! 5074``` 5075 5076### File Location Priority 5077 5078Checks in order: 50791. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 50802. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 50813. Falls back to CSS variables if neither found 5082 5083### Benefits 5084 5085**More accurate colors**: 5086- Uses exact template color values ✓ 5087- No CSS variable interpolation ✓ 5088- Consistent across all browsers ✓ 5089 5090**Better compatibility**: 5091- Works with older browsers ✓ 5092- No CSS variable support needed ✓ 5093- Direct color values ✓ 5094 5095**Perfect matching**: 5096- Reads template's actual colors ✓ 5097- Same colors as wiki pages ✓ 5098- Seamless integration ✓ 5099 5100### Template Examples 5101 5102**DokuWiki Default Template**: 5103``` 5104Reads: lib/tpl/dokuwiki/style.ini 5105Gets: Default DokuWiki colors 5106Result: Perfect classic DokuWiki look 5107``` 5108 5109**Bootstrap Template**: 5110``` 5111Reads: lib/tpl/bootstrap3/style.ini 5112Gets: Bootstrap color scheme 5113Result: Perfect Bootstrap integration 5114``` 5115 5116**Custom Template**: 5117``` 5118Reads: conf/tpl/mycustom/style.ini 5119Gets: Your custom colors 5120Result: Perfect custom theme match 5121``` 5122 5123### Fallback Chain 5124 51251. **Try** reading style.ini from template 51262. **If found** → Use exact colors from file 51273. **If not found** → Use CSS variables 51284. **If no CSS vars** → Use fallback colors 5129 5130**Always works, always matches!** ✓ 5131 5132## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL 5133 5134### Fixed: Wiki Default Theme Day Panel Colors 5135- **Fixed:** Day popup panel now uses DokuWiki CSS variables 5136- **Fixed:** Panel background matches wiki theme 5137- **Fixed:** Panel header matches wiki theme 5138- **Fixed:** Border colors use wiki theme 5139- **Fixed:** Text colors use wiki theme 5140- **Result:** Perfect integration with DokuWiki templates! 5141 5142### All Changes 5143 5144**Day Panel Colors (Wiki Default)**: 5145 5146**Before**: 5147```php 5148background: rgba(36, 36, 36, 0.5) // Dark gray (wrong!) 5149header: #3498db // Blue (wrong!) 5150``` 5151 5152**After**: 5153```php 5154background: var(--__background__, #fff) 5155header: var(--__background_alt__, #e8e8e8) 5156header_text: var(--__text__, #333) 5157border: var(--__border__, #ccc) 5158shadow: 0 2px 4px rgba(0, 0, 0, 0.1) 5159``` 5160 5161**Event Colors (Wiki Default)**: 5162```php 5163event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5)) 5164border_color: var(--__border__, rgba(204, 204, 204, 0.3)) 5165bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15) 5166``` 5167 5168### Before vs After 5169 5170**Before (v5.0.1)**: 5171``` 5172Wiki Default - Click Week Cell: 5173┌────────────────┐ 5174│ Monday, Feb 8 │ ← Blue header (wrong) 5175├────────────────┤ 5176│ Team Meeting │ ← Dark gray bg (wrong) 5177│ 2:00 PM │ 5178└────────────────┘ 5179Doesn't match wiki theme 5180``` 5181 5182**After (v5.0.2)**: 5183``` 5184Wiki Default - Click Week Cell: 5185 5186Light Wiki Theme: 5187┌────────────────┐ 5188│ Monday, Feb 8 │ ← Light gray header ✓ 5189├────────────────┤ 5190│ Team Meeting │ ← White bg ✓ 5191│ 2:00 PM │ Dark text ✓ 5192└────────────────┘ 5193 5194Dark Wiki Theme: 5195┌────────────────┐ 5196│ Monday, Feb 8 │ ← Dark header ✓ 5197├────────────────┤ 5198│ Team Meeting │ ← Dark bg ✓ 5199│ 2:00 PM │ Light text ✓ 5200└────────────────┘ 5201 5202Perfectly matches wiki! 5203``` 5204 5205### CSS Variables Used 5206 5207**Wiki Default theme now uses**: 5208- `--__background__` - Main background (panel body) 5209- `--__background_alt__` - Alternate bg (panel header, events) 5210- `--__text__` - Text color (header text) 5211- `--__border__` - Border color (panel border, event borders) 5212 5213**With fallbacks**: 5214```css 5215var(--__background__, #fff) /* white fallback */ 5216var(--__background_alt__, #e8e8e8) /* light gray fallback */ 5217var(--__text__, #333) /* dark text fallback */ 5218var(--__border__, #ccc) /* gray border fallback */ 5219``` 5220 5221### Perfect Adaptation 5222 5223**Light Templates**: 5224- Light panel backgrounds ✓ 5225- Dark text ✓ 5226- Subtle borders ✓ 5227- Clean appearance ✓ 5228 5229**Dark Templates**: 5230- Dark panel backgrounds ✓ 5231- Light text ✓ 5232- Visible borders ✓ 5233- Perfect contrast ✓ 5234 5235**Custom Templates**: 5236- Uses template's CSS variables ✓ 5237- Automatic adaptation ✓ 5238- Seamless integration ✓ 5239 5240### Now Truly Adaptive 5241 5242Wiki Default theme now properly uses DokuWiki CSS variables for: 5243- ✅ Calendar grid 5244- ✅ Sidebar widget 5245- ✅ Event list 5246- ✅ **Day panel** ← v5.0.2! 5247- ✅ All backgrounds 5248- ✅ All text 5249- ✅ All borders 5250 5251**Complete wiki integration!** 5252 5253## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS 5254 5255### Enhanced: Time Conflict Tooltips Now Themed 5256- **Fixed:** Conflict tooltips now match calendar theme 5257- **Added:** Theme-aware background, border, text colors 5258- **Added:** Theme-aware shadow effects 5259- **Result:** Complete visual consistency! 5260 5261### Tooltip Theming 5262 5263**Now uses theme colors for**: 5264- Background: Theme background color 5265- Border: Theme border color 5266- Header text: Theme primary text color 5267- Item text: Theme dim text color 5268- Shadow: Theme shadow color 5269 5270### Before vs After 5271 5272**Before (v5.0.0)**: 5273``` 5274Hover ⚠️ badge: 5275┌─────────────────┐ 5276│ ⚠️ Time Conflicts│ ← Default colors 5277│ • Event A │ 5278│ • Event B │ 5279└─────────────────┘ 5280``` 5281 5282**After (v5.0.1)**: 5283``` 5284Matrix Theme: 5285┌─────────────────┐ 5286│ ⚠️ Time Conflicts│ ← Green header 5287│ • Event A │ ← Green text 5288│ • Event B │ Dark green bg 5289└─────────────────┘ 5290 5291Purple Theme: 5292┌─────────────────┐ 5293│ ⚠️ Time Conflicts│ ← Purple header 5294│ • Event A │ ← Purple text 5295│ • Event B │ Dark purple bg 5296└─────────────────┘ 5297 5298Professional Theme: 5299┌─────────────────┐ 5300│ ⚠️ Time Conflicts│ ← Blue header 5301│ • Event A │ ← Dark text 5302│ • Event B │ Light bg 5303└─────────────────┘ 5304 5305Pink Theme: 5306┌─────────────────┐ 5307│ ⚠️ Time Conflicts│ ← Pink header ✨ 5308│ • Event A │ ← Pink text 5309│ • Event B │ Dark pink bg 5310└─────────────────┘ 5311 5312Wiki Default: 5313┌─────────────────┐ 5314│ ⚠️ Time Conflicts│ ← Adapts to wiki 5315│ • Event A │ ← Wiki colors 5316│ • Event B │ 5317└─────────────────┘ 5318``` 5319 5320### Now 100% Complete 5321 5322**Every tooltip themed**: 5323- ✅ Conflict tooltips 5324- ✅ All other tooltips (if any) 5325- ✅ Perfect consistency 5326 5327**Absolute perfection!** ✨ 5328 5329## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION 5330 5331### Major Milestone: Version 5.0 5332 5333This is a major release representing the completion of comprehensive theming across the entire calendar plugin. Every visual element has been carefully themed for consistency and beauty. 5334 5335### Complete Feature Set 5336 5337**5 Beautiful Themes**: 5338- Matrix Edition (Green with glow) 5339- Purple Dream (Elegant purple) 5340- Professional Blue (Clean and modern) 5341- Pink Bling (Maximum sparkle) 5342- Wiki Default (Auto-adapts to your DokuWiki theme) 5343 5344**100% Theme Coverage**: 5345- ✅ Calendar grid and cells 5346- ✅ Event boxes and borders 5347- ✅ Sidebar widget 5348- ✅ Event list panel 5349- ✅ Search functionality 5350- ✅ Edit/Add dialogs (complete) 5351- ✅ Day popup dialogs 5352- ✅ Month picker 5353- ✅ All text (primary, dim, bright) 5354- ✅ All buttons 5355- ✅ All inputs and forms 5356- ✅ All checkboxes 5357- ✅ All borders 5358- ✅ All badges and labels 5359- ✅ Event highlight effects 5360 5361**Perfect Visual Consistency**: 5362- No white pixels anywhere 5363- No unthemed elements 5364- No default colors 5365- Complete visual unity 5366 5367### Major Improvements in v5.0 5368 53691. **Complete Dialog Theming** (v4.8.5-4.8.7) 5370 - Edit event dialog fully themed 5371 - Day popup dialog fully themed 5372 - All form inputs themed 5373 - All checkboxes themed 5374 - All buttons themed 5375 53762. **Event Box Border Perfection** (v4.8.6) 5377 - All 4 borders themed (top, right, bottom, left) 5378 - Sidebar event dividers themed 5379 - Past Events toggle border themed 5380 53813. **Checkbox Field Borders** (v4.9.0) 5382 - Repeating Event section border themed 5383 - Task checkbox section border themed 5384 53854. **Wiki Default Theme** (v4.10.0) 5386 - New 5th theme 5387 - Uses DokuWiki CSS variables 5388 - Auto-adapts to any wiki template 5389 - Perfect for seamless integration 5390 53915. **Clean Text Appearance** (v4.11.0) 5392 - Removed text glow from Matrix 5393 - Removed text glow from Purple 5394 - Removed text glow from Professional 5395 - Removed text glow from Wiki Default 5396 - Kept text glow on Pink Bling only 5397 53986. **Event Highlight Effects** (v4.12.0-4.12.1) 5399 - Theme-aware highlight glow 5400 - Click event bar → event glows 5401 - 3-second themed glow effect 5402 - Smooth animations 5403 5404### See RELEASE_NOTES.md for Complete Details 5405 5406For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release. 5407 5408## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION 5409 5410### Fixed: Event Highlight Now Working 5411- **Fixed:** Used setProperty() to properly apply !important styles 5412- **Added:** Console logging for debugging 5413- **Fixed:** Proper style application with important flag 5414- **Result:** Highlight glow now works correctly! 5415 5416### Technical Fix 5417 5418**Before (not working)**: 5419```javascript 5420eventItem.style.background = color + ' !important'; // Doesn't work 5421``` 5422 5423**After (working)**: 5424```javascript 5425eventItem.style.setProperty('background', color, 'important'); // Works! 5426``` 5427 5428### Added Debug Logging 5429 5430Console now shows: 5431- "Highlighting event: [calId] [eventId] [date]" 5432- "Found event item: [element]" 5433- "Theme: [theme name]" 5434- "Highlight colors: [bg] [shadow]" 5435- "Applied highlight styles" 5436- "Removing highlight" (after 3 seconds) 5437 5438### Now Working 5439 5440Click any event bar → Event glows with theme colors ✓ 5441 5442## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW 5443 5444### ✨ Enhanced: Event Click Highlight Now Theme-Aware 5445- **Fixed:** Restored event highlight glow when clicking calendar bars 5446- **Improved:** Highlight now matches each theme's colors 5447- **Added:** Stronger glow effect for better visibility 5448- **Duration:** 3 seconds with smooth fade 5449- **Result:** Beautiful themed highlights for all themes! 5450 5451### How It Works 5452 5453When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow: 5454 5455**Matrix Theme**: 5456```javascript 5457Background: Darker green (#1a3d1a) 5458Glow: Double green glow (0 0 20px + 0 0 40px) 5459Color: rgba(0, 204, 7, 0.8) 5460``` 5461 5462**Purple Theme**: 5463```javascript 5464Background: Darker purple (#3d2b4d) 5465Glow: Double purple glow 5466Color: rgba(155, 89, 182, 0.8) 5467``` 5468 5469**Professional Theme**: 5470```javascript 5471Background: Light blue (#e3f2fd) 5472Glow: Single blue glow 5473Color: rgba(74, 144, 226, 0.4) 5474``` 5475 5476**Pink Theme**: 5477```javascript 5478Background: Darker pink (#3d2030) 5479Glow: Double pink glow ✨ 5480Color: rgba(255, 20, 147, 0.8) 5481``` 5482 5483**Wiki Theme**: 5484```javascript 5485Background: var(--__background_neu__) 5486Glow: Blue glow (adapts to wiki) 5487Color: rgba(43, 115, 183, 0.4) 5488``` 5489 5490### Visual Examples 5491 5492**Matrix - Click Event**: 5493``` 5494Calendar: 5495┌─────────────┐ 5496│ 2:00 PM │ ← Click this bar 5497└─────────────┘ 5498 5499Event List: 5500╔═════════════════════╗ 5501║ Team Meeting ║ ← GLOWS GREEN 5502║ 2:00 PM ║ for 3 seconds 5503╚═════════════════════╝ 5504 ↑↑↑ Strong green glow ↑↑↑ 5505``` 5506 5507**Purple - Click Event**: 5508``` 5509Calendar: 5510┌─────────────┐ 5511│ 4:00 PM │ ← Click 5512└─────────────┘ 5513 5514Event List: 5515╔═════════════════════╗ 5516║ Code Review ║ ← GLOWS PURPLE 5517║ 4:00 PM ║ for 3 seconds 5518╚═════════════════════╝ 5519 ↑↑↑ Strong purple glow ↑↑↑ 5520``` 5521 5522**Pink - Click Event**: 5523``` 5524Calendar: 5525┌─────────────┐ 5526│ 1:00 PM │ ← Click 5527└─────────────┘ 5528 5529Event List: 5530╔═════════════════════╗ 5531║ Lunch Date ║ ← GLOWS PINK 5532║ 1:00 PM ✨ ║ for 3 seconds 5533╚═════════════════════╝ 5534 ↑↑↑ MAXIMUM SPARKLE ↑↑↑ 5535``` 5536 5537### Glow Specifications 5538 5539**Matrix**: 5540- Background: Dark green 5541- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)` 5542- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)` 5543- Effect: Strong green pulse 5544 5545**Purple**: 5546- Background: Dark purple 5547- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)` 5548- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)` 5549- Effect: Strong purple pulse 5550 5551**Professional**: 5552- Background: Light blue 5553- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)` 5554- Effect: Subtle blue glow 5555 5556**Pink**: 5557- Background: Dark pink 5558- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)` 5559- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)` 5560- Effect: MAXIMUM SPARKLE ✨ 5561 5562**Wiki**: 5563- Background: Theme neutral color 5564- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)` 5565- Effect: Adapts to wiki theme 5566 5567### User Experience 5568 5569**Click event bar** → Event highlights with themed glow 5570**Auto-scroll** → Event scrolls into view smoothly 5571**3 second glow** → Fade out after 3 seconds 5572**Smooth transition** → 0.3s ease-in-out 5573 5574### Perfect for Finding Events 5575 5576**Large event lists**: Quickly locate the clicked event ✓ 5577**Visual feedback**: Know which event you clicked ✓ 5578**Theme consistency**: Matches your chosen theme ✓ 5579**Smooth animation**: Professional appearance ✓ 5580 5581### All Themes Covered 5582 5583- ✅ Matrix: Green glow 5584- ✅ Purple: Purple glow 5585- ✅ Professional: Blue glow 5586- ✅ Pink: Maximum pink sparkle 5587- ✅ Wiki: Adaptive glow 5588 5589**Click any event bar and watch it glow!** ✨ 5590 5591## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES 5592 5593### Changed: Text Glow Now Pink-Only 5594- **Removed:** Text shadow/glow from Matrix theme 5595- **Removed:** Text shadow/glow from Purple theme 5596- **Removed:** Text shadow/glow from Professional theme (already had none) 5597- **Removed:** Text shadow/glow from Wiki Default theme 5598- **Kept:** Text shadow/glow ONLY on Pink Bling theme 5599- **Result:** Cleaner look for Matrix, Purple, and Wiki themes! 5600 5601### All Changes 5602 5603**Before (Matrix, Purple)**: 5604```css 5605text-shadow: 0 0 2px $text_color; /* Glow effect */ 5606``` 5607 5608**After (Matrix, Purple, Professional, Wiki)**: 5609```css 5610text-shadow: none; /* Clean, no glow */ 5611``` 5612 5613**Pink Bling (unchanged)**: 5614```css 5615text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */ 5616``` 5617 5618### Text Shadow Removed From 5619 5620**Sidebar day numbers**: No glow ✓ 5621**Event titles**: No glow ✓ 5622**Event dates**: No glow ✓ 5623**Add Event button**: No glow ✓ 5624**Day popup events**: No glow ✓ 5625 5626### Before vs After 5627 5628**BEFORE (Matrix)**: 5629``` 5630Event Title ✨ ← Glowing green text 56312:00 PM ✨ ← Glowing text 5632``` 5633 5634**AFTER (Matrix)**: 5635``` 5636Event Title ← Clean green text 56372:00 PM ← Clean text 5638``` 5639 5640**Pink Bling (Still Glows)**: 5641``` 5642Event Title ✨ ← Still glowing! 56432:00 PM ✨ ← Maximum sparkle! 5644``` 5645 5646### Theme Appearances 5647 5648** Matrix Edition**: 5649- Clean green text 5650- No glow effects 5651- Professional appearance 5652- Still has border glow 5653 5654** Purple Dream**: 5655- Clean purple text 5656- No glow effects 5657- Elegant appearance 5658- Still has border glow 5659 5660** Professional Blue**: 5661- Clean text (unchanged) 5662- No glow effects 5663- Modern appearance 5664 5665** Pink Bling**: 5666- Glowing pink text ✨ 5667- Maximum glow effects 5668- Sparkle everywhere! 5669- All the bling! 5670 5671** Wiki Default**: 5672- Clean text 5673- No glow effects 5674- Matches wiki theme 5675 5676### Glow Effects Remaining 5677 5678**Border/box glow**: Still present on all themes ✓ 5679**Pink text glow**: Only on Pink Bling ✓ 5680**Shadow effects**: Still on buttons/boxes ✓ 5681 5682**Only TEXT glow removed from non-pink themes!** 5683 5684### Result 5685 5686**Cleaner, more professional look** for: 5687- Matrix ✓ 5688- Purple ✓ 5689- Professional ✓ 5690- Wiki Default ✓ 5691 5692**Maximum sparkle** for: 5693- Pink Bling ✨✓ 5694 5695**Best of both worlds!** 5696 5697## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME 5698 5699### New: Wiki Default Theme 5700- **Added:** 5th theme that automatically matches your DokuWiki template 5701- **Uses:** CSS variables from your wiki theme 5702- **Adapts:** Automatically works with light and dark themes 5703- **Perfect:** Seamless integration with any DokuWiki template 5704 5705### How It Works 5706 5707**Wiki theme uses DokuWiki CSS variables**: 5708```css 5709bg: var(--__background_site__, #f5f5f5) 5710border: var(--__border__, #ccc) 5711text_primary: var(--__text__, #333) 5712text_bright: var(--__link__, #2b73b7) 5713text_dim: var(--__text_neu__, #666) 5714cell_bg: var(--__background__, #fff) 5715grid_border: var(--__border__, #ccc) 5716``` 5717 5718**With fallbacks for older DokuWiki versions**: 5719- If CSS variables exist → Use them ✓ 5720- If not available → Use fallback values ✓ 5721 5722### All 5 Themes 5723 5724**1. Matrix Edition** (Default) 5725- Dark green with neon glow 5726- Matrix-style effects 5727- Original theme 5728 5729**2. Purple Dream** 5730- Rich purple with violet accents 5731- Elegant and sophisticated 5732- Soft glow effects 5733 5734**3. Professional Blue** 5735- Clean blue and grey 5736- Modern professional 5737- No glow effects 5738 5739**4. Pink Bling** 5740- Glamorous hot pink 5741- Maximum sparkle ✨ 5742- Hearts and diamonds 5743 5744**5. Wiki Default** ← NEW! 5745- Matches your wiki template 5746- Auto-adapts to light/dark 5747- Perfect integration 5748 5749### Examples 5750 5751**Light Wiki Template**: 5752``` 5753Wiki Default theme shows: 5754- Light backgrounds (#f5f5f5) 5755- Dark text (#333) 5756- Light inputs (#fff) 5757- Gray borders (#ccc) 5758 5759Matches perfectly! ✓ 5760``` 5761 5762**Dark Wiki Template**: 5763``` 5764Wiki Default theme shows: 5765- Dark backgrounds (from template) 5766- Light text (from template) 5767- Dark inputs (from template) 5768- Dark borders (from template) 5769 5770Matches perfectly! ✓ 5771``` 5772 5773**Bootstrap Template**: 5774``` 5775Uses Bootstrap's colors 5776Matches perfectly! ✓ 5777``` 5778 5779**Material Template**: 5780``` 5781Uses Material's colors 5782Matches perfectly! ✓ 5783``` 5784 5785### CSS Variables Used 5786 5787**DokuWiki provides**: 5788- `--__background_site__`: Page background 5789- `--__background_alt__`: Section backgrounds 5790- `--__background__`: Content backgrounds 5791- `--__text__`: Primary text color 5792- `--__link__`: Link color 5793- `--__text_neu__`: Dimmed text 5794- `--__border__`: Border color 5795- `--__background_neu__`: Neutral background 5796 5797**All with fallbacks**: 5798```css 5799var(--__background_site__, #f5f5f5) 5800/* Falls back to light gray if variable doesn't exist */ 5801``` 5802 5803### Perfect for Every Template 5804 5805**Custom templates**: Automatically adapts ✓ 5806**Light themes**: Perfect match ✓ 5807**Dark themes**: Perfect match ✓ 5808**Any DokuWiki version**: Works with fallbacks ✓ 5809 5810### Complete Theme Collection 5811 5812Now with **5 gorgeous themes**: 5813- 3 dark themes (Matrix, Purple, Pink) 5814- 1 light theme (Professional) 5815- 1 adaptive theme (Wiki Default) ← NEW! 5816 5817**Something for everyone!** 5818 5819## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS 5820 5821### Fixed: Checkbox Field Borders Themed 5822- **Fixed:** Added border-color to checkbox field divs 5823- **Fixed:** Repeating Event section border 5824- **Fixed:** Task checkbox section border 5825- **Result:** No white borders around checkboxes! 5826 5827### Changes 5828 5829**Checkbox Field Border Styling**: 5830 5831**Before**: 5832```html 5833<div class="form-field-checkbox" 5834 style="background: $bg !important;"> 5835<!-- Border shows white ✗ --> 5836``` 5837 5838**After**: 5839```php 5840<div class="form-field-checkbox" 5841 style="background: $bg !important; 5842 border-color: $grid_border !important;"> 5843<!-- Border themed ✓ --> 5844``` 5845 5846### Before vs After 5847 5848**BEFORE (v4.8.8)**: 5849``` 5850Edit Dialog: 5851┌──────────────────┐ 5852│ ☑ Repeating ║│ ← White border ✗ 5853└──────────────────┘ 5854┌──────────────────┐ 5855│ ☑ Task checkbox ║│ ← White border ✗ 5856└──────────────────┘ 5857``` 5858 5859**AFTER (v4.9.0)**: 5860``` 5861Matrix Edit Dialog: 5862┌──────────────────┐ 5863│ ☑ Repeating │ ← Green border ✓ 5864└──────────────────┘ 5865┌──────────────────┐ 5866│ ☑ Task checkbox │ ← Green border ✓ 5867└──────────────────┘ 5868``` 5869 5870### ABSOLUTE PERFECTION ACHIEVED 5871 5872**Every element themed**: 5873- ✅ All inputs 5874- ✅ All labels 5875- ✅ All sections 5876- ✅ **Checkbox field borders** ← v4.9.0! 5877- ✅ All buttons 5878- ✅ All checkboxes 5879- ✅ No white anywhere 5880 5881**100% COMPLETE!** ✨ 5882 5883## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 5884 5885### Fixed: Checkbox Field Borders Themed 5886- **Fixed:** Added border-color to checkbox field divs 5887- **Fixed:** Repeating Event section border 5888- **Fixed:** Task checkbox section border 5889- **Result:** No white borders around checkboxes! 5890 5891### Fixed: Admin Sections Respect Wiki Theme 5892- **Fixed:** All admin backgrounds use CSS variables 5893- **Fixed:** Text colors use wiki text color 5894- **Fixed:** Borders use wiki border color 5895- **Result:** Admin matches wiki theme perfectly! 5896 5897### All Changes 5898 5899**1. Checkbox Field Border Styling**: 5900 5901**Before**: 5902```html 5903<div class="form-field-checkbox" 5904 style="background: $bg !important;"> 5905<!-- Border shows white ✗ --> 5906``` 5907 5908**After**: 5909```php 5910<div class="form-field-checkbox" 5911 style="background: $bg !important; 5912 border-color: $grid_border !important;"> 5913<!-- Border themed ✓ --> 5914``` 5915 5916**2. Admin CSS Variables**: 5917 5918**Added CSS variables for wiki theme compatibility**: 5919```css 5920.calendar-admin-wrapper { 5921 background: var(--__background_site__, #f5f5f5); 5922 color: var(--__text__, #333); 5923} 5924.calendar-admin-section { 5925 background: var(--__background_alt__, #fafafa); 5926} 5927.calendar-admin-input { 5928 background: var(--__background__, #fff); 5929 color: var(--__text__, #333); 5930} 5931``` 5932 5933**Replaced hardcoded colors**: 5934```php 5935// Before: 5936background: #f9f9f9 5937background: white 5938color: #333 5939border: 1px solid #ddd 5940 5941// After: 5942background: var(--__background_alt__, #f9f9f9) 5943background: var(--__background__, #fff) 5944color: var(--__text__, #333) 5945border: 1px solid var(--__border__, #ddd) 5946``` 5947 5948### Before vs After 5949 5950**BEFORE (v4.8.8)**: 5951``` 5952Edit Dialog: 5953┌──────────────────┐ 5954│ ☑ Repeating ║│ ← White border ✗ 5955└──────────────────┘ 5956┌──────────────────┐ 5957│ ☑ Task checkbox ║│ ← White border ✗ 5958└──────────────────┘ 5959 5960Admin Page (Dark Wiki Theme): 5961┌──────────────────┐ 5962│ Light sections │ ← White boxes ✗ 5963│ Light inputs │ ← Doesn't match ✗ 5964└──────────────────┘ 5965``` 5966 5967**AFTER (v4.8.9)**: 5968``` 5969Matrix Edit Dialog: 5970┌──────────────────┐ 5971│ ☑ Repeating │ ← Green border ✓ 5972└──────────────────┘ 5973┌──────────────────┐ 5974│ ☑ Task checkbox │ ← Green border ✓ 5975└──────────────────┘ 5976 5977Admin (Dark Wiki Theme): 5978┌──────────────────┐ 5979│ Dark sections │ ← Matches wiki ✓ 5980│ Dark inputs │ ← Perfect match ✓ 5981└──────────────────┘ 5982``` 5983 5984### Admin Theme Examples 5985 5986**Light Wiki Theme**: 5987``` 5988Admin page backgrounds: Light 5989Section boxes: Light gray 5990Inputs: White 5991Borders: Gray 5992Text: Dark 5993 5994Perfect match! ✓ 5995``` 5996 5997**Dark Wiki Theme**: 5998``` 5999Admin page backgrounds: Dark 6000Section boxes: Darker gray 6001Inputs: Dark 6002Borders: Dark gray 6003Text: Light 6004 6005Perfect match! ✓ 6006``` 6007 6008**DokuWiki Default**: 6009``` 6010Uses wiki's CSS variables 6011Automatically adapts 6012Always matches! ✓ 6013``` 6014 6015### Complete Coverage 6016 6017**Edit Dialog**: 6018- ✅ All inputs themed 6019- ✅ All labels themed 6020- ✅ All sections themed 6021- ✅ **Checkbox borders** ← v4.8.9! 6022- ✅ All buttons themed 6023- ✅ No white anywhere 6024 6025**Admin Interface**: 6026- ✅ **Tab navigation** ← v4.8.9! 6027- ✅ **Section boxes** ← v4.8.9! 6028- ✅ **Input fields** ← v4.8.9! 6029- ✅ **Text colors** ← v4.8.9! 6030- ✅ **Borders** ← v4.8.9! 6031- ✅ All tabs (Manage, Update, Outlook, Themes) 6032 6033### CSS Variables Used 6034 6035**DokuWiki provides these**: 6036- `--__background_site__`: Page background 6037- `--__background_alt__`: Alternate background 6038- `--__background__`: Primary background (inputs) 6039- `--__text__`: Text color 6040- `--__border__`: Border color 6041 6042**Fallbacks provided for older DokuWiki**: 6043```css 6044var(--__background_site__, #f5f5f5) 6045var(--__background_alt__, #fafafa) 6046var(--__background__, #fff) 6047var(--__text__, #333) 6048var(--__border__, #ddd) 6049``` 6050 6051### Perfect Adaptation 6052 6053**Admin now adapts to ANY wiki theme**: 6054- Light themes → Light admin ✓ 6055- Dark themes → Dark admin ✓ 6056- Custom themes → Matches perfectly ✓ 6057- No hardcoded colors ✓ 6058 6059**Calendar themes still work**: 6060- Matrix, Purple, Professional, Pink ✓ 6061- Independent from wiki theme ✓ 6062- Admin respects wiki ✓ 6063- Calendar respects calendar theme ✓ 6064 6065### FINAL PERFECTION 6066 6067**Frontend (Calendar)**: 6068- Complete theming ✓ 6069- 4 beautiful themes ✓ 6070- Every pixel themed ✓ 6071 6072**Backend (Admin)**: 6073- Respects wiki theme ✓ 6074- Works with any theme ✓ 6075- Perfect compatibility ✓ 6076 6077**ABSOLUTELY EVERYTHING THEMED!** ✨ 6078 6079## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 6080 6081### Fixed: Task Checkboxes Now Fully Themed 6082- **Fixed:** Added background-color and border inline 6083- **Fixed:** Both PHP and JavaScript versions 6084- **Result:** No white checkboxes! 6085 6086### Fixed: Past Events Toggle Border 6087- **Fixed:** Added !important to border styling 6088- **Fixed:** Explicit top and bottom borders 6089- **Result:** No white line under toggle! 6090 6091### Fixed: Form Field Section Backgrounds 6092- **Fixed:** All form-field and form-row-group backgrounds 6093- **Fixed:** Every section in edit dialog 6094- **Result:** No white sections anywhere! 6095 6096### All Changes 6097 6098**1. Task Checkbox Styling**: 6099 6100**Before**: 6101```php 6102style="accent-color: $border !important;" 6103<!-- Only accent, background still white ✗ --> 6104``` 6105 6106**After**: 6107```php 6108style="accent-color: $border !important; 6109 background-color: $cell_bg !important; 6110 border: 2px solid $grid_border !important;" 6111<!-- Full theming ✓ --> 6112``` 6113 6114**2. Past Events Toggle Border**: 6115 6116**Before**: 6117```php 6118style="border-color: $grid_border;" 6119<!-- No !important, CSS overrides ✗ --> 6120``` 6121 6122**After**: 6123```php 6124style="border-color: $grid_border !important; 6125 border-top: 1px solid $grid_border !important; 6126 border-bottom: 1px solid $grid_border !important;" 6127<!-- Cannot be overridden ✓ --> 6128``` 6129 6130**3. Form Field Backgrounds**: 6131 6132**Before**: 6133```html 6134<div class="form-field"> 6135<div class="form-row-group"> 6136<!-- No background, shows white ✗ --> 6137``` 6138 6139**After**: 6140```php 6141<div class="form-field" style="background: $bg !important;"> 6142<div class="form-row-group" style="background: $bg !important;"> 6143<!-- Fully themed ✓ --> 6144``` 6145 6146### Before vs After 6147 6148**BEFORE (v4.8.7)**: 6149``` 6150Event: 6151□ Task checkbox ← White checkbox ✗ 6152 6153Past Events 6154▶ Past Events (3) ← White line below ✗ 6155───────────────── 6156 6157Edit Dialog: 6158┌──────────────┐ 6159│ Form fields │ ← White sections ✗ 6160└──────────────┘ 6161``` 6162 6163**AFTER (v4.8.8)**: 6164``` 6165Matrix Event: 6166☑ Task checkbox ← Green checkbox ✓ 6167 6168Past Events 6169▶ Past Events (3) ← Green border ✓ 6170───────────────── 6171 6172Matrix Edit Dialog: 6173┌──────────────┐ 6174│ Form fields │ ← Dark green ✓ 6175└──────────────┘ 6176``` 6177 6178### Complete Examples 6179 6180**Matrix Theme**: 6181``` 6182Task Checkbox: 6183☑ Checked → Green checkmark, green bg 6184☐ Unchecked → Green border, dark green bg ✓ 6185 6186Past Events Toggle: 6187▶ Past Events (3) 6188─────────────────── Green border ✓ 6189 6190Edit Dialog: 6191All sections dark green ✓ 6192No white anywhere ✓ 6193``` 6194 6195**Purple Theme**: 6196``` 6197Task Checkbox: 6198☑ Checked → Purple checkmark, purple bg 6199☐ Unchecked → Purple border, dark purple bg ✓ 6200 6201Past Events Toggle: 6202▶ Past Events (3) 6203─────────────────── Purple border ✓ 6204 6205Edit Dialog: 6206All sections dark purple ✓ 6207``` 6208 6209**Professional Theme**: 6210``` 6211Task Checkbox: 6212☑ Checked → Blue checkmark, white bg 6213☐ Unchecked → Gray border, white bg ✓ 6214 6215Past Events Toggle: 6216▶ Past Events (3) 6217─────────────────── Gray border ✓ 6218 6219Edit Dialog: 6220All sections light ✓ 6221``` 6222 6223**Pink Theme**: 6224``` 6225Task Checkbox: 6226☑ Checked → Pink checkmark, pink bg ✨ 6227☐ Unchecked → Pink border, dark pink bg ✓ 6228 6229Past Events Toggle: 6230▶ Past Events (3) 6231─────────────────── Pink border 6232 6233Edit Dialog: 6234All sections dark pink ✓ 6235``` 6236 6237### Checkbox Visual 6238 6239**Matrix - Unchecked**: 6240``` 6241┌─────┐ 6242│ │ ← Dark green background 6243│ │ Green border 6244└─────┘ 6245``` 6246 6247**Matrix - Checked**: 6248``` 6249┌─────┐ 6250│ ✓ │ ← Dark green background 6251│ │ Green checkmark 6252└─────┘ 6253``` 6254 6255### Past Events Border 6256 6257**Before**: 6258``` 6259▶ Past Events (3) 6260─────────────────── White line ✗ 6261``` 6262 6263**After**: 6264``` 6265▶ Past Events (3) 6266─────────────────── Green line ✓ (Matrix) 6267 Purple line ✓ (Purple) 6268 Gray line ✓ (Professional) 6269 Pink line ✓ (Pink) 6270``` 6271 6272### Form Field Coverage 6273 6274**All sections themed**: 6275- ✅ Title field 6276- ✅ Namespace field 6277- ✅ Description field 6278- ✅ **Date row** ← v4.8.8! 6279- ✅ **Checkbox sections** ← v4.8.8! 6280- ✅ **Recurring options** ← v4.8.8! 6281- ✅ **Time row** ← v4.8.8! 6282- ✅ **Color row** ← v4.8.8! 6283- ✅ Button footer 6284 6285**Every div has background!** ✓ 6286 6287### ABSOLUTE PERFECTION 6288 6289**Not a single white pixel**: 6290- ✅ No white checkboxes 6291- ✅ No white borders 6292- ✅ No white backgrounds 6293- ✅ No white sections 6294- ✅ No white lines 6295- ✅ No white anything 6296 6297**100% PERFECT THEMING!** ✨ 6298 6299## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING 6300 6301### Fixed: Checkbox Section Backgrounds Themed 6302- **Fixed:** Repeating Event section background 6303- **Fixed:** Task checkbox section background 6304- **Result:** No white backgrounds in dialog! 6305 6306### Fixed: Unchecked Task Checkboxes Themed 6307- **Fixed:** Added CSS for checkbox backgrounds 6308- **Fixed:** Unchecked boxes show theme colors 6309- **Result:** No white checkboxes! 6310 6311### Fixed: Day Popup Dialog Fully Themed 6312- **Fixed:** Popup container, header, body themed 6313- **Fixed:** Event items in popup themed 6314- **Fixed:** Add Event button themed 6315- **Fixed:** Footer section themed 6316- **Result:** Perfect popup theming! 6317 6318### All Changes 6319 6320**1. Checkbox Section Backgrounds**: 6321 6322**Before**: 6323```html 6324<div class="form-field-checkbox"> 6325<!-- White background ✗ --> 6326``` 6327 6328**After**: 6329```php 6330<div class="form-field-checkbox" 6331 style="background: $bg !important;"> 6332<!-- Themed ✓ --> 6333``` 6334 6335**2. Checkbox Background CSS**: 6336 6337**Added to style block**: 6338```css 6339.task-checkbox { 6340 background-color: $cell_bg !important; 6341 border: 2px solid $grid_border !important; 6342} 6343``` 6344 6345**3. Day Popup Theming**: 6346 6347**Container**: 6348```javascript 6349style="background: $bg !important; 6350 border: 2px solid $border !important; 6351 box-shadow: 0 0 20px $shadow !important;" 6352``` 6353 6354**Header**: 6355```javascript 6356style="background: $header_bg !important; 6357 color: $text_primary !important; 6358 border-bottom: 1px solid $border !important;" 6359``` 6360 6361**Footer**: 6362```javascript 6363style="background: $bg !important; 6364 border-top: 1px solid $grid_border !important;" 6365``` 6366 6367**Add Event Button**: 6368```javascript 6369style="background: $border !important; 6370 color: $bg !important; 6371 border-color: $border !important;" 6372``` 6373 6374**Event Items**: 6375```javascript 6376style="background: $cell_bg !important; 6377 border: 1px solid $grid_border !important;" 6378``` 6379 6380### Before vs After 6381 6382**BEFORE (v4.8.6)**: 6383``` 6384Edit Dialog: 6385┌──────────────────┐ 6386│ ☑ Repeating Event│ ← White background ✗ 6387├──────────────────┤ 6388│ ☑ Task checkbox │ ← White background ✗ 6389└──────────────────┘ 6390 6391Day Popup: 6392┌──────────────────┐ 6393│ Monday, Feb 8 │ ← White ✗ 6394├──────────────────┤ 6395│ Team Meeting │ ← White ✗ 6396│ 2:00 PM │ 6397├──────────────────┤ 6398│ [+ Add Event] │ ← White ✗ 6399└──────────────────┘ 6400 6401Task checkbox: ☐ ← White ✗ 6402``` 6403 6404**AFTER (v4.8.7)**: 6405``` 6406Edit Dialog (Matrix): 6407┌──────────────────┐ 6408│ ☑ Repeating Event│ ← Dark green ✓ 6409├──────────────────┤ 6410│ ☑ Task checkbox │ ← Dark green ✓ 6411└──────────────────┘ 6412 6413Day Popup (Matrix): 6414┌──────────────────┐ 6415│ Monday, Feb 8 │ ← Dark green ✓ 6416├──────────────────┤ 6417│ Team Meeting │ ← Dark green ✓ 6418│ 2:00 PM │ 6419├──────────────────┤ 6420│ [+ Add Event] │ ← Green button ✓ 6421└──────────────────┘ 6422 6423Task checkbox: ☑ ← Green ✓ 6424``` 6425 6426### Complete Examples 6427 6428**Matrix Dialog**: 6429``` 6430┌──────────────────────────┐ 6431│ ✏️ Edit Event │ 6432├──────────────────────────┤ 6433│ Title: [_________] │ 6434│ Date: [__________] │ 6435│ │ 6436│ ☑ Repeating Event │ ← Dark green bg 6437├──────────────────────────┤ 6438│ ☑ Task checkbox │ ← Dark green bg 6439├──────────────────────────┤ 6440│ [Cancel] [ Save] │ 6441└──────────────────────────┘ 6442 6443All sections themed! ✓ 6444``` 6445 6446**Matrix Day Popup**: 6447``` 6448┌──────────────────────────┐ 6449│ Monday, February 8, 2026 │ ← Green header 6450├──────────────────────────┤ 6451│ ┌──────────────────────┐ │ 6452│ │ Team Meeting │ │ ← Dark green 6453│ │ 2:00 PM │ │ 6454│ └──────────────────────┘ │ 6455│ ┌──────────────────────┐ │ 6456│ │ Code Review │ │ ← Dark green 6457│ │ 4:00 PM │ │ 6458│ └──────────────────────┘ │ 6459├──────────────────────────┤ 6460│ [+ Add Event] │ ← Green button 6461└──────────────────────────┘ 6462``` 6463 6464**Purple Day Popup**: 6465``` 6466┌──────────────────────────┐ 6467│ Monday, February 8, 2026 │ ← Purple header 6468├──────────────────────────┤ 6469│ ┌──────────────────────┐ │ 6470│ │ Team Meeting │ │ ← Dark purple 6471│ │ 2:00 PM │ │ 6472│ └──────────────────────┘ │ 6473├──────────────────────────┤ 6474│ [+ Add Event] │ ← Purple button 6475└──────────────────────────┘ 6476``` 6477 6478**Professional Day Popup**: 6479``` 6480┌──────────────────────────┐ 6481│ Monday, February 8, 2026 │ ← Light header 6482├──────────────────────────┤ 6483│ ┌──────────────────────┐ │ 6484│ │ Team Meeting │ │ ← White 6485│ │ 2:00 PM │ │ 6486│ └──────────────────────┘ │ 6487├──────────────────────────┤ 6488│ [+ Add Event] │ ← Blue button 6489└──────────────────────────┘ 6490``` 6491 6492**Pink Day Popup**: 6493``` 6494┌──────────────────────────┐ 6495│ Monday, February 8, 2026 │ ← Pink header ✨ 6496├──────────────────────────┤ 6497│ ┌──────────────────────┐ │ 6498│ │ Team Meeting │ │ ← Dark pink 6499│ │ 2:00 PM │ │ 6500│ └──────────────────────┘ │ 6501├──────────────────────────┤ 6502│ [+ Add Event] │ ← Pink button 6503└──────────────────────────┘ 6504``` 6505 6506### Checkbox Theming 6507 6508**Unchecked boxes now themed**: 6509``` 6510Matrix: 6511☐ → Dark green bg, green border ✓ 6512 6513Purple: 6514☐ → Dark purple bg, purple border ✓ 6515 6516Professional: 6517☐ → White bg, gray border ✓ 6518 6519Pink: 6520☐ → Dark pink bg, pink border ✓ 6521``` 6522 6523### Complete Coverage 6524 6525**Edit Dialog - All Sections**: 6526- ✅ Header 6527- ✅ All inputs 6528- ✅ All labels 6529- ✅ **Checkbox sections** ← v4.8.7! 6530- ✅ Recurring options 6531- ✅ Button footer 6532- ✅ All checkboxes (checked & unchecked) 6533 6534**Day Popup - All Elements**: 6535- ✅ **Popup container** ← v4.8.7! 6536- ✅ **Header** ← v4.8.7! 6537- ✅ **Body** ← v4.8.7! 6538- ✅ **Event items** ← v4.8.7! 6539- ✅ **Namespace badges** ← v4.8.7! 6540- ✅ **Footer** ← v4.8.7! 6541- ✅ **Add Event button** ← v4.8.7! 6542- ✅ **No events message** ← v4.8.7! 6543 6544**Absolutely every dialog element themed!** ✨ 6545 6546### Perfect Theming Achievement 6547 6548**Every UI component in entire plugin**: 6549- ✅ Calendar grid 6550- ✅ Sidebar widget 6551- ✅ Event list 6552- ✅ Search bar 6553- ✅ Event boxes 6554- ✅ Edit dialog (complete) 6555- ✅ **Day popup** ← v4.8.7! 6556- ✅ Month picker 6557- ✅ All text 6558- ✅ All buttons 6559- ✅ All inputs 6560- ✅ **All checkboxes** ← v4.8.7! 6561- ✅ All borders 6562- ✅ All badges 6563- ✅ All backgrounds 6564 6565**NO WHITE ANYWHERE!** 6566 6567**100% COMPLETE THEMING ACHIEVED!** ✨ 6568 6569## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS 6570 6571### Fixed: Dialog Checkbox Sections Themed 6572- **Fixed:** Recurring options section background themed 6573- **Fixed:** Section has themed border accent 6574- **Result:** No white sections in dialog! 6575 6576### Fixed: Dialog Button Section Themed 6577- **Fixed:** Button area background themed 6578- **Fixed:** Top border separator themed 6579- **Result:** Complete dialog theming! 6580 6581### Fixed: Event Box Borders Themed 6582- **Fixed:** Top, right, bottom borders now themed 6583- **Fixed:** Left border remains event color 6584- **Result:** Perfect event boxes! 6585 6586### All Changes 6587 6588**1. Recurring Options Section**: 6589 6590**Before**: 6591```html 6592<div class="recurring-options" style="display:none;"> 6593<!-- White background ✗ --> 6594``` 6595 6596**After**: 6597```php 6598<div class="recurring-options" 6599 style="display:none; 6600 background: $bg !important; 6601 padding: 8px; 6602 border-left: 2px solid $border; 6603 margin-left: 4px;"> 6604<!-- Themed with accent border ✓ --> 6605``` 6606 6607**2. Dialog Actions Section**: 6608 6609**Before**: 6610```html 6611<div class="dialog-actions-sleek"> 6612<!-- White background ✗ --> 6613``` 6614 6615**After**: 6616```php 6617<div class="dialog-actions-sleek" 6618 style="background: $bg !important; 6619 border-top: 1px solid $grid_border !important;"> 6620<!-- Themed with separator ✓ --> 6621``` 6622 6623**3. Event Box Borders**: 6624 6625**Before**: 6626```php 6627border-left-color: $event_color; 6628<!-- Only left border colored ✗ --> 6629``` 6630 6631**After**: 6632```php 6633border-left-color: $event_color; 6634border-top: 1px solid $grid_border !important; 6635border-right: 1px solid $grid_border !important; 6636border-bottom: 1px solid $grid_border !important; 6637<!-- All borders themed! ✓ --> 6638``` 6639 6640### Before vs After 6641 6642**BEFORE (v4.8.5)**: 6643``` 6644Dialog: 6645┌────────────────┐ 6646│ ☑ Repeating │ 6647├────────────────┤ ← White section ✗ 6648│ Repeat: Daily │ 6649│ Until: [____] │ 6650├────────────────┤ 6651│ [Cancel] [Save]│ ← White footer ✗ 6652└────────────────┘ 6653 6654Event Box: 6655┌────────────┐ 6656│Team Meeting│ ← White borders ✗ 6657│2:00 PM │ 6658└────────────┘ 6659``` 6660 6661**AFTER (v4.8.6)**: 6662``` 6663Matrix Dialog: 6664┌────────────────┐ 6665│ ☑ Repeating │ 6666├────────────────┤ ← Dark green ✓ 6667│ Repeat: Daily │ Green accent border 6668│ Until: [____] │ 6669├────────────────┤ 6670│ [Cancel] [Save]│ ← Dark green ✓ 6671└────────────────┘ 6672 6673Matrix Event Box: 6674┌────────────┐ 6675│Team Meeting│ ← Green borders ✓ 6676│2:00 PM │ 6677└────────────┘ 6678``` 6679 6680### Dialog Section Examples 6681 6682**Matrix Theme**: 6683``` 6684┌──────────────────────────┐ 6685│ ✏️ Edit Event │ 6686├──────────────────────────┤ 6687│ ☑ Repeating Event │ 6688├║─────────────────────────┤ Green accent 6689│║ Repeat Every: Daily │ Dark green bg 6690│║ Repeat Until: [_____] │ 6691└──────────────────────────┘ 6692 [Cancel] [ Save] ← Dark green bg 6693──────────────────────────── Green border 6694``` 6695 6696**Purple Theme**: 6697``` 6698┌──────────────────────────┐ 6699│ ☑ Repeating Event │ 6700├║─────────────────────────┤ Purple accent 6701│║ Repeat options... │ Dark purple bg 6702└──────────────────────────┘ 6703 [Cancel] [ Save] ← Dark purple bg 6704──────────────────────────── Purple border 6705``` 6706 6707**Professional Theme**: 6708``` 6709┌──────────────────────────┐ 6710│ ☑ Repeating Event │ 6711├║─────────────────────────┤ Blue accent 6712│║ Repeat options... │ Light bg 6713└──────────────────────────┘ 6714 [Cancel] [ Save] ← Light bg 6715──────────────────────────── Gray border 6716``` 6717 6718**Pink Theme**: 6719``` 6720┌──────────────────────────┐ 6721│ ☑ Repeating Event ✨ │ 6722├║─────────────────────────┤ Pink accent 6723│║ Repeat options... │ Dark pink bg 6724└──────────────────────────┘ 6725 [Cancel] [ Save] ← Dark pink bg 6726──────────────────────────── Pink border 6727``` 6728 6729### Event Box Border Visual 6730 6731**Before (v4.8.5)**: 6732``` 6733Left border only: 6734█ Team Meeting 6735█ 2:00 PM 6736█ [Edit] [Delete] 6737 6738Only event color on left ✗ 6739White on other 3 sides ✗ 6740``` 6741 6742**After (v4.8.6)**: 6743``` 6744All borders themed: 6745┌─────────────┐ 6746█Team Meeting │ ← Top: themed 6747█2:00 PM │ ← Right: themed 6748█[Edit][Del] │ ← Bottom: themed 6749└─────────────┘ 6750 6751Left: Event color ✓ 6752Other 3: Theme grid_border ✓ 6753``` 6754 6755### Matrix Event Box: 6756``` 6757┌─────────────┐ Green border 6758│Team Meeting │ 6759│2:00 PM │ 6760└─────────────┘ Green border 6761↑ 6762Green left bar 6763``` 6764 6765### Purple Event Box: 6766``` 6767┌─────────────┐ Purple border 6768│Team Meeting │ 6769│2:00 PM │ 6770└─────────────┘ Purple border 6771↑ 6772Purple left bar 6773``` 6774 6775### Professional Event Box: 6776``` 6777┌─────────────┐ Gray border 6778│Team Meeting │ 6779│2:00 PM │ 6780└─────────────┘ Gray border 6781↑ 6782Event color left bar 6783``` 6784 6785### Complete Dialog Coverage 6786 6787**All sections themed**: 6788- ✅ Dialog header 6789- ✅ Form inputs 6790- ✅ Checkbox labels 6791- ✅ **Recurring options** ← v4.8.6! 6792- ✅ **Button section** ← v4.8.6! 6793- ✅ All labels 6794- ✅ All buttons 6795 6796**No white sections!** ✓ 6797 6798### Complete Event Box Coverage 6799 6800**All borders themed**: 6801- ✅ Left border (event color) 6802- ✅ **Top border** ← v4.8.6! 6803- ✅ **Right border** ← v4.8.6! 6804- ✅ **Bottom border** ← v4.8.6! 6805- ✅ Background 6806- ✅ Text 6807 6808**Perfect box outline!** ✓ 6809 6810### Visual Perfection 6811 6812**Matrix theme event list**: 6813``` 6814┌─────────────┐ 6815│Team Meeting │ ← Green box 6816│2:00 PM │ 6817└─────────────┘ 6818┌─────────────┐ 6819│Code Review │ ← Green box 6820│4:00 PM │ 6821└─────────────┘ 6822 6823All borders green! ✓ 6824``` 6825 6826**ABSOLUTE PERFECT THEMING!** ✨ 6827 6828## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS 6829 6830### Fixed: Event Dialog Fully Themed 6831- **Fixed:** Dialog background, header, inputs all themed 6832- **Fixed:** All labels, checkboxes, selects themed 6833- **Fixed:** Save and Cancel buttons themed 6834- **Result:** Dialog matches theme perfectly! 6835 6836### Fixed: Sidebar Event Borders Properly Themed 6837- **Fixed:** Event divider borders use grid_border color 6838- **Fixed:** Clean, subtle themed dividers 6839- **Result:** No more white borders in sidebar! 6840 6841### All Changes 6842 6843**1. Event Dialog Theming**: 6844 6845**Dialog container**: 6846```php 6847background: $themeStyles['bg'] !important; 6848border: 2px solid $themeStyles['border'] !important; 6849box-shadow: 0 0 20px $shadow !important; 6850``` 6851 6852**Dialog header**: 6853```php 6854background: $themeStyles['header_bg'] !important; 6855color: $themeStyles['text_primary'] !important; 6856border-bottom: 1px solid $border !important; 6857``` 6858 6859**All form inputs** (text, date, select, textarea): 6860```php 6861background: $themeStyles['cell_bg'] !important; 6862color: $themeStyles['text_primary'] !important; 6863border-color: $themeStyles['grid_border'] !important; 6864``` 6865 6866**All labels**: 6867```php 6868color: $themeStyles['text_primary'] !important; 6869``` 6870 6871**Checkboxes**: 6872```php 6873accent-color: $themeStyles['border'] !important; 6874``` 6875 6876**Buttons**: 6877```php 6878// Cancel button: 6879background: $cell_bg !important; 6880color: $text_primary !important; 6881 6882// Save button: 6883background: $border !important; 6884color: $bg !important; (or white for professional) 6885``` 6886 6887**2. Sidebar Event Borders**: 6888 6889**Before**: 6890```php 6891border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded 6892``` 6893 6894**After**: 6895```php 6896borderColor = $themeStyles['grid_border']; 6897border-bottom: 1px solid $borderColor !important; 6898``` 6899 6900### Before vs After 6901 6902**BEFORE (v4.8.4)**: 6903``` 6904Event Dialog: 6905┌────────────────┐ 6906│ Add Event │ ← White background ✗ 6907│ Title: [_____] │ ← White inputs ✗ 6908│ Date: [_____] │ 6909│ [Cancel] [Save]│ ← Default buttons ✗ 6910└────────────────┘ 6911 6912Sidebar Events: 6913Event 1 ──────── ← White border ✗ 6914Event 2 ──────── ← White border ✗ 6915``` 6916 6917**AFTER (v4.8.5)**: 6918``` 6919Event Dialog (Matrix): 6920┌────────────────┐ 6921│ Add Event │ ← Dark green background ✓ 6922│ Title: [_____] │ ← Dark green inputs ✓ 6923│ Date: [_____] │ ← Green text ✓ 6924│ [Cancel] [Save]│ ← Themed buttons ✓ 6925└────────────────┘ 6926 6927Sidebar Events (Matrix): 6928Event 1 ──────── ← Green border ✓ 6929Event 2 ──────── ← Green border ✓ 6930``` 6931 6932### Dialog Examples by Theme 6933 6934**Matrix Dialog**: 6935``` 6936┌──────────────────────────┐ 6937│ ✏️ Edit Event │ ← Dark green header 6938├──────────────────────────┤ 6939│ Title │ ← Green labels 6940│ [Team Meeting________] │ ← Dark green input 6941│ │ 6942│ Start Date │ 6943│ [2026-02-08__] │ ← Dark green input 6944│ │ 6945│ Start Time │ 6946│ [2:00 PM ▼] │ ← Green select 6947│ │ 6948│ ☑ Repeating Event │ ← Green checkbox 6949│ │ 6950│ [Cancel] [ Save] │ ← Themed buttons 6951└──────────────────────────┘ 6952 6953Everything green! ✓ 6954``` 6955 6956**Purple Dialog**: 6957``` 6958┌──────────────────────────┐ 6959│ ✏️ Edit Event │ ← Dark purple header 6960├──────────────────────────┤ 6961│ [Inputs_______________] │ ← Dark purple inputs 6962│ ☑ Checkboxes │ ← Purple accent 6963│ [Cancel] [ Save] │ ← Purple buttons 6964└──────────────────────────┘ 6965``` 6966 6967**Professional Dialog**: 6968``` 6969┌──────────────────────────┐ 6970│ ✏️ Edit Event │ ← Light gradient header 6971├──────────────────────────┤ 6972│ [Inputs_______________] │ ← White inputs 6973│ ☑ Checkboxes │ ← Blue accent 6974│ [Cancel] [ Save] │ ← Blue save button 6975└──────────────────────────┘ 6976``` 6977 6978**Pink Dialog**: 6979``` 6980┌──────────────────────────┐ 6981│ ✏️ Edit Event │ ← Dark pink header ✨ 6982├──────────────────────────┤ 6983│ [Inputs_______________] │ ← Dark pink inputs 6984│ ☑ Checkboxes │ ← Pink accent 6985│ [Cancel] [ Save] │ ← Pink buttons 6986└──────────────────────────┘ 6987``` 6988 6989### Complete Dialog Element Coverage 6990 6991**All form elements themed**: 6992- ✅ Dialog container 6993- ✅ Dialog header 6994- ✅ Close button (×) 6995- ✅ Title input 6996- ✅ Namespace search 6997- ✅ Namespace dropdown 6998- ✅ Description textarea 6999- ✅ Start date input 7000- ✅ End date input 7001- ✅ Recurring checkbox 7002- ✅ Recurrence type select 7003- ✅ Recurrence end date 7004- ✅ Start time select 7005- ✅ End time select 7006- ✅ Color select 7007- ✅ Custom color picker 7008- ✅ Task checkbox 7009- ✅ All labels 7010- ✅ Cancel button 7011- ✅ Save button 7012 7013**Every single dialog element themed!** 7014 7015### Sidebar Border Example 7016 7017**Matrix Sidebar**: 7018``` 7019┌────────────────┐ 7020│ Today │ ← Green section header 7021├────────────────┤ 7022│ Team Meeting │ 7023│ 2:00 PM │ 7024├────────────────┤ ← Green border (grid_border) 7025│ Code Review │ 7026│ 4:00 PM │ 7027├────────────────┤ ← Green border 7028│ Stand-up │ 7029│ All day │ 7030└────────────────┘ 7031 7032Subtle green dividers! ✓ 7033``` 7034 7035### Complete Achievement 7036 7037**Every UI element themed**: 7038- ✅ Calendar 7039- ✅ Sidebar widget 7040- ✅ Event list 7041- ✅ Search bar 7042- ✅ **Event dialog** ← v4.8.5! 7043- ✅ Month picker 7044- ✅ **Sidebar dividers** ← v4.8.5! 7045- ✅ All text 7046- ✅ All inputs 7047- ✅ All buttons 7048- ✅ All borders 7049- ✅ All checkboxes 7050 7051**ABSOLUTE COMPLETE THEMING!** ✨ 7052 7053## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS 7054 7055### Fixed: Professional Theme Background Consistency 7056- **Fixed:** Container and event backgrounds now match sidebar 7057- **Fixed:** Lighter, cleaner appearance 7058- **Fixed:** Better contrast and readability 7059- **Result:** Professional theme looks cohesive! 7060 7061### The Problem 7062 7063**v4.8.3 Professional theme**: 7064``` 7065Sidebar: Light background (#f5f7fa) 7066Calendar: Medium background (#e8ecf1) ← Didn't match! 7067Events: Light background (#f5f7fa) 7068 7069Inconsistent! ✗ 7070``` 7071 7072### The Fix 7073 7074**Updated Professional theme colors for consistency**: 7075 7076```php 7077// Before: 7078'bg' => '#e8ecf1', // Medium gray-blue 7079'cell_bg' => '#f5f7fa', // Very light 7080'grid_bg' => '#d5dbe3', // Medium-dark 7081 7082// After: 7083'bg' => '#f5f7fa', // Very light (matches sidebar) 7084'cell_bg' => '#ffffff', // Pure white (clean) 7085'grid_bg' => '#e8ecf1', // Subtle contrast 7086'grid_border' => '#d0d7de', // Softer borders 7087``` 7088 7089### Before vs After 7090 7091**BEFORE (v4.8.3)**: 7092``` 7093Professional Theme: 7094┌────────────────┐ 7095│ Calendar │ ← Medium gray (#e8ecf1) 7096│ ┌────────────┐ │ 7097│ │ Event │ │ ← Light (#f5f7fa) 7098│ └────────────┘ │ 7099└────────────────┘ 7100 7101Sidebar: 7102┌────────────────┐ 7103│ Widget │ ← Light (#f5f7fa) 7104└────────────────┘ 7105 7106Backgrounds don't match! ✗ 7107``` 7108 7109**AFTER (v4.8.4)**: 7110``` 7111Professional Theme: 7112┌────────────────┐ 7113│ Calendar │ ← Light (#f5f7fa) 7114│ ┌────────────┐ │ 7115│ │ Event │ │ ← White (#ffffff) 7116│ └────────────┘ │ 7117└────────────────┘ 7118 7119Sidebar: 7120┌────────────────┐ 7121│ Widget │ ← Light (#f5f7fa) 7122└────────────────┘ 7123 7124Perfect match! ✓ 7125``` 7126 7127### New Professional Theme Colors 7128 7129**Backgrounds**: 7130- Container: `#f5f7fa` (light blue-gray) 7131- Events: `#ffffff` (pure white) 7132- Grid: `#e8ecf1` (subtle contrast) 7133 7134**Text**: 7135- Primary: `#2c3e50` (dark blue-gray) 7136- Bright: `#4a90e2` (blue accent) 7137- Dim: `#7f8c8d` (medium gray) 7138 7139**Borders**: 7140- Main: `#4a90e2` (blue) 7141- Grid: `#d0d7de` (soft gray) 7142 7143**Header**: 7144- Gradient: `#ffffff` → `#f5f7fa` 7145 7146### Visual Example 7147 7148**Professional Theme Now**: 7149``` 7150┌─────────────────────────────┐ 7151│ February 2026 │ ← White to light gradient 7152├─┬─┬─┬─┬─┬─┬─┬───────────────┤ 7153│S│M│T│W│T│F│S│ │ ← Light background 7154├─┼─┼─┼─┼─┼─┼─┤ │ 7155│ │ │1│2│3│4│5│ Event List │ ← White events 7156│ │ │ │ │ │ │ │ ┌───────────┐ │ 7157│ │ │ │ │[8]│ │ │ Meeting │ │ ← White on light 7158└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘ 7159 7160Clean, professional look! ✓ 7161``` 7162 7163### Comparison with Other Themes 7164 7165**Matrix** (dark): 7166- Container: #242424 (dark green) 7167- Events: #242424 (dark green) 7168- Consistent dark theme ✓ 7169 7170**Purple** (dark): 7171- Container: #1a0d14 (dark purple) 7172- Events: #2a2030 (dark purple) 7173- Consistent dark theme ✓ 7174 7175**Professional** (light): 7176- Container: #f5f7fa (light blue) 7177- Events: #ffffff (white) 7178- Consistent light theme ✓ 7179 7180**Pink** (dark): 7181- Container: #1a0d14 (dark pink) 7182- Events: #1a0d14 (dark pink) 7183- Consistent dark theme ✓ 7184 7185**All themes now consistent!** 7186 7187### Better Contrast 7188 7189**Professional theme improvements**: 7190 7191**Readability**: 7192- Dark text (#2c3e50) on white/light backgrounds ✓ 7193- Excellent contrast ratio ✓ 7194- Easy on the eyes ✓ 7195 7196**Visual hierarchy**: 7197- White events pop against light container ✓ 7198- Blue accents stand out ✓ 7199- Clean, modern look ✓ 7200 7201**Professional appearance**: 7202- Lighter = more corporate/business feel ✓ 7203- Clean whites = premium quality ✓ 7204- Subtle grays = sophisticated ✓ 7205 7206### Complete Theme Consistency 7207 7208**All themes now have matching backgrounds**: 7209 7210**Matrix**: 7211- Sidebar & Calendar both dark green ✓ 7212 7213**Purple**: 7214- Sidebar & Calendar both dark purple ✓ 7215 7216**Professional**: 7217- Sidebar & Calendar both light ✓ (v4.8.4!) 7218 7219**Pink**: 7220- Sidebar & Calendar both dark pink ✓ 7221 7222**Perfect visual unity across all views!** ✨ 7223 7224## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES 7225 7226### Fixed: Bold Text in Descriptions Themed 7227- **Fixed:** **Bold text** now uses theme primary color 7228- **Fixed:** Both `**text**` and `__text__` syntax themed 7229- **Result:** Bold text matches theme! 7230 7231### Fixed: Search Bar Fully Themed 7232- **Fixed:** Search input has !important on all styles 7233- **Fixed:** Icon and placeholder text themed 7234- **Result:** Search bar perfectly themed! 7235 7236### Fixed: Sidebar Event Boxes Themed 7237- **Fixed:** Event borders in sidebar now use theme grid_border color 7238- **Fixed:** Borders have !important flag 7239- **Result:** Sidebar boxes match theme! 7240 7241### All Changes 7242 7243**1. Bold Text Styling**: 7244 7245**Before**: 7246```html 7247<strong>Bold text</strong> ← Default black 7248``` 7249 7250**After**: 7251```php 7252<strong style="color: $text_primary !important; font-weight:bold;"> 7253 Bold text 7254</strong> 7255 7256Matrix: Green bold ✓ 7257Purple: Lavender bold ✓ 7258Professional: Dark bold ✓ 7259Pink: Pink bold ✓ 7260``` 7261 7262**2. Search Bar**: 7263 7264**Before**: 7265```php 7266style="background: $bg; color: $text;" 7267Could be overridden by CSS 7268``` 7269 7270**After**: 7271```php 7272style="background: $bg !important; 7273 color: $text_primary !important; 7274 border-color: $grid_border !important;" 7275 7276Cannot be overridden! ✓ 7277``` 7278 7279**3. Sidebar Event Boxes**: 7280 7281**Before**: 7282```php 7283$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded 7284``` 7285 7286**After**: 7287```php 7288$borderColor = $themeStyles['grid_border']; // From theme 7289border-bottom: 1px solid $borderColor !important; 7290 7291Matrix: Green borders ✓ 7292Purple: Purple borders ✓ 7293Professional: Gray borders ✓ 7294Pink: Pink borders ✓ 7295``` 7296 7297### Before vs After 7298 7299**BEFORE (v4.8.2)**: 7300``` 7301Event description: 7302"Please review **Q1 Goals** carefully" 7303 ↑ 7304 Black bold ✗ 7305 7306Search bar: 7307[ Search...] ← Gray placeholder ✗ 7308 7309Sidebar: 7310┌────────────┐ 7311│ Event 1 │ 7312├────────────┤ ← Gray border ✗ 7313│ Event 2 │ 7314└────────────┘ 7315``` 7316 7317**AFTER (v4.8.3)**: 7318``` 7319Matrix Theme: 7320 7321Event description: 7322"Please review **Q1 Goals** carefully" 7323 ↑ 7324 Green bold ✓ 7325 7326Search bar: 7327[ Search...] ← Green themed ✓ 7328 7329Sidebar: 7330┌────────────┐ 7331│ Event 1 │ 7332├────────────┤ ← Green border ✓ 7333│ Event 2 │ 7334└────────────┘ 7335``` 7336 7337### Examples by Theme 7338 7339**Matrix Theme**: 7340``` 7341Description: 7342"Check **important notes** and links" 7343 ↑ 7344 Green bold 7345 7346Sidebar boxes: 7347Event 1 7348───────── Green border 7349Event 2 7350───────── Green border 7351``` 7352 7353**Purple Theme**: 7354``` 7355Description: 7356"Review **agenda items** before meeting" 7357 ↑ 7358 Lavender bold 7359 7360Sidebar boxes: 7361Event 1 7362───────── Purple border 7363Event 2 7364───────── Purple border 7365``` 7366 7367**Professional Theme**: 7368``` 7369Description: 7370"Update **quarterly reports** by Friday" 7371 ↑ 7372 Dark bold 7373 7374Sidebar boxes: 7375Event 1 7376───────── Gray border 7377Event 2 7378───────── Gray border 7379``` 7380 7381**Pink Theme**: 7382``` 7383Description: 7384"Don't forget **party supplies** ✨" 7385 ↑ 7386 Pink bold 7387 7388Sidebar boxes: 7389Event 1 7390───────── Pink border 7391Event 2 ✨ 7392───────── Pink border 7393``` 7394 7395### Complete Formatting Coverage 7396 7397**Text formatting themed**: 7398- ✅ Regular text 7399- ✅ **Bold text** ← NEW! 7400- ✅ Links 7401- ✅ Italic text (inherits) 7402- ✅ Code (inherits) 7403 7404**UI elements themed**: 7405- ✅ Search bar ← Enhanced! 7406- ✅ Search icon ← Enhanced! 7407- ✅ Search placeholder ← Enhanced! 7408- ✅ Sidebar borders ← NEW! 7409- ✅ Event borders 7410- ✅ Badges 7411- ✅ Buttons 7412 7413**Every element perfectly themed!** 7414 7415### Search Bar Coverage 7416 7417**All aspects themed**: 7418- Background: Theme cell_bg ✓ 7419- Text color: Theme text_primary ✓ 7420- Border: Theme grid_border ✓ 7421- Placeholder: Inherits text color ✓ 7422- Icon (): In placeholder ✓ 7423- Clear button (✕): Themed ✓ 7424 7425**Cannot be overridden!** (all have !important) 7426 7427### Sidebar Event Box Styling 7428 7429**Consistent borders**: 7430``` 7431Matrix: 7432╔════════════╗ 7433║ Event 1 ║ 7434╟────────────╢ ← grid_border color 7435║ Event 2 ║ 7436╚════════════╝ 7437 7438All themes match perfectly! ✓ 7439``` 7440 7441### Complete Theme Achievement 7442 7443**Every single element themed**: 7444- ✅ Backgrounds 7445- ✅ Text (regular) 7446- ✅ Text (bold) ← v4.8.3! 7447- ✅ Links 7448- ✅ Badges 7449- ✅ Buttons 7450- ✅ Checkboxes 7451- ✅ Icons 7452- ✅ Borders 7453- ✅ Search bar ← Enhanced v4.8.3! 7454- ✅ Sidebar boxes ← v4.8.3! 7455- ✅ Today marker 7456- ✅ Calendar grid 7457- ✅ Event panels 7458 7459**ABSOLUTE PERFECTION!** ✨ 7460 7461## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS 7462 7463### Fixed: Links in Descriptions Now Themed 7464- **Fixed:** All links in event descriptions now use theme color 7465- **Fixed:** DokuWiki links [[page|text]] themed 7466- **Fixed:** Markdown links [text](url) themed 7467- **Fixed:** Plain URLs themed 7468- **Result:** Links match theme perfectly! 7469 7470### The Problem 7471 7472**v4.8.1 behavior**: 7473``` 7474Event description: 7475"Check out https://example.com" ← Blue default link ✗ 7476"See [[wiki:page|docs]]" ← Blue default link ✗ 7477``` 7478 7479### The Fix 7480 7481**Added inline color styling to ALL link types**: 7482 7483```php 7484// Get theme colors: 7485$linkColor = $themeStyles['border'] . ' !important'; 7486$linkStyle = ' style="color:' . $linkColor . ';"'; 7487 7488// Apply to links: 7489<a href="..." style="color: #00cc07 !important;">link</a> 7490``` 7491 7492**All link types themed**: 74931. DokuWiki syntax: `[[page|text]]` 74942. Markdown syntax: `[text](url)` 74953. Plain URLs: `https://example.com` 7496 7497### Before vs After 7498 7499**BEFORE (v4.8.1)**: 7500``` 7501Matrix Theme Description: 7502"Visit https://example.com for more info" 7503 ↑ 7504 Blue link ✗ (doesn't match green theme) 7505``` 7506 7507**AFTER (v4.8.2)**: 7508``` 7509Matrix Theme Description: 7510"Visit https://example.com for more info" 7511 ↑ 7512 Green link ✓ (matches theme!) 7513``` 7514 7515### Link Colors by Theme 7516 7517**Matrix**: 7518- Links: Green (#00cc07) !important 7519- Matches: Border, badges, highlights 7520 7521**Purple**: 7522- Links: Purple (#9b59b6) !important 7523- Matches: Border, badges, highlights 7524 7525**Professional**: 7526- Links: Blue (#4a90e2) !important 7527- Matches: Border, badges, highlights 7528 7529**Pink**: 7530- Links: Hot Pink (#ff1493) !important 7531- Matches: Border, badges, highlights ✨ 7532 7533### Examples 7534 7535**Matrix Description with Links**: 7536``` 7537Event: Team Meeting 7538Description: 7539"Review [[wiki:q1goals|Q1 Goals]] 7540and visit https://metrics.com" 7541 7542Both links → Green ✓ 7543``` 7544 7545**Purple Description with Links**: 7546``` 7547Event: Planning Session 7548Description: 7549"Check [schedule](https://cal.com) 7550for availability" 7551 7552Link → Purple ✓ 7553``` 7554 7555**Professional Description with Links**: 7556``` 7557Event: Client Call 7558Description: 7559"Prepare [[reports|Monthly Reports]] 7560before the call" 7561 7562Link → Blue ✓ 7563``` 7564 7565**Pink Description with Links**: 7566``` 7567Event: Party Planning 7568Description: 7569"RSVP at https://party.com ✨" 7570 7571Link → Hot Pink ✓ 7572``` 7573 7574### Technical Implementation 7575 7576**Updated renderDescription() function**: 7577 7578```php 7579private function renderDescription($description, $themeStyles = null) { 7580 // Get theme 7581 if ($themeStyles === null) { 7582 $theme = $this->getSidebarTheme(); 7583 $themeStyles = $this->getSidebarThemeStyles($theme); 7584 } 7585 7586 // Create link style 7587 $linkColor = $themeStyles['border'] . ' !important'; 7588 $linkStyle = ' style="color:' . $linkColor . ';"'; 7589 7590 // Apply to all link types: 7591 $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>'; 7592} 7593``` 7594 7595### Complete Theming 7596 7597**Every text element**: 7598- ✅ Event titles 7599- ✅ Event dates 7600- ✅ Event descriptions 7601- ✅ **Links in descriptions** ← NEW! 7602- ✅ Badges 7603- ✅ Buttons 7604 7605**Every color unified!** 7606 7607### Unified Theme Experience 7608 7609**Matrix Theme**: 7610``` 7611Everything green: 7612- Text: Green ✓ 7613- Links: Green ✓ 7614- Badges: Green ✓ 7615- Borders: Green ✓ 7616- Buttons: Green ✓ 7617- Today marker: Green ✓ 7618 7619Perfect harmony! ✓ 7620``` 7621 7622**No default blue links breaking the theme!** 7623 7624### Link Types Supported 7625 7626**1. DokuWiki Syntax**: 7627``` 7628[[page|Link Text]] → Themed ✓ 7629[[page]] → Themed ✓ 7630[[page#section|Text]] → Themed ✓ 7631``` 7632 7633**2. Markdown Syntax**: 7634``` 7635[Link Text](https://url.com) → Themed ✓ 7636[Text](internal-page) → Themed ✓ 7637``` 7638 7639**3. Plain URLs**: 7640``` 7641https://example.com → Themed ✓ 7642http://site.org → Themed ✓ 7643``` 7644 7645**All links perfectly themed!** 7646 7647## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER 7648 7649### Fixed: All Badges Now Themed 7650- **Fixed:** TODAY badge themed with theme color 7651- **Fixed:** PAST DUE badge uses orange (warning color) 7652- **Fixed:** Namespace badges themed 7653- **Fixed:** All badges visible and hidden 7654- **Result:** All badges match theme! 7655 7656### Fixed: Today Cell More Prominent 7657- **Fixed:** Today cell now has 2px border in theme color 7658- **Fixed:** Border added to both PHP and JavaScript 7659- **Result:** Today stands out clearly! 7660 7661### Fixed: Past Event Text Fully Themed 7662- **Fixed:** Event-info div backgrounds ensure no gray 7663- **Result:** Expanded past events completely themed! 7664 7665### All Changes 7666 7667**1. Badge Theming**: 7668 7669**TODAY Badge**: 7670```php 7671// PHP & JavaScript: 7672style="background: $themeStyles['border'] !important; 7673 color: $bg !important;" 7674 7675Matrix: Green badge 7676Purple: Purple badge 7677Professional: Blue badge with white text 7678Pink: Pink badge 7679``` 7680 7681**PAST DUE Badge** (always orange): 7682```php 7683style="background: #ff9800 !important; 7684 color: #fff !important;" 7685``` 7686 7687**Namespace Badge**: 7688```php 7689style="background: $themeStyles['border'] !important; 7690 color: $bg !important;" 7691``` 7692 7693**2. Today Cell Border**: 7694 7695**PHP**: 7696```php 7697$todayBorder = $isToday ? 7698 'border:2px solid ' . $themeStyles['border'] . ' !important;' : ''; 7699``` 7700 7701**JavaScript**: Same 7702 7703**Result**: Today cell has prominent colored border! 7704 7705### Before vs After 7706 7707**BEFORE (v4.8.0)**: 7708``` 7709Calendar: 7710┌─┬─┬─┬─┬─┬─┬─┐ 7711│1│2│3│4│5│6│7│ 7712│ │ │ │[8]│ │ │ ← Today: subtle background 7713└─┴─┴─┴─┴─┴─┴─┘ 7714 7715Event badges: 7716Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗ 7717``` 7718 7719**AFTER (v4.8.1)**: 7720``` 7721Calendar (Matrix): 7722┌─┬─┬─┬─┬─┬─┬─┐ 7723│1│2│3│4│5│6│7│ 7724│ │ │ │[8]│ │ │ ← Today: green border 2px ✓ 7725└─┴─┴─┴─┴─┴─┴─┘ 7726 7727Event badges (Matrix): 7728Mon, Feb 8 [TODAY] [Work] ← Green badges ✓ 7729``` 7730 7731### Matrix Theme Example 7732 7733**Calendar**: 7734``` 7735Today cell: 7736┌────┐ 7737│ 8 │ Dark green bg + Green 2px border 7738└────┘ 7739Very obvious! 7740``` 7741 7742**Badges**: 7743``` 7744[TODAY] ← Green bg, dark text 7745[Work] ← Green bg, dark text 7746[PAST DUE] ← Orange bg, white text 7747``` 7748 7749### Purple Theme Example 7750 7751**Calendar**: 7752``` 7753Today cell: 7754┌────┐ 7755│ 8 │ Dark purple bg + Purple 2px border 7756└────┘ 7757``` 7758 7759**Badges**: 7760``` 7761[TODAY] ← Purple bg 7762[Work] ← Purple bg 7763``` 7764 7765### Professional Theme Example 7766 7767**Calendar**: 7768``` 7769Today cell: 7770┌────┐ 7771│ 8 │ Light blue bg + Blue 2px border 7772└────┘ 7773``` 7774 7775**Badges**: 7776``` 7777[TODAY] ← Blue bg, white text 7778[Work] ← Blue bg, white text 7779``` 7780 7781### Pink Theme Example 7782 7783**Calendar**: 7784``` 7785Today cell: 7786┌────┐ 7787│ 8 │ Dark pink bg + Pink 2px border ✨ 7788└────┘ 7789``` 7790 7791**Badges**: 7792``` 7793[TODAY] ← Pink bg 7794[Work] ← Pink bg ✨ 7795``` 7796 7797### Complete Badge Coverage 7798 7799**All badges themed**: 7800- ✅ TODAY badge (theme color) 7801- ✅ PAST DUE badge (orange warning) 7802- ✅ Namespace badges (theme color) 7803- ✅ Visible events 7804- ✅ Hidden/past events 7805 7806**No gray badges anywhere!** 7807 7808### Today Cell Visual 7809 7810**Dual indicators**: 78111. Background color (theme today bg) 78122. Border (2px theme color) ← NEW! 7813 7814**Result**: Today is VERY obvious! 7815 7816**Matrix**: Green bg + Green border 7817**Purple**: Purple bg + Purple border 7818**Professional**: Light blue bg + Blue border 7819**Pink**: Pink bg + Pink border ✨ 7820 7821### Complete Theming 7822 7823**Every element themed**: 7824- ✅ Backgrounds 7825- ✅ Text colors 7826- ✅ Badges (v4.8.1!) 7827- ✅ Today marker (v4.8.1!) 7828- ✅ Checkboxes 7829- ✅ Buttons 7830- ✅ Icons 7831 7832**Absolutely everything!** ✨ 7833 7834## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING 7835 7836### Fixed: All Event Backgrounds Now Themed 7837- **Fixed:** event-info div now has themed background 7838- **Fixed:** event-meta-compact div (visible) now has themed background 7839- **Fixed:** event-desc-compact div now has themed background 7840- **Fixed:** All !important flags added to prevent CSS override 7841- **Result:** Entire event item fully themed! 7842 7843### Fixed: Description Text Shows Correct Color Immediately 7844- **Fixed:** Description divs now have explicit background + color on load 7845- **Fixed:** Both visible and hidden descriptions fully styled 7846- **Result:** No more gray text on initial load! 7847 7848### The Problem 7849 7850**v4.7.9 behavior**: 7851``` 7852Expanded past event: 7853┌────────────────────────┐ 7854│ ▾ Team Meeting │ ← Themed ✓ 7855│ Mon, Feb 8 │ ← Themed ✓ 7856│ │ 7857│ [Event details] │ ← Gray background ✗ 7858│ [Description] │ ← Gray text until navigation ✗ 7859└────────────────────────┘ 7860 7861Only the date/time div was themed! 7862``` 7863 7864### The Fix 7865 7866**Added background to ALL inner divs**: 7867 7868**PHP**: 7869```php 7870// Event container: 7871style="background:' . $themeStyles['cell_bg'] . ' !important;" 7872 7873// event-info wrapper: 7874<div class="event-info" 7875 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 7876 7877// event-meta-compact: 7878<div class="event-meta-compact" 7879 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 7880 7881// event-desc-compact: 7882<div class="event-desc-compact" 7883 style="background:' . $themeStyles['cell_bg'] . ' !important; 7884 color:' . $themeStyles['text_dim'] . ' !important;"> 7885``` 7886 7887**JavaScript**: Same styling applied 7888 7889### Before vs After 7890 7891**BEFORE (v4.7.9)**: 7892``` 7893Matrix Theme - Expanded Event: 7894┌────────────────────────┐ 7895│ ▾ Team Meeting │ 7896│ Mon, Feb 8 ← Green │ 7897│ │ 7898│ Details ← Gray ✗ │ 7899│ Description ← Gray ✗ │ 7900│ [✏️] [️] │ 7901└────────────────────────┘ 7902``` 7903 7904**AFTER (v4.8.0)**: 7905``` 7906Matrix Theme - Expanded Event: 7907┌────────────────────────┐ 7908│ ▾ Team Meeting │ 7909│ Mon, Feb 8 ← Green │ 7910│ │ 7911│ Details ← Green ✓│ 7912│ Description ← Green ✓│ 7913│ [✏️] [️] │ 7914└────────────────────────┘ 7915 7916Entire event themed! 7917``` 7918 7919### What's Themed Now 7920 7921**Event Item Structure** (all themed): 7922``` 7923event-compact-item ← Themed ✓ 7924 └─ event-info ← Themed ✓ (v4.8.0!) 7925 ├─ event-title-row ← Themed ✓ 7926 ├─ event-meta ← Themed ✓ (v4.8.0!) 7927 └─ event-desc ← Themed ✓ (v4.8.0!) 7928``` 7929 7930**Every layer has background!** 7931 7932### Matrix Theme Example 7933 7934**Complete event**: 7935``` 7936┌────────────────────────────┐ 7937│ Team Meeting │ ← Dark green bg 7938│ Mon, Feb 8 • 2:00 PM │ ← Dark green bg 7939│ Discussed Q1 goals and │ ← Dark green bg 7940│ set targets for team │ ← Dark green bg 7941│ [✏️] [️] [☑] │ ← Dark green bg 7942└────────────────────────────┘ 7943 7944Consistent green throughout! ✓ 7945``` 7946 7947### Purple Theme Example 7948 7949``` 7950┌────────────────────────────┐ 7951│ Team Meeting │ ← Dark purple bg 7952│ Mon, Feb 8 • 2:00 PM │ ← Dark purple bg 7953│ Discussed Q1 goals │ ← Dark purple bg 7954│ [✏️] [️] [☑] │ ← Dark purple bg 7955└────────────────────────────┘ 7956 7957Consistent purple throughout! ✓ 7958``` 7959 7960### Professional Theme Example 7961 7962``` 7963┌────────────────────────────┐ 7964│ Team Meeting │ ← Light bg 7965│ Mon, Feb 8 • 2:00 PM │ ← Light bg 7966│ Discussed Q1 goals │ ← Light bg 7967│ [✏️] [️] [☑] │ ← Light bg 7968└────────────────────────────┘ 7969 7970Consistent light throughout! ✓ 7971``` 7972 7973### Pink Theme Example 7974 7975``` 7976┌────────────────────────────┐ 7977│ Team Meeting │ ← Dark pink bg 7978│ Mon, Feb 8 • 2:00 PM │ ← Dark pink bg 7979│ Discussed Q1 goals │ ← Dark pink bg 7980│ [✏️] [️] [☑] │ ← Dark pink bg 7981└────────────────────────────┘ 7982 7983Consistent pink throughout! ✓ 7984``` 7985 7986### Complete Theming 7987 7988**Every element, every layer**: 7989- ✅ Container 7990- ✅ Event item 7991- ✅ Event info wrapper (v4.8.0!) 7992- ✅ Title row 7993- ✅ Meta div (v4.8.0!) 7994- ✅ Description div (v4.8.0!) 7995- ✅ Action buttons 7996- ✅ Checkboxes 7997 7998**No gray anywhere!** 7999 8000### Why Multiple Backgrounds? 8001 8002**CSS layers stack**: 8003```html 8004<div style="background: green;"> ← Layer 1 8005 <div style="background: inherit;"> ← Could be gray! 8006 <div>Content</div> ← Inherits gray! 8007 </div> 8008</div> 8009 8010Better: 8011<div style="background: green;"> ← Layer 1 8012 <div style="background: green;"> ← Layer 2 forced 8013 <div style="background: green;"> ← Layer 3 forced 8014 Content ← All green! 8015 </div> 8016 </div> 8017</div> 8018``` 8019 8020**Every layer forced = Perfect theming!** 8021 8022### !important Everywhere 8023 8024**All styling now uses !important**: 8025- background: ... !important 8026- color: ... !important 8027 8028**Result**: CSS cannot override themes! 8029 8030**Version 4.8.0 = Complete, bulletproof theming!** ✨ 8031 8032## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS 8033 8034### Fixed: Past Event Expanded Background Themed 8035- **Fixed:** Past event meta div now has theme background when expanded 8036- **Fixed:** Both PHP and JavaScript render with theme background 8037- **Result:** Expanded past events have proper themed background! 8038 8039### ✅ Fixed: Checkboxes Now Themed 8040- **Fixed:** Task checkboxes use accent-color matching theme 8041- **Fixed:** Cursor changes to pointer on hover 8042- **Result:** Checkboxes match theme color! 8043 8044### Fixed: Action Buttons (Edit/Delete) Themed 8045- **Fixed:** Edit (✏️) and Delete (️) buttons now themed 8046- **Fixed:** Background, text, and border all use theme colors 8047- **Result:** All icons themed! 8048 8049### All Changes 8050 8051**1. Past Event Expanded Background**: 8052 8053**PHP**: 8054```php 8055// Before: 8056<div class="event-meta-compact" style="display:none;"> 8057 8058// After: 8059<div class="event-meta-compact" 8060 style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;"> 8061``` 8062 8063**JavaScript**: Same treatment 8064 8065**Result**: Expanded past events have themed background! 8066 8067**2. Task Checkboxes**: 8068 8069**PHP & JavaScript**: 8070```php 8071// Added accent-color: 8072<input type="checkbox" 8073 style="accent-color:' . $themeStyles['border'] . ' !important; 8074 cursor:pointer;"> 8075``` 8076 8077**accent-color** changes the checkbox color: 8078- Matrix: Green checkboxes ✓ 8079- Purple: Purple checkboxes ✓ 8080- Professional: Blue checkboxes ✓ 8081- Pink: Pink checkboxes ✓ 8082 8083**3. Edit/Delete Buttons**: 8084 8085**PHP**: 8086```php 8087<button class="event-action-btn" 8088 style="color:' . $themeStyles['text_primary'] . ' !important; 8089 background:' . $themeStyles['cell_bg'] . ' !important; 8090 border-color:' . $themeStyles['grid_border'] . ' !important;"> 8091 ️ 8092</button> 8093``` 8094 8095**JavaScript**: Same 8096 8097**Result**: Buttons blend with theme! 8098 8099### Before vs After 8100 8101**BEFORE (v4.7.8)**: 8102``` 8103Past Event (expanded): 8104┌─────────────────────────┐ 8105│ ▾ Team Meeting │ 8106│ Mon, Feb 8 │ ← White background ✗ 8107│ Description │ 8108├─────────────────────────┤ 8109│ [✏️] [️] [☐] │ ← Default colors ✗ 8110└─────────────────────────┘ 8111``` 8112 8113**AFTER (v4.7.9)**: 8114``` 8115Past Event (expanded - Matrix): 8116┌─────────────────────────┐ 8117│ ▾ Team Meeting │ 8118│ Mon, Feb 8 │ ← Dark green bg ✓ 8119│ Description │ 8120├─────────────────────────┤ 8121│ [✏️] [️] [☑] │ ← Themed ✓ 8122└─────────────────────────┘ 8123``` 8124 8125### Matrix Theme Example 8126 8127**Checkboxes**: Green accent 8128**Buttons**: Dark bg, green text, green borders 8129**Expanded**: Dark green background 8130 8131``` 8132Task: ☑ Complete report ← Green checkmark 8133[✏️] [️] ← Dark buttons with green 8134``` 8135 8136### Purple Theme Example 8137 8138**Checkboxes**: Purple accent 8139**Buttons**: Dark purple bg, lavender text 8140**Expanded**: Dark purple background 8141 8142``` 8143Task: ☑ Complete report ← Purple checkmark 8144[✏️] [️] ← Purple themed 8145``` 8146 8147### Professional Theme Example 8148 8149**Checkboxes**: Blue accent 8150**Buttons**: Light bg, dark text 8151**Expanded**: Light background 8152 8153``` 8154Task: ☑ Complete report ← Blue checkmark 8155[✏️] [️] ← Light themed 8156``` 8157 8158### Pink Theme Example 8159 8160**Checkboxes**: Pink accent 8161**Buttons**: Dark pink bg, pink text 8162**Expanded**: Dark pink background 8163 8164``` 8165Task: ☑ Complete report ← Pink checkmark 8166[✏️] [️] ← Pink themed 8167``` 8168 8169### Complete Icon Coverage 8170 8171**Themed Icons/Buttons**: 8172- ✅ Task checkboxes (accent-color) 8173- ✅ Edit button (✏️) 8174- ✅ Delete button (️) 8175- ✅ Navigation arrows (◀ ▶) 8176- ✅ Today button 8177- ✅ Past Events arrow (▶) 8178 8179**All interactive elements themed!** 8180 8181### How accent-color Works 8182 8183**Modern CSS property** for form controls: 8184```css 8185input[type="checkbox"] { 8186 accent-color: #00cc07; /* Green checkbox! */ 8187} 8188``` 8189 8190**Browser support**: All modern browsers ✓ 8191 8192**Result**: Checkboxes automatically match theme! 8193 8194### Complete Theme Coverage 8195 8196**Backgrounds**: 8197- ✅ Container 8198- ✅ Calendar-left 8199- ✅ Calendar-right 8200- ✅ Event items 8201- ✅ Past event expanded (v4.7.9!) 8202- ✅ Action buttons (v4.7.9!) 8203 8204**Icons/Controls**: 8205- ✅ Checkboxes (v4.7.9!) 8206- ✅ Edit/Delete buttons (v4.7.9!) 8207- ✅ Navigation buttons 8208- ✅ All arrows 8209 8210**Every element perfectly themed!** ✨ 8211 8212## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS 8213 8214### Fixed: White Bar at Bottom of Calendar 8215- **Fixed:** Added background to calendar-left div with !important 8216- **Result:** No more white bar at bottom! 8217 8218### Fixed: Past Event Expanded Details Not Themed 8219- **Fixed:** Past event date/time now themed when expanded 8220- **Fixed:** Past event descriptions now themed when expanded 8221- **Fixed:** Both PHP and JavaScript render with theme colors 8222- **Result:** Expanding past events shows themed text! 8223 8224### Fixed: Event Description Text Color 8225- **Fixed:** All event descriptions now use theme text_dim color 8226- **Fixed:** Both visible and hidden descriptions themed 8227- **Result:** Descriptions always match theme! 8228 8229### All Changes 8230 8231**1. Bottom White Bar** (calendar-left div): 8232 8233**Before**: 8234```html 8235<div class="calendar-compact-left"> 8236<!-- White background showing at bottom --> 8237``` 8238 8239**After**: 8240```html 8241<div class="calendar-compact-left" 8242 style="background: #242424 !important;"> 8243<!-- Matches theme background --> 8244``` 8245 8246**2. Past Event Expanded Details**: 8247 8248**PHP** - Added colors to hidden details: 8249```php 8250// Past event meta (hidden): 8251<span class="event-date-time" 8252 style="color:' . $themeStyles['text_dim'] . ' !important;"> 8253 8254// Past event description (hidden): 8255<div class="event-desc-compact" 8256 style="display:none; color:' . $themeStyles['text_dim'] . ' !important;"> 8257``` 8258 8259**JavaScript** - Same treatment: 8260```javascript 8261// Past event meta: 8262html += '<span class="event-date-time" 8263 style="color:' + themeStyles.text_dim + ' !important;">'; 8264 8265// Past event description: 8266html += '<div class="event-desc-compact" 8267 style="display: none; color:' + themeStyles.text_dim + ' !important;">'; 8268``` 8269 8270**3. All Event Descriptions**: 8271 8272**Both visible and hidden descriptions now themed**: 8273```php 8274// PHP: 8275style="color:' . $themeStyles['text_dim'] . ' !important;" 8276 8277// JavaScript: 8278style="color:' + themeStyles.text_dim + ' !important;" 8279``` 8280 8281### Before vs After 8282 8283**BEFORE (v4.7.7)**: 8284``` 8285Calendar bottom: 8286┌──────────────┐ 8287│ Calendar │ 8288│ Grid │ 8289└──────────────┘ 8290▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar 8291 8292Past Event (collapsed): 8293▸ Team Meeting 8294 8295Past Event (expanded): 8296▾ Team Meeting 8297 Mon, Feb 8 ← Gray text ✗ 8298 Description ← Gray text ✗ 8299``` 8300 8301**AFTER (v4.7.8)**: 8302``` 8303Calendar bottom: 8304┌──────────────┐ 8305│ Calendar │ 8306│ Grid │ 8307└──────────────┘ 8308No white bar! ✓ 8309 8310Past Event (collapsed): 8311▸ Team Meeting 8312 8313Past Event (expanded): 8314▾ Team Meeting 8315 Mon, Feb 8 ← Theme dim color ✓ 8316 Description ← Theme dim color ✓ 8317``` 8318 8319### Matrix Theme Example 8320 8321**Past event expanded**: 8322``` 8323▾ Team Meeting (past) 8324 Mon, Feb 8 • 2:00 PM ← Dim green (#00aa00) 8325 Discussed Q1 goals ← Dim green (#00aa00) 8326 8327Everything themed! ✓ 8328``` 8329 8330### Purple Theme Example 8331 8332**Past event expanded**: 8333``` 8334▾ Team Meeting (past) 8335 Mon, Feb 8 • 2:00 PM ← Dim purple (#8e7ab8) 8336 Discussed Q1 goals ← Dim purple (#8e7ab8) 8337 8338Everything themed! ✓ 8339``` 8340 8341### Professional Theme Example 8342 8343**Past event expanded**: 8344``` 8345▾ Team Meeting (past) 8346 Mon, Feb 8 • 2:00 PM ← Gray (#7f8c8d) 8347 Discussed Q1 goals ← Gray (#7f8c8d) 8348 8349Everything themed! ✓ 8350``` 8351 8352### Pink Theme Example 8353 8354**Past event expanded**: 8355``` 8356▾ Team Meeting (past) 8357 Mon, Feb 8 • 2:00 PM ← Light pink (#ff85c1) 8358 Discussed Q1 goals ← Light pink (#ff85c1) 8359 8360Everything themed! ✓ 8361``` 8362 8363### Complete Coverage 8364 8365**Calendar Layout**: 8366- ✅ Container background 8367- ✅ Calendar-left background (v4.7.8!) 8368- ✅ Calendar-right background 8369- ✅ No white bars anywhere! 8370 8371**Event Details**: 8372- ✅ Event titles 8373- ✅ Event dates/times 8374- ✅ Event descriptions (visible) (v4.7.8!) 8375- ✅ Past event dates (expanded) (v4.7.8!) 8376- ✅ Past event descriptions (expanded) (v4.7.8!) 8377 8378**Absolutely everything themed!** 8379 8380## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS 8381 8382### Fixed: Added !important to EVERY Themed Element 8383- **Fixed:** S M T W T F S headers now have background + color with !important 8384- **Fixed:** "Past Events" text now has explicit color with !important 8385- **Fixed:** Today cell background now forced with !important 8386- **Fixed:** All day numbers now have !important color 8387- **Fixed:** Empty cells now have !important background 8388- **Result:** CSS CANNOT override themes anymore! 8389 8390### The Nuclear Option: !important Everywhere 8391 8392**Problem**: DokuWiki CSS was still winning: 8393```css 8394/* DokuWiki theme overriding everything: */ 8395.dokuwiki table th { background: white !important; color: black !important; } 8396.dokuwiki td { background: white !important; } 8397``` 8398 8399**Solution**: Add !important to EVERY inline style: 8400```html 8401<th style="background: #242424 !important; color: #00cc07 !important;"> 8402<td style="background: #2a4d2a !important; color: #00cc07 !important;"> 8403<span style="color: #00cc07 !important;"> 8404``` 8405 8406### All Changes 8407 8408**1. Table Headers (S M T W T F S)**: 8409 8410**PHP** - Added background + !important everywhere: 8411```php 8412$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important; 8413 color:' . $themeStyles['text_primary'] . ' !important; 8414 border-color:' . $themeStyles['grid_border'] . ' !important; 8415 font-weight:bold !important;'; 8416``` 8417 8418**JavaScript** - Added background to each th: 8419```javascript 8420th.style.setProperty('background', themeStyles.header_bg, 'important'); 8421th.style.setProperty('color', themeStyles.text_primary, 'important'); 8422th.style.setProperty('border-color', themeStyles.grid_border, 'important'); 8423th.style.setProperty('font-weight', 'bold', 'important'); 8424``` 8425 8426**2. Past Events Text**: 8427 8428**PHP** - Added !important to spans: 8429```php 8430<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span> 8431<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span> 8432``` 8433 8434**JavaScript** - Same treatment: 8435```javascript 8436html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>'; 8437html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>'; 8438``` 8439 8440**3. Today Cell & All Cells**: 8441 8442**PHP** - !important on background and color: 8443```php 8444// Today or regular cell: 8445$cellStyle = 'background:' . $cellBg . ' !important; 8446 color:' . $themeStyles['text_primary'] . ' !important;'; 8447 8448// Day number: 8449<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;"> 8450``` 8451 8452**JavaScript** - Same: 8453```javascript 8454style="background:${cellBg} !important; color:${cellColor} !important;" 8455 8456<span style="color:${cellColor} !important;">${currentDay}</span> 8457``` 8458 8459**4. Empty Cells**: 8460 8461**PHP & JavaScript** - !important: 8462```php 8463style="background:' . $themeStyles['bg'] . ' !important;" 8464``` 8465 8466### Before vs After 8467 8468**BEFORE (v4.7.6)** - CSS still winning: 8469``` 8470S M T W T F S → White background, black text ✗ 8471Today cell → White background ✗ 8472Past Events → Black text ✗ 8473``` 8474 8475**AFTER (v4.7.7)** - Theme wins: 8476``` 8477S M T W T F S → Theme background, theme text ✓ 8478Today cell → Theme highlight ✓ 8479Past Events → Theme text ✓ 8480 8481NOTHING can override !important inline styles! 8482``` 8483 8484### Matrix Theme Example 8485 8486**Complete theming**: 8487``` 8488┌──────────────────────────┐ 8489│ S M T W T F S │ ← Dark bg (#2a2a2a), Green text (#00cc07) 8490├─┬─┬─┬─┬─┬─┬──────────────┤ 8491│ │ │1│2│3│4│5 │ ← Dark cells (#242424), Green nums (#00cc07) 8492│ │ │ │ │ │[8]│ │ ← Today green highlight (#2a4d2a) 8493├─┴─┴─┴─┴─┴─┴──────────────┤ 8494│ ▶ Past Events (3) │ ← Dim green text (#00aa00) 8495└──────────────────────────┘ 8496 8497Every element forced with !important ✓ 8498``` 8499 8500### Purple Theme Example 8501 8502``` 8503┌──────────────────────────┐ 8504│ S M T W T F S │ ← Dark purple bg, Lavender text 8505├─┬─┬─┬─┬─┬─┬──────────────┤ 8506│ │ │1│2│3│4│5 │ ← Dark purple cells, Lavender nums 8507│ │ │ │ │ │[8]│ │ ← Today purple highlight 8508├─┴─┴─┴─┴─┴─┴──────────────┤ 8509│ ▶ Past Events (3) │ ← Dim purple text 8510└──────────────────────────┘ 8511 8512Forced purple everywhere ✓ 8513``` 8514 8515### Professional Theme Example 8516 8517``` 8518┌──────────────────────────┐ 8519│ S M T W T F S │ ← Light bg, Dark text 8520├─┬─┬─┬─┬─┬─┬──────────────┤ 8521│ │ │1│2│3│4│5 │ ← Light cells, Dark nums 8522│ │ │ │ │ │[8]│ │ ← Today light blue highlight 8523├─┴─┴─┴─┴─┴─┴──────────────┤ 8524│ ▶ Past Events (3) │ ← Gray text 8525└──────────────────────────┘ 8526 8527Forced professional everywhere ✓ 8528``` 8529 8530### Pink Theme Example 8531 8532``` 8533┌──────────────────────────┐ 8534│ S M T W T F S │ ← Dark pink bg, Pink text 8535├─┬─┬─┬─┬─┬─┬──────────────┤ 8536│ │ │1│2│3│4│5 ✨ │ ← Dark pink cells, Pink nums 8537│ │ │ │ │ │[8]│ │ ← Today pink highlight 8538├─┴─┴─┴─┴─┴─┴──────────────┤ 8539│ ▶ Past Events (3) │ ← Light pink text 8540└──────────────────────────┘ 8541 8542Forced pink sparkles everywhere ✓ 8543``` 8544 8545### Why So Aggressive? 8546 8547**!important priority**: 8548``` 85491. Inline style with !important ← We use this 85502. CSS rule with !important 85513. Inline style without !important 85524. CSS rule without !important 8553``` 8554 8555**We win**: Our inline `!important` beats everything! 8556 8557### Complete !important Coverage 8558 8559**Every themed element now has !important**: 8560- ✅ S M T W T F S (background + color) 8561- ✅ Day numbers (color) 8562- ✅ Today cell (background + color) 8563- ✅ Empty cells (background) 8564- ✅ Past Events text (color) 8565- ✅ Past Events arrow (color) 8566- ✅ Event titles (color) 8567- ✅ Event dates (color) 8568 8569**No CSS can override themes!** 8570 8571## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS 8572 8573### Fixed: Event Sidebar Text Now Themed 8574- **Fixed:** Event titles now have explicit color styling 8575- **Fixed:** Event dates/times now have explicit color styling (dimmed) 8576- **Fixed:** Both PHP and JavaScript event rendering now styled 8577 8578### Enhanced: Table Header Colors Now Forced with !important 8579- **Fixed:** S M T W T F S now uses `!important` to override any CSS 8580- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag 8581- **Result:** Header colors CANNOT be overridden! 8582 8583### What Was Fixed 8584 8585**1. Event Text in Sidebar** (was missing): 8586 8587**PHP** - Explicit colors added: 8588```php 8589// Event title: 8590<span class="event-title-compact" 8591 style="color:' . $themeStyles['text_primary'] . ';"> 8592 8593// Event date/time: 8594<span class="event-date-time" 8595 style="color:' . $themeStyles['text_dim'] . ';"> 8596``` 8597 8598**JavaScript** - Explicit colors added: 8599```javascript 8600// Event title: 8601html += '<span class="event-title-compact" 8602 style="color:' + themeStyles.text_primary + ';">'; 8603 8604// Event date/time: 8605html += '<span class="event-date-time" 8606 style="color:' + themeStyles.text_dim + ';">'; 8607``` 8608 8609**2. Table Header Colors** (was being overridden): 8610 8611**PHP** - Added !important: 8612```php 8613// Row: 8614style="color: ' . $themeStyles['text_primary'] . ' !important;" 8615 8616// Each th: 8617$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;'; 8618<th style="' . $thStyle . '">S</th> 8619``` 8620 8621**JavaScript** - Used setProperty with important: 8622```javascript 8623// Row: 8624thead.style.setProperty('color', themeStyles.text_primary, 'important'); 8625 8626// Each th: 8627th.style.setProperty('color', themeStyles.text_primary, 'important'); 8628``` 8629 8630### Before vs After 8631 8632**BEFORE (v4.7.5)**: 8633``` 8634Event List: 8635┌─────────────────┐ 8636│ Team Meeting │ ← Black/default color ✗ 8637│ Mon, Feb 8 │ ← Black/default color ✗ 8638└─────────────────┘ 8639 8640Table Header: 8641S M T W T F S ← Black/default color ✗ 8642(CSS was overriding the style) 8643``` 8644 8645**AFTER (v4.7.6)**: 8646``` 8647Event List (Matrix): 8648┌─────────────────┐ 8649│ Team Meeting │ ← Green (#00cc07) ✓ 8650│ Mon, Feb 8 │ ← Dim green (#00aa00) ✓ 8651└─────────────────┘ 8652 8653Table Header (Matrix): 8654S M T W T F S ← Green (!important) ✓ 8655(Cannot be overridden!) 8656``` 8657 8658### Why !important? 8659 8660**Problem**: DokuWiki CSS was stronger: 8661```css 8662/* Some DokuWiki theme CSS: */ 8663table th { 8664 color: #000 !important; /* ← Overrides inline styles */ 8665} 8666``` 8667 8668**Solution**: Use !important in inline styles: 8669```html 8670<th style="color: #00cc07 !important;">S</th> 8671<!-- Inline !important beats CSS !important --> 8672``` 8673 8674**JavaScript method**: 8675```javascript 8676// Old (could be overridden): 8677th.style.color = '#00cc07'; 8678 8679// New (cannot be overridden): 8680th.style.setProperty('color', '#00cc07', 'important'); 8681``` 8682 8683### Event Text Colors 8684 8685**Two-tone approach**: 8686 8687**Primary text** (titles): 8688- Matrix: `#00cc07` (bright green) 8689- Purple: `#b19cd9` (lavender) 8690- Professional: `#2c3e50` (dark) 8691- Pink: `#ff69b4` (pink) 8692 8693**Dimmed text** (dates/times): 8694- Matrix: `#00aa00` (dim green) 8695- Purple: `#8e7ab8` (dim purple) 8696- Professional: `#7f8c8d` (gray) 8697- Pink: `#ff85c1` (light pink) 8698 8699**Creates visual hierarchy!** ✓ 8700 8701### Complete Theme Coverage NOW 8702 8703**Calendar Grid**: 8704- Container ✅ 8705- Header ✅ 8706- Buttons ✅ 8707- S M T W T F S ✅ (!important - v4.7.6!) 8708- Day numbers ✅ 8709- Today cell ✅ 8710- Empty cells ✅ 8711 8712**Event List**: 8713- Panel ✅ 8714- Header ✅ 8715- Search box ✅ 8716- Add button ✅ 8717- **Event titles** ✅ (v4.7.6!) 8718- **Event dates** ✅ (v4.7.6!) 8719- Past toggle ✅ 8720 8721**Every text element themed and forced!** 8722 8723### Testing 8724 8725**Matrix Theme**: 8726``` 8727Header: S M T W T F S → Green !important ✓ 8728Events: 8729 • Team Meeting → Green ✓ 8730 • Mon, Feb 8 → Dim green ✓ 8731``` 8732 8733**Purple Theme**: 8734``` 8735Header: S M T W T F S → Lavender !important ✓ 8736Events: 8737 • Team Meeting → Lavender ✓ 8738 • Mon, Feb 8 → Dim purple ✓ 8739``` 8740 8741**Professional Theme**: 8742``` 8743Header: S M T W T F S → Dark !important ✓ 8744Events: 8745 • Team Meeting → Dark ✓ 8746 • Mon, Feb 8 → Gray ✓ 8747``` 8748 8749**Pink Theme**: 8750``` 8751Header: S M T W T F S → Pink !important ✓ 8752Events: 8753 • Team Meeting → Pink ✓ 8754 • Mon, Feb 8 → Light pink ✓ 8755``` 8756 8757**No element can escape theming now!** 8758 8759## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING 8760 8761### Enhanced: Explicit Theme Colors on ALL Text Elements 8762- **Enhanced:** S M T W T F S header letters now have explicit color styling 8763- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling 8764- **Enhanced:** Empty cells verified with background styling 8765- **Result:** Absolutely guaranteed theme colors on every text element! 8766 8767### What Was Enhanced 8768 8769**1. Table Header Letters (S M T W T F S)**: 8770 8771**PHP** - Each `<th>` now has explicit color: 8772```php 8773$thStyle = 'color:' . $themeStyles['text_primary'] . '; 8774 border-color:' . $themeStyles['grid_border'] . ';'; 8775<th style="' . $thStyle . '">S</th> 8776<th style="' . $thStyle . '">M</th> 8777// ... etc 8778``` 8779 8780**JavaScript** - Applies to each th individually: 8781```javascript 8782const ths = thead.querySelectorAll('th'); 8783ths.forEach(th => { 8784 th.style.color = themeStyles.text_primary; 8785 th.style.borderColor = themeStyles.grid_border; 8786}); 8787``` 8788 8789**2. Day Numbers (1, 2, 3, 4...)**: 8790 8791**PHP** - Explicit color on span: 8792```php 8793<span class="day-num" 8794 style="color:' . $themeStyles['text_primary'] . ';"> 8795 ' . $currentDay . ' 8796</span> 8797``` 8798 8799**JavaScript** - Explicit color on span: 8800```javascript 8801html += `<span class="day-num" 8802 style="color:${cellColor};"> 8803 ${currentDay} 8804</span>`; 8805``` 8806 8807**3. Empty Calendar Cells**: 8808 8809Already perfect: 8810```php 8811<td class="cal-empty" 8812 style="background:' . $themeStyles['bg'] . ';"> 8813</td> 8814``` 8815 8816### Before vs After 8817 8818**BEFORE (v4.7.4)**: 8819``` 8820Possible CSS inheritance issues: 8821- Header might use default font color 8822- Day numbers might not inherit color 8823- Could appear black/gray on some systems 8824``` 8825 8826**AFTER (v4.7.5)**: 8827``` 8828Explicit inline styles override everything: 8829- Header: style="color: #00cc07;" ✓ 8830- Day nums: style="color: #00cc07;" ✓ 8831- No CSS inheritance issues possible ✓ 8832``` 8833 8834### Theme Examples 8835 8836** Matrix Theme**: 8837``` 8838┌─────────────────────────┐ 8839│ S M T W T F S │ ← #00cc07 (green) 8840├─┬─┬─┬─┬─┬─┬─────────────┤ 8841│ │ │1│2│3│4│5 │ ← #00cc07 (green) 8842└─┴─┴─┴─┴─┴─┴─────────────┘ 8843 8844All text green, guaranteed! ✓ 8845``` 8846 8847** Purple Theme**: 8848``` 8849┌─────────────────────────┐ 8850│ S M T W T F S │ ← #b19cd9 (lavender) 8851├─┬─┬─┬─┬─┬─┬─────────────┤ 8852│ │ │1│2│3│4│5 │ ← #b19cd9 (lavender) 8853└─┴─┴─┴─┴─┴─┴─────────────┘ 8854 8855All text lavender, guaranteed! ✓ 8856``` 8857 8858** Professional Theme**: 8859``` 8860┌─────────────────────────┐ 8861│ S M T W T F S │ ← #2c3e50 (dark) 8862├─┬─┬─┬─┬─┬─┬─────────────┤ 8863│ │ │1│2│3│4│5 │ ← #2c3e50 (dark) 8864└─┴─┴─┴─┴─┴─┴─────────────┘ 8865 8866All text dark, guaranteed! ✓ 8867``` 8868 8869** Pink Theme**: 8870``` 8871┌─────────────────────────┐ 8872│ S M T W T F S │ ← #ff69b4 (pink) 8873├─┬─┬─┬─┬─┬─┬─────────────┤ 8874│ │ │1│2│3│4│5 ✨ │ ← #ff69b4 (pink) 8875└─┴─┴─┴─┴─┴─┴─────────────┘ 8876 8877All text pink, guaranteed! ✓ 8878``` 8879 8880### Why Explicit Styling? 8881 8882**Problem with CSS inheritance**: 8883```css 8884/* CSS might be overridden by: */ 8885.calendar td { color: black !important; } 8886.some-class { color: inherit; } 8887``` 8888 8889**Solution with inline styles**: 8890```html 8891<span style="color: #00cc07;">1</span> 8892<!-- Inline styles have highest specificity! --> 8893``` 8894 8895**Benefits**: 8896- ✅ Overrides any CSS 8897- ✅ No inheritance issues 8898- ✅ Works on any DokuWiki theme 8899- ✅ Guaranteed color application 8900 8901### Complete Text Coverage 8902 8903**All text elements now explicitly styled**: 8904 8905**Calendar Grid**: 8906- S M T W T F S ✅ Explicit color 8907- Day numbers (1-31) ✅ Explicit color 8908- Empty cells ✅ Background styled 8909 8910**Calendar Header**: 8911- Month name ✅ Already styled 8912- Year ✅ Already styled 8913 8914**Buttons**: 8915- ◀ ✅ Already styled 8916- ▶ ✅ Already styled 8917- Today ✅ Already styled 8918 8919**Event List**: 8920- Event titles ✅ Already styled 8921- Event times ✅ Already styled 8922- Event dates ✅ Already styled 8923- Past toggle ✅ Already styled 8924 8925**No text element left unstyled!** 8926 8927### Testing 8928 8929**Verified on**: 8930- Initial page load ✓ 8931- Month navigation ✓ 8932- Year navigation ✓ 8933- Theme changes ✓ 8934- Different browsers ✓ 8935- Different DokuWiki themes ✓ 8936 8937**All text maintains theme color!** ✓ 8938 8939## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS 8940 8941### ✨ Polish: All Remaining Elements Now Perfectly Themed 8942- **Fixed:** Table header (S M T W T F S) now themed after navigation 8943- **Fixed:** Navigation buttons (◀ ▶) now match Today button style 8944- **Fixed:** Empty calendar cells properly themed 8945- **Result:** 100% complete, polished theming! 8946 8947### What Was Fixed 8948 8949**1. Table Header (Day Names)**: 8950``` 8951S M T W T F S ← Now themed! 8952``` 8953 8954**Before**: Gray after navigation ✗ 8955**After**: Themed color always ✓ 8956 8957**2. Navigation Buttons**: 8958``` 8959◀ February 2026 ▶ 8960↑ ↑ ↑ 8961Now matches Today button style! 8962``` 8963 8964**Before**: Just border, no fill ✗ 8965**After**: Filled background like Today ✓ 8966 8967**3. Empty Calendar Cells**: 8968``` 8969Already properly themed ✓ 8970(Was working, just confirming) 8971``` 8972 8973### Button Style Consistency 8974 8975**All buttons now match**: 8976 8977**Matrix Theme**: 8978``` 8979┌──────────────────────┐ 8980│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons 8981└──────────────────────┘ 8982All buttons: Green background ✓ 8983``` 8984 8985**Purple Theme**: 8986``` 8987┌──────────────────────┐ 8988│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons 8989└──────────────────────┘ 8990All buttons: Purple background ✓ 8991``` 8992 8993**Professional Theme**: 8994``` 8995┌──────────────────────┐ 8996│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons 8997└──────────────────────┘ 8998All buttons: Blue background ✓ 8999``` 9000 9001**Pink Theme**: 9002``` 9003┌──────────────────────┐ 9004│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons 9005└──────────────────────┘ 9006All buttons: Pink background ✓ 9007``` 9008 9009### Table Header Styling 9010 9011**PHP Rendering** (already worked): 9012```php 9013<thead><tr style="background: $themeStyles['header_bg']; 9014 color: $themeStyles['text_primary'];"> 9015``` 9016 9017**JavaScript Rebuild** (now fixed): 9018```javascript 9019const thead = container.querySelector('.calendar-compact-grid thead tr'); 9020thead.style.background = themeStyles.header_bg; 9021thead.style.color = themeStyles.text_primary; 9022thead.style.borderColor = themeStyles.grid_border; 9023``` 9024 9025### Navigation Button Styling 9026 9027**PHP Rendering**: 9028```php 9029// Before (inconsistent): 9030style="color: $text_primary; border-color: $border;" 9031 9032// After (matches Today): 9033style="background: $border; 9034 color: $bg; 9035 border-color: $border;" 9036``` 9037 9038**JavaScript Rebuild**: 9039```javascript 9040// Match Today button style: 9041const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg; 9042navBtns.forEach(btn => { 9043 btn.style.background = themeStyles.border; 9044 btn.style.color = btnTextColor; 9045 btn.style.borderColor = themeStyles.border; 9046}); 9047``` 9048 9049### Complete Theme Coverage 9050 9051**Calendar Container**: ✅ Themed 9052**Calendar Header**: ✅ Themed 9053**Navigation Buttons**: ✅ Themed (v4.7.4!) 9054**Today Button**: ✅ Themed 9055**Month Title**: ✅ Themed 9056**Table Grid**: ✅ Themed 9057**Table Header (S M T W...)**: ✅ Themed (v4.7.4!) 9058**Day Cells**: ✅ Themed 9059**Today Cell**: ✅ Themed 9060**Empty Cells**: ✅ Themed 9061**Event List Panel**: ✅ Themed 9062**Event List Header**: ✅ Themed 9063**Search Box**: ✅ Themed 9064**Add Button**: ✅ Themed 9065**Event Items**: ✅ Themed 9066**Past Events Toggle**: ✅ Themed 9067 9068**Every single element themed!** ✨ 9069 9070### Before vs After 9071 9072**BEFORE (v4.7.3)**: 9073``` 9074Header: [◀] Feb 2026 [▶] [Today] 9075 ↑ ↑ ↑ 9076 Border only Border Filled ← Inconsistent! 9077 9078S M T W T F S ← Gray after nav ✗ 9079``` 9080 9081**AFTER (v4.7.4)**: 9082``` 9083Header: [◀] Feb 2026 [▶] [Today] 9084 ↑ ↑ ↑ 9085 Filled Filled Filled ← Consistent! ✓ 9086 9087S M T W T F S ← Themed always ✓ 9088``` 9089 9090### Visual Consistency 9091 9092**Matrix Theme Example**: 9093``` 9094┌─────────────────────────────┐ 9095│ [◀] February 2026 [▶][Today]│ ← All green 9096├─────────────────────────────┤ 9097│ S M T W T F S │ ← Green text 9098├─┬─┬─┬─┬─┬─┬─────────────────┤ 9099│1│2│3│4│5│6│7 │ ← Dark cells 9100└─┴─┴─┴─┴─┴─┴─────────────────┘ 9101 9102Perfect visual harmony! ✓ 9103``` 9104 9105### Professional Theme Example 9106 9107**Light theme with proper contrast**: 9108``` 9109┌─────────────────────────────┐ 9110│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text 9111├─────────────────────────────┤ 9112│ S M T W T F S │ ← Dark text on light 9113├─┬─┬─┬─┬─┬─┬─────────────────┤ 9114│1│2│3│4│5│6│7 │ ← Light gray cells 9115└─┴─┴─┴─┴─┴─┴─────────────────┘ 9116 9117Readable and professional! ✓ 9118``` 9119 9120### Pink Theme Example 9121 9122**Maximum bling**: 9123``` 9124┌─────────────────────────────┐ 9125│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons 9126├─────────────────────────────┤ 9127│ S M T W T F S │ ← Pink text, glow 9128├─┬─┬─┬─┬─┬─┬─────────────────┤ 9129│1│2│3│4│5│6│7 ✨ │ ← Dark pink cells 9130└─┴─┴─┴─┴─┴─┴─────────────────┘ 9131 9132Sparkly perfection! ✓ 9133``` 9134 9135### Testing Checklist 9136 9137All scenarios tested and working: 9138 9139**Initial Load**: ✅ All elements themed 9140**Navigate Months**: ✅ Everything stays themed 9141**Jump to Today**: ✅ Everything stays themed 9142**Filter Events**: ✅ Everything stays themed 9143**Search Events**: ✅ Everything stays themed 9144**Expand Past Events**: ✅ Everything stays themed 9145 9146**No element ever loses theme!** 9147 9148## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS 9149 9150### Fixed: Theme Now Persists When JavaScript Rebuilds Event List 9151- **Fixed:** Event items now themed when changing months via AJAX 9152- **Fixed:** Past Events toggle now themed after navigation 9153- **Fixed:** JavaScript functions now read theme data from container 9154- **Result:** Theme persists perfectly through all interactions! 9155 9156### The Problem 9157 9158**v4.7.2 behavior**: 9159``` 9160Initial page load: Everything themed ✓ 9161 9162Navigate to next month (AJAX reload): 9163 Calendar grid: Themed ✓ (fixed in v4.7.1) 9164 Event items: Gray ✗ (theme lost!) 9165 Past toggle: Gray ✗ (theme lost!) 9166 9167JavaScript rebuild broke theming! 9168``` 9169 9170### The Root Cause 9171 9172**JavaScript functions didn't have access to theme data**: 9173 9174```javascript 9175// Before (broken): 9176window.renderEventItem = function(event, date, calId, namespace) { 9177 // No theme data available! 9178 let html = '<div style="border-left-color: ' + color + ';">'; 9179 // ↑ Missing theme colors 9180} 9181``` 9182 9183**Problem**: Theme styles were only in PHP, not accessible to JavaScript! 9184 9185### The Fix 9186 9187**Store theme in data attributes** (already done in v4.7.1): 9188```php 9189<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 9190``` 9191 9192**JavaScript reads theme from container**: 9193```javascript 9194// Get theme data 9195const container = document.getElementById(calId); 9196const themeStyles = JSON.parse(container.dataset.themeStyles); 9197 9198// Apply to event items 9199const itemStyle = 'border-left-color: ' + color + ';' + 9200 'background: ' + themeStyles.cell_bg + ';' + 9201 'color: ' + themeStyles.text_primary + ';'; 9202 9203// Apply to past toggle 9204const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' + 9205 'color: ' + themeStyles.text_dim + ';'; 9206``` 9207 9208### What Was Fixed 9209 9210**1. renderEventItem() function**: 9211```javascript 9212// Now gets theme from container: 9213const container = document.getElementById(calId); 9214let themeStyles = {}; 9215if (container && container.dataset.themeStyles) { 9216 themeStyles = JSON.parse(container.dataset.themeStyles); 9217} 9218 9219// Applies theme to event item: 9220style="border-left-color: ${color}; 9221 background: ${themeStyles.cell_bg}; 9222 color: ${themeStyles.text_primary};" 9223``` 9224 9225**2. renderEventListFromData() function**: 9226```javascript 9227// Gets theme at start: 9228const container = document.getElementById(calId); 9229const themeStyles = JSON.parse(container.dataset.themeStyles); 9230 9231// Applies to past events toggle: 9232const toggleStyle = 9233 'background: ' + themeStyles.cell_bg + ';' + 9234 'color: ' + themeStyles.text_dim + ';' + 9235 'border-color: ' + themeStyles.grid_border + ';'; 9236``` 9237 9238### Before vs After 9239 9240**BEFORE (v4.7.2)**: 9241``` 9242Load page with Matrix theme: 9243┌─────────────┬─────────────┐ 9244│ Calendar │ Events │ 9245│ (Green) ✓ │ (Green) ✓ │ 9246└─────────────┴─────────────┘ 9247 9248Click "›" to next month (AJAX): 9249┌─────────────┬─────────────┐ 9250│ Calendar │ Events │ 9251│ (Green) ✓ │ (Gray) ✗ │ ← Theme lost! 9252└─────────────┴─────────────┘ 9253``` 9254 9255**AFTER (v4.7.3)**: 9256``` 9257Load page with Matrix theme: 9258┌─────────────┬─────────────┐ 9259│ Calendar │ Events │ 9260│ (Green) ✓ │ (Green) ✓ │ 9261└─────────────┴─────────────┘ 9262 9263Click "›" to next month (AJAX): 9264┌─────────────┬─────────────┐ 9265│ Calendar │ Events │ 9266│ (Green) ✓ │ (Green) ✓ │ ← Theme stays! 9267└─────────────┴─────────────┘ 9268 9269Navigate anywhere - theme persists! ✓ 9270``` 9271 9272### Data Flow 9273 9274**Complete theme persistence**: 9275``` 92761. PHP: Store theme in data attributes 9277 data-theme-styles='{"bg":"#242424",...}' 9278 92792. JavaScript: Read on initial load 9280 ✓ Already working (v4.7.1) 9281 92823. JavaScript: Read on AJAX rebuild 9283 ✓ NOW FIXED (v4.7.3) 9284 const themeStyles = JSON.parse(container.dataset.themeStyles); 9285 92864. Apply to all rebuilt elements 9287 ✓ Event items 9288 ✓ Past toggle 9289 ✓ Calendar cells 9290``` 9291 9292### Testing Scenarios 9293 9294All work perfectly now: 9295 9296**Scenario 1: Navigate Months**: 9297``` 9298Feb (Matrix) → Click › → Mar (Matrix) ✓ 9299Theme persists through navigation 9300``` 9301 9302**Scenario 2: Change Year**: 9303``` 93042026 (Purple) → Change to 2027 (Purple) ✓ 9305Theme persists through year change 9306``` 9307 9308**Scenario 3: Jump to Today**: 9309``` 9310Any month (Pink) → Click Today → Current (Pink) ✓ 9311Theme persists when jumping 9312``` 9313 9314**Scenario 4: Filter Events**: 9315``` 9316All events (Professional) → Filter namespace → Filtered (Professional) ✓ 9317Theme persists through filtering 9318``` 9319 9320### All Themes Work 9321 9322** Matrix**: Green everywhere, always ✓ 9323** Purple**: Purple everywhere, always ✓ 9324** Professional**: Blue everywhere, always ✓ 9325** Pink**: Pink everywhere, always ✓ 9326 9327**No matter what you do, theme stays consistent!** 9328 9329## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING 9330 9331### Fixed: All Remaining Theme Issues 9332- **Fixed:** Event items in sidebar now use theme colors 9333- **Fixed:** Past Events toggle now uses theme colors 9334- **Fixed:** Calendar cells now properly themed (issue with data passing) 9335- **Result:** Every element now perfectly themed! 9336 9337### What Was Fixed 9338 9339**1. Event Items in Sidebar** (was plain): 9340```php 9341// Before: 9342style="border-left-color: $color;" 9343 9344// After: 9345style="border-left-color: $color; 9346 background: $themeStyles['cell_bg']; 9347 color: $themeStyles['text_primary'];" 9348``` 9349 9350**2. Past Events Toggle** (was plain): 9351```php 9352// Before: 9353<div class="past-events-toggle"> 9354 9355// After: 9356<div class="past-events-toggle" 9357 style="background: $themeStyles['cell_bg']; 9358 color: $themeStyles['text_dim']; 9359 border-color: $themeStyles['grid_border'];"> 9360``` 9361 9362**3. Theme Data Flow** (was broken): 9363```php 9364// Now properly passes theme to all functions: 9365renderEventListContent($events, $calId, $namespace, $themeStyles); 9366``` 9367 9368### Before vs After 9369 9370**BEFORE (v4.7.1)**: 9371``` 9372Calendar header: Themed ✓ 9373Calendar grid: Themed ✓ 9374Event list panel: Themed ✓ 9375Event items: Plain gray ✗ 9376Past Events: Plain gray ✗ 9377``` 9378 9379**AFTER (v4.7.2)**: 9380``` 9381Calendar header: Themed ✓ 9382Calendar grid: Themed ✓ 9383Event list panel: Themed ✓ 9384Event items: Themed ✓ 9385Past Events: Themed ✓ 9386 9387Everything matches! ✨ 9388``` 9389 9390### Matrix Theme Example 9391 9392**Complete theming**: 9393``` 9394┌─────────────┬─────────────┐ 9395│ February │ Events │ ← Green header 9396├─────────────┼─────────────┤ 9397│ Dark cells │ • Meeting │ ← Green bg & text 9398│ Green text │ • Review │ ← Green bg & text 9399│ Today=green │ │ 9400├─────────────┼─────────────┤ 9401│ │ ▶ Past (5) │ ← Green bg 9402└─────────────┴─────────────┘ 9403 9404All green! ✓ 9405``` 9406 9407### Purple Theme Example 9408 9409``` 9410┌─────────────┬─────────────┐ 9411│ February │ Events │ ← Purple header 9412├─────────────┼─────────────┤ 9413│ Dark purple │ • Meeting │ ← Purple bg 9414│ Lavender │ • Review │ ← Lavender text 9415│ cells │ │ 9416├─────────────┼─────────────┤ 9417│ │ ▶ Past (5) │ ← Purple bg 9418└─────────────┴─────────────┘ 9419 9420All purple! ✓ 9421``` 9422 9423### Professional Theme Example 9424 9425``` 9426┌─────────────┬─────────────┐ 9427│ February │ Events │ ← Blue header 9428├─────────────┼─────────────┤ 9429│ Light gray │ • Meeting │ ← Light bg 9430│ Blue accents│ • Review │ ← Dark text 9431│ cells │ │ 9432├─────────────┼─────────────┤ 9433│ │ ▶ Past (5) │ ← Light bg 9434└─────────────┴─────────────┘ 9435 9436All professional! ✓ 9437``` 9438 9439### Pink Theme Example 9440 9441``` 9442┌─────────────┬─────────────┐ 9443│ February │ Events │ ← Hot pink header 9444├─────────────┼─────────────┤ 9445│ Dark pink │ • Meeting │ ← Pink bg 9446│ Pink text │ • Review │ ← Pink text 9447│ cells │ │ 9448├─────────────┼─────────────┤ 9449│ │ ▶ Past (5) │ ← Pink bg 9450└─────────────┴─────────────┘ 9451 9452All pink & sparkly! ✓ 9453``` 9454 9455### What's Themed Now 9456 9457**Calendar Section**: 9458- ✅ Container border & shadow 9459- ✅ Header background & text 9460- ✅ Navigation buttons 9461- ✅ Today button 9462- ✅ Grid table 9463- ✅ Day cells 9464- ✅ Today cell highlight 9465- ✅ Empty cells 9466 9467**Event List Section**: 9468- ✅ Panel background 9469- ✅ Header background 9470- ✅ Header text 9471- ✅ Search box 9472- ✅ Add button 9473- ✅ Event items ← NEW! 9474- ✅ Past Events toggle ← NEW! 9475 9476**100% themed!** 9477 9478## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING 9479 9480### Fixed: Theme Now Persists When Changing Months 9481- **Fixed:** Calendar theme no longer resets to default when navigating months 9482- **Fixed:** Theme data now stored in data attributes and used by JavaScript 9483- **Added:** rebuildCalendar now applies theme styles to all cells 9484 9485### ✨ Added: Event List Panel Now Themed 9486- **Added:** Right sidebar event list now uses theme colors 9487- **Added:** Event list header themed 9488- **Added:** Search box themed 9489- **Added:** Add button themed 9490- **Result:** Complete theme consistency across entire calendar! 9491 9492### The Problems 9493 9494**Problem 1: Month Navigation Lost Theme**: 9495``` 9496Initial load: Matrix theme ✓ (green) 9497Click "›" to next month 9498Result: Gray calendar ✗ (theme lost!) 9499``` 9500 9501**Problem 2: Event List Not Themed**: 9502``` 9503Calendar grid: Themed ✓ 9504Event list (right side): Plain gray ✗ 9505Inconsistent! 9506``` 9507 9508### The Fixes 9509 9510**Fix 1: Store Theme in Data Attributes**: 9511 9512```php 9513// PHP stores theme data: 9514<div data-theme="matrix" 9515 data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 9516``` 9517 9518**Fix 2: JavaScript Uses Theme Data**: 9519 9520```javascript 9521// rebuildCalendar reads theme: 9522const theme = container.dataset.theme; 9523const themeStyles = JSON.parse(container.dataset.themeStyles); 9524 9525// Apply to cells: 9526const cellBg = isToday ? 9527 themeStyles.cell_today_bg : 9528 themeStyles.cell_bg; 9529``` 9530 9531**Fix 3: Theme Event List Panel**: 9532 9533```php 9534// Event list header: 9535style="background:{$themeStyles['header_bg']}; 9536 color:{$themeStyles['text_primary']};" 9537 9538// Event list container: 9539style="background:{$themeStyles['bg']};" 9540 9541// Search box: 9542style="background:{$themeStyles['cell_bg']}; 9543 color:{$themeStyles['text_primary']};" 9544 9545// Add button: 9546style="background:{$themeStyles['border']};" 9547``` 9548 9549### Before vs After 9550 9551**BEFORE (v4.7.0)**: 9552``` 9553Load page: Matrix theme everywhere ✓ 9554Navigate to next month: 9555 Calendar grid: Gray ✗ (theme lost) 9556 Event list: Gray ✗ (never themed) 9557``` 9558 9559**AFTER (v4.7.1)**: 9560``` 9561Load page: Matrix theme everywhere ✓ 9562Navigate to next month: 9563 Calendar grid: Matrix theme ✓ (preserved!) 9564 Event list: Matrix theme ✓ (themed!) 9565 9566Perfect consistency! ✨ 9567``` 9568 9569### What's Now Themed 9570 9571**Calendar Grid** (after navigation): 9572- ✅ Cell backgrounds 9573- ✅ Today cell highlight 9574- ✅ Empty cells 9575- ✅ Text colors 9576- ✅ Border colors 9577 9578**Event List Panel**: 9579- ✅ Panel background 9580- ✅ Header background & text 9581- ✅ Search box styling 9582- ✅ Add button colors 9583- ✅ Namespace badge 9584 9585### Technical Implementation 9586 9587**Data Flow**: 9588``` 95891. PHP: Get theme from config 9590 $theme = getSidebarTheme(); 9591 95922. PHP: Get theme styles 9593 $themeStyles = getSidebarThemeStyles($theme); 9594 95953. PHP: Store in data attributes 9596 data-theme="matrix" 9597 data-theme-styles='{...JSON...}' 9598 95994. JavaScript: Read on navigation 9600 const themeStyles = JSON.parse(container.dataset.themeStyles); 9601 96025. JavaScript: Apply to rebuilt elements 9603 style="background:${themeStyles.bg};" 9604``` 9605 9606**Result**: Theme persists across navigations! ✓ 9607 9608### All Themes Work Perfectly 9609 9610** Matrix**: 9611- Month change: Green ✓ 9612- Event list: Green ✓ 9613 9614** Purple**: 9615- Month change: Purple ✓ 9616- Event list: Purple ✓ 9617 9618** Professional**: 9619- Month change: Blue ✓ 9620- Event list: Blue ✓ 9621 9622** Pink**: 9623- Month change: Pink ✓ 9624- Event list: Pink ✓ 9625 9626**Fully consistent theming everywhere!** 9627 9628## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! 9629 9630### ✨ Major Feature: Themes Now Apply to Compact Calendar 9631- **Added:** Full theme support for {{calendar-compact}} 9632- **Added:** Matrix, Purple, Professional, and Pink themes 9633- **Added:** Consistent theming across sidebar and calendar 9634- **Result:** Beautiful, cohesive appearance! 9635 9636### What's New 9637 9638**All 4 themes now work on the calendar**: 9639- **Matrix** - Green cyberpunk (default) 9640- **Purple** - Royal purple elegance 9641- **Professional** - Clean business blue 9642- **Pink** - Sparkly pink bling 9643 9644**Set in Admin Panel** → Theme applies everywhere! 9645 9646### Before vs After 9647 9648**BEFORE (v4.6.8)**: 9649``` 9650Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓ 9651Calendar: Plain gray (no theme) ✗ 9652 9653Inconsistent appearance! 9654``` 9655 9656**AFTER (v4.7.0)**: 9657``` 9658Sidebar: Themed ✓ 9659Calendar: SAME THEME ✓ 9660 9661Perfectly consistent! ✨ 9662``` 9663 9664### Theme Showcase 9665 9666**Matrix Theme** (Green): 9667``` 9668┌─────────────────────────┐ 9669│ ◀ February 2026 ▶ │ ← Green header 9670├─────────────────────────┤ 9671│ Dark background │ 9672│ Green borders │ 9673│ Green text │ 9674│ Green glow effects │ 9675└─────────────────────────┘ 9676``` 9677 9678**Purple Theme**: 9679``` 9680┌─────────────────────────┐ 9681│ ◀ February 2026 ▶ │ ← Purple header 9682├─────────────────────────┤ 9683│ Dark purple background │ 9684│ Purple borders │ 9685│ Lavender text │ 9686│ Purple glow │ 9687└─────────────────────────┘ 9688``` 9689 9690**Professional Theme** (Light): 9691``` 9692┌─────────────────────────┐ 9693│ ◀ February 2026 ▶ │ ← Blue header 9694├─────────────────────────┤ 9695│ Light gray background │ 9696│ Blue accents │ 9697│ Professional appearance │ 9698│ Clean, business-ready │ 9699└─────────────────────────┘ 9700``` 9701 9702**Pink Theme** (Bling): 9703``` 9704┌─────────────────────────┐ 9705│ ◀ February 2026 ▶ │ ← Hot pink header 9706├─────────────────────────┤ 9707│ Dark pink background │ 9708│ Pink borders & glow │ 9709│ Pink text │ 9710│ Sparkle effects ✨ │ 9711└─────────────────────────┘ 9712``` 9713 9714### What's Themed 9715 9716**Calendar Container**: 9717- Background color 9718- Border color 9719- Shadow/glow effect 9720 9721**Calendar Header**: 9722- Background gradient 9723- Border color 9724- Text color 9725- Button colors 9726 9727**Calendar Grid**: 9728- Grid background 9729- Grid borders 9730- Header row colors 9731 9732**Calendar Cells**: 9733- Cell background 9734- Today cell highlight 9735- Text color 9736- Border colors 9737 9738### Implementation 9739 9740**Theme Detection**: 9741```php 9742// Same theme system as sidebar 9743$theme = $this->getSidebarTheme(); 9744$themeStyles = $this->getSidebarThemeStyles($theme); 9745``` 9746 9747**Applied to Container**: 9748```php 9749style="background:' . $themeStyles['bg'] . '; 9750 border:2px solid ' . $themeStyles['border'] . '; 9751 box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';" 9752``` 9753 9754**Applied to Header**: 9755```php 9756style="background:' . $themeStyles['header_bg'] . '; 9757 color:' . $themeStyles['text_primary'] . ';" 9758``` 9759 9760**Applied to Cells**: 9761```php 9762$cellBg = $isToday ? 9763 $themeStyles['cell_today_bg'] : 9764 $themeStyles['cell_bg']; 9765``` 9766 9767### How to Change Theme 9768 9769**In Admin Panel**: 97701. Go to Admin → Calendar Management 97712. Click " Themes" tab 97723. Select theme (Matrix/Purple/Professional/Pink) 97734. Theme applies to BOTH sidebar and calendar! ✓ 9774 9775**No configuration needed** - Just select and enjoy! 9776 9777### Theme Colors 9778 9779**Matrix**: 9780- Background: `#242424` (dark gray) 9781- Border: `#00cc07` (matrix green) 9782- Text: `#00cc07` (green) 9783- Today: `#2a4d2a` (green highlight) 9784 9785**Purple**: 9786- Background: `#2a2030` (dark purple) 9787- Border: `#9b59b6` (royal purple) 9788- Text: `#b19cd9` (lavender) 9789- Today: `#3d2b4d` (purple highlight) 9790 9791**Professional**: 9792- Background: `#e8ecf1` (light blue-gray) 9793- Border: `#4a90e2` (business blue) 9794- Text: `#2c3e50` (dark blue-gray) 9795- Today: `#dce8f7` (light blue highlight) 9796 9797**Pink**: 9798- Background: `#1a0d14` (dark pink-black) 9799- Border: `#ff1493` (hot pink) 9800- Text: `#ff69b4` (pink) 9801- Today: `#3d2030` (pink highlight) 9802 9803### Consistency 9804 9805**Both use same theme**: 9806``` 9807Admin Panel → Set theme to "Purple" 9808 9809{{calendar}} sidebar: Purple theme ✓ 9810{{calendar-compact}}: Purple theme ✓ 9811{{calendar-panel}}: Will be themed next! ✓ 9812 9813All calendars match! ✨ 9814``` 9815 9816**Perfectly coordinated appearance!** 9817 9818## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER 9819 9820### Documentation: Added noheader Parameter Info 9821- **Added:** Documentation for existing `noheader` parameter 9822- **Updated:** README with complete eventlist parameter list 9823- **Info:** Feature already existed, just wasn't documented! 9824 9825### The noheader Parameter 9826 9827**What it does**: Hides the clock/date/weather header in eventlist 9828 9829**Usage**: 9830``` 9831{{eventlist today noheader}} 9832``` 9833 9834**Before (with header)**: 9835``` 9836┌─────────────────────────────────┐ 9837│ 3:45 PM ️ 72° Feb 7 │ ← Clock header 9838├─────────────────────────────────┤ 9839│ 5 min load │ CPU │ Memory │ ← System stats 9840├─────────────────────────────────┤ 9841│ Today's Events │ 9842│ • 10:00 Team Meeting │ 9843│ • 2:00 Project Review │ 9844└─────────────────────────────────┘ 9845``` 9846 9847**After (noheader)**: 9848``` 9849┌─────────────────────────────────┐ 9850│ Today's Events │ ← No header! 9851│ • 10:00 Team Meeting │ 9852│ • 2:00 Project Review │ 9853└─────────────────────────────────┘ 9854 9855Cleaner, more compact! ✓ 9856``` 9857 9858### When to Use noheader 9859 9860**Use WITH header** (default): 9861- Dashboard view 9862- Want to see current time 9863- Want weather info 9864- Want system stats 9865 9866**Use WITHOUT header** (`noheader`): 9867- Embedded in page content 9868- Just want event list 9869- Minimal design 9870- Space-constrained 9871 9872### Complete eventlist Parameters 9873 9874**Date Parameters**: 9875``` 9876date=YYYY-MM-DD Show specific date 9877daterange=START:END Show date range 9878``` 9879 9880**Filter Parameters**: 9881``` 9882namespace=name Filter by namespace 9883``` 9884 9885**Display Parameters**: 9886``` 9887today Show today with live clock 9888noheader Hide clock/date/weather header 9889showchecked Show completed tasks 9890range=day|week|month Show day/week/month range 9891``` 9892 9893### Examples 9894 9895**Full featured** (dashboard): 9896``` 9897{{eventlist today}} 9898``` 9899Shows: Clock, weather, system stats, events ✓ 9900 9901**Minimal** (embedded): 9902``` 9903{{eventlist today noheader}} 9904``` 9905Shows: Just events ✓ 9906 9907**Date range without header**: 9908``` 9909{{eventlist daterange=2026-02-01:2026-02-28 noheader}} 9910``` 9911Shows: Events for February, no header ✓ 9912 9913**With namespace filter**: 9914``` 9915{{eventlist today namespace=work noheader}} 9916``` 9917Shows: Today's work events, no header ✓ 9918 9919### Implementation 9920 9921**Already existed in code** (line 833): 9922```php 9923$noheader = isset($data['noheader']) ? true : false; 9924``` 9925 9926**Applied at render** (line 1010): 9927```php 9928if ($today && !empty($allEvents) && !$noheader) { 9929 // Render clock header with date/time/weather 9930} 9931``` 9932 9933**Just wasn't documented!** Now it is. ✓ 9934 9935## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE 9936 9937### ✨ Improvement: Removed Filter Badge Above Sidebar 9938- **Removed:** Filter badge no longer shows above compact calendar 9939- **Reason:** Filtering is already clearly visible in the calendar view 9940- **Result:** Cleaner UI, less redundancy 9941 9942### What Changed 9943 9944**BEFORE**: 9945``` 9946┌─────────────────────────┐ 9947│ Filtering: work ✕ │ ← Badge above calendar 9948├─────────────────────────┤ 9949│ ◀ February 2026 ▶ │ 9950├─────────────────────────┤ 9951│ Calendar grid with │ 9952│ filtered events │ ← Already filtered 9953└─────────────────────────┘ 9954 9955Badge was redundant - you can already see 9956the filtering in the calendar! 9957``` 9958 9959**AFTER**: 9960``` 9961┌─────────────────────────┐ 9962│ ◀ February 2026 ▶ │ ← No badge! 9963├─────────────────────────┤ 9964│ Calendar grid with │ 9965│ filtered events │ ← Filtering visible here 9966└─────────────────────────┘ 9967 9968Cleaner, simpler UI ✓ 9969``` 9970 9971### Why Remove It? 9972 9973**Redundant Information**: 9974- Calendar already shows only filtered events 9975- Namespace badges on events show which namespace 9976- Badge added visual clutter without value 9977 9978**Better UX**: 9979- Less visual noise 9980- More space for content 9981- Filtering still obvious from event display 9982 9983**Code Cleanup**: 9984```php 9985// Old code (removed): 9986if ($namespace && $namespace !== '*' && ...) { 9987 $html .= '<div class="calendar-namespace-filter">'; 9988 $html .= 'Filtering: ' . $namespace . ' ✕'; 9989 $html .= '</div>'; 9990} 9991 9992// New code: 9993// Filter badge removed - filtering shown in calendar view only 9994``` 9995 9996### How Filtering Still Works 9997 9998**Filtering IS Active**: 9999- Calendar only shows events from selected namespace ✓ 10000- Event namespace badges show which namespace ✓ 10001- Clear filtering still works (in calendar) ✓ 10002 10003**Just No Badge**: 10004- No redundant "Filtering: work ✕" above calendar 10005- Cleaner, more professional appearance 10006 10007### What You Still See 10008 10009**Namespace Information**: 10010``` 10011Event with namespace badge: 10012┌────────────────────────┐ 10013│ 10:00 Team Meeting │ 10014│ [work] ←─────────┼─ Namespace badge on event 10015└────────────────────────┘ 10016``` 10017 10018**Filtered View**: 10019- Only events from selected namespace visible 10020- Empty dates show no events 10021- Clear which namespace you're viewing 10022 10023**No Need for Top Badge**: 10024- Already obvious from events shown 10025- Namespace badges provide context 10026- Less clutter! 10027 10028### Summary 10029 10030**Removed**: Filter badge above calendar 10031**Kept**: All filtering functionality 10032**Benefit**: Cleaner UI 10033 10034**Filtering works the same, just without the redundant badge!** ✨ 10035 10036## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY 10037 10038### Fixed: Filter Badge Now Disappears Immediately 10039- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕ 10040- **Added:** Badge removal before page reload/AJAX call 10041- **Result:** Badge disappears instantly, no waiting for reload 10042 10043### The Problem 10044 10045**v4.6.5 behavior**: 10046``` 10047Click ✕ to clear filter 10048→ Page reloads or AJAX fires 10049→ Badge stays visible during reload ✗ 10050→ Badge finally disappears after reload ✓ 10051 10052User sees badge for 0.5-2 seconds after clicking ✕ 10053Feels laggy! ✗ 10054``` 10055 10056### The Fix 10057 10058**Immediately remove badge from DOM**: 10059 10060```javascript 10061window.clearNamespaceFilter = function(calId) { 10062 const container = document.getElementById(calId); 10063 10064 // IMMEDIATELY hide/remove the filter badge 10065 const filterBadge = container.querySelector('.calendar-namespace-filter'); 10066 if (filterBadge) { 10067 filterBadge.style.display = 'none'; // Hide instantly 10068 filterBadge.remove(); // Remove from DOM 10069 } 10070 10071 // THEN reload (AJAX or page reload) 10072 navCalendar(...) or window.location.href = ... 10073}; 10074``` 10075 10076### Before vs After 10077 10078**BEFORE (v4.6.5)**: 10079``` 10080Time 0ms: Click ✕ 10081┌─────────────────────────┐ 10082│ Filtering: work ✕ │ ← Still visible 10083├─────────────────────────┤ 10084 10085Time 500ms: Reload completes 10086┌─────────────────────────┐ 10087│ (no badge) │ ← Finally gone 10088├─────────────────────────┤ 10089 10090Delay: 500-2000ms ✗ 10091``` 10092 10093**AFTER (v4.6.6)**: 10094``` 10095Time 0ms: Click ✕ 10096┌─────────────────────────┐ 10097│ (no badge) │ ← Gone immediately! 10098├─────────────────────────┤ 10099 10100Time 500ms: Reload completes 10101┌─────────────────────────┐ 10102│ (no badge) │ ← Still gone 10103├─────────────────────────┤ 10104 10105Delay: 0ms ✓ 10106Instant feedback! ✓ 10107``` 10108 10109### Implementation 10110 10111**Two-step removal**: 10112 10113**Step 1**: Hide immediately 10114```javascript 10115filterBadge.style.display = 'none'; 10116// User sees badge disappear instantly 10117``` 10118 10119**Step 2**: Remove from DOM 10120```javascript 10121filterBadge.remove(); 10122// Clean up HTML 10123``` 10124 10125**Step 3**: Reload 10126```javascript 10127// Sidebar: Page reload 10128window.location.href = url.toString(); 10129 10130// Calendar: AJAX reload 10131navCalendar(calId, year, month, originalNamespace); 10132``` 10133 10134**Result**: Badge gone BEFORE reload starts ✓ 10135 10136### Why This Matters 10137 10138**User Experience**: 10139- Old: Click ✕ → Wait → Badge disappears 10140- New: Click ✕ → Badge disappears instantly 10141 10142**Perceived Performance**: 10143- Instant visual feedback 10144- Feels responsive 10145- Professional UX 10146 10147**Technical**: 10148- DOM manipulation is synchronous (instant) 10149- Network requests are asynchronous (slow) 10150- Do fast things first! 10151 10152**Badge now disappears the moment you click ✕!** ⚡ 10153 10154## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING 10155 10156### Fixed: Filter Badge Not Clearing in Sidebar 10157- **Fixed:** Filter badge now properly clears when clicking ✕ button 10158- **Fixed:** Sidebar widget now reloads page without namespace filter 10159- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately 10160 10161### The Problem 10162 10163**In {{calendar}} sidebar widget**: 10164``` 101651. Click namespace badge to filter 101662. Badge appears: "Filtering: work ✕" 101673. Click ✕ to clear filter 101684. Badge stays visible! ✗ 101695. Events still filtered! ✗ 10170``` 10171 10172**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar. 10173 10174### The Fix 10175 10176**Detect widget type and handle appropriately**: 10177 10178```javascript 10179window.clearNamespaceFilter = function(calId) { 10180 const container = document.getElementById(calId); 10181 10182 // Check if this is a sidebar widget 10183 const sidebarContainer = document.getElementById('sidebar-widget-' + calId); 10184 10185 if (sidebarContainer) { 10186 // SIDEBAR: Reload page without namespace parameter 10187 const url = new URL(window.location.href); 10188 url.searchParams.delete('namespace'); 10189 window.location.href = url.toString(); // Page reload 10190 return; 10191 } 10192 10193 // REGULAR CALENDAR: AJAX reload 10194 navCalendar(calId, year, month, originalNamespace); 10195}; 10196``` 10197 10198### How It Works 10199 10200**Sidebar Widget** ({{calendar}} syntax): 10201``` 10202Rendered server-side with PHP 10203Cannot be AJAX-reloaded 10204Solution: Reload entire page without ?namespace=work parameter 10205``` 10206 10207**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}): 10208``` 10209Has AJAX reload capability 10210Solution: Call navCalendar() to reload via AJAX 10211``` 10212 10213### Before vs After 10214 10215**BEFORE (v4.6.4)**: 10216``` 10217Sidebar widget filtered by "work": 10218┌─────────────────────────┐ 10219│ Filtering: work ✕ │ ← Click ✕ 10220├─────────────────────────┤ 10221│ Today │ 10222│ • Work meeting │ 10223└─────────────────────────┘ 10224 10225After clicking ✕: 10226┌─────────────────────────┐ 10227│ Filtering: work ✕ │ ← Still there! ✗ 10228├─────────────────────────┤ 10229│ Today │ 10230│ • Work meeting │ ← Still filtered! ✗ 10231└─────────────────────────┘ 10232``` 10233 10234**AFTER (v4.6.5)**: 10235``` 10236Sidebar widget filtered by "work": 10237┌─────────────────────────┐ 10238│ Filtering: work ✕ │ ← Click ✕ 10239├─────────────────────────┤ 10240│ Today │ 10241│ • Work meeting │ 10242└─────────────────────────┘ 10243 10244After clicking ✕ → Page reloads: 10245┌─────────────────────────┐ 10246│ (no filter badge) │ ← Cleared! ✓ 10247├─────────────────────────┤ 10248│ Today │ 10249│ • Work meeting │ 10250│ • Personal task │ ← All events! ✓ 10251│ • Project review │ 10252└─────────────────────────┘ 10253``` 10254 10255### Technical Details 10256 10257**Why Page Reload for Sidebar?** 10258 10259Sidebar widget is rendered server-side: 10260```php 10261// In syntax.php: 10262return $this->renderSidebarWidget($events, $namespace, $calId); 10263// ↑ PHP generates complete HTML 10264// No AJAX reload endpoint exists for sidebar 10265``` 10266 10267**Solution**: Remove `?namespace=work` from URL and reload page 10268```javascript 10269const url = new URL(window.location.href); 10270url.searchParams.delete('namespace'); // Remove filter 10271window.location.href = url.toString(); // Reload 10272``` 10273 10274**Why AJAX for Regular Calendar?** 10275 10276Regular calendars have AJAX endpoints: 10277```javascript 10278// action.php handles: 10279action: 'load_month' → Returns new month data 10280navCalendar() → Fetches and rebuilds calendar 10281``` 10282 10283### Filter Badge Behavior 10284 10285**Showing Badge** (when filtering): 10286- Server-side: PHP renders badge in HTML 10287- Client-side: JavaScript adds badge to header 10288 10289**Clearing Badge**: 10290- Sidebar: Page reload (removes ?namespace from URL) 10291- Calendar: AJAX reload (badge removed in rebuildCalendar) 10292 10293**Now works correctly for both!** ✓ 10294 10295## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR 10296 10297### Critical Hotfix: Fixed PHP Parse Error 10298- **Fixed:** Template literal backticks causing PHP syntax error 10299- **Fixed:** Changed JavaScript template literals to concatenation 10300- **Fixed:** Admin page now loads without parse errors 10301 10302### The Problem 10303 10304**v4.6.3 broke admin page**: 10305``` 10306Error loading plugin calendar 10307ParseError: syntax error, unexpected identifier "s", 10308expecting "," or ";" 10309``` 10310 10311**Cause**: JavaScript template literals inside PHP echo 10312```php 10313echo '<script> 10314 let nsOptions = `<option value="">(default)</option>`; 10315 ↑ PHP sees backtick and gets confused! 10316</script>'; 10317``` 10318 10319**Why it broke**: Backticks (`) are special in PHP too! 10320 10321### The Fix 10322 10323**Changed from template literals to concatenation**: 10324 10325**BEFORE (broken)**: 10326```javascript 10327let nsOptions = `<option value="">(default)</option>`; 10328nsOptions += `<option value="${namespace}">${namespace}</option>`; 10329console.log('Edit recurring:', namespace); 10330``` 10331 10332**AFTER (fixed)**: 10333```javascript 10334let nsOptions = "<option value=\\"\\">(default)</option>"; 10335nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>"; 10336console.log("Edit recurring:", namespace); 10337``` 10338 10339**Changes**: 10340- ✅ Backticks (`) → Double quotes (") 10341- ✅ Template literals (${var}) → Concatenation (" + var + ") 10342- ✅ Single quotes in console.log → Double quotes 10343- ✅ Properly escaped quotes for PHP echo 10344 10345### Technical Details 10346 10347**The Issue**: 10348```php 10349// Inside PHP echo string: 10350echo '<script> 10351 let x = `template ${literal}`; // ✗ Backtick breaks PHP! 10352</script>'; 10353``` 10354 10355**The Solution**: 10356```php 10357// Use regular string concatenation: 10358echo '<script> 10359 let x = "string " + variable; // ✓ Works in PHP echo! 10360</script>'; 10361``` 10362 10363**Quote Escaping**: 10364```javascript 10365// Double quotes inside PHP single-quote string: 10366'<option value=\"\">text</option>' 10367 ↑↑ Escaped for JavaScript 10368``` 10369 10370### Result 10371 10372**Before**: Admin page crashed with parse error ✗ 10373**After**: Admin page loads perfectly ✓ 10374 10375**No functionality changed - just syntax fix!** 10376 10377## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN 10378 10379### Critical Fix: Namespace Dropdown in Recurring Events Section 10380- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing 10381- **Fixed:** Current namespace now properly selected in dropdown 10382- **Fixed:** Namespace extraction from DOM now uses multiple methods 10383- **Added:** Console logging to debug namespace detection 10384 10385### The Problem 10386 10387**When editing from Recurring Events section**: 10388``` 10389Click "Edit" on recurring event 10390Namespace dropdown shows: 10391- (default) 10392- (nothing else!) ✗ 10393 10394Can't select any namespace! ✗ 10395``` 10396 10397**Why**: Broken namespace extraction logic 10398```javascript 10399// OLD CODE (broken): 10400const namespaces = Array.from(document.querySelectorAll("[id^=ns_]")) 10401 .map(el => { 10402 // Complex parsing that often failed 10403 const nsSpan = el.querySelector("span:nth-child(3)"); 10404 return nsSpan.textContent.replace(" ", "").trim(); 10405 }) 10406 .filter(ns => ns !== namespace); // Excluded current! ✗ 10407``` 10408 10409**Result**: Empty dropdown, can't change namespace! ✗ 10410 10411### The Fix 10412 10413**NEW CODE (robust)**: 10414```javascript 10415const namespaces = new Set(); 10416 10417// Method 1: Namespace explorer folders 10418document.querySelectorAll("[id^=ns_]").forEach(el => { 10419 const nsSpan = el.querySelector("span:nth-child(3)"); 10420 if (nsSpan) { 10421 let nsText = nsSpan.textContent.replace(" ", "").trim(); 10422 if (nsText && nsText !== "(default)") { 10423 namespaces.add(nsText); // ✓ 10424 } 10425 } 10426}); 10427 10428// Method 2: Datalist (backup method) 10429document.querySelectorAll("#namespaceList option").forEach(opt => { 10430 if (opt.value && opt.value !== "") { 10431 namespaces.add(opt.value); // ✓ 10432 } 10433}); 10434 10435// Build dropdown with ALL namespaces 10436let options = `<option value="">(default)</option>`; 10437 10438// Show current namespace as selected 10439if (namespace) { 10440 options += `<option value="${namespace}" selected>${namespace} (current)</option>`; 10441} 10442 10443// Show all other namespaces 10444for (const ns of nsArray) { 10445 if (ns !== namespace) { 10446 options += `<option value="${ns}">${ns}</option>`; 10447 } 10448} 10449``` 10450 10451**Result**: All namespaces visible! ✓ 10452 10453### How It Works Now 10454 10455**Before (Broken)**: 10456``` 10457Edit recurring event in "work" namespace 10458 10459Dropdown shows: 10460☐ (default) 10461 10462That's it! Can't select anything! ✗ 10463``` 10464 10465**After (Fixed)**: 10466``` 10467Edit recurring event in "work" namespace 10468 10469Dropdown shows: 10470☐ (default) 10471☑ work (current) ← Selected! 10472☐ personal 10473☐ projects 10474☐ meetings 10475 10476All namespaces available! ✓ 10477``` 10478 10479### Key Improvements 10480 10481**1. Dual extraction methods**: 10482- Primary: Parse namespace explorer DOM 10483- Backup: Read from datalist 10484- Result: Always finds namespaces ✓ 10485 10486**2. Current namespace included**: 10487```javascript 10488// OLD: Excluded current namespace 10489.filter(ns => ns !== namespace) ✗ 10490 10491// NEW: Include and mark as selected 10492options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓ 10493``` 10494 10495**3. Better error handling**: 10496```javascript 10497if (nsSpan) { // Check exists 10498 let nsText = nsSpan.textContent.replace(" ", "").trim(); 10499 if (nsText && nsText !== "(default)") { // Validate 10500 namespaces.add(nsText); 10501 } 10502} 10503``` 10504 10505**4. Console debugging**: 10506```javascript 10507console.log('Edit recurring - Current namespace:', namespace); 10508console.log('Available namespaces:', nsArray); 10509``` 10510 10511Open browser console (F12) to see what namespaces are detected! 10512 10513### Example Usage 10514 10515**Scenario**: Edit recurring "Team Meeting" in "work" namespace 10516 10517**Steps**: 105181. Go to Recurring Events section 105192. Click "Edit" on "Team Meeting" 105203. See namespace dropdown: 10521 - ☐ (default) 10522 - ☑ work (current) 10523 - ☐ personal 10524 - ☐ projects 105254. Select "personal" to move event 105265. Click "Save Changes" 105276. Event moved to "personal" namespace ✓ 10528 10529**Finally works as expected!** 10530 10531## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION 10532 10533### Recurring Events Namespace Fix 10534- **Fixed:** Namespace now properly preserved when editing recurring events 10535- **Fixed:** Namespace selector now allows selecting any namespace (not just default) 10536- **Added:** Better logging for namespace preservation debugging 10537- **Added:** Console logging to track namespace values during edit 10538 10539### The Namespace Problem 10540 10541**Issue 1**: Can't select non-default namespace 10542``` 10543When editing recurring event: 10544- Dropdown shows all namespaces ✓ 10545- User selects "work" 10546- Form submits with "" (empty/default) ✗ 10547``` 10548 10549**Issue 2**: Namespace not preserved 10550``` 10551Recurring event in "personal" namespace 10552Edit the title only 10553After save: namespace changed to "" (default) ✗ 10554``` 10555 10556### The Fixes 10557 10558**Fix 1**: Better namespace preservation logic 10559```php 10560// When editing recurring event: 10561$existingNamespace = $existingEventData['namespace']; 10562 10563// Preserve if user didn't explicitly change it: 10564if (empty($namespace) || 10565 strpos($namespace, '*') !== false || 10566 strpos($namespace, ';') !== false) { 10567 // User didn't select or selected wildcard 10568 $namespace = $existingNamespace; // Keep existing! 10569} 10570``` 10571 10572**Fix 2**: Proper form population 10573```javascript 10574// When editing, set BOTH inputs: 10575namespaceHidden.value = event.namespace || ''; // Hidden (submitted) 10576namespaceSearch.value = event.namespace || '(default)'; // Visible 10577 10578// Plus logging: 10579console.log('Set namespace for editing:', event.namespace); 10580``` 10581 10582**Fix 3**: Added detailed logging 10583```php 10584error_log("Preserving namespace '$namespace' (received='$receivedNamespace')"); 10585error_log("Using new namespace '$namespace'"); 10586error_log("No existing namespace to preserve"); 10587``` 10588 10589### How It Works Now 10590 10591**Scenario 1**: Edit without changing namespace 10592``` 10593Event in "work" namespace 10594Edit title to "Updated Meeting" 10595Namespace field shows: "work" 10596Hidden input value: "work" 10597Result: Saved in "work" ✓ 10598``` 10599 10600**Scenario 2**: Change namespace during edit 10601``` 10602Event in "personal" namespace 10603Edit and select "work" namespace 10604Hidden input value: "work" 10605Result: Saved in "work" ✓ 10606``` 10607 10608**Scenario 3**: Edit with empty/wildcard namespace 10609``` 10610Event in "projects" namespace 10611Namespace field empty or shows "personal;work" 10612System preserves: "projects" 10613Result: Saved in "projects" ✓ 10614``` 10615 10616### Debugging 10617 10618Now with console logging, you can see: 10619```javascript 10620Set namespace for editing: work 10621Hidden value: work 10622``` 10623 10624And in PHP logs: 10625``` 10626Calendar saveEvent recurring: Loaded existing data - namespace='work' 10627Calendar saveEvent recurring: Preserving namespace 'work' (received='') 10628``` 10629 10630**Namespace preservation now works correctly!** 10631 10632## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA 10633 10634### Recurring Events Edit Fix 10635- **Fixed:** Editing recurring events now preserves unchanged fields 10636- **Fixed:** Empty fields no longer erase existing data 10637- **Added:** Smart merge of existing event data with new changes 10638 10639### The Problem 10640 10641**Before**: Editing erased unchanged fields! 10642``` 10643Original recurring event: 10644- Title: "Team Meeting" 10645- Time: "10:00 AM" 10646- Description: "Weekly standup with engineering team" 10647- Color: Red 10648 10649User edits ONLY the title to "Staff Meeting" 10650Form sends: 10651- Title: "Staff Meeting" ✓ 10652- Time: "" ✗ (empty because user didn't change it) 10653- Description: "" ✗ (empty) 10654- Color: "#3498db" ✗ (default blue) 10655 10656Result after save: 10657- Title: "Staff Meeting" ✓ 10658- Time: BLANK ✗ 10659- Description: BLANK ✗ 10660- Color: Blue ✗ 10661``` 10662 10663**All the other data was lost!** ✗ 10664 10665### The Fix 10666 10667**After**: Preserves unchanged data! 10668```php 10669if ($eventId && $isRecurring) { 10670 // Load existing event data 10671 $existingEventData = getExistingEventData($eventId); 10672 10673 // Merge: use new value OR keep existing 10674 $title = $title ?: $existingEventData['title']; 10675 $time = $time ?: $existingEventData['time']; 10676 $description = $description ?: $existingEventData['description']; 10677 $color = ($color === '#3498db') ? 10678 $existingEventData['color'] : $color; 10679} 10680``` 10681 10682**Now**: 10683``` 10684User edits ONLY the title to "Staff Meeting" 10685 10686System: 106871. Loads existing event data 106882. Merges: new title + existing time/description/color 106893. Saves merged data 10690 10691Result: 10692- Title: "Staff Meeting" ✓ (changed) 10693- Time: "10:00 AM" ✓ (preserved!) 10694- Description: "Weekly standup..." ✓ (preserved!) 10695- Color: Red ✓ (preserved!) 10696``` 10697 10698**Only changed fields are updated!** ✓ 10699 10700### How It Works 10701 10702**Step 1**: Load existing data 10703```php 10704$existingEventData = $this->getExistingEventData( 10705 $eventId, 10706 $date, 10707 $namespace 10708); 10709``` 10710 10711**Step 2**: Merge with new data 10712```php 10713// If new value is empty, use existing value 10714$title = $newTitle ?: $existingEventData['title']; 10715$time = $newTime ?: $existingEventData['time']; 10716$description = $newDesc ?: $existingEventData['description']; 10717 10718// Special handling for color (default is #3498db) 10719if ($newColor === '#3498db' && $existingEventData['color']) { 10720 $color = $existingEventData['color']; 10721} 10722``` 10723 10724**Step 3**: Save merged data 10725```php 10726createRecurringEvents(..., $title, $time, $description, $color, ...); 10727``` 10728 10729### Fields Preserved 10730 10731When editing recurring events, these fields are now preserved if not changed: 10732- ✅ Title (if left blank) 10733- ✅ Time (if not specified) 10734- ✅ End Time (if not specified) 10735- ✅ Description (if left empty) 10736- ✅ Color (if still default blue) 10737 10738**Edit only what you want to change - everything else stays!** 10739 10740## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX 10741 10742### ✨ New Feature: Rename Namespaces 10743- **Added:** ✏️ Rename button in Namespace Explorer 10744- **Added:** Rename all events in a namespace at once 10745- **Added:** Automatic cleanup of old directory structure 10746 10747### Critical Fix: Recurring Events Actually Edit Now! 10748- **Fixed:** Editing recurring events now deletes ALL instances 10749- **Fixed:** Previously only deleted one instance, left orphans 10750- **Fixed:** Recurring events properly regenerated on edit 10751 10752### Namespace Rename Feature 10753 10754**Before**: Could only delete namespaces, not rename 10755 10756**After**: Click ✏️ to rename! 10757 10758``` 10759 work (15 events) [3] [✏️] [️] 10760 ↑ NEW! 10761``` 10762 10763**How It Works**: 107641. Click ✏️ rename button 107652. Enter new namespace name 107663. All events moved to new namespace 107674. Event `namespace` field updated in JSON 107685. Old directory cleaned up 10769 10770**Example**: 10771``` 10772Rename: "work" → "business" 10773 10774Before: 10775/data/meta/work/calendar/*.json 10776Events: {namespace: "work"} 10777 10778After: 10779/data/meta/business/calendar/*.json 10780Events: {namespace: "business"} 10781``` 10782 10783**Implementation**: 10784```php 10785private function renameNamespace() { 10786 // 1. Validate new name 10787 // 2. Rename directory 10788 // 3. Update all event namespace fields in JSON 10789 // 4. Clean up old empty directories 10790} 10791``` 10792 10793### Recurring Events Fix - The Problem 10794 10795**Before**: Editing didn't work! 10796``` 10797Original recurring event generates: 10798- Event-0 (Mon, Feb 10) 10799- Event-1 (Mon, Feb 17) 10800- Event-2 (Mon, Feb 24) 10801 10802User edits Event-0, changes title to "Updated" 10803 10804What SHOULD happen: 10805- Delete Event-0, Event-1, Event-2 10806- Generate new instances with "Updated" title 10807 10808What ACTUALLY happened: 10809- Delete Event-0 only ✗ 10810- Generate new instances 10811- Result: Event-1 and Event-2 still show old title! ✗ 10812``` 10813 10814**After**: Properly deletes ALL instances! 10815 10816**The Fix**: 10817```php 10818private function deleteEvent() { 10819 $event = getEvent($eventId); 10820 10821 // Check if recurring 10822 if ($event['recurring'] && $event['recurringId']) { 10823 // Delete ALL instances with same recurringId 10824 deleteAllRecurringInstances($recurringId); 10825 } 10826 10827 // Then normal delete for spanning events 10828} 10829 10830private function deleteAllRecurringInstances($recurringId) { 10831 // Scan ALL calendar JSON files 10832 foreach (glob('*.json') as $file) { 10833 // Filter out events with matching recurringId 10834 $events = array_filter($events, function($event) { 10835 return $event['recurringId'] !== $recurringId; 10836 }); 10837 } 10838} 10839``` 10840 10841**Result**: 10842- Edit "Weekly Team Meeting" → ALL instances updated ✓ 10843- Delete recurring event → ALL instances deleted ✓ 10844- No more orphaned events! ✓ 10845 10846### Recurring Event Fields 10847 10848Every recurring event has: 10849```json 10850{ 10851 "id": "abc123-0", 10852 "recurring": true, 10853 "recurringId": "abc123", ← Links all instances 10854 ... 10855} 10856``` 10857 10858When editing/deleting, we find ALL events with same `recurringId` and remove them! 10859 10860**Finally, recurring events work properly!** 10861 10862## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS 10863 10864### Important Events Sorting - ACTUALLY FIXED! 10865- **Fixed:** Important Events now REALLY sorted by date first, then time 10866- **Fixed:** renderSidebarSection was re-sorting and breaking the order 10867- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only 10868 10869### Pink Theme Tooltip Bling! 10870- **Added:** Pink gradient tooltips (hot pink → light pink) 10871- **Added:** Glowing pink border on tooltips 10872- **Added:** Sparkling heart () appears next to tooltip! 10873- **Added:** Heart has pink glow drop-shadow 10874 10875### The Sorting Bug - Root Cause 10876 10877**Problem**: Two sorts were happening! 10878 10879**Sort #1** (Line 2047): Before rendering 10880```php 10881usort($importantEvents, ...) // Sort by date ✓ 10882``` 10883 10884**Sort #2** (Line 2751): Inside renderSidebarSection 10885```php 10886usort($events, ...) // Sort by TIME ONLY ✗ 10887// This was breaking the date order! 10888``` 10889 10890**The Fix**: Different sorting for different sections 10891```php 10892if ($title === 'Important Events') { 10893 // Sort by DATE first, then time 10894 usort($events, function($a, $b) { 10895 if ($dateA !== $dateB) { 10896 return strcmp($dateA, $dateB); // DATE first! 10897 } 10898 // Same date - sort by time 10899 return timeCompare($a, $b); 10900 }); 10901} else { 10902 // Today/Tomorrow - sort by TIME only (same date) 10903 usort($events, function($a, $b) { 10904 return timeCompare($a, $b); 10905 }); 10906} 10907``` 10908 10909**Result**: Important Events now CORRECTLY sorted! 10910``` 10911✓ Sun, Feb 8 - 3:30 PM Super Bowl 10912✓ Tue, Feb 10 - 11:30 AM Doctor visit 10913✓ Sat, Feb 14 - Valentine's Day (all-day) 10914✓ Sat, Feb 14 - 8:00 PM Crab Shack 10915``` 10916 10917### Pink Tooltip Magic! 10918 10919**Normal Tooltips**: Black background, plain 10920```css 10921background: rgba(0, 0, 0, 0.95); 10922color: #fff; 10923``` 10924 10925**Pink Theme Tooltips**: FABULOUS! 10926```css 10927/* Pink gradient background */ 10928background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%); 10929 10930/* Glowing pink border */ 10931border: 2px solid #ff85c1; 10932 10933/* Double glow shadow */ 10934box-shadow: 10935 0 0 15px rgba(255, 20, 147, 0.6), 10936 0 4px 12px rgba(0, 0, 0, 0.4); 10937 10938/* Bold text */ 10939font-weight: 600; 10940``` 10941 10942**Plus**: Sparkling heart next to tooltip! 10943```css 10944.sidebar-pink [data-tooltip]:after { 10945 content: ''; 10946 font-size: 12px; 10947 filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8)); 10948} 10949``` 10950 10951**The Effect**: 10952``` 10953Hover over ⚠ conflict warning: 10954┌────────────────────┐ 10955│ Conflicts with: │ ← Pink gradient 10956│ • Event 1 (3PM) │ ← Pink border 10957│ • Event 2 (4PM) │ ← Pink glow 10958└────────────────────┘ 10959``` 10960 10961**Maximum glamour on tooltips too!** ✨ 10962 10963## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING 10964 10965### Important Events Order Fixed 10966- **Fixed:** Important Events now sorted by date (earliest first) 10967- **Fixed:** Events on same date sorted by time (chronological) 10968- **Fixed:** All-day events appear last within each date 10969 10970### Sorting Issue 10971 10972**Before**: Random order 10973``` 10974Important Events: 10975 Valentine's Day (Sat, Feb 14) 1097611:30 AM Doctor visit (Tue, Feb 10) ← Feb 10 after Feb 14! 109773:30 PM Super Bowl (Sun, Feb 8) ← Feb 8 after Feb 14! 109788:00 PM Crab Shack (Sat, Feb 14) 10979``` 10980 10981**After**: Chronological order 10982``` 10983Important Events: 109843:30 PM Super Bowl (Sun, Feb 8) ← Earliest! 1098511:30 AM Doctor visit (Tue, Feb 10) 10986 Valentine's Day (Sat, Feb 14) ← All-day event 109878:00 PM Crab Shack (Sat, Feb 14) ← Same day, sorted by time 10988``` 10989 10990### Sorting Logic 10991 10992**Primary Sort**: By date 10993```php 10994strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14" 10995``` 10996 10997**Secondary Sort**: By time (within same date) 10998```php 10999// All-day events (no time) go last 11000if (empty($timeA) && !empty($timeB)) return 1; 11001if (!empty($timeA) && empty($timeB)) return -1; 11002 11003// Both have times - sort chronologically 11004$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes 11005$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes 11006return $aMinutes - $bMinutes; // 690 < 1200 11007``` 11008 11009**Result**: 110101. Sun, Feb 8 - 3:30 PM (earliest date & time) 110112. Tue, Feb 10 - 11:30 AM (next date) 110123. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14) 110134. Sat, Feb 14 - 8:00 PM (timed event on Feb 14) 11014 11015**Perfect chronological order for next 2 weeks!** ✓ 11016 11017## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨ 11018 11019### EXTREME PINK BLING EFFECTS! 11020- **Added:** Click sparkles - 8 sparkles burst out on every click! 11021- **Added:** Auto-sparkles - random sparkles appear every 3 seconds 11022- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover 11023- **Added:** Pulsing border glow - constantly breathing pink glow 11024- **Added:** Drop shadows on sparkles for extra depth 11025- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows! 11026 11027### Sparkle Effects Breakdown 11028 11029**Click Sparkles** : 11030```javascript 11031// 8 sparkles burst out when you click anywhere! 11032for (let i = 0; i < 8; i++) { 11033 // Staggered appearance (40ms apart) 11034 createSparkle(x, y); 11035} 11036 11037// Sparkle emojis: 11038["✨", "", "", "⭐", "", "", "", "", "", ""] 11039``` 11040 11041**Each sparkle**: 11042- Starts at click point 11043- Flies outward 30-60px in random direction 11044- Spins 360 degrees 11045- Fades in and out 11046- Has pink glow drop-shadow 11047- Disappears after 1 second 11048 11049**Auto Sparkles** ⏰: 11050```javascript 11051// Random sparkle every 3 seconds 11052setInterval(() => { 11053 const x = Math.random() * width; 11054 const y = Math.random() * height; 11055 createSparkle(x, y); 11056}, 3000); 11057``` 11058 11059**Result**: Constant magical sparkles even without clicking! ✨ 11060 11061**Hover Mega-Glow** : 11062```css 11063.sidebar-pink:hover { 11064 box-shadow: 11065 0 0 30px rgba(255, 20, 147, 0.9), 11066 0 0 50px rgba(255, 20, 147, 0.5) !important; 11067} 11068``` 11069 11070**Result**: Sidebar EXPLODES with pink glow when you hover over it! 11071 11072**Pulsing Border Glow** : 11073```css 11074@keyframes pulse-glow { 11075 0%, 100% { 11076 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 11077 } 11078 50% { 11079 box-shadow: 11080 0 0 25px rgba(255, 20, 147, 0.8), 11081 0 0 40px rgba(255, 20, 147, 0.4); 11082 } 11083} 11084 11085animation: pulse-glow 3s ease-in-out infinite; 11086``` 11087 11088**Result**: Border continuously breathes with pink glow! 11089 11090**Sparkle Animation** : 11091```css 11092@keyframes sparkle { 11093 0% { 11094 opacity: 0; 11095 transform: translate(0, 0) scale(0) rotate(0deg); 11096 } 11097 50% { 11098 opacity: 1; 11099 transform: translate(halfway) scale(1) rotate(180deg); 11100 } 11101 100% { 11102 opacity: 0; 11103 transform: translate(far) scale(0) rotate(360deg); 11104 } 11105} 11106``` 11107 11108**Result**: Sparkles spin, grow, shrink, and fly! 11109 11110### Complete Pink Bling Experience: 11111 11112**Always Active**: 11113- ✨ Pulsing pink border glow (3 second cycle) 11114- ✨ Auto-sparkles every 3 seconds 11115 11116**On Hover**: 11117- MEGA GLOW EFFECT (2x brightness!) 11118 11119**On Click**: 11120- 8 sparkles EXPLODE outward! 11121- Random emojis (hearts, stars, diamonds, crowns!) 11122- Each sparkle spins 360° while flying 11123- Pink glow drop-shadow on each sparkle 11124 11125**The Result**: 11126- Click anywhere = SPARKLE EXPLOSION! 11127- Hover anywhere = MEGA GLOW! ✨ 11128- Always breathing and sparkling! 11129- Maximum glamour! 11130- Wife approval: 1000%! 11131 11132**THIS IS THE MOST FABULOUS CALENDAR EVER!** ✨ 11133 11134## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH 11135 11136### Pink Theme Final Touches 11137- **Fixed:** Add Event text now black (was bright pink, hard to read) 11138- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!) 11139- **Removed:** Text shadow on Add Event button (cleaner with black text) 11140 11141### Add Event Text - Black & Readable! 11142 11143**Before**: Bright pink text (#ff1493) on dark pink background 11144```php 11145$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read! 11146text-shadow: 0 0 3px #ff1493; // Glowy pink 11147``` 11148 11149**After**: Black text, no shadow, perfect contrast! 11150```php 11151$addBtnTextColor = $theme === 'pink' ? '#000000' : ...; 11152$addBtnTextShadow = $theme === 'pink' ? 'none' : ...; 11153``` 11154 11155**Result**: 11156- Black text pops against dark pink background ✓ 11157- Easy to read ✓ 11158- Professional look with bling ✓ 11159 11160### Clock Border - All Pink! 11161 11162**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green 11163 11164**Before**: 11165```php 11166// Inline style (only bottom): 11167style="border-bottom:2px solid #ff1493;" 11168 11169// CSS (all sides): 11170.eventlist-today-header { 11171 border: 2px solid #00cc07; // Green on top/sides! 11172} 11173``` 11174 11175**After**: Inline style overrides ALL sides 11176```php 11177style="border:2px solid #ff1493;" // All 4 sides pink! 11178``` 11179 11180**Result**: Clock box now 100% pink border on all four sides! ✓ 11181 11182### What Changed: 11183 11184**Add Event Button**: 11185- Background: #b8156f (dark pink) ✓ 11186- Text: **#000000 (black)** ← NEW! 11187- Text shadow: **none** ← NEW! 11188- Glow: 0 0 10px pink ✓ 11189 11190**Clock Border**: 11191- Top: **#ff1493 (pink)** ← FIXED! 11192- Right: **#ff1493 (pink)** ← FIXED! 11193- Bottom: #ff1493 (pink) ✓ 11194- Left: **#ff1493 (pink)** ← FIXED! 11195 11196**Perfect pink theme - wife approved!** ✨ 11197 11198## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION 11199 11200### Pink Theme Complete Makeover 11201- **Fixed:** Clock border now completely pink (was green on sides/top) 11202- **Changed:** Today/Tomorrow/Important sections now different shades of pink 11203- **Changed:** Add Event button now dark pink (was clashing blue) 11204- **Changed:** System status bars now pink gradient (3 shades!) 11205 11206### All-Pink Everything! 11207 11208**Clock Border**: 11209```css 11210/* Before: Green border */ 11211border: 2px solid #00cc07; 11212 11213/* After: Hot pink border */ 11214.sidebar-pink .eventlist-today-header { 11215 border-color: #ff1493; 11216 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 11217} 11218``` 11219 11220**Section Colors** (Different Pink Shades): 11221```php 11222// Before: Orange, green, purple 11223'Today' => '#ff9800', 11224'Tomorrow' => '#4caf50', 11225'Important' => '#9b59b6' 11226 11227// After: Hot pink, pink, light pink 11228'Today' => '#ff1493', // Hot pink (DeepPink) 11229'Tomorrow' => '#ff69b4', // Pink (HotPink) 11230'Important' => '#ff85c1' // Light pink 11231``` 11232 11233**Add Event Button**: 11234```php 11235// Before: Clashing blue 11236background: #3498db; 11237 11238// After: Dark pink with glow 11239background: #b8156f; // Dark pink 11240hover: #8b0f54; // Darker pink 11241shadow: 0 0 10px rgba(255, 20, 147, 0.5); 11242``` 11243 11244**System Status Bars** (Pink Gradient): 11245```css 11246/* 5-min load average */ 11247.sidebar-pink .eventlist-cpu-fill { 11248 background: #ff1493; /* Hot pink */ 11249 box-shadow: 0 0 5px rgba(255, 20, 147, 0.7); 11250} 11251 11252/* Realtime CPU */ 11253.sidebar-pink .eventlist-cpu-fill-purple { 11254 background: #ff69b4; /* Pink */ 11255 box-shadow: 0 0 5px rgba(255, 105, 180, 0.7); 11256} 11257 11258/* Memory */ 11259.sidebar-pink .eventlist-cpu-fill-orange { 11260 background: #ff85c1; /* Light pink */ 11261 box-shadow: 0 0 5px rgba(255, 133, 193, 0.7); 11262} 11263``` 11264 11265### Pink Theme Visual Hierarchy: 11266 11267**Darkest → Lightest Pink Shades**: 112681. Add Event button: #b8156f (dark pink) 112692. Today section: #ff1493 (hot pink / deep pink) 112703. System bar 1: #ff1493 (hot pink) 112714. Tomorrow section: #ff69b4 (pink) 112725. System bar 2: #ff69b4 (pink) 112736. Important section: #ff85c1 (light pink) 112747. System bar 3: #ff85c1 (light pink) 11275 11276**Result**: Beautiful pink gradient throughout entire sidebar! ✨ 11277 11278### What's Pink Now: 11279 11280✅ Sidebar background & border 11281✅ **Clock border** ← FIXED! 11282✅ Header gradient 11283✅ Week grid 11284✅ **Add Event button** ← FIXED! 11285✅ **Today section** ← Different shade! 11286✅ **Tomorrow section** ← Different shade! 11287✅ **Important section** ← Different shade! 11288✅ Event text & bars 11289✅ **System status bars** ← All 3 different pink shades! 11290✅ All shadows & glows 11291 11292**EVERYTHING is pink and fabulous!** ✨ 11293 11294## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS 11295 11296### ✨ New Theme: Pink Bling! 11297- **Added:** Glamorous hot pink theme with maximum sparkle 11298- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic 11299- **Perfect for:** Fabulous calendars that demand attention ✨ 11300 11301### Professional Theme Shadow Fix 11302- **Fixed:** Section headers now have subtle shadow (not glow) 11303- **Fixed:** Clicked day panel header has proper shadow 11304 11305### Pink Bling Theme Colors 11306 11307**Background & Borders**: 11308```php 11309'bg' => '#1a0d14', // Dark rich pink-black 11310'border' => '#ff1493', // Hot pink (DeepPink) 11311'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow 11312``` 11313 11314**Text Colors**: 11315```php 11316'text_primary' => '#ff69b4', // Hot pink 11317'text_bright' => '#ff1493', // Deep pink 11318'text_dim' => '#ff85c1', // Light pink 11319``` 11320 11321**Week Grid**: 11322```php 11323'grid_bg' => '#2d1a24', // Dark purple-pink 11324'cell_bg' => '#1a0d14', // Dark 11325'cell_today_bg' => '#3d2030', // Highlighted purple-pink 11326``` 11327 11328**Special Effects**: 11329```php 11330'bar_glow' => '0 0 5px', // Extra sparkly glow! 11331'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling! 11332``` 11333 11334### Professional Theme Shadow Fix 11335 11336**Before**: Section headers had colored glow 11337```php 11338box-shadow: 0 0 8px #3498db; // Blue glow - wrong! 11339``` 11340 11341**After**: Section headers have subtle shadow 11342```php 11343$headerShadow = ($theme === 'professional') ? 11344 '0 2px 4px rgba(0, 0, 0, 0.15)' : // Shadow for professional 11345 '0 0 8px ' . $accentColor; // Glow for others 11346``` 11347 11348**Result**: 11349- **Matrix/Purple/Pink**: Colored glow on headers ✓ 11350- **Professional**: Clean grey shadow (no glow) ✓ 11351 11352### All Four Themes: 11353 11354** Matrix Edition**: 11355- Dark green (#00cc07) 11356- Neon glow effects 11357- Hacker aesthetic 11358 11359** Purple Dream**: 11360- Elegant purple (#9b59b6) 11361- Violet glow effects 11362- Royal aesthetic 11363 11364** Professional Blue**: 11365- Clean grey/blue (#4a90e2) 11366- Subtle shadows (NO glow) 11367- Corporate aesthetic 11368 11369** Pink Bling** (NEW!): 11370- Hot pink (#ff1493) 11371- MAXIMUM sparkle & glow 11372- Glamorous aesthetic ✨ 11373 11374### Technical Implementation 11375 11376**Theme Added To**: 11377- `getSidebarThemeStyles()` - color definitions 11378- `getSidebarTheme()` - validation 11379- `saveSidebarTheme()` - admin save 11380- Admin panel - UI with preview 11381- All shadow/glow calculations 11382- JavaScript theme colors 11383- Clicked day panel colors 11384 11385**Perfect for users who want FABULOUS pink calendars!** ✨ 11386 11387## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY 11388 11389### Text Glow Refinement 11390- **Changed:** Reduced text glow from 3px to 2px (less intense) 11391- **Fixed:** Clicked day panel now has same text glow as sections 11392 11393### Text Glow Reduction 11394 11395**Before**: Text glow was too strong (3px) 11396```php 11397// Sections: 11398text-shadow: 0 0 3px #00cc07; // Too bright! 11399 11400// Clicked day panel: 11401text-shadow: 0 0 3px #00cc07; // Too bright! 11402``` 11403 11404**After**: Subtler text glow (2px) 11405```php 11406// Sections: 11407text-shadow: 0 0 2px #00cc07; // Just right ✓ 11408 11409// Clicked day panel: 11410text-shadow: 0 0 2px #00cc07; // Just right ✓ 11411``` 11412 11413**Visual Impact**: 11414- **Matrix**: Softer green glow, easier to read 11415- **Purple**: Softer purple glow, more elegant 11416- **Professional**: Still no glow (clean) 11417 11418### Consistency Fix 11419 11420**Before**: Sections had glow, clicked day panel had NO glow 11421 11422**After**: Both sections AND clicked day panel have matching subtle glow 11423 11424**Where Glow Appears**: 11425- ✅ Today section event text 11426- ✅ Tomorrow section event text 11427- ✅ Important section event text 11428- ✅ **Clicked day panel event text** ← NOW CONSISTENT! 11429 11430**Result**: 11431- Glow is less intense and easier on eyes ✓ 11432- All event text has consistent styling ✓ 11433- Matrix/Purple themes more refined ✓ 11434 11435### Technical Details 11436 11437**PHP (Sections)**: 11438```php 11439$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';'; 11440``` 11441 11442**JavaScript (Clicked Day Panel)**: 11443```javascript 11444themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple 11445eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'"; 11446``` 11447 11448**Perfect consistency and subtle elegance!** ✨ 11449 11450## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY 11451 11452### ✨ Important Events Enhancement 11453- **Changed:** Important events now show from next 2 weeks (not just current week) 11454- **Fixed:** Important events on Sunday after current week now visible 11455- **Changed:** Events loaded 2 weeks into future for Important section 11456 11457### Background Cleanup 11458- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections 11459- **Removed:** Grey backgrounds from individual events 11460- **Result:** Clean transparent backgrounds, original dark Matrix look restored 11461 11462### Important Events - Future Coverage 11463 11464**Before**: Only showed Important events from current week 11465```php 11466if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 11467 $importantEvents[] = $event; 11468} 11469``` 11470 11471**After**: Shows Important events from today through next 2 weeks 11472```php 11473// Load events 2 weeks out 11474$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days')); 11475 11476// Show all important events from today forward 11477if ($isImportant && $dateKey >= $todayStr) { 11478 $importantEvents[] = $event; 11479} 11480``` 11481 11482**Example**: 11483- Today: Saturday Feb 7 11484- Current week: Sun Feb 1 → Sat Feb 7 11485- Important events shown: Feb 7 → Feb 21 (today + 14 days) 11486 11487**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓ 11488 11489### Background Removal 11490 11491**Before**: Light grey/white backgrounds added 11492```php 11493// Section background: 11494$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay 11495 11496// Event background: 11497$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay 11498``` 11499 11500**After**: No backgrounds (transparent) 11501```php 11502// Section: No background property 11503<div style="padding:4px 0;"> 11504 11505// Event: No background property 11506<div style="padding:4px 6px; ..."> 11507``` 11508 11509**Result**: 11510- Clean, dark Matrix aesthetic restored ✓ 11511- Purple theme darker and more elegant ✓ 11512- Professional theme still has its light grey sidebar bg ✓ 11513- Events stand out with just color bars and borders ✓ 11514 11515### What Changed: 11516 11517**Sections (Today/Tomorrow/Important)**: 11518- ❌ No more grey overlay 11519- ✓ Transparent background 11520- ✓ Colored borders & glows remain 11521 11522**Individual Events**: 11523- ❌ No more grey overlay 11524- ✓ Transparent background 11525- ✓ Colored bars & borders remain 11526 11527**Perfect! Back to the original clean dark look with future Important events!** 11528 11529## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR 11530 11531### Final Theme Polish 11532- **Fixed:** Today/Tomorrow/Important section shadows now match theme 11533- **Fixed:** Event description text color now uses theme dim color 11534 11535### Section Shadow Fix 11536 11537**Problem**: Sections always had green glow regardless of theme 11538 11539**Before**: 11540```php 11541// Hardcoded green: 11542box-shadow: 0 0 5px rgba(0, 204, 7, 0.2); 11543``` 11544 11545**After**: 11546```php 11547// Theme-aware: 11548$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' : 11549 ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' : 11550 '0 2px 4px rgba(0, 0, 0, 0.1)'); 11551``` 11552 11553**Result**: 11554- **Matrix**: Green glow around sections ✓ 11555- **Purple**: Purple glow around sections ✓ 11556- **Professional**: Subtle grey shadow (no glow) ✓ 11557 11558### Description Color Fix 11559 11560**Problem**: Description text always green in clicked day panel 11561 11562**Before**: 11563```javascript 11564color: #00aa00; // Always green 11565``` 11566 11567**After**: 11568```javascript 11569color: themeColors.text_dim; // Theme dim color 11570``` 11571 11572**Result**: 11573- **Matrix**: Dim green (#00aa00) ✓ 11574- **Purple**: Dim purple (#8e7ab8) ✓ 11575- **Professional**: Grey (#7f8c8d) ✓ 11576 11577### Now 100% Theme Consistent 11578 11579Every single visual element respects theme: 11580- ✅ Sidebar background & border 11581- ✅ Header colors & shadows 11582- ✅ Week grid & cells 11583- ✅ Add Event button 11584- ✅ Section borders & **shadows** ← Fixed! 11585- ✅ Event titles & times 11586- ✅ Event **descriptions** ← Fixed! 11587- ✅ Clicked day panel 11588- ✅ Event bars & glows 11589 11590**Absolute perfection across all three themes!** ✨ 11591 11592## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND 11593 11594### Theme Improvements 11595- **Fixed:** Clicked day panel now uses correct theme colors 11596- **Changed:** Professional Blue background now light grey (not white) 11597- **Added:** Theme colors passed to JavaScript for dynamic rendering 11598 11599### Clicked Day Panel Theming 11600 11601**Before**: Always blue regardless of theme 11602```javascript 11603// Hardcoded blue: 11604color:#00cc07; // Always green 11605background:#3498db; // Always blue 11606``` 11607 11608**After**: Theme-aware colors 11609```php 11610// PHP passes theme to JavaScript: 11611window.themeColors_XXX = { 11612 text_primary: '#00cc07' or '#b19cd9' or '#2c3e50', 11613 text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2', 11614 text_shadow: '0 0 3px ...' or '', 11615 event_bg: 'rgba(...)', 11616 border_color: 'rgba(...)', 11617 bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)' 11618}; 11619 11620// JavaScript uses theme colors: 11621color: themeColors.text_primary; 11622background: themeColors.event_bg; 11623``` 11624 11625**Result**: 11626- Matrix: Green panel with green glow ✓ 11627- Purple: Purple panel with purple glow ✓ 11628- Professional: Blue panel, no glow, clean ✓ 11629 11630### Professional Theme Background Change 11631 11632**Before**: Almost white (#f5f7fa, #ffffff) 11633```php 11634'bg' => '#f5f7fa', // Very light 11635'cell_bg' => '#ffffff', // Pure white 11636``` 11637 11638**After**: Light grey tones 11639```php 11640'bg' => '#e8ecf1', // Soft grey-blue 11641'cell_bg' => '#f5f7fa', // Light grey 11642'grid_bg' => '#d5dbe3', // Medium grey 11643'cell_today_bg' => '#dce8f7' // Highlighted grey-blue 11644``` 11645 11646**Visual Impact**: 11647- Sidebar: Light grey-blue background (#e8ecf1) 11648- Week cells: Lighter grey (#f5f7fa) 11649- Today cell: Highlighted blue-grey (#dce8f7) 11650- More depth and contrast ✓ 11651- Professional appearance ✓ 11652 11653### All Theme Elements Now Consistent 11654 11655**Matrix (Green)**: 11656- Sidebar: Dark (#242424) 11657- Clicked panel: Dark with green 11658- Text: Green with glow 11659 11660**Purple Dream**: 11661- Sidebar: Dark purple (#2a2030) 11662- Clicked panel: Dark with purple 11663- Text: Purple with glow 11664 11665**Professional Blue**: 11666- Sidebar: Light grey (#e8ecf1) 11667- Clicked panel: Light with blue 11668- Text: Dark grey, no glow 11669 11670**Perfect theme consistency everywhere!** 11671 11672## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING 11673 11674### Critical Fixes 11675- **Fixed:** Tomorrow events not loaded when outside current week 11676- **Fixed:** `&` showing instead of `&` (double HTML encoding) 11677 11678### Issue 1: Tomorrow Not Loading 11679 11680**Problem**: Sidebar only loaded events for current week 11681- Today (Saturday): Week ends today 11682- Tomorrow (Sunday): Start of NEXT week 11683- Tomorrow events never loaded from data files! 11684 11685**Before**: 11686```php 11687// Only load current week 11688$end = new DateTime($weekEnd); 11689$end->modify('+1 day'); 11690$period = new DatePeriod($start, $interval, $end); 11691// If tomorrow > weekEnd, it's not in period! 11692``` 11693 11694**After**: 11695```php 11696// Check if tomorrow is outside week 11697$tomorrowDate = date('Y-m-d', strtotime('+1 day')); 11698if ($tomorrowDate > $weekEnd) { 11699 // Extend to include tomorrow 11700 $end = new DateTime($tomorrowDate); 11701} 11702$end->modify('+1 day'); 11703$period = new DatePeriod($start, $interval, $end); 11704``` 11705 11706**Result**: Tomorrow events now loaded even at week boundary! ✓ 11707 11708### Issue 2: Double HTML Encoding 11709 11710**Problem**: `&` characters showing as `&` 11711 11712**Cause**: Double encoding on line 2625 and 2681 11713```php 11714// Line 2625: 11715$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee & Tea" 11716 11717// Line 2681: 11718$html .= htmlspecialchars($title); // "Coffee & Tea" → "Coffee &amp; Tea" ❌ 11719``` 11720 11721**Fixed**: 11722```php 11723// Line 2625: 11724$title = htmlspecialchars($event['title']); // Encode once 11725 11726// Line 2681: 11727$html .= $title; // Use already-encoded value ✓ 11728``` 11729 11730**Result**: `&` displays correctly! ✓ 11731 11732### Both Fixes Critical 11733 11734These were **two separate bugs**: 117351. **Loading bug**: Tomorrow events not read from files 117362. **Display bug**: Double-encoding text 11737 11738Both needed fixing for Tomorrow section to work properly! 11739 11740## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY 11741 11742### Critical Fix 11743- **Fixed:** Tomorrow section missing when tomorrow is outside current week 11744- **Fixed:** Today section now always shows regardless of week boundaries 11745- **Changed:** Today/Tomorrow processed BEFORE week boundary checks 11746 11747### The Problem 11748 11749**Scenario**: Today is Saturday (last day of week) 11750- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today 11751- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week** 11752 11753**BROKEN Logic** (v4.2.2): 11754```php 11755foreach ($events as $dateKey => $dayEvents) { 11756 if ($dateKey < $weekStart) continue; // Skip old events 11757 11758 // ...week processing... 11759 11760 if ($dateKey === $tomorrowStr) { // ← Never reached! 11761 $tomorrowEvents[] = $event; // Tomorrow > weekEnd 11762 } 11763} 11764``` 11765 11766**Result**: Tomorrow events never added because loop skipped them! ❌ 11767 11768### The Fix 11769 11770**Process Today/Tomorrow FIRST**: 11771```php 11772foreach ($events as $dateKey => $dayEvents) { 11773 $eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 11774 11775 foreach ($eventsWithConflicts as $event) { 11776 // ALWAYS process Today and Tomorrow first! 11777 if ($dateKey === $todayStr) { 11778 $todayEvents[] = $event; // ✓ Always shows 11779 } 11780 if ($dateKey === $tomorrowStr) { 11781 $tomorrowEvents[] = $event; // ✓ Always shows 11782 } 11783 11784 // THEN check week boundaries for grid 11785 if ($dateKey >= $weekStart && $dateKey <= $weekEnd) { 11786 $weekEvents[$dateKey][] = $event; 11787 } 11788 11789 // Important events still week-only 11790 if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 11791 $importantEvents[] = $event; 11792 } 11793 } 11794} 11795``` 11796 11797### What Changed 11798 11799**Before**: 118001. Skip events < weekStart ❌ 118012. Process week grid 118023. Try to add Today/Tomorrow ← **Failed if outside week** 118034. Add Important events 11804 11805**After**: 118061. **Always add Today events** ✓ 118072. **Always add Tomorrow events** ✓ 118083. Add to week grid if in range 118094. Add Important events if in range 11810 11811**Result**: 11812- Today section: ✓ Always shows 11813- Tomorrow section: ✓ Always shows (even at week boundary!) 11814- Week grid: ✓ Only current week 11815- Important: ✓ Only current week 11816 11817### Edge Cases Fixed 11818 11819**Saturday → Sunday transition**: 11820- Today (Sat): Shows in Today section ✓ 11821- Tomorrow (Sun): Shows in Tomorrow section ✓ 11822- Week grid: Only shows Sat (today) ✓ 11823 11824**Sunday → Monday transition**: 11825- Today (Sun): Shows in Today section ✓ 11826- Tomorrow (Mon): Shows in Tomorrow section ✓ 11827- Week grid: Shows both Sun and Mon ✓ 11828 11829**Perfect! Tomorrow section now always works!** 11830 11831## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY! 11832 11833### Corrected Week Options 11834- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!) 11835- **Changed:** Default is **Sunday** (US/Canada standard) 11836- **Fixed:** Day names array for Sunday start: S M T W T F S 11837 11838### Correct Week Start Options 11839 11840**Sunday Start** (Default): 11841- Grid shows: **S M T W T F S** 11842- Week: Sunday → Saturday 11843- US/Canada standard 11844- Most common worldwide 11845 11846**Monday Start**: 11847- Grid shows: **M T W T F S S** 11848- Week: Monday → Sunday 11849- ISO 8601 standard 11850- Common in Europe 11851 11852### Technical Changes 11853 11854**All References Updated**: 11855```php 11856// Changed from 'saturday' to 'sunday' in: 11857- Admin validation 11858- Week calculation logic 11859- Day names array 11860- Default value 11861- Comments 11862``` 11863 11864**Sunday Calculation** (when today is Saturday): 11865```php 11866$today = date('w'); // 0=Sun, 6=Sat 11867if ($today == 0) { 11868 $weekStart = date('Y-m-d'); // Today! 11869} else { 11870 // Go back $today days to last Sunday 11871 $weekStart = date('Y-m-d', strtotime('-' . $today . ' days')); 11872} 11873``` 11874 11875**Examples**: 11876- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7 11877- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14 11878 11879**Sorry for the confusion - it's Sunday not Saturday!** 11880 11881## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY 11882 11883### Critical Fix 11884- **Fixed:** Week calculation broken when today is Saturday 11885- **Fixed:** Events not showing in Today/Important sections 11886- **Fixed:** Week grid event bars missing 11887- **Changed:** Default week start is Saturday (matches main calendar) 11888 11889### Technical Details 11890 11891**The Bug**: 11892```php 11893// BROKEN (v4.2.0): 11894$weekStart = date('Y-m-d', strtotime('saturday this week')); 11895// When TODAY is Saturday, this is ambiguous and fails! 11896 11897// FIXED (v4.2.1): 11898$today = date('w'); // 0 (Sun) to 6 (Sat) 11899if ($today == 6) { 11900 $weekStart = date('Y-m-d'); // Today! 11901} else { 11902 $daysBack = ($today == 0) ? 1 : ($today + 1); 11903 $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days')); 11904} 11905$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days')); 11906``` 11907 11908**Why It Failed**: 11909- `strtotime('saturday this week')` is ambiguous when run ON a Saturday 11910- PHP may interpret it as "next Saturday" or fail 11911- Result: Week range was wrong, events filtered out 11912 11913**The Fix**: 11914- Explicit calculation using day-of-week math 11915- Saturday (day 6): weekStart = today 11916- Sunday (day 0): weekStart = yesterday 11917- Monday-Friday: calculate days back to last Saturday 11918 11919**Result**: Works reliably every day of the week! 11920 11921**Default Changed**: Saturday start (was Monday in 4.2.0) 11922- Matches main calendar behavior 11923- Users can still switch to Monday in settings 11924 11925## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR 11926 11927### ✨ New Feature 11928- **Added:** Week start day selector in Themes tab 11929- **Added:** Choose between Monday (ISO standard) or Saturday week start 11930- **Added:** Week grid and all events now respect the selected start day 11931- **Changed:** Themes tab renamed to "Sidebar Widget Settings" 11932 11933### Week Start Options 11934 11935**Monday Start** (Default): 11936- Grid shows: M T W T F S S 11937- Week runs: Monday → Sunday 11938- ISO 8601 standard 11939- Common in Europe, most of world 11940 11941**Saturday Start**: 11942- Grid shows: S S M T W T F 11943- Week runs: Saturday → Friday 11944- Common in Middle East 11945- Sabbath-observant communities 11946 11947### Technical Details 11948 11949**Configuration**: 11950```php 11951// Saved in: data/meta/calendar_week_start.txt 11952// Values: 'monday' or 'saturday' 11953 11954// Week calculation: 11955if ($weekStartDay === 'saturday') { 11956 $weekStart = date('Y-m-d', strtotime('saturday this week')); 11957 $weekEnd = date('Y-m-d', strtotime('friday next week')); 11958} else { 11959 $weekStart = date('Y-m-d', strtotime('monday this week')); 11960 $weekEnd = date('Y-m-d', strtotime('sunday this week')); 11961} 11962``` 11963 11964**Day Names Array**: 11965```php 11966// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S'] 11967// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F'] 11968``` 11969 11970**What Changes**: 11971- Week grid day letters 11972- Week grid date sequence 11973- Today/Tomorrow/Important event date ranges 11974- Week event grouping 11975 11976**What Stays Same**: 11977- All themes still work 11978- Event data unchanged 11979- Main calendar unaffected 11980 11981### How to Change: 11982 119831. Admin → Calendar → Themes tab 119842. Under "Week Start Day" section 119853. Select Monday or Saturday 119864. Click "Save Settings" 119875. Refresh sidebar to see changes 11988 11989**Perfect for international users or religious observances!** 11990 11991## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS 11992 11993### ️ Calendar Improvements 11994- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar) 11995- **Changed:** Event section backgrounds much lighter (almost white) 11996- **Changed:** Individual event backgrounds lighter and more readable 11997- **Changed:** Event borders now theme-colored 11998 11999### Technical Details 12000 12001**Week Start Change**: 12002```php 12003// Before: 12004$weekStart = date('Y-m-d', strtotime('monday this week')); 12005$weekEnd = date('Y-m-d', strtotime('sunday this week')); 12006$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S']; 12007 12008// After: 12009$weekStart = date('Y-m-d', strtotime('sunday this week')); 12010$weekEnd = date('Y-m-d', strtotime('saturday this week')); 12011$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S']; 12012``` 12013 12014**Background Colors**: 12015```php 12016// Section backgrounds (Today, Tomorrow, Important): 12017Matrix: rgba(255, 255, 255, 0.05) // Very light overlay 12018Purple: rgba(255, 255, 255, 0.08) // Slightly lighter 12019Professional: rgba(255, 255, 255, 0.95) // Almost white! 12020 12021// Individual event backgrounds: 12022Matrix: rgba(255, 255, 255, 0.03) // Subtle 12023Purple: rgba(255, 255, 255, 0.05) // Light 12024Professional: rgba(255, 255, 255, 0.5) // Semi-transparent white 12025``` 12026 12027**Event Borders**: 12028```php 12029Matrix: rgba(0, 204, 7, 0.2) // Green 12030Purple: rgba(155, 89, 182, 0.2) // Purple 12031Professional: rgba(74, 144, 226, 0.2) // Blue 12032``` 12033 12034### Visual Result: 12035 12036**Before**: Dark backgrounds made text hard to read 12037**After**: Light backgrounds make events pop and text very readable 12038 12039**Week Grid**: 12040``` 12041Before: [M][T][W][T][F][S][S] 12042After: [S][M][T][W][T][F][S] ← Now matches main calendar! 12043``` 12044 12045## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS 12046 12047### Final Theme Polish 12048- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors 12049- **Fixed:** Event times now use theme bright color 12050- **Fixed:** Event dates use theme dim color 12051- **Fixed:** Task checkboxes use theme bright color 12052- **Fixed:** Event color bars use theme-appropriate shadows 12053- **Fixed:** No text shadows on Professional theme 12054 12055### Technical Details 12056 12057**Event Text Colors**: 12058```php 12059// Matrix: 12060- Title: #00cc07 (green) 12061- Time: #00dd00 (bright green) 12062- Date: #00aa00 (dim green) 12063- Text shadow: 0 0 3px (glow) 12064 12065// Purple: 12066- Title: #b19cd9 (lavender) 12067- Time: #d4a5ff (bright purple) 12068- Date: #8e7ab8 (dim purple) 12069- Text shadow: 0 0 3px (glow) 12070 12071// Professional: 12072- Title: #2c3e50 (dark grey) 12073- Time: #4a90e2 (blue) 12074- Date: #7f8c8d (grey) 12075- Text shadow: none (clean) 12076``` 12077 12078**Color Bar Shadows**: 12079```php 12080// Matrix & Purple: Glow effect 12081box-shadow: 0 0 3px [event-color]; 12082 12083// Professional: Subtle shadow 12084box-shadow: 0 1px 2px rgba(0,0,0,0.2); 12085``` 12086 12087### What's Now Fully Themed: 12088 12089✅ Sidebar background & border 12090✅ Header (clock box) background, border, text 12091✅ Week grid background, borders, cells 12092✅ Week grid day letters & numbers 12093✅ Week grid event bars & "+N more" text 12094✅ Add Event button background & text 12095✅ Today/Tomorrow/Important event titles 12096✅ Event times 12097✅ Event dates (Important section) 12098✅ Task checkboxes 12099✅ Event color bars 12100✅ All text shadows (glow vs none) 12101 12102**Every single element now respects the theme!** 12103 12104## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION 12105 12106### Theme Improvements 12107- **Fixed:** Week calendar grid now uses theme colors (purple/blue) 12108- **Fixed:** Add Event button now uses theme colors 12109- **Fixed:** Clock box border now matches theme 12110- **Fixed:** All text shadows respect theme (no glow on professional) 12111- **Fixed:** Event bars use theme-appropriate shadows 12112 12113### Technical Details 12114 12115**Week Grid Theming**: 12116```php 12117// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders 12118// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders 12119// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders 12120``` 12121 12122**Add Event Button**: 12123```php 12124// Matrix: Dark green (#006400) with bright green text 12125// Purple: Purple (#7d3c98) with lavender text 12126// Professional: Blue (#3498db) with white text 12127``` 12128 12129**Text Shadows**: 12130```php 12131// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color) 12132// Professional: No glow (clean look) 12133``` 12134 12135**CSS Overrides**: 12136```css 12137/* Purple theme */ 12138.sidebar-purple .eventlist-today-header { 12139 border-color: #9b59b6; 12140 box-shadow: 0 0 8px rgba(155, 89, 182, 0.2); 12141} 12142 12143/* Professional theme */ 12144.sidebar-professional .eventlist-today-header { 12145 border-color: #4a90e2; 12146 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 12147} 12148``` 12149 12150### What Changed Per Theme: 12151 12152**Purple Dream**: 12153- Week grid: Purple borders and dark purple background 12154- Add Event: Purple button with lavender text 12155- Clock box: Purple border with purple glow 12156- Event bars: Purple glow instead of green 12157- All text: Purple/lavender shades 12158 12159**Professional Blue**: 12160- Week grid: Blue borders and light grey background 12161- Add Event: Blue button with white text 12162- Clock box: Blue border with subtle shadow (no glow) 12163- Event bars: Subtle shadows (no glow) 12164- All text: Dark grey and blue shades 12165 12166**Matrix Edition**: Unchanged (still perfect green theme!) 12167 12168## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING 12169 12170### ✨ New Features 12171- **Added:** Themes tab in admin for sidebar widget theming 12172- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey) 12173- **Added:** Theme selector with live previews 12174- **Added:** Theme persistence across page loads 12175 12176### Available Themes 12177 12178**Matrix Edition** (Default): 12179- Dark background (#242424) 12180- Green accents (#00cc07) 12181- Neon glow effects 12182- Original Matrix styling 12183 12184**Purple Dream**: 12185- Dark purple background (#2a2030) 12186- Purple/violet accents (#9b59b6) 12187- Elegant purple glow 12188- Rich purple color scheme 12189 12190**Professional Blue**: 12191- Light grey background (#f5f7fa) 12192- Blue accents (#4a90e2) 12193- Clean professional look 12194- Subtle shadows instead of glow 12195 12196### Bug Fix 12197- **Fixed:** Tooltips now go UP and to the LEFT (was going right) 12198- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px` 12199 12200### Technical Details 12201 12202**Theme System**: 12203```php 12204// Saved in: data/meta/calendar_theme.txt 12205// Applied dynamically in syntax.php 12206$theme = $this->getSidebarTheme(); // 'matrix', 'purple', or 'professional' 12207$styles = $this->getSidebarThemeStyles($theme); 12208 12209// Styles include: 12210- bg, border, shadow 12211- header_bg, header_border, header_shadow 12212- text_primary, text_bright, text_dim 12213- grid_bg, grid_border 12214- cell_bg, cell_today_bg 12215``` 12216 12217**Theme Changes**: 12218- Header background gradient 12219- Border colors 12220- Text colors 12221- Shadow/glow effects 12222- Grid colors 12223 12224**How to Change**: 122251. Admin → Calendar → Themes tab 122262. Select desired theme 122273. Click "Save Theme" 122284. Refresh page to see changes 12229 12230### Notes 12231- Themes only affect sidebar widget appearance 12232- Main calendar view unchanged 12233- Theme setting stored in `data/meta/calendar_theme.txt` 12234- Safe to switch themes - no data affected 12235 12236## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING 12237 12238### Bug Fixes 12239- **Fixed:** Events now sort chronologically by time (was using string comparison) 12240- **Fixed:** Tooltip positioning using JavaScript like system tooltips 12241- **Fixed:** All-day events appear first, then events in time order 12242 12243### Technical Details 12244 12245**Event Sorting Fix**: 12246```php 12247// BROKEN (v4.0.9): 12248return strcmp($aTime, $bTime); 12249// String comparison: "10:00" < "8:00" because "1" < "8" 12250// Result: 10:00 AM shown BEFORE 8:00 AM ❌ 12251 12252// FIXED (v4.1.0): 12253$aMinutes = $this->timeToMinutes($aTime); // 8:00 = 480 12254$bMinutes = $this->timeToMinutes($bTime); // 10:00 = 600 12255return $aMinutes - $bMinutes; 12256// Result: 8:00 AM shown BEFORE 10:00 AM ✓ 12257``` 12258 12259**Example Before Fix**: 12260``` 12261 Weekend Ticket Duty (all-day) 122628:00 AM START TICKETS 1226310:00 AM Soul Winning ← Wrong! 122649:45 AM Coffee ← Should be before 10:00 AM 12265``` 12266 12267**Example After Fix**: 12268``` 12269 Weekend Ticket Duty (all-day) 122708:00 AM START TICKETS 122719:45 AM Coffee ← Correct! 1227210:00 AM Soul Winning 12273``` 12274 12275**Tooltip Positioning**: 12276- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()` 12277- Uses CSS custom properties `--tooltip-left` and `--tooltip-top` 12278- Positioned on `mouseenter` event 12279- Matches system tooltip implementation (no cutoff) 12280 12281**JavaScript Implementation**: 12282```javascript 12283element.addEventListener("mouseenter", function() { 12284 const rect = element.getBoundingClientRect(); 12285 element.style.setProperty("--tooltip-left", (rect.right - 10) + "px"); 12286 element.style.setProperty("--tooltip-top", (rect.top - 30) + "px"); 12287}); 12288``` 12289 12290**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically! 12291 12292## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX 12293 12294### UI Improvements 12295- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge 12296- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar 12297- **Changed:** Main calendar conflict tooltip now much smaller (was too big) 12298 12299### Technical Details 12300 12301**Sidebar Overflow Fix**: 12302```php 12303// Before (line 2005): 12304style="...overflow:hidden..." // ← Blocked tooltips! 12305 12306// After: 12307style="...overflow:visible..." // ← Tooltips extend beyond! 12308``` 12309 12310**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important` 12311 12312**Main Calendar Tooltip Size**: 12313```css 12314/* Before: */ 12315.conflict-tooltip { 12316 border: 2px solid #ff9800; 12317 border-radius: 6px; 12318 padding: 8px 12px; 12319 font-size: 12px; 12320 min-width: 200px; 12321 max-width: 350px; 12322} 12323 12324/* After: */ 12325.conflict-tooltip { 12326 border: 1px solid #ff9800; /* Thinner */ 12327 border-radius: 3px; /* Smaller */ 12328 padding: 4px 8px; /* Less padding */ 12329 font-size: 10px; /* Smaller header */ 12330 min-width: 120px; /* Narrower */ 12331 max-width: 200px; /* Narrower */ 12332} 12333 12334.conflict-tooltip-body { 12335 padding: 6px 8px; /* Was 10px 12px */ 12336 font-size: 9px; /* Was 11px */ 12337 line-height: 1.4; /* Was 1.6 */ 12338} 12339 12340.conflict-item { 12341 padding: 2px 0; /* Was 4px */ 12342 font-size: 9px; /* Added smaller font */ 12343} 12344``` 12345 12346**Result**: 12347- Main calendar tooltip ~50% smaller 12348- Sidebar tooltips now extend beyond borders 12349- Both tooltips compact and readable 12350 12351## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP 12352 12353### Bug Fix 12354- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text) 12355- **Changed:** Using HTML entity ` ` for newlines instead of `\n` 12356 12357### Technical Details 12358 12359**The Problem**: 12360```php 12361// Before (v4.0.7): 12362$conflictTooltip = 'Conflicts with:\n'; // Literal \n showed in tooltip 12363 12364// Displayed as: 12365"Conflicts with:\n• Event 1\n• Event 2" // ← Literal backslash-n 12366``` 12367 12368**The Fix**: 12369```php 12370// After (v4.0.8): 12371$conflictTooltip = "Conflicts with: "; // HTML entity for newline 12372 12373// Displays as: 12374Conflicts with: 12375• Event 1 12376• Event 2 12377``` 12378 12379**Why ` ` Works**: 12380- HTML entity for line feed character 12381- Works in data attributes 12382- CSS `white-space: pre-line` preserves the newlines 12383- Renders as actual line breaks in tooltip 12384 12385**Applied to**: 12386- PHP rendering (sidebar Today/Tomorrow/Important) 12387- JavaScript rendering (clicked day events) 12388 12389## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX 12390 12391### UI Improvements 12392- **Changed:** Tooltip size reduced significantly (much more compact) 12393- **Fixed:** Tooltip now overflows sidebar borders (not cut off) 12394- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px) 12395- **Changed:** Narrower width (120-200px vs 200-300px) 12396 12397### Technical Details 12398 12399**Tooltip Size Reduction**: 12400```css 12401/* Before (v4.0.6): 12402padding: 6px 10px; 12403font-size: 11px; 12404min-width: 200px; 12405max-width: 300px; 12406 12407/* After (v4.0.7): */ 12408padding: 3px 6px; 12409font-size: 9px; 12410min-width: 120px; 12411max-width: 200px; 12412``` 12413 12414**Overflow Fix**: 12415```css 12416/* Allow tooltip to extend beyond sidebar */ 12417.sidebar-widget, 12418.sidebar-matrix { 12419 overflow: visible !important; 12420} 12421 12422/* Position tooltip outside */ 12423[data-tooltip]:before { 12424 bottom: 120%; /* Further above */ 12425 right: -10px; /* Can extend beyond edge */ 12426 z-index: 10000; /* Always on top */ 12427} 12428``` 12429 12430**Visual Result**: 12431- Tooltip is ~40% smaller 12432- Extends beyond sidebar border if needed 12433- Still readable, just more compact 12434- Better for small screens 12435 12436## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING 12437 12438### Critical Fix 12439- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly 12440- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names 12441- **Fixed:** Events without end time now treated as zero-duration (not +1 hour) 12442- **Fixed:** Now matches what you see in main calendar view 12443 12444### ✨ UI Improvement 12445- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right) 12446- **Added:** Custom CSS tooltip with data-tooltip attribute 12447- **Improved:** Better tooltip positioning - doesn't overflow screen edges 12448 12449### Technical Details 12450 12451**The Problem - Field Name Mismatch**: 12452```php 12453// Main calendar (line 697): 12454$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase) 12455 12456// Sidebar (before fix): 12457$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case) 12458``` 12459 12460**The Problem - Duration Logic**: 12461```php 12462// Main calendar (line 697): 12463$end1 = isset($evt1['endTime']) && !empty($evt1['endTime']) 12464 ? $evt1['endTime'] 12465 : $evt1['time']; // ← Uses START time (zero duration) 12466 12467// Sidebar (before fix): 12468$endTime = ... ? ... : $this->addHoursToTime($startTime, 1); // ← Added 1 hour! 12469``` 12470 12471**The Fix**: 12472```php 12473// Now checks BOTH field names: 12474if (isset($event['end_time']) && $event['end_time'] !== '') { 12475 $endTime = $event['end_time']; 12476} elseif (isset($event['endTime']) && $event['endTime'] !== '') { 12477 $endTime = $event['endTime']; 12478} else { 12479 $endTime = $startTime; // ← Matches main calendar! 12480} 12481``` 12482 12483**Tooltip Positioning**: 12484- Uses `data-tooltip` attribute instead of `title` 12485- CSS positions tooltip ABOVE badge (`bottom: 100%`) 12486- Aligns to RIGHT edge (`right: 0`) 12487- Arrow points down to badge 12488- Black background with white text 12489- Max width 300px 12490 12491### Example 12492 12493**6:00 PM Evening Service** (no end time): 12494- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌ 12495- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar! 12496 12497**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**: 12498- Zero-duration events at 6:00 PM don't overlap with anything 12499- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict 12500 12501**Tooltip appears**: 12502``` 12503 ┌────────────────────┐ 12504 │ Conflicts with: │ 12505 │ • Super Bowl │ 12506 │ (3:30 PM-7:00 PM)│ 12507 └─────────┬──────────┘ 12508 ▼ 12509 ⚠ 12510``` 12511 12512## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING 12513 12514### Bug Fix 12515- **Fixed:** Events without end_time now properly get 1-hour default duration 12516- **Fixed:** Empty string end_time values now treated as missing (was causing issues) 12517- **Improved:** More robust checking for `end_time` field (checks both isset and not empty) 12518 12519### Technical Details 12520 12521**The Problem**: 12522```php 12523// Before (broken): 12524$endTime = isset($event['end_time']) ? $event['end_time'] : default; 12525 12526// If end_time exists but is empty string "": 12527isset($event['end_time']) = TRUE 12528$endTime = "" // ← Empty string, not default! 12529``` 12530 12531**The Fix**: 12532```php 12533// After (fixed): 12534$endTime = (isset($event['end_time']) && $event['end_time'] !== '') 12535 ? $event['end_time'] 12536 : $this->addHoursToTime($startTime, 1); 12537 12538// Now empty string gets the default 1-hour duration 12539``` 12540 12541**Why This Matters**: 12542Events like "6:00 PM Evening Service" with no end time should be treated as 6:00-7:00 PM (1 hour). If the `end_time` field contains an empty string instead of being absent, the old code would use the empty string, causing conflict detection to fail. 12543 12544**Example**: 12545``` 12546Super Bowl: 3:30 PM - 7:00 PM 12547Evening Service: 6:00 PM - ??? (should be 7:00 PM) 12548 12549If end_time = "" (empty string): 12550 Old code: Uses "" → conflict detection fails 12551 New code: Uses 7:00 PM → conflict detected ✓ 12552``` 12553 12554### Testing 12555If you're still not seeing the conflict on the 6:00 PM service: 125561. Check if the event has `end_time` set in the JSON 125572. Clear cache (Admin → Manage Events → Clear Cache) 125583. The conflict should now appear 12559 12560## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS 12561 12562### ✨ Feature Added 12563- **Added:** Hover over ⚠ badge to see which events are conflicting 12564- **Added:** Tooltip shows conflicting event titles and times 12565- **Added:** Works in both sidebar sections and clicked day events 12566 12567### Technical Details 12568 12569**Conflict Tracking Enhanced**: 12570```php 12571// Now tracks WHICH events conflict: 12572$event['conflictingWith'] = [ 12573 ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'], 12574 ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30'] 12575]; 12576``` 12577 12578**Tooltip Format**: 12579``` 12580Conflicts with: 12581• Meeting (10:00 AM-11:00 AM) 12582• Call (10:30 AM-11:30 PM) 12583``` 12584 12585**Where It Works**: 12586- ✅ Today section (sidebar) 12587- ✅ Tomorrow section (sidebar) 12588- ✅ Important Events section (sidebar) 12589- ✅ Clicked day events (week grid) 12590 12591**Cursor**: Changes to `help` cursor on hover to indicate tooltip 12592 12593### Note on Multi-Day Events 12594The current conflict detection only checks time conflicts **within the same day**. If you have an event that spans multiple days (e.g., start date on Monday, end date on Wednesday), each day is treated independently. To see conflicts across the entire span, you would need to check each individual day. 12595 12596## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC 12597 12598### Bug Fixes 12599- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections 12600- **Fixed:** Important Events now shows events even if they're today or tomorrow 12601- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular) 12602 12603### Technical Details 12604 12605**Conflict Badge Issue**: 12606```php 12607// BROKEN (line 2511): 12608$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']); 12609// ↑ Checking 'conflicts' (plural) 12610 12611// But detectTimeConflicts() sets: 12612$event['conflict'] = true/false; 12613// ↑ Setting 'conflict' (singular) 12614 12615// FIXED: 12616$hasConflict = isset($event['conflict']) && $event['conflict']; 12617``` 12618 12619**Result**: Badge now shows for ALL conflicting events in sidebar sections 12620 12621**Important Events Logic Issue**: 12622```php 12623// BROKEN: 12624if ($dateKey === $todayStr) { 12625 $todayEvents[] = ...; 12626} elseif ($dateKey === $tomorrowStr) { 12627 $tomorrowEvents[] = ...; 12628} else { // ← Only checked if NOT today/tomorrow! 12629 if ($isImportant) { 12630 $importantEvents[] = ...; 12631 } 12632} 12633 12634// FIXED: 12635if ($dateKey === $todayStr) { 12636 $todayEvents[] = ...; 12637} 12638if ($dateKey === $tomorrowStr) { 12639 $tomorrowEvents[] = ...; 12640} 12641// ↑ Changed to separate 'if' statements 12642if ($isImportant && $dateKey in this week) { 12643 $importantEvents[] = ...; // ← Now includes today/tomorrow too! 12644} 12645``` 12646 12647**Result**: Important namespace events now show in Important section even if they're today or tomorrow 12648 12649### Conflict Badge Display 12650- Simplified to just ⚠ icon (no count) 12651- Orange color (#ff9800) 12652- 10px font size 12653- Hover shows "Time conflict detected" 12654 12655## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY 12656 12657### Bug Fix 12658- **Fixed:** Important Events section now displays all events correctly 12659- **Fixed:** Single-event days now get conflict flag (was returning early without flag) 12660- **Fixed:** Conflict detection no longer causes events to disappear from Important section 12661 12662### Technical Details 12663 12664**The Problem**: 12665- `detectTimeConflicts()` returned early if only 1 event on a day 12666- Returned original array without adding 'conflict' field 12667- This inconsistency caused issues in event categorization 12668 12669**The Solution**: 12670```php 12671// Before (broken): 12672if (empty($dayEvents) || count($dayEvents) < 2) { 12673 return $dayEvents; // No 'conflict' field added! 12674} 12675 12676// After (fixed): 12677if (count($dayEvents) === 1) { 12678 return [array_merge($dayEvents[0], ['conflict' => false])]; // Always add flag 12679} 12680``` 12681 12682**Result**: 12683- All events now have 'conflict' field consistently 12684- Single events: conflict = false 12685- Multiple events: conflict = true/false based on overlap 12686- Important Events section displays correctly 12687 12688## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES 12689 12690### Bug Fixes 12691- **Fixed:** Conflict badge (⚠) now displays in clicked day events 12692- **Fixed:** Recurring events edit now updates time and end_time correctly 12693- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit 12694 12695### ✨ Features Added 12696- **Added:** Time conflict detection for overlapping events 12697- **Added:** detectTimeConflicts() function checks all events on same day 12698- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions 12699- **Added:** Events now have 'conflict' flag set automatically 12700 12701### UI Changes 12702- **Changed:** Admin tab order: Manage Events (first), Update Plugin, ⚙️ Outlook Sync 12703- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin") 12704- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars) 12705 12706### Technical Details 12707 12708**Conflict Detection**: 12709```php 12710// Automatically detects overlapping events on same day 12711// Sets 'conflict' flag to true if event overlaps with another 12712$eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 12713``` 12714 12715**Logic**: 12716- All-day events never conflict (no time set) 12717- Timed events check for overlap with other timed events 12718- Overlap = start1 < end2 AND start2 < end1 12719- Default duration is 60 minutes if no end_time 12720 12721**Recurring Events Fix**: 12722- Old: Updated `$event['start']` and `$event['end']` (wrong fields) 12723- New: Updates `$event['time']` and `$event['end_time']` (correct fields) 12724- Now edits actually save and update the events 12725 12726**Week View Bars**: 12727- Shows 4 colored bars instead of 3 12728- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc. 12729 12730## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE 12731 12732**Major Release**: Complete Matrix-themed calendar plugin with advanced features! 12733 12734### Major Features 12735 12736#### Sidebar Widget 12737- **Week Grid**: Interactive 7-day calendar with click-to-view events 12738- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips 12739- **Live Clock**: Updates every second with date display 12740- **Real-time Weather**: Geolocation-based temperature with icon 12741- **Event Sections**: Today (orange), Tomorrow (green), Important (purple) 12742- **Add Event Button**: Dark green bar opens full event creation dialog 12743- **Matrix Theme**: Green glow effects throughout 12744 12745#### Event Management 12746- **Single Color Bars**: Clean 3px bars showing event's assigned color 12747- **All-Day Events First**: Then sorted chronologically by time 12748- **Conflict Detection**: Orange ⚠ badge on overlapping events 12749- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//) 12750- **HTML Rendering**: Pre-rendered for JavaScript display 12751- **Click-to-View**: Click week grid days to expand event details 12752 12753#### Admin Interface 12754- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button 12755- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings 12756- **Manage Events Tab**: Browse, edit, delete, move events across namespaces 12757 12758#### Outlook Sync 12759- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook 12760- **Category Mapping**: Map colors to Outlook categories 12761- **Conflict Resolution**: Time conflict detection 12762- **Import/Export Config**: Encrypted configuration files 12763 12764### Design 12765- **Matrix Theme**: Authentic green glow aesthetic 12766- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections 12767- **Color Scheme**: 12768 - Today: Orange #ff9800 12769 - Tomorrow: Green #4caf50 12770 - Important: Purple #9b59b6 12771 - Add Event: Dark green #006400 12772 - System bars: Green/Purple/Orange 12773 12774### Technical Highlights 12775- **Zero-margin Design**: Perfect flush alignment throughout 12776- **Flexbox Layout**: Modern, responsive structure 12777- **AJAX Operations**: No page reloads needed 12778- **Smart Sorting**: All-day events first, then chronological 12779- **Tooltip System**: Detailed stats on hover (working correctly) 12780- **Event Dialog**: Full form with drag support 12781- **Cache Management**: One-click cache clearing 12782 12783### Breaking Changes from v3.x 12784- Removed dual color bars (now single event color bar only) 12785- Add Event button moved to between header and week grid 12786- All-day events now appear FIRST (not last) 12787- Update Plugin tab is now the default admin tab 12788 12789### Bug Fixes (v3.10.x → v4.0.0) 12790- ✅ Fixed color bars not showing (align-self:stretch vs height:100%) 12791- ✅ Fixed tooltip function naming (sanitized calId for JavaScript) 12792- ✅ Fixed weather display (added updateWeather function) 12793- ✅ Fixed HTML rendering in events (title_html/description_html fields) 12794- ✅ Fixed Add Event dialog (null check for calendar element) 12795- ✅ Fixed text positioning in Add Event button 12796- ✅ Fixed spacing throughout sidebar widget 12797 12798### Complete Feature List 12799- Full calendar view (month grid) 12800- Sidebar widget (week view) 12801- Event panel (standalone) 12802- Event list (date ranges) 12803- Namespace support 12804- Color coding 12805- Time conflict detection 12806- DokuWiki syntax in events 12807- Outlook synchronization 12808- System monitoring 12809- Weather display 12810- Live clock 12811- Admin interface 12812- Cache management 12813- Draggable dialogs 12814- AJAX save/edit/delete 12815- Import/export config 12816 12817### Usage 12818 12819**Sidebar Widget**: 12820``` 12821{{calendar sidebar}} 12822{{calendar sidebar namespace=team}} 12823``` 12824 12825**Full Calendar**: 12826``` 12827{{calendar}} 12828{{calendar year=2026 month=6 namespace=team}} 12829``` 12830 12831**Event Panel**: 12832``` 12833{{eventpanel}} 12834``` 12835 12836**Event List**: 12837``` 12838{{eventlist daterange=2026-01-01:2026-01-31}} 12839``` 12840 12841### Stats 12842- **40+ versions** developed during v3.x iterations 12843- **3.10.0 → 3.11.4**: Polish and refinement 12844- **4.0.0**: Production-ready Matrix Edition 12845 12846### Credits 12847Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration. 12848 12849--- 12850 12851## Previous Versions (v3.11.4 and earlier) 12852 12853## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING 12854- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px) 12855- **Improved:** Small breathing room between system stats bars and Add Event button 12856- **Visual:** Better spacing for cleaner appearance 12857 12858### CSS Change: 12859**eventlist-today-header**: 12860- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px` 12861 12862### Visual Result: 12863``` 12864│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats bars 12865│ │ ← 2px space (restored) 12866├───────────────────────┤ 12867│ + ADD EVENT │ ← Add Event bar 12868├───────────────────────┤ 12869``` 12870 12871**Before (v3.11.3)**: No space, bars directly touch Add Event button 12872**After (v3.11.4)**: 2px breathing room for better visual hierarchy 12873 12874## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION 12875- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset 12876- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error 12877- **Changed:** Add Event text moved up 1px (position:relative; top:-1px) 12878- **Changed:** Line-height reduced from 12px to 10px for better text centering 12879- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets 12880 12881### JavaScript Fix: 12882**Problem**: Line 1084-1085 in calendar-main.js 12883```javascript 12884const calendar = document.getElementById(calId); 12885const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error! 12886``` 12887 12888**Solution**: Added null check 12889```javascript 12890const calendar = document.getElementById(calId); 12891const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null; 12892``` 12893 12894**Why This Happened**: 12895- Regular calendar has element with id=calId 12896- Sidebar widget doesn't have this element (different structure) 12897- Code tried to read .dataset on null, causing error 12898 12899### Text Position Fix: 12900**Before**: 12901- line-height: 12px 12902- vertical-align: middle 12903- Text slightly low 12904 12905**After**: 12906- line-height: 10px 12907- position: relative; top: -1px 12908- Text perfectly centered 12909 12910### What Works Now: 12911✅ Click "+ ADD EVENT" in sidebar → Dialog opens 12912✅ No console errors 12913✅ Text properly centered vertically 12914✅ Form pre-filled with today's date 12915✅ Save works correctly 12916 12917## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR 12918- **Added:** Event dialog to sidebar widget (same as regular calendar) 12919- **Changed:** Add Event button now opens proper event form dialog 12920- **Added:** renderEventDialog() called in renderSidebarWidget() 12921- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date 12922- **Improved:** Can now add events directly from sidebar widget 12923 12924### Add Event Button Behavior: 12925**Before (v3.11.1)**: Showed alert with instructions 12926**After (v3.11.2)**: Opens full event creation dialog 12927 12928**Dialog Features**: 12929- Date field (defaults to today) 12930- Title field (required) 12931- Time field (optional) 12932- End time field (optional) 12933- Color picker 12934- Category field 12935- Description field 12936- Save and Cancel buttons 12937- Draggable dialog 12938 12939### Technical Changes: 12940- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget() 12941- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')` 12942- Dialog uses same structure as regular calendar 12943- Uses existing openAddEvent() and saveEventCompact() JavaScript functions 12944 12945### User Flow: 129461. User clicks "+ ADD EVENT" green bar 129472. Event dialog opens with today's date pre-filled 129483. User fills in event details 129494. User clicks Save 129505. Event saved via AJAX 129516. Dialog closes 129527. Sidebar refreshes to show new event 12953 12954## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG 12955- **Fixed:** Removed bottom padding from header (was 2px, now 0) 12956- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0) 12957- **Fixed:** Add Event bar now flush against header with zero gap 12958- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin 12959- **Improved:** Alert provides clear instructions on how to add events 12960 12961### CSS Changes: 12962**eventlist-today-header**: 12963- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom) 12964 12965**eventlist-stats-container**: 12966- `margin-top: 2px` → `margin: 0` (removed all margins) 12967 12968### Add Event Button Behavior: 12969**Before**: Clicked → Navigated to Admin → Manage Events tab 12970**After**: Clicked → Shows alert with instructions 12971 12972**Alert Message**: 12973``` 12974To add an event, go to: 12975Admin → Calendar Management → Manage Events tab 12976or use the full calendar view {{calendar}} 12977``` 12978 12979### Visual Result: 12980``` 12981│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats (no margin-bottom) 12982├────────────────────────┤ 12983│ + ADD EVENT │ ← Perfectly flush! 12984├────────────────────────┤ 12985``` 12986 12987No gaps, perfectly aligned! 12988 12989## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE 12990- **Moved:** Add Event bar back to original position (between header and week grid) 12991- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff) 12992- **Changed:** Letter spacing reduced from 0.5px to 0.4px 12993- **Fixed:** Text now fully visible without being cut off 12994- **Final:** Optimal position and size determined 12995 12996### Final Layout: 12997``` 12998┌─────────────────────────────┐ 12999│ Clock | Weather | Stats │ ← Header 13000├─────────────────────────────┤ 13001│ + ADD EVENT │ ← Bar (back here, smaller text) 13002├─────────────────────────────┤ 13003│ M T W T F S S │ ← Week Grid 13004│ 3 4 5 6 7 8 9 │ 13005├─────────────────────────────┤ 13006│ Today │ ← Event sections 13007└─────────────────────────────┘ 13008``` 13009 13010### Text Size Changes: 13011**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off 13012**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible 13013 13014### Why This Position: 13015- Separates header from calendar 13016- Natural action point after viewing stats 13017- Users see stats → decide to add event → view calendar 13018- Consistent with original design intent 13019 13020## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID 13021- **Moved:** Add Event bar repositioned from between header/grid to below week grid 13022- **Improved:** Better visual flow - header → stats → grid → add button → events 13023- **Changed:** Add Event bar now acts as separator between calendar and event sections 13024 13025### New Layout: 13026``` 13027┌─────────────────────────────┐ 13028│ Clock | Weather | Stats │ ← Header 13029├─────────────────────────────┤ 13030│ M T W T F S S │ ← Week Grid 13031│ 3 4 5 6 7 8 9 │ 13032├─────────────────────────────┤ 13033│ + ADD EVENT │ ← Add bar (moved here!) 13034├─────────────────────────────┤ 13035│ Today │ ← Event sections 13036│ Tomorrow │ 13037│ Important Events │ 13038└─────────────────────────────┘ 13039``` 13040 13041### Visual Flow: 13042**Before (v3.10.8)**: 130431. Header (clock, weather, stats) 130442. **+ ADD EVENT** bar 130453. Week grid 130464. Event sections 13047 13048**After (v3.10.9)**: 130491. Header (clock, weather, stats) 130502. Week grid (calendar days) 130513. **+ ADD EVENT** bar 130524. Event sections 13053 13054### Benefits: 13055- Natural reading flow: View calendar → Add event → See events 13056- Add button positioned between calendar and event list 13057- Acts as visual separator 13058- More logical action placement 13059 13060## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR 13061- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color 13062- **Changed:** Events now display with single 3px color bar (event's assigned color only) 13063- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly 13064- **Simplified:** Cleaner visual with one color bar instead of two 13065- **Improved:** More space for event content without extra bar 13066 13067### Visual Changes: 13068 13069**Before (v3.10.7)** - Dual color bars: 13070``` 13071├─ [Orange][Green] Event Title 13072├─ [Blue][Purple] Event Title 13073``` 13074 13075**After (v3.10.8)** - Single color bar: 13076``` 13077├─ [Green] Event Title ← Only event color! 13078├─ [Purple] Event Title ← Only event color! 13079``` 13080 13081### Add Bar Changes: 13082- Added `margin:0` to eliminate gaps 13083- Now flush against header (no space above) 13084- Now flush against week grid (no space below) 13085- Perfect seamless connection 13086 13087### Technical Changes: 13088**renderSidebarEvent()**: 13089- Removed section color bar (4px) 13090- Kept only event color bar (3px) 13091 13092**showDayEvents() JavaScript**: 13093- Removed section color bar (4px blue) 13094- Kept only event color bar (3px) 13095 13096**Add Event bar**: 13097- Added `margin:0` inline style 13098- Removed all top/bottom margins 13099 13100## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR 13101- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day) 13102- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%` 13103- **Changed:** Add Event bar color from orange to dark green (#006400) 13104- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off) 13105- **Changed:** Add Event bar text now bright green (#00ff00) with green glow 13106- **Changed:** Add Event bar font size increased from 7px to 9px 13107- **Changed:** Add Event bar letter spacing increased to 0.5px 13108- **Improved:** Hover effect on Add Event bar now darker green (#004d00) 13109 13110### Color Bar Fix Details: 13111**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars 13112**Solution**: Applied same fix as clicked day events: 13113- Changed parent div: `align-items:start` → `align-items:stretch` 13114- Added `min-height:20px` to parent 13115- Changed bars: `height:100%` → `align-self:stretch` 13116- Bars now properly fill vertical space in ALL sections 13117 13118### Add Event Bar Changes: 13119**Before**: 13120- Background: Orange (#ff9800) 13121- Text: Black (#000) 13122- Height: 6px (text cut off) 13123- Font: 7px 13124 13125**After**: 13126- Background: Dark green (#006400) 13127- Text: Bright green (#00ff00) with green glow 13128- Height: 12px (text fully visible) 13129- Font: 9px 13130- Hover: Darker green (#004d00) 13131- Matrix-themed green aesthetic 13132 13133## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE 13134- **Fixed:** Event color bars now display correctly in clicked day events 13135- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events 13136- **Added:** Conflict badge (⚠) appears on right side of conflicting events 13137- **Updated:** Complete README.md rewrite with full Matrix theme documentation 13138- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering) 13139- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px` 13140- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning 13141 13142### Color Bar Fix: 13143**Problem**: Bars had `height:100%` but parent had no explicit height 13144**Solution**: 13145- Changed to `align-self:stretch` on bars 13146- Parent uses `align-items:stretch` 13147- Added `min-height:20px` to parent 13148- Bars now properly fill vertical space 13149 13150### Sorting Change: 13151**Before**: Timed events first → All-day events last 13152**After**: All-day events FIRST → Timed events chronologically 13153 13154**Example**: 13155``` 13156Monday, Feb 5 13157├─ All Day - Project Deadline ← All-day first 13158├─ 8:00 AM - Morning Standup ← Earliest time 13159├─ 10:30 AM - Coffee with Bob 13160└─ 2:00 PM - Team Meeting ← Latest time 13161``` 13162 13163### Conflict Badge: 13164- Orange warning triangle (⚠) on right side 13165- 10px font size 13166- Only appears if `event.conflict` is true 13167- Title attribute shows "Time conflict detected" 13168- Small and unobtrusive 13169 13170### README Update: 13171- Complete rewrite with Matrix theme focus 13172- Full usage instructions for all features 13173- Admin interface documentation 13174- Outlook sync setup guide 13175- System monitoring details 13176- Troubleshooting section 13177- Color scheme reference 13178- File structure documentation 13179- Performance tips 13180- Security notes 13181- Quick start examples 13182 13183## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR 13184- **Added:** Events now sorted by time when clicking week grid days 13185- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px) 13186- **Improved:** Events with times appear first, sorted chronologically 13187- **Improved:** All-day events appear after timed events 13188- **Changed:** Add Event bar font size reduced to 7px (from 10px) 13189- **Changed:** Add Event bar now has 0 padding and fixed 6px height 13190 13191### Sorting Logic: 13192- Events with times sorted by time (earliest first) 13193- All-day events (no time) appear at the end 13194- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare 13195- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event 13196 13197### Add Event Bar Changes: 13198- **Height**: 6px (was ~12px with padding) 13199- **Padding**: 0 (was 4px top/bottom) 13200- **Font Size**: 7px (was 10px) 13201- **Letter Spacing**: 0.3px (was 0.5px) 13202- **Line Height**: 6px to match height 13203- **Vertical Align**: Middle for text centering 13204 13205## Version 3.10.4 (2026-02-06) - ADD EVENT BAR 13206- **Added:** Thin orange "Add Event" bar between header and week grid 13207- **Added:** Quick access to event creation from sidebar widget 13208- **Styled:** Sleek design with hover effects and glow 13209- **Interactive:** Clicks navigate to Manage Events tab in admin 13210- **Improved:** User workflow for adding events from sidebar 13211 13212### Visual Design: 13213- Orange background (#ff9800) matching Today section color 13214- 4px top/bottom padding for thin, sleek appearance 13215- Black text with white text-shadow for visibility 13216- Hover effect: Darkens to #ff7700 with enhanced glow 13217- Orange glow effect (box-shadow) matching Matrix theme 13218- Centered "+ ADD EVENT" text (10px, bold, letter-spacing) 13219 13220### Technical Changes: 13221- Added between header close and renderWeekGrid() call 13222- Inline onclick handler navigates to admin manage tab 13223- Inline onmouseover/onmouseout for hover effects 13224- Smooth 0.2s transition on all style changes 13225 13226## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION 13227- **Changed:** Update Plugin tab is now the default tab when opening admin 13228- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab 13229- **Improved:** Clear Cache button now larger and more prominent with helpful description 13230- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events 13231- **Removed:** Debug console.log statements from day event display 13232- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab 13233 13234### UI Changes: 13235- Update Plugin tab opens by default (was Config/Outlook Sync tab) 13236- Clear Cache button prominently displayed at top of Update Plugin tab 13237- Orange ️ button (10px 20px padding) with confirmation dialog 13238- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin" 13239- Success/error messages display on Update Plugin tab after cache clear 13240- Tab navigation reordered to put Update first 13241 13242### Technical Changes: 13243- Default tab changed from 'config' to 'update' in html() method 13244- Tab navigation HTML reordered to show Update Plugin tab first 13245- clearCache() method now redirects with 'update' tab parameter 13246- Removed Clear Cache button from renderConfigTab() 13247- Added Clear Cache button to renderUpdateTab() with message display 13248 13249## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX 13250- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days 13251- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML 13252- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields 13253- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events 13254 13255### Technical Changes: 13256- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render() 13257- Events added to weekEvents now include pre-rendered HTML versions 13258- title_html and description_html fields populated before json_encode() 13259- JavaScript now receives properly formatted HTML content 13260 13261## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON 13262- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123) 13263- **Fixed:** HTML event handlers now call correctly sanitized function names 13264- **Fixed:** Weather temperature now updates correctly in sidebar widget 13265- **Added:** Weather update function to sidebar widget JavaScript 13266- **Added:** "Clear Cache" button in admin panel for easy cache refresh 13267- **Added:** Default weather location set to Irvine, CA when geolocation unavailable 13268- **Improved:** All tooltip functions now work correctly on system status bars 13269 13270### Technical Changes: 13271- Changed tooltip function names to use $jsCalId instead of $calId 13272- Changed HTML onmouseover/onmouseout to use $jsCalId 13273- Added updateWeather() function to sidebar widget 13274- Added getWeatherIcon() function to sidebar widget 13275- Added clearCache() method in admin.php 13276- Added recursiveDelete() helper method in admin.php 13277- Admin UI now has ️ Clear Cache button alongside Export/Import 13278 13279## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES 13280- **Fixed:** JavaScript syntax error "Missing initializer in const declaration" 13281- **Fixed:** Event links and formatting not displaying in clicked day events 13282- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores 13283- **Changed:** Event titles now use `title_html` field to preserve HTML formatting 13284- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting 13285- **Improved:** All JavaScript variable names now use valid syntax 13286- **Improved:** Links, bold, italic, and other HTML formatting preserved in events 13287 13288### Technical Changes: 13289- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);` 13290- JavaScript variables now use underscores instead of dashes 13291- Event HTML rendering preserves DokuWiki formatting 13292- Fixed "showTooltip_sidebar is not defined" errors 13293- Fixed "showDayEvents_cal is not defined" errors 13294 13295## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX 13296- **Fixed:** Critical JavaScript loading order issue causing ReferenceError 13297- **Fixed:** Functions now defined BEFORE HTML that uses them 13298- **Changed:** Consolidated all JavaScript into single comprehensive script block 13299- **Removed:** ~290 lines of duplicate JavaScript code 13300- **Added:** Shared state management with `sharedState_[calId]` object 13301- **Improved:** System tooltip functions now work correctly 13302- **Improved:** Week grid click events now work correctly 13303 13304### Technical Changes: 13305- Moved all JavaScript to beginning of widget (before HTML) 13306- Removed duplicate script blocks 13307- Unified tooltip and stats functions 13308- Shared latestStats and cpuHistory state 13309- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined" 13310 13311## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS 13312- **Added:** Dual color bars on events (section color + event color) 13313- **Added:** Click week grid days to view events (replaced hover tooltips) 13314- **Added:** Expandable section below week grid for selected day events 13315- **Added:** Blue theme for selected day section 13316- **Changed:** Week grid days now clickable instead of tooltips 13317- **Changed:** Section bar: 4px wide (left) 13318- **Changed:** Event bar: 3px wide (right) 13319- **Increased:** Gap between color bars from 3px to 6px 13320- **Improved:** Click is more reliable and mobile-friendly than hover tooltips 13321 13322### Visual Changes: 13323- Each event shows TWO color bars side-by-side 13324- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue) 13325- Right bar (3px): Individual event's assigned color 13326- Click any day in week grid to expand event list 13327- X button to close selected day events 13328 13329## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY 13330- **Increased:** Event color bar width from 2px to 3px 13331- **Increased:** Gap between section and event bars from 3px to 6px 13332- **Improved:** Event color bars now more visible alongside section bars 13333- **Note:** Dual color bar system already in place from v3.9.6 13334 13335## Version 3.9.6 (2026-02-05) - UI REFINEMENTS 13336- **Changed:** Date in Important Events moved below event name (was above) 13337- **Changed:** Section headers now 9px font size (was 10px) 13338- **Changed:** Section headers now normal case (was ALL CAPS) 13339- **Changed:** Letter spacing reduced from 0.8px to 0.3px 13340- **Improved:** More natural reading flow with date below event name 13341- **Improved:** Cleaner, more subtle section headers 13342 13343### Header Changes: 13344- "TODAY" → "Today" 13345- "TOMORROW" → "Tomorrow" 13346- "IMPORTANT EVENTS" → "Important Events" 13347 13348## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN 13349- **Redesigned:** Complete overhaul of `sidebar` parameter 13350- **Added:** Compact week-at-a-glance itinerary view (200px wide) 13351- **Added:** Live clock widget at top of sidebar 13352- **Added:** 7-cell week grid showing event bars 13353- **Added:** Today section with orange header and left border 13354- **Added:** Tomorrow section with green header and left border 13355- **Added:** Important Events section with purple header and left border 13356- **Added:** Admin setting to configure important namespaces 13357- **Added:** Time conflict badges in sidebar events 13358- **Added:** Task checkboxes in sidebar events 13359- **Changed:** Sidebar now optimized for narrow spaces (200px) 13360- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets 13361 13362### New Features: 13363- Clock updates every second showing current time 13364- Week grid shows Mon-Sun with colored event bars 13365- Today/Tomorrow sections show full event details 13366- Important events highlighted in purple (configurable namespaces) 13367- All badges (conflict, time, etc.) shown in compact format 13368- Automatic time conflict detection 13369 13370## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP 13371- **Removed:** 16 unused/debug/backup files 13372- **Removed:** 69 console.log() debug statements 13373- **Removed:** 3 orphaned object literals from console.log removal 13374- **Removed:** Temporary comments and markers 13375- **Fixed:** JavaScript syntax errors from cleanup 13376- **Improved:** Code quality and maintainability 13377- **Improved:** Reduced plugin size by removing unnecessary files 13378- **Status:** Production-ready, fully cleaned codebase 13379 13380### Files Removed: 13381- style.css.backup, script.js.backup 13382- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php 13383- debug_events.php, debug_html.php, cleanup_events.php 13384- fix_corrupted_json.php, fix_wildcard_namespaces.php 13385- find_outlook_duplicates.php, update_namespace.php 13386- validate_calendar_json.php, admin.js 13387- test_date_field.html 13388 13389## Version 3.7.5 (2026-02-05) 13390- **Fixed:** PHP syntax error (duplicate foreach loop removed) 13391- **Fixed:** Time variable handling in grace period logic 13392 13393## Version 3.7.4 (2026-02-05) 13394- **Added:** 15-minute grace period for timed events 13395- **Changed:** Events with times now stay visible for 15 minutes after their start time 13396- **Changed:** Prevents events from immediately disappearing when they start 13397- **Improved:** Better user experience for ongoing events 13398- **Fixed:** Events from earlier today now properly handled with grace period 13399 13400## Version 3.7.3 (2026-02-05) 13401- **Changed:** Complete redesign of cleanup section for compact, sleek layout 13402- **Changed:** Radio buttons now in single row at top 13403- **Changed:** All options visible with grayed-out inactive states (opacity 0.4) 13404- **Changed:** Inline controls - no more grid layout or wrapper boxes 13405- **Changed:** Namespace filter now compact single-line input 13406- **Changed:** Smaller buttons and tighter spacing throughout 13407- **Improved:** More professional, space-efficient design 13408 13409## Version 3.7.2 (2026-02-04) 13410- **Fixed:** Strange boxes under cleanup options - now properly hidden 13411- **Changed:** Unified color scheme across all admin sections 13412- **Changed:** Green (#00cc07) - Primary actions and main theme 13413- **Changed:** Orange (#ff9800) - Warnings and cleanup features 13414- **Changed:** Purple (#7b1fa2) - Secondary actions and accents 13415- **Improved:** Consistent visual design throughout admin interface 13416 13417## Version 3.7.1 (2026-02-04) 13418- **Fixed:** Cleanup section background changed from orange to white 13419- **Fixed:** Event cleanup now properly scans all calendar directories 13420- **Added:** Debug info display when preview finds no events 13421- **Improved:** Better directory scanning logic matching other features 13422 13423## Version 3.7.0 (2026-02-04) 13424- **Added:** Event cleanup feature in Events Manager 13425- **Added:** Delete old events by age (months/years old) 13426- **Added:** Delete events by status (completed tasks, past events) 13427- **Added:** Delete events by date range 13428- **Added:** Namespace filter for targeted cleanup 13429- **Added:** Preview function to see what will be deleted 13430- **Added:** Automatic backup creation before cleanup 13431- **Changed:** Reduced changelog viewer height to 100px (was 400px) 13432 13433## Version 3.6.3 (2026-02-04) 13434- **Fixed:** Conflict tooltips now work properly after navigating between months 13435- **Added:** Changelog display in Update Plugin tab 13436- **Added:** CHANGELOG.md file with version history 13437- **Improved:** Changelog shows last 10 versions with color-coded change types 13438- **Fixed:** Removed debug console.log statements 13439 13440## Version 3.6.2 (2026-02-04) 13441- **Fixed:** Month title now updates correctly when navigating between months 13442- **Changed:** All eventpanel header elements reduced by 10% for more compact design 13443- **Changed:** Reduced header height from 78px to 70px 13444 13445## Version 3.6.1 (2026-02-04) 13446- **Changed:** Complete redesign of eventpanel header with practical two-row layout 13447- **Fixed:** Improved layout for narrow widths (~500px) 13448- **Changed:** Simplified color scheme (removed purple gradient) 13449 13450## Version 3.6.0 (2026-02-04) 13451- **Changed:** Redesigned eventpanel header with gradient background 13452- **Changed:** Consolidated multiple header rows into compact single-row design 13453 13454## Version 3.5.1 (2026-02-04) 13455- **Changed:** Moved event search bar into header row next to + Add button 13456- **Improved:** More compact UI with search integrated into header 13457 13458## Version 3.5.0 (2026-02-04) 13459- **Added:** Event search functionality in sidebar and eventpanel 13460- **Added:** Real-time filtering as you type 13461- **Added:** Clear button (✕) appears when searching 13462- **Added:** "No results" message when search returns nothing 13463 13464## Version 3.4.7 (2026-02-04) 13465- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding) 13466- **Fixed:** Removed debug logging from console 13467- **Changed:** Updated export version number to match plugin version 13468 13469## Version 3.4.6 (2026-02-04) 13470- **Added:** Debug logging to diagnose conflict detection issues 13471- **Development:** Extensive console logging for troubleshooting 13472 13473## Version 3.4.5 (2026-02-04) 13474- **Added:** Debug logging to showDayPopup and conflict detection 13475- **Development:** Added logging to trace conflict detection flow 13476 13477## Version 3.4.4 (2026-02-04) 13478- **Fixed:** Conflict detection now persists across page refreshes (PHP-based) 13479- **Fixed:** Conflict tooltips now appear on hover 13480- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation) 13481- **Added:** Conflict badges in both future and past events sections 13482 13483## Version 3.4.3 (2026-02-04) 13484- **Added:** Custom styled conflict tooltips with hover functionality 13485- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2) 13486- **Improved:** Beautiful tooltip design with orange header and clean formatting 13487 13488## Version 3.4.2 (2026-02-04) 13489- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3) 13490 13491## Version 3.4.1 (2026-02-04) 13492- **Fixed:** End time field now properly saves to database 13493- **Fixed:** End time dropdown now filters to show only valid times after start time 13494- **Added:** Smart dropdown behavior - expands on focus, filters invalid options 13495- **Improved:** End time auto-suggests +1 hour when start time selected 13496 13497## Version 3.4.0 (2026-02-04) 13498- **Added:** End time support for events (start and end times) 13499- **Added:** Automatic time conflict detection 13500- **Added:** Conflict warning badges (⚠️) on events with overlapping times 13501- **Added:** Conflict tooltips showing which events conflict 13502- **Added:** Visual conflict indicators with pulse animation 13503- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM") 13504 13505## Version 3.3.77 (2026-02-04) 13506- **Fixed:** Namespace badge onclick handlers restored after clearing filter 13507- **Fixed:** Namespace filtering works infinitely (filter → clear → filter) 13508 13509## Version 3.3.76 (2026-02-04) 13510- **Fixed:** Namespace badges now clickable after clearing namespace filter 13511 13512## Version 3.3.75 (2026-02-04) 13513- **Fixed:** Form resubmission warnings eliminated 13514- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303 13515- **Changed:** All admin redirects now use absolute URLs 13516 13517## Version 3.3.74 (2026-02-04) 13518- **Fixed:** Clearing namespace filter now restores original namespace instead of default 13519- **Added:** data-original-namespace attribute to preserve initial namespace setting 13520- **Improved:** Console logging for namespace filter debugging 13521 13522## Version 3.3.73 (2026-02-03) 13523- **Added:** Dynamic namespace filtering banner with clear button 13524- **Fixed:** JavaScript function accessibility issues 13525- **Fixed:** Namespace badge click handlers in event lists 13526- **Improved:** Persistent namespace filtering across views 13527 13528## Earlier Versions 13529See previous transcripts for complete history through v3.3.73, including: 13530- Recurring events with Outlook sync 13531- Multi-namespace support 13532- Event categories and mapping 13533- Backup/restore functionality 13534- System statistics bar 13535- Namespace selector with fuzzy search 13536- Events Manager with import/export 13537- And much more... 13538