1# Calendar Plugin Changelog 2 3## Version 6.6.1 (2026-02-11) - SECURITY FIXES 4 5### Security 6- **Critical:** Removed `eval()` remote code execution vulnerability in config import 7- **Critical:** Added admin authentication requirement to `get_system_stats.php` endpoint 8- **High:** Added CSRF token verification to all write operations (save, delete, toggle) 9- **High:** Fixed path traversal vulnerabilities in namespace delete/rename functions 10- **High:** Added admin privilege verification to AJAX admin routes 11 12### Improved 13- **Input Validation:** Date format (YYYY-MM-DD), time format (HH:MM), color format (#RRGGBB) 14- **Input Validation:** Year range (1970-2100), month range (1-12), namespace format 15- **Input Validation:** Recurrence type whitelist, title/description length limits 16- **Debug Logging:** All debug logging now conditional on `CALENDAR_DEBUG` constant (off by default) 17- **JSON Handling:** Added `safeJsonRead()` helper with proper error handling 18- **Timezone:** Sync script now uses configured timezone instead of hardcoded value 19 20### Code Quality 21- Documented intentional switch fallthrough in `get_system_stats.php` 22- Standardized error response format 23 24## Version 6.6.0 (2026-02-11) - BACKUP & UI IMPROVEMENTS 25 26### Fixed 27- **Backup:** Fixed recursive directory backup to properly include all subdirectories (including `lang/`) 28- **Backup:** Now uses `SELF_FIRST` iterator to process directories before their contents 29- **Backup:** Empty directories are now explicitly added with `addEmptyDir()` to preserve structure 30 31### UI Change 32- **Namespace Explorer:** Cleanup status message now appears prominently at top of section 33- Previously status message was at bottom, easy to miss after cleanup operations 34 35## Version 6.5.5 (2026-02-11) - FIX AJAX ROUTING & MOVE CLEANUP BUTTON 36 37### Bug Fix 38- All admin AJAX actions (cleanup, rescan, extend, trim, pause, resume, change start/pattern) were returning "Unknown action" 39- Root cause: AJAX calls go through `action.php`'s switch statement, not `admin.php`'s `handle()` method 40- Added routing in `action.php`: new cases forward to `admin.php` via `routeToAdmin()` helper 41- Added public `handleAjaxAction()` method in `admin.php` as the entry point from `action.php` 42 43### UI Change 44- Moved " Cleanup" button from standalone section to inline next to "➕ New Namespace" in the control bar 45- Status messages still appear below the namespace explorer 46 47## Version 6.5.4 (2026-02-11) - FIX PHP PARSE ERROR IN CLEANUP JS 48 49### Bug Fix 50- Root cause: `style='color:...'` single quotes inside PHP `echo '...'` block terminated the PHP string prematurely 51- PHP saw `color:#e74c3c` as unexpected PHP code instead of part of the JS string 52- Fixed all 5 occurrences in cleanupEmptyNamespaces JS: escaped single quotes as `\'` 53- Added `adminColors` JS object (text, bg, border) injected from PHP `$colors` at render time 54- Cleanup detail text uses `adminColors.text` to respect DokuWiki template theme colors 55 56## Version 6.5.3 (2026-02-11) - FIX CLEANUP NAMESPACES PARSE ERROR 57 58### Bug Fix 59- Fixed PHP parse error on line 1089 caused by `$colors['text']` PHP variable inside JS string concatenation 60- The cleanup results detail list now uses hardcoded `#666` for text color instead of attempting PHP interpolation within JS runtime code 61 62## Version 6.5.2 (2026-02-11) - CLEANUP EMPTY NAMESPACES 63 64### New Feature 65- " Cleanup Empty Namespaces" button added at bottom of Namespace Explorer section 66- Dry-run scan first: shows exactly what will be removed with bullet-point details in confirm dialog 67- Removes empty calendar folders (0 JSON files or all-empty JSON files) from any namespace 68- Removes parent namespace directories if they become empty after calendar folder removal 69- Root calendar directory is never removed 70- AJAX-powered with inline status showing results after cleanup 71- Page auto-reloads after 2 seconds to refresh the namespace explorer view 72- Recursively scans all nested namespace directories via `findAllCalendarDirsRecursive()` 73 74## Version 6.5.1 (2026-02-11) - TRIM ALL PAST: SHOW COUNT BEFORE DELETE 75 76### Improved 77- "Trim All Past" button now does a dry-run count before showing the confirmation dialog 78- Confirmation shows exact count: "Found 47 past recurring events to remove" 79- If zero found, shows "No past recurring events found to remove" instead of confirm 80- PHP handler supports `dry_run` parameter that counts without deleting 81 82## Version 6.5.0 (2026-02-11) - BULK TRIM ALL PAST RECURRING EVENTS 83 84### Bulk Action 85- Red "✂️ Trim All Past" button added next to the Rescan button in the Recurring Events section header 86- Removes ALL past occurrences (before today) from EVERY recurring series in one click 87- Only removes events with `recurring` or `recurringId` flags — non-recurring events are untouched 88- Confirmation dialog required before execution 89- AJAX-powered with inline status showing count removed, then auto-rescans the table 90- Searches all calendar directories recursively 91 92## Version 6.4.9 (2026-02-11) - FIX RECURRING EDIT/DELETE: SEARCH ALL DIRECTORIES 93 94### Bug Fix 95- Edit and Delete recurring series now search ALL calendar directories instead of building a path from the namespace field 96- Root cause: event's `namespace` field (stored in JSON) can differ from the filesystem directory where the file lives 97- Both handlers now use `findCalendarDirs()` to collect every calendar directory recursively 98- Events matched by title AND namespace field (case-insensitive) for precise targeting 99- Edit handler rewritten: rename/time/namespace updates in Pass 1, interval respace in Pass 2 100- New `findCalendarDirs()` helper method for recursive directory discovery 101 102## Version 6.4.8 (2026-02-11) - FIX PHP PARSE ERROR IN MANAGE DIALOG 103 104### Bug Fix 105- Rewrote `manageRecurringSeries()` JS function using string concatenation instead of template literals 106- JS template literals (`${...}`) inside PHP echo blocks caused PHP to parse them as variable interpolation 107- All inline onclick handlers now use `\x27` for single quotes to avoid escaping conflicts 108 109## Version 6.4.7 (2026-02-11) - RECURRING EVENTS: FULL MANAGEMENT CONTROLS 110 111### New "Manage" Button per Series 112- Orange "Manage" button opens a comprehensive management dialog for each recurring series 113 114### Extend Series 115- Add N new occurrences after the last event in the series 116- Configurable interval: Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly 117- New events copy title, time, color, namespace, and recurring flag from the last event 118 119### Trim Past Events 120- Remove all occurrences before a selected cutoff date 121- Confirmation required before deletion 122- Cleans up empty date keys and files automatically 123 124### Change Pattern 125- Respace future occurrences with a new interval 126- Past events are untouched; only future events are removed and re-created 127- First future event becomes the anchor date 128 129### Change Start Date 130- Shift ALL occurrences by the difference between old and new start date 131- Events are removed from old positions and re-created at new positions 132- Preserves spacing between all events 133 134### Pause/Resume 135- Pause: adds ⏸ prefix and paused flag to all future occurrences 136- Resume: removes ⏸ prefix and paused flag from all occurrences 137- Button toggles based on whether series is currently paused 138 139### Infrastructure 140- New shared `recurringAction()` JS helper for all AJAX management operations 141- New `getRecurringSeriesEvents()` PHP helper for finding all events in a series 142- Status messages shown inline in the management dialog 143- Close button triggers automatic rescan to refresh the table 144 145## Version 6.4.6 (2026-02-11) - RECURRING EVENTS: RESCAN BUTTON & IMPROVED LOGIC 146 147### Rescan Button 148- Green " Rescan" button added to the Recurring Events section header 149- AJAX-powered: rescans all calendar data and refreshes the table without page reload 150- Shows count of found series briefly after scan completes 151 152### Improved Detection Logic 153- Events with `recurring: true` flag are now detected first (grouped by `recurringId`) 154- Pattern-detected events (3+ same-title occurrences) are found separately and deduplicated 155- New "Source" column shows ️ Flagged (has recurring flag) vs Detected (pattern match) 156- Median interval used for pattern detection instead of just first two dates (more robust) 157- New patterns recognized: Quarterly, Semi-annual, and "Every ~N days" for custom intervals 158- Empty/invalid titles and malformed date arrays are now skipped safely 159- Dates are deduplicated before counting (prevents inflated counts from multi-day events) 160- Nested namespace directories now scanned recursively 161- Results sorted alphabetically by title 162 163## Version 6.4.5 (2026-02-11) - ADMIN VERSION HISTORY OVERHAUL 164 165### Version History Viewer 166- All purple (#7b1fa2) accent colors replaced with green (#00cc07) to match admin theme 167- Changelog parser now handles `###` subsection headers (rendered as green bold labels) 168- Plain `- ` bullet items now parsed and categorized under their subsection 169- Previously only `- **Type:** description` format was recognized 170 171### Current Release Button 172- Green "Current Release" button added between nav arrows 173- Jumps directly to the card matching the running version from plugin.info.txt 174- Running version card shows green "RUNNING" badge and thicker green border 175 176## Version 6.4.4 (2026-02-11) - WIKI THEME: PAST EVENTS TOGGLE BACKGROUND 177 178### Fix 179- Wiki theme past events pulldown (retracted state) now uses `__background_neu__` (`--cell-today-bg`) 180- Previously used `--cell-bg` which appeared unthemed/white 181 182## Version 6.4.3 (2026-02-11) - WIKI THEME: DAY HEADERS BACKGROUND 183 184### Fix 185- Wiki theme SMTWTFS day headers now use `__background_neu__` (`--cell-today-bg`) instead of `--background-header` 186 187## Version 6.4.2 (2026-02-11) - WIKI THEME: DAY HEADERS (INITIAL) 188 189### Wiki Theme Day Headers 190- Added explicit CSS override for `.calendar-theme-wiki .calendar-day-headers` 191- Day header text uses `--text-primary` (template's `__text__` color) 192 193## Version 6.4.1 (2026-02-11) - WIKI THEME: EVENT HIGHLIGHT 194 195### Fix 196- Wiki theme event highlight (when clicking calendar bar) now uses `themeStyles.header_bg` (`__background_alt__`) instead of hardcoded blue (#dce9f5) 197- Subtle shadow instead of blue glow 198 199## Version 6.4.0 (2026-02-11) - DARK READER: SECTION BAR COLOR MATCHING 200 201### Fix 202- Wiki theme section left bar now uses a `<div>` with `background` instead of `border-left` 203- Dark Reader maps the same color differently for border vs background properties, causing visual mismatch 204- Both the bar and header now use `background`, so Dark Reader maps them identically 205- Flex layout wrapper added for wiki theme sections 206- Wiki fallback colors updated: `border` key now uses `#ccc` (matching `__border__`) instead of `#2b73b7` 207 208## Version 6.3.9 (2026-02-10) - WIKI THEME: SECTION BAR FIX (ATTEMPT) 209 210### Fix 211- Simplified wiki section container — removed `wiki-section-container` class 212- Added `background` from `$themeStyles['bg']` to section container 213 214## Version 6.3.8 (2026-02-10) - WIKI THEME: BUTTON & SECTION HEADER COLORS 215 216### Wiki Theme Buttons 217- Nav buttons (< >), Today button, and panel buttons now use `__link__` color background with white text 218- CSS overrides for `.calendar-theme-wiki .cal-nav-btn`, `.cal-today-btn`, panel buttons 219 220### Wiki Theme Section Headers 221- Today: `__link__` background (accent/link color) 222- Tomorrow: `__background_alt__` background (alternate background) 223- Important: `__border__` background (border color) 224- Each section now has a distinct color from the template palette 225 226## Version 6.3.7 (2026-02-10) - WIKI THEME CHECKBOX FIX 227 228### Fix 229- Wiki theme checkbox override changed from `border-color` to full `border: 2px solid` shorthand 230- Properly overrides the base rule which uses `border` shorthand 231- Hover state also uses full shorthand 232 233## Version 6.3.6 (2026-02-10) - WIKI THEME CHECKBOX BORDER COLOR 234 235### Fix 236- Wiki theme unchecked checkboxes now use `--border-main` (template's `__border__` color) for border 237- Checked state fills with border color 238- Hover state uses border color 239- Applied to calendar, sidebar, and eventlist containers 240 241## Version 6.3.5 (2026-02-10) - WIKI THEME: ALLOW DARK READER ON HEADERS 242 243### Fix 244- Wiki theme section headers (Today/Tomorrow/Important) no longer use `!important` or `-webkit-text-fill-color` 245- Dark Reader can now freely adjust background, text color, and borders on wiki theme headers 246- Clicked-day panel header and section border-left also unlocked for wiki theme 247- All other themes (matrix/purple/pink/professional) retain full Dark Reader protection 248 249## Version 6.3.4 (2026-02-10) - WIKI THEME: BORDER COLOR FOR HEADERS & BADGES 250 251### Wiki Theme Color Remapping 252- `border` (accent color) now maps to template's `__border__` instead of `__link__` 253- This affects: section headers (Today/Tomorrow/Important), badges (TODAY, namespace), sidebar widget border, clicked-day panel, `--border-main` CSS variable 254- `text_bright` still maps to `__link__` for link text and accent text 255- Section headers all use the same `__border__` color for consistent appearance 256- Updated COLOR_SCHEME mapping documentation 257 258## Version 6.3.3 (2026-02-10) - WIKI THEME SECTION HEADER TEXT COLOR 259 260### Fix 261- Wiki theme Today/Tomorrow/Important section header text now uses `$themeStyles['text_primary']` (mapped from template's `__text__` color) instead of hardcoded white 262- Clicked-day panel header text also uses template text color for wiki theme 263- Professional theme remains white text on blue headers 264 265## Version 6.3.2 (2026-02-10) - FIX THEME NOT UPDATING ON SIDEBAR EVENTLIST 266 267### Bug Fix 268- Added `$renderer->nocache()` to the render function 269- DokuWiki was caching the rendered sidebar HTML, so theme changes made in admin were never reflected until the page was manually edited 270- Now all calendar/eventlist/eventpanel outputs are rendered fresh on each page load, picking up the current theme from `calendar_theme.txt` 271 272## Version 6.3.1 (2026-02-10) - EVENTLIST THEMING 273 274### {{eventlist}} Theme Support 275- Eventlist containers now receive theme class (`eventlist-theme-matrix`, etc.) and full CSS variable injection 276- Dark themes get themed border + glow, light themes get subtle border 277- Container background set from `$themeStyles['bg']` with `!important` 278 279### Eventlist CSS Theme Rules (all 3 dark themes) 280- Title, header, time, date, body, links, strong, code, namespace badge, empty state 281- Today header, clock, date — all with `color` + `-webkit-text-fill-color` `!important` 282- Item borders, section backgrounds, code block backgrounds 283- Full Dark Reader protection via same inline+CSS approach as calendar/sidebar 284 285## Version 6.3.0 (2026-02-10) - DARK READER COMPATIBILITY & COMPLETE THEMING 286 287### Dark Reader Browser Extension Compatibility 288All 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. 289 290**Protected elements:** 291- Section headers (Today/Tomorrow/Important) — background, text color, text-fill-color 292- Clicked-day panel header — background, text color, close button 293- All badges (TODAY, PAST DUE, namespace, panel namespace, eventlist-simple) — background, text, text-fill-color 294- Event titles, meta, descriptions — color with !important via CSS 295- Day numbers, nav buttons, calendar day headers — color with !important via CSS 296- System status bars — inline background !important on tracks and fills 297- System tooltips — background, border-color, text color all set via setProperty with !important 298- Section left border bars — border-left with !important 299- Event color indicator bars — border-left-color with !important 300- Sidebar section event text (Purple and Pink themes) 301 302### Complete CSS Variable Audit (41 conversions in v6.1.1) 303- All remaining hardcoded colors in style.css converted to CSS variable references 304- Calendar borders, text colors, backgrounds, input focus shadows, accent borders 305- Only legitimate hardcodes remain (keyframe animations, theme-specific override blocks) 306 307### Semantic Color System 308- New CSS variables: `--pastdue-color`, `--pastdue-bg`, `--pastdue-bg-strong`, `--pastdue-bg-light` 309- New CSS variables: `--tomorrow-bg`, `--tomorrow-bg-strong`, `--tomorrow-bg-light` 310- Injected into all 3 CSS var blocks (full calendar, event panel, sidebar widget) 311- Today/Tomorrow/Important section colors now theme-derived instead of hardcoded 312 313### Section Headers Fully Themed 314- Today/Tomorrow/Important headers use theme accent colors instead of fixed green/orange/purple 315- Matrix: bright/standard/dim green, Purple: bright/standard/dim purple, Pink: hot/medium/light pink 316- Professional: blue shades, Wiki: template-derived colors 317- Dark theme headers use dark background color for text contrast 318 319### Pink Theme Enhancements 320- **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 321- **Firework button hover** — `pink-firework-burst` keyframe animation with multi-point radiating box-shadows, scale/brightness effects on hover, instant flash on click 322- **Checkbox glow** — hot pink border with ambient glow, hover intensifies, checked fills with glow 323 324### All Theme Checkbox Theming 325- Matrix: bright green border + green glow, Purple: purple border + purple glow 326- Pink: hot pink border + pink glow (with enhanced ambient effect) 327- Hover scales 1.1x with intensified glow on all themes 328- Checked state fills with theme accent color + outer glow 329 330### System Tooltips Themed 331- Both tooltip functions use theme-derived colors from `$themeStyles` 332- Green tooltip: `text_bright`, Purple: `border`, Orange: `text_primary` 333- Background from `$themeStyles['bg']`, divider borders use theme accent colors 334- All properties set with `style.setProperty(prop, value, "important")` 335 336### Namespace Filter Badge Cleanup 337- Removed inline namespace badge from event side panel header 338- Filter indicator bar ("Filtering: namespace ✕") retained and working 339- AJAX-based namespace filtering fully functional via onclick handlers 340 341## Version 6.1.0 (2026-02-10) - TODAY INDICATOR, BUTTON HOVER & CHECKBOXES 342 343### Today Indicator 344- **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) 345- **Added:** Today cell has `--cell-today-bg` background AND a visible inset border glow on hover using `--border-main` 346- **Added:** `.day-num` now uses `--text-primary` for color instead of relying on browser default 347 348### Button Hover/Click Theming 349- **Fixed:** All buttons now use `filter: brightness(1.3)` on hover for a visible glow effect across all themes 350- **Fixed:** All buttons use `filter: brightness(0.85)` on click/active for a press-down darkening effect 351- **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 352- **Removed:** Generic `opacity: 0.9` hover which was barely visible on dark themes 353 354### Checkboxes Themed 355- **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 356- **Added:** `accent-color: var(--text-bright)` on all dialog checkboxes (task, recurring) for consistent theme coloring 357 358### Form Input Text 359- **Fixed:** `.input-sleek` now has `color: var(--text-primary)` — form text is visible on dark themes 360- **Added:** `::placeholder` styling for inputs/textareas using `--text-dim` 361 362## Version 6.0.9 (2026-02-09) - FORM TEXT, CELL HOVER & GLOW TUNING 363 364### Form Input Text Fix 365- **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)`. 366- **Added:** Themed placeholder text (`::placeholder`) for inputs/textareas 367 368### Button & Cell Hover Theming 369- **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` 370- **Improved:** Nav buttons (`◄`/`►`) and Today button hover now show a themed glow + scale effect instead of just opacity change 371- **Added:** Active (click) state for nav/today buttons with scale-down feedback 372- **Improved:** Month picker hover now also shows a subtle theme shadow 373 374### Glow Reduced to 1px for Matrix/Purple 375- Matrix and purple text glow reduced from 2px to 1px across: event titles, descriptions, meta, links, sidebar day numbers, sidebar event titles, sidebar dates 376- Matrix clock pulse animation reduced from 6px/10px+15px to 2px/4px+6px 377- Weather text glow reduced to 1px, clock to 2px 378- Pink remains at 2px (barely noticeable) 379 380## Version 6.0.8 (2026-02-09) - LINKS, GLOW CONSISTENCY & PINK TONE-DOWN 381 382### Links Themed 383- **Added:** `.cal-link` CSS class — all links rendered via `renderDescription()` now pick up theme accent color via `--text-bright` 384- **Fixed:** Sidebar widget links (`a.cal-link`) inherit theme colors 385- **Fixed:** Event list widget description links (`eventlist-widget-desc a`) use CSS vars 386- **Fixed:** Simple event list body links/strong/code all themed 387 388### Text Glow Consistency 389- **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 390- **Added:** Subtle link glow on dark themes 391- **Added:** Matrix and purple now get the same barely-visible text glow that pink had on sidebar week grid day numbers and event titles 392 393### Pink Glow Toned Down 394- **Reduced:** Sidebar today header box-shadow from `0 0 10px 0.4` to `0 0 6px 0.25` 395- **Reduced:** Day number sparkle animation from 3px/6px+10px to 2px/3px 396- **Reduced:** Today cell shimmer from 3px+5px / 8px+12px to 2px+3px / 4px+6px 397- **Reduced:** Event bar glow pulse from 2px/4px+6px to 1px/2px+3px 398- **Reduced:** Today hover glow from 10px+15px to 5px+8px 399- **Reduced:** Event item glow from 2px/5px to 1px/3px 400- **Reduced:** Calendar container glow from 8px to 5px 401 402### Other 403- **Themed:** Sidebar weather, date, and clock text colors and glow via CSS vars 404 405## Version 6.0.7 (2026-02-09) - BADGES, BUTTONS & CONFLICT THEMING 406 407- **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 408- **Fixed:** TODAY badge uses `--border-main` for background instead of hardcoded purple 409- **Fixed:** Conflict alert badge (`⚠️`) uses `--border-main` background and `--text-bright` border — matches theme accent 410- **Fixed:** Conflict tooltip header background now set inline from theme vars (tooltip is appended to body, can't inherit CSS vars) 411- **Fixed:** Conflict tooltip body items use themed text and border colors 412- **Fixed:** Month picker Go/Cancel buttons themed (`--text-bright` for save, `--cell-bg` for cancel) 413- **Fixed:** Calendar header month/year hover uses `--cell-today-bg` background 414- **Fixed:** Inline search input border uses `--border-color` 415- **Fixed:** Event list header border uses `--border-color` 416 417## Version 6.0.6 (2026-02-09) - COMPLETE TEXT THEMING 418 419- **Fixed:** Calendar header month/year title had hardcoded dark color — now uses `--text-primary` 420- **Fixed:** Month/year picker hover used hardcoded gray background and green text — now uses `--cell-today-bg` and `--text-bright` 421- **Fixed:** Event list items (titles, meta, descriptions, links, code blocks, bold text) — all now theme-aware via CSS vars 422- **Fixed:** Completed/past event states used hardcoded grays — now use `--cell-bg`, `--text-dim`, `--cell-today-bg` 423- **Fixed:** Scrollbar track/thumb colors now use theme vars 424- **Fixed:** Namespace filter indicator (background, label, badge, close button) — all themed 425- **Fixed:** Panel standalone month picker hover and namespace badge — themed 426- **Fixed:** Calendar header border-bottom — now uses `--border-color` 427 428## Version 6.0.5 (2026-02-09) - THEMED BORDERS & EVENT PANEL 429 430- **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). 431- **Added:** Theme-colored border and glow for event panel (`{{eventpanel}}`) on dark themes using `[data-theme]` attribute selectors 432- **Themed:** Event panel header (nav buttons, month title, today button, search input, add button) — all now use CSS vars 433- **Themed:** Panel standalone header background and border 434 435## Version 6.0.4 (2026-02-09) - FULL DIALOG THEMING 436 437- **Fixed:** Day cell click popup (day-popup) used hardcoded white/gray colors — now fully theme-aware using CSS variables 438- **Fixed:** Event add/edit dialog (dialog-content-sleek) had hardcoded white background and blue header — now uses theme colors 439- **Fixed:** Month picker dialog had hardcoded white background and dark text — now themed 440- **Fixed:** Popup event items, titles, times, descriptions, footer, add-event button, close button — all now use CSS vars with sensible fallbacks 441- **Fixed:** Form elements (field labels, inputs, checkboxes, recurring options, color pickers) — all reference theme CSS vars 442- **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. 443 444## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB 445 446- **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Events Manager and Cleanup sections) 447- **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage tab sections 448- **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now independent of Outlook config save 449- **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value 450 451## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX 452 453- **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. 454 455## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX 456 457- **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()` 458- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller 459- **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. 460 461 462## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE 463 464- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed 465- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified 466- **Audited:** style.css (3,218 lines) — balanced braces confirmed 467- **Audited:** All admin manage tab action handlers verified functional (13 actions) 468- **New:** Fresh README.md for GitHub with complete documentation 469- **Includes all v5.5.x fixes:** 470 - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total)) 471 - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel 472 - Conflict badges on past events after AJAX navigation 473 - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal 474 475## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP 476 477- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers 478- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0` 479- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning 480- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name 481- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared 482- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check 483- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving 484- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files 485- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt 486- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache 487- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`) 488- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries` 489- **Removed:** Stale "NEW!" comment from Events Manager section 490 491## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH 492 493- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API 494- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status) 495- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run 496- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing 497- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total) 498- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed 499- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important) 500- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead 501- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text 502- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes) 503 504## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH 505 506- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys 507- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional) 508- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background 509- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files) 510- **Changed:** Wiki theme section header text now white for readability on colored backgrounds 511- **Changed:** Week grid JS theme colors now use actual $themeStyles values 512 513## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX 514 515- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch) 516 517## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING 518 519- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner 520- **Fixed:** Week grid conflict tooltips also fixed (same issue) 521- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data 522- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip) 523 524## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD 525 526- **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) 527 528## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS 529 530- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body) 531- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string 532 533## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING 534 535- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping 536- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON) 537- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute 538- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility 539 540## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING 541 542- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation 543- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads 544- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-) 545- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1 546- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds 547- **Added:** ESC key now also closes day popups and conflict tooltips 548- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding 549 550## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY 551 552- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance 553- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js 554- **Refactored:** style.css is now the single source of truth for all visual styling 555- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container 556- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget) 557- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars 558- **Added:** CSS variable injection for {{eventlist panel}} containers 559- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers 560- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position 561- **Added:** Wiki template mapping reads __link__ as accent color from style.ini 562- **Added:** Detailed CSS variable reference table in style.css header comment 563- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php 564- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles 565- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div 566- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible) 567- **Removed:** $isWikiTheme branching from PHP render path 568 569## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! 570 571### Added: Hearts in Explosions! 572- **Added:** 8-12 pink hearts in each click explosion 573- **Added:** Random sizes (12-28px) and directions 574- **Result:** Extra love in every click! 575 576### Fixed: Background CSS Property for Dark Mode Readers 577- **Fixed:** Added `background: transparent` to CSS (was completely removed) 578- **Fixed:** Now CSS readers can detect and modify background property 579- **Why:** Inline styles override transparent, but CSS readers can now see the property 580- **Result:** Dark mode plugins can now change calendar backgrounds! 581 582### The CSS Problem 583 584**Why backgrounds weren't changing with dark mode readers**: 585 586**Before (v5.3.5)**: 587```css 588.calendar-compact-grid tbody td { 589 /* background removed - set via inline style */ 590 border: 1px solid... 591} 592``` 593 594**Problem**: CSS property doesn't exist! 595- Dark mode readers look for `background` property in CSS 596- Can't override what doesn't exist 597- Inline styles work, but readers can't modify them 598 599**After (v5.3.6)**: 600```css 601.calendar-compact-grid tbody td { 602 background: transparent; /* Now exists! */ 603 border: 1px solid... 604} 605``` 606 607**Solution**: 608- Property exists in CSS 609- Dark mode readers can override it 610- Inline styles still override transparent 611- Everyone wins! 612 613### What's Fixed 614 615**Elements now have background property**: 616- `.calendar-compact-grid tbody td` ✓ 617- `.calendar-compact-grid tbody td:hover` ✓ 618- `.event-compact-item` ✓ 619- `.event-compact-item:hover` ✓ 620 621**How it works**: 6221. CSS sets `background: transparent` (default) 6232. Inline styles set actual color (overrides transparent) 6243. Dark mode readers can override CSS property 6254. Works for everyone! 626 627### Hearts in Explosion 628 629**Click anywhere → Hearts explode!** 630 631**Heart details**: 632- Count: 8-12 per explosion (random) 633- Size: 12-28px (random variety) 634- Emoji: (pink heart) 635- Direction: Random 360° 636- Speed: 60-140px travel 637- Duration: 0.8-1.2s 638- z-index: 9999999 (always visible) 639 640**Combined with**: 641- 25 glowing particles 642- 40 pixel sparkles 643- Bright flash 644- **Total: 73-77 elements!** 645 646### Visual Result 647 648**Click explosion**: 649``` 650 ✦ • ✦ 651 • • 652✦ • ! • ✦ 653 • • 654 ✦ • ✦ 655 656Hearts + Particles + Pixels! 657``` 658 659**Dark mode now works**: 660```css 661/* Dark mode reader can now do this: */ 662.calendar-compact-grid tbody td { 663 background: #000 !important; /* Works! */ 664} 665``` 666 667### Why Transparent Works 668 669**CSS Cascade**: 6701. CSS: `background: transparent` (lowest priority) 6712. Inline style: `background: #f5f5f5` (overrides CSS) 6723. Dark mode CSS: `background: #000 !important` (overrides inline) 673 674**Perfect solution!** ✓ 675 676## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! 677 678### Fixed: Particles Now Appear Above All Dialogs! 679- **Fixed:** Increased z-index to 9999999 for all particles 680- **Fixed:** Particles now visible above event dialogs, month picker, etc. 681- **Result:** Cursor effects and explosions always visible! 682 683### The Z-Index Problem 684 685**Before (v5.3.4)**: 686- Particles: z-index 9999 687- Dialogs: z-index 10000-999999 688- **Particles hidden behind dialogs!** 689 690**After (v5.3.5)**: 691- Particles: z-index 9999999 692- Trail: z-index 9999998 693- Pixels: z-index 9999997 694- **Particles ALWAYS on top!** 695 696### What's Fixed 697 698✅ **Main particles** (explosion orbs) 699✅ **Cursor trail** (glowing dots) 700✅ **Pixel sparkles** (tiny bright stars) 701✅ **Flash effect** (click burst) 702 703**All now appear above**: 704- Event dialog popups 705- Month picker 706- Day popups 707- Any modal overlays 708 709### Visual Result 710 711**Moving cursor over dialog**: 712``` 713┌─────────────────────┐ 714│ Event Dialog │ 715│ ✦ • ✦ │ ← Sparkles visible! 716│ → ✦ │ ← Cursor trail visible! 717│ • ✦ • │ 718└─────────────────────┘ 719``` 720 721**Clicking on dialog**: 722``` 723┌─────────────────────┐ 724│ ✦ • ✦ • ✦ │ 725│ • ! • │ ← Explosion visible! 726│ ✦ • ✦ • ✦ │ 727└─────────────────────┘ 728``` 729 730**Perfect visibility everywhere!** ✨ 731 732## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX 733 734### Fixed: Month Picker Now Themed! 735- **Fixed:** Jump to Month dialog now uses theme colors 736- **Fixed:** Dialog background, borders, text all themed 737- **Fixed:** Select dropdowns use theme colors 738- **Fixed:** Buttons use theme accent colors 739- **Result:** Month picker matches calendar theme! 740 741### Fixed: Cursor Effects Work in Dialogs! 742- **Fixed:** Cursor trail now works when hovering over dialogs 743- **Fixed:** Click explosions work when clicking inside dialogs 744- **Technical:** Changed to capture phase event listeners 745- **Result:** Effects work EVERYWHERE now! 746 747### Month Picker Theming 748 749**Before (v5.3.3)**: 750- White background (hardcoded) 751- Black text (hardcoded) 752- No theme integration 753- Looked out of place 754 755**After (v5.3.4)**: 756- Dialog background: `theme.bg` 757- Dialog border: `theme.border` 758- Text color: `theme.text_primary` 759- Dropdowns: `theme.cell_bg` + `theme.text_primary` 760- Cancel button: `theme.cell_bg` 761- Go button: `theme.border` (accent color) 762 763**Fully integrated!** ✅ 764 765--- 766 767### Theme Examples 768 769**Matrix Theme**: 770``` 771┌─────────────────────────┐ 772│ Jump to Month │ ← Dark bg, green border 773│ [February ▼] [2026 ▼] │ ← Dark dropdowns 774│ [Cancel] [Go] │ ← Green "Go" button 775└─────────────────────────┘ 776``` 777 778**Pink Theme**: 779``` 780┌─────────────────────────┐ 781│ Jump to Month │ ← Dark bg, pink border 782│ [February ▼] [2026 ▼] │ ← Dark dropdowns 783│ [Cancel] [Go] │ ← Pink "Go" button 784└─────────────────────────┘ 785With sparkle effects! ✨ 786``` 787 788**Professional Theme**: 789``` 790┌─────────────────────────┐ 791│ Jump to Month │ ← Clean bg, blue border 792│ [February ▼] [2026 ▼] │ ← Clean dropdowns 793│ [Cancel] [Go] │ ← Blue "Go" button 794└─────────────────────────┘ 795``` 796 797--- 798 799### Dialog Cursor Fix 800 801**The Problem**: 802Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects! 803 804**The Solution**: 805Use **capture phase** event listeners: 806```javascript 807// Before (bubbling phase) 808document.addEventListener('click', handler) 809 810// After (capture phase) 811document.addEventListener('click', handler, true) 812 ↑ 813 Capture phase! 814``` 815 816**Capture phase runs BEFORE stopPropagation!** 817 818--- 819 820### Now Works Everywhere 821 822✅ **Calendar area** 823✅ **Event dialogs** 824✅ **Month picker dialog** 825✅ **Day popup dialogs** 826✅ **Anywhere on screen** 827 828**No more blocked effects!** 829 830--- 831 832### Technical Details 833 834**Event phases**: 835``` 8361. Capture phase ← We listen here now! 8372. Target phase 8383. Bubbling phase ← stopPropagation blocks this 839``` 840 841**By using capture phase**: 842- Events caught before stopPropagation 843- Works in all dialogs 844- No conflicts with dialog logic 845 846--- 847 848### All Dialogs Checked 849 850✅ **Month picker** - Now themed! 851✅ **Event dialog** - Already themed 852✅ **Day popup** - Already themed 853 854**Everything consistent!** 855 856--- 857 858## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨ 859 860### ✨ Added: Bright Neon Pixel Sparkles Everywhere! 861- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail 862- **Added:** 40 pixel sparkles in click explosions 863- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar) 864- **Result:** Maximum sparkle effect! 865 866### Tiny Pixel Sparkles 867 868**3-6 tiny bright pixels appear with each cursor movement!** 869 870**Characteristics**: 871- Size: 1-2px (single pixel appearance!) 872- Colors: Bright neon whites and pinks 873 - Pure white (#fff) - 40% chance 874 - Hot pink (#ff1493) 875 - Pink (#ff69b4) 876 - Light pink (#ffb6c1) 877 - Soft pink (#ff85c1) 878- Glow: Triple-layer shadow (intense!) 879- Spawn: Random 30px radius around cursor 880- Animations: 881 - 50% twinkle in place 882 - 50% float upward 883 884**Creates a cloud of sparkles around your cursor!** 885 886--- 887 888### Click Explosion Enhanced 889 890**Now with 40 EXTRA pixel sparkles!** 891 892**Click anywhere → BIG BOOM**: 893- 25 main glowing particles (6-10px) 894- **40 tiny pixel sparkles (1-2px)** ← NEW! 895- Bright white flash 896- Total: 65+ visual elements! 897 898**Pixel sparkles in explosion**: 899- Shoot outward in all directions 900- Random distances (30-110px) 901- Multiple bright colors 902- Some twinkle, some explode 903- Creates stellar effect! 904 905--- 906 907### Entire Screen Coverage 908 909**Effects now work EVERYWHERE!** 910 911**Before (v5.3.2)**: 912- Only inside calendar viewport 913- Limited to calendar area 914 915**After (v5.3.3)**: 916- Works on entire screen! ✓ 917- Cursor trail follows everywhere 918- Click explosions anywhere 919- Used `position: fixed` + `clientX/Y` 920 921**Move anywhere on the page for sparkles!** 922 923--- 924 925### Visual Effect 926 927**Cursor movement**: 928``` 929 • ✦ • ← Tiny pixels 930 • ✦ • ← Glowing trail 931✦ • → • ✦ ← Cursor 932 • ✦ • ← Mixed sizes 933 • ✦ • ← Sparkle cloud 934``` 935 936**Click explosion**: 937``` 938 ✦ • ✦ • ✦ 939 ✦ • • ✦ 940✦ • ! • ✦ 941 ✦ • • ✦ 942 ✦ • ✦ • ✦ 943 94465+ particles total! 945``` 946 947--- 948 949### Sparkle Details 950 951**Trail Pixels** (3-6 per movement): 952- Size: 1-2px 953- Spawn rate: Every 40ms 954- Spread: 30px radius 955- Duration: 0.6-0.8s 956- 50% twinkle, 50% float 957 958**Explosion Pixels** (40 total): 959- Size: 1-3px 960- Spread: 30-110px radius 961- Duration: 0.4-0.8s 962- All directions 963- Intense glow 964 965**Main Particles** (25 total): 966- Size: 4-10px 967- Spread: 50-150px 968- Full color palette 969- Original firework effect 970 971--- 972 973### Color Distribution 974 975**Pixel sparkles favor white**: 976- 40% pure white (#fff) - brightest! 977- 60% pink shades - variety 978 979**Creates brilliant sparkle effect!** 980 981--- 982 983### Performance 984 985**Still optimized**: 986- Trail: 30ms throttle 987- Pixels: 40ms throttle 988- Auto-cleanup 989- Hardware accelerated 990- Smooth 60fps 991 992**Lots of sparkles, zero lag!** 993 994--- 995 996### Full-Screen Magic 997 998**Pink theme calendar detected**: 999```javascript 1000if (pink calendar exists) { 1001 Enable effects for ENTIRE SCREEN 1002 Not just calendar area 1003} 1004``` 1005 1006**Works everywhere on page!** ✨ 1007 1008--- 1009 1010## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! 1011 1012### Changed: Glowing Pink Particles Instead of Emoji Sparkles! 1013- **Removed:** Emoji sparkle images (✨) 1014- **Added:** Glowing pink particle trail following cursor 1015- **Added:** FIREWORKS explosion on click! 1016- **Result:** Beautiful glowing effects, not emoji! 1017 1018### Glowing Cursor Trail 1019 1020**Pink glowing dots follow your cursor!** 1021- Small glowing pink orbs (8px) 1022- Radial gradient glow effect 1023- Multiple box-shadows for depth 1024- Fade out smoothly (0.5s) 1025- Throttled to 30ms for smoothness 1026 1027``` 1028 • • 1029 • → • ← Your cursor 1030 • • 1031``` 1032 1033**Not emoji - actual glowing particles!** 1034 1035--- 1036 1037### Click Fireworks! 1038 1039**Click anywhere on the calendar → BOOM!** 1040 1041**20 pink particles explode outward!** 1042- Radial burst pattern (360° coverage) 1043- Random speeds (50-150px travel) 1044- 4 shades of pink: 1045 - Hot pink (#ff1493) 1046 - Pink (#ff69b4) 1047 - Light pink (#ff85c1) 1048 - Very light pink (#ffc0cb) 1049- Random sizes (4-10px) 1050- Individual glowing halos 1051- Smooth explosion animation 1052 1053**Plus a bright flash at click point!** 1054- 30px radius glow 1055- Intense pink flash 1056- Fades quickly (0.3s) 1057 1058--- 1059 1060### Visual Effect 1061 1062**Cursor movement**: 1063``` 1064 • 1065 • • • 1066 • → • ← Glowing trail 1067 • • • 1068 • 1069``` 1070 1071**Click explosion**: 1072``` 1073 • • • 1074 • • 1075 • BOOM! • ← 20 particles 1076 • • 1077 • • • 1078``` 1079 1080**All particles glow with pink halos!** 1081 1082--- 1083 1084### Particle Details 1085 1086**Trail Particles**: 1087- Size: 8x8px 1088- Color: Pink radial gradient 1089- Shadow: 10px + 20px glow layers 1090- Duration: 0.5s fade 1091- Rate: 30ms throttle 1092 1093**Explosion Particles**: 1094- Size: 4-10px (random) 1095- Colors: 4 pink shades (random) 1096- Shadow: 10px + 20px glow (matches color) 1097- Duration: 0.6-1.0s (random) 1098- Pattern: Perfect circle burst 1099 1100**Flash Effect**: 1101- Size: 30x30px 1102- Color: Bright hot pink 1103- Shadow: 30px + 50px mega-glow 1104- Duration: 0.3s instant fade 1105 1106--- 1107 1108### Performance 1109 1110**Optimized for smoothness**: 1111- Trail throttled to 30ms 1112- Auto-cleanup after animations 1113- CSS hardware acceleration 1114- No memory leaks 1115- Smooth 60fps 1116 1117**Won't slow you down!** 1118 1119--- 1120 1121### Comparison 1122 1123**Before (v5.3.1)**: 1124- ✨ Emoji sparkle images 1125- Static unicode characters 1126- Limited visual impact 1127 1128**After (v5.3.2)**: 1129- Glowing pink particles 1130- Radial gradients + shadows 1131- Beautiful firework explosions 1132- Much more impressive! 1133 1134--- 1135 1136### Only Pink Theme 1137 1138**These effects only appear**: 1139- On `.calendar-theme-pink` elements 1140- Other themes unaffected 1141- Pure pink magic! 1142 1143--- 1144 1145## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨ 1146 1147### ✨ Added: MySpace-Style Sparkle Trail! 1148- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!) 1149- **Toned down:** Reduced glow effects for better taste 1150- **Added:** Sparkles appear on cell hover 1151- **Added:** Sparkles on event hover (left and right sides!) 1152- **Added:** Sparkles on today's cell corners 1153- **Added:** Sparkles on navigation buttons 1154- **Added:** Sparkles in calendar header 1155- **Result:** Pure nostalgic MySpace magic! ✨ 1156 1157### MySpace Sparkle Cursor Trail 1158 1159**The classic effect from 2006!** 1160- Sparkles follow your cursor as you move 1161- Random sizes (12-22px) 1162- Random slight offsets for natural feel 1163- Float up and fade out animation 1164- Throttled to 50ms (smooth, not laggy) 1165- Only on pink theme calendars 1166 1167``` 1168 ✨ 1169 ✨ ✨ 1170✨ → ✨ (cursor trail) 1171 ✨ ✨ 1172 ✨ 1173``` 1174 1175**Pure nostalgia!** 1176 1177--- 1178 1179### Sparkles Everywhere 1180 1181**Calendar cells**: 1182- Hover over any day → ✨ floats up 1183- Smooth 1.5s animation 1184- Centered sparkle 1185 1186**Event items**: 1187- Hover → ✨ on left side 1188- Hover → ✨ on right side 1189- Staggered animations (0.4s delay) 1190- Continuous twinkling 1191 1192**Today's cell**: 1193- ✨ in top-right corner (continuous) 1194- ✨ in bottom-left corner (offset timing) 1195- Always sparkling! 1196 1197**Navigation buttons**: 1198- Hover on < or > → ✨ appears top-right 1199- One-time float animation 1200 1201**Calendar header**: 1202- ✨ on left side (continuous) 1203- ✨ on right side (offset 1s) 1204- Always twinkling 1205 1206--- 1207 1208### Toned Down Glows 1209 1210**Before (v5.3.0)**: TOO MUCH GLOW! 1211- 50px shadows 1212- 4-layer effects 1213- Overwhelming 1214 1215**After (v5.3.1)**: Just right! 1216- 8-15px max shadows (subtle) 1217- 2-layer effects 1218- Professional with personality 1219 1220**Glow reductions**: 1221- Today shimmer: 35px → 12px 1222- Today hover: 50px → 15px 1223- Event glow: 18px → 6px 1224- Badge pulse: 25px → 8px 1225- Container glow: 20px → 8px 1226 1227**Much more tasteful!** 1228 1229--- 1230 1231### Sparkle Animations 1232 1233**sparkle-twinkle** (0.8s): 1234``` 1235Opacity: 0 → 1 → 1 → 0 1236Scale: 0 → 1 → 1 → 0 1237Rotation: 0° → 180° → 360° 1238``` 1239 1240**sparkle-float** (1.5s): 1241``` 1242Moves up: 0px → -50px 1243Opacity: 0 → 1 → 1 → 0 1244Scale: 0 → 1 → 0.8 → 0 1245``` 1246 1247**Pure MySpace magic!** ✨ 1248 1249--- 1250 1251### Where Sparkles Appear 1252 1253✅ **Cursor trail** (continuous while moving) 1254✅ **Calendar cells** (on hover) 1255✅ **Event items** (on hover, left + right) 1256✅ **Today's cell** (continuous, corners) 1257✅ **Navigation buttons** (on hover) 1258✅ **Calendar header** (continuous, sides) 1259 1260**Sparkles EVERYWHERE!** ✨✨✨ 1261 1262--- 1263 1264### Performance 1265 1266**Cursor trail**: 1267- Throttled to 50ms 1268- Auto-cleanup after 1s 1269- No memory leaks 1270- Smooth 60fps 1271 1272**CSS animations**: 1273- Hardware accelerated 1274- No JavaScript overhead (except cursor) 1275- Efficient transforms 1276 1277**Won't slow down your browser!** 1278 1279--- 1280 1281### Pure Nostalgia 1282 1283**Remember MySpace profiles?** 1284- Glitter graphics ✨ 1285- Sparkle cursors ✨ 1286- Auto-play music (ok, we didn't add that) 1287- Animated GIF backgrounds 1288- Comic Sans everywhere 1289 1290**We brought back the sparkles!** ✨ 1291 1292--- 1293 1294### Theme Comparison 1295 1296**Other themes**: Professional and clean 1297**Pink theme**: ✨ SPARKLES EVERYWHERE ✨ 1298 1299**Only pink theme gets the magic!** 1300 1301--- 1302 1303## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨ 1304 1305### Added: Pink Theme Gets BLING! 1306- **Added:** Shimmering animation for today's cell 1307- **Added:** Sparkling text effect on today's date 1308- **Added:** Glowing pulse for event bars 1309- **Added:** Gradient shimmer on headers 1310- **Added:** Extra glow on hover effects 1311- **Added:** Pulsing urgent badge for past due items 1312- **Result:** Pink theme is now FABULOUS! ✨ 1313 1314### Shimmer Effects 1315 1316**Today's Cell**: 1317- Continuous shimmer animation (2 second loop) 1318- Multi-layer glow effect 1319- Pink and hot pink overlapping shadows 1320- Pulses from subtle to intense 1321- Extra sparkle on hover 1322 1323**Today's Date Number**: 1324- Sparkle animation (1.5 second loop) 1325- Text shadow glow effect 1326- Slight scale pulse (100% → 105%) 1327- Pink to hot pink shadow transition 1328 1329### Glow Effects 1330 1331**Event Bars**: 1332- Continuous glow pulse (2 second loop) 1333- Uses event's own color 1334- Adds pink accent glow layer 1335- Creates depth and dimension 1336 1337**Event Items**: 1338- Subtle base glow 1339- Enhanced glow on hover 1340- Slight slide animation on hover 1341- Professional yet playful 1342 1343### Gradient Shimmer 1344 1345**Headers**: 1346- Animated gradient background 1347- 3-color pink gradient flow 1348- Smooth 3-second animation 1349- Creates movement and life 1350- Applies to calendar header and event list header 1351 1352### Badge Effects 1353 1354**TODAY Badge**: 1355- Sparkle animation 1356- Synchronized with today's date 1357- Extra prominence 1358 1359**PAST DUE Badge**: 1360- Urgent pulsing effect (1 second loop) 1361- Orange glow intensifies 1362- Draws attention to urgent items 1363- Faster pulse for urgency 1364 1365### Container Bling 1366 1367**Main Container**: 1368- Multi-layer pink glow 1369- Soft outer shadow 1370- Creates floating effect 1371- Subtle but elegant 1372 1373### Animation Details 1374 1375**pink-shimmer** (2s loop): 1376``` 1377Start: Subtle 5px glow 1378Peak: Intense 35px multi-layer glow 1379End: Back to subtle 1380``` 1381 1382**pink-sparkle** (1.5s loop): 1383``` 1384Start: Base glow + scale 1.0 1385Peak: Intense glow + scale 1.05 1386End: Back to base 1387``` 1388 1389**pink-glow-pulse** (2s loop): 1390``` 1391Start: Small glow (3px, 6px) 1392Peak: Large glow (6px, 12px, 18px) 1393End: Back to small 1394``` 1395 1396**pink-gradient-shimmer** (3s loop): 1397``` 1398Gradient flows across element 1399Creates wave effect 1400Smooth continuous motion 1401``` 1402 1403**pink-pulse-urgent** (1s loop - faster!): 1404``` 1405Start: Orange glow 5px 1406Peak: Orange glow 25px (intense) 1407End: Back to 5px 1408``` 1409 1410### Visual Experience 1411 1412**Today's Cell**: 1413``` 1414┌──┬──┬──┬──┬──┬──┬──┐ 1415│ │ │ ✨ │ │ │ │ │ ← Shimmers constantly 1416│ │ │[9]│ │ │ │ │ ← Sparkles 1417│ │ │ ✨ │ │ │ │ │ ← Glows and pulses 1418└──┴──┴──┴──┴──┴──┴──┘ 1419``` 1420 1421**Event Bars**: 1422``` 1423━━━━━━━ ← Glows and pulses 1424━━━━━━━ ← Each bar animated 1425━━━━━━━ ← Creates rhythm 1426``` 1427 1428**Headers**: 1429``` 1430╔═════════════════════╗ 1431║ ~~~~~~~~~~ ║ ← Gradient flows 1432║ February 2026 ║ ← Shimmer effect 1433╚═════════════════════╝ 1434``` 1435 1436### Theme Comparison 1437 1438**Before (v5.2.8)**: 1439- Pink colors 1440- Static elements 1441- Standard shadows 1442 1443**After (v5.3.0)**: 1444- Pink colors ✓ 1445- Animated shimmer ✨ 1446- Sparkling effects 1447- Glowing pulses ✨ 1448- Moving gradients 1449- BLING! 1450 1451### Performance 1452 1453**All animations**: 1454- Hardware accelerated (transform, opacity) 1455- Smooth 60fps 1456- CSS animations (no JavaScript) 1457- Minimal CPU usage 1458- Disabled in reduced-motion preference 1459 1460### Only for Pink Theme 1461 1462**Effects only apply when**: 1463```css 1464.calendar-theme-pink 1465``` 1466 1467**Other themes unaffected**: 1468- Matrix stays Matrix 1469- Professional stays Professional 1470- Purple stays Purple 1471- Wiki stays clean 1472 1473**Pink gets all the bling!** ✨ 1474 1475### Use Cases 1476 1477**Perfect for**: 1478- Celebrating occasions 1479- Fun team calendars 1480- Personal style expression 1481- Standing out 1482- Making calendar time fabulous 1483 1484**Not just pink, but BLING pink!** ✨ 1485 1486## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS 1487 1488### Fixed: Today's Date Box Now Uses Theme Colors 1489- **Fixed:** Today's day number box now uses theme border color 1490- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light) 1491- **Result:** Today box matches the theme perfectly! 1492 1493### The Issue 1494 1495Today's date had a hardcoded green box: 1496 1497**In style.css**: 1498```css 1499.cal-today .day-num { 1500 background: #008800; /* Hardcoded green! */ 1501 color: white; 1502} 1503``` 1504 1505**Didn't adapt to themes at all!** 1506 1507### The Fix 1508 1509**Now uses theme colors**: 1510```php 1511// Today's day number 1512if ($isToday) { 1513 background: $themeStyles['border'], // Theme's accent color! 1514 color: (professional theme) ? white : bg color 1515} 1516``` 1517 1518### Theme Examples 1519 1520**Matrix Theme**: 1521- Box background: `#00cc07` (matrix green) 1522- Text color: `#242424` (dark background) 1523 1524**Purple Theme**: 1525- Box background: `#9b59b6` (purple) 1526- Text color: `#2a2030` (dark background) 1527 1528**Professional Theme**: 1529- Box background: `#4a90e2` (blue) 1530- Text color: `#ffffff` (white text) 1531 1532**Pink Theme**: 1533- Box background: `#ff1493` (hot pink) 1534- Text color: `#1a0d14` (dark background) 1535 1536**Wiki Theme**: 1537- Box background: Template's `__border__` color 1538- Text color: Template's `__background_site__` color 1539 1540### Visual Result 1541 1542**Matrix Theme**: 1543``` 1544┌──┬──┬──┬──┬──┬──┬──┐ 1545│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1546└──┴──┴──┴──┴──┴──┴──┘ 1547 ↑ 1548 Green box (#00cc07) 1549``` 1550 1551**Professional Theme**: 1552``` 1553┌──┬──┬──┬──┬──┬──┬──┐ 1554│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1555└──┴──┴──┴──┴──┴──┴──┘ 1556 ↑ 1557 Blue box (#4a90e2) 1558``` 1559 1560**Wiki Theme**: 1561``` 1562┌──┬──┬──┬──┬──┬──┬──┐ 1563│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1564└──┴──┴──┴──┴──┴──┴──┘ 1565 ↑ 1566 Template border color 1567``` 1568 1569### Implementation 1570 1571**Inline styles added**: 1572- Background uses `$themeStyles['border']` (theme accent) 1573- Text color uses `$themeStyles['bg']` for contrast 1574- Special case: Professional theme uses white text 1575- All with `!important` to override CSS 1576 1577**CSS cleaned up**: 1578- Removed hardcoded `#008800` background 1579- Removed hardcoded `white` color 1580- Kept structural styles (border-radius, font-weight) 1581 1582### Benefits 1583 1584**Theme Consistency**: 1585- Today box matches theme accent color 1586- Proper contrast with background 1587- Professional appearance 1588 1589**Automatic Adaptation**: 1590- Works with all themes 1591- Works with custom wiki template colors 1592- No manual adjustment needed 1593 1594**Visual Harmony**: 1595- Border color used throughout theme 1596- Today box reinforces theme identity 1597- Consistent design language 1598 1599## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH 1600 1601### Fixed: Table Grid Background Now Matches Cells 1602- **Found:** `grid_bg` was using `__background_alt__` (different from cells!) 1603- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells) 1604- **Result:** Table background no longer shows through cells! 1605 1606### The Layer Problem 1607 1608The table itself had a DIFFERENT background color than its cells! 1609 1610**Before (v5.2.6)**: 1611```php 1612'grid_bg' => __background_alt__, // Table background (#e8e8e8) 1613'cell_bg' => __background_site__, // Cell background (#f5f5f5) 1614``` 1615 1616**The table background was showing THROUGH the cells!** 1617 1618### Why This Happened 1619 1620**Visual layers**: 1621``` 1622Table Element 1623├─ background: __background_alt__ (#e8e8e8) ← Different! 1624└─ Cells 1625 └─ background: __background_site__ (#f5f5f5) ← Different! 1626 1627The table background shows through any gaps! 1628``` 1629 1630### The Fix 1631 1632**After (v5.2.7)**: 1633```php 1634'grid_bg' => __background_site__, // Table background (#f5f5f5) ✓ 1635'cell_bg' => __background_site__, // Cell background (#f5f5f5) ✓ 1636``` 1637 1638**NOW THEY MATCH!** 1639 1640### Where grid_bg Is Used 1641 1642The table element itself: 1643```html 1644<table style="background: __background_alt__"> ← Was showing through! 1645 <tbody> 1646 <tr> 1647 <td style="background: __background_site__">1</td> 1648 </tr> 1649 </tbody> 1650</table> 1651``` 1652 1653Even with cell inline styles, the TABLE background shows through! 1654 1655### All Background Sources Now Unified 1656 1657**Everything now uses __background_site__**: 1658- `bg` → __background_site__ ✓ 1659- `header_bg` → __background_site__ ✓ 1660- `grid_bg` → __background_site__ ✓ (JUST FIXED!) 1661- `cell_bg` → __background_site__ ✓ 1662 1663**Perfect consistency!** 1664 1665### Why It Was Different 1666 1667**Originally the grid was meant to show borders**: 1668- `grid_bg` was `__background_alt__` (slightly different) 1669- Created visual separation between cells 1670- But with transparent/thin cells, it showed through! 1671 1672**Now unified for consistency!** 1673 1674### Visual Result 1675 1676**Before (layers visible)**: 1677``` 1678┌─────────────────┐ 1679│ Grid (#e8e8e8) │ ← Showing through! 1680│ ┌──┬──┬──┐ │ 1681│ │ │ │ │ │ ← Cells (#f5f5f5) 1682│ └──┴──┴──┘ │ 1683└─────────────────┘ 1684``` 1685 1686**After (unified)**: 1687``` 1688┌─────────────────┐ 1689│ Grid (#f5f5f5) │ ← Same color! 1690│ ┌──┬──┬──┐ │ 1691│ │ │ │ │ │ ← Cells (#f5f5f5) 1692│ └──┴──┴──┘ │ 1693└─────────────────┘ 1694Perfect match! 1695``` 1696 1697### Complete Background Mapping 1698 1699**All using __background_site__ now**: 1700- Main container background 1701- Left panel background 1702- Right panel background 1703- Eventlist background 1704- Calendar grid background ← JUST FIXED 1705- Calendar cell backgrounds 1706- Event item backgrounds 1707- Clock header background 1708- Search input background 1709- Past events toggle 1710 1711**EVERYTHING UNIFIED!** 1712 1713## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS 1714 1715### Fixed: Removed Container Backgrounds Showing Through 1716- **Found:** `.calendar-compact-container` had `background: #ffffff;` 1717- **Found:** `.calendar-compact-left` had `background: #fafafa;` 1718- **Found:** `.calendar-compact-right` had `background: #ffffff;` 1719- **Found:** `.event-search-input-inline` had `background: white;` 1720- **Found:** `.past-events-toggle` had `background: #f5f5f5;` 1721- **Result:** Container backgrounds no longer show through cells! 1722 1723### The Container Problem 1724 1725The parent containers had hardcoded backgrounds that were showing through! 1726 1727**Container backgrounds (lines 4-91)**: 1728```css 1729.calendar-compact-container { 1730 background: #ffffff; /* ← Main container! */ 1731} 1732 1733.calendar-compact-left { 1734 background: #fafafa; /* ← Left panel (calendar side)! */ 1735} 1736 1737.calendar-compact-right { 1738 background: #ffffff; /* ← Right panel (events side)! */ 1739} 1740``` 1741 1742**These were showing through the cells and events!** 1743 1744### Why Containers Matter 1745 1746Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through: 1747 1748``` 1749Container (#fafafa) ← Showing through! 1750 └─ Table Cell (#f5f5f5) ← Transparent areas 1751 └─ Content 1752``` 1753 1754### All Backgrounds Removed 1755 1756**v5.2.6 removes**: 1757- `.calendar-compact-container` background 1758- `.calendar-compact-left` background 1759- `.calendar-compact-right` background 1760- `.event-search-input-inline` background 1761- `.past-events-toggle` background & hover 1762 1763**v5.2.5 removed**: 1764- `.calendar-compact-grid tbody td` background 1765- `.calendar-compact-grid thead th` background 1766 1767**v5.2.4 removed**: 1768- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds 1769 1770**v5.2.3 removed**: 1771- `.event-compact-item` background 1772 1773**ALL container and element backgrounds eliminated!** 1774 1775### What Should Work Now 1776 1777**Calendar cells**: No container background showing through ✓ 1778**Event items**: No container background showing through ✓ 1779**Search bar**: Uses template color ✓ 1780**Past events toggle**: Uses template color ✓ 1781 1782### Complete List of Fixes 1783 1784**Containers**: 1785- Main container ✓ 1786- Left panel ✓ 1787- Right panel ✓ 1788 1789**Elements**: 1790- Table cells ✓ 1791- Event items ✓ 1792- Search input ✓ 1793- Past events toggle ✓ 1794 1795**EVERYTHING removed!** 1796 1797### Critical: Clear Caches 1798 1799**Must clear caches or won't work**: 18001. Hard refresh: Ctrl+Shift+R (5 times!) 18012. Clear DokuWiki cache 18023. Close browser completely 18034. Reopen and test 1804 1805**CSS caching is EXTREMELY persistent!** 1806 1807## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS 1808 1809### Fixed: Removed Hardcoded Backgrounds from Table Cells 1810- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`! 1811- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`! 1812- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`! 1813- **Fixed:** Removed ALL hardcoded backgrounds from table CSS 1814- **Result:** Calendar table cells finally use template colors! 1815 1816### The REAL Culprits 1817 1818The generic table CSS was overriding everything! 1819 1820**In style.css (lines 307-356)**: 1821```css 1822.calendar-compact-grid thead th { 1823 background: #f8f8f8; /* ← Header cells hardcoded! */ 1824} 1825 1826.calendar-compact-grid tbody td { 1827 background: #ffffff; /* ← ALL table cells hardcoded! */ 1828} 1829 1830.calendar-compact-grid tbody td:hover { 1831 background: #f0f7ff; /* ← Hover state hardcoded! */ 1832} 1833``` 1834 1835**These apply to ALL `<td>` and `<th>` elements in the calendar table!** 1836 1837### Why This Was the Last One 1838 1839**CSS Specificity Order**: 18401. `.calendar-compact-grid tbody td` (generic - applies to ALL cells) 18412. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells) 18423. Inline styles (should win but didn't) 1843 1844**We removed the specific ones (v5.2.4), but the generic one was still there!** 1845 1846### What We've Removed 1847 1848**v5.2.3**: 1849- `.event-compact-item` background 1850- `.event-compact-item:hover` background 1851 1852**v5.2.4**: 1853- `.cal-empty` background & hover 1854- `.cal-today` background & hover 1855- `.cal-has-events` background & hover 1856 1857**v5.2.5 (FINAL)**: 1858- `.calendar-compact-grid tbody td` background ✓ 1859- `.calendar-compact-grid tbody td:hover` background ✓ 1860- `.calendar-compact-grid thead th` background ✓ 1861 1862**All CSS background overrides ELIMINATED!** 1863 1864### Why It Took 5 Versions 1865 1866**CSS had layers of hardcoded backgrounds**: 1867 1868``` 1869Layer 1: Table cells (.calendar-compact-grid tbody td) 1870 ↓ Overrode inline styles 1871Layer 2: Cell states (.cal-today, .cal-empty, etc.) 1872 ↓ Overrode table cells 1873Layer 3: Event items (.event-compact-item) 1874 ↓ Overrode inline styles 1875 1876ALL had to be removed! 1877``` 1878 1879**We kept finding more specific CSS, but the base table CSS was there all along!** 1880 1881### Visual Result 1882 1883**NOW everything matches**: 1884``` 1885Calendar Table: 1886┌──┬──┬──┬──┬──┬──┬──┐ 1887│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__ 1888├──┼──┼──┼──┼──┼──┼──┤ 1889│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__ 1890├──┼──┼──┼──┼──┼──┼──┤ 1891│ 8│ 9│10│11│12│13│14│ ← All: __background_site__ 1892└──┴──┴──┴──┴──┴──┴──┘ 1893 1894Sidebar Events: 1895┌────────────────────────┐ 1896│ Event │ ← __background_site__ 1897│ Event │ ← __background_site__ 1898└────────────────────────┘ 1899 1900FINALLY ALL MATCHING! ✓ 1901``` 1902 1903### Complete List of Removed CSS 1904 1905**ALL hardcoded backgrounds removed**: 1906- `.event-compact-item` background 1907- `.event-compact-item:hover` background 1908- `.cal-empty` background & hover 1909- `.cal-today` background & hover 1910- `.cal-has-events` background & hover 1911- `.calendar-compact-grid tbody td` background ← NEW 1912- `.calendar-compact-grid tbody td:hover` background ← NEW 1913- `.calendar-compact-grid thead th` background ← NEW 1914 1915**Every single CSS background override is GONE!** 1916 1917### Testing Steps 1918 1919**After installing v5.2.5**: 1920 19211. **Clear browser cache**: Ctrl+Shift+R (3 times!) 19222. **Clear DokuWiki cache**: Click the button 19233. **Close browser completely**: Restart it 19244. **Visit page**: Should finally see matching backgrounds 1925 1926**CSS is EXTREMELY sticky - may need to clear multiple times!** 1927 1928### This Should Be It 1929 1930**No more CSS overrides exist** (we've checked the entire file): 1931- Table cells ✓ Fixed 1932- Cell states ✓ Fixed 1933- Event items ✓ Fixed 1934- Headers ✓ Fixed 1935- Hover states ✓ Fixed 1936 1937**All backgrounds now come from inline styles using template colors!** 1938 1939## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS 1940 1941### Fixed: Removed Hardcoded Backgrounds from Calendar Cells 1942- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`! 1943- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS 1944- **Result:** Calendar cells now use template colors! 1945 1946### The Second Culprit 1947 1948MORE hardcoded backgrounds in the CSS file! 1949 1950**In style.css (lines 359-382)**: 1951```css 1952.cal-empty { 1953 background: #fafafa !important; /* ← Overriding inline styles! */ 1954} 1955 1956.cal-today { 1957 background: #e8f5e9 !important; /* ← Overriding today cell! */ 1958} 1959 1960.cal-today:hover { 1961 background: #c8e6c9 !important; /* ← Overriding hover! */ 1962} 1963 1964.cal-has-events { 1965 background: #fffbf0; /* ← Overriding event cells! */ 1966} 1967 1968.cal-has-events:hover { 1969 background: #fff4d9; /* ← Overriding hover! */ 1970} 1971``` 1972 1973**These were ALL overriding the inline styles!** 1974 1975### The Fix 1976 1977**Removed all hardcoded backgrounds**: 1978```css 1979.cal-empty { 1980 /* background removed - inline style handles this */ 1981 cursor: default !important; 1982} 1983 1984.cal-today { 1985 /* background removed - inline style handles this */ 1986} 1987 1988.cal-has-events { 1989 /* background removed - inline style handles this */ 1990} 1991 1992/* Hover states also removed */ 1993``` 1994 1995### What Was Overridden 1996 1997**v5.2.3 fixed**: 1998- Event items in sidebar ✓ 1999 2000**v5.2.4 fixes**: 2001- Calendar day cells ✓ 2002- Today cell ✓ 2003- Empty cells ✓ 2004- Cells with events ✓ 2005- All hover states ✓ 2006 2007### Why This Kept Happening 2008 2009**CSS had hardcoded backgrounds everywhere**: 20101. Event items: `#ffffff` (fixed in v5.2.3) 20112. Calendar cells: Multiple colors (fixed in v5.2.4) 20123. **All with `!important` flags!** 2013 2014**The inline styles couldn't override them!** 2015 2016### Visual Result 2017 2018**Now ALL backgrounds match**: 2019``` 2020Calendar Grid: 2021┌──┬──┬──┬──┬──┬──┬──┐ 2022│ │ │ │ │ │ │ │ ← All use __background_site__ 2023├──┼──┼──┼──┼──┼──┼──┤ 2024│ │██│ │ │ │ │ │ ← Today uses __background_neu__ 2025├──┼──┼──┼──┼──┼──┼──┤ 2026│ │ │ │ │ │ │ │ ← All match template 2027└──┴──┴──┴──┴──┴──┴──┘ 2028 2029Sidebar Events: 2030┌────────────────────────┐ 2031│ Event │ ← Uses __background_site__ 2032│ Event │ ← Uses __background_site__ 2033└────────────────────────┘ 2034 2035Perfect consistency! 2036``` 2037 2038### CSS Removed 2039 2040**Calendar cells**: 2041- `.cal-empty` background 2042- `.cal-empty:hover` background 2043- `.cal-today` background 2044- `.cal-today:hover` background 2045- `.cal-has-events` background 2046- `.cal-has-events:hover` background 2047 2048**All gone!** ✓ 2049 2050### Important: Clear Caches Again! 2051 2052After installing v5.2.4: 2053 20541. **Hard refresh browser**: Ctrl+Shift+R (twice!) 20552. **Clear DokuWiki cache**: Admin → Clear Cache 20563. **May need to restart browser**: To clear CSS cache 2057 2058**Old CSS is VERY sticky!** 2059 2060### Why It Took So Long 2061 2062**Multiple CSS overrides**: 2063- Event items (v5.2.3) ✓ Fixed 2064- Calendar cells (v5.2.4) ✓ Fixed 2065- Each with different classes 2066- Each with `!important` 2067- Hidden throughout CSS file 2068 2069**Found them all now!** 2070 2071## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS 2072 2073### Fixed: Removed Hardcoded Backgrounds from CSS 2074- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles! 2075- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS 2076- **Result:** Event backgrounds now properly use template colors! 2077 2078### The Root Cause 2079 2080The CSS file was overriding the inline styles with hardcoded white backgrounds! 2081 2082**In style.css (lines 599-616)**: 2083```css 2084.event-compact-item { 2085 background: #ffffff; /* ← This was overriding inline styles! */ 2086} 2087 2088.event-compact-item:hover { 2089 background: #f8f9fa; /* ← And this on hover! */ 2090} 2091``` 2092 2093**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade! 2094 2095### The Fix 2096 2097**Removed hardcoded backgrounds from CSS**: 2098```css 2099.event-compact-item { 2100 /* background removed - set via inline style with template colors */ 2101 display: flex; 2102 /* ... other styles ... */ 2103} 2104 2105.event-compact-item:hover { 2106 box-shadow: 0 1px 3px rgba(0,0,0,0.08); 2107 /* background removed - inline style handles this */ 2108} 2109``` 2110 2111### Why This Was So Difficult to Find 2112 2113**CSS Specificity & Cascade**: 21141. Inline styles with `!important` should win 21152. But CSS that comes after can still apply 21163. The hardcoded `background: #ffffff` was silently overriding 21174. All the PHP code was correct - it was the CSS! 2118 2119**What We Were Doing**: 2120- ✓ Reading template colors correctly 2121- ✓ Setting `cell_bg` to `__background_site__` correctly 2122- ✓ Applying inline styles with `!important` correctly 2123- ✗ CSS file was overriding everything! 2124 2125### What Was Affected 2126 2127**Event items in**: 2128- Main calendar sidebar 2129- Standalone event list 2130- Sidebar widget 2131- All event displays 2132 2133**All had white backgrounds hardcoded in CSS!** 2134 2135### Now Working 2136 2137**Events use template colors**: 2138```html 2139<div class="event-compact-item" 2140 style="background: #f5f5f5 !important; ..."> 2141 ← Now this inline style actually works! 2142</div> 2143``` 2144 2145**No CSS override** ✓ 2146 2147### Testing 2148 2149To verify this works: 21501. Clear browser cache (important!) 21512. Clear DokuWiki cache 21523. Reload page 21534. Events should now match eventlist background 2154 2155**Browser caching can make old CSS persist!** 2156 2157### Visual Result 2158 2159**All backgrounds now matching**: 2160``` 2161┌────────────────────────────┐ 2162│ Eventlist (#f5f5f5) │ ← Template color 2163├────────────────────────────┤ 2164│ Event (#f5f5f5) │ ← Template color (was #ffffff) 2165├────────────────────────────┤ 2166│ Event (#f5f5f5) │ ← Template color (was #ffffff) 2167└────────────────────────────┘ 2168 2169Perfect match! 2170``` 2171 2172### Why Everything Else Worked 2173 2174**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds: 2175- They only had inline styles ✓ 2176- Inline styles worked correctly ✓ 2177- Only event items had the CSS override ✗ 2178 2179### Important Notes 2180 2181**Clear caches**: 2182- Browser cache (Ctrl+Shift+R or Cmd+Shift+R) 2183- DokuWiki cache (Admin → Clear Cache) 2184- Old CSS may be cached! 2185 2186**This was the culprit all along!** 2187 2188## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND 2189 2190### Fixed: Clock Area Now Matches Event Cells 2191- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`) 2192- **Result:** Clock/Today header matches event cell backgrounds! 2193 2194### The Issue 2195 2196The clock area (Today header) was using a different background: 2197 2198**Before (v5.2.1)**: 2199```php 2200'header_bg' => __background_alt__, // Different color (gray #e8e8e8) 2201'cell_bg' => __background_site__, // Event cells (#f5f5f5) 2202``` 2203 2204**After (v5.2.2)**: 2205```php 2206'header_bg' => __background_site__, // Same as cells (#f5f5f5) ✓ 2207'cell_bg' => __background_site__, // Event cells (#f5f5f5) ✓ 2208``` 2209 2210### What's the Clock Area? 2211 2212The clock/Today header in the sidebar: 2213``` 2214┌────────────────────────────┐ 2215│ 3:45:23 PM │ ← Clock area (header_bg) 2216│ ️ --° | Sun, Feb 9, 2026 │ 2217└────────────────────────────┘ 2218``` 2219 2220### All Backgrounds Now Unified 2221 2222**Everything now uses __background_site__**: 2223- Eventlist background ✓ 2224- Calendar cells ✓ 2225- Event items ✓ 2226- Clock/Today header ✓ 2227- Sidebar widget ✓ 2228- All backgrounds match! ✓ 2229 2230### Visual Result 2231 2232**Complete consistency**: 2233``` 2234┌────────────────────────────┐ 2235│ 3:45:23 PM │ ← Same background 2236│ ️ --° | Sun, Feb 9, 2026 │ 2237├────────────────────────────┤ 2238│ Meeting at 2pm │ ← Same background 2239│ Description... │ 2240├────────────────────────────┤ 2241│ Another event │ ← Same background 2242│ More details... │ 2243└────────────────────────────┘ 2244 2245All using __background_site__ (#f5f5f5) 2246``` 2247 2248**Perfect visual harmony!** 2249 2250## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND 2251 2252### Fixed: Calendar Cells Now Match Eventlist Background 2253- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`) 2254- **Result:** Calendar cells now match the eventlist background perfectly! 2255 2256### The Real Issue 2257 2258The eventlist was showing the CORRECT background color all along! 2259 2260**Eventlist was using**: 2261- `bg` → `__background_site__` ✓ (This was correct!) 2262 2263**Calendar cells were using**: 2264- `cell_bg` → `__background__` ✗ (This was wrong!) 2265 2266**They didn't match!** 2267 2268### The Correct Fix 2269 2270**Now everything uses __background_site__**: 2271```php 2272'bg' => __background_site__, // Eventlist (was already correct) 2273'cell_bg' => __background_site__, // Cells (now fixed to match) 2274``` 2275 2276### Why __background_site__? 2277 2278The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background: 2279 2280``` 2281Page Layout: 2282┌────────────────────────────────────┐ 2283│ __background_site__ (page bg) │ ← This is where calendar lives 2284│ │ 2285│ ┌──────────────────────────────┐ │ 2286│ │ __background__ (content bg) │ │ ← Wiki article content 2287│ │ │ │ 2288│ └──────────────────────────────┘ │ 2289│ │ 2290└────────────────────────────────────┘ 2291``` 2292 2293**Calendar should match the page background, not the content background!** 2294 2295### Template Example 2296 2297Typical DokuWiki template: 2298```ini 2299__background_site__ = "#f5f5f5" (Light gray - page background) 2300__background__ = "#ffffff" (White - content area) 2301``` 2302 2303**Before (v5.2.0)**: 2304- Eventlist: `#f5f5f5` (light gray) ✓ Correct 2305- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match 2306 2307**After (v5.2.1)**: 2308- Eventlist: `#f5f5f5` (light gray) ✓ Correct 2309- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED! 2310 2311### All Backgrounds Now Unified 2312 2313**Everything now uses __background_site__**: 2314- Eventlist sidebar background ✓ 2315- Main calendar background ✓ 2316- Calendar day cells ✓ 2317- Sidebar widget ✓ 2318- Event items ✓ 2319- Input fields ✓ 2320- Buttons ✓ 2321 2322**All perfectly matched to the page background!** 2323 2324### Why Version 5.2.0 Was Wrong 2325 2326I 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. 2327 2328**The eventlist knew what it was doing all along!** The cells just needed to catch up. 2329 2330## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS 2331**Note**: This version went the wrong direction. See v5.2.1 for the correct fix. 2332 2333### Fixed: All Backgrounds Now Use __background__ 2334- **Fixed:** `bg` now uses `__background__` instead of `__background_site__` 2335- **Fixed:** Eventlist, calendar cells, and sidebar all match now 2336- **Result:** Completely unified background throughout! 2337 2338### The Issue 2339 2340Different parts of the calendar were using different background sources: 2341 2342**Before (v5.1.9)**: 2343```php 2344'bg' => __background_site__ // Eventlist background (outer page) 2345'cell_bg' => __background__ // Cell backgrounds (content area) 2346``` 2347 2348**These are different colors!** 2349- `__background_site__` = Outer page wrapper (often gray) 2350- `__background__` = Main content area (often white) 2351 2352### The Fix 2353 2354**After (v5.2.0)**: 2355```php 2356'bg' => __background__ // Eventlist background ✓ 2357'cell_bg' => __background__ // Cell backgrounds ✓ 2358``` 2359 2360**Both use the same source!** 2361 2362### What Uses 'bg' 2363 2364The `bg` color is used for: 2365- Eventlist sidebar background 2366- Main calendar container 2367- Sidebar widget background 2368- Form backgrounds 2369- Event dialogs 2370 2371### What Uses 'cell_bg' 2372 2373The `cell_bg` color is used for: 2374- Calendar day cells 2375- Event item backgrounds 2376- Input field backgrounds 2377- Button backgrounds 2378 2379### Why This Matters 2380 2381**Template color hierarchy**: 2382``` 2383__background_site__ → Outer page/body (e.g., #f5f5f5 light gray) 2384__background__ → Main content area (e.g., #ffffff white) 2385__background_alt__ → Sections/headers 2386__background_neu__ → Highlights 2387``` 2388 2389**We want all calendar backgrounds to match the main content area!** 2390 2391### Visual Comparison 2392 2393**Before (v5.1.9)**: Mismatched backgrounds 2394``` 2395┌────────────────────────────────┐ 2396│ Eventlist (gray #f5f5f5) │ ← __background_site__ 2397└────────────────────────────────┘ 2398 2399┌────────────────────────────────┐ 2400│ Calendar │ 2401│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 2402│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 2403│ └──┴──┴──┴──┴──┴──┴──┘ │ 2404└────────────────────────────────┘ 2405Different colors - looks inconsistent 2406``` 2407 2408**After (v5.2.0)**: Unified backgrounds 2409``` 2410┌────────────────────────────────┐ 2411│ Eventlist (white #fff) │ ← __background__ 2412└────────────────────────────────┘ 2413 2414┌────────────────────────────────┐ 2415│ Calendar │ 2416│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 2417│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 2418│ └──┴──┴──┴──┴──┴──┴──┘ │ 2419└────────────────────────────────┘ 2420Same color - perfectly consistent! 2421``` 2422 2423### Template Examples 2424 2425**Light Template**: 2426```ini 2427__background_site__ = "#f5f5f5" (light gray) 2428__background__ = "#ffffff" (white) 2429``` 2430 2431**Before**: Eventlist gray, cells white 2432**After**: Eventlist white, cells white ✓ 2433 2434**Dark Template**: 2435```ini 2436__background_site__ = "#1a1a1a" (very dark) 2437__background__ = "#2d2d2d" (dark) 2438``` 2439 2440**Before**: Eventlist very dark, cells dark 2441**After**: Eventlist dark, cells dark ✓ 2442 2443### Benefits 2444 2445**Visual Consistency**: 2446- All backgrounds match 2447- Clean, unified appearance 2448- Professional look 2449 2450**Correct Template Integration**: 2451- Uses content area color (not page wrapper) 2452- Matches wiki content area 2453- Proper color hierarchy 2454 2455**Works Everywhere**: 2456- Light templates ✓ 2457- Dark templates ✓ 2458- Custom templates ✓ 2459 2460### All Backgrounds Unified 2461 2462**Now using __background__**: 2463- Eventlist background ✓ 2464- Calendar cells ✓ 2465- Sidebar widget ✓ 2466- Event items ✓ 2467- Input fields ✓ 2468- Buttons ✓ 2469- Dialogs ✓ 2470 2471**Perfect harmony throughout!** 2472 2473## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS 2474 2475### Fixed: Wiki Theme Event Backgrounds Not Showing 2476- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!) 2477- **Fixed:** Replaced CSS variables with actual hex colors 2478- **Result:** Event backgrounds now show correctly with template colors! 2479 2480### The Problem 2481 2482CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes! 2483 2484**Before (broken)**: 2485```php 2486'cell_bg' => 'var(--__background__, #fff)', // Doesn't work in inline styles! 2487``` 2488 2489**After (fixed)**: 2490```php 2491'cell_bg' => '#fff', // Actual hex color works! 2492``` 2493 2494### What Was Affected 2495 2496**When style.ini read successfully**: 2497- ✅ Worked fine (uses actual hex colors from file) 2498 2499**When style.ini fallback used**: 2500- ❌ Events had no background 2501- ❌ CSS variables don't work in inline styles 2502- ❌ Looked broken 2503 2504### The Fix 2505 2506**Wiki theme fallback now uses real colors**: 2507```php 2508'wiki' => [ 2509 'bg' => '#f5f5f5', // Real hex (was: var(--__background_site__)) 2510 'border' => '#ccc', // Real hex (was: var(--__border__)) 2511 'cell_bg' => '#fff', // Real hex (was: var(--__background__)) 2512 'cell_today_bg' => '#eee', // Real hex (was: var(--__background_neu__)) 2513 'text_primary' => '#333', // Real hex (was: var(--__text__)) 2514 'text_bright' => '#2b73b7', // Real hex (was: var(--__link__)) 2515 'text_dim' => '#666', // Real hex (was: var(--__text_neu__)) 2516 'grid_bg' => '#e8e8e8', // Real hex (was: var(--__background_alt__)) 2517 // ... all colors now use real hex values 2518] 2519``` 2520 2521### Why CSS Variables Don't Work 2522 2523**CSS variables work**: 2524```css 2525.some-class { 2526 background: var(--__background__, #fff); /* ✓ Works in CSS */ 2527} 2528``` 2529 2530**CSS variables DON'T work**: 2531```html 2532<div style="background: var(--__background__, #fff)"> <!-- ✗ Doesn't work --> 2533``` 2534 2535### How It Works Now 2536 2537**Priority system**: 25381. **Try reading style.ini** → Use actual template hex colors ✓ 25392. **If file not found** → Use fallback hex colors ✓ 25403. **Never use CSS variables in inline styles** ✓ 2541 2542**Both paths now work correctly!** 2543 2544### Visual Result 2545 2546**Events now have proper backgrounds**: 2547``` 2548┌──────────────────────────┐ 2549│ Meeting at 2pm │ ← White background (#fff) 2550│ Description here... │ 2551│ [✏️ Edit] [️ Delete] │ 2552└──────────────────────────┘ 2553 2554Not: 2555┌──────────────────────────┐ 2556│ Meeting at 2pm │ ← No background (broken) 2557│ Description here... │ 2558└──────────────────────────┘ 2559``` 2560 2561### Affected Areas 2562 2563**All event displays**: 2564- Main calendar events ✓ 2565- Sidebar widget events ✓ 2566- Event list items ✓ 2567- Event backgrounds ✓ 2568- Button backgrounds ✓ 2569- Input field backgrounds ✓ 2570 2571**Everything uses real colors now!** 2572 2573## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT 2574 2575### Reorganized: Better Update Tab Layout 2576- **Moved:** Current Version section to the top 2577- **Combined:** Upload and Important Notes side-by-side 2578- **Improved:** Space-efficient two-column layout 2579- **Result:** More information visible at once! 2580 2581### New Layout Order 2582 2583**Version 5.1.8**: 2584``` 25851. Current Version (at top - see what you have) 25862. Upload + Important Notes (side-by-side) 25873. Recent Changes (changelog) 25884. Backups 2589``` 2590 2591### Side-by-Side Design 2592 2593**Upload form (left 60%) + Important Notes (right 40%)**: 2594``` 2595┌──────────────────────────────────────────┐ 2596│ Current Version │ 2597│ Version: 5.1.8 │ 2598│ ✅ Permissions: OK │ 2599└──────────────────────────────────────────┘ 2600 2601┌─────────────────────┬────────────────────┐ 2602│ Upload New │ ⚠️ Important Notes │ 2603│ [Choose File] │ • Replaces files │ 2604│ ☑ Backup first │ • Config preserved │ 2605│ [Upload] [Clear] │ • Events safe │ 2606└─────────────────────┴────────────────────┘ 2607``` 2608 2609### Benefits 2610 2611**Current Version First**: 2612- See what you have immediately 2613- Check permissions at a glance 2614- Know if ready to update 2615 2616**Side-by-Side Layout**: 2617- Upload form and warnings together 2618- Read notes while choosing file 2619- More efficient use of space 2620- Less scrolling needed 2621 2622**Better Information Flow**: 26231. See current version ✓ 26242. Upload new version with notes visible ✓ 26253. Review recent changes ✓ 26264. Manage backups ✓ 2627 2628### Visual Comparison 2629 2630**Before (v5.1.7)**: 2631``` 2632Important Notes (full width) 2633↓ 2634Upload Form (full width) 2635↓ 2636Current Version 2637↓ 2638Recent Changes 2639↓ 2640Backups 2641``` 2642 2643**After (v5.1.8)**: 2644``` 2645Current Version (full width) 2646↓ 2647Upload (60%) | Notes (40%) 2648↓ 2649Recent Changes 2650↓ 2651Backups 2652``` 2653 2654**More compact, better organized!** 2655 2656### Responsive Design 2657 2658**Wide screens**: 2659- Upload and notes side-by-side 2660- Full 1200px width utilized 2661- Efficient space usage 2662 2663**Narrow screens**: 2664- Sections stack gracefully 2665- Flex layout adapts 2666- Still fully functional 2667 2668### Layout Details 2669 2670**Current Version Section**: 2671- Full width (1200px max) 2672- Shows version, author, description 2673- Permission status with icons 2674- Helpful fix commands if needed 2675 2676**Upload/Notes Section**: 2677- Flexbox layout with gap 2678- Upload: `flex:1` (grows) 2679- Notes: `flex:0 0 350px` (fixed 350px) 2680- Both have proper min-width 2681 2682**Recent Changes Section**: 2683- Full width (1200px max) 2684- Compact scrollable view 2685- Color-coded change types 2686- Last 10 versions shown 2687 2688**Backups Section**: 2689- Full width (1200px max) 2690- Manual backup button 2691- Scrollable file list 2692- All actions accessible 2693 2694### Improved Max Widths 2695 2696All sections now use `max-width:1200px` (previously 900px): 2697- Better use of wide screens 2698- Still responsive on narrow screens 2699- Consistent throughout tab 2700 2701## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR 2702 2703### Fixed: Extra Closing Brace 2704- **Fixed:** ParseError on line 1936 (extra closing brace) 2705- **Result:** Manual backup feature now works correctly! 2706 2707### What Was Wrong 2708 2709Extra `}` after the backup section: 2710 2711**Before (broken)**: 2712```php 2713echo '</div>'; 2714} // ← Extra closing brace! 2715 2716echo '<script> 2717``` 2718 2719**After (fixed)**: 2720```php 2721echo '</div>'; 2722 2723echo '<script> 2724``` 2725 2726**Manual backup feature now fully functional!** ✅ 2727 2728## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND 2729 2730### Added: Create Backup Manually Anytime 2731- **Added:** "Create Backup Now" button in Backups section 2732- **Added:** Manual backup action handler with full verification 2733- **Added:** Backups section always visible (even with no backups) 2734- **Added:** Success message showing file size and file count 2735- **Result:** Create backups anytime without needing to upload! 2736 2737### Manual Backup Button 2738 2739**New Layout**: 2740``` 2741┌─────────────────────────────────────┐ 2742│ Backups [ Create Backup Now] │ 2743├─────────────────────────────────────┤ 2744│ Backup File Size │ 2745│ calendar.backup.v5.1.6... 243 KB │ 2746│ [ Download] [✏️ Rename] [️ Delete] │ 2747└─────────────────────────────────────┘ 2748``` 2749 2750**Always visible - even with no backups**: 2751``` 2752┌─────────────────────────────────────┐ 2753│ Backups [ Create Backup Now] │ 2754├─────────────────────────────────────┤ 2755│ No backups yet. Click "Create │ 2756│ Backup Now" to create your first │ 2757│ backup. │ 2758└─────────────────────────────────────┘ 2759``` 2760 2761### How It Works 2762 2763**Click the button**: 27641. Confirm: "Create a backup of the current plugin version?" 27652. System creates backup ZIP 27663. Verifies: File count (30+ files) 27674. Verifies: File size (200KB+) 27685. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)" 2769 2770**Backup naming**: 2771``` 2772calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2773 ^^^^^^ 2774 "manual" tag identifies manual backups 2775``` 2776 2777### Use Cases 2778 2779**Before updates**: 2780- Create safety backup before uploading new version 2781- Have multiple restore points 2782- Test new features with fallback 2783 2784**Regular backups**: 2785- Weekly/monthly backup schedule 2786- Before making configuration changes 2787- After important customizations 2788 2789**Development**: 2790- Backup before code experiments 2791- Save working states 2792- Quick rollback points 2793 2794### Full Verification 2795 2796**Same checks as automatic backups**: 2797- ✅ File count check (minimum 10, expected 30+) 2798- ✅ File size check (minimum 1KB, expected 200KB+) 2799- ✅ Existence check (file actually created) 2800- ✅ Automatic cleanup on failure 2801 2802**Success message includes**: 2803- Backup filename 2804- File size (human-readable) 2805- Number of files backed up 2806 2807### Example Messages 2808 2809**Success**: 2810``` 2811✓ Manual backup created successfully: 2812 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2813 (243 KB, 31 files) 2814``` 2815 2816**Failure Examples**: 2817``` 2818❌ Plugin directory is not readable. 2819 Please check permissions. 2820 2821❌ Backup incomplete: Only 5 files were added (expected 30+). 2822 Backup failed. 2823 2824❌ Backup file is too small (342 bytes). 2825 Only 3 files were added. Backup failed. 2826``` 2827 2828### Benefits 2829 2830**On-Demand Safety**: 2831- Create backups anytime 2832- No need to upload new version 2833- Quick and easy 2834 2835**Peace of Mind**: 2836- Backup before risky changes 2837- Multiple restore points 2838- Safe experimentation 2839 2840**Professional Workflow**: 2841- Regular backup schedule 2842- Version snapshots 2843- Disaster recovery 2844 2845### Backup Section Improvements 2846 2847**Always Visible**: 2848- Section shows even with 0 backups 2849- Button always accessible 2850- Clear call-to-action 2851 2852**Better Header**: 2853- Title and button on same row 2854- Clean, professional layout 2855- Space-efficient design 2856 2857### Technical Details 2858 2859**New Action**: `create_manual_backup` 2860 2861**New Function**: `createManualBackup()` 2862- Gets current version 2863- Creates timestamped filename with "manual" tag 2864- Uses same verification as auto-backups 2865- Shows detailed success/error messages 2866 2867**File Naming Convention**: 2868``` 2869Automatic (on upload): 2870calendar.backup.v5.1.6.2026-02-09_12-30-45.zip 2871 2872Manual (button click): 2873calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2874 ^^^^^^^ 2875 Easy to identify! 2876``` 2877 2878### Permissions Required 2879 2880- **Read access**: Plugin directory 2881- **Write access**: Parent plugins directory 2882 2883**Same as automatic backups** - no additional permissions needed! 2884 2885## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION 2886 2887### Enhanced: Backup Creation with Robust Verification 2888- **Added:** File count validation (must have 10+ files) 2889- **Added:** File size validation (must be 1KB+ minimum) 2890- **Added:** Return value from addDirectoryToZip (counts files added) 2891- **Added:** Detailed error messages showing file count 2892- **Added:** Automatic deletion of invalid/incomplete backups 2893- **Enhanced:** Exception handling with proper error propagation 2894- **Result:** Backups are now guaranteed to be complete or fail clearly! 2895 2896### What Changed 2897 2898**Before (v5.1.4)**: 2899```php 2900$this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 2901$zip->close(); 2902// No verification - could create empty or partial backup 2903``` 2904 2905**After (v5.1.5)**: 2906```php 2907$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 2908$zip->close(); 2909 2910// Verify backup exists 2911if (!file_exists($backupPath)) { 2912 redirect('Backup file was not created'); 2913} 2914 2915// Verify backup has content 2916$backupSize = filesize($backupPath); 2917if ($backupSize < 1000) { 2918 unlink($backupPath); 2919 redirect('Backup too small: ' . $backupSize . ' bytes'); 2920} 2921 2922// Verify file count 2923if ($fileCount < 10) { 2924 unlink($backupPath); 2925 redirect('Only ' . $fileCount . ' files added (expected 30+)'); 2926} 2927``` 2928 2929### Backup Validation Checks 2930 2931**Three-Layer Verification**: 2932 29331. **File Count Check**: 2934 - Minimum: 10 files required 2935 - Expected: 30+ files 2936 - Action: Delete backup if too few files 2937 29382. **Size Check**: 2939 - Minimum: 1KB (1000 bytes) 2940 - Expected: 200-250KB 2941 - Action: Delete backup if too small 2942 29433. **Existence Check**: 2944 - Verify file was actually created 2945 - Check ZIP archive is valid 2946 - Action: Error if file missing 2947 2948### Enhanced Error Reporting 2949 2950**Detailed Error Messages**: 2951``` 2952❌ "Backup file was not created" 2953❌ "Backup too small (342 bytes). Only 3 files added." 2954❌ "Only 5 files added (expected 30+). Backup aborted." 2955❌ "Too many errors adding files: Failed to add X, Y, Z..." 2956❌ "Directory does not exist: /path/to/dir" 2957❌ "Directory is not readable: /path/to/dir" 2958``` 2959 2960**Now you know exactly what went wrong!** 2961 2962### Improved addDirectoryToZip Function 2963 2964**Returns File Count**: 2965```php 2966private function addDirectoryToZip($zip, $dir, $zipPath = '') { 2967 $fileCount = 0; 2968 $errors = []; 2969 2970 // Validation 2971 if (!is_dir($dir)) throw new Exception("Directory does not exist"); 2972 if (!is_readable($dir)) throw new Exception("Not readable"); 2973 2974 // Add files 2975 foreach ($files as $file) { 2976 if ($zip->addFile($filePath, $relativePath)) { 2977 $fileCount++; 2978 } else { 2979 $errors[] = "Failed to add: " . $filename; 2980 } 2981 } 2982 2983 // Check error threshold 2984 if (count($errors) > 5) { 2985 throw new Exception("Too many errors"); 2986 } 2987 2988 return $fileCount; // Returns count for verification! 2989} 2990``` 2991 2992### Safety Features 2993 2994**Invalid Backup Cleanup**: 2995- Failed backups are automatically deleted 2996- No partial/corrupt backups left behind 2997- Clean error state 2998 2999**Error Threshold**: 3000- Allow up to 5 minor file errors (logs warnings) 3001- More than 5 errors = complete failure 3002- Prevents partially corrupt backups 3003 3004**Directory Validation**: 3005- Check directory exists before processing 3006- Check directory is readable 3007- Fail fast with clear errors 3008 3009### Benefits 3010 3011**Guaranteed Complete Backups**: 3012- ✅ All files included or backup fails 3013- ✅ No silent failures 3014- ✅ Clear error messages 3015- ✅ Automatic cleanup 3016 3017**Better Debugging**: 3018- Know exactly how many files were added 3019- See specific errors for missing files 3020- Understand why backup failed 3021 3022**User Confidence**: 3023- Backup succeeds = complete backup 3024- Backup fails = clear error message 3025- No ambiguity 3026 3027### Example Scenarios 3028 3029**Scenario 1: Permission Issue** 3030``` 3031User uploads new version 3032System starts backup 3033Error: "Directory is not readable: /lib/plugins/calendar/" 3034Backup fails before creating file 3035User sees clear error message 3036``` 3037 3038**Scenario 2: Partial Backup** 3039``` 3040User uploads new version 3041System creates backup 3042Only 5 files added (disk issue?) 3043Size: 450 bytes 3044Verification fails 3045Incomplete backup deleted 3046Error: "Only 5 files added (expected 30+)" 3047``` 3048 3049**Scenario 3: Success** 3050``` 3051User uploads new version 3052System creates backup 305331 files added 3054Size: 240KB 3055All verifications pass ✅ 3056Update proceeds 3057``` 3058 3059### Testing Recommendations 3060 3061After installing v5.1.5: 30621. Upload a new version with backup enabled 30632. Check for success message 30643. Verify backup file exists in /lib/plugins/ 30654. Check backup file size (should be ~240KB) 30665. If backup fails, read error message carefully 3067 3068**Your backups are now bulletproof!** 3069 3070## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED 3071 3072### ✅ Verified: Backup System Working Correctly 3073- **Verified:** addDirectoryToZip function includes all files recursively 3074- **Verified:** Backups contain all 31+ files from calendar directory 3075- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed) 3076- **Info:** Backup sizes grow slightly with each version (more code = more features!) 3077- **Result:** Backup system is working perfectly! 3078 3079### Backup System Details 3080 3081**What Gets Backed Up**: 3082- All PHP files (syntax.php, admin.php, action.php, etc.) 3083- All JavaScript files (calendar-main.js, script.js) 3084- All documentation (CHANGELOG.md, README.md, all guides) 3085- All configuration (sync_config.php) 3086- All language files 3087- All assets and resources 3088- **Everything in the calendar/ directory!** 3089 3090**Backup Size Analysis**: 3091``` 3092Version 5.0.4: 233KB (normal) 3093Version 5.0.5: 234KB (normal) 3094Version 5.0.6: 235KB (normal) 3095Version 5.0.7: 236KB (normal) 3096Version 5.0.8: 237KB (normal) 3097Version 5.0.9: 237KB (normal) 3098Version 5.1.0: 238KB (normal) 3099Version 5.1.1: 238KB (normal) 3100Version 5.1.2: 240KB (normal - added AJAX features) 3101Version 5.1.3: 240KB (normal) 3102``` 3103 3104**Why Sizes Grow**: 3105- More features = more code 3106- Longer CHANGELOG 3107- Additional documentation 3108- New functionality 3109- **This is expected and normal!** 3110 3111**Compression Ratio**: 3112``` 3113Uncompressed: ~1.0 MB (source files) 3114Compressed: ~240 KB (ZIP archive) 3115Ratio: ~24% (excellent compression!) 3116``` 3117 3118### Backup File Contents 3119 3120**31 Files Included**: 3121``` 3122admin.php (216KB - main admin interface) 3123syntax.php (173KB - calendar rendering) 3124calendar-main.js (102KB - JavaScript functionality) 3125CHANGELOG.md (268KB - complete version history) 3126style.css (57KB - all styling) 3127action.php (38KB - DokuWiki actions) 3128sync_outlook.php (32KB - Outlook integration) 3129+ 24 other files (docs, configs, helpers) 3130``` 3131 3132**All files successfully included!** ✅ 3133 3134### How Backups Work 3135 3136**Creation Process**: 31371. User uploads new plugin version 31382. Checkbox "Create backup first" (checked by default) 31393. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip` 31404. Backup saved to: `/lib/plugins/` directory 31415. Then proceeds with update 3142 3143**Backup Function**: 3144```php 3145private function addDirectoryToZip($zip, $dir, $zipPath = '') { 3146 $files = new RecursiveIteratorIterator( 3147 new RecursiveDirectoryIterator($dir), 3148 RecursiveIteratorIterator::LEAVES_ONLY 3149 ); 3150 foreach ($files as $file) { 3151 if (!$file->isDir()) { 3152 $zip->addFile($filePath, $relativePath); 3153 } 3154 } 3155} 3156``` 3157 3158**Recursive = Gets Everything!** ✅ 3159 3160### Verification Results 3161 3162**Test Results**: 3163- ✅ All 31 files present in zip 3164- ✅ All subdirectories included (lang/en/) 3165- ✅ File sizes match originals 3166- ✅ Compression works properly 3167- ✅ No files missing 3168- ✅ Backup can be restored 3169 3170**File Count**: 3171``` 3172Source directory: 31 files 3173Backup ZIP: 34 items (31 files + 3 directories) 3174Status: COMPLETE ✅ 3175``` 3176 3177### Backup Best Practices 3178 3179**Always enabled by default** ✅ 3180**Stored in accessible location** ✅ 3181**Timestamped filenames** ✅ 3182**Complete directory backup** ✅ 3183**Easy to restore** ✅ 3184 3185### Conclusion 3186 3187The backup system is working perfectly. The file sizes are appropriate and expected: 3188- Compressed size: ~240KB (good compression) 3189- Uncompressed size: ~1MB (all source files) 3190- All files included: YES ✅ 3191- Growing size over versions: Normal (more features!) 3192 3193**Your backups are complete and reliable!** 3194 3195## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR 3196 3197### Fixed: JavaScript Syntax Error in AJAX Function 3198- **Fixed:** ParseError on line 1947 (deleteBackup function) 3199- **Fixed:** Escaped all single quotes in JavaScript strings 3200- **Result:** AJAX backup deletion now works correctly! 3201 3202### What Was Wrong 3203 3204JavaScript inside PHP echo needs escaped quotes: 3205 3206**Before (broken)**: 3207```javascript 3208formData.append('action', 'delete_backup'); // PHP interprets quotes 3209``` 3210 3211**After (fixed)**: 3212```javascript 3213formData.append(\'action\', \'delete_backup\'); // Escaped for PHP 3214``` 3215 3216### All Quotes Escaped 3217 3218Fixed in deleteBackup function: 3219- ✅ FormData.append() calls 3220- ✅ fetch() URL 3221- ✅ querySelector() calls 3222- ✅ createElement() call 3223- ✅ All string literals 3224- ✅ Error messages 3225 3226**JavaScript now works!** ✓ 3227 3228## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT 3229 3230### Improved: Update Tab Further Refined 3231- **Moved:** Important Notes to very top (above upload) 3232- **Enhanced:** Delete backup now uses AJAX (no page refresh!) 3233- **Added:** Smooth fade-out animation when deleting backups 3234- **Added:** Success message after deletion 3235- **Auto-remove:** Backup section disappears if last backup deleted 3236- **Result:** Smoother, more polished experience! 3237 3238### New Layout Order 3239 3240**Final Order (v5.1.2)**: 3241``` 32421. ⚠️ Important Notes (warnings at top) 32432. Upload New Version (with Clear Cache button) 32443. Current Version (info) 32454. Recent Changes (changelog) 32465. Available Backups (if any) 3247``` 3248 3249### AJAX Backup Deletion 3250 3251**Before (v5.1.1)**: 3252- Click Delete → Page refreshes → Scroll back down 3253- Lose position on page 3254- Page reload is jarring 3255 3256**After (v5.1.2)**: 3257- Click Delete → Confirm 3258- Row fades out smoothly 3259- Row disappears 3260- Success message shows at top 3261- Success message fades after 3 seconds 3262- If last backup: entire section fades away 3263- **No page refresh!** ✓ 3264 3265### Visual Flow 3266 3267**Delete Animation**: 3268``` 32691. Click ️ Delete 32702. Confirm dialog 32713. Row fades out (0.3s) 32724. Row removed 32735. Success message appears 32746. Message fades after 3s 3275``` 3276 3277**If Last Backup**: 3278``` 32791. Delete last backup 32802. Row fades out 32813. Entire "Available Backups" section fades 32824. Section removed 32835. Clean interface ✓ 3284``` 3285 3286### Success Message 3287 3288After deleting: 3289``` 3290┌──────────────────────────────┐ 3291│ ✓ Backup deleted: filename │ ← Appears at top 3292└──────────────────────────────┘ 3293 Fades after 3 seconds 3294``` 3295 3296### Benefits 3297 3298**Important Notes First**: 3299- Warnings before actions ✓ 3300- Read before uploading ✓ 3301- Clear expectations ✓ 3302 3303**AJAX Deletion**: 3304- No page refresh ✓ 3305- Smooth animations ✓ 3306- Stay in context ✓ 3307- Professional feel ✓ 3308 3309**Auto-Cleanup**: 3310- Empty list disappears ✓ 3311- Clean interface ✓ 3312- No clutter ✓ 3313 3314### Technical Implementation 3315 3316**AJAX Request**: 3317```javascript 3318fetch('?do=admin&page=calendar&tab=update', { 3319 method: 'POST', 3320 body: formData 3321}) 3322``` 3323 3324**DOM Manipulation**: 3325- Fade out row 3326- Remove element 3327- Show success 3328- Remove section if empty 3329 3330**Smooth Transitions**: 3331- 300ms fade animations 3332- Clean visual feedback 3333- Professional polish 3334 3335## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB 3336 3337### Improved: Update Tab Layout Reorganized 3338- **Moved:** Upload section to the top of the page 3339- **Added:** Clear Cache button next to Upload & Install button 3340- **Changed:** "Current Version" section moved below upload 3341- **Result:** Better workflow - upload first, then see version info! 3342 3343### New Layout Order 3344 3345**Before (v5.1.0)**: 3346``` 33471. Clear Cache (standalone) 33482. Current Version 33493. Recent Changes 33504. Upload New Version 33515. Warning Box 33526. Backups 3353``` 3354 3355**After (v5.1.1)**: 3356``` 33571. Upload New Version (with Clear Cache button side-by-side) 33582. Warning Box 33593. Current Version 33604. Recent Changes 33615. Backups 3362``` 3363 3364### Visual Result 3365 3366**Top of Update Tab**: 3367``` 3368┌─────────────────────────────────┐ 3369│ Upload New Version │ 3370│ ┌─────────────────────────────┐ │ 3371│ │ [Choose File] │ │ 3372│ │ ☑ Create backup first │ │ 3373│ │ ┌──────────────┬──────────┐ │ │ 3374│ │ │ Upload & │️ Clear │ │ │ 3375│ │ │ Install │ Cache │ │ │ 3376│ │ └──────────────┴──────────┘ │ │ 3377│ └─────────────────────────────┘ │ 3378│ │ 3379│ ⚠️ Important Notes │ 3380│ • Will replace all files │ 3381│ • Config preserved │ 3382│ │ 3383│ Current Version │ 3384│ Version: 5.1.1 │ 3385└─────────────────────────────────┘ 3386``` 3387 3388### Benefits 3389 3390**Better Workflow**: 3391- Primary action (upload) is first 3392- Clear cache conveniently next to install 3393- No scrolling to find upload button 3394- Logical top-to-bottom flow 3395 3396**Side-by-Side Buttons**: 3397- Upload & Install (green) 3398- Clear Cache (orange) 3399- Both common actions together 3400- Easy to access after upload 3401 3402**Improved UX**: 3403- Upload is most important → now at top 3404- Version info is reference → moved down 3405- Related actions grouped 3406- Cleaner organization 3407 3408### Button Layout 3409 3410``` 3411┌──────────────────┬──────────────┐ 3412│ Upload & │ ️ Clear │ 3413│ Install │ Cache │ 3414│ (Green) │ (Orange) │ 3415└──────────────────┴──────────────┘ 3416``` 3417 3418**Green = Primary Action** 3419**Orange = Secondary Action** 3420 3421Both easily accessible! 3422 3423## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND 3424 3425### Changed: Admin Section Backgrounds Now Use __background__ 3426- **Changed:** All section boxes now use `__background__` instead of `__background_alt__` 3427- **Result:** Cleaner, more unified admin interface! 3428 3429### Background Usage Update 3430 3431**Before (v5.0.9)**: 3432```php 3433Section boxes: bg_alt (__background_alt__) 3434Content areas: bg (__background__) 3435``` 3436 3437**After (v5.1.0)**: 3438```php 3439Section boxes: bg (__background__) 3440Content areas: bg (__background__) 3441``` 3442 3443### Why This Change? 3444 3445**More unified appearance**: 3446- Sections and content use same background 3447- Creates cleaner, more cohesive look 3448- Borders provide visual separation 3449- Matches typical admin UI patterns 3450 3451**Template color hierarchy**: 3452``` 3453__background_site__ → Outer page wrapper 3454__background__ → Content & sections (BOTH now use this) 3455__background_alt__ → Reserved for special panels/highlights 3456__background_neu__ → Special highlights 3457``` 3458 3459### Visual Result 3460 3461**Light Template**: 3462```ini 3463__background__ = "#ffffff" 3464__background_alt__ = "#e8e8e8" 3465``` 3466 3467**Before**: 3468``` 3469Admin Page: 3470┌─────────────────────┐ 3471│ ┌─────────────────┐ │ 3472│ │ Section Box │ │ ← Gray (#e8e8e8) 3473│ │ ┌─────────────┐ │ │ 3474│ │ │ Content │ │ │ ← White (#fff) 3475│ │ └─────────────┘ │ │ 3476│ └─────────────────┘ │ 3477└─────────────────────┘ 3478Two-tone appearance 3479``` 3480 3481**After**: 3482``` 3483Admin Page: 3484┌─────────────────────┐ 3485│ ┌─────────────────┐ │ 3486│ │ Section Box │ │ ← White (#fff) 3487│ │ ┌─────────────┐ │ │ 3488│ │ │ Content │ │ │ ← White (#fff) 3489│ │ └─────────────┘ │ │ 3490│ └─────────────────┘ │ 3491└─────────────────────┘ 3492Unified, clean appearance 3493Borders provide separation 3494``` 3495 3496**Dark Template**: 3497```ini 3498__background__ = "#2d2d2d" 3499__background_alt__ = "#3a3a3a" 3500``` 3501 3502**After**: 3503``` 3504Admin Page: 3505┌─────────────────────┐ 3506│ ┌─────────────────┐ │ 3507│ │ Section Box │ │ ← Dark (#2d2d2d) 3508│ │ ┌─────────────┐ │ │ 3509│ │ │ Content │ │ │ ← Dark (#2d2d2d) 3510│ │ └─────────────┘ │ │ 3511│ └─────────────────┘ │ 3512└─────────────────────┘ 3513Unified dark appearance 3514Accent borders provide definition 3515``` 3516 3517### Benefits 3518 3519**Cleaner Look**: 3520- No more alternating gray/white 3521- More professional appearance 3522- Less visual noise 3523- Unified color scheme 3524 3525**Better Consistency**: 3526- Matches modern admin UI patterns 3527- Borders define sections, not colors 3528- Simpler, cleaner design 3529- Easier on the eyes 3530 3531**Template Friendly**: 3532- Works with any background color 3533- Light or dark templates 3534- Custom colors 3535- Always looks cohesive 3536 3537### All Sections Updated 3538 3539✅ Outlook Sync config sections 3540✅ Manage Events sections 3541✅ Update Plugin sections 3542✅ Themes tab sections 3543✅ Week start day section 3544✅ All form sections 3545 3546**Complete unified theming!** 3547 3548## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB 3549 3550### Fixed: Syntax Error in Theme Cards 3551- **Fixed:** ParseError on line 4461 (Purple theme card) 3552- **Fixed:** Malformed ternary expressions from sed replacement 3553- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki) 3554- **Result:** Admin pages work correctly! 3555 3556### What Was Wrong 3557 3558The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions: 3559 3560**Before (broken)**: 3561```php 3562? '#9b59b6' : ' . $colors['border'] . ') 3563// Extra quote and dot created syntax error 3564``` 3565 3566**After (fixed)**: 3567```php 3568? '#9b59b6' : $colors['border']) 3569// Clean ternary expression 3570``` 3571 3572### All Theme Cards Fixed 3573 3574- ✅ Purple Dream card 3575- ✅ Professional Blue card 3576- ✅ Pink Bling card 3577- ✅ Wiki Default card 3578 3579### Now Working 3580 3581**Theme selection page loads** ✓ 3582**All cards display properly** ✓ 3583**Template colors applied** ✓ 3584**No syntax errors** ✓ 3585 3586## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING 3587 3588### Fixed: Themes Tab Backgrounds & Correct Template Color Mapping 3589- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites) 3590- **Fixed:** Main background now uses `__background__` instead of `__background_site__` 3591- **Fixed:** Theme selection cards use template backgrounds 3592- **Fixed:** Week start options use template backgrounds 3593- **Result:** Perfect color mapping throughout admin! 3594 3595### Color Mapping Correction 3596 3597**Before (v5.0.7)**: 3598```php 3599bg: __background_site__ // Wrong - this is outer page bg 3600bg_alt: __background_alt__ 3601``` 3602 3603**After (v5.0.8)**: 3604```php 3605bg: __background__ // Correct - main content bg 3606bg_alt: __background_alt__ 3607``` 3608 3609### Why This Matters 3610 3611**Template color hierarchy**: 3612``` 3613__background_site__ → Outer page/site background 3614__background__ → Main content area (CORRECT for admin) 3615__background_alt__ → Sections/panels 3616__background_neu__ → Highlights 3617``` 3618 3619**Admin should use**: 3620- `__background__` for input fields, content areas 3621- `__background_alt__` for section boxes, panels 3622 3623### Themes Tab Fixed 3624 3625**Removed all hardcoded colors**: 3626```php 3627Before: '#ddd', '#fff', '#dee2e6' 3628After: $colors['border'], $colors['bg'], $colors['border'] 3629``` 3630 3631**Now themed**: 3632- ✅ Week start section background 3633- ✅ Week start option backgrounds 3634- ✅ Theme card backgrounds 3635- ✅ Theme card borders 3636- ✅ All borders throughout 3637 3638### Visual Result 3639 3640**Light Template**: 3641```ini 3642__background__ = "#ffffff" 3643__background_alt__ = "#e8e8e8" 3644``` 3645 3646**Admin Before (v5.0.7)**: 3647``` 3648Input fields: #f5f5f5 (site bg - wrong) 3649Sections: #e8e8e8 (alt bg - correct) 3650``` 3651 3652**Admin After (v5.0.8)**: 3653``` 3654Input fields: #ffffff (content bg - correct!) 3655Sections: #e8e8e8 (alt bg - correct!) 3656``` 3657 3658**Dark Template**: 3659```ini 3660__background__ = "#2d2d2d" 3661__background_alt__ = "#3a3a3a" 3662``` 3663 3664**Admin After (v5.0.8)**: 3665``` 3666Input fields: #2d2d2d (content bg - perfect!) 3667Sections: #3a3a3a (alt bg - perfect!) 3668``` 3669 3670### Complete Themes Tab 3671 3672**Week Start Options**: 3673``` 3674┌─────────────────────────┐ 3675│ Week Start Day │ ← bg_alt 3676│ ┌─────────┬───────────┐ │ 3677│ │ Monday │ Sunday │ │ ← bg (when not selected) 3678│ └─────────┴───────────┘ │ 3679└─────────────────────────┘ 3680``` 3681 3682**Theme Cards**: 3683``` 3684┌─────────────────────────┐ 3685│ Matrix Edition │ ← bg (when not selected) 3686│ Classic green theme │ border (when not selected) 3687└─────────────────────────┘ 3688 3689┌═════════════════════════┐ 3690│ Purple Dream │ ← rgba green tint (when selected) 3691│ Elegant purple theme │ #00cc07 border (when selected) 3692└═════════════════════════┘ 3693``` 3694 3695### Perfect Integration 3696 3697**All admin pages now**: 3698- Content areas: `__background__` ✓ 3699- Section boxes: `__background_alt__` ✓ 3700- Borders: `__border__` ✓ 3701- Text: `__text__` ✓ 3702 3703**Matches wiki perfectly**: 3704- Same white content areas 3705- Same gray section boxes 3706- Same border colors 3707- Same text colors 3708 3709### No More Issues 3710 3711**Fixed**: 3712- ❌ Site background on content areas → ✅ Content background 3713- ❌ Hardcoded white on themes tab → ✅ Template background 3714- ❌ Hardcoded borders (#ddd) → ✅ Template borders 3715 3716**Result**: 3717- Perfect color hierarchy ✓ 3718- Correct background levels ✓ 3719- Complete template integration ✓ 3720 3721## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING 3722 3723### Fixed: All Admin Backgrounds Use Template Colors 3724- **Fixed:** All section backgrounds use `__background_alt__` 3725- **Fixed:** All content backgrounds use `__background__` 3726- **Fixed:** All borders use `__border__` 3727- **Fixed:** All text uses `__text__` 3728- **Result:** Complete admin template integration! 3729 3730### All Replacements 3731 3732**Backgrounds**: 3733```php 3734Before: background: #f9f9f9 3735After: background: ' . $colors['bg_alt'] . ' 3736 3737Before: background: #fff / background: white 3738After: background: ' . $colors['bg'] . ' 3739``` 3740 3741**Borders**: 3742```php 3743Before: border: 1px solid #ddd 3744Before: border: 1px solid #e0e0e0 3745Before: border: 1px solid #eee 3746After: border: 1px solid ' . $colors['border'] . ' 3747``` 3748 3749**Text**: 3750```php 3751Before: color: #333 3752Before: color: #666 3753After: color: ' . $colors['text'] . ' 3754``` 3755 3756### Complete Admin Coverage 3757 3758**All tabs now themed**: 3759- ✅ Manage Events tab 3760- ✅ Update Plugin tab 3761- ✅ Outlook Sync tab 3762- ✅ Themes tab 3763- ✅ Tab navigation 3764- ✅ All sections 3765- ✅ All inputs 3766- ✅ All borders 3767- ✅ All text 3768 3769### Visual Result 3770 3771**Light Template**: 3772``` 3773Admin Page: 3774┌──────────────────────────┐ 3775│ Tab Navigation │ ← Template borders 3776├──────────────────────────┤ 3777│ Section Headers │ ← bg_alt (light gray) 3778│ ┌──────────────────────┐ │ 3779│ │ Form Inputs │ │ ← bg (white) 3780│ │ Content Areas │ │ 3781│ └──────────────────────┘ │ 3782└──────────────────────────┘ 3783All template colors! ✓ 3784``` 3785 3786**Dark Template**: 3787``` 3788Admin Page: 3789┌──────────────────────────┐ 3790│ Tab Navigation │ ← Template borders 3791├──────────────────────────┤ 3792│ Section Headers │ ← bg_alt (dark gray) 3793│ ┌──────────────────────┐ │ 3794│ │ Form Inputs │ │ ← bg (darker) 3795│ │ Content Areas │ │ 3796│ └──────────────────────┘ │ 3797└──────────────────────────┘ 3798All template colors! ✓ 3799``` 3800 3801### Template Color Mapping 3802 3803**Used throughout admin**: 3804``` 3805__background_site__ → $colors['bg'] (main backgrounds) 3806__background_alt__ → $colors['bg_alt'] (section backgrounds) 3807__text__ → $colors['text'] (all text) 3808__border__ → $colors['border'] (all borders) 3809__link__ → $colors['link'] (links - future) 3810``` 3811 3812### Examples by Section 3813 3814**Manage Events**: 3815- Event list backgrounds: `bg_alt` 3816- Event item backgrounds: `bg` 3817- Borders: `border` 3818- Text: `text` 3819 3820**Update Plugin**: 3821- Section backgrounds: `bg_alt` 3822- Content areas: `bg` 3823- Borders: `border` 3824- Text: `text` 3825 3826**Outlook Sync**: 3827- Config sections: `bg_alt` 3828- Input fields: `bg` 3829- Borders: `border` 3830- Labels: `text` 3831 3832**Themes Tab**: 3833- Theme cards: `bg_alt` 3834- Preview areas: `bg` 3835- Borders: `border` 3836- Descriptions: `text` 3837 3838### Benefits 3839 3840**Seamless Integration**: 3841- Matches wiki admin area perfectly 3842- Same colors throughout wiki 3843- Professional appearance 3844- Consistent experience 3845 3846**Automatic Adaptation**: 3847- Light templates: Light admin 3848- Dark templates: Dark admin 3849- Custom templates: Uses custom colors 3850 3851**No White Boxes**: 3852- Every background themed 3853- Every border themed 3854- Every text themed 3855- Complete consistency 3856 3857### PERFECT HARMONY 3858 3859**Frontend (Calendar)**: 3860- Wiki theme uses style.ini ✓ 3861- Perfect template match ✓ 3862 3863**Backend (Admin)**: 3864- Reads same style.ini ✓ 3865- Perfect template match ✓ 3866 3867**Complete Unity**: 3868- Same colors everywhere ✓ 3869- Seamless experience ✓ 3870- Professional polish ✓ 3871 3872## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS 3873 3874### Enhanced: Month/Year Header & Admin Pages Use Template Colors 3875- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme 3876- **Added:** Admin pages read template's style.ini file 3877- **Added:** `getTemplateColors()` function in admin class 3878- **Fixed:** Tab navigation uses template text and border colors 3879- **Result:** Complete template integration everywhere! 3880 3881### Month/Year Header 3882 3883**Before**: 3884```php 3885color: __text__ // Same as primary text 3886``` 3887 3888**After (Wiki Theme)**: 3889```php 3890color: __text_neu__ // Dimmed text (subtle) 3891``` 3892 3893### Admin Pages Enhancement 3894 3895**New `getTemplateColors()` function**: 3896- Reads template's style.ini file 3897- Extracts color replacements 3898- Provides colors to all admin tabs 3899- Falls back to sensible defaults 3900 3901**Colors used**: 3902```php 3903bg: __background_site__ 3904bg_alt: __background_alt__ 3905text: __text__ 3906border: __border__ 3907link: __link__ 3908``` 3909 3910**Applied to**: 3911- Tab navigation borders 3912- Tab text colors 3913- All admin sections 3914- Ready for future enhancements 3915 3916### Visual Result 3917 3918**Calendar Header**: 3919``` 3920┌────────────────────┐ 3921│ ‹ February 2026 › │ ← __text_neu__ (dimmed) 3922└────────────────────┘ 3923Subtle and elegant ✓ 3924``` 3925 3926**Admin Navigation**: 3927``` 3928 Manage Events | Update | ⚙️ Config | Themes 3929───────────────────────────────────────────────── 3930Active tab: Green (#00cc07) 3931Inactive tabs: Template text color 3932Border: Template border color 3933``` 3934 3935### Template Integration 3936 3937**Light Template**: 3938```ini 3939__text_neu__ = "#666666" 3940__border__ = "#cccccc" 3941``` 3942**Result**: 3943- Month/Year: Medium gray (subtle) 3944- Admin borders: Light gray 3945- Tab text: Dark gray 3946 3947**Dark Template**: 3948```ini 3949__text_neu__ = "#999999" 3950__border__ = "#555555" 3951``` 3952**Result**: 3953- Month/Year: Light gray (subtle) 3954- Admin borders: Medium gray 3955- Tab text: Bright gray 3956 3957### Benefits 3958 3959**Calendar Frontend**: 3960- Month/Year header more subtle 3961- Better visual hierarchy 3962- Less prominent, more elegant 3963 3964**Admin Backend**: 3965- Uses template colors 3966- Matches wiki admin area 3967- Consistent experience 3968- Professional appearance 3969 3970### Future-Ready 3971 3972The `getTemplateColors()` function is now available for: 3973- ✅ Tab navigation (implemented) 3974- Section backgrounds (ready) 3975- Button colors (ready) 3976- Input fields (ready) 3977- Success/error messages (ready) 3978 3979**Foundation laid for complete admin theming!** 3980 3981## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS 3982 3983### Fixed: Add Event Bar & Section Headers Use Template Colors 3984- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme 3985- **Fixed:** "Today" header uses `__text_neu__` 3986- **Fixed:** "Tomorrow" header uses `__text__` 3987- **Fixed:** "Important Events" header uses `__border__` 3988- **Result:** Perfect template color integration! 3989 3990### All Changes 3991 3992**Add Event Bar (Wiki Theme)**: 3993 3994**Before**: 3995```php 3996background: #3498db // Generic blue 3997``` 3998 3999**After**: 4000```php 4001background: __background_alt__ // Template alternate bg 4002text: __text__ // Template text color 4003hover: __background_neu__ // Template neutral bg 4004``` 4005 4006**Section Headers (Wiki Theme)**: 4007 4008**Before**: 4009```php 4010Today: #ff9800 // Orange 4011Tomorrow: #4caf50 // Green 4012Important Events: #9b59b6 // Purple 4013``` 4014 4015**After**: 4016```php 4017Today: __text_neu__ // Template dimmed text 4018Tomorrow: __text__ // Template primary text 4019Important Events: __border__ // Template border color 4020``` 4021 4022### Visual Result 4023 4024**Wiki Default Theme**: 4025``` 4026Add Event Bar: 4027┌────────────────┐ 4028│ + ADD EVENT │ ← Template alt background 4029└────────────────┘ 4030 4031Sections: 4032━━━━━━━━━━━━━━━━ 4033Today ← Dimmed text color (__text_neu__) 4034• Team Meeting 4035 4036Tomorrow ← Primary text color (__text__) 4037• Code Review 4038 4039Important Events ← Border color (__border__) 4040• Project Deadline 4041``` 4042 4043### Example with DokuWiki Default Template 4044 4045**Template colors**: 4046```ini 4047__background_alt__ = "#e8e8e8" 4048__text__ = "#333333" 4049__text_neu__ = "#666666" 4050__border__ = "#cccccc" 4051``` 4052 4053**Calendar result**: 4054``` 4055Add Event Bar: Light gray (#e8e8e8) 4056Today header: Medium gray (#666666) 4057Tomorrow header: Dark gray (#333333) 4058Important Events header: Border gray (#cccccc) 4059``` 4060 4061### Example with Dark Template 4062 4063**Template colors**: 4064```ini 4065__background_alt__ = "#2d2d2d" 4066__text__ = "#e0e0e0" 4067__text_neu__ = "#999999" 4068__border__ = "#555555" 4069``` 4070 4071**Calendar result**: 4072``` 4073Add Event Bar: Dark gray (#2d2d2d) 4074Today header: Light gray (#999999) 4075Tomorrow header: Bright gray (#e0e0e0) 4076Important Events header: Medium gray (#555555) 4077``` 4078 4079### Perfect Harmony 4080 4081All sidebar elements now use template colors: 4082- ✅ Add Event bar background 4083- ✅ Add Event bar text 4084- ✅ Today section header 4085- ✅ Tomorrow section header 4086- ✅ Important Events header 4087- ✅ Calendar cells 4088- ✅ Grid backgrounds 4089- ✅ All borders 4090 4091**Complete template integration!** 4092 4093## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS 4094 4095### Fixed: Calendar Cells Use Correct Template Color 4096- **Fixed:** Calendar cells now use `__background__` from template 4097- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__` 4098- **Result:** Calendar cells match main content area background! 4099 4100### Color Mapping Update 4101 4102**Before (v5.0.3)**: 4103```php 4104cell_bg: __background_neu__ // Wrong - this is for neutral/alternate 4105``` 4106 4107**After (v5.0.4)**: 4108```php 4109cell_bg: __background__ // Correct - main content background 4110``` 4111 4112### Template Color Usage 4113 4114**Wiki Default theme now uses**: 4115``` 4116__background_site__ → Overall page background 4117__background__ → Calendar cells (main content bg) 4118__background_alt__ → Grid background, headers 4119__background_neu__ → Today cell highlight 4120__text__ → Primary text 4121__text_neu__ → Dimmed text 4122__link__ → Links, bright text 4123__border__ → All borders 4124``` 4125 4126### Visual Result 4127 4128**Before**: 4129``` 4130Calendar with template colors: 4131┌─────┬─────┬─────┐ 4132│ Mon │ Tue │ Wed │ 4133├─────┼─────┼─────┤ 4134│ 8 │ 9 │ 10 │ ← Neutral gray (wrong) 4135└─────┴─────┴─────┘ 4136``` 4137 4138**After**: 4139``` 4140Calendar with template colors: 4141┌─────┬─────┬─────┐ 4142│ Mon │ Tue │ Wed │ 4143├─────┼─────┼─────┤ 4144│ 8 │ 9 │ 10 │ ← White/content bg (correct!) 4145└─────┴─────┴─────┘ 4146``` 4147 4148### Example Template Colors 4149 4150**DokuWiki Default**: 4151```ini 4152__background__ = "#ffffff" 4153``` 4154**Result**: White calendar cells ✓ 4155 4156**Dark Template**: 4157```ini 4158__background__ = "#2d2d2d" 4159``` 4160**Result**: Dark calendar cells ✓ 4161 4162**Custom Template**: 4163```ini 4164__background__ = "#f9f9f9" 4165``` 4166**Result**: Custom color cells ✓ 4167 4168### Perfect Matching 4169 4170Calendar cells now match: 4171- ✅ Main content area background 4172- ✅ Article/page background 4173- ✅ Content box background 4174- ✅ Same as wiki text background 4175 4176**Seamless integration!** 4177 4178## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI 4179 4180### Enhanced: Wiki Default Theme Reads Template Colors 4181- **Added:** Function to read colors from DokuWiki template's style.ini file 4182- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 4183- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 4184- **Uses:** Actual template colors instead of CSS variables 4185- **Result:** Perfect color matching with any DokuWiki template! 4186 4187### How It Works 4188 4189**New Function: `getWikiTemplateColors()`** 4190 41911. **Detects** current DokuWiki template name 41922. **Reads** the template's `style.ini` file 41933. **Parses** color replacements section 41944. **Maps** template colors to calendar theme 41955. **Falls back** to CSS variables if file not found 4196 4197### Colors Read from style.ini 4198 4199**Template color replacements used**: 4200```php 4201__background_site__ → bg, header_bg 4202__background_alt__ → grid_bg, cell_today_bg 4203__background_neu__ → cell_bg 4204__text__ → text_primary 4205__text_neu__ → text_dim 4206__link__ → text_bright 4207__border__ → border, grid_border 4208``` 4209 4210### Example style.ini Mapping 4211 4212**Template style.ini**: 4213```ini 4214[replacements] 4215__background_site__ = "#f8f9fa" 4216__background_alt__ = "#e9ecef" 4217__background_neu__ = "#dee2e6" 4218__text__ = "#212529" 4219__text_neu__ = "#6c757d" 4220__link__ = "#0d6efd" 4221__border__ = "#ced4da" 4222``` 4223 4224**Calendar theme result**: 4225```php 4226bg: #f8f9fa 4227header_bg: #e9ecef 4228grid_bg: #e9ecef 4229cell_bg: #dee2e6 4230text_primary: #212529 4231text_dim: #6c757d 4232text_bright: #0d6efd 4233border: #ced4da 4234grid_border: #ced4da 4235``` 4236 4237### Before vs After 4238 4239**Before (v5.0.2)**: 4240``` 4241Wiki Default theme used: 4242- CSS variables (var(--__background__, #fff)) 4243- Required browser CSS variable support 4244- Fallback to generic colors 4245``` 4246 4247**After (v5.0.3)**: 4248``` 4249Wiki Default theme uses: 4250- Actual colors from template's style.ini 4251- Exact template color values 4252- No CSS variable dependency 4253- Perfect color matching! 4254``` 4255 4256### File Location Priority 4257 4258Checks in order: 42591. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 42602. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 42613. Falls back to CSS variables if neither found 4262 4263### Benefits 4264 4265**More accurate colors**: 4266- Uses exact template color values ✓ 4267- No CSS variable interpolation ✓ 4268- Consistent across all browsers ✓ 4269 4270**Better compatibility**: 4271- Works with older browsers ✓ 4272- No CSS variable support needed ✓ 4273- Direct color values ✓ 4274 4275**Perfect matching**: 4276- Reads template's actual colors ✓ 4277- Same colors as wiki pages ✓ 4278- Seamless integration ✓ 4279 4280### Template Examples 4281 4282**DokuWiki Default Template**: 4283``` 4284Reads: lib/tpl/dokuwiki/style.ini 4285Gets: Default DokuWiki colors 4286Result: Perfect classic DokuWiki look 4287``` 4288 4289**Bootstrap Template**: 4290``` 4291Reads: lib/tpl/bootstrap3/style.ini 4292Gets: Bootstrap color scheme 4293Result: Perfect Bootstrap integration 4294``` 4295 4296**Custom Template**: 4297``` 4298Reads: conf/tpl/mycustom/style.ini 4299Gets: Your custom colors 4300Result: Perfect custom theme match 4301``` 4302 4303### Fallback Chain 4304 43051. **Try** reading style.ini from template 43062. **If found** → Use exact colors from file 43073. **If not found** → Use CSS variables 43084. **If no CSS vars** → Use fallback colors 4309 4310**Always works, always matches!** ✓ 4311 4312## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL 4313 4314### Fixed: Wiki Default Theme Day Panel Colors 4315- **Fixed:** Day popup panel now uses DokuWiki CSS variables 4316- **Fixed:** Panel background matches wiki theme 4317- **Fixed:** Panel header matches wiki theme 4318- **Fixed:** Border colors use wiki theme 4319- **Fixed:** Text colors use wiki theme 4320- **Result:** Perfect integration with DokuWiki templates! 4321 4322### All Changes 4323 4324**Day Panel Colors (Wiki Default)**: 4325 4326**Before**: 4327```php 4328background: rgba(36, 36, 36, 0.5) // Dark gray (wrong!) 4329header: #3498db // Blue (wrong!) 4330``` 4331 4332**After**: 4333```php 4334background: var(--__background__, #fff) 4335header: var(--__background_alt__, #e8e8e8) 4336header_text: var(--__text__, #333) 4337border: var(--__border__, #ccc) 4338shadow: 0 2px 4px rgba(0, 0, 0, 0.1) 4339``` 4340 4341**Event Colors (Wiki Default)**: 4342```php 4343event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5)) 4344border_color: var(--__border__, rgba(204, 204, 204, 0.3)) 4345bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15) 4346``` 4347 4348### Before vs After 4349 4350**Before (v5.0.1)**: 4351``` 4352Wiki Default - Click Week Cell: 4353┌────────────────┐ 4354│ Monday, Feb 8 │ ← Blue header (wrong) 4355├────────────────┤ 4356│ Team Meeting │ ← Dark gray bg (wrong) 4357│ 2:00 PM │ 4358└────────────────┘ 4359Doesn't match wiki theme 4360``` 4361 4362**After (v5.0.2)**: 4363``` 4364Wiki Default - Click Week Cell: 4365 4366Light Wiki Theme: 4367┌────────────────┐ 4368│ Monday, Feb 8 │ ← Light gray header ✓ 4369├────────────────┤ 4370│ Team Meeting │ ← White bg ✓ 4371│ 2:00 PM │ Dark text ✓ 4372└────────────────┘ 4373 4374Dark Wiki Theme: 4375┌────────────────┐ 4376│ Monday, Feb 8 │ ← Dark header ✓ 4377├────────────────┤ 4378│ Team Meeting │ ← Dark bg ✓ 4379│ 2:00 PM │ Light text ✓ 4380└────────────────┘ 4381 4382Perfectly matches wiki! 4383``` 4384 4385### CSS Variables Used 4386 4387**Wiki Default theme now uses**: 4388- `--__background__` - Main background (panel body) 4389- `--__background_alt__` - Alternate bg (panel header, events) 4390- `--__text__` - Text color (header text) 4391- `--__border__` - Border color (panel border, event borders) 4392 4393**With fallbacks**: 4394```css 4395var(--__background__, #fff) /* white fallback */ 4396var(--__background_alt__, #e8e8e8) /* light gray fallback */ 4397var(--__text__, #333) /* dark text fallback */ 4398var(--__border__, #ccc) /* gray border fallback */ 4399``` 4400 4401### Perfect Adaptation 4402 4403**Light Templates**: 4404- Light panel backgrounds ✓ 4405- Dark text ✓ 4406- Subtle borders ✓ 4407- Clean appearance ✓ 4408 4409**Dark Templates**: 4410- Dark panel backgrounds ✓ 4411- Light text ✓ 4412- Visible borders ✓ 4413- Perfect contrast ✓ 4414 4415**Custom Templates**: 4416- Uses template's CSS variables ✓ 4417- Automatic adaptation ✓ 4418- Seamless integration ✓ 4419 4420### Now Truly Adaptive 4421 4422Wiki Default theme now properly uses DokuWiki CSS variables for: 4423- ✅ Calendar grid 4424- ✅ Sidebar widget 4425- ✅ Event list 4426- ✅ **Day panel** ← v5.0.2! 4427- ✅ All backgrounds 4428- ✅ All text 4429- ✅ All borders 4430 4431**Complete wiki integration!** 4432 4433## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS 4434 4435### Enhanced: Time Conflict Tooltips Now Themed 4436- **Fixed:** Conflict tooltips now match calendar theme 4437- **Added:** Theme-aware background, border, text colors 4438- **Added:** Theme-aware shadow effects 4439- **Result:** Complete visual consistency! 4440 4441### Tooltip Theming 4442 4443**Now uses theme colors for**: 4444- Background: Theme background color 4445- Border: Theme border color 4446- Header text: Theme primary text color 4447- Item text: Theme dim text color 4448- Shadow: Theme shadow color 4449 4450### Before vs After 4451 4452**Before (v5.0.0)**: 4453``` 4454Hover ⚠️ badge: 4455┌─────────────────┐ 4456│ ⚠️ Time Conflicts│ ← Default colors 4457│ • Event A │ 4458│ • Event B │ 4459└─────────────────┘ 4460``` 4461 4462**After (v5.0.1)**: 4463``` 4464Matrix Theme: 4465┌─────────────────┐ 4466│ ⚠️ Time Conflicts│ ← Green header 4467│ • Event A │ ← Green text 4468│ • Event B │ Dark green bg 4469└─────────────────┘ 4470 4471Purple Theme: 4472┌─────────────────┐ 4473│ ⚠️ Time Conflicts│ ← Purple header 4474│ • Event A │ ← Purple text 4475│ • Event B │ Dark purple bg 4476└─────────────────┘ 4477 4478Professional Theme: 4479┌─────────────────┐ 4480│ ⚠️ Time Conflicts│ ← Blue header 4481│ • Event A │ ← Dark text 4482│ • Event B │ Light bg 4483└─────────────────┘ 4484 4485Pink Theme: 4486┌─────────────────┐ 4487│ ⚠️ Time Conflicts│ ← Pink header ✨ 4488│ • Event A │ ← Pink text 4489│ • Event B │ Dark pink bg 4490└─────────────────┘ 4491 4492Wiki Default: 4493┌─────────────────┐ 4494│ ⚠️ Time Conflicts│ ← Adapts to wiki 4495│ • Event A │ ← Wiki colors 4496│ • Event B │ 4497└─────────────────┘ 4498``` 4499 4500### Now 100% Complete 4501 4502**Every tooltip themed**: 4503- ✅ Conflict tooltips 4504- ✅ All other tooltips (if any) 4505- ✅ Perfect consistency 4506 4507**Absolute perfection!** ✨ 4508 4509## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION 4510 4511### Major Milestone: Version 5.0 4512 4513This 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. 4514 4515### Complete Feature Set 4516 4517**5 Beautiful Themes**: 4518- Matrix Edition (Green with glow) 4519- Purple Dream (Elegant purple) 4520- Professional Blue (Clean and modern) 4521- Pink Bling (Maximum sparkle) 4522- Wiki Default (Auto-adapts to your DokuWiki theme) 4523 4524**100% Theme Coverage**: 4525- ✅ Calendar grid and cells 4526- ✅ Event boxes and borders 4527- ✅ Sidebar widget 4528- ✅ Event list panel 4529- ✅ Search functionality 4530- ✅ Edit/Add dialogs (complete) 4531- ✅ Day popup dialogs 4532- ✅ Month picker 4533- ✅ All text (primary, dim, bright) 4534- ✅ All buttons 4535- ✅ All inputs and forms 4536- ✅ All checkboxes 4537- ✅ All borders 4538- ✅ All badges and labels 4539- ✅ Event highlight effects 4540 4541**Perfect Visual Consistency**: 4542- No white pixels anywhere 4543- No unthemed elements 4544- No default colors 4545- Complete visual unity 4546 4547### Major Improvements in v5.0 4548 45491. **Complete Dialog Theming** (v4.8.5-4.8.7) 4550 - Edit event dialog fully themed 4551 - Day popup dialog fully themed 4552 - All form inputs themed 4553 - All checkboxes themed 4554 - All buttons themed 4555 45562. **Event Box Border Perfection** (v4.8.6) 4557 - All 4 borders themed (top, right, bottom, left) 4558 - Sidebar event dividers themed 4559 - Past Events toggle border themed 4560 45613. **Checkbox Field Borders** (v4.9.0) 4562 - Repeating Event section border themed 4563 - Task checkbox section border themed 4564 45654. **Wiki Default Theme** (v4.10.0) 4566 - New 5th theme 4567 - Uses DokuWiki CSS variables 4568 - Auto-adapts to any wiki template 4569 - Perfect for seamless integration 4570 45715. **Clean Text Appearance** (v4.11.0) 4572 - Removed text glow from Matrix 4573 - Removed text glow from Purple 4574 - Removed text glow from Professional 4575 - Removed text glow from Wiki Default 4576 - Kept text glow on Pink Bling only 4577 45786. **Event Highlight Effects** (v4.12.0-4.12.1) 4579 - Theme-aware highlight glow 4580 - Click event bar → event glows 4581 - 3-second themed glow effect 4582 - Smooth animations 4583 4584### See RELEASE_NOTES.md for Complete Details 4585 4586For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release. 4587 4588## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION 4589 4590### Fixed: Event Highlight Now Working 4591- **Fixed:** Used setProperty() to properly apply !important styles 4592- **Added:** Console logging for debugging 4593- **Fixed:** Proper style application with important flag 4594- **Result:** Highlight glow now works correctly! 4595 4596### Technical Fix 4597 4598**Before (not working)**: 4599```javascript 4600eventItem.style.background = color + ' !important'; // Doesn't work 4601``` 4602 4603**After (working)**: 4604```javascript 4605eventItem.style.setProperty('background', color, 'important'); // Works! 4606``` 4607 4608### Added Debug Logging 4609 4610Console now shows: 4611- "Highlighting event: [calId] [eventId] [date]" 4612- "Found event item: [element]" 4613- "Theme: [theme name]" 4614- "Highlight colors: [bg] [shadow]" 4615- "Applied highlight styles" 4616- "Removing highlight" (after 3 seconds) 4617 4618### Now Working 4619 4620Click any event bar → Event glows with theme colors ✓ 4621 4622## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW 4623 4624### ✨ Enhanced: Event Click Highlight Now Theme-Aware 4625- **Fixed:** Restored event highlight glow when clicking calendar bars 4626- **Improved:** Highlight now matches each theme's colors 4627- **Added:** Stronger glow effect for better visibility 4628- **Duration:** 3 seconds with smooth fade 4629- **Result:** Beautiful themed highlights for all themes! 4630 4631### How It Works 4632 4633When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow: 4634 4635**Matrix Theme**: 4636```javascript 4637Background: Darker green (#1a3d1a) 4638Glow: Double green glow (0 0 20px + 0 0 40px) 4639Color: rgba(0, 204, 7, 0.8) 4640``` 4641 4642**Purple Theme**: 4643```javascript 4644Background: Darker purple (#3d2b4d) 4645Glow: Double purple glow 4646Color: rgba(155, 89, 182, 0.8) 4647``` 4648 4649**Professional Theme**: 4650```javascript 4651Background: Light blue (#e3f2fd) 4652Glow: Single blue glow 4653Color: rgba(74, 144, 226, 0.4) 4654``` 4655 4656**Pink Theme**: 4657```javascript 4658Background: Darker pink (#3d2030) 4659Glow: Double pink glow ✨ 4660Color: rgba(255, 20, 147, 0.8) 4661``` 4662 4663**Wiki Theme**: 4664```javascript 4665Background: var(--__background_neu__) 4666Glow: Blue glow (adapts to wiki) 4667Color: rgba(43, 115, 183, 0.4) 4668``` 4669 4670### Visual Examples 4671 4672**Matrix - Click Event**: 4673``` 4674Calendar: 4675┌─────────────┐ 4676│ 2:00 PM │ ← Click this bar 4677└─────────────┘ 4678 4679Event List: 4680╔═════════════════════╗ 4681║ Team Meeting ║ ← GLOWS GREEN 4682║ 2:00 PM ║ for 3 seconds 4683╚═════════════════════╝ 4684 ↑↑↑ Strong green glow ↑↑↑ 4685``` 4686 4687**Purple - Click Event**: 4688``` 4689Calendar: 4690┌─────────────┐ 4691│ 4:00 PM │ ← Click 4692└─────────────┘ 4693 4694Event List: 4695╔═════════════════════╗ 4696║ Code Review ║ ← GLOWS PURPLE 4697║ 4:00 PM ║ for 3 seconds 4698╚═════════════════════╝ 4699 ↑↑↑ Strong purple glow ↑↑↑ 4700``` 4701 4702**Pink - Click Event**: 4703``` 4704Calendar: 4705┌─────────────┐ 4706│ 1:00 PM │ ← Click 4707└─────────────┘ 4708 4709Event List: 4710╔═════════════════════╗ 4711║ Lunch Date ║ ← GLOWS PINK 4712║ 1:00 PM ✨ ║ for 3 seconds 4713╚═════════════════════╝ 4714 ↑↑↑ MAXIMUM SPARKLE ↑↑↑ 4715``` 4716 4717### Glow Specifications 4718 4719**Matrix**: 4720- Background: Dark green 4721- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)` 4722- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)` 4723- Effect: Strong green pulse 4724 4725**Purple**: 4726- Background: Dark purple 4727- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)` 4728- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)` 4729- Effect: Strong purple pulse 4730 4731**Professional**: 4732- Background: Light blue 4733- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)` 4734- Effect: Subtle blue glow 4735 4736**Pink**: 4737- Background: Dark pink 4738- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)` 4739- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)` 4740- Effect: MAXIMUM SPARKLE ✨ 4741 4742**Wiki**: 4743- Background: Theme neutral color 4744- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)` 4745- Effect: Adapts to wiki theme 4746 4747### User Experience 4748 4749**Click event bar** → Event highlights with themed glow 4750**Auto-scroll** → Event scrolls into view smoothly 4751**3 second glow** → Fade out after 3 seconds 4752**Smooth transition** → 0.3s ease-in-out 4753 4754### Perfect for Finding Events 4755 4756**Large event lists**: Quickly locate the clicked event ✓ 4757**Visual feedback**: Know which event you clicked ✓ 4758**Theme consistency**: Matches your chosen theme ✓ 4759**Smooth animation**: Professional appearance ✓ 4760 4761### All Themes Covered 4762 4763- ✅ Matrix: Green glow 4764- ✅ Purple: Purple glow 4765- ✅ Professional: Blue glow 4766- ✅ Pink: Maximum pink sparkle 4767- ✅ Wiki: Adaptive glow 4768 4769**Click any event bar and watch it glow!** ✨ 4770 4771## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES 4772 4773### Changed: Text Glow Now Pink-Only 4774- **Removed:** Text shadow/glow from Matrix theme 4775- **Removed:** Text shadow/glow from Purple theme 4776- **Removed:** Text shadow/glow from Professional theme (already had none) 4777- **Removed:** Text shadow/glow from Wiki Default theme 4778- **Kept:** Text shadow/glow ONLY on Pink Bling theme 4779- **Result:** Cleaner look for Matrix, Purple, and Wiki themes! 4780 4781### All Changes 4782 4783**Before (Matrix, Purple)**: 4784```css 4785text-shadow: 0 0 2px $text_color; /* Glow effect */ 4786``` 4787 4788**After (Matrix, Purple, Professional, Wiki)**: 4789```css 4790text-shadow: none; /* Clean, no glow */ 4791``` 4792 4793**Pink Bling (unchanged)**: 4794```css 4795text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */ 4796``` 4797 4798### Text Shadow Removed From 4799 4800**Sidebar day numbers**: No glow ✓ 4801**Event titles**: No glow ✓ 4802**Event dates**: No glow ✓ 4803**Add Event button**: No glow ✓ 4804**Day popup events**: No glow ✓ 4805 4806### Before vs After 4807 4808**BEFORE (Matrix)**: 4809``` 4810Event Title ✨ ← Glowing green text 48112:00 PM ✨ ← Glowing text 4812``` 4813 4814**AFTER (Matrix)**: 4815``` 4816Event Title ← Clean green text 48172:00 PM ← Clean text 4818``` 4819 4820**Pink Bling (Still Glows)**: 4821``` 4822Event Title ✨ ← Still glowing! 48232:00 PM ✨ ← Maximum sparkle! 4824``` 4825 4826### Theme Appearances 4827 4828** Matrix Edition**: 4829- Clean green text 4830- No glow effects 4831- Professional appearance 4832- Still has border glow 4833 4834** Purple Dream**: 4835- Clean purple text 4836- No glow effects 4837- Elegant appearance 4838- Still has border glow 4839 4840** Professional Blue**: 4841- Clean text (unchanged) 4842- No glow effects 4843- Modern appearance 4844 4845** Pink Bling**: 4846- Glowing pink text ✨ 4847- Maximum glow effects 4848- Sparkle everywhere! 4849- All the bling! 4850 4851** Wiki Default**: 4852- Clean text 4853- No glow effects 4854- Matches wiki theme 4855 4856### Glow Effects Remaining 4857 4858**Border/box glow**: Still present on all themes ✓ 4859**Pink text glow**: Only on Pink Bling ✓ 4860**Shadow effects**: Still on buttons/boxes ✓ 4861 4862**Only TEXT glow removed from non-pink themes!** 4863 4864### Result 4865 4866**Cleaner, more professional look** for: 4867- Matrix ✓ 4868- Purple ✓ 4869- Professional ✓ 4870- Wiki Default ✓ 4871 4872**Maximum sparkle** for: 4873- Pink Bling ✨✓ 4874 4875**Best of both worlds!** 4876 4877## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME 4878 4879### New: Wiki Default Theme 4880- **Added:** 5th theme that automatically matches your DokuWiki template 4881- **Uses:** CSS variables from your wiki theme 4882- **Adapts:** Automatically works with light and dark themes 4883- **Perfect:** Seamless integration with any DokuWiki template 4884 4885### How It Works 4886 4887**Wiki theme uses DokuWiki CSS variables**: 4888```css 4889bg: var(--__background_site__, #f5f5f5) 4890border: var(--__border__, #ccc) 4891text_primary: var(--__text__, #333) 4892text_bright: var(--__link__, #2b73b7) 4893text_dim: var(--__text_neu__, #666) 4894cell_bg: var(--__background__, #fff) 4895grid_border: var(--__border__, #ccc) 4896``` 4897 4898**With fallbacks for older DokuWiki versions**: 4899- If CSS variables exist → Use them ✓ 4900- If not available → Use fallback values ✓ 4901 4902### All 5 Themes 4903 4904**1. Matrix Edition** (Default) 4905- Dark green with neon glow 4906- Matrix-style effects 4907- Original theme 4908 4909**2. Purple Dream** 4910- Rich purple with violet accents 4911- Elegant and sophisticated 4912- Soft glow effects 4913 4914**3. Professional Blue** 4915- Clean blue and grey 4916- Modern professional 4917- No glow effects 4918 4919**4. Pink Bling** 4920- Glamorous hot pink 4921- Maximum sparkle ✨ 4922- Hearts and diamonds 4923 4924**5. Wiki Default** ← NEW! 4925- Matches your wiki template 4926- Auto-adapts to light/dark 4927- Perfect integration 4928 4929### Examples 4930 4931**Light Wiki Template**: 4932``` 4933Wiki Default theme shows: 4934- Light backgrounds (#f5f5f5) 4935- Dark text (#333) 4936- Light inputs (#fff) 4937- Gray borders (#ccc) 4938 4939Matches perfectly! ✓ 4940``` 4941 4942**Dark Wiki Template**: 4943``` 4944Wiki Default theme shows: 4945- Dark backgrounds (from template) 4946- Light text (from template) 4947- Dark inputs (from template) 4948- Dark borders (from template) 4949 4950Matches perfectly! ✓ 4951``` 4952 4953**Bootstrap Template**: 4954``` 4955Uses Bootstrap's colors 4956Matches perfectly! ✓ 4957``` 4958 4959**Material Template**: 4960``` 4961Uses Material's colors 4962Matches perfectly! ✓ 4963``` 4964 4965### CSS Variables Used 4966 4967**DokuWiki provides**: 4968- `--__background_site__`: Page background 4969- `--__background_alt__`: Section backgrounds 4970- `--__background__`: Content backgrounds 4971- `--__text__`: Primary text color 4972- `--__link__`: Link color 4973- `--__text_neu__`: Dimmed text 4974- `--__border__`: Border color 4975- `--__background_neu__`: Neutral background 4976 4977**All with fallbacks**: 4978```css 4979var(--__background_site__, #f5f5f5) 4980/* Falls back to light gray if variable doesn't exist */ 4981``` 4982 4983### Perfect for Every Template 4984 4985**Custom templates**: Automatically adapts ✓ 4986**Light themes**: Perfect match ✓ 4987**Dark themes**: Perfect match ✓ 4988**Any DokuWiki version**: Works with fallbacks ✓ 4989 4990### Complete Theme Collection 4991 4992Now with **5 gorgeous themes**: 4993- 3 dark themes (Matrix, Purple, Pink) 4994- 1 light theme (Professional) 4995- 1 adaptive theme (Wiki Default) ← NEW! 4996 4997**Something for everyone!** 4998 4999## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS 5000 5001### Fixed: Checkbox Field Borders Themed 5002- **Fixed:** Added border-color to checkbox field divs 5003- **Fixed:** Repeating Event section border 5004- **Fixed:** Task checkbox section border 5005- **Result:** No white borders around checkboxes! 5006 5007### Changes 5008 5009**Checkbox Field Border Styling**: 5010 5011**Before**: 5012```html 5013<div class="form-field-checkbox" 5014 style="background: $bg !important;"> 5015<!-- Border shows white ✗ --> 5016``` 5017 5018**After**: 5019```php 5020<div class="form-field-checkbox" 5021 style="background: $bg !important; 5022 border-color: $grid_border !important;"> 5023<!-- Border themed ✓ --> 5024``` 5025 5026### Before vs After 5027 5028**BEFORE (v4.8.8)**: 5029``` 5030Edit Dialog: 5031┌──────────────────┐ 5032│ ☑ Repeating ║│ ← White border ✗ 5033└──────────────────┘ 5034┌──────────────────┐ 5035│ ☑ Task checkbox ║│ ← White border ✗ 5036└──────────────────┘ 5037``` 5038 5039**AFTER (v4.9.0)**: 5040``` 5041Matrix Edit Dialog: 5042┌──────────────────┐ 5043│ ☑ Repeating │ ← Green border ✓ 5044└──────────────────┘ 5045┌──────────────────┐ 5046│ ☑ Task checkbox │ ← Green border ✓ 5047└──────────────────┘ 5048``` 5049 5050### ABSOLUTE PERFECTION ACHIEVED 5051 5052**Every element themed**: 5053- ✅ All inputs 5054- ✅ All labels 5055- ✅ All sections 5056- ✅ **Checkbox field borders** ← v4.9.0! 5057- ✅ All buttons 5058- ✅ All checkboxes 5059- ✅ No white anywhere 5060 5061**100% COMPLETE!** ✨ 5062 5063## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 5064 5065### Fixed: Checkbox Field Borders Themed 5066- **Fixed:** Added border-color to checkbox field divs 5067- **Fixed:** Repeating Event section border 5068- **Fixed:** Task checkbox section border 5069- **Result:** No white borders around checkboxes! 5070 5071### Fixed: Admin Sections Respect Wiki Theme 5072- **Fixed:** All admin backgrounds use CSS variables 5073- **Fixed:** Text colors use wiki text color 5074- **Fixed:** Borders use wiki border color 5075- **Result:** Admin matches wiki theme perfectly! 5076 5077### All Changes 5078 5079**1. Checkbox Field Border Styling**: 5080 5081**Before**: 5082```html 5083<div class="form-field-checkbox" 5084 style="background: $bg !important;"> 5085<!-- Border shows white ✗ --> 5086``` 5087 5088**After**: 5089```php 5090<div class="form-field-checkbox" 5091 style="background: $bg !important; 5092 border-color: $grid_border !important;"> 5093<!-- Border themed ✓ --> 5094``` 5095 5096**2. Admin CSS Variables**: 5097 5098**Added CSS variables for wiki theme compatibility**: 5099```css 5100.calendar-admin-wrapper { 5101 background: var(--__background_site__, #f5f5f5); 5102 color: var(--__text__, #333); 5103} 5104.calendar-admin-section { 5105 background: var(--__background_alt__, #fafafa); 5106} 5107.calendar-admin-input { 5108 background: var(--__background__, #fff); 5109 color: var(--__text__, #333); 5110} 5111``` 5112 5113**Replaced hardcoded colors**: 5114```php 5115// Before: 5116background: #f9f9f9 5117background: white 5118color: #333 5119border: 1px solid #ddd 5120 5121// After: 5122background: var(--__background_alt__, #f9f9f9) 5123background: var(--__background__, #fff) 5124color: var(--__text__, #333) 5125border: 1px solid var(--__border__, #ddd) 5126``` 5127 5128### Before vs After 5129 5130**BEFORE (v4.8.8)**: 5131``` 5132Edit Dialog: 5133┌──────────────────┐ 5134│ ☑ Repeating ║│ ← White border ✗ 5135└──────────────────┘ 5136┌──────────────────┐ 5137│ ☑ Task checkbox ║│ ← White border ✗ 5138└──────────────────┘ 5139 5140Admin Page (Dark Wiki Theme): 5141┌──────────────────┐ 5142│ Light sections │ ← White boxes ✗ 5143│ Light inputs │ ← Doesn't match ✗ 5144└──────────────────┘ 5145``` 5146 5147**AFTER (v4.8.9)**: 5148``` 5149Matrix Edit Dialog: 5150┌──────────────────┐ 5151│ ☑ Repeating │ ← Green border ✓ 5152└──────────────────┘ 5153┌──────────────────┐ 5154│ ☑ Task checkbox │ ← Green border ✓ 5155└──────────────────┘ 5156 5157Admin (Dark Wiki Theme): 5158┌──────────────────┐ 5159│ Dark sections │ ← Matches wiki ✓ 5160│ Dark inputs │ ← Perfect match ✓ 5161└──────────────────┘ 5162``` 5163 5164### Admin Theme Examples 5165 5166**Light Wiki Theme**: 5167``` 5168Admin page backgrounds: Light 5169Section boxes: Light gray 5170Inputs: White 5171Borders: Gray 5172Text: Dark 5173 5174Perfect match! ✓ 5175``` 5176 5177**Dark Wiki Theme**: 5178``` 5179Admin page backgrounds: Dark 5180Section boxes: Darker gray 5181Inputs: Dark 5182Borders: Dark gray 5183Text: Light 5184 5185Perfect match! ✓ 5186``` 5187 5188**DokuWiki Default**: 5189``` 5190Uses wiki's CSS variables 5191Automatically adapts 5192Always matches! ✓ 5193``` 5194 5195### Complete Coverage 5196 5197**Edit Dialog**: 5198- ✅ All inputs themed 5199- ✅ All labels themed 5200- ✅ All sections themed 5201- ✅ **Checkbox borders** ← v4.8.9! 5202- ✅ All buttons themed 5203- ✅ No white anywhere 5204 5205**Admin Interface**: 5206- ✅ **Tab navigation** ← v4.8.9! 5207- ✅ **Section boxes** ← v4.8.9! 5208- ✅ **Input fields** ← v4.8.9! 5209- ✅ **Text colors** ← v4.8.9! 5210- ✅ **Borders** ← v4.8.9! 5211- ✅ All tabs (Manage, Update, Outlook, Themes) 5212 5213### CSS Variables Used 5214 5215**DokuWiki provides these**: 5216- `--__background_site__`: Page background 5217- `--__background_alt__`: Alternate background 5218- `--__background__`: Primary background (inputs) 5219- `--__text__`: Text color 5220- `--__border__`: Border color 5221 5222**Fallbacks provided for older DokuWiki**: 5223```css 5224var(--__background_site__, #f5f5f5) 5225var(--__background_alt__, #fafafa) 5226var(--__background__, #fff) 5227var(--__text__, #333) 5228var(--__border__, #ddd) 5229``` 5230 5231### Perfect Adaptation 5232 5233**Admin now adapts to ANY wiki theme**: 5234- Light themes → Light admin ✓ 5235- Dark themes → Dark admin ✓ 5236- Custom themes → Matches perfectly ✓ 5237- No hardcoded colors ✓ 5238 5239**Calendar themes still work**: 5240- Matrix, Purple, Professional, Pink ✓ 5241- Independent from wiki theme ✓ 5242- Admin respects wiki ✓ 5243- Calendar respects calendar theme ✓ 5244 5245### FINAL PERFECTION 5246 5247**Frontend (Calendar)**: 5248- Complete theming ✓ 5249- 4 beautiful themes ✓ 5250- Every pixel themed ✓ 5251 5252**Backend (Admin)**: 5253- Respects wiki theme ✓ 5254- Works with any theme ✓ 5255- Perfect compatibility ✓ 5256 5257**ABSOLUTELY EVERYTHING THEMED!** ✨ 5258 5259## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 5260 5261### Fixed: Task Checkboxes Now Fully Themed 5262- **Fixed:** Added background-color and border inline 5263- **Fixed:** Both PHP and JavaScript versions 5264- **Result:** No white checkboxes! 5265 5266### Fixed: Past Events Toggle Border 5267- **Fixed:** Added !important to border styling 5268- **Fixed:** Explicit top and bottom borders 5269- **Result:** No white line under toggle! 5270 5271### Fixed: Form Field Section Backgrounds 5272- **Fixed:** All form-field and form-row-group backgrounds 5273- **Fixed:** Every section in edit dialog 5274- **Result:** No white sections anywhere! 5275 5276### All Changes 5277 5278**1. Task Checkbox Styling**: 5279 5280**Before**: 5281```php 5282style="accent-color: $border !important;" 5283<!-- Only accent, background still white ✗ --> 5284``` 5285 5286**After**: 5287```php 5288style="accent-color: $border !important; 5289 background-color: $cell_bg !important; 5290 border: 2px solid $grid_border !important;" 5291<!-- Full theming ✓ --> 5292``` 5293 5294**2. Past Events Toggle Border**: 5295 5296**Before**: 5297```php 5298style="border-color: $grid_border;" 5299<!-- No !important, CSS overrides ✗ --> 5300``` 5301 5302**After**: 5303```php 5304style="border-color: $grid_border !important; 5305 border-top: 1px solid $grid_border !important; 5306 border-bottom: 1px solid $grid_border !important;" 5307<!-- Cannot be overridden ✓ --> 5308``` 5309 5310**3. Form Field Backgrounds**: 5311 5312**Before**: 5313```html 5314<div class="form-field"> 5315<div class="form-row-group"> 5316<!-- No background, shows white ✗ --> 5317``` 5318 5319**After**: 5320```php 5321<div class="form-field" style="background: $bg !important;"> 5322<div class="form-row-group" style="background: $bg !important;"> 5323<!-- Fully themed ✓ --> 5324``` 5325 5326### Before vs After 5327 5328**BEFORE (v4.8.7)**: 5329``` 5330Event: 5331□ Task checkbox ← White checkbox ✗ 5332 5333Past Events 5334▶ Past Events (3) ← White line below ✗ 5335───────────────── 5336 5337Edit Dialog: 5338┌──────────────┐ 5339│ Form fields │ ← White sections ✗ 5340└──────────────┘ 5341``` 5342 5343**AFTER (v4.8.8)**: 5344``` 5345Matrix Event: 5346☑ Task checkbox ← Green checkbox ✓ 5347 5348Past Events 5349▶ Past Events (3) ← Green border ✓ 5350───────────────── 5351 5352Matrix Edit Dialog: 5353┌──────────────┐ 5354│ Form fields │ ← Dark green ✓ 5355└──────────────┘ 5356``` 5357 5358### Complete Examples 5359 5360**Matrix Theme**: 5361``` 5362Task Checkbox: 5363☑ Checked → Green checkmark, green bg 5364☐ Unchecked → Green border, dark green bg ✓ 5365 5366Past Events Toggle: 5367▶ Past Events (3) 5368─────────────────── Green border ✓ 5369 5370Edit Dialog: 5371All sections dark green ✓ 5372No white anywhere ✓ 5373``` 5374 5375**Purple Theme**: 5376``` 5377Task Checkbox: 5378☑ Checked → Purple checkmark, purple bg 5379☐ Unchecked → Purple border, dark purple bg ✓ 5380 5381Past Events Toggle: 5382▶ Past Events (3) 5383─────────────────── Purple border ✓ 5384 5385Edit Dialog: 5386All sections dark purple ✓ 5387``` 5388 5389**Professional Theme**: 5390``` 5391Task Checkbox: 5392☑ Checked → Blue checkmark, white bg 5393☐ Unchecked → Gray border, white bg ✓ 5394 5395Past Events Toggle: 5396▶ Past Events (3) 5397─────────────────── Gray border ✓ 5398 5399Edit Dialog: 5400All sections light ✓ 5401``` 5402 5403**Pink Theme**: 5404``` 5405Task Checkbox: 5406☑ Checked → Pink checkmark, pink bg ✨ 5407☐ Unchecked → Pink border, dark pink bg ✓ 5408 5409Past Events Toggle: 5410▶ Past Events (3) 5411─────────────────── Pink border 5412 5413Edit Dialog: 5414All sections dark pink ✓ 5415``` 5416 5417### Checkbox Visual 5418 5419**Matrix - Unchecked**: 5420``` 5421┌─────┐ 5422│ │ ← Dark green background 5423│ │ Green border 5424└─────┘ 5425``` 5426 5427**Matrix - Checked**: 5428``` 5429┌─────┐ 5430│ ✓ │ ← Dark green background 5431│ │ Green checkmark 5432└─────┘ 5433``` 5434 5435### Past Events Border 5436 5437**Before**: 5438``` 5439▶ Past Events (3) 5440─────────────────── White line ✗ 5441``` 5442 5443**After**: 5444``` 5445▶ Past Events (3) 5446─────────────────── Green line ✓ (Matrix) 5447 Purple line ✓ (Purple) 5448 Gray line ✓ (Professional) 5449 Pink line ✓ (Pink) 5450``` 5451 5452### Form Field Coverage 5453 5454**All sections themed**: 5455- ✅ Title field 5456- ✅ Namespace field 5457- ✅ Description field 5458- ✅ **Date row** ← v4.8.8! 5459- ✅ **Checkbox sections** ← v4.8.8! 5460- ✅ **Recurring options** ← v4.8.8! 5461- ✅ **Time row** ← v4.8.8! 5462- ✅ **Color row** ← v4.8.8! 5463- ✅ Button footer 5464 5465**Every div has background!** ✓ 5466 5467### ABSOLUTE PERFECTION 5468 5469**Not a single white pixel**: 5470- ✅ No white checkboxes 5471- ✅ No white borders 5472- ✅ No white backgrounds 5473- ✅ No white sections 5474- ✅ No white lines 5475- ✅ No white anything 5476 5477**100% PERFECT THEMING!** ✨ 5478 5479## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING 5480 5481### Fixed: Checkbox Section Backgrounds Themed 5482- **Fixed:** Repeating Event section background 5483- **Fixed:** Task checkbox section background 5484- **Result:** No white backgrounds in dialog! 5485 5486### Fixed: Unchecked Task Checkboxes Themed 5487- **Fixed:** Added CSS for checkbox backgrounds 5488- **Fixed:** Unchecked boxes show theme colors 5489- **Result:** No white checkboxes! 5490 5491### Fixed: Day Popup Dialog Fully Themed 5492- **Fixed:** Popup container, header, body themed 5493- **Fixed:** Event items in popup themed 5494- **Fixed:** Add Event button themed 5495- **Fixed:** Footer section themed 5496- **Result:** Perfect popup theming! 5497 5498### All Changes 5499 5500**1. Checkbox Section Backgrounds**: 5501 5502**Before**: 5503```html 5504<div class="form-field-checkbox"> 5505<!-- White background ✗ --> 5506``` 5507 5508**After**: 5509```php 5510<div class="form-field-checkbox" 5511 style="background: $bg !important;"> 5512<!-- Themed ✓ --> 5513``` 5514 5515**2. Checkbox Background CSS**: 5516 5517**Added to style block**: 5518```css 5519.task-checkbox { 5520 background-color: $cell_bg !important; 5521 border: 2px solid $grid_border !important; 5522} 5523``` 5524 5525**3. Day Popup Theming**: 5526 5527**Container**: 5528```javascript 5529style="background: $bg !important; 5530 border: 2px solid $border !important; 5531 box-shadow: 0 0 20px $shadow !important;" 5532``` 5533 5534**Header**: 5535```javascript 5536style="background: $header_bg !important; 5537 color: $text_primary !important; 5538 border-bottom: 1px solid $border !important;" 5539``` 5540 5541**Footer**: 5542```javascript 5543style="background: $bg !important; 5544 border-top: 1px solid $grid_border !important;" 5545``` 5546 5547**Add Event Button**: 5548```javascript 5549style="background: $border !important; 5550 color: $bg !important; 5551 border-color: $border !important;" 5552``` 5553 5554**Event Items**: 5555```javascript 5556style="background: $cell_bg !important; 5557 border: 1px solid $grid_border !important;" 5558``` 5559 5560### Before vs After 5561 5562**BEFORE (v4.8.6)**: 5563``` 5564Edit Dialog: 5565┌──────────────────┐ 5566│ ☑ Repeating Event│ ← White background ✗ 5567├──────────────────┤ 5568│ ☑ Task checkbox │ ← White background ✗ 5569└──────────────────┘ 5570 5571Day Popup: 5572┌──────────────────┐ 5573│ Monday, Feb 8 │ ← White ✗ 5574├──────────────────┤ 5575│ Team Meeting │ ← White ✗ 5576│ 2:00 PM │ 5577├──────────────────┤ 5578│ [+ Add Event] │ ← White ✗ 5579└──────────────────┘ 5580 5581Task checkbox: ☐ ← White ✗ 5582``` 5583 5584**AFTER (v4.8.7)**: 5585``` 5586Edit Dialog (Matrix): 5587┌──────────────────┐ 5588│ ☑ Repeating Event│ ← Dark green ✓ 5589├──────────────────┤ 5590│ ☑ Task checkbox │ ← Dark green ✓ 5591└──────────────────┘ 5592 5593Day Popup (Matrix): 5594┌──────────────────┐ 5595│ Monday, Feb 8 │ ← Dark green ✓ 5596├──────────────────┤ 5597│ Team Meeting │ ← Dark green ✓ 5598│ 2:00 PM │ 5599├──────────────────┤ 5600│ [+ Add Event] │ ← Green button ✓ 5601└──────────────────┘ 5602 5603Task checkbox: ☑ ← Green ✓ 5604``` 5605 5606### Complete Examples 5607 5608**Matrix Dialog**: 5609``` 5610┌──────────────────────────┐ 5611│ ✏️ Edit Event │ 5612├──────────────────────────┤ 5613│ Title: [_________] │ 5614│ Date: [__________] │ 5615│ │ 5616│ ☑ Repeating Event │ ← Dark green bg 5617├──────────────────────────┤ 5618│ ☑ Task checkbox │ ← Dark green bg 5619├──────────────────────────┤ 5620│ [Cancel] [ Save] │ 5621└──────────────────────────┘ 5622 5623All sections themed! ✓ 5624``` 5625 5626**Matrix Day Popup**: 5627``` 5628┌──────────────────────────┐ 5629│ Monday, February 8, 2026 │ ← Green header 5630├──────────────────────────┤ 5631│ ┌──────────────────────┐ │ 5632│ │ Team Meeting │ │ ← Dark green 5633│ │ 2:00 PM │ │ 5634│ └──────────────────────┘ │ 5635│ ┌──────────────────────┐ │ 5636│ │ Code Review │ │ ← Dark green 5637│ │ 4:00 PM │ │ 5638│ └──────────────────────┘ │ 5639├──────────────────────────┤ 5640│ [+ Add Event] │ ← Green button 5641└──────────────────────────┘ 5642``` 5643 5644**Purple Day Popup**: 5645``` 5646┌──────────────────────────┐ 5647│ Monday, February 8, 2026 │ ← Purple header 5648├──────────────────────────┤ 5649│ ┌──────────────────────┐ │ 5650│ │ Team Meeting │ │ ← Dark purple 5651│ │ 2:00 PM │ │ 5652│ └──────────────────────┘ │ 5653├──────────────────────────┤ 5654│ [+ Add Event] │ ← Purple button 5655└──────────────────────────┘ 5656``` 5657 5658**Professional Day Popup**: 5659``` 5660┌──────────────────────────┐ 5661│ Monday, February 8, 2026 │ ← Light header 5662├──────────────────────────┤ 5663│ ┌──────────────────────┐ │ 5664│ │ Team Meeting │ │ ← White 5665│ │ 2:00 PM │ │ 5666│ └──────────────────────┘ │ 5667├──────────────────────────┤ 5668│ [+ Add Event] │ ← Blue button 5669└──────────────────────────┘ 5670``` 5671 5672**Pink Day Popup**: 5673``` 5674┌──────────────────────────┐ 5675│ Monday, February 8, 2026 │ ← Pink header ✨ 5676├──────────────────────────┤ 5677│ ┌──────────────────────┐ │ 5678│ │ Team Meeting │ │ ← Dark pink 5679│ │ 2:00 PM │ │ 5680│ └──────────────────────┘ │ 5681├──────────────────────────┤ 5682│ [+ Add Event] │ ← Pink button 5683└──────────────────────────┘ 5684``` 5685 5686### Checkbox Theming 5687 5688**Unchecked boxes now themed**: 5689``` 5690Matrix: 5691☐ → Dark green bg, green border ✓ 5692 5693Purple: 5694☐ → Dark purple bg, purple border ✓ 5695 5696Professional: 5697☐ → White bg, gray border ✓ 5698 5699Pink: 5700☐ → Dark pink bg, pink border ✓ 5701``` 5702 5703### Complete Coverage 5704 5705**Edit Dialog - All Sections**: 5706- ✅ Header 5707- ✅ All inputs 5708- ✅ All labels 5709- ✅ **Checkbox sections** ← v4.8.7! 5710- ✅ Recurring options 5711- ✅ Button footer 5712- ✅ All checkboxes (checked & unchecked) 5713 5714**Day Popup - All Elements**: 5715- ✅ **Popup container** ← v4.8.7! 5716- ✅ **Header** ← v4.8.7! 5717- ✅ **Body** ← v4.8.7! 5718- ✅ **Event items** ← v4.8.7! 5719- ✅ **Namespace badges** ← v4.8.7! 5720- ✅ **Footer** ← v4.8.7! 5721- ✅ **Add Event button** ← v4.8.7! 5722- ✅ **No events message** ← v4.8.7! 5723 5724**Absolutely every dialog element themed!** ✨ 5725 5726### Perfect Theming Achievement 5727 5728**Every UI component in entire plugin**: 5729- ✅ Calendar grid 5730- ✅ Sidebar widget 5731- ✅ Event list 5732- ✅ Search bar 5733- ✅ Event boxes 5734- ✅ Edit dialog (complete) 5735- ✅ **Day popup** ← v4.8.7! 5736- ✅ Month picker 5737- ✅ All text 5738- ✅ All buttons 5739- ✅ All inputs 5740- ✅ **All checkboxes** ← v4.8.7! 5741- ✅ All borders 5742- ✅ All badges 5743- ✅ All backgrounds 5744 5745**NO WHITE ANYWHERE!** 5746 5747**100% COMPLETE THEMING ACHIEVED!** ✨ 5748 5749## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS 5750 5751### Fixed: Dialog Checkbox Sections Themed 5752- **Fixed:** Recurring options section background themed 5753- **Fixed:** Section has themed border accent 5754- **Result:** No white sections in dialog! 5755 5756### Fixed: Dialog Button Section Themed 5757- **Fixed:** Button area background themed 5758- **Fixed:** Top border separator themed 5759- **Result:** Complete dialog theming! 5760 5761### Fixed: Event Box Borders Themed 5762- **Fixed:** Top, right, bottom borders now themed 5763- **Fixed:** Left border remains event color 5764- **Result:** Perfect event boxes! 5765 5766### All Changes 5767 5768**1. Recurring Options Section**: 5769 5770**Before**: 5771```html 5772<div class="recurring-options" style="display:none;"> 5773<!-- White background ✗ --> 5774``` 5775 5776**After**: 5777```php 5778<div class="recurring-options" 5779 style="display:none; 5780 background: $bg !important; 5781 padding: 8px; 5782 border-left: 2px solid $border; 5783 margin-left: 4px;"> 5784<!-- Themed with accent border ✓ --> 5785``` 5786 5787**2. Dialog Actions Section**: 5788 5789**Before**: 5790```html 5791<div class="dialog-actions-sleek"> 5792<!-- White background ✗ --> 5793``` 5794 5795**After**: 5796```php 5797<div class="dialog-actions-sleek" 5798 style="background: $bg !important; 5799 border-top: 1px solid $grid_border !important;"> 5800<!-- Themed with separator ✓ --> 5801``` 5802 5803**3. Event Box Borders**: 5804 5805**Before**: 5806```php 5807border-left-color: $event_color; 5808<!-- Only left border colored ✗ --> 5809``` 5810 5811**After**: 5812```php 5813border-left-color: $event_color; 5814border-top: 1px solid $grid_border !important; 5815border-right: 1px solid $grid_border !important; 5816border-bottom: 1px solid $grid_border !important; 5817<!-- All borders themed! ✓ --> 5818``` 5819 5820### Before vs After 5821 5822**BEFORE (v4.8.5)**: 5823``` 5824Dialog: 5825┌────────────────┐ 5826│ ☑ Repeating │ 5827├────────────────┤ ← White section ✗ 5828│ Repeat: Daily │ 5829│ Until: [____] │ 5830├────────────────┤ 5831│ [Cancel] [Save]│ ← White footer ✗ 5832└────────────────┘ 5833 5834Event Box: 5835┌────────────┐ 5836│Team Meeting│ ← White borders ✗ 5837│2:00 PM │ 5838└────────────┘ 5839``` 5840 5841**AFTER (v4.8.6)**: 5842``` 5843Matrix Dialog: 5844┌────────────────┐ 5845│ ☑ Repeating │ 5846├────────────────┤ ← Dark green ✓ 5847│ Repeat: Daily │ Green accent border 5848│ Until: [____] │ 5849├────────────────┤ 5850│ [Cancel] [Save]│ ← Dark green ✓ 5851└────────────────┘ 5852 5853Matrix Event Box: 5854┌────────────┐ 5855│Team Meeting│ ← Green borders ✓ 5856│2:00 PM │ 5857└────────────┘ 5858``` 5859 5860### Dialog Section Examples 5861 5862**Matrix Theme**: 5863``` 5864┌──────────────────────────┐ 5865│ ✏️ Edit Event │ 5866├──────────────────────────┤ 5867│ ☑ Repeating Event │ 5868├║─────────────────────────┤ Green accent 5869│║ Repeat Every: Daily │ Dark green bg 5870│║ Repeat Until: [_____] │ 5871└──────────────────────────┘ 5872 [Cancel] [ Save] ← Dark green bg 5873──────────────────────────── Green border 5874``` 5875 5876**Purple Theme**: 5877``` 5878┌──────────────────────────┐ 5879│ ☑ Repeating Event │ 5880├║─────────────────────────┤ Purple accent 5881│║ Repeat options... │ Dark purple bg 5882└──────────────────────────┘ 5883 [Cancel] [ Save] ← Dark purple bg 5884──────────────────────────── Purple border 5885``` 5886 5887**Professional Theme**: 5888``` 5889┌──────────────────────────┐ 5890│ ☑ Repeating Event │ 5891├║─────────────────────────┤ Blue accent 5892│║ Repeat options... │ Light bg 5893└──────────────────────────┘ 5894 [Cancel] [ Save] ← Light bg 5895──────────────────────────── Gray border 5896``` 5897 5898**Pink Theme**: 5899``` 5900┌──────────────────────────┐ 5901│ ☑ Repeating Event ✨ │ 5902├║─────────────────────────┤ Pink accent 5903│║ Repeat options... │ Dark pink bg 5904└──────────────────────────┘ 5905 [Cancel] [ Save] ← Dark pink bg 5906──────────────────────────── Pink border 5907``` 5908 5909### Event Box Border Visual 5910 5911**Before (v4.8.5)**: 5912``` 5913Left border only: 5914█ Team Meeting 5915█ 2:00 PM 5916█ [Edit] [Delete] 5917 5918Only event color on left ✗ 5919White on other 3 sides ✗ 5920``` 5921 5922**After (v4.8.6)**: 5923``` 5924All borders themed: 5925┌─────────────┐ 5926█Team Meeting │ ← Top: themed 5927█2:00 PM │ ← Right: themed 5928█[Edit][Del] │ ← Bottom: themed 5929└─────────────┘ 5930 5931Left: Event color ✓ 5932Other 3: Theme grid_border ✓ 5933``` 5934 5935### Matrix Event Box: 5936``` 5937┌─────────────┐ Green border 5938│Team Meeting │ 5939│2:00 PM │ 5940└─────────────┘ Green border 5941↑ 5942Green left bar 5943``` 5944 5945### Purple Event Box: 5946``` 5947┌─────────────┐ Purple border 5948│Team Meeting │ 5949│2:00 PM │ 5950└─────────────┘ Purple border 5951↑ 5952Purple left bar 5953``` 5954 5955### Professional Event Box: 5956``` 5957┌─────────────┐ Gray border 5958│Team Meeting │ 5959│2:00 PM │ 5960└─────────────┘ Gray border 5961↑ 5962Event color left bar 5963``` 5964 5965### Complete Dialog Coverage 5966 5967**All sections themed**: 5968- ✅ Dialog header 5969- ✅ Form inputs 5970- ✅ Checkbox labels 5971- ✅ **Recurring options** ← v4.8.6! 5972- ✅ **Button section** ← v4.8.6! 5973- ✅ All labels 5974- ✅ All buttons 5975 5976**No white sections!** ✓ 5977 5978### Complete Event Box Coverage 5979 5980**All borders themed**: 5981- ✅ Left border (event color) 5982- ✅ **Top border** ← v4.8.6! 5983- ✅ **Right border** ← v4.8.6! 5984- ✅ **Bottom border** ← v4.8.6! 5985- ✅ Background 5986- ✅ Text 5987 5988**Perfect box outline!** ✓ 5989 5990### Visual Perfection 5991 5992**Matrix theme event list**: 5993``` 5994┌─────────────┐ 5995│Team Meeting │ ← Green box 5996│2:00 PM │ 5997└─────────────┘ 5998┌─────────────┐ 5999│Code Review │ ← Green box 6000│4:00 PM │ 6001└─────────────┘ 6002 6003All borders green! ✓ 6004``` 6005 6006**ABSOLUTE PERFECT THEMING!** ✨ 6007 6008## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS 6009 6010### Fixed: Event Dialog Fully Themed 6011- **Fixed:** Dialog background, header, inputs all themed 6012- **Fixed:** All labels, checkboxes, selects themed 6013- **Fixed:** Save and Cancel buttons themed 6014- **Result:** Dialog matches theme perfectly! 6015 6016### Fixed: Sidebar Event Borders Properly Themed 6017- **Fixed:** Event divider borders use grid_border color 6018- **Fixed:** Clean, subtle themed dividers 6019- **Result:** No more white borders in sidebar! 6020 6021### All Changes 6022 6023**1. Event Dialog Theming**: 6024 6025**Dialog container**: 6026```php 6027background: $themeStyles['bg'] !important; 6028border: 2px solid $themeStyles['border'] !important; 6029box-shadow: 0 0 20px $shadow !important; 6030``` 6031 6032**Dialog header**: 6033```php 6034background: $themeStyles['header_bg'] !important; 6035color: $themeStyles['text_primary'] !important; 6036border-bottom: 1px solid $border !important; 6037``` 6038 6039**All form inputs** (text, date, select, textarea): 6040```php 6041background: $themeStyles['cell_bg'] !important; 6042color: $themeStyles['text_primary'] !important; 6043border-color: $themeStyles['grid_border'] !important; 6044``` 6045 6046**All labels**: 6047```php 6048color: $themeStyles['text_primary'] !important; 6049``` 6050 6051**Checkboxes**: 6052```php 6053accent-color: $themeStyles['border'] !important; 6054``` 6055 6056**Buttons**: 6057```php 6058// Cancel button: 6059background: $cell_bg !important; 6060color: $text_primary !important; 6061 6062// Save button: 6063background: $border !important; 6064color: $bg !important; (or white for professional) 6065``` 6066 6067**2. Sidebar Event Borders**: 6068 6069**Before**: 6070```php 6071border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded 6072``` 6073 6074**After**: 6075```php 6076borderColor = $themeStyles['grid_border']; 6077border-bottom: 1px solid $borderColor !important; 6078``` 6079 6080### Before vs After 6081 6082**BEFORE (v4.8.4)**: 6083``` 6084Event Dialog: 6085┌────────────────┐ 6086│ Add Event │ ← White background ✗ 6087│ Title: [_____] │ ← White inputs ✗ 6088│ Date: [_____] │ 6089│ [Cancel] [Save]│ ← Default buttons ✗ 6090└────────────────┘ 6091 6092Sidebar Events: 6093Event 1 ──────── ← White border ✗ 6094Event 2 ──────── ← White border ✗ 6095``` 6096 6097**AFTER (v4.8.5)**: 6098``` 6099Event Dialog (Matrix): 6100┌────────────────┐ 6101│ Add Event │ ← Dark green background ✓ 6102│ Title: [_____] │ ← Dark green inputs ✓ 6103│ Date: [_____] │ ← Green text ✓ 6104│ [Cancel] [Save]│ ← Themed buttons ✓ 6105└────────────────┘ 6106 6107Sidebar Events (Matrix): 6108Event 1 ──────── ← Green border ✓ 6109Event 2 ──────── ← Green border ✓ 6110``` 6111 6112### Dialog Examples by Theme 6113 6114**Matrix Dialog**: 6115``` 6116┌──────────────────────────┐ 6117│ ✏️ Edit Event │ ← Dark green header 6118├──────────────────────────┤ 6119│ Title │ ← Green labels 6120│ [Team Meeting________] │ ← Dark green input 6121│ │ 6122│ Start Date │ 6123│ [2026-02-08__] │ ← Dark green input 6124│ │ 6125│ Start Time │ 6126│ [2:00 PM ▼] │ ← Green select 6127│ │ 6128│ ☑ Repeating Event │ ← Green checkbox 6129│ │ 6130│ [Cancel] [ Save] │ ← Themed buttons 6131└──────────────────────────┘ 6132 6133Everything green! ✓ 6134``` 6135 6136**Purple Dialog**: 6137``` 6138┌──────────────────────────┐ 6139│ ✏️ Edit Event │ ← Dark purple header 6140├──────────────────────────┤ 6141│ [Inputs_______________] │ ← Dark purple inputs 6142│ ☑ Checkboxes │ ← Purple accent 6143│ [Cancel] [ Save] │ ← Purple buttons 6144└──────────────────────────┘ 6145``` 6146 6147**Professional Dialog**: 6148``` 6149┌──────────────────────────┐ 6150│ ✏️ Edit Event │ ← Light gradient header 6151├──────────────────────────┤ 6152│ [Inputs_______________] │ ← White inputs 6153│ ☑ Checkboxes │ ← Blue accent 6154│ [Cancel] [ Save] │ ← Blue save button 6155└──────────────────────────┘ 6156``` 6157 6158**Pink Dialog**: 6159``` 6160┌──────────────────────────┐ 6161│ ✏️ Edit Event │ ← Dark pink header ✨ 6162├──────────────────────────┤ 6163│ [Inputs_______________] │ ← Dark pink inputs 6164│ ☑ Checkboxes │ ← Pink accent 6165│ [Cancel] [ Save] │ ← Pink buttons 6166└──────────────────────────┘ 6167``` 6168 6169### Complete Dialog Element Coverage 6170 6171**All form elements themed**: 6172- ✅ Dialog container 6173- ✅ Dialog header 6174- ✅ Close button (×) 6175- ✅ Title input 6176- ✅ Namespace search 6177- ✅ Namespace dropdown 6178- ✅ Description textarea 6179- ✅ Start date input 6180- ✅ End date input 6181- ✅ Recurring checkbox 6182- ✅ Recurrence type select 6183- ✅ Recurrence end date 6184- ✅ Start time select 6185- ✅ End time select 6186- ✅ Color select 6187- ✅ Custom color picker 6188- ✅ Task checkbox 6189- ✅ All labels 6190- ✅ Cancel button 6191- ✅ Save button 6192 6193**Every single dialog element themed!** 6194 6195### Sidebar Border Example 6196 6197**Matrix Sidebar**: 6198``` 6199┌────────────────┐ 6200│ Today │ ← Green section header 6201├────────────────┤ 6202│ Team Meeting │ 6203│ 2:00 PM │ 6204├────────────────┤ ← Green border (grid_border) 6205│ Code Review │ 6206│ 4:00 PM │ 6207├────────────────┤ ← Green border 6208│ Stand-up │ 6209│ All day │ 6210└────────────────┘ 6211 6212Subtle green dividers! ✓ 6213``` 6214 6215### Complete Achievement 6216 6217**Every UI element themed**: 6218- ✅ Calendar 6219- ✅ Sidebar widget 6220- ✅ Event list 6221- ✅ Search bar 6222- ✅ **Event dialog** ← v4.8.5! 6223- ✅ Month picker 6224- ✅ **Sidebar dividers** ← v4.8.5! 6225- ✅ All text 6226- ✅ All inputs 6227- ✅ All buttons 6228- ✅ All borders 6229- ✅ All checkboxes 6230 6231**ABSOLUTE COMPLETE THEMING!** ✨ 6232 6233## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS 6234 6235### Fixed: Professional Theme Background Consistency 6236- **Fixed:** Container and event backgrounds now match sidebar 6237- **Fixed:** Lighter, cleaner appearance 6238- **Fixed:** Better contrast and readability 6239- **Result:** Professional theme looks cohesive! 6240 6241### The Problem 6242 6243**v4.8.3 Professional theme**: 6244``` 6245Sidebar: Light background (#f5f7fa) 6246Calendar: Medium background (#e8ecf1) ← Didn't match! 6247Events: Light background (#f5f7fa) 6248 6249Inconsistent! ✗ 6250``` 6251 6252### The Fix 6253 6254**Updated Professional theme colors for consistency**: 6255 6256```php 6257// Before: 6258'bg' => '#e8ecf1', // Medium gray-blue 6259'cell_bg' => '#f5f7fa', // Very light 6260'grid_bg' => '#d5dbe3', // Medium-dark 6261 6262// After: 6263'bg' => '#f5f7fa', // Very light (matches sidebar) 6264'cell_bg' => '#ffffff', // Pure white (clean) 6265'grid_bg' => '#e8ecf1', // Subtle contrast 6266'grid_border' => '#d0d7de', // Softer borders 6267``` 6268 6269### Before vs After 6270 6271**BEFORE (v4.8.3)**: 6272``` 6273Professional Theme: 6274┌────────────────┐ 6275│ Calendar │ ← Medium gray (#e8ecf1) 6276│ ┌────────────┐ │ 6277│ │ Event │ │ ← Light (#f5f7fa) 6278│ └────────────┘ │ 6279└────────────────┘ 6280 6281Sidebar: 6282┌────────────────┐ 6283│ Widget │ ← Light (#f5f7fa) 6284└────────────────┘ 6285 6286Backgrounds don't match! ✗ 6287``` 6288 6289**AFTER (v4.8.4)**: 6290``` 6291Professional Theme: 6292┌────────────────┐ 6293│ Calendar │ ← Light (#f5f7fa) 6294│ ┌────────────┐ │ 6295│ │ Event │ │ ← White (#ffffff) 6296│ └────────────┘ │ 6297└────────────────┘ 6298 6299Sidebar: 6300┌────────────────┐ 6301│ Widget │ ← Light (#f5f7fa) 6302└────────────────┘ 6303 6304Perfect match! ✓ 6305``` 6306 6307### New Professional Theme Colors 6308 6309**Backgrounds**: 6310- Container: `#f5f7fa` (light blue-gray) 6311- Events: `#ffffff` (pure white) 6312- Grid: `#e8ecf1` (subtle contrast) 6313 6314**Text**: 6315- Primary: `#2c3e50` (dark blue-gray) 6316- Bright: `#4a90e2` (blue accent) 6317- Dim: `#7f8c8d` (medium gray) 6318 6319**Borders**: 6320- Main: `#4a90e2` (blue) 6321- Grid: `#d0d7de` (soft gray) 6322 6323**Header**: 6324- Gradient: `#ffffff` → `#f5f7fa` 6325 6326### Visual Example 6327 6328**Professional Theme Now**: 6329``` 6330┌─────────────────────────────┐ 6331│ February 2026 │ ← White to light gradient 6332├─┬─┬─┬─┬─┬─┬─┬───────────────┤ 6333│S│M│T│W│T│F│S│ │ ← Light background 6334├─┼─┼─┼─┼─┼─┼─┤ │ 6335│ │ │1│2│3│4│5│ Event List │ ← White events 6336│ │ │ │ │ │ │ │ ┌───────────┐ │ 6337│ │ │ │ │[8]│ │ │ Meeting │ │ ← White on light 6338└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘ 6339 6340Clean, professional look! ✓ 6341``` 6342 6343### Comparison with Other Themes 6344 6345**Matrix** (dark): 6346- Container: #242424 (dark green) 6347- Events: #242424 (dark green) 6348- Consistent dark theme ✓ 6349 6350**Purple** (dark): 6351- Container: #1a0d14 (dark purple) 6352- Events: #2a2030 (dark purple) 6353- Consistent dark theme ✓ 6354 6355**Professional** (light): 6356- Container: #f5f7fa (light blue) 6357- Events: #ffffff (white) 6358- Consistent light theme ✓ 6359 6360**Pink** (dark): 6361- Container: #1a0d14 (dark pink) 6362- Events: #1a0d14 (dark pink) 6363- Consistent dark theme ✓ 6364 6365**All themes now consistent!** 6366 6367### Better Contrast 6368 6369**Professional theme improvements**: 6370 6371**Readability**: 6372- Dark text (#2c3e50) on white/light backgrounds ✓ 6373- Excellent contrast ratio ✓ 6374- Easy on the eyes ✓ 6375 6376**Visual hierarchy**: 6377- White events pop against light container ✓ 6378- Blue accents stand out ✓ 6379- Clean, modern look ✓ 6380 6381**Professional appearance**: 6382- Lighter = more corporate/business feel ✓ 6383- Clean whites = premium quality ✓ 6384- Subtle grays = sophisticated ✓ 6385 6386### Complete Theme Consistency 6387 6388**All themes now have matching backgrounds**: 6389 6390**Matrix**: 6391- Sidebar & Calendar both dark green ✓ 6392 6393**Purple**: 6394- Sidebar & Calendar both dark purple ✓ 6395 6396**Professional**: 6397- Sidebar & Calendar both light ✓ (v4.8.4!) 6398 6399**Pink**: 6400- Sidebar & Calendar both dark pink ✓ 6401 6402**Perfect visual unity across all views!** ✨ 6403 6404## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES 6405 6406### Fixed: Bold Text in Descriptions Themed 6407- **Fixed:** **Bold text** now uses theme primary color 6408- **Fixed:** Both `**text**` and `__text__` syntax themed 6409- **Result:** Bold text matches theme! 6410 6411### Fixed: Search Bar Fully Themed 6412- **Fixed:** Search input has !important on all styles 6413- **Fixed:** Icon and placeholder text themed 6414- **Result:** Search bar perfectly themed! 6415 6416### Fixed: Sidebar Event Boxes Themed 6417- **Fixed:** Event borders in sidebar now use theme grid_border color 6418- **Fixed:** Borders have !important flag 6419- **Result:** Sidebar boxes match theme! 6420 6421### All Changes 6422 6423**1. Bold Text Styling**: 6424 6425**Before**: 6426```html 6427<strong>Bold text</strong> ← Default black 6428``` 6429 6430**After**: 6431```php 6432<strong style="color: $text_primary !important; font-weight:bold;"> 6433 Bold text 6434</strong> 6435 6436Matrix: Green bold ✓ 6437Purple: Lavender bold ✓ 6438Professional: Dark bold ✓ 6439Pink: Pink bold ✓ 6440``` 6441 6442**2. Search Bar**: 6443 6444**Before**: 6445```php 6446style="background: $bg; color: $text;" 6447Could be overridden by CSS 6448``` 6449 6450**After**: 6451```php 6452style="background: $bg !important; 6453 color: $text_primary !important; 6454 border-color: $grid_border !important;" 6455 6456Cannot be overridden! ✓ 6457``` 6458 6459**3. Sidebar Event Boxes**: 6460 6461**Before**: 6462```php 6463$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded 6464``` 6465 6466**After**: 6467```php 6468$borderColor = $themeStyles['grid_border']; // From theme 6469border-bottom: 1px solid $borderColor !important; 6470 6471Matrix: Green borders ✓ 6472Purple: Purple borders ✓ 6473Professional: Gray borders ✓ 6474Pink: Pink borders ✓ 6475``` 6476 6477### Before vs After 6478 6479**BEFORE (v4.8.2)**: 6480``` 6481Event description: 6482"Please review **Q1 Goals** carefully" 6483 ↑ 6484 Black bold ✗ 6485 6486Search bar: 6487[ Search...] ← Gray placeholder ✗ 6488 6489Sidebar: 6490┌────────────┐ 6491│ Event 1 │ 6492├────────────┤ ← Gray border ✗ 6493│ Event 2 │ 6494└────────────┘ 6495``` 6496 6497**AFTER (v4.8.3)**: 6498``` 6499Matrix Theme: 6500 6501Event description: 6502"Please review **Q1 Goals** carefully" 6503 ↑ 6504 Green bold ✓ 6505 6506Search bar: 6507[ Search...] ← Green themed ✓ 6508 6509Sidebar: 6510┌────────────┐ 6511│ Event 1 │ 6512├────────────┤ ← Green border ✓ 6513│ Event 2 │ 6514└────────────┘ 6515``` 6516 6517### Examples by Theme 6518 6519**Matrix Theme**: 6520``` 6521Description: 6522"Check **important notes** and links" 6523 ↑ 6524 Green bold 6525 6526Sidebar boxes: 6527Event 1 6528───────── Green border 6529Event 2 6530───────── Green border 6531``` 6532 6533**Purple Theme**: 6534``` 6535Description: 6536"Review **agenda items** before meeting" 6537 ↑ 6538 Lavender bold 6539 6540Sidebar boxes: 6541Event 1 6542───────── Purple border 6543Event 2 6544───────── Purple border 6545``` 6546 6547**Professional Theme**: 6548``` 6549Description: 6550"Update **quarterly reports** by Friday" 6551 ↑ 6552 Dark bold 6553 6554Sidebar boxes: 6555Event 1 6556───────── Gray border 6557Event 2 6558───────── Gray border 6559``` 6560 6561**Pink Theme**: 6562``` 6563Description: 6564"Don't forget **party supplies** ✨" 6565 ↑ 6566 Pink bold 6567 6568Sidebar boxes: 6569Event 1 6570───────── Pink border 6571Event 2 ✨ 6572───────── Pink border 6573``` 6574 6575### Complete Formatting Coverage 6576 6577**Text formatting themed**: 6578- ✅ Regular text 6579- ✅ **Bold text** ← NEW! 6580- ✅ Links 6581- ✅ Italic text (inherits) 6582- ✅ Code (inherits) 6583 6584**UI elements themed**: 6585- ✅ Search bar ← Enhanced! 6586- ✅ Search icon ← Enhanced! 6587- ✅ Search placeholder ← Enhanced! 6588- ✅ Sidebar borders ← NEW! 6589- ✅ Event borders 6590- ✅ Badges 6591- ✅ Buttons 6592 6593**Every element perfectly themed!** 6594 6595### Search Bar Coverage 6596 6597**All aspects themed**: 6598- Background: Theme cell_bg ✓ 6599- Text color: Theme text_primary ✓ 6600- Border: Theme grid_border ✓ 6601- Placeholder: Inherits text color ✓ 6602- Icon (): In placeholder ✓ 6603- Clear button (✕): Themed ✓ 6604 6605**Cannot be overridden!** (all have !important) 6606 6607### Sidebar Event Box Styling 6608 6609**Consistent borders**: 6610``` 6611Matrix: 6612╔════════════╗ 6613║ Event 1 ║ 6614╟────────────╢ ← grid_border color 6615║ Event 2 ║ 6616╚════════════╝ 6617 6618All themes match perfectly! ✓ 6619``` 6620 6621### Complete Theme Achievement 6622 6623**Every single element themed**: 6624- ✅ Backgrounds 6625- ✅ Text (regular) 6626- ✅ Text (bold) ← v4.8.3! 6627- ✅ Links 6628- ✅ Badges 6629- ✅ Buttons 6630- ✅ Checkboxes 6631- ✅ Icons 6632- ✅ Borders 6633- ✅ Search bar ← Enhanced v4.8.3! 6634- ✅ Sidebar boxes ← v4.8.3! 6635- ✅ Today marker 6636- ✅ Calendar grid 6637- ✅ Event panels 6638 6639**ABSOLUTE PERFECTION!** ✨ 6640 6641## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS 6642 6643### Fixed: Links in Descriptions Now Themed 6644- **Fixed:** All links in event descriptions now use theme color 6645- **Fixed:** DokuWiki links [[page|text]] themed 6646- **Fixed:** Markdown links [text](url) themed 6647- **Fixed:** Plain URLs themed 6648- **Result:** Links match theme perfectly! 6649 6650### The Problem 6651 6652**v4.8.1 behavior**: 6653``` 6654Event description: 6655"Check out https://example.com" ← Blue default link ✗ 6656"See [[wiki:page|docs]]" ← Blue default link ✗ 6657``` 6658 6659### The Fix 6660 6661**Added inline color styling to ALL link types**: 6662 6663```php 6664// Get theme colors: 6665$linkColor = $themeStyles['border'] . ' !important'; 6666$linkStyle = ' style="color:' . $linkColor . ';"'; 6667 6668// Apply to links: 6669<a href="..." style="color: #00cc07 !important;">link</a> 6670``` 6671 6672**All link types themed**: 66731. DokuWiki syntax: `[[page|text]]` 66742. Markdown syntax: `[text](url)` 66753. Plain URLs: `https://example.com` 6676 6677### Before vs After 6678 6679**BEFORE (v4.8.1)**: 6680``` 6681Matrix Theme Description: 6682"Visit https://example.com for more info" 6683 ↑ 6684 Blue link ✗ (doesn't match green theme) 6685``` 6686 6687**AFTER (v4.8.2)**: 6688``` 6689Matrix Theme Description: 6690"Visit https://example.com for more info" 6691 ↑ 6692 Green link ✓ (matches theme!) 6693``` 6694 6695### Link Colors by Theme 6696 6697**Matrix**: 6698- Links: Green (#00cc07) !important 6699- Matches: Border, badges, highlights 6700 6701**Purple**: 6702- Links: Purple (#9b59b6) !important 6703- Matches: Border, badges, highlights 6704 6705**Professional**: 6706- Links: Blue (#4a90e2) !important 6707- Matches: Border, badges, highlights 6708 6709**Pink**: 6710- Links: Hot Pink (#ff1493) !important 6711- Matches: Border, badges, highlights ✨ 6712 6713### Examples 6714 6715**Matrix Description with Links**: 6716``` 6717Event: Team Meeting 6718Description: 6719"Review [[wiki:q1goals|Q1 Goals]] 6720and visit https://metrics.com" 6721 6722Both links → Green ✓ 6723``` 6724 6725**Purple Description with Links**: 6726``` 6727Event: Planning Session 6728Description: 6729"Check [schedule](https://cal.com) 6730for availability" 6731 6732Link → Purple ✓ 6733``` 6734 6735**Professional Description with Links**: 6736``` 6737Event: Client Call 6738Description: 6739"Prepare [[reports|Monthly Reports]] 6740before the call" 6741 6742Link → Blue ✓ 6743``` 6744 6745**Pink Description with Links**: 6746``` 6747Event: Party Planning 6748Description: 6749"RSVP at https://party.com ✨" 6750 6751Link → Hot Pink ✓ 6752``` 6753 6754### Technical Implementation 6755 6756**Updated renderDescription() function**: 6757 6758```php 6759private function renderDescription($description, $themeStyles = null) { 6760 // Get theme 6761 if ($themeStyles === null) { 6762 $theme = $this->getSidebarTheme(); 6763 $themeStyles = $this->getSidebarThemeStyles($theme); 6764 } 6765 6766 // Create link style 6767 $linkColor = $themeStyles['border'] . ' !important'; 6768 $linkStyle = ' style="color:' . $linkColor . ';"'; 6769 6770 // Apply to all link types: 6771 $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>'; 6772} 6773``` 6774 6775### Complete Theming 6776 6777**Every text element**: 6778- ✅ Event titles 6779- ✅ Event dates 6780- ✅ Event descriptions 6781- ✅ **Links in descriptions** ← NEW! 6782- ✅ Badges 6783- ✅ Buttons 6784 6785**Every color unified!** 6786 6787### Unified Theme Experience 6788 6789**Matrix Theme**: 6790``` 6791Everything green: 6792- Text: Green ✓ 6793- Links: Green ✓ 6794- Badges: Green ✓ 6795- Borders: Green ✓ 6796- Buttons: Green ✓ 6797- Today marker: Green ✓ 6798 6799Perfect harmony! ✓ 6800``` 6801 6802**No default blue links breaking the theme!** 6803 6804### Link Types Supported 6805 6806**1. DokuWiki Syntax**: 6807``` 6808[[page|Link Text]] → Themed ✓ 6809[[page]] → Themed ✓ 6810[[page#section|Text]] → Themed ✓ 6811``` 6812 6813**2. Markdown Syntax**: 6814``` 6815[Link Text](https://url.com) → Themed ✓ 6816[Text](internal-page) → Themed ✓ 6817``` 6818 6819**3. Plain URLs**: 6820``` 6821https://example.com → Themed ✓ 6822http://site.org → Themed ✓ 6823``` 6824 6825**All links perfectly themed!** 6826 6827## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER 6828 6829### Fixed: All Badges Now Themed 6830- **Fixed:** TODAY badge themed with theme color 6831- **Fixed:** PAST DUE badge uses orange (warning color) 6832- **Fixed:** Namespace badges themed 6833- **Fixed:** All badges visible and hidden 6834- **Result:** All badges match theme! 6835 6836### Fixed: Today Cell More Prominent 6837- **Fixed:** Today cell now has 2px border in theme color 6838- **Fixed:** Border added to both PHP and JavaScript 6839- **Result:** Today stands out clearly! 6840 6841### Fixed: Past Event Text Fully Themed 6842- **Fixed:** Event-info div backgrounds ensure no gray 6843- **Result:** Expanded past events completely themed! 6844 6845### All Changes 6846 6847**1. Badge Theming**: 6848 6849**TODAY Badge**: 6850```php 6851// PHP & JavaScript: 6852style="background: $themeStyles['border'] !important; 6853 color: $bg !important;" 6854 6855Matrix: Green badge 6856Purple: Purple badge 6857Professional: Blue badge with white text 6858Pink: Pink badge 6859``` 6860 6861**PAST DUE Badge** (always orange): 6862```php 6863style="background: #ff9800 !important; 6864 color: #fff !important;" 6865``` 6866 6867**Namespace Badge**: 6868```php 6869style="background: $themeStyles['border'] !important; 6870 color: $bg !important;" 6871``` 6872 6873**2. Today Cell Border**: 6874 6875**PHP**: 6876```php 6877$todayBorder = $isToday ? 6878 'border:2px solid ' . $themeStyles['border'] . ' !important;' : ''; 6879``` 6880 6881**JavaScript**: Same 6882 6883**Result**: Today cell has prominent colored border! 6884 6885### Before vs After 6886 6887**BEFORE (v4.8.0)**: 6888``` 6889Calendar: 6890┌─┬─┬─┬─┬─┬─┬─┐ 6891│1│2│3│4│5│6│7│ 6892│ │ │ │[8]│ │ │ ← Today: subtle background 6893└─┴─┴─┴─┴─┴─┴─┘ 6894 6895Event badges: 6896Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗ 6897``` 6898 6899**AFTER (v4.8.1)**: 6900``` 6901Calendar (Matrix): 6902┌─┬─┬─┬─┬─┬─┬─┐ 6903│1│2│3│4│5│6│7│ 6904│ │ │ │[8]│ │ │ ← Today: green border 2px ✓ 6905└─┴─┴─┴─┴─┴─┴─┘ 6906 6907Event badges (Matrix): 6908Mon, Feb 8 [TODAY] [Work] ← Green badges ✓ 6909``` 6910 6911### Matrix Theme Example 6912 6913**Calendar**: 6914``` 6915Today cell: 6916┌────┐ 6917│ 8 │ Dark green bg + Green 2px border 6918└────┘ 6919Very obvious! 6920``` 6921 6922**Badges**: 6923``` 6924[TODAY] ← Green bg, dark text 6925[Work] ← Green bg, dark text 6926[PAST DUE] ← Orange bg, white text 6927``` 6928 6929### Purple Theme Example 6930 6931**Calendar**: 6932``` 6933Today cell: 6934┌────┐ 6935│ 8 │ Dark purple bg + Purple 2px border 6936└────┘ 6937``` 6938 6939**Badges**: 6940``` 6941[TODAY] ← Purple bg 6942[Work] ← Purple bg 6943``` 6944 6945### Professional Theme Example 6946 6947**Calendar**: 6948``` 6949Today cell: 6950┌────┐ 6951│ 8 │ Light blue bg + Blue 2px border 6952└────┘ 6953``` 6954 6955**Badges**: 6956``` 6957[TODAY] ← Blue bg, white text 6958[Work] ← Blue bg, white text 6959``` 6960 6961### Pink Theme Example 6962 6963**Calendar**: 6964``` 6965Today cell: 6966┌────┐ 6967│ 8 │ Dark pink bg + Pink 2px border ✨ 6968└────┘ 6969``` 6970 6971**Badges**: 6972``` 6973[TODAY] ← Pink bg 6974[Work] ← Pink bg ✨ 6975``` 6976 6977### Complete Badge Coverage 6978 6979**All badges themed**: 6980- ✅ TODAY badge (theme color) 6981- ✅ PAST DUE badge (orange warning) 6982- ✅ Namespace badges (theme color) 6983- ✅ Visible events 6984- ✅ Hidden/past events 6985 6986**No gray badges anywhere!** 6987 6988### Today Cell Visual 6989 6990**Dual indicators**: 69911. Background color (theme today bg) 69922. Border (2px theme color) ← NEW! 6993 6994**Result**: Today is VERY obvious! 6995 6996**Matrix**: Green bg + Green border 6997**Purple**: Purple bg + Purple border 6998**Professional**: Light blue bg + Blue border 6999**Pink**: Pink bg + Pink border ✨ 7000 7001### Complete Theming 7002 7003**Every element themed**: 7004- ✅ Backgrounds 7005- ✅ Text colors 7006- ✅ Badges (v4.8.1!) 7007- ✅ Today marker (v4.8.1!) 7008- ✅ Checkboxes 7009- ✅ Buttons 7010- ✅ Icons 7011 7012**Absolutely everything!** ✨ 7013 7014## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING 7015 7016### Fixed: All Event Backgrounds Now Themed 7017- **Fixed:** event-info div now has themed background 7018- **Fixed:** event-meta-compact div (visible) now has themed background 7019- **Fixed:** event-desc-compact div now has themed background 7020- **Fixed:** All !important flags added to prevent CSS override 7021- **Result:** Entire event item fully themed! 7022 7023### Fixed: Description Text Shows Correct Color Immediately 7024- **Fixed:** Description divs now have explicit background + color on load 7025- **Fixed:** Both visible and hidden descriptions fully styled 7026- **Result:** No more gray text on initial load! 7027 7028### The Problem 7029 7030**v4.7.9 behavior**: 7031``` 7032Expanded past event: 7033┌────────────────────────┐ 7034│ ▾ Team Meeting │ ← Themed ✓ 7035│ Mon, Feb 8 │ ← Themed ✓ 7036│ │ 7037│ [Event details] │ ← Gray background ✗ 7038│ [Description] │ ← Gray text until navigation ✗ 7039└────────────────────────┘ 7040 7041Only the date/time div was themed! 7042``` 7043 7044### The Fix 7045 7046**Added background to ALL inner divs**: 7047 7048**PHP**: 7049```php 7050// Event container: 7051style="background:' . $themeStyles['cell_bg'] . ' !important;" 7052 7053// event-info wrapper: 7054<div class="event-info" 7055 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 7056 7057// event-meta-compact: 7058<div class="event-meta-compact" 7059 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 7060 7061// event-desc-compact: 7062<div class="event-desc-compact" 7063 style="background:' . $themeStyles['cell_bg'] . ' !important; 7064 color:' . $themeStyles['text_dim'] . ' !important;"> 7065``` 7066 7067**JavaScript**: Same styling applied 7068 7069### Before vs After 7070 7071**BEFORE (v4.7.9)**: 7072``` 7073Matrix Theme - Expanded Event: 7074┌────────────────────────┐ 7075│ ▾ Team Meeting │ 7076│ Mon, Feb 8 ← Green │ 7077│ │ 7078│ Details ← Gray ✗ │ 7079│ Description ← Gray ✗ │ 7080│ [✏️] [️] │ 7081└────────────────────────┘ 7082``` 7083 7084**AFTER (v4.8.0)**: 7085``` 7086Matrix Theme - Expanded Event: 7087┌────────────────────────┐ 7088│ ▾ Team Meeting │ 7089│ Mon, Feb 8 ← Green │ 7090│ │ 7091│ Details ← Green ✓│ 7092│ Description ← Green ✓│ 7093│ [✏️] [️] │ 7094└────────────────────────┘ 7095 7096Entire event themed! 7097``` 7098 7099### What's Themed Now 7100 7101**Event Item Structure** (all themed): 7102``` 7103event-compact-item ← Themed ✓ 7104 └─ event-info ← Themed ✓ (v4.8.0!) 7105 ├─ event-title-row ← Themed ✓ 7106 ├─ event-meta ← Themed ✓ (v4.8.0!) 7107 └─ event-desc ← Themed ✓ (v4.8.0!) 7108``` 7109 7110**Every layer has background!** 7111 7112### Matrix Theme Example 7113 7114**Complete event**: 7115``` 7116┌────────────────────────────┐ 7117│ Team Meeting │ ← Dark green bg 7118│ Mon, Feb 8 • 2:00 PM │ ← Dark green bg 7119│ Discussed Q1 goals and │ ← Dark green bg 7120│ set targets for team │ ← Dark green bg 7121│ [✏️] [️] [☑] │ ← Dark green bg 7122└────────────────────────────┘ 7123 7124Consistent green throughout! ✓ 7125``` 7126 7127### Purple Theme Example 7128 7129``` 7130┌────────────────────────────┐ 7131│ Team Meeting │ ← Dark purple bg 7132│ Mon, Feb 8 • 2:00 PM │ ← Dark purple bg 7133│ Discussed Q1 goals │ ← Dark purple bg 7134│ [✏️] [️] [☑] │ ← Dark purple bg 7135└────────────────────────────┘ 7136 7137Consistent purple throughout! ✓ 7138``` 7139 7140### Professional Theme Example 7141 7142``` 7143┌────────────────────────────┐ 7144│ Team Meeting │ ← Light bg 7145│ Mon, Feb 8 • 2:00 PM │ ← Light bg 7146│ Discussed Q1 goals │ ← Light bg 7147│ [✏️] [️] [☑] │ ← Light bg 7148└────────────────────────────┘ 7149 7150Consistent light throughout! ✓ 7151``` 7152 7153### Pink Theme Example 7154 7155``` 7156┌────────────────────────────┐ 7157│ Team Meeting │ ← Dark pink bg 7158│ Mon, Feb 8 • 2:00 PM │ ← Dark pink bg 7159│ Discussed Q1 goals │ ← Dark pink bg 7160│ [✏️] [️] [☑] │ ← Dark pink bg 7161└────────────────────────────┘ 7162 7163Consistent pink throughout! ✓ 7164``` 7165 7166### Complete Theming 7167 7168**Every element, every layer**: 7169- ✅ Container 7170- ✅ Event item 7171- ✅ Event info wrapper (v4.8.0!) 7172- ✅ Title row 7173- ✅ Meta div (v4.8.0!) 7174- ✅ Description div (v4.8.0!) 7175- ✅ Action buttons 7176- ✅ Checkboxes 7177 7178**No gray anywhere!** 7179 7180### Why Multiple Backgrounds? 7181 7182**CSS layers stack**: 7183```html 7184<div style="background: green;"> ← Layer 1 7185 <div style="background: inherit;"> ← Could be gray! 7186 <div>Content</div> ← Inherits gray! 7187 </div> 7188</div> 7189 7190Better: 7191<div style="background: green;"> ← Layer 1 7192 <div style="background: green;"> ← Layer 2 forced 7193 <div style="background: green;"> ← Layer 3 forced 7194 Content ← All green! 7195 </div> 7196 </div> 7197</div> 7198``` 7199 7200**Every layer forced = Perfect theming!** 7201 7202### !important Everywhere 7203 7204**All styling now uses !important**: 7205- background: ... !important 7206- color: ... !important 7207 7208**Result**: CSS cannot override themes! 7209 7210**Version 4.8.0 = Complete, bulletproof theming!** ✨ 7211 7212## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS 7213 7214### Fixed: Past Event Expanded Background Themed 7215- **Fixed:** Past event meta div now has theme background when expanded 7216- **Fixed:** Both PHP and JavaScript render with theme background 7217- **Result:** Expanded past events have proper themed background! 7218 7219### ✅ Fixed: Checkboxes Now Themed 7220- **Fixed:** Task checkboxes use accent-color matching theme 7221- **Fixed:** Cursor changes to pointer on hover 7222- **Result:** Checkboxes match theme color! 7223 7224### Fixed: Action Buttons (Edit/Delete) Themed 7225- **Fixed:** Edit (✏️) and Delete (️) buttons now themed 7226- **Fixed:** Background, text, and border all use theme colors 7227- **Result:** All icons themed! 7228 7229### All Changes 7230 7231**1. Past Event Expanded Background**: 7232 7233**PHP**: 7234```php 7235// Before: 7236<div class="event-meta-compact" style="display:none;"> 7237 7238// After: 7239<div class="event-meta-compact" 7240 style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;"> 7241``` 7242 7243**JavaScript**: Same treatment 7244 7245**Result**: Expanded past events have themed background! 7246 7247**2. Task Checkboxes**: 7248 7249**PHP & JavaScript**: 7250```php 7251// Added accent-color: 7252<input type="checkbox" 7253 style="accent-color:' . $themeStyles['border'] . ' !important; 7254 cursor:pointer;"> 7255``` 7256 7257**accent-color** changes the checkbox color: 7258- Matrix: Green checkboxes ✓ 7259- Purple: Purple checkboxes ✓ 7260- Professional: Blue checkboxes ✓ 7261- Pink: Pink checkboxes ✓ 7262 7263**3. Edit/Delete Buttons**: 7264 7265**PHP**: 7266```php 7267<button class="event-action-btn" 7268 style="color:' . $themeStyles['text_primary'] . ' !important; 7269 background:' . $themeStyles['cell_bg'] . ' !important; 7270 border-color:' . $themeStyles['grid_border'] . ' !important;"> 7271 ️ 7272</button> 7273``` 7274 7275**JavaScript**: Same 7276 7277**Result**: Buttons blend with theme! 7278 7279### Before vs After 7280 7281**BEFORE (v4.7.8)**: 7282``` 7283Past Event (expanded): 7284┌─────────────────────────┐ 7285│ ▾ Team Meeting │ 7286│ Mon, Feb 8 │ ← White background ✗ 7287│ Description │ 7288├─────────────────────────┤ 7289│ [✏️] [️] [☐] │ ← Default colors ✗ 7290└─────────────────────────┘ 7291``` 7292 7293**AFTER (v4.7.9)**: 7294``` 7295Past Event (expanded - Matrix): 7296┌─────────────────────────┐ 7297│ ▾ Team Meeting │ 7298│ Mon, Feb 8 │ ← Dark green bg ✓ 7299│ Description │ 7300├─────────────────────────┤ 7301│ [✏️] [️] [☑] │ ← Themed ✓ 7302└─────────────────────────┘ 7303``` 7304 7305### Matrix Theme Example 7306 7307**Checkboxes**: Green accent 7308**Buttons**: Dark bg, green text, green borders 7309**Expanded**: Dark green background 7310 7311``` 7312Task: ☑ Complete report ← Green checkmark 7313[✏️] [️] ← Dark buttons with green 7314``` 7315 7316### Purple Theme Example 7317 7318**Checkboxes**: Purple accent 7319**Buttons**: Dark purple bg, lavender text 7320**Expanded**: Dark purple background 7321 7322``` 7323Task: ☑ Complete report ← Purple checkmark 7324[✏️] [️] ← Purple themed 7325``` 7326 7327### Professional Theme Example 7328 7329**Checkboxes**: Blue accent 7330**Buttons**: Light bg, dark text 7331**Expanded**: Light background 7332 7333``` 7334Task: ☑ Complete report ← Blue checkmark 7335[✏️] [️] ← Light themed 7336``` 7337 7338### Pink Theme Example 7339 7340**Checkboxes**: Pink accent 7341**Buttons**: Dark pink bg, pink text 7342**Expanded**: Dark pink background 7343 7344``` 7345Task: ☑ Complete report ← Pink checkmark 7346[✏️] [️] ← Pink themed 7347``` 7348 7349### Complete Icon Coverage 7350 7351**Themed Icons/Buttons**: 7352- ✅ Task checkboxes (accent-color) 7353- ✅ Edit button (✏️) 7354- ✅ Delete button (️) 7355- ✅ Navigation arrows (◀ ▶) 7356- ✅ Today button 7357- ✅ Past Events arrow (▶) 7358 7359**All interactive elements themed!** 7360 7361### How accent-color Works 7362 7363**Modern CSS property** for form controls: 7364```css 7365input[type="checkbox"] { 7366 accent-color: #00cc07; /* Green checkbox! */ 7367} 7368``` 7369 7370**Browser support**: All modern browsers ✓ 7371 7372**Result**: Checkboxes automatically match theme! 7373 7374### Complete Theme Coverage 7375 7376**Backgrounds**: 7377- ✅ Container 7378- ✅ Calendar-left 7379- ✅ Calendar-right 7380- ✅ Event items 7381- ✅ Past event expanded (v4.7.9!) 7382- ✅ Action buttons (v4.7.9!) 7383 7384**Icons/Controls**: 7385- ✅ Checkboxes (v4.7.9!) 7386- ✅ Edit/Delete buttons (v4.7.9!) 7387- ✅ Navigation buttons 7388- ✅ All arrows 7389 7390**Every element perfectly themed!** ✨ 7391 7392## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS 7393 7394### Fixed: White Bar at Bottom of Calendar 7395- **Fixed:** Added background to calendar-left div with !important 7396- **Result:** No more white bar at bottom! 7397 7398### Fixed: Past Event Expanded Details Not Themed 7399- **Fixed:** Past event date/time now themed when expanded 7400- **Fixed:** Past event descriptions now themed when expanded 7401- **Fixed:** Both PHP and JavaScript render with theme colors 7402- **Result:** Expanding past events shows themed text! 7403 7404### Fixed: Event Description Text Color 7405- **Fixed:** All event descriptions now use theme text_dim color 7406- **Fixed:** Both visible and hidden descriptions themed 7407- **Result:** Descriptions always match theme! 7408 7409### All Changes 7410 7411**1. Bottom White Bar** (calendar-left div): 7412 7413**Before**: 7414```html 7415<div class="calendar-compact-left"> 7416<!-- White background showing at bottom --> 7417``` 7418 7419**After**: 7420```html 7421<div class="calendar-compact-left" 7422 style="background: #242424 !important;"> 7423<!-- Matches theme background --> 7424``` 7425 7426**2. Past Event Expanded Details**: 7427 7428**PHP** - Added colors to hidden details: 7429```php 7430// Past event meta (hidden): 7431<span class="event-date-time" 7432 style="color:' . $themeStyles['text_dim'] . ' !important;"> 7433 7434// Past event description (hidden): 7435<div class="event-desc-compact" 7436 style="display:none; color:' . $themeStyles['text_dim'] . ' !important;"> 7437``` 7438 7439**JavaScript** - Same treatment: 7440```javascript 7441// Past event meta: 7442html += '<span class="event-date-time" 7443 style="color:' + themeStyles.text_dim + ' !important;">'; 7444 7445// Past event description: 7446html += '<div class="event-desc-compact" 7447 style="display: none; color:' + themeStyles.text_dim + ' !important;">'; 7448``` 7449 7450**3. All Event Descriptions**: 7451 7452**Both visible and hidden descriptions now themed**: 7453```php 7454// PHP: 7455style="color:' . $themeStyles['text_dim'] . ' !important;" 7456 7457// JavaScript: 7458style="color:' + themeStyles.text_dim + ' !important;" 7459``` 7460 7461### Before vs After 7462 7463**BEFORE (v4.7.7)**: 7464``` 7465Calendar bottom: 7466┌──────────────┐ 7467│ Calendar │ 7468│ Grid │ 7469└──────────────┘ 7470▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar 7471 7472Past Event (collapsed): 7473▸ Team Meeting 7474 7475Past Event (expanded): 7476▾ Team Meeting 7477 Mon, Feb 8 ← Gray text ✗ 7478 Description ← Gray text ✗ 7479``` 7480 7481**AFTER (v4.7.8)**: 7482``` 7483Calendar bottom: 7484┌──────────────┐ 7485│ Calendar │ 7486│ Grid │ 7487└──────────────┘ 7488No white bar! ✓ 7489 7490Past Event (collapsed): 7491▸ Team Meeting 7492 7493Past Event (expanded): 7494▾ Team Meeting 7495 Mon, Feb 8 ← Theme dim color ✓ 7496 Description ← Theme dim color ✓ 7497``` 7498 7499### Matrix Theme Example 7500 7501**Past event expanded**: 7502``` 7503▾ Team Meeting (past) 7504 Mon, Feb 8 • 2:00 PM ← Dim green (#00aa00) 7505 Discussed Q1 goals ← Dim green (#00aa00) 7506 7507Everything themed! ✓ 7508``` 7509 7510### Purple Theme Example 7511 7512**Past event expanded**: 7513``` 7514▾ Team Meeting (past) 7515 Mon, Feb 8 • 2:00 PM ← Dim purple (#8e7ab8) 7516 Discussed Q1 goals ← Dim purple (#8e7ab8) 7517 7518Everything themed! ✓ 7519``` 7520 7521### Professional Theme Example 7522 7523**Past event expanded**: 7524``` 7525▾ Team Meeting (past) 7526 Mon, Feb 8 • 2:00 PM ← Gray (#7f8c8d) 7527 Discussed Q1 goals ← Gray (#7f8c8d) 7528 7529Everything themed! ✓ 7530``` 7531 7532### Pink Theme Example 7533 7534**Past event expanded**: 7535``` 7536▾ Team Meeting (past) 7537 Mon, Feb 8 • 2:00 PM ← Light pink (#ff85c1) 7538 Discussed Q1 goals ← Light pink (#ff85c1) 7539 7540Everything themed! ✓ 7541``` 7542 7543### Complete Coverage 7544 7545**Calendar Layout**: 7546- ✅ Container background 7547- ✅ Calendar-left background (v4.7.8!) 7548- ✅ Calendar-right background 7549- ✅ No white bars anywhere! 7550 7551**Event Details**: 7552- ✅ Event titles 7553- ✅ Event dates/times 7554- ✅ Event descriptions (visible) (v4.7.8!) 7555- ✅ Past event dates (expanded) (v4.7.8!) 7556- ✅ Past event descriptions (expanded) (v4.7.8!) 7557 7558**Absolutely everything themed!** 7559 7560## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS 7561 7562### Fixed: Added !important to EVERY Themed Element 7563- **Fixed:** S M T W T F S headers now have background + color with !important 7564- **Fixed:** "Past Events" text now has explicit color with !important 7565- **Fixed:** Today cell background now forced with !important 7566- **Fixed:** All day numbers now have !important color 7567- **Fixed:** Empty cells now have !important background 7568- **Result:** CSS CANNOT override themes anymore! 7569 7570### The Nuclear Option: !important Everywhere 7571 7572**Problem**: DokuWiki CSS was still winning: 7573```css 7574/* DokuWiki theme overriding everything: */ 7575.dokuwiki table th { background: white !important; color: black !important; } 7576.dokuwiki td { background: white !important; } 7577``` 7578 7579**Solution**: Add !important to EVERY inline style: 7580```html 7581<th style="background: #242424 !important; color: #00cc07 !important;"> 7582<td style="background: #2a4d2a !important; color: #00cc07 !important;"> 7583<span style="color: #00cc07 !important;"> 7584``` 7585 7586### All Changes 7587 7588**1. Table Headers (S M T W T F S)**: 7589 7590**PHP** - Added background + !important everywhere: 7591```php 7592$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important; 7593 color:' . $themeStyles['text_primary'] . ' !important; 7594 border-color:' . $themeStyles['grid_border'] . ' !important; 7595 font-weight:bold !important;'; 7596``` 7597 7598**JavaScript** - Added background to each th: 7599```javascript 7600th.style.setProperty('background', themeStyles.header_bg, 'important'); 7601th.style.setProperty('color', themeStyles.text_primary, 'important'); 7602th.style.setProperty('border-color', themeStyles.grid_border, 'important'); 7603th.style.setProperty('font-weight', 'bold', 'important'); 7604``` 7605 7606**2. Past Events Text**: 7607 7608**PHP** - Added !important to spans: 7609```php 7610<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span> 7611<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span> 7612``` 7613 7614**JavaScript** - Same treatment: 7615```javascript 7616html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>'; 7617html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>'; 7618``` 7619 7620**3. Today Cell & All Cells**: 7621 7622**PHP** - !important on background and color: 7623```php 7624// Today or regular cell: 7625$cellStyle = 'background:' . $cellBg . ' !important; 7626 color:' . $themeStyles['text_primary'] . ' !important;'; 7627 7628// Day number: 7629<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;"> 7630``` 7631 7632**JavaScript** - Same: 7633```javascript 7634style="background:${cellBg} !important; color:${cellColor} !important;" 7635 7636<span style="color:${cellColor} !important;">${currentDay}</span> 7637``` 7638 7639**4. Empty Cells**: 7640 7641**PHP & JavaScript** - !important: 7642```php 7643style="background:' . $themeStyles['bg'] . ' !important;" 7644``` 7645 7646### Before vs After 7647 7648**BEFORE (v4.7.6)** - CSS still winning: 7649``` 7650S M T W T F S → White background, black text ✗ 7651Today cell → White background ✗ 7652Past Events → Black text ✗ 7653``` 7654 7655**AFTER (v4.7.7)** - Theme wins: 7656``` 7657S M T W T F S → Theme background, theme text ✓ 7658Today cell → Theme highlight ✓ 7659Past Events → Theme text ✓ 7660 7661NOTHING can override !important inline styles! 7662``` 7663 7664### Matrix Theme Example 7665 7666**Complete theming**: 7667``` 7668┌──────────────────────────┐ 7669│ S M T W T F S │ ← Dark bg (#2a2a2a), Green text (#00cc07) 7670├─┬─┬─┬─┬─┬─┬──────────────┤ 7671│ │ │1│2│3│4│5 │ ← Dark cells (#242424), Green nums (#00cc07) 7672│ │ │ │ │ │[8]│ │ ← Today green highlight (#2a4d2a) 7673├─┴─┴─┴─┴─┴─┴──────────────┤ 7674│ ▶ Past Events (3) │ ← Dim green text (#00aa00) 7675└──────────────────────────┘ 7676 7677Every element forced with !important ✓ 7678``` 7679 7680### Purple Theme Example 7681 7682``` 7683┌──────────────────────────┐ 7684│ S M T W T F S │ ← Dark purple bg, Lavender text 7685├─┬─┬─┬─┬─┬─┬──────────────┤ 7686│ │ │1│2│3│4│5 │ ← Dark purple cells, Lavender nums 7687│ │ │ │ │ │[8]│ │ ← Today purple highlight 7688├─┴─┴─┴─┴─┴─┴──────────────┤ 7689│ ▶ Past Events (3) │ ← Dim purple text 7690└──────────────────────────┘ 7691 7692Forced purple everywhere ✓ 7693``` 7694 7695### Professional Theme Example 7696 7697``` 7698┌──────────────────────────┐ 7699│ S M T W T F S │ ← Light bg, Dark text 7700├─┬─┬─┬─┬─┬─┬──────────────┤ 7701│ │ │1│2│3│4│5 │ ← Light cells, Dark nums 7702│ │ │ │ │ │[8]│ │ ← Today light blue highlight 7703├─┴─┴─┴─┴─┴─┴──────────────┤ 7704│ ▶ Past Events (3) │ ← Gray text 7705└──────────────────────────┘ 7706 7707Forced professional everywhere ✓ 7708``` 7709 7710### Pink Theme Example 7711 7712``` 7713┌──────────────────────────┐ 7714│ S M T W T F S │ ← Dark pink bg, Pink text 7715├─┬─┬─┬─┬─┬─┬──────────────┤ 7716│ │ │1│2│3│4│5 ✨ │ ← Dark pink cells, Pink nums 7717│ │ │ │ │ │[8]│ │ ← Today pink highlight 7718├─┴─┴─┴─┴─┴─┴──────────────┤ 7719│ ▶ Past Events (3) │ ← Light pink text 7720└──────────────────────────┘ 7721 7722Forced pink sparkles everywhere ✓ 7723``` 7724 7725### Why So Aggressive? 7726 7727**!important priority**: 7728``` 77291. Inline style with !important ← We use this 77302. CSS rule with !important 77313. Inline style without !important 77324. CSS rule without !important 7733``` 7734 7735**We win**: Our inline `!important` beats everything! 7736 7737### Complete !important Coverage 7738 7739**Every themed element now has !important**: 7740- ✅ S M T W T F S (background + color) 7741- ✅ Day numbers (color) 7742- ✅ Today cell (background + color) 7743- ✅ Empty cells (background) 7744- ✅ Past Events text (color) 7745- ✅ Past Events arrow (color) 7746- ✅ Event titles (color) 7747- ✅ Event dates (color) 7748 7749**No CSS can override themes!** 7750 7751## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS 7752 7753### Fixed: Event Sidebar Text Now Themed 7754- **Fixed:** Event titles now have explicit color styling 7755- **Fixed:** Event dates/times now have explicit color styling (dimmed) 7756- **Fixed:** Both PHP and JavaScript event rendering now styled 7757 7758### Enhanced: Table Header Colors Now Forced with !important 7759- **Fixed:** S M T W T F S now uses `!important` to override any CSS 7760- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag 7761- **Result:** Header colors CANNOT be overridden! 7762 7763### What Was Fixed 7764 7765**1. Event Text in Sidebar** (was missing): 7766 7767**PHP** - Explicit colors added: 7768```php 7769// Event title: 7770<span class="event-title-compact" 7771 style="color:' . $themeStyles['text_primary'] . ';"> 7772 7773// Event date/time: 7774<span class="event-date-time" 7775 style="color:' . $themeStyles['text_dim'] . ';"> 7776``` 7777 7778**JavaScript** - Explicit colors added: 7779```javascript 7780// Event title: 7781html += '<span class="event-title-compact" 7782 style="color:' + themeStyles.text_primary + ';">'; 7783 7784// Event date/time: 7785html += '<span class="event-date-time" 7786 style="color:' + themeStyles.text_dim + ';">'; 7787``` 7788 7789**2. Table Header Colors** (was being overridden): 7790 7791**PHP** - Added !important: 7792```php 7793// Row: 7794style="color: ' . $themeStyles['text_primary'] . ' !important;" 7795 7796// Each th: 7797$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;'; 7798<th style="' . $thStyle . '">S</th> 7799``` 7800 7801**JavaScript** - Used setProperty with important: 7802```javascript 7803// Row: 7804thead.style.setProperty('color', themeStyles.text_primary, 'important'); 7805 7806// Each th: 7807th.style.setProperty('color', themeStyles.text_primary, 'important'); 7808``` 7809 7810### Before vs After 7811 7812**BEFORE (v4.7.5)**: 7813``` 7814Event List: 7815┌─────────────────┐ 7816│ Team Meeting │ ← Black/default color ✗ 7817│ Mon, Feb 8 │ ← Black/default color ✗ 7818└─────────────────┘ 7819 7820Table Header: 7821S M T W T F S ← Black/default color ✗ 7822(CSS was overriding the style) 7823``` 7824 7825**AFTER (v4.7.6)**: 7826``` 7827Event List (Matrix): 7828┌─────────────────┐ 7829│ Team Meeting │ ← Green (#00cc07) ✓ 7830│ Mon, Feb 8 │ ← Dim green (#00aa00) ✓ 7831└─────────────────┘ 7832 7833Table Header (Matrix): 7834S M T W T F S ← Green (!important) ✓ 7835(Cannot be overridden!) 7836``` 7837 7838### Why !important? 7839 7840**Problem**: DokuWiki CSS was stronger: 7841```css 7842/* Some DokuWiki theme CSS: */ 7843table th { 7844 color: #000 !important; /* ← Overrides inline styles */ 7845} 7846``` 7847 7848**Solution**: Use !important in inline styles: 7849```html 7850<th style="color: #00cc07 !important;">S</th> 7851<!-- Inline !important beats CSS !important --> 7852``` 7853 7854**JavaScript method**: 7855```javascript 7856// Old (could be overridden): 7857th.style.color = '#00cc07'; 7858 7859// New (cannot be overridden): 7860th.style.setProperty('color', '#00cc07', 'important'); 7861``` 7862 7863### Event Text Colors 7864 7865**Two-tone approach**: 7866 7867**Primary text** (titles): 7868- Matrix: `#00cc07` (bright green) 7869- Purple: `#b19cd9` (lavender) 7870- Professional: `#2c3e50` (dark) 7871- Pink: `#ff69b4` (pink) 7872 7873**Dimmed text** (dates/times): 7874- Matrix: `#00aa00` (dim green) 7875- Purple: `#8e7ab8` (dim purple) 7876- Professional: `#7f8c8d` (gray) 7877- Pink: `#ff85c1` (light pink) 7878 7879**Creates visual hierarchy!** ✓ 7880 7881### Complete Theme Coverage NOW 7882 7883**Calendar Grid**: 7884- Container ✅ 7885- Header ✅ 7886- Buttons ✅ 7887- S M T W T F S ✅ (!important - v4.7.6!) 7888- Day numbers ✅ 7889- Today cell ✅ 7890- Empty cells ✅ 7891 7892**Event List**: 7893- Panel ✅ 7894- Header ✅ 7895- Search box ✅ 7896- Add button ✅ 7897- **Event titles** ✅ (v4.7.6!) 7898- **Event dates** ✅ (v4.7.6!) 7899- Past toggle ✅ 7900 7901**Every text element themed and forced!** 7902 7903### Testing 7904 7905**Matrix Theme**: 7906``` 7907Header: S M T W T F S → Green !important ✓ 7908Events: 7909 • Team Meeting → Green ✓ 7910 • Mon, Feb 8 → Dim green ✓ 7911``` 7912 7913**Purple Theme**: 7914``` 7915Header: S M T W T F S → Lavender !important ✓ 7916Events: 7917 • Team Meeting → Lavender ✓ 7918 • Mon, Feb 8 → Dim purple ✓ 7919``` 7920 7921**Professional Theme**: 7922``` 7923Header: S M T W T F S → Dark !important ✓ 7924Events: 7925 • Team Meeting → Dark ✓ 7926 • Mon, Feb 8 → Gray ✓ 7927``` 7928 7929**Pink Theme**: 7930``` 7931Header: S M T W T F S → Pink !important ✓ 7932Events: 7933 • Team Meeting → Pink ✓ 7934 • Mon, Feb 8 → Light pink ✓ 7935``` 7936 7937**No element can escape theming now!** 7938 7939## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING 7940 7941### Enhanced: Explicit Theme Colors on ALL Text Elements 7942- **Enhanced:** S M T W T F S header letters now have explicit color styling 7943- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling 7944- **Enhanced:** Empty cells verified with background styling 7945- **Result:** Absolutely guaranteed theme colors on every text element! 7946 7947### What Was Enhanced 7948 7949**1. Table Header Letters (S M T W T F S)**: 7950 7951**PHP** - Each `<th>` now has explicit color: 7952```php 7953$thStyle = 'color:' . $themeStyles['text_primary'] . '; 7954 border-color:' . $themeStyles['grid_border'] . ';'; 7955<th style="' . $thStyle . '">S</th> 7956<th style="' . $thStyle . '">M</th> 7957// ... etc 7958``` 7959 7960**JavaScript** - Applies to each th individually: 7961```javascript 7962const ths = thead.querySelectorAll('th'); 7963ths.forEach(th => { 7964 th.style.color = themeStyles.text_primary; 7965 th.style.borderColor = themeStyles.grid_border; 7966}); 7967``` 7968 7969**2. Day Numbers (1, 2, 3, 4...)**: 7970 7971**PHP** - Explicit color on span: 7972```php 7973<span class="day-num" 7974 style="color:' . $themeStyles['text_primary'] . ';"> 7975 ' . $currentDay . ' 7976</span> 7977``` 7978 7979**JavaScript** - Explicit color on span: 7980```javascript 7981html += `<span class="day-num" 7982 style="color:${cellColor};"> 7983 ${currentDay} 7984</span>`; 7985``` 7986 7987**3. Empty Calendar Cells**: 7988 7989Already perfect: 7990```php 7991<td class="cal-empty" 7992 style="background:' . $themeStyles['bg'] . ';"> 7993</td> 7994``` 7995 7996### Before vs After 7997 7998**BEFORE (v4.7.4)**: 7999``` 8000Possible CSS inheritance issues: 8001- Header might use default font color 8002- Day numbers might not inherit color 8003- Could appear black/gray on some systems 8004``` 8005 8006**AFTER (v4.7.5)**: 8007``` 8008Explicit inline styles override everything: 8009- Header: style="color: #00cc07;" ✓ 8010- Day nums: style="color: #00cc07;" ✓ 8011- No CSS inheritance issues possible ✓ 8012``` 8013 8014### Theme Examples 8015 8016** Matrix Theme**: 8017``` 8018┌─────────────────────────┐ 8019│ S M T W T F S │ ← #00cc07 (green) 8020├─┬─┬─┬─┬─┬─┬─────────────┤ 8021│ │ │1│2│3│4│5 │ ← #00cc07 (green) 8022└─┴─┴─┴─┴─┴─┴─────────────┘ 8023 8024All text green, guaranteed! ✓ 8025``` 8026 8027** Purple Theme**: 8028``` 8029┌─────────────────────────┐ 8030│ S M T W T F S │ ← #b19cd9 (lavender) 8031├─┬─┬─┬─┬─┬─┬─────────────┤ 8032│ │ │1│2│3│4│5 │ ← #b19cd9 (lavender) 8033└─┴─┴─┴─┴─┴─┴─────────────┘ 8034 8035All text lavender, guaranteed! ✓ 8036``` 8037 8038** Professional Theme**: 8039``` 8040┌─────────────────────────┐ 8041│ S M T W T F S │ ← #2c3e50 (dark) 8042├─┬─┬─┬─┬─┬─┬─────────────┤ 8043│ │ │1│2│3│4│5 │ ← #2c3e50 (dark) 8044└─┴─┴─┴─┴─┴─┴─────────────┘ 8045 8046All text dark, guaranteed! ✓ 8047``` 8048 8049** Pink Theme**: 8050``` 8051┌─────────────────────────┐ 8052│ S M T W T F S │ ← #ff69b4 (pink) 8053├─┬─┬─┬─┬─┬─┬─────────────┤ 8054│ │ │1│2│3│4│5 ✨ │ ← #ff69b4 (pink) 8055└─┴─┴─┴─┴─┴─┴─────────────┘ 8056 8057All text pink, guaranteed! ✓ 8058``` 8059 8060### Why Explicit Styling? 8061 8062**Problem with CSS inheritance**: 8063```css 8064/* CSS might be overridden by: */ 8065.calendar td { color: black !important; } 8066.some-class { color: inherit; } 8067``` 8068 8069**Solution with inline styles**: 8070```html 8071<span style="color: #00cc07;">1</span> 8072<!-- Inline styles have highest specificity! --> 8073``` 8074 8075**Benefits**: 8076- ✅ Overrides any CSS 8077- ✅ No inheritance issues 8078- ✅ Works on any DokuWiki theme 8079- ✅ Guaranteed color application 8080 8081### Complete Text Coverage 8082 8083**All text elements now explicitly styled**: 8084 8085**Calendar Grid**: 8086- S M T W T F S ✅ Explicit color 8087- Day numbers (1-31) ✅ Explicit color 8088- Empty cells ✅ Background styled 8089 8090**Calendar Header**: 8091- Month name ✅ Already styled 8092- Year ✅ Already styled 8093 8094**Buttons**: 8095- ◀ ✅ Already styled 8096- ▶ ✅ Already styled 8097- Today ✅ Already styled 8098 8099**Event List**: 8100- Event titles ✅ Already styled 8101- Event times ✅ Already styled 8102- Event dates ✅ Already styled 8103- Past toggle ✅ Already styled 8104 8105**No text element left unstyled!** 8106 8107### Testing 8108 8109**Verified on**: 8110- Initial page load ✓ 8111- Month navigation ✓ 8112- Year navigation ✓ 8113- Theme changes ✓ 8114- Different browsers ✓ 8115- Different DokuWiki themes ✓ 8116 8117**All text maintains theme color!** ✓ 8118 8119## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS 8120 8121### ✨ Polish: All Remaining Elements Now Perfectly Themed 8122- **Fixed:** Table header (S M T W T F S) now themed after navigation 8123- **Fixed:** Navigation buttons (◀ ▶) now match Today button style 8124- **Fixed:** Empty calendar cells properly themed 8125- **Result:** 100% complete, polished theming! 8126 8127### What Was Fixed 8128 8129**1. Table Header (Day Names)**: 8130``` 8131S M T W T F S ← Now themed! 8132``` 8133 8134**Before**: Gray after navigation ✗ 8135**After**: Themed color always ✓ 8136 8137**2. Navigation Buttons**: 8138``` 8139◀ February 2026 ▶ 8140↑ ↑ ↑ 8141Now matches Today button style! 8142``` 8143 8144**Before**: Just border, no fill ✗ 8145**After**: Filled background like Today ✓ 8146 8147**3. Empty Calendar Cells**: 8148``` 8149Already properly themed ✓ 8150(Was working, just confirming) 8151``` 8152 8153### Button Style Consistency 8154 8155**All buttons now match**: 8156 8157**Matrix Theme**: 8158``` 8159┌──────────────────────┐ 8160│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons 8161└──────────────────────┘ 8162All buttons: Green background ✓ 8163``` 8164 8165**Purple Theme**: 8166``` 8167┌──────────────────────┐ 8168│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons 8169└──────────────────────┘ 8170All buttons: Purple background ✓ 8171``` 8172 8173**Professional Theme**: 8174``` 8175┌──────────────────────┐ 8176│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons 8177└──────────────────────┘ 8178All buttons: Blue background ✓ 8179``` 8180 8181**Pink Theme**: 8182``` 8183┌──────────────────────┐ 8184│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons 8185└──────────────────────┘ 8186All buttons: Pink background ✓ 8187``` 8188 8189### Table Header Styling 8190 8191**PHP Rendering** (already worked): 8192```php 8193<thead><tr style="background: $themeStyles['header_bg']; 8194 color: $themeStyles['text_primary'];"> 8195``` 8196 8197**JavaScript Rebuild** (now fixed): 8198```javascript 8199const thead = container.querySelector('.calendar-compact-grid thead tr'); 8200thead.style.background = themeStyles.header_bg; 8201thead.style.color = themeStyles.text_primary; 8202thead.style.borderColor = themeStyles.grid_border; 8203``` 8204 8205### Navigation Button Styling 8206 8207**PHP Rendering**: 8208```php 8209// Before (inconsistent): 8210style="color: $text_primary; border-color: $border;" 8211 8212// After (matches Today): 8213style="background: $border; 8214 color: $bg; 8215 border-color: $border;" 8216``` 8217 8218**JavaScript Rebuild**: 8219```javascript 8220// Match Today button style: 8221const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg; 8222navBtns.forEach(btn => { 8223 btn.style.background = themeStyles.border; 8224 btn.style.color = btnTextColor; 8225 btn.style.borderColor = themeStyles.border; 8226}); 8227``` 8228 8229### Complete Theme Coverage 8230 8231**Calendar Container**: ✅ Themed 8232**Calendar Header**: ✅ Themed 8233**Navigation Buttons**: ✅ Themed (v4.7.4!) 8234**Today Button**: ✅ Themed 8235**Month Title**: ✅ Themed 8236**Table Grid**: ✅ Themed 8237**Table Header (S M T W...)**: ✅ Themed (v4.7.4!) 8238**Day Cells**: ✅ Themed 8239**Today Cell**: ✅ Themed 8240**Empty Cells**: ✅ Themed 8241**Event List Panel**: ✅ Themed 8242**Event List Header**: ✅ Themed 8243**Search Box**: ✅ Themed 8244**Add Button**: ✅ Themed 8245**Event Items**: ✅ Themed 8246**Past Events Toggle**: ✅ Themed 8247 8248**Every single element themed!** ✨ 8249 8250### Before vs After 8251 8252**BEFORE (v4.7.3)**: 8253``` 8254Header: [◀] Feb 2026 [▶] [Today] 8255 ↑ ↑ ↑ 8256 Border only Border Filled ← Inconsistent! 8257 8258S M T W T F S ← Gray after nav ✗ 8259``` 8260 8261**AFTER (v4.7.4)**: 8262``` 8263Header: [◀] Feb 2026 [▶] [Today] 8264 ↑ ↑ ↑ 8265 Filled Filled Filled ← Consistent! ✓ 8266 8267S M T W T F S ← Themed always ✓ 8268``` 8269 8270### Visual Consistency 8271 8272**Matrix Theme Example**: 8273``` 8274┌─────────────────────────────┐ 8275│ [◀] February 2026 [▶][Today]│ ← All green 8276├─────────────────────────────┤ 8277│ S M T W T F S │ ← Green text 8278├─┬─┬─┬─┬─┬─┬─────────────────┤ 8279│1│2│3│4│5│6│7 │ ← Dark cells 8280└─┴─┴─┴─┴─┴─┴─────────────────┘ 8281 8282Perfect visual harmony! ✓ 8283``` 8284 8285### Professional Theme Example 8286 8287**Light theme with proper contrast**: 8288``` 8289┌─────────────────────────────┐ 8290│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text 8291├─────────────────────────────┤ 8292│ S M T W T F S │ ← Dark text on light 8293├─┬─┬─┬─┬─┬─┬─────────────────┤ 8294│1│2│3│4│5│6│7 │ ← Light gray cells 8295└─┴─┴─┴─┴─┴─┴─────────────────┘ 8296 8297Readable and professional! ✓ 8298``` 8299 8300### Pink Theme Example 8301 8302**Maximum bling**: 8303``` 8304┌─────────────────────────────┐ 8305│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons 8306├─────────────────────────────┤ 8307│ S M T W T F S │ ← Pink text, glow 8308├─┬─┬─┬─┬─┬─┬─────────────────┤ 8309│1│2│3│4│5│6│7 ✨ │ ← Dark pink cells 8310└─┴─┴─┴─┴─┴─┴─────────────────┘ 8311 8312Sparkly perfection! ✓ 8313``` 8314 8315### Testing Checklist 8316 8317All scenarios tested and working: 8318 8319**Initial Load**: ✅ All elements themed 8320**Navigate Months**: ✅ Everything stays themed 8321**Jump to Today**: ✅ Everything stays themed 8322**Filter Events**: ✅ Everything stays themed 8323**Search Events**: ✅ Everything stays themed 8324**Expand Past Events**: ✅ Everything stays themed 8325 8326**No element ever loses theme!** 8327 8328## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS 8329 8330### Fixed: Theme Now Persists When JavaScript Rebuilds Event List 8331- **Fixed:** Event items now themed when changing months via AJAX 8332- **Fixed:** Past Events toggle now themed after navigation 8333- **Fixed:** JavaScript functions now read theme data from container 8334- **Result:** Theme persists perfectly through all interactions! 8335 8336### The Problem 8337 8338**v4.7.2 behavior**: 8339``` 8340Initial page load: Everything themed ✓ 8341 8342Navigate to next month (AJAX reload): 8343 Calendar grid: Themed ✓ (fixed in v4.7.1) 8344 Event items: Gray ✗ (theme lost!) 8345 Past toggle: Gray ✗ (theme lost!) 8346 8347JavaScript rebuild broke theming! 8348``` 8349 8350### The Root Cause 8351 8352**JavaScript functions didn't have access to theme data**: 8353 8354```javascript 8355// Before (broken): 8356window.renderEventItem = function(event, date, calId, namespace) { 8357 // No theme data available! 8358 let html = '<div style="border-left-color: ' + color + ';">'; 8359 // ↑ Missing theme colors 8360} 8361``` 8362 8363**Problem**: Theme styles were only in PHP, not accessible to JavaScript! 8364 8365### The Fix 8366 8367**Store theme in data attributes** (already done in v4.7.1): 8368```php 8369<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 8370``` 8371 8372**JavaScript reads theme from container**: 8373```javascript 8374// Get theme data 8375const container = document.getElementById(calId); 8376const themeStyles = JSON.parse(container.dataset.themeStyles); 8377 8378// Apply to event items 8379const itemStyle = 'border-left-color: ' + color + ';' + 8380 'background: ' + themeStyles.cell_bg + ';' + 8381 'color: ' + themeStyles.text_primary + ';'; 8382 8383// Apply to past toggle 8384const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' + 8385 'color: ' + themeStyles.text_dim + ';'; 8386``` 8387 8388### What Was Fixed 8389 8390**1. renderEventItem() function**: 8391```javascript 8392// Now gets theme from container: 8393const container = document.getElementById(calId); 8394let themeStyles = {}; 8395if (container && container.dataset.themeStyles) { 8396 themeStyles = JSON.parse(container.dataset.themeStyles); 8397} 8398 8399// Applies theme to event item: 8400style="border-left-color: ${color}; 8401 background: ${themeStyles.cell_bg}; 8402 color: ${themeStyles.text_primary};" 8403``` 8404 8405**2. renderEventListFromData() function**: 8406```javascript 8407// Gets theme at start: 8408const container = document.getElementById(calId); 8409const themeStyles = JSON.parse(container.dataset.themeStyles); 8410 8411// Applies to past events toggle: 8412const toggleStyle = 8413 'background: ' + themeStyles.cell_bg + ';' + 8414 'color: ' + themeStyles.text_dim + ';' + 8415 'border-color: ' + themeStyles.grid_border + ';'; 8416``` 8417 8418### Before vs After 8419 8420**BEFORE (v4.7.2)**: 8421``` 8422Load page with Matrix theme: 8423┌─────────────┬─────────────┐ 8424│ Calendar │ Events │ 8425│ (Green) ✓ │ (Green) ✓ │ 8426└─────────────┴─────────────┘ 8427 8428Click "›" to next month (AJAX): 8429┌─────────────┬─────────────┐ 8430│ Calendar │ Events │ 8431│ (Green) ✓ │ (Gray) ✗ │ ← Theme lost! 8432└─────────────┴─────────────┘ 8433``` 8434 8435**AFTER (v4.7.3)**: 8436``` 8437Load page with Matrix theme: 8438┌─────────────┬─────────────┐ 8439│ Calendar │ Events │ 8440│ (Green) ✓ │ (Green) ✓ │ 8441└─────────────┴─────────────┘ 8442 8443Click "›" to next month (AJAX): 8444┌─────────────┬─────────────┐ 8445│ Calendar │ Events │ 8446│ (Green) ✓ │ (Green) ✓ │ ← Theme stays! 8447└─────────────┴─────────────┘ 8448 8449Navigate anywhere - theme persists! ✓ 8450``` 8451 8452### Data Flow 8453 8454**Complete theme persistence**: 8455``` 84561. PHP: Store theme in data attributes 8457 data-theme-styles='{"bg":"#242424",...}' 8458 84592. JavaScript: Read on initial load 8460 ✓ Already working (v4.7.1) 8461 84623. JavaScript: Read on AJAX rebuild 8463 ✓ NOW FIXED (v4.7.3) 8464 const themeStyles = JSON.parse(container.dataset.themeStyles); 8465 84664. Apply to all rebuilt elements 8467 ✓ Event items 8468 ✓ Past toggle 8469 ✓ Calendar cells 8470``` 8471 8472### Testing Scenarios 8473 8474All work perfectly now: 8475 8476**Scenario 1: Navigate Months**: 8477``` 8478Feb (Matrix) → Click › → Mar (Matrix) ✓ 8479Theme persists through navigation 8480``` 8481 8482**Scenario 2: Change Year**: 8483``` 84842026 (Purple) → Change to 2027 (Purple) ✓ 8485Theme persists through year change 8486``` 8487 8488**Scenario 3: Jump to Today**: 8489``` 8490Any month (Pink) → Click Today → Current (Pink) ✓ 8491Theme persists when jumping 8492``` 8493 8494**Scenario 4: Filter Events**: 8495``` 8496All events (Professional) → Filter namespace → Filtered (Professional) ✓ 8497Theme persists through filtering 8498``` 8499 8500### All Themes Work 8501 8502** Matrix**: Green everywhere, always ✓ 8503** Purple**: Purple everywhere, always ✓ 8504** Professional**: Blue everywhere, always ✓ 8505** Pink**: Pink everywhere, always ✓ 8506 8507**No matter what you do, theme stays consistent!** 8508 8509## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING 8510 8511### Fixed: All Remaining Theme Issues 8512- **Fixed:** Event items in sidebar now use theme colors 8513- **Fixed:** Past Events toggle now uses theme colors 8514- **Fixed:** Calendar cells now properly themed (issue with data passing) 8515- **Result:** Every element now perfectly themed! 8516 8517### What Was Fixed 8518 8519**1. Event Items in Sidebar** (was plain): 8520```php 8521// Before: 8522style="border-left-color: $color;" 8523 8524// After: 8525style="border-left-color: $color; 8526 background: $themeStyles['cell_bg']; 8527 color: $themeStyles['text_primary'];" 8528``` 8529 8530**2. Past Events Toggle** (was plain): 8531```php 8532// Before: 8533<div class="past-events-toggle"> 8534 8535// After: 8536<div class="past-events-toggle" 8537 style="background: $themeStyles['cell_bg']; 8538 color: $themeStyles['text_dim']; 8539 border-color: $themeStyles['grid_border'];"> 8540``` 8541 8542**3. Theme Data Flow** (was broken): 8543```php 8544// Now properly passes theme to all functions: 8545renderEventListContent($events, $calId, $namespace, $themeStyles); 8546``` 8547 8548### Before vs After 8549 8550**BEFORE (v4.7.1)**: 8551``` 8552Calendar header: Themed ✓ 8553Calendar grid: Themed ✓ 8554Event list panel: Themed ✓ 8555Event items: Plain gray ✗ 8556Past Events: Plain gray ✗ 8557``` 8558 8559**AFTER (v4.7.2)**: 8560``` 8561Calendar header: Themed ✓ 8562Calendar grid: Themed ✓ 8563Event list panel: Themed ✓ 8564Event items: Themed ✓ 8565Past Events: Themed ✓ 8566 8567Everything matches! ✨ 8568``` 8569 8570### Matrix Theme Example 8571 8572**Complete theming**: 8573``` 8574┌─────────────┬─────────────┐ 8575│ February │ Events │ ← Green header 8576├─────────────┼─────────────┤ 8577│ Dark cells │ • Meeting │ ← Green bg & text 8578│ Green text │ • Review │ ← Green bg & text 8579│ Today=green │ │ 8580├─────────────┼─────────────┤ 8581│ │ ▶ Past (5) │ ← Green bg 8582└─────────────┴─────────────┘ 8583 8584All green! ✓ 8585``` 8586 8587### Purple Theme Example 8588 8589``` 8590┌─────────────┬─────────────┐ 8591│ February │ Events │ ← Purple header 8592├─────────────┼─────────────┤ 8593│ Dark purple │ • Meeting │ ← Purple bg 8594│ Lavender │ • Review │ ← Lavender text 8595│ cells │ │ 8596├─────────────┼─────────────┤ 8597│ │ ▶ Past (5) │ ← Purple bg 8598└─────────────┴─────────────┘ 8599 8600All purple! ✓ 8601``` 8602 8603### Professional Theme Example 8604 8605``` 8606┌─────────────┬─────────────┐ 8607│ February │ Events │ ← Blue header 8608├─────────────┼─────────────┤ 8609│ Light gray │ • Meeting │ ← Light bg 8610│ Blue accents│ • Review │ ← Dark text 8611│ cells │ │ 8612├─────────────┼─────────────┤ 8613│ │ ▶ Past (5) │ ← Light bg 8614└─────────────┴─────────────┘ 8615 8616All professional! ✓ 8617``` 8618 8619### Pink Theme Example 8620 8621``` 8622┌─────────────┬─────────────┐ 8623│ February │ Events │ ← Hot pink header 8624├─────────────┼─────────────┤ 8625│ Dark pink │ • Meeting │ ← Pink bg 8626│ Pink text │ • Review │ ← Pink text 8627│ cells │ │ 8628├─────────────┼─────────────┤ 8629│ │ ▶ Past (5) │ ← Pink bg 8630└─────────────┴─────────────┘ 8631 8632All pink & sparkly! ✓ 8633``` 8634 8635### What's Themed Now 8636 8637**Calendar Section**: 8638- ✅ Container border & shadow 8639- ✅ Header background & text 8640- ✅ Navigation buttons 8641- ✅ Today button 8642- ✅ Grid table 8643- ✅ Day cells 8644- ✅ Today cell highlight 8645- ✅ Empty cells 8646 8647**Event List Section**: 8648- ✅ Panel background 8649- ✅ Header background 8650- ✅ Header text 8651- ✅ Search box 8652- ✅ Add button 8653- ✅ Event items ← NEW! 8654- ✅ Past Events toggle ← NEW! 8655 8656**100% themed!** 8657 8658## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING 8659 8660### Fixed: Theme Now Persists When Changing Months 8661- **Fixed:** Calendar theme no longer resets to default when navigating months 8662- **Fixed:** Theme data now stored in data attributes and used by JavaScript 8663- **Added:** rebuildCalendar now applies theme styles to all cells 8664 8665### ✨ Added: Event List Panel Now Themed 8666- **Added:** Right sidebar event list now uses theme colors 8667- **Added:** Event list header themed 8668- **Added:** Search box themed 8669- **Added:** Add button themed 8670- **Result:** Complete theme consistency across entire calendar! 8671 8672### The Problems 8673 8674**Problem 1: Month Navigation Lost Theme**: 8675``` 8676Initial load: Matrix theme ✓ (green) 8677Click "›" to next month 8678Result: Gray calendar ✗ (theme lost!) 8679``` 8680 8681**Problem 2: Event List Not Themed**: 8682``` 8683Calendar grid: Themed ✓ 8684Event list (right side): Plain gray ✗ 8685Inconsistent! 8686``` 8687 8688### The Fixes 8689 8690**Fix 1: Store Theme in Data Attributes**: 8691 8692```php 8693// PHP stores theme data: 8694<div data-theme="matrix" 8695 data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 8696``` 8697 8698**Fix 2: JavaScript Uses Theme Data**: 8699 8700```javascript 8701// rebuildCalendar reads theme: 8702const theme = container.dataset.theme; 8703const themeStyles = JSON.parse(container.dataset.themeStyles); 8704 8705// Apply to cells: 8706const cellBg = isToday ? 8707 themeStyles.cell_today_bg : 8708 themeStyles.cell_bg; 8709``` 8710 8711**Fix 3: Theme Event List Panel**: 8712 8713```php 8714// Event list header: 8715style="background:{$themeStyles['header_bg']}; 8716 color:{$themeStyles['text_primary']};" 8717 8718// Event list container: 8719style="background:{$themeStyles['bg']};" 8720 8721// Search box: 8722style="background:{$themeStyles['cell_bg']}; 8723 color:{$themeStyles['text_primary']};" 8724 8725// Add button: 8726style="background:{$themeStyles['border']};" 8727``` 8728 8729### Before vs After 8730 8731**BEFORE (v4.7.0)**: 8732``` 8733Load page: Matrix theme everywhere ✓ 8734Navigate to next month: 8735 Calendar grid: Gray ✗ (theme lost) 8736 Event list: Gray ✗ (never themed) 8737``` 8738 8739**AFTER (v4.7.1)**: 8740``` 8741Load page: Matrix theme everywhere ✓ 8742Navigate to next month: 8743 Calendar grid: Matrix theme ✓ (preserved!) 8744 Event list: Matrix theme ✓ (themed!) 8745 8746Perfect consistency! ✨ 8747``` 8748 8749### What's Now Themed 8750 8751**Calendar Grid** (after navigation): 8752- ✅ Cell backgrounds 8753- ✅ Today cell highlight 8754- ✅ Empty cells 8755- ✅ Text colors 8756- ✅ Border colors 8757 8758**Event List Panel**: 8759- ✅ Panel background 8760- ✅ Header background & text 8761- ✅ Search box styling 8762- ✅ Add button colors 8763- ✅ Namespace badge 8764 8765### Technical Implementation 8766 8767**Data Flow**: 8768``` 87691. PHP: Get theme from config 8770 $theme = getSidebarTheme(); 8771 87722. PHP: Get theme styles 8773 $themeStyles = getSidebarThemeStyles($theme); 8774 87753. PHP: Store in data attributes 8776 data-theme="matrix" 8777 data-theme-styles='{...JSON...}' 8778 87794. JavaScript: Read on navigation 8780 const themeStyles = JSON.parse(container.dataset.themeStyles); 8781 87825. JavaScript: Apply to rebuilt elements 8783 style="background:${themeStyles.bg};" 8784``` 8785 8786**Result**: Theme persists across navigations! ✓ 8787 8788### All Themes Work Perfectly 8789 8790** Matrix**: 8791- Month change: Green ✓ 8792- Event list: Green ✓ 8793 8794** Purple**: 8795- Month change: Purple ✓ 8796- Event list: Purple ✓ 8797 8798** Professional**: 8799- Month change: Blue ✓ 8800- Event list: Blue ✓ 8801 8802** Pink**: 8803- Month change: Pink ✓ 8804- Event list: Pink ✓ 8805 8806**Fully consistent theming everywhere!** 8807 8808## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! 8809 8810### ✨ Major Feature: Themes Now Apply to Compact Calendar 8811- **Added:** Full theme support for {{calendar-compact}} 8812- **Added:** Matrix, Purple, Professional, and Pink themes 8813- **Added:** Consistent theming across sidebar and calendar 8814- **Result:** Beautiful, cohesive appearance! 8815 8816### What's New 8817 8818**All 4 themes now work on the calendar**: 8819- **Matrix** - Green cyberpunk (default) 8820- **Purple** - Royal purple elegance 8821- **Professional** - Clean business blue 8822- **Pink** - Sparkly pink bling 8823 8824**Set in Admin Panel** → Theme applies everywhere! 8825 8826### Before vs After 8827 8828**BEFORE (v4.6.8)**: 8829``` 8830Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓ 8831Calendar: Plain gray (no theme) ✗ 8832 8833Inconsistent appearance! 8834``` 8835 8836**AFTER (v4.7.0)**: 8837``` 8838Sidebar: Themed ✓ 8839Calendar: SAME THEME ✓ 8840 8841Perfectly consistent! ✨ 8842``` 8843 8844### Theme Showcase 8845 8846**Matrix Theme** (Green): 8847``` 8848┌─────────────────────────┐ 8849│ ◀ February 2026 ▶ │ ← Green header 8850├─────────────────────────┤ 8851│ Dark background │ 8852│ Green borders │ 8853│ Green text │ 8854│ Green glow effects │ 8855└─────────────────────────┘ 8856``` 8857 8858**Purple Theme**: 8859``` 8860┌─────────────────────────┐ 8861│ ◀ February 2026 ▶ │ ← Purple header 8862├─────────────────────────┤ 8863│ Dark purple background │ 8864│ Purple borders │ 8865│ Lavender text │ 8866│ Purple glow │ 8867└─────────────────────────┘ 8868``` 8869 8870**Professional Theme** (Light): 8871``` 8872┌─────────────────────────┐ 8873│ ◀ February 2026 ▶ │ ← Blue header 8874├─────────────────────────┤ 8875│ Light gray background │ 8876│ Blue accents │ 8877│ Professional appearance │ 8878│ Clean, business-ready │ 8879└─────────────────────────┘ 8880``` 8881 8882**Pink Theme** (Bling): 8883``` 8884┌─────────────────────────┐ 8885│ ◀ February 2026 ▶ │ ← Hot pink header 8886├─────────────────────────┤ 8887│ Dark pink background │ 8888│ Pink borders & glow │ 8889│ Pink text │ 8890│ Sparkle effects ✨ │ 8891└─────────────────────────┘ 8892``` 8893 8894### What's Themed 8895 8896**Calendar Container**: 8897- Background color 8898- Border color 8899- Shadow/glow effect 8900 8901**Calendar Header**: 8902- Background gradient 8903- Border color 8904- Text color 8905- Button colors 8906 8907**Calendar Grid**: 8908- Grid background 8909- Grid borders 8910- Header row colors 8911 8912**Calendar Cells**: 8913- Cell background 8914- Today cell highlight 8915- Text color 8916- Border colors 8917 8918### Implementation 8919 8920**Theme Detection**: 8921```php 8922// Same theme system as sidebar 8923$theme = $this->getSidebarTheme(); 8924$themeStyles = $this->getSidebarThemeStyles($theme); 8925``` 8926 8927**Applied to Container**: 8928```php 8929style="background:' . $themeStyles['bg'] . '; 8930 border:2px solid ' . $themeStyles['border'] . '; 8931 box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';" 8932``` 8933 8934**Applied to Header**: 8935```php 8936style="background:' . $themeStyles['header_bg'] . '; 8937 color:' . $themeStyles['text_primary'] . ';" 8938``` 8939 8940**Applied to Cells**: 8941```php 8942$cellBg = $isToday ? 8943 $themeStyles['cell_today_bg'] : 8944 $themeStyles['cell_bg']; 8945``` 8946 8947### How to Change Theme 8948 8949**In Admin Panel**: 89501. Go to Admin → Calendar Management 89512. Click " Themes" tab 89523. Select theme (Matrix/Purple/Professional/Pink) 89534. Theme applies to BOTH sidebar and calendar! ✓ 8954 8955**No configuration needed** - Just select and enjoy! 8956 8957### Theme Colors 8958 8959**Matrix**: 8960- Background: `#242424` (dark gray) 8961- Border: `#00cc07` (matrix green) 8962- Text: `#00cc07` (green) 8963- Today: `#2a4d2a` (green highlight) 8964 8965**Purple**: 8966- Background: `#2a2030` (dark purple) 8967- Border: `#9b59b6` (royal purple) 8968- Text: `#b19cd9` (lavender) 8969- Today: `#3d2b4d` (purple highlight) 8970 8971**Professional**: 8972- Background: `#e8ecf1` (light blue-gray) 8973- Border: `#4a90e2` (business blue) 8974- Text: `#2c3e50` (dark blue-gray) 8975- Today: `#dce8f7` (light blue highlight) 8976 8977**Pink**: 8978- Background: `#1a0d14` (dark pink-black) 8979- Border: `#ff1493` (hot pink) 8980- Text: `#ff69b4` (pink) 8981- Today: `#3d2030` (pink highlight) 8982 8983### Consistency 8984 8985**Both use same theme**: 8986``` 8987Admin Panel → Set theme to "Purple" 8988 8989{{calendar}} sidebar: Purple theme ✓ 8990{{calendar-compact}}: Purple theme ✓ 8991{{calendar-panel}}: Will be themed next! ✓ 8992 8993All calendars match! ✨ 8994``` 8995 8996**Perfectly coordinated appearance!** 8997 8998## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER 8999 9000### Documentation: Added noheader Parameter Info 9001- **Added:** Documentation for existing `noheader` parameter 9002- **Updated:** README with complete eventlist parameter list 9003- **Info:** Feature already existed, just wasn't documented! 9004 9005### The noheader Parameter 9006 9007**What it does**: Hides the clock/date/weather header in eventlist 9008 9009**Usage**: 9010``` 9011{{eventlist today noheader}} 9012``` 9013 9014**Before (with header)**: 9015``` 9016┌─────────────────────────────────┐ 9017│ 3:45 PM ️ 72° Feb 7 │ ← Clock header 9018├─────────────────────────────────┤ 9019│ 5 min load │ CPU │ Memory │ ← System stats 9020├─────────────────────────────────┤ 9021│ Today's Events │ 9022│ • 10:00 Team Meeting │ 9023│ • 2:00 Project Review │ 9024└─────────────────────────────────┘ 9025``` 9026 9027**After (noheader)**: 9028``` 9029┌─────────────────────────────────┐ 9030│ Today's Events │ ← No header! 9031│ • 10:00 Team Meeting │ 9032│ • 2:00 Project Review │ 9033└─────────────────────────────────┘ 9034 9035Cleaner, more compact! ✓ 9036``` 9037 9038### When to Use noheader 9039 9040**Use WITH header** (default): 9041- Dashboard view 9042- Want to see current time 9043- Want weather info 9044- Want system stats 9045 9046**Use WITHOUT header** (`noheader`): 9047- Embedded in page content 9048- Just want event list 9049- Minimal design 9050- Space-constrained 9051 9052### Complete eventlist Parameters 9053 9054**Date Parameters**: 9055``` 9056date=YYYY-MM-DD Show specific date 9057daterange=START:END Show date range 9058``` 9059 9060**Filter Parameters**: 9061``` 9062namespace=name Filter by namespace 9063``` 9064 9065**Display Parameters**: 9066``` 9067today Show today with live clock 9068noheader Hide clock/date/weather header 9069showchecked Show completed tasks 9070range=day|week|month Show day/week/month range 9071``` 9072 9073### Examples 9074 9075**Full featured** (dashboard): 9076``` 9077{{eventlist today}} 9078``` 9079Shows: Clock, weather, system stats, events ✓ 9080 9081**Minimal** (embedded): 9082``` 9083{{eventlist today noheader}} 9084``` 9085Shows: Just events ✓ 9086 9087**Date range without header**: 9088``` 9089{{eventlist daterange=2026-02-01:2026-02-28 noheader}} 9090``` 9091Shows: Events for February, no header ✓ 9092 9093**With namespace filter**: 9094``` 9095{{eventlist today namespace=work noheader}} 9096``` 9097Shows: Today's work events, no header ✓ 9098 9099### Implementation 9100 9101**Already existed in code** (line 833): 9102```php 9103$noheader = isset($data['noheader']) ? true : false; 9104``` 9105 9106**Applied at render** (line 1010): 9107```php 9108if ($today && !empty($allEvents) && !$noheader) { 9109 // Render clock header with date/time/weather 9110} 9111``` 9112 9113**Just wasn't documented!** Now it is. ✓ 9114 9115## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE 9116 9117### ✨ Improvement: Removed Filter Badge Above Sidebar 9118- **Removed:** Filter badge no longer shows above compact calendar 9119- **Reason:** Filtering is already clearly visible in the calendar view 9120- **Result:** Cleaner UI, less redundancy 9121 9122### What Changed 9123 9124**BEFORE**: 9125``` 9126┌─────────────────────────┐ 9127│ Filtering: work ✕ │ ← Badge above calendar 9128├─────────────────────────┤ 9129│ ◀ February 2026 ▶ │ 9130├─────────────────────────┤ 9131│ Calendar grid with │ 9132│ filtered events │ ← Already filtered 9133└─────────────────────────┘ 9134 9135Badge was redundant - you can already see 9136the filtering in the calendar! 9137``` 9138 9139**AFTER**: 9140``` 9141┌─────────────────────────┐ 9142│ ◀ February 2026 ▶ │ ← No badge! 9143├─────────────────────────┤ 9144│ Calendar grid with │ 9145│ filtered events │ ← Filtering visible here 9146└─────────────────────────┘ 9147 9148Cleaner, simpler UI ✓ 9149``` 9150 9151### Why Remove It? 9152 9153**Redundant Information**: 9154- Calendar already shows only filtered events 9155- Namespace badges on events show which namespace 9156- Badge added visual clutter without value 9157 9158**Better UX**: 9159- Less visual noise 9160- More space for content 9161- Filtering still obvious from event display 9162 9163**Code Cleanup**: 9164```php 9165// Old code (removed): 9166if ($namespace && $namespace !== '*' && ...) { 9167 $html .= '<div class="calendar-namespace-filter">'; 9168 $html .= 'Filtering: ' . $namespace . ' ✕'; 9169 $html .= '</div>'; 9170} 9171 9172// New code: 9173// Filter badge removed - filtering shown in calendar view only 9174``` 9175 9176### How Filtering Still Works 9177 9178**Filtering IS Active**: 9179- Calendar only shows events from selected namespace ✓ 9180- Event namespace badges show which namespace ✓ 9181- Clear filtering still works (in calendar) ✓ 9182 9183**Just No Badge**: 9184- No redundant "Filtering: work ✕" above calendar 9185- Cleaner, more professional appearance 9186 9187### What You Still See 9188 9189**Namespace Information**: 9190``` 9191Event with namespace badge: 9192┌────────────────────────┐ 9193│ 10:00 Team Meeting │ 9194│ [work] ←─────────┼─ Namespace badge on event 9195└────────────────────────┘ 9196``` 9197 9198**Filtered View**: 9199- Only events from selected namespace visible 9200- Empty dates show no events 9201- Clear which namespace you're viewing 9202 9203**No Need for Top Badge**: 9204- Already obvious from events shown 9205- Namespace badges provide context 9206- Less clutter! 9207 9208### Summary 9209 9210**Removed**: Filter badge above calendar 9211**Kept**: All filtering functionality 9212**Benefit**: Cleaner UI 9213 9214**Filtering works the same, just without the redundant badge!** ✨ 9215 9216## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY 9217 9218### Fixed: Filter Badge Now Disappears Immediately 9219- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕ 9220- **Added:** Badge removal before page reload/AJAX call 9221- **Result:** Badge disappears instantly, no waiting for reload 9222 9223### The Problem 9224 9225**v4.6.5 behavior**: 9226``` 9227Click ✕ to clear filter 9228→ Page reloads or AJAX fires 9229→ Badge stays visible during reload ✗ 9230→ Badge finally disappears after reload ✓ 9231 9232User sees badge for 0.5-2 seconds after clicking ✕ 9233Feels laggy! ✗ 9234``` 9235 9236### The Fix 9237 9238**Immediately remove badge from DOM**: 9239 9240```javascript 9241window.clearNamespaceFilter = function(calId) { 9242 const container = document.getElementById(calId); 9243 9244 // IMMEDIATELY hide/remove the filter badge 9245 const filterBadge = container.querySelector('.calendar-namespace-filter'); 9246 if (filterBadge) { 9247 filterBadge.style.display = 'none'; // Hide instantly 9248 filterBadge.remove(); // Remove from DOM 9249 } 9250 9251 // THEN reload (AJAX or page reload) 9252 navCalendar(...) or window.location.href = ... 9253}; 9254``` 9255 9256### Before vs After 9257 9258**BEFORE (v4.6.5)**: 9259``` 9260Time 0ms: Click ✕ 9261┌─────────────────────────┐ 9262│ Filtering: work ✕ │ ← Still visible 9263├─────────────────────────┤ 9264 9265Time 500ms: Reload completes 9266┌─────────────────────────┐ 9267│ (no badge) │ ← Finally gone 9268├─────────────────────────┤ 9269 9270Delay: 500-2000ms ✗ 9271``` 9272 9273**AFTER (v4.6.6)**: 9274``` 9275Time 0ms: Click ✕ 9276┌─────────────────────────┐ 9277│ (no badge) │ ← Gone immediately! 9278├─────────────────────────┤ 9279 9280Time 500ms: Reload completes 9281┌─────────────────────────┐ 9282│ (no badge) │ ← Still gone 9283├─────────────────────────┤ 9284 9285Delay: 0ms ✓ 9286Instant feedback! ✓ 9287``` 9288 9289### Implementation 9290 9291**Two-step removal**: 9292 9293**Step 1**: Hide immediately 9294```javascript 9295filterBadge.style.display = 'none'; 9296// User sees badge disappear instantly 9297``` 9298 9299**Step 2**: Remove from DOM 9300```javascript 9301filterBadge.remove(); 9302// Clean up HTML 9303``` 9304 9305**Step 3**: Reload 9306```javascript 9307// Sidebar: Page reload 9308window.location.href = url.toString(); 9309 9310// Calendar: AJAX reload 9311navCalendar(calId, year, month, originalNamespace); 9312``` 9313 9314**Result**: Badge gone BEFORE reload starts ✓ 9315 9316### Why This Matters 9317 9318**User Experience**: 9319- Old: Click ✕ → Wait → Badge disappears 9320- New: Click ✕ → Badge disappears instantly 9321 9322**Perceived Performance**: 9323- Instant visual feedback 9324- Feels responsive 9325- Professional UX 9326 9327**Technical**: 9328- DOM manipulation is synchronous (instant) 9329- Network requests are asynchronous (slow) 9330- Do fast things first! 9331 9332**Badge now disappears the moment you click ✕!** ⚡ 9333 9334## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING 9335 9336### Fixed: Filter Badge Not Clearing in Sidebar 9337- **Fixed:** Filter badge now properly clears when clicking ✕ button 9338- **Fixed:** Sidebar widget now reloads page without namespace filter 9339- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately 9340 9341### The Problem 9342 9343**In {{calendar}} sidebar widget**: 9344``` 93451. Click namespace badge to filter 93462. Badge appears: "Filtering: work ✕" 93473. Click ✕ to clear filter 93484. Badge stays visible! ✗ 93495. Events still filtered! ✗ 9350``` 9351 9352**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar. 9353 9354### The Fix 9355 9356**Detect widget type and handle appropriately**: 9357 9358```javascript 9359window.clearNamespaceFilter = function(calId) { 9360 const container = document.getElementById(calId); 9361 9362 // Check if this is a sidebar widget 9363 const sidebarContainer = document.getElementById('sidebar-widget-' + calId); 9364 9365 if (sidebarContainer) { 9366 // SIDEBAR: Reload page without namespace parameter 9367 const url = new URL(window.location.href); 9368 url.searchParams.delete('namespace'); 9369 window.location.href = url.toString(); // Page reload 9370 return; 9371 } 9372 9373 // REGULAR CALENDAR: AJAX reload 9374 navCalendar(calId, year, month, originalNamespace); 9375}; 9376``` 9377 9378### How It Works 9379 9380**Sidebar Widget** ({{calendar}} syntax): 9381``` 9382Rendered server-side with PHP 9383Cannot be AJAX-reloaded 9384Solution: Reload entire page without ?namespace=work parameter 9385``` 9386 9387**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}): 9388``` 9389Has AJAX reload capability 9390Solution: Call navCalendar() to reload via AJAX 9391``` 9392 9393### Before vs After 9394 9395**BEFORE (v4.6.4)**: 9396``` 9397Sidebar widget filtered by "work": 9398┌─────────────────────────┐ 9399│ Filtering: work ✕ │ ← Click ✕ 9400├─────────────────────────┤ 9401│ Today │ 9402│ • Work meeting │ 9403└─────────────────────────┘ 9404 9405After clicking ✕: 9406┌─────────────────────────┐ 9407│ Filtering: work ✕ │ ← Still there! ✗ 9408├─────────────────────────┤ 9409│ Today │ 9410│ • Work meeting │ ← Still filtered! ✗ 9411└─────────────────────────┘ 9412``` 9413 9414**AFTER (v4.6.5)**: 9415``` 9416Sidebar widget filtered by "work": 9417┌─────────────────────────┐ 9418│ Filtering: work ✕ │ ← Click ✕ 9419├─────────────────────────┤ 9420│ Today │ 9421│ • Work meeting │ 9422└─────────────────────────┘ 9423 9424After clicking ✕ → Page reloads: 9425┌─────────────────────────┐ 9426│ (no filter badge) │ ← Cleared! ✓ 9427├─────────────────────────┤ 9428│ Today │ 9429│ • Work meeting │ 9430│ • Personal task │ ← All events! ✓ 9431│ • Project review │ 9432└─────────────────────────┘ 9433``` 9434 9435### Technical Details 9436 9437**Why Page Reload for Sidebar?** 9438 9439Sidebar widget is rendered server-side: 9440```php 9441// In syntax.php: 9442return $this->renderSidebarWidget($events, $namespace, $calId); 9443// ↑ PHP generates complete HTML 9444// No AJAX reload endpoint exists for sidebar 9445``` 9446 9447**Solution**: Remove `?namespace=work` from URL and reload page 9448```javascript 9449const url = new URL(window.location.href); 9450url.searchParams.delete('namespace'); // Remove filter 9451window.location.href = url.toString(); // Reload 9452``` 9453 9454**Why AJAX for Regular Calendar?** 9455 9456Regular calendars have AJAX endpoints: 9457```javascript 9458// action.php handles: 9459action: 'load_month' → Returns new month data 9460navCalendar() → Fetches and rebuilds calendar 9461``` 9462 9463### Filter Badge Behavior 9464 9465**Showing Badge** (when filtering): 9466- Server-side: PHP renders badge in HTML 9467- Client-side: JavaScript adds badge to header 9468 9469**Clearing Badge**: 9470- Sidebar: Page reload (removes ?namespace from URL) 9471- Calendar: AJAX reload (badge removed in rebuildCalendar) 9472 9473**Now works correctly for both!** ✓ 9474 9475## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR 9476 9477### Critical Hotfix: Fixed PHP Parse Error 9478- **Fixed:** Template literal backticks causing PHP syntax error 9479- **Fixed:** Changed JavaScript template literals to concatenation 9480- **Fixed:** Admin page now loads without parse errors 9481 9482### The Problem 9483 9484**v4.6.3 broke admin page**: 9485``` 9486Error loading plugin calendar 9487ParseError: syntax error, unexpected identifier "s", 9488expecting "," or ";" 9489``` 9490 9491**Cause**: JavaScript template literals inside PHP echo 9492```php 9493echo '<script> 9494 let nsOptions = `<option value="">(default)</option>`; 9495 ↑ PHP sees backtick and gets confused! 9496</script>'; 9497``` 9498 9499**Why it broke**: Backticks (`) are special in PHP too! 9500 9501### The Fix 9502 9503**Changed from template literals to concatenation**: 9504 9505**BEFORE (broken)**: 9506```javascript 9507let nsOptions = `<option value="">(default)</option>`; 9508nsOptions += `<option value="${namespace}">${namespace}</option>`; 9509console.log('Edit recurring:', namespace); 9510``` 9511 9512**AFTER (fixed)**: 9513```javascript 9514let nsOptions = "<option value=\\"\\">(default)</option>"; 9515nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>"; 9516console.log("Edit recurring:", namespace); 9517``` 9518 9519**Changes**: 9520- ✅ Backticks (`) → Double quotes (") 9521- ✅ Template literals (${var}) → Concatenation (" + var + ") 9522- ✅ Single quotes in console.log → Double quotes 9523- ✅ Properly escaped quotes for PHP echo 9524 9525### Technical Details 9526 9527**The Issue**: 9528```php 9529// Inside PHP echo string: 9530echo '<script> 9531 let x = `template ${literal}`; // ✗ Backtick breaks PHP! 9532</script>'; 9533``` 9534 9535**The Solution**: 9536```php 9537// Use regular string concatenation: 9538echo '<script> 9539 let x = "string " + variable; // ✓ Works in PHP echo! 9540</script>'; 9541``` 9542 9543**Quote Escaping**: 9544```javascript 9545// Double quotes inside PHP single-quote string: 9546'<option value=\"\">text</option>' 9547 ↑↑ Escaped for JavaScript 9548``` 9549 9550### Result 9551 9552**Before**: Admin page crashed with parse error ✗ 9553**After**: Admin page loads perfectly ✓ 9554 9555**No functionality changed - just syntax fix!** 9556 9557## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN 9558 9559### Critical Fix: Namespace Dropdown in Recurring Events Section 9560- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing 9561- **Fixed:** Current namespace now properly selected in dropdown 9562- **Fixed:** Namespace extraction from DOM now uses multiple methods 9563- **Added:** Console logging to debug namespace detection 9564 9565### The Problem 9566 9567**When editing from Recurring Events section**: 9568``` 9569Click "Edit" on recurring event 9570Namespace dropdown shows: 9571- (default) 9572- (nothing else!) ✗ 9573 9574Can't select any namespace! ✗ 9575``` 9576 9577**Why**: Broken namespace extraction logic 9578```javascript 9579// OLD CODE (broken): 9580const namespaces = Array.from(document.querySelectorAll("[id^=ns_]")) 9581 .map(el => { 9582 // Complex parsing that often failed 9583 const nsSpan = el.querySelector("span:nth-child(3)"); 9584 return nsSpan.textContent.replace(" ", "").trim(); 9585 }) 9586 .filter(ns => ns !== namespace); // Excluded current! ✗ 9587``` 9588 9589**Result**: Empty dropdown, can't change namespace! ✗ 9590 9591### The Fix 9592 9593**NEW CODE (robust)**: 9594```javascript 9595const namespaces = new Set(); 9596 9597// Method 1: Namespace explorer folders 9598document.querySelectorAll("[id^=ns_]").forEach(el => { 9599 const nsSpan = el.querySelector("span:nth-child(3)"); 9600 if (nsSpan) { 9601 let nsText = nsSpan.textContent.replace(" ", "").trim(); 9602 if (nsText && nsText !== "(default)") { 9603 namespaces.add(nsText); // ✓ 9604 } 9605 } 9606}); 9607 9608// Method 2: Datalist (backup method) 9609document.querySelectorAll("#namespaceList option").forEach(opt => { 9610 if (opt.value && opt.value !== "") { 9611 namespaces.add(opt.value); // ✓ 9612 } 9613}); 9614 9615// Build dropdown with ALL namespaces 9616let options = `<option value="">(default)</option>`; 9617 9618// Show current namespace as selected 9619if (namespace) { 9620 options += `<option value="${namespace}" selected>${namespace} (current)</option>`; 9621} 9622 9623// Show all other namespaces 9624for (const ns of nsArray) { 9625 if (ns !== namespace) { 9626 options += `<option value="${ns}">${ns}</option>`; 9627 } 9628} 9629``` 9630 9631**Result**: All namespaces visible! ✓ 9632 9633### How It Works Now 9634 9635**Before (Broken)**: 9636``` 9637Edit recurring event in "work" namespace 9638 9639Dropdown shows: 9640☐ (default) 9641 9642That's it! Can't select anything! ✗ 9643``` 9644 9645**After (Fixed)**: 9646``` 9647Edit recurring event in "work" namespace 9648 9649Dropdown shows: 9650☐ (default) 9651☑ work (current) ← Selected! 9652☐ personal 9653☐ projects 9654☐ meetings 9655 9656All namespaces available! ✓ 9657``` 9658 9659### Key Improvements 9660 9661**1. Dual extraction methods**: 9662- Primary: Parse namespace explorer DOM 9663- Backup: Read from datalist 9664- Result: Always finds namespaces ✓ 9665 9666**2. Current namespace included**: 9667```javascript 9668// OLD: Excluded current namespace 9669.filter(ns => ns !== namespace) ✗ 9670 9671// NEW: Include and mark as selected 9672options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓ 9673``` 9674 9675**3. Better error handling**: 9676```javascript 9677if (nsSpan) { // Check exists 9678 let nsText = nsSpan.textContent.replace(" ", "").trim(); 9679 if (nsText && nsText !== "(default)") { // Validate 9680 namespaces.add(nsText); 9681 } 9682} 9683``` 9684 9685**4. Console debugging**: 9686```javascript 9687console.log('Edit recurring - Current namespace:', namespace); 9688console.log('Available namespaces:', nsArray); 9689``` 9690 9691Open browser console (F12) to see what namespaces are detected! 9692 9693### Example Usage 9694 9695**Scenario**: Edit recurring "Team Meeting" in "work" namespace 9696 9697**Steps**: 96981. Go to Recurring Events section 96992. Click "Edit" on "Team Meeting" 97003. See namespace dropdown: 9701 - ☐ (default) 9702 - ☑ work (current) 9703 - ☐ personal 9704 - ☐ projects 97054. Select "personal" to move event 97065. Click "Save Changes" 97076. Event moved to "personal" namespace ✓ 9708 9709**Finally works as expected!** 9710 9711## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION 9712 9713### Recurring Events Namespace Fix 9714- **Fixed:** Namespace now properly preserved when editing recurring events 9715- **Fixed:** Namespace selector now allows selecting any namespace (not just default) 9716- **Added:** Better logging for namespace preservation debugging 9717- **Added:** Console logging to track namespace values during edit 9718 9719### The Namespace Problem 9720 9721**Issue 1**: Can't select non-default namespace 9722``` 9723When editing recurring event: 9724- Dropdown shows all namespaces ✓ 9725- User selects "work" 9726- Form submits with "" (empty/default) ✗ 9727``` 9728 9729**Issue 2**: Namespace not preserved 9730``` 9731Recurring event in "personal" namespace 9732Edit the title only 9733After save: namespace changed to "" (default) ✗ 9734``` 9735 9736### The Fixes 9737 9738**Fix 1**: Better namespace preservation logic 9739```php 9740// When editing recurring event: 9741$existingNamespace = $existingEventData['namespace']; 9742 9743// Preserve if user didn't explicitly change it: 9744if (empty($namespace) || 9745 strpos($namespace, '*') !== false || 9746 strpos($namespace, ';') !== false) { 9747 // User didn't select or selected wildcard 9748 $namespace = $existingNamespace; // Keep existing! 9749} 9750``` 9751 9752**Fix 2**: Proper form population 9753```javascript 9754// When editing, set BOTH inputs: 9755namespaceHidden.value = event.namespace || ''; // Hidden (submitted) 9756namespaceSearch.value = event.namespace || '(default)'; // Visible 9757 9758// Plus logging: 9759console.log('Set namespace for editing:', event.namespace); 9760``` 9761 9762**Fix 3**: Added detailed logging 9763```php 9764error_log("Preserving namespace '$namespace' (received='$receivedNamespace')"); 9765error_log("Using new namespace '$namespace'"); 9766error_log("No existing namespace to preserve"); 9767``` 9768 9769### How It Works Now 9770 9771**Scenario 1**: Edit without changing namespace 9772``` 9773Event in "work" namespace 9774Edit title to "Updated Meeting" 9775Namespace field shows: "work" 9776Hidden input value: "work" 9777Result: Saved in "work" ✓ 9778``` 9779 9780**Scenario 2**: Change namespace during edit 9781``` 9782Event in "personal" namespace 9783Edit and select "work" namespace 9784Hidden input value: "work" 9785Result: Saved in "work" ✓ 9786``` 9787 9788**Scenario 3**: Edit with empty/wildcard namespace 9789``` 9790Event in "projects" namespace 9791Namespace field empty or shows "personal;work" 9792System preserves: "projects" 9793Result: Saved in "projects" ✓ 9794``` 9795 9796### Debugging 9797 9798Now with console logging, you can see: 9799```javascript 9800Set namespace for editing: work 9801Hidden value: work 9802``` 9803 9804And in PHP logs: 9805``` 9806Calendar saveEvent recurring: Loaded existing data - namespace='work' 9807Calendar saveEvent recurring: Preserving namespace 'work' (received='') 9808``` 9809 9810**Namespace preservation now works correctly!** 9811 9812## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA 9813 9814### Recurring Events Edit Fix 9815- **Fixed:** Editing recurring events now preserves unchanged fields 9816- **Fixed:** Empty fields no longer erase existing data 9817- **Added:** Smart merge of existing event data with new changes 9818 9819### The Problem 9820 9821**Before**: Editing erased unchanged fields! 9822``` 9823Original recurring event: 9824- Title: "Team Meeting" 9825- Time: "10:00 AM" 9826- Description: "Weekly standup with engineering team" 9827- Color: Red 9828 9829User edits ONLY the title to "Staff Meeting" 9830Form sends: 9831- Title: "Staff Meeting" ✓ 9832- Time: "" ✗ (empty because user didn't change it) 9833- Description: "" ✗ (empty) 9834- Color: "#3498db" ✗ (default blue) 9835 9836Result after save: 9837- Title: "Staff Meeting" ✓ 9838- Time: BLANK ✗ 9839- Description: BLANK ✗ 9840- Color: Blue ✗ 9841``` 9842 9843**All the other data was lost!** ✗ 9844 9845### The Fix 9846 9847**After**: Preserves unchanged data! 9848```php 9849if ($eventId && $isRecurring) { 9850 // Load existing event data 9851 $existingEventData = getExistingEventData($eventId); 9852 9853 // Merge: use new value OR keep existing 9854 $title = $title ?: $existingEventData['title']; 9855 $time = $time ?: $existingEventData['time']; 9856 $description = $description ?: $existingEventData['description']; 9857 $color = ($color === '#3498db') ? 9858 $existingEventData['color'] : $color; 9859} 9860``` 9861 9862**Now**: 9863``` 9864User edits ONLY the title to "Staff Meeting" 9865 9866System: 98671. Loads existing event data 98682. Merges: new title + existing time/description/color 98693. Saves merged data 9870 9871Result: 9872- Title: "Staff Meeting" ✓ (changed) 9873- Time: "10:00 AM" ✓ (preserved!) 9874- Description: "Weekly standup..." ✓ (preserved!) 9875- Color: Red ✓ (preserved!) 9876``` 9877 9878**Only changed fields are updated!** ✓ 9879 9880### How It Works 9881 9882**Step 1**: Load existing data 9883```php 9884$existingEventData = $this->getExistingEventData( 9885 $eventId, 9886 $date, 9887 $namespace 9888); 9889``` 9890 9891**Step 2**: Merge with new data 9892```php 9893// If new value is empty, use existing value 9894$title = $newTitle ?: $existingEventData['title']; 9895$time = $newTime ?: $existingEventData['time']; 9896$description = $newDesc ?: $existingEventData['description']; 9897 9898// Special handling for color (default is #3498db) 9899if ($newColor === '#3498db' && $existingEventData['color']) { 9900 $color = $existingEventData['color']; 9901} 9902``` 9903 9904**Step 3**: Save merged data 9905```php 9906createRecurringEvents(..., $title, $time, $description, $color, ...); 9907``` 9908 9909### Fields Preserved 9910 9911When editing recurring events, these fields are now preserved if not changed: 9912- ✅ Title (if left blank) 9913- ✅ Time (if not specified) 9914- ✅ End Time (if not specified) 9915- ✅ Description (if left empty) 9916- ✅ Color (if still default blue) 9917 9918**Edit only what you want to change - everything else stays!** 9919 9920## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX 9921 9922### ✨ New Feature: Rename Namespaces 9923- **Added:** ✏️ Rename button in Namespace Explorer 9924- **Added:** Rename all events in a namespace at once 9925- **Added:** Automatic cleanup of old directory structure 9926 9927### Critical Fix: Recurring Events Actually Edit Now! 9928- **Fixed:** Editing recurring events now deletes ALL instances 9929- **Fixed:** Previously only deleted one instance, left orphans 9930- **Fixed:** Recurring events properly regenerated on edit 9931 9932### Namespace Rename Feature 9933 9934**Before**: Could only delete namespaces, not rename 9935 9936**After**: Click ✏️ to rename! 9937 9938``` 9939 work (15 events) [3] [✏️] [️] 9940 ↑ NEW! 9941``` 9942 9943**How It Works**: 99441. Click ✏️ rename button 99452. Enter new namespace name 99463. All events moved to new namespace 99474. Event `namespace` field updated in JSON 99485. Old directory cleaned up 9949 9950**Example**: 9951``` 9952Rename: "work" → "business" 9953 9954Before: 9955/data/meta/work/calendar/*.json 9956Events: {namespace: "work"} 9957 9958After: 9959/data/meta/business/calendar/*.json 9960Events: {namespace: "business"} 9961``` 9962 9963**Implementation**: 9964```php 9965private function renameNamespace() { 9966 // 1. Validate new name 9967 // 2. Rename directory 9968 // 3. Update all event namespace fields in JSON 9969 // 4. Clean up old empty directories 9970} 9971``` 9972 9973### Recurring Events Fix - The Problem 9974 9975**Before**: Editing didn't work! 9976``` 9977Original recurring event generates: 9978- Event-0 (Mon, Feb 10) 9979- Event-1 (Mon, Feb 17) 9980- Event-2 (Mon, Feb 24) 9981 9982User edits Event-0, changes title to "Updated" 9983 9984What SHOULD happen: 9985- Delete Event-0, Event-1, Event-2 9986- Generate new instances with "Updated" title 9987 9988What ACTUALLY happened: 9989- Delete Event-0 only ✗ 9990- Generate new instances 9991- Result: Event-1 and Event-2 still show old title! ✗ 9992``` 9993 9994**After**: Properly deletes ALL instances! 9995 9996**The Fix**: 9997```php 9998private function deleteEvent() { 9999 $event = getEvent($eventId); 10000 10001 // Check if recurring 10002 if ($event['recurring'] && $event['recurringId']) { 10003 // Delete ALL instances with same recurringId 10004 deleteAllRecurringInstances($recurringId); 10005 } 10006 10007 // Then normal delete for spanning events 10008} 10009 10010private function deleteAllRecurringInstances($recurringId) { 10011 // Scan ALL calendar JSON files 10012 foreach (glob('*.json') as $file) { 10013 // Filter out events with matching recurringId 10014 $events = array_filter($events, function($event) { 10015 return $event['recurringId'] !== $recurringId; 10016 }); 10017 } 10018} 10019``` 10020 10021**Result**: 10022- Edit "Weekly Team Meeting" → ALL instances updated ✓ 10023- Delete recurring event → ALL instances deleted ✓ 10024- No more orphaned events! ✓ 10025 10026### Recurring Event Fields 10027 10028Every recurring event has: 10029```json 10030{ 10031 "id": "abc123-0", 10032 "recurring": true, 10033 "recurringId": "abc123", ← Links all instances 10034 ... 10035} 10036``` 10037 10038When editing/deleting, we find ALL events with same `recurringId` and remove them! 10039 10040**Finally, recurring events work properly!** 10041 10042## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS 10043 10044### Important Events Sorting - ACTUALLY FIXED! 10045- **Fixed:** Important Events now REALLY sorted by date first, then time 10046- **Fixed:** renderSidebarSection was re-sorting and breaking the order 10047- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only 10048 10049### Pink Theme Tooltip Bling! 10050- **Added:** Pink gradient tooltips (hot pink → light pink) 10051- **Added:** Glowing pink border on tooltips 10052- **Added:** Sparkling heart () appears next to tooltip! 10053- **Added:** Heart has pink glow drop-shadow 10054 10055### The Sorting Bug - Root Cause 10056 10057**Problem**: Two sorts were happening! 10058 10059**Sort #1** (Line 2047): Before rendering 10060```php 10061usort($importantEvents, ...) // Sort by date ✓ 10062``` 10063 10064**Sort #2** (Line 2751): Inside renderSidebarSection 10065```php 10066usort($events, ...) // Sort by TIME ONLY ✗ 10067// This was breaking the date order! 10068``` 10069 10070**The Fix**: Different sorting for different sections 10071```php 10072if ($title === 'Important Events') { 10073 // Sort by DATE first, then time 10074 usort($events, function($a, $b) { 10075 if ($dateA !== $dateB) { 10076 return strcmp($dateA, $dateB); // DATE first! 10077 } 10078 // Same date - sort by time 10079 return timeCompare($a, $b); 10080 }); 10081} else { 10082 // Today/Tomorrow - sort by TIME only (same date) 10083 usort($events, function($a, $b) { 10084 return timeCompare($a, $b); 10085 }); 10086} 10087``` 10088 10089**Result**: Important Events now CORRECTLY sorted! 10090``` 10091✓ Sun, Feb 8 - 3:30 PM Super Bowl 10092✓ Tue, Feb 10 - 11:30 AM Doctor visit 10093✓ Sat, Feb 14 - Valentine's Day (all-day) 10094✓ Sat, Feb 14 - 8:00 PM Crab Shack 10095``` 10096 10097### Pink Tooltip Magic! 10098 10099**Normal Tooltips**: Black background, plain 10100```css 10101background: rgba(0, 0, 0, 0.95); 10102color: #fff; 10103``` 10104 10105**Pink Theme Tooltips**: FABULOUS! 10106```css 10107/* Pink gradient background */ 10108background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%); 10109 10110/* Glowing pink border */ 10111border: 2px solid #ff85c1; 10112 10113/* Double glow shadow */ 10114box-shadow: 10115 0 0 15px rgba(255, 20, 147, 0.6), 10116 0 4px 12px rgba(0, 0, 0, 0.4); 10117 10118/* Bold text */ 10119font-weight: 600; 10120``` 10121 10122**Plus**: Sparkling heart next to tooltip! 10123```css 10124.sidebar-pink [data-tooltip]:after { 10125 content: ''; 10126 font-size: 12px; 10127 filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8)); 10128} 10129``` 10130 10131**The Effect**: 10132``` 10133Hover over ⚠ conflict warning: 10134┌────────────────────┐ 10135│ Conflicts with: │ ← Pink gradient 10136│ • Event 1 (3PM) │ ← Pink border 10137│ • Event 2 (4PM) │ ← Pink glow 10138└────────────────────┘ 10139``` 10140 10141**Maximum glamour on tooltips too!** ✨ 10142 10143## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING 10144 10145### Important Events Order Fixed 10146- **Fixed:** Important Events now sorted by date (earliest first) 10147- **Fixed:** Events on same date sorted by time (chronological) 10148- **Fixed:** All-day events appear last within each date 10149 10150### Sorting Issue 10151 10152**Before**: Random order 10153``` 10154Important Events: 10155 Valentine's Day (Sat, Feb 14) 1015611:30 AM Doctor visit (Tue, Feb 10) ← Feb 10 after Feb 14! 101573:30 PM Super Bowl (Sun, Feb 8) ← Feb 8 after Feb 14! 101588:00 PM Crab Shack (Sat, Feb 14) 10159``` 10160 10161**After**: Chronological order 10162``` 10163Important Events: 101643:30 PM Super Bowl (Sun, Feb 8) ← Earliest! 1016511:30 AM Doctor visit (Tue, Feb 10) 10166 Valentine's Day (Sat, Feb 14) ← All-day event 101678:00 PM Crab Shack (Sat, Feb 14) ← Same day, sorted by time 10168``` 10169 10170### Sorting Logic 10171 10172**Primary Sort**: By date 10173```php 10174strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14" 10175``` 10176 10177**Secondary Sort**: By time (within same date) 10178```php 10179// All-day events (no time) go last 10180if (empty($timeA) && !empty($timeB)) return 1; 10181if (!empty($timeA) && empty($timeB)) return -1; 10182 10183// Both have times - sort chronologically 10184$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes 10185$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes 10186return $aMinutes - $bMinutes; // 690 < 1200 10187``` 10188 10189**Result**: 101901. Sun, Feb 8 - 3:30 PM (earliest date & time) 101912. Tue, Feb 10 - 11:30 AM (next date) 101923. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14) 101934. Sat, Feb 14 - 8:00 PM (timed event on Feb 14) 10194 10195**Perfect chronological order for next 2 weeks!** ✓ 10196 10197## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨ 10198 10199### EXTREME PINK BLING EFFECTS! 10200- **Added:** Click sparkles - 8 sparkles burst out on every click! 10201- **Added:** Auto-sparkles - random sparkles appear every 3 seconds 10202- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover 10203- **Added:** Pulsing border glow - constantly breathing pink glow 10204- **Added:** Drop shadows on sparkles for extra depth 10205- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows! 10206 10207### Sparkle Effects Breakdown 10208 10209**Click Sparkles** : 10210```javascript 10211// 8 sparkles burst out when you click anywhere! 10212for (let i = 0; i < 8; i++) { 10213 // Staggered appearance (40ms apart) 10214 createSparkle(x, y); 10215} 10216 10217// Sparkle emojis: 10218["✨", "", "", "⭐", "", "", "", "", "", ""] 10219``` 10220 10221**Each sparkle**: 10222- Starts at click point 10223- Flies outward 30-60px in random direction 10224- Spins 360 degrees 10225- Fades in and out 10226- Has pink glow drop-shadow 10227- Disappears after 1 second 10228 10229**Auto Sparkles** ⏰: 10230```javascript 10231// Random sparkle every 3 seconds 10232setInterval(() => { 10233 const x = Math.random() * width; 10234 const y = Math.random() * height; 10235 createSparkle(x, y); 10236}, 3000); 10237``` 10238 10239**Result**: Constant magical sparkles even without clicking! ✨ 10240 10241**Hover Mega-Glow** : 10242```css 10243.sidebar-pink:hover { 10244 box-shadow: 10245 0 0 30px rgba(255, 20, 147, 0.9), 10246 0 0 50px rgba(255, 20, 147, 0.5) !important; 10247} 10248``` 10249 10250**Result**: Sidebar EXPLODES with pink glow when you hover over it! 10251 10252**Pulsing Border Glow** : 10253```css 10254@keyframes pulse-glow { 10255 0%, 100% { 10256 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 10257 } 10258 50% { 10259 box-shadow: 10260 0 0 25px rgba(255, 20, 147, 0.8), 10261 0 0 40px rgba(255, 20, 147, 0.4); 10262 } 10263} 10264 10265animation: pulse-glow 3s ease-in-out infinite; 10266``` 10267 10268**Result**: Border continuously breathes with pink glow! 10269 10270**Sparkle Animation** : 10271```css 10272@keyframes sparkle { 10273 0% { 10274 opacity: 0; 10275 transform: translate(0, 0) scale(0) rotate(0deg); 10276 } 10277 50% { 10278 opacity: 1; 10279 transform: translate(halfway) scale(1) rotate(180deg); 10280 } 10281 100% { 10282 opacity: 0; 10283 transform: translate(far) scale(0) rotate(360deg); 10284 } 10285} 10286``` 10287 10288**Result**: Sparkles spin, grow, shrink, and fly! 10289 10290### Complete Pink Bling Experience: 10291 10292**Always Active**: 10293- ✨ Pulsing pink border glow (3 second cycle) 10294- ✨ Auto-sparkles every 3 seconds 10295 10296**On Hover**: 10297- MEGA GLOW EFFECT (2x brightness!) 10298 10299**On Click**: 10300- 8 sparkles EXPLODE outward! 10301- Random emojis (hearts, stars, diamonds, crowns!) 10302- Each sparkle spins 360° while flying 10303- Pink glow drop-shadow on each sparkle 10304 10305**The Result**: 10306- Click anywhere = SPARKLE EXPLOSION! 10307- Hover anywhere = MEGA GLOW! ✨ 10308- Always breathing and sparkling! 10309- Maximum glamour! 10310- Wife approval: 1000%! 10311 10312**THIS IS THE MOST FABULOUS CALENDAR EVER!** ✨ 10313 10314## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH 10315 10316### Pink Theme Final Touches 10317- **Fixed:** Add Event text now black (was bright pink, hard to read) 10318- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!) 10319- **Removed:** Text shadow on Add Event button (cleaner with black text) 10320 10321### Add Event Text - Black & Readable! 10322 10323**Before**: Bright pink text (#ff1493) on dark pink background 10324```php 10325$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read! 10326text-shadow: 0 0 3px #ff1493; // Glowy pink 10327``` 10328 10329**After**: Black text, no shadow, perfect contrast! 10330```php 10331$addBtnTextColor = $theme === 'pink' ? '#000000' : ...; 10332$addBtnTextShadow = $theme === 'pink' ? 'none' : ...; 10333``` 10334 10335**Result**: 10336- Black text pops against dark pink background ✓ 10337- Easy to read ✓ 10338- Professional look with bling ✓ 10339 10340### Clock Border - All Pink! 10341 10342**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green 10343 10344**Before**: 10345```php 10346// Inline style (only bottom): 10347style="border-bottom:2px solid #ff1493;" 10348 10349// CSS (all sides): 10350.eventlist-today-header { 10351 border: 2px solid #00cc07; // Green on top/sides! 10352} 10353``` 10354 10355**After**: Inline style overrides ALL sides 10356```php 10357style="border:2px solid #ff1493;" // All 4 sides pink! 10358``` 10359 10360**Result**: Clock box now 100% pink border on all four sides! ✓ 10361 10362### What Changed: 10363 10364**Add Event Button**: 10365- Background: #b8156f (dark pink) ✓ 10366- Text: **#000000 (black)** ← NEW! 10367- Text shadow: **none** ← NEW! 10368- Glow: 0 0 10px pink ✓ 10369 10370**Clock Border**: 10371- Top: **#ff1493 (pink)** ← FIXED! 10372- Right: **#ff1493 (pink)** ← FIXED! 10373- Bottom: #ff1493 (pink) ✓ 10374- Left: **#ff1493 (pink)** ← FIXED! 10375 10376**Perfect pink theme - wife approved!** ✨ 10377 10378## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION 10379 10380### Pink Theme Complete Makeover 10381- **Fixed:** Clock border now completely pink (was green on sides/top) 10382- **Changed:** Today/Tomorrow/Important sections now different shades of pink 10383- **Changed:** Add Event button now dark pink (was clashing blue) 10384- **Changed:** System status bars now pink gradient (3 shades!) 10385 10386### All-Pink Everything! 10387 10388**Clock Border**: 10389```css 10390/* Before: Green border */ 10391border: 2px solid #00cc07; 10392 10393/* After: Hot pink border */ 10394.sidebar-pink .eventlist-today-header { 10395 border-color: #ff1493; 10396 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 10397} 10398``` 10399 10400**Section Colors** (Different Pink Shades): 10401```php 10402// Before: Orange, green, purple 10403'Today' => '#ff9800', 10404'Tomorrow' => '#4caf50', 10405'Important' => '#9b59b6' 10406 10407// After: Hot pink, pink, light pink 10408'Today' => '#ff1493', // Hot pink (DeepPink) 10409'Tomorrow' => '#ff69b4', // Pink (HotPink) 10410'Important' => '#ff85c1' // Light pink 10411``` 10412 10413**Add Event Button**: 10414```php 10415// Before: Clashing blue 10416background: #3498db; 10417 10418// After: Dark pink with glow 10419background: #b8156f; // Dark pink 10420hover: #8b0f54; // Darker pink 10421shadow: 0 0 10px rgba(255, 20, 147, 0.5); 10422``` 10423 10424**System Status Bars** (Pink Gradient): 10425```css 10426/* 5-min load average */ 10427.sidebar-pink .eventlist-cpu-fill { 10428 background: #ff1493; /* Hot pink */ 10429 box-shadow: 0 0 5px rgba(255, 20, 147, 0.7); 10430} 10431 10432/* Realtime CPU */ 10433.sidebar-pink .eventlist-cpu-fill-purple { 10434 background: #ff69b4; /* Pink */ 10435 box-shadow: 0 0 5px rgba(255, 105, 180, 0.7); 10436} 10437 10438/* Memory */ 10439.sidebar-pink .eventlist-cpu-fill-orange { 10440 background: #ff85c1; /* Light pink */ 10441 box-shadow: 0 0 5px rgba(255, 133, 193, 0.7); 10442} 10443``` 10444 10445### Pink Theme Visual Hierarchy: 10446 10447**Darkest → Lightest Pink Shades**: 104481. Add Event button: #b8156f (dark pink) 104492. Today section: #ff1493 (hot pink / deep pink) 104503. System bar 1: #ff1493 (hot pink) 104514. Tomorrow section: #ff69b4 (pink) 104525. System bar 2: #ff69b4 (pink) 104536. Important section: #ff85c1 (light pink) 104547. System bar 3: #ff85c1 (light pink) 10455 10456**Result**: Beautiful pink gradient throughout entire sidebar! ✨ 10457 10458### What's Pink Now: 10459 10460✅ Sidebar background & border 10461✅ **Clock border** ← FIXED! 10462✅ Header gradient 10463✅ Week grid 10464✅ **Add Event button** ← FIXED! 10465✅ **Today section** ← Different shade! 10466✅ **Tomorrow section** ← Different shade! 10467✅ **Important section** ← Different shade! 10468✅ Event text & bars 10469✅ **System status bars** ← All 3 different pink shades! 10470✅ All shadows & glows 10471 10472**EVERYTHING is pink and fabulous!** ✨ 10473 10474## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS 10475 10476### ✨ New Theme: Pink Bling! 10477- **Added:** Glamorous hot pink theme with maximum sparkle 10478- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic 10479- **Perfect for:** Fabulous calendars that demand attention ✨ 10480 10481### Professional Theme Shadow Fix 10482- **Fixed:** Section headers now have subtle shadow (not glow) 10483- **Fixed:** Clicked day panel header has proper shadow 10484 10485### Pink Bling Theme Colors 10486 10487**Background & Borders**: 10488```php 10489'bg' => '#1a0d14', // Dark rich pink-black 10490'border' => '#ff1493', // Hot pink (DeepPink) 10491'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow 10492``` 10493 10494**Text Colors**: 10495```php 10496'text_primary' => '#ff69b4', // Hot pink 10497'text_bright' => '#ff1493', // Deep pink 10498'text_dim' => '#ff85c1', // Light pink 10499``` 10500 10501**Week Grid**: 10502```php 10503'grid_bg' => '#2d1a24', // Dark purple-pink 10504'cell_bg' => '#1a0d14', // Dark 10505'cell_today_bg' => '#3d2030', // Highlighted purple-pink 10506``` 10507 10508**Special Effects**: 10509```php 10510'bar_glow' => '0 0 5px', // Extra sparkly glow! 10511'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling! 10512``` 10513 10514### Professional Theme Shadow Fix 10515 10516**Before**: Section headers had colored glow 10517```php 10518box-shadow: 0 0 8px #3498db; // Blue glow - wrong! 10519``` 10520 10521**After**: Section headers have subtle shadow 10522```php 10523$headerShadow = ($theme === 'professional') ? 10524 '0 2px 4px rgba(0, 0, 0, 0.15)' : // Shadow for professional 10525 '0 0 8px ' . $accentColor; // Glow for others 10526``` 10527 10528**Result**: 10529- **Matrix/Purple/Pink**: Colored glow on headers ✓ 10530- **Professional**: Clean grey shadow (no glow) ✓ 10531 10532### All Four Themes: 10533 10534** Matrix Edition**: 10535- Dark green (#00cc07) 10536- Neon glow effects 10537- Hacker aesthetic 10538 10539** Purple Dream**: 10540- Elegant purple (#9b59b6) 10541- Violet glow effects 10542- Royal aesthetic 10543 10544** Professional Blue**: 10545- Clean grey/blue (#4a90e2) 10546- Subtle shadows (NO glow) 10547- Corporate aesthetic 10548 10549** Pink Bling** (NEW!): 10550- Hot pink (#ff1493) 10551- MAXIMUM sparkle & glow 10552- Glamorous aesthetic ✨ 10553 10554### Technical Implementation 10555 10556**Theme Added To**: 10557- `getSidebarThemeStyles()` - color definitions 10558- `getSidebarTheme()` - validation 10559- `saveSidebarTheme()` - admin save 10560- Admin panel - UI with preview 10561- All shadow/glow calculations 10562- JavaScript theme colors 10563- Clicked day panel colors 10564 10565**Perfect for users who want FABULOUS pink calendars!** ✨ 10566 10567## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY 10568 10569### Text Glow Refinement 10570- **Changed:** Reduced text glow from 3px to 2px (less intense) 10571- **Fixed:** Clicked day panel now has same text glow as sections 10572 10573### Text Glow Reduction 10574 10575**Before**: Text glow was too strong (3px) 10576```php 10577// Sections: 10578text-shadow: 0 0 3px #00cc07; // Too bright! 10579 10580// Clicked day panel: 10581text-shadow: 0 0 3px #00cc07; // Too bright! 10582``` 10583 10584**After**: Subtler text glow (2px) 10585```php 10586// Sections: 10587text-shadow: 0 0 2px #00cc07; // Just right ✓ 10588 10589// Clicked day panel: 10590text-shadow: 0 0 2px #00cc07; // Just right ✓ 10591``` 10592 10593**Visual Impact**: 10594- **Matrix**: Softer green glow, easier to read 10595- **Purple**: Softer purple glow, more elegant 10596- **Professional**: Still no glow (clean) 10597 10598### Consistency Fix 10599 10600**Before**: Sections had glow, clicked day panel had NO glow 10601 10602**After**: Both sections AND clicked day panel have matching subtle glow 10603 10604**Where Glow Appears**: 10605- ✅ Today section event text 10606- ✅ Tomorrow section event text 10607- ✅ Important section event text 10608- ✅ **Clicked day panel event text** ← NOW CONSISTENT! 10609 10610**Result**: 10611- Glow is less intense and easier on eyes ✓ 10612- All event text has consistent styling ✓ 10613- Matrix/Purple themes more refined ✓ 10614 10615### Technical Details 10616 10617**PHP (Sections)**: 10618```php 10619$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';'; 10620``` 10621 10622**JavaScript (Clicked Day Panel)**: 10623```javascript 10624themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple 10625eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'"; 10626``` 10627 10628**Perfect consistency and subtle elegance!** ✨ 10629 10630## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY 10631 10632### ✨ Important Events Enhancement 10633- **Changed:** Important events now show from next 2 weeks (not just current week) 10634- **Fixed:** Important events on Sunday after current week now visible 10635- **Changed:** Events loaded 2 weeks into future for Important section 10636 10637### Background Cleanup 10638- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections 10639- **Removed:** Grey backgrounds from individual events 10640- **Result:** Clean transparent backgrounds, original dark Matrix look restored 10641 10642### Important Events - Future Coverage 10643 10644**Before**: Only showed Important events from current week 10645```php 10646if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 10647 $importantEvents[] = $event; 10648} 10649``` 10650 10651**After**: Shows Important events from today through next 2 weeks 10652```php 10653// Load events 2 weeks out 10654$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days')); 10655 10656// Show all important events from today forward 10657if ($isImportant && $dateKey >= $todayStr) { 10658 $importantEvents[] = $event; 10659} 10660``` 10661 10662**Example**: 10663- Today: Saturday Feb 7 10664- Current week: Sun Feb 1 → Sat Feb 7 10665- Important events shown: Feb 7 → Feb 21 (today + 14 days) 10666 10667**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓ 10668 10669### Background Removal 10670 10671**Before**: Light grey/white backgrounds added 10672```php 10673// Section background: 10674$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay 10675 10676// Event background: 10677$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay 10678``` 10679 10680**After**: No backgrounds (transparent) 10681```php 10682// Section: No background property 10683<div style="padding:4px 0;"> 10684 10685// Event: No background property 10686<div style="padding:4px 6px; ..."> 10687``` 10688 10689**Result**: 10690- Clean, dark Matrix aesthetic restored ✓ 10691- Purple theme darker and more elegant ✓ 10692- Professional theme still has its light grey sidebar bg ✓ 10693- Events stand out with just color bars and borders ✓ 10694 10695### What Changed: 10696 10697**Sections (Today/Tomorrow/Important)**: 10698- ❌ No more grey overlay 10699- ✓ Transparent background 10700- ✓ Colored borders & glows remain 10701 10702**Individual Events**: 10703- ❌ No more grey overlay 10704- ✓ Transparent background 10705- ✓ Colored bars & borders remain 10706 10707**Perfect! Back to the original clean dark look with future Important events!** 10708 10709## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR 10710 10711### Final Theme Polish 10712- **Fixed:** Today/Tomorrow/Important section shadows now match theme 10713- **Fixed:** Event description text color now uses theme dim color 10714 10715### Section Shadow Fix 10716 10717**Problem**: Sections always had green glow regardless of theme 10718 10719**Before**: 10720```php 10721// Hardcoded green: 10722box-shadow: 0 0 5px rgba(0, 204, 7, 0.2); 10723``` 10724 10725**After**: 10726```php 10727// Theme-aware: 10728$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' : 10729 ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' : 10730 '0 2px 4px rgba(0, 0, 0, 0.1)'); 10731``` 10732 10733**Result**: 10734- **Matrix**: Green glow around sections ✓ 10735- **Purple**: Purple glow around sections ✓ 10736- **Professional**: Subtle grey shadow (no glow) ✓ 10737 10738### Description Color Fix 10739 10740**Problem**: Description text always green in clicked day panel 10741 10742**Before**: 10743```javascript 10744color: #00aa00; // Always green 10745``` 10746 10747**After**: 10748```javascript 10749color: themeColors.text_dim; // Theme dim color 10750``` 10751 10752**Result**: 10753- **Matrix**: Dim green (#00aa00) ✓ 10754- **Purple**: Dim purple (#8e7ab8) ✓ 10755- **Professional**: Grey (#7f8c8d) ✓ 10756 10757### Now 100% Theme Consistent 10758 10759Every single visual element respects theme: 10760- ✅ Sidebar background & border 10761- ✅ Header colors & shadows 10762- ✅ Week grid & cells 10763- ✅ Add Event button 10764- ✅ Section borders & **shadows** ← Fixed! 10765- ✅ Event titles & times 10766- ✅ Event **descriptions** ← Fixed! 10767- ✅ Clicked day panel 10768- ✅ Event bars & glows 10769 10770**Absolute perfection across all three themes!** ✨ 10771 10772## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND 10773 10774### Theme Improvements 10775- **Fixed:** Clicked day panel now uses correct theme colors 10776- **Changed:** Professional Blue background now light grey (not white) 10777- **Added:** Theme colors passed to JavaScript for dynamic rendering 10778 10779### Clicked Day Panel Theming 10780 10781**Before**: Always blue regardless of theme 10782```javascript 10783// Hardcoded blue: 10784color:#00cc07; // Always green 10785background:#3498db; // Always blue 10786``` 10787 10788**After**: Theme-aware colors 10789```php 10790// PHP passes theme to JavaScript: 10791window.themeColors_XXX = { 10792 text_primary: '#00cc07' or '#b19cd9' or '#2c3e50', 10793 text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2', 10794 text_shadow: '0 0 3px ...' or '', 10795 event_bg: 'rgba(...)', 10796 border_color: 'rgba(...)', 10797 bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)' 10798}; 10799 10800// JavaScript uses theme colors: 10801color: themeColors.text_primary; 10802background: themeColors.event_bg; 10803``` 10804 10805**Result**: 10806- Matrix: Green panel with green glow ✓ 10807- Purple: Purple panel with purple glow ✓ 10808- Professional: Blue panel, no glow, clean ✓ 10809 10810### Professional Theme Background Change 10811 10812**Before**: Almost white (#f5f7fa, #ffffff) 10813```php 10814'bg' => '#f5f7fa', // Very light 10815'cell_bg' => '#ffffff', // Pure white 10816``` 10817 10818**After**: Light grey tones 10819```php 10820'bg' => '#e8ecf1', // Soft grey-blue 10821'cell_bg' => '#f5f7fa', // Light grey 10822'grid_bg' => '#d5dbe3', // Medium grey 10823'cell_today_bg' => '#dce8f7' // Highlighted grey-blue 10824``` 10825 10826**Visual Impact**: 10827- Sidebar: Light grey-blue background (#e8ecf1) 10828- Week cells: Lighter grey (#f5f7fa) 10829- Today cell: Highlighted blue-grey (#dce8f7) 10830- More depth and contrast ✓ 10831- Professional appearance ✓ 10832 10833### All Theme Elements Now Consistent 10834 10835**Matrix (Green)**: 10836- Sidebar: Dark (#242424) 10837- Clicked panel: Dark with green 10838- Text: Green with glow 10839 10840**Purple Dream**: 10841- Sidebar: Dark purple (#2a2030) 10842- Clicked panel: Dark with purple 10843- Text: Purple with glow 10844 10845**Professional Blue**: 10846- Sidebar: Light grey (#e8ecf1) 10847- Clicked panel: Light with blue 10848- Text: Dark grey, no glow 10849 10850**Perfect theme consistency everywhere!** 10851 10852## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING 10853 10854### Critical Fixes 10855- **Fixed:** Tomorrow events not loaded when outside current week 10856- **Fixed:** `&` showing instead of `&` (double HTML encoding) 10857 10858### Issue 1: Tomorrow Not Loading 10859 10860**Problem**: Sidebar only loaded events for current week 10861- Today (Saturday): Week ends today 10862- Tomorrow (Sunday): Start of NEXT week 10863- Tomorrow events never loaded from data files! 10864 10865**Before**: 10866```php 10867// Only load current week 10868$end = new DateTime($weekEnd); 10869$end->modify('+1 day'); 10870$period = new DatePeriod($start, $interval, $end); 10871// If tomorrow > weekEnd, it's not in period! 10872``` 10873 10874**After**: 10875```php 10876// Check if tomorrow is outside week 10877$tomorrowDate = date('Y-m-d', strtotime('+1 day')); 10878if ($tomorrowDate > $weekEnd) { 10879 // Extend to include tomorrow 10880 $end = new DateTime($tomorrowDate); 10881} 10882$end->modify('+1 day'); 10883$period = new DatePeriod($start, $interval, $end); 10884``` 10885 10886**Result**: Tomorrow events now loaded even at week boundary! ✓ 10887 10888### Issue 2: Double HTML Encoding 10889 10890**Problem**: `&` characters showing as `&` 10891 10892**Cause**: Double encoding on line 2625 and 2681 10893```php 10894// Line 2625: 10895$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee & Tea" 10896 10897// Line 2681: 10898$html .= htmlspecialchars($title); // "Coffee & Tea" → "Coffee &amp; Tea" ❌ 10899``` 10900 10901**Fixed**: 10902```php 10903// Line 2625: 10904$title = htmlspecialchars($event['title']); // Encode once 10905 10906// Line 2681: 10907$html .= $title; // Use already-encoded value ✓ 10908``` 10909 10910**Result**: `&` displays correctly! ✓ 10911 10912### Both Fixes Critical 10913 10914These were **two separate bugs**: 109151. **Loading bug**: Tomorrow events not read from files 109162. **Display bug**: Double-encoding text 10917 10918Both needed fixing for Tomorrow section to work properly! 10919 10920## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY 10921 10922### Critical Fix 10923- **Fixed:** Tomorrow section missing when tomorrow is outside current week 10924- **Fixed:** Today section now always shows regardless of week boundaries 10925- **Changed:** Today/Tomorrow processed BEFORE week boundary checks 10926 10927### The Problem 10928 10929**Scenario**: Today is Saturday (last day of week) 10930- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today 10931- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week** 10932 10933**BROKEN Logic** (v4.2.2): 10934```php 10935foreach ($events as $dateKey => $dayEvents) { 10936 if ($dateKey < $weekStart) continue; // Skip old events 10937 10938 // ...week processing... 10939 10940 if ($dateKey === $tomorrowStr) { // ← Never reached! 10941 $tomorrowEvents[] = $event; // Tomorrow > weekEnd 10942 } 10943} 10944``` 10945 10946**Result**: Tomorrow events never added because loop skipped them! ❌ 10947 10948### The Fix 10949 10950**Process Today/Tomorrow FIRST**: 10951```php 10952foreach ($events as $dateKey => $dayEvents) { 10953 $eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 10954 10955 foreach ($eventsWithConflicts as $event) { 10956 // ALWAYS process Today and Tomorrow first! 10957 if ($dateKey === $todayStr) { 10958 $todayEvents[] = $event; // ✓ Always shows 10959 } 10960 if ($dateKey === $tomorrowStr) { 10961 $tomorrowEvents[] = $event; // ✓ Always shows 10962 } 10963 10964 // THEN check week boundaries for grid 10965 if ($dateKey >= $weekStart && $dateKey <= $weekEnd) { 10966 $weekEvents[$dateKey][] = $event; 10967 } 10968 10969 // Important events still week-only 10970 if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 10971 $importantEvents[] = $event; 10972 } 10973 } 10974} 10975``` 10976 10977### What Changed 10978 10979**Before**: 109801. Skip events < weekStart ❌ 109812. Process week grid 109823. Try to add Today/Tomorrow ← **Failed if outside week** 109834. Add Important events 10984 10985**After**: 109861. **Always add Today events** ✓ 109872. **Always add Tomorrow events** ✓ 109883. Add to week grid if in range 109894. Add Important events if in range 10990 10991**Result**: 10992- Today section: ✓ Always shows 10993- Tomorrow section: ✓ Always shows (even at week boundary!) 10994- Week grid: ✓ Only current week 10995- Important: ✓ Only current week 10996 10997### Edge Cases Fixed 10998 10999**Saturday → Sunday transition**: 11000- Today (Sat): Shows in Today section ✓ 11001- Tomorrow (Sun): Shows in Tomorrow section ✓ 11002- Week grid: Only shows Sat (today) ✓ 11003 11004**Sunday → Monday transition**: 11005- Today (Sun): Shows in Today section ✓ 11006- Tomorrow (Mon): Shows in Tomorrow section ✓ 11007- Week grid: Shows both Sun and Mon ✓ 11008 11009**Perfect! Tomorrow section now always works!** 11010 11011## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY! 11012 11013### Corrected Week Options 11014- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!) 11015- **Changed:** Default is **Sunday** (US/Canada standard) 11016- **Fixed:** Day names array for Sunday start: S M T W T F S 11017 11018### Correct Week Start Options 11019 11020**Sunday Start** (Default): 11021- Grid shows: **S M T W T F S** 11022- Week: Sunday → Saturday 11023- US/Canada standard 11024- Most common worldwide 11025 11026**Monday Start**: 11027- Grid shows: **M T W T F S S** 11028- Week: Monday → Sunday 11029- ISO 8601 standard 11030- Common in Europe 11031 11032### Technical Changes 11033 11034**All References Updated**: 11035```php 11036// Changed from 'saturday' to 'sunday' in: 11037- Admin validation 11038- Week calculation logic 11039- Day names array 11040- Default value 11041- Comments 11042``` 11043 11044**Sunday Calculation** (when today is Saturday): 11045```php 11046$today = date('w'); // 0=Sun, 6=Sat 11047if ($today == 0) { 11048 $weekStart = date('Y-m-d'); // Today! 11049} else { 11050 // Go back $today days to last Sunday 11051 $weekStart = date('Y-m-d', strtotime('-' . $today . ' days')); 11052} 11053``` 11054 11055**Examples**: 11056- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7 11057- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14 11058 11059**Sorry for the confusion - it's Sunday not Saturday!** 11060 11061## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY 11062 11063### Critical Fix 11064- **Fixed:** Week calculation broken when today is Saturday 11065- **Fixed:** Events not showing in Today/Important sections 11066- **Fixed:** Week grid event bars missing 11067- **Changed:** Default week start is Saturday (matches main calendar) 11068 11069### Technical Details 11070 11071**The Bug**: 11072```php 11073// BROKEN (v4.2.0): 11074$weekStart = date('Y-m-d', strtotime('saturday this week')); 11075// When TODAY is Saturday, this is ambiguous and fails! 11076 11077// FIXED (v4.2.1): 11078$today = date('w'); // 0 (Sun) to 6 (Sat) 11079if ($today == 6) { 11080 $weekStart = date('Y-m-d'); // Today! 11081} else { 11082 $daysBack = ($today == 0) ? 1 : ($today + 1); 11083 $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days')); 11084} 11085$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days')); 11086``` 11087 11088**Why It Failed**: 11089- `strtotime('saturday this week')` is ambiguous when run ON a Saturday 11090- PHP may interpret it as "next Saturday" or fail 11091- Result: Week range was wrong, events filtered out 11092 11093**The Fix**: 11094- Explicit calculation using day-of-week math 11095- Saturday (day 6): weekStart = today 11096- Sunday (day 0): weekStart = yesterday 11097- Monday-Friday: calculate days back to last Saturday 11098 11099**Result**: Works reliably every day of the week! 11100 11101**Default Changed**: Saturday start (was Monday in 4.2.0) 11102- Matches main calendar behavior 11103- Users can still switch to Monday in settings 11104 11105## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR 11106 11107### ✨ New Feature 11108- **Added:** Week start day selector in Themes tab 11109- **Added:** Choose between Monday (ISO standard) or Saturday week start 11110- **Added:** Week grid and all events now respect the selected start day 11111- **Changed:** Themes tab renamed to "Sidebar Widget Settings" 11112 11113### Week Start Options 11114 11115**Monday Start** (Default): 11116- Grid shows: M T W T F S S 11117- Week runs: Monday → Sunday 11118- ISO 8601 standard 11119- Common in Europe, most of world 11120 11121**Saturday Start**: 11122- Grid shows: S S M T W T F 11123- Week runs: Saturday → Friday 11124- Common in Middle East 11125- Sabbath-observant communities 11126 11127### Technical Details 11128 11129**Configuration**: 11130```php 11131// Saved in: data/meta/calendar_week_start.txt 11132// Values: 'monday' or 'saturday' 11133 11134// Week calculation: 11135if ($weekStartDay === 'saturday') { 11136 $weekStart = date('Y-m-d', strtotime('saturday this week')); 11137 $weekEnd = date('Y-m-d', strtotime('friday next week')); 11138} else { 11139 $weekStart = date('Y-m-d', strtotime('monday this week')); 11140 $weekEnd = date('Y-m-d', strtotime('sunday this week')); 11141} 11142``` 11143 11144**Day Names Array**: 11145```php 11146// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S'] 11147// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F'] 11148``` 11149 11150**What Changes**: 11151- Week grid day letters 11152- Week grid date sequence 11153- Today/Tomorrow/Important event date ranges 11154- Week event grouping 11155 11156**What Stays Same**: 11157- All themes still work 11158- Event data unchanged 11159- Main calendar unaffected 11160 11161### How to Change: 11162 111631. Admin → Calendar → Themes tab 111642. Under "Week Start Day" section 111653. Select Monday or Saturday 111664. Click "Save Settings" 111675. Refresh sidebar to see changes 11168 11169**Perfect for international users or religious observances!** 11170 11171## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS 11172 11173### ️ Calendar Improvements 11174- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar) 11175- **Changed:** Event section backgrounds much lighter (almost white) 11176- **Changed:** Individual event backgrounds lighter and more readable 11177- **Changed:** Event borders now theme-colored 11178 11179### Technical Details 11180 11181**Week Start Change**: 11182```php 11183// Before: 11184$weekStart = date('Y-m-d', strtotime('monday this week')); 11185$weekEnd = date('Y-m-d', strtotime('sunday this week')); 11186$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S']; 11187 11188// After: 11189$weekStart = date('Y-m-d', strtotime('sunday this week')); 11190$weekEnd = date('Y-m-d', strtotime('saturday this week')); 11191$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S']; 11192``` 11193 11194**Background Colors**: 11195```php 11196// Section backgrounds (Today, Tomorrow, Important): 11197Matrix: rgba(255, 255, 255, 0.05) // Very light overlay 11198Purple: rgba(255, 255, 255, 0.08) // Slightly lighter 11199Professional: rgba(255, 255, 255, 0.95) // Almost white! 11200 11201// Individual event backgrounds: 11202Matrix: rgba(255, 255, 255, 0.03) // Subtle 11203Purple: rgba(255, 255, 255, 0.05) // Light 11204Professional: rgba(255, 255, 255, 0.5) // Semi-transparent white 11205``` 11206 11207**Event Borders**: 11208```php 11209Matrix: rgba(0, 204, 7, 0.2) // Green 11210Purple: rgba(155, 89, 182, 0.2) // Purple 11211Professional: rgba(74, 144, 226, 0.2) // Blue 11212``` 11213 11214### Visual Result: 11215 11216**Before**: Dark backgrounds made text hard to read 11217**After**: Light backgrounds make events pop and text very readable 11218 11219**Week Grid**: 11220``` 11221Before: [M][T][W][T][F][S][S] 11222After: [S][M][T][W][T][F][S] ← Now matches main calendar! 11223``` 11224 11225## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS 11226 11227### Final Theme Polish 11228- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors 11229- **Fixed:** Event times now use theme bright color 11230- **Fixed:** Event dates use theme dim color 11231- **Fixed:** Task checkboxes use theme bright color 11232- **Fixed:** Event color bars use theme-appropriate shadows 11233- **Fixed:** No text shadows on Professional theme 11234 11235### Technical Details 11236 11237**Event Text Colors**: 11238```php 11239// Matrix: 11240- Title: #00cc07 (green) 11241- Time: #00dd00 (bright green) 11242- Date: #00aa00 (dim green) 11243- Text shadow: 0 0 3px (glow) 11244 11245// Purple: 11246- Title: #b19cd9 (lavender) 11247- Time: #d4a5ff (bright purple) 11248- Date: #8e7ab8 (dim purple) 11249- Text shadow: 0 0 3px (glow) 11250 11251// Professional: 11252- Title: #2c3e50 (dark grey) 11253- Time: #4a90e2 (blue) 11254- Date: #7f8c8d (grey) 11255- Text shadow: none (clean) 11256``` 11257 11258**Color Bar Shadows**: 11259```php 11260// Matrix & Purple: Glow effect 11261box-shadow: 0 0 3px [event-color]; 11262 11263// Professional: Subtle shadow 11264box-shadow: 0 1px 2px rgba(0,0,0,0.2); 11265``` 11266 11267### What's Now Fully Themed: 11268 11269✅ Sidebar background & border 11270✅ Header (clock box) background, border, text 11271✅ Week grid background, borders, cells 11272✅ Week grid day letters & numbers 11273✅ Week grid event bars & "+N more" text 11274✅ Add Event button background & text 11275✅ Today/Tomorrow/Important event titles 11276✅ Event times 11277✅ Event dates (Important section) 11278✅ Task checkboxes 11279✅ Event color bars 11280✅ All text shadows (glow vs none) 11281 11282**Every single element now respects the theme!** 11283 11284## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION 11285 11286### Theme Improvements 11287- **Fixed:** Week calendar grid now uses theme colors (purple/blue) 11288- **Fixed:** Add Event button now uses theme colors 11289- **Fixed:** Clock box border now matches theme 11290- **Fixed:** All text shadows respect theme (no glow on professional) 11291- **Fixed:** Event bars use theme-appropriate shadows 11292 11293### Technical Details 11294 11295**Week Grid Theming**: 11296```php 11297// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders 11298// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders 11299// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders 11300``` 11301 11302**Add Event Button**: 11303```php 11304// Matrix: Dark green (#006400) with bright green text 11305// Purple: Purple (#7d3c98) with lavender text 11306// Professional: Blue (#3498db) with white text 11307``` 11308 11309**Text Shadows**: 11310```php 11311// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color) 11312// Professional: No glow (clean look) 11313``` 11314 11315**CSS Overrides**: 11316```css 11317/* Purple theme */ 11318.sidebar-purple .eventlist-today-header { 11319 border-color: #9b59b6; 11320 box-shadow: 0 0 8px rgba(155, 89, 182, 0.2); 11321} 11322 11323/* Professional theme */ 11324.sidebar-professional .eventlist-today-header { 11325 border-color: #4a90e2; 11326 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 11327} 11328``` 11329 11330### What Changed Per Theme: 11331 11332**Purple Dream**: 11333- Week grid: Purple borders and dark purple background 11334- Add Event: Purple button with lavender text 11335- Clock box: Purple border with purple glow 11336- Event bars: Purple glow instead of green 11337- All text: Purple/lavender shades 11338 11339**Professional Blue**: 11340- Week grid: Blue borders and light grey background 11341- Add Event: Blue button with white text 11342- Clock box: Blue border with subtle shadow (no glow) 11343- Event bars: Subtle shadows (no glow) 11344- All text: Dark grey and blue shades 11345 11346**Matrix Edition**: Unchanged (still perfect green theme!) 11347 11348## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING 11349 11350### ✨ New Features 11351- **Added:** Themes tab in admin for sidebar widget theming 11352- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey) 11353- **Added:** Theme selector with live previews 11354- **Added:** Theme persistence across page loads 11355 11356### Available Themes 11357 11358**Matrix Edition** (Default): 11359- Dark background (#242424) 11360- Green accents (#00cc07) 11361- Neon glow effects 11362- Original Matrix styling 11363 11364**Purple Dream**: 11365- Dark purple background (#2a2030) 11366- Purple/violet accents (#9b59b6) 11367- Elegant purple glow 11368- Rich purple color scheme 11369 11370**Professional Blue**: 11371- Light grey background (#f5f7fa) 11372- Blue accents (#4a90e2) 11373- Clean professional look 11374- Subtle shadows instead of glow 11375 11376### Bug Fix 11377- **Fixed:** Tooltips now go UP and to the LEFT (was going right) 11378- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px` 11379 11380### Technical Details 11381 11382**Theme System**: 11383```php 11384// Saved in: data/meta/calendar_theme.txt 11385// Applied dynamically in syntax.php 11386$theme = $this->getSidebarTheme(); // 'matrix', 'purple', or 'professional' 11387$styles = $this->getSidebarThemeStyles($theme); 11388 11389// Styles include: 11390- bg, border, shadow 11391- header_bg, header_border, header_shadow 11392- text_primary, text_bright, text_dim 11393- grid_bg, grid_border 11394- cell_bg, cell_today_bg 11395``` 11396 11397**Theme Changes**: 11398- Header background gradient 11399- Border colors 11400- Text colors 11401- Shadow/glow effects 11402- Grid colors 11403 11404**How to Change**: 114051. Admin → Calendar → Themes tab 114062. Select desired theme 114073. Click "Save Theme" 114084. Refresh page to see changes 11409 11410### Notes 11411- Themes only affect sidebar widget appearance 11412- Main calendar view unchanged 11413- Theme setting stored in `data/meta/calendar_theme.txt` 11414- Safe to switch themes - no data affected 11415 11416## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING 11417 11418### Bug Fixes 11419- **Fixed:** Events now sort chronologically by time (was using string comparison) 11420- **Fixed:** Tooltip positioning using JavaScript like system tooltips 11421- **Fixed:** All-day events appear first, then events in time order 11422 11423### Technical Details 11424 11425**Event Sorting Fix**: 11426```php 11427// BROKEN (v4.0.9): 11428return strcmp($aTime, $bTime); 11429// String comparison: "10:00" < "8:00" because "1" < "8" 11430// Result: 10:00 AM shown BEFORE 8:00 AM ❌ 11431 11432// FIXED (v4.1.0): 11433$aMinutes = $this->timeToMinutes($aTime); // 8:00 = 480 11434$bMinutes = $this->timeToMinutes($bTime); // 10:00 = 600 11435return $aMinutes - $bMinutes; 11436// Result: 8:00 AM shown BEFORE 10:00 AM ✓ 11437``` 11438 11439**Example Before Fix**: 11440``` 11441 Weekend Ticket Duty (all-day) 114428:00 AM START TICKETS 1144310:00 AM Soul Winning ← Wrong! 114449:45 AM Coffee ← Should be before 10:00 AM 11445``` 11446 11447**Example After Fix**: 11448``` 11449 Weekend Ticket Duty (all-day) 114508:00 AM START TICKETS 114519:45 AM Coffee ← Correct! 1145210:00 AM Soul Winning 11453``` 11454 11455**Tooltip Positioning**: 11456- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()` 11457- Uses CSS custom properties `--tooltip-left` and `--tooltip-top` 11458- Positioned on `mouseenter` event 11459- Matches system tooltip implementation (no cutoff) 11460 11461**JavaScript Implementation**: 11462```javascript 11463element.addEventListener("mouseenter", function() { 11464 const rect = element.getBoundingClientRect(); 11465 element.style.setProperty("--tooltip-left", (rect.right - 10) + "px"); 11466 element.style.setProperty("--tooltip-top", (rect.top - 30) + "px"); 11467}); 11468``` 11469 11470**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically! 11471 11472## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX 11473 11474### UI Improvements 11475- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge 11476- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar 11477- **Changed:** Main calendar conflict tooltip now much smaller (was too big) 11478 11479### Technical Details 11480 11481**Sidebar Overflow Fix**: 11482```php 11483// Before (line 2005): 11484style="...overflow:hidden..." // ← Blocked tooltips! 11485 11486// After: 11487style="...overflow:visible..." // ← Tooltips extend beyond! 11488``` 11489 11490**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important` 11491 11492**Main Calendar Tooltip Size**: 11493```css 11494/* Before: */ 11495.conflict-tooltip { 11496 border: 2px solid #ff9800; 11497 border-radius: 6px; 11498 padding: 8px 12px; 11499 font-size: 12px; 11500 min-width: 200px; 11501 max-width: 350px; 11502} 11503 11504/* After: */ 11505.conflict-tooltip { 11506 border: 1px solid #ff9800; /* Thinner */ 11507 border-radius: 3px; /* Smaller */ 11508 padding: 4px 8px; /* Less padding */ 11509 font-size: 10px; /* Smaller header */ 11510 min-width: 120px; /* Narrower */ 11511 max-width: 200px; /* Narrower */ 11512} 11513 11514.conflict-tooltip-body { 11515 padding: 6px 8px; /* Was 10px 12px */ 11516 font-size: 9px; /* Was 11px */ 11517 line-height: 1.4; /* Was 1.6 */ 11518} 11519 11520.conflict-item { 11521 padding: 2px 0; /* Was 4px */ 11522 font-size: 9px; /* Added smaller font */ 11523} 11524``` 11525 11526**Result**: 11527- Main calendar tooltip ~50% smaller 11528- Sidebar tooltips now extend beyond borders 11529- Both tooltips compact and readable 11530 11531## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP 11532 11533### Bug Fix 11534- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text) 11535- **Changed:** Using HTML entity ` ` for newlines instead of `\n` 11536 11537### Technical Details 11538 11539**The Problem**: 11540```php 11541// Before (v4.0.7): 11542$conflictTooltip = 'Conflicts with:\n'; // Literal \n showed in tooltip 11543 11544// Displayed as: 11545"Conflicts with:\n• Event 1\n• Event 2" // ← Literal backslash-n 11546``` 11547 11548**The Fix**: 11549```php 11550// After (v4.0.8): 11551$conflictTooltip = "Conflicts with: "; // HTML entity for newline 11552 11553// Displays as: 11554Conflicts with: 11555• Event 1 11556• Event 2 11557``` 11558 11559**Why ` ` Works**: 11560- HTML entity for line feed character 11561- Works in data attributes 11562- CSS `white-space: pre-line` preserves the newlines 11563- Renders as actual line breaks in tooltip 11564 11565**Applied to**: 11566- PHP rendering (sidebar Today/Tomorrow/Important) 11567- JavaScript rendering (clicked day events) 11568 11569## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX 11570 11571### UI Improvements 11572- **Changed:** Tooltip size reduced significantly (much more compact) 11573- **Fixed:** Tooltip now overflows sidebar borders (not cut off) 11574- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px) 11575- **Changed:** Narrower width (120-200px vs 200-300px) 11576 11577### Technical Details 11578 11579**Tooltip Size Reduction**: 11580```css 11581/* Before (v4.0.6): 11582padding: 6px 10px; 11583font-size: 11px; 11584min-width: 200px; 11585max-width: 300px; 11586 11587/* After (v4.0.7): */ 11588padding: 3px 6px; 11589font-size: 9px; 11590min-width: 120px; 11591max-width: 200px; 11592``` 11593 11594**Overflow Fix**: 11595```css 11596/* Allow tooltip to extend beyond sidebar */ 11597.sidebar-widget, 11598.sidebar-matrix { 11599 overflow: visible !important; 11600} 11601 11602/* Position tooltip outside */ 11603[data-tooltip]:before { 11604 bottom: 120%; /* Further above */ 11605 right: -10px; /* Can extend beyond edge */ 11606 z-index: 10000; /* Always on top */ 11607} 11608``` 11609 11610**Visual Result**: 11611- Tooltip is ~40% smaller 11612- Extends beyond sidebar border if needed 11613- Still readable, just more compact 11614- Better for small screens 11615 11616## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING 11617 11618### Critical Fix 11619- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly 11620- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names 11621- **Fixed:** Events without end time now treated as zero-duration (not +1 hour) 11622- **Fixed:** Now matches what you see in main calendar view 11623 11624### ✨ UI Improvement 11625- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right) 11626- **Added:** Custom CSS tooltip with data-tooltip attribute 11627- **Improved:** Better tooltip positioning - doesn't overflow screen edges 11628 11629### Technical Details 11630 11631**The Problem - Field Name Mismatch**: 11632```php 11633// Main calendar (line 697): 11634$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase) 11635 11636// Sidebar (before fix): 11637$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case) 11638``` 11639 11640**The Problem - Duration Logic**: 11641```php 11642// Main calendar (line 697): 11643$end1 = isset($evt1['endTime']) && !empty($evt1['endTime']) 11644 ? $evt1['endTime'] 11645 : $evt1['time']; // ← Uses START time (zero duration) 11646 11647// Sidebar (before fix): 11648$endTime = ... ? ... : $this->addHoursToTime($startTime, 1); // ← Added 1 hour! 11649``` 11650 11651**The Fix**: 11652```php 11653// Now checks BOTH field names: 11654if (isset($event['end_time']) && $event['end_time'] !== '') { 11655 $endTime = $event['end_time']; 11656} elseif (isset($event['endTime']) && $event['endTime'] !== '') { 11657 $endTime = $event['endTime']; 11658} else { 11659 $endTime = $startTime; // ← Matches main calendar! 11660} 11661``` 11662 11663**Tooltip Positioning**: 11664- Uses `data-tooltip` attribute instead of `title` 11665- CSS positions tooltip ABOVE badge (`bottom: 100%`) 11666- Aligns to RIGHT edge (`right: 0`) 11667- Arrow points down to badge 11668- Black background with white text 11669- Max width 300px 11670 11671### Example 11672 11673**6:00 PM Evening Service** (no end time): 11674- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌ 11675- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar! 11676 11677**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**: 11678- Zero-duration events at 6:00 PM don't overlap with anything 11679- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict 11680 11681**Tooltip appears**: 11682``` 11683 ┌────────────────────┐ 11684 │ Conflicts with: │ 11685 │ • Super Bowl │ 11686 │ (3:30 PM-7:00 PM)│ 11687 └─────────┬──────────┘ 11688 ▼ 11689 ⚠ 11690``` 11691 11692## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING 11693 11694### Bug Fix 11695- **Fixed:** Events without end_time now properly get 1-hour default duration 11696- **Fixed:** Empty string end_time values now treated as missing (was causing issues) 11697- **Improved:** More robust checking for `end_time` field (checks both isset and not empty) 11698 11699### Technical Details 11700 11701**The Problem**: 11702```php 11703// Before (broken): 11704$endTime = isset($event['end_time']) ? $event['end_time'] : default; 11705 11706// If end_time exists but is empty string "": 11707isset($event['end_time']) = TRUE 11708$endTime = "" // ← Empty string, not default! 11709``` 11710 11711**The Fix**: 11712```php 11713// After (fixed): 11714$endTime = (isset($event['end_time']) && $event['end_time'] !== '') 11715 ? $event['end_time'] 11716 : $this->addHoursToTime($startTime, 1); 11717 11718// Now empty string gets the default 1-hour duration 11719``` 11720 11721**Why This Matters**: 11722Events 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. 11723 11724**Example**: 11725``` 11726Super Bowl: 3:30 PM - 7:00 PM 11727Evening Service: 6:00 PM - ??? (should be 7:00 PM) 11728 11729If end_time = "" (empty string): 11730 Old code: Uses "" → conflict detection fails 11731 New code: Uses 7:00 PM → conflict detected ✓ 11732``` 11733 11734### Testing 11735If you're still not seeing the conflict on the 6:00 PM service: 117361. Check if the event has `end_time` set in the JSON 117372. Clear cache (Admin → Manage Events → Clear Cache) 117383. The conflict should now appear 11739 11740## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS 11741 11742### ✨ Feature Added 11743- **Added:** Hover over ⚠ badge to see which events are conflicting 11744- **Added:** Tooltip shows conflicting event titles and times 11745- **Added:** Works in both sidebar sections and clicked day events 11746 11747### Technical Details 11748 11749**Conflict Tracking Enhanced**: 11750```php 11751// Now tracks WHICH events conflict: 11752$event['conflictingWith'] = [ 11753 ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'], 11754 ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30'] 11755]; 11756``` 11757 11758**Tooltip Format**: 11759``` 11760Conflicts with: 11761• Meeting (10:00 AM-11:00 AM) 11762• Call (10:30 AM-11:30 PM) 11763``` 11764 11765**Where It Works**: 11766- ✅ Today section (sidebar) 11767- ✅ Tomorrow section (sidebar) 11768- ✅ Important Events section (sidebar) 11769- ✅ Clicked day events (week grid) 11770 11771**Cursor**: Changes to `help` cursor on hover to indicate tooltip 11772 11773### Note on Multi-Day Events 11774The 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. 11775 11776## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC 11777 11778### Bug Fixes 11779- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections 11780- **Fixed:** Important Events now shows events even if they're today or tomorrow 11781- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular) 11782 11783### Technical Details 11784 11785**Conflict Badge Issue**: 11786```php 11787// BROKEN (line 2511): 11788$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']); 11789// ↑ Checking 'conflicts' (plural) 11790 11791// But detectTimeConflicts() sets: 11792$event['conflict'] = true/false; 11793// ↑ Setting 'conflict' (singular) 11794 11795// FIXED: 11796$hasConflict = isset($event['conflict']) && $event['conflict']; 11797``` 11798 11799**Result**: Badge now shows for ALL conflicting events in sidebar sections 11800 11801**Important Events Logic Issue**: 11802```php 11803// BROKEN: 11804if ($dateKey === $todayStr) { 11805 $todayEvents[] = ...; 11806} elseif ($dateKey === $tomorrowStr) { 11807 $tomorrowEvents[] = ...; 11808} else { // ← Only checked if NOT today/tomorrow! 11809 if ($isImportant) { 11810 $importantEvents[] = ...; 11811 } 11812} 11813 11814// FIXED: 11815if ($dateKey === $todayStr) { 11816 $todayEvents[] = ...; 11817} 11818if ($dateKey === $tomorrowStr) { 11819 $tomorrowEvents[] = ...; 11820} 11821// ↑ Changed to separate 'if' statements 11822if ($isImportant && $dateKey in this week) { 11823 $importantEvents[] = ...; // ← Now includes today/tomorrow too! 11824} 11825``` 11826 11827**Result**: Important namespace events now show in Important section even if they're today or tomorrow 11828 11829### Conflict Badge Display 11830- Simplified to just ⚠ icon (no count) 11831- Orange color (#ff9800) 11832- 10px font size 11833- Hover shows "Time conflict detected" 11834 11835## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY 11836 11837### Bug Fix 11838- **Fixed:** Important Events section now displays all events correctly 11839- **Fixed:** Single-event days now get conflict flag (was returning early without flag) 11840- **Fixed:** Conflict detection no longer causes events to disappear from Important section 11841 11842### Technical Details 11843 11844**The Problem**: 11845- `detectTimeConflicts()` returned early if only 1 event on a day 11846- Returned original array without adding 'conflict' field 11847- This inconsistency caused issues in event categorization 11848 11849**The Solution**: 11850```php 11851// Before (broken): 11852if (empty($dayEvents) || count($dayEvents) < 2) { 11853 return $dayEvents; // No 'conflict' field added! 11854} 11855 11856// After (fixed): 11857if (count($dayEvents) === 1) { 11858 return [array_merge($dayEvents[0], ['conflict' => false])]; // Always add flag 11859} 11860``` 11861 11862**Result**: 11863- All events now have 'conflict' field consistently 11864- Single events: conflict = false 11865- Multiple events: conflict = true/false based on overlap 11866- Important Events section displays correctly 11867 11868## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES 11869 11870### Bug Fixes 11871- **Fixed:** Conflict badge (⚠) now displays in clicked day events 11872- **Fixed:** Recurring events edit now updates time and end_time correctly 11873- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit 11874 11875### ✨ Features Added 11876- **Added:** Time conflict detection for overlapping events 11877- **Added:** detectTimeConflicts() function checks all events on same day 11878- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions 11879- **Added:** Events now have 'conflict' flag set automatically 11880 11881### UI Changes 11882- **Changed:** Admin tab order: Manage Events (first), Update Plugin, ⚙️ Outlook Sync 11883- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin") 11884- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars) 11885 11886### Technical Details 11887 11888**Conflict Detection**: 11889```php 11890// Automatically detects overlapping events on same day 11891// Sets 'conflict' flag to true if event overlaps with another 11892$eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 11893``` 11894 11895**Logic**: 11896- All-day events never conflict (no time set) 11897- Timed events check for overlap with other timed events 11898- Overlap = start1 < end2 AND start2 < end1 11899- Default duration is 60 minutes if no end_time 11900 11901**Recurring Events Fix**: 11902- Old: Updated `$event['start']` and `$event['end']` (wrong fields) 11903- New: Updates `$event['time']` and `$event['end_time']` (correct fields) 11904- Now edits actually save and update the events 11905 11906**Week View Bars**: 11907- Shows 4 colored bars instead of 3 11908- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc. 11909 11910## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE 11911 11912**Major Release**: Complete Matrix-themed calendar plugin with advanced features! 11913 11914### Major Features 11915 11916#### Sidebar Widget 11917- **Week Grid**: Interactive 7-day calendar with click-to-view events 11918- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips 11919- **Live Clock**: Updates every second with date display 11920- **Real-time Weather**: Geolocation-based temperature with icon 11921- **Event Sections**: Today (orange), Tomorrow (green), Important (purple) 11922- **Add Event Button**: Dark green bar opens full event creation dialog 11923- **Matrix Theme**: Green glow effects throughout 11924 11925#### Event Management 11926- **Single Color Bars**: Clean 3px bars showing event's assigned color 11927- **All-Day Events First**: Then sorted chronologically by time 11928- **Conflict Detection**: Orange ⚠ badge on overlapping events 11929- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//) 11930- **HTML Rendering**: Pre-rendered for JavaScript display 11931- **Click-to-View**: Click week grid days to expand event details 11932 11933#### Admin Interface 11934- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button 11935- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings 11936- **Manage Events Tab**: Browse, edit, delete, move events across namespaces 11937 11938#### Outlook Sync 11939- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook 11940- **Category Mapping**: Map colors to Outlook categories 11941- **Conflict Resolution**: Time conflict detection 11942- **Import/Export Config**: Encrypted configuration files 11943 11944### Design 11945- **Matrix Theme**: Authentic green glow aesthetic 11946- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections 11947- **Color Scheme**: 11948 - Today: Orange #ff9800 11949 - Tomorrow: Green #4caf50 11950 - Important: Purple #9b59b6 11951 - Add Event: Dark green #006400 11952 - System bars: Green/Purple/Orange 11953 11954### Technical Highlights 11955- **Zero-margin Design**: Perfect flush alignment throughout 11956- **Flexbox Layout**: Modern, responsive structure 11957- **AJAX Operations**: No page reloads needed 11958- **Smart Sorting**: All-day events first, then chronological 11959- **Tooltip System**: Detailed stats on hover (working correctly) 11960- **Event Dialog**: Full form with drag support 11961- **Cache Management**: One-click cache clearing 11962 11963### Breaking Changes from v3.x 11964- Removed dual color bars (now single event color bar only) 11965- Add Event button moved to between header and week grid 11966- All-day events now appear FIRST (not last) 11967- Update Plugin tab is now the default admin tab 11968 11969### Bug Fixes (v3.10.x → v4.0.0) 11970- ✅ Fixed color bars not showing (align-self:stretch vs height:100%) 11971- ✅ Fixed tooltip function naming (sanitized calId for JavaScript) 11972- ✅ Fixed weather display (added updateWeather function) 11973- ✅ Fixed HTML rendering in events (title_html/description_html fields) 11974- ✅ Fixed Add Event dialog (null check for calendar element) 11975- ✅ Fixed text positioning in Add Event button 11976- ✅ Fixed spacing throughout sidebar widget 11977 11978### Complete Feature List 11979- Full calendar view (month grid) 11980- Sidebar widget (week view) 11981- Event panel (standalone) 11982- Event list (date ranges) 11983- Namespace support 11984- Color coding 11985- Time conflict detection 11986- DokuWiki syntax in events 11987- Outlook synchronization 11988- System monitoring 11989- Weather display 11990- Live clock 11991- Admin interface 11992- Cache management 11993- Draggable dialogs 11994- AJAX save/edit/delete 11995- Import/export config 11996 11997### Usage 11998 11999**Sidebar Widget**: 12000``` 12001{{calendar sidebar}} 12002{{calendar sidebar namespace=team}} 12003``` 12004 12005**Full Calendar**: 12006``` 12007{{calendar}} 12008{{calendar year=2026 month=6 namespace=team}} 12009``` 12010 12011**Event Panel**: 12012``` 12013{{eventpanel}} 12014``` 12015 12016**Event List**: 12017``` 12018{{eventlist daterange=2026-01-01:2026-01-31}} 12019``` 12020 12021### Stats 12022- **40+ versions** developed during v3.x iterations 12023- **3.10.0 → 3.11.4**: Polish and refinement 12024- **4.0.0**: Production-ready Matrix Edition 12025 12026### Credits 12027Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration. 12028 12029--- 12030 12031## Previous Versions (v3.11.4 and earlier) 12032 12033## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING 12034- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px) 12035- **Improved:** Small breathing room between system stats bars and Add Event button 12036- **Visual:** Better spacing for cleaner appearance 12037 12038### CSS Change: 12039**eventlist-today-header**: 12040- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px` 12041 12042### Visual Result: 12043``` 12044│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats bars 12045│ │ ← 2px space (restored) 12046├───────────────────────┤ 12047│ + ADD EVENT │ ← Add Event bar 12048├───────────────────────┤ 12049``` 12050 12051**Before (v3.11.3)**: No space, bars directly touch Add Event button 12052**After (v3.11.4)**: 2px breathing room for better visual hierarchy 12053 12054## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION 12055- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset 12056- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error 12057- **Changed:** Add Event text moved up 1px (position:relative; top:-1px) 12058- **Changed:** Line-height reduced from 12px to 10px for better text centering 12059- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets 12060 12061### JavaScript Fix: 12062**Problem**: Line 1084-1085 in calendar-main.js 12063```javascript 12064const calendar = document.getElementById(calId); 12065const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error! 12066``` 12067 12068**Solution**: Added null check 12069```javascript 12070const calendar = document.getElementById(calId); 12071const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null; 12072``` 12073 12074**Why This Happened**: 12075- Regular calendar has element with id=calId 12076- Sidebar widget doesn't have this element (different structure) 12077- Code tried to read .dataset on null, causing error 12078 12079### Text Position Fix: 12080**Before**: 12081- line-height: 12px 12082- vertical-align: middle 12083- Text slightly low 12084 12085**After**: 12086- line-height: 10px 12087- position: relative; top: -1px 12088- Text perfectly centered 12089 12090### What Works Now: 12091✅ Click "+ ADD EVENT" in sidebar → Dialog opens 12092✅ No console errors 12093✅ Text properly centered vertically 12094✅ Form pre-filled with today's date 12095✅ Save works correctly 12096 12097## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR 12098- **Added:** Event dialog to sidebar widget (same as regular calendar) 12099- **Changed:** Add Event button now opens proper event form dialog 12100- **Added:** renderEventDialog() called in renderSidebarWidget() 12101- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date 12102- **Improved:** Can now add events directly from sidebar widget 12103 12104### Add Event Button Behavior: 12105**Before (v3.11.1)**: Showed alert with instructions 12106**After (v3.11.2)**: Opens full event creation dialog 12107 12108**Dialog Features**: 12109- Date field (defaults to today) 12110- Title field (required) 12111- Time field (optional) 12112- End time field (optional) 12113- Color picker 12114- Category field 12115- Description field 12116- Save and Cancel buttons 12117- Draggable dialog 12118 12119### Technical Changes: 12120- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget() 12121- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')` 12122- Dialog uses same structure as regular calendar 12123- Uses existing openAddEvent() and saveEventCompact() JavaScript functions 12124 12125### User Flow: 121261. User clicks "+ ADD EVENT" green bar 121272. Event dialog opens with today's date pre-filled 121283. User fills in event details 121294. User clicks Save 121305. Event saved via AJAX 121316. Dialog closes 121327. Sidebar refreshes to show new event 12133 12134## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG 12135- **Fixed:** Removed bottom padding from header (was 2px, now 0) 12136- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0) 12137- **Fixed:** Add Event bar now flush against header with zero gap 12138- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin 12139- **Improved:** Alert provides clear instructions on how to add events 12140 12141### CSS Changes: 12142**eventlist-today-header**: 12143- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom) 12144 12145**eventlist-stats-container**: 12146- `margin-top: 2px` → `margin: 0` (removed all margins) 12147 12148### Add Event Button Behavior: 12149**Before**: Clicked → Navigated to Admin → Manage Events tab 12150**After**: Clicked → Shows alert with instructions 12151 12152**Alert Message**: 12153``` 12154To add an event, go to: 12155Admin → Calendar Management → Manage Events tab 12156or use the full calendar view {{calendar}} 12157``` 12158 12159### Visual Result: 12160``` 12161│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats (no margin-bottom) 12162├────────────────────────┤ 12163│ + ADD EVENT │ ← Perfectly flush! 12164├────────────────────────┤ 12165``` 12166 12167No gaps, perfectly aligned! 12168 12169## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE 12170- **Moved:** Add Event bar back to original position (between header and week grid) 12171- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff) 12172- **Changed:** Letter spacing reduced from 0.5px to 0.4px 12173- **Fixed:** Text now fully visible without being cut off 12174- **Final:** Optimal position and size determined 12175 12176### Final Layout: 12177``` 12178┌─────────────────────────────┐ 12179│ Clock | Weather | Stats │ ← Header 12180├─────────────────────────────┤ 12181│ + ADD EVENT │ ← Bar (back here, smaller text) 12182├─────────────────────────────┤ 12183│ M T W T F S S │ ← Week Grid 12184│ 3 4 5 6 7 8 9 │ 12185├─────────────────────────────┤ 12186│ Today │ ← Event sections 12187└─────────────────────────────┘ 12188``` 12189 12190### Text Size Changes: 12191**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off 12192**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible 12193 12194### Why This Position: 12195- Separates header from calendar 12196- Natural action point after viewing stats 12197- Users see stats → decide to add event → view calendar 12198- Consistent with original design intent 12199 12200## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID 12201- **Moved:** Add Event bar repositioned from between header/grid to below week grid 12202- **Improved:** Better visual flow - header → stats → grid → add button → events 12203- **Changed:** Add Event bar now acts as separator between calendar and event sections 12204 12205### New Layout: 12206``` 12207┌─────────────────────────────┐ 12208│ Clock | Weather | Stats │ ← Header 12209├─────────────────────────────┤ 12210│ M T W T F S S │ ← Week Grid 12211│ 3 4 5 6 7 8 9 │ 12212├─────────────────────────────┤ 12213│ + ADD EVENT │ ← Add bar (moved here!) 12214├─────────────────────────────┤ 12215│ Today │ ← Event sections 12216│ Tomorrow │ 12217│ Important Events │ 12218└─────────────────────────────┘ 12219``` 12220 12221### Visual Flow: 12222**Before (v3.10.8)**: 122231. Header (clock, weather, stats) 122242. **+ ADD EVENT** bar 122253. Week grid 122264. Event sections 12227 12228**After (v3.10.9)**: 122291. Header (clock, weather, stats) 122302. Week grid (calendar days) 122313. **+ ADD EVENT** bar 122324. Event sections 12233 12234### Benefits: 12235- Natural reading flow: View calendar → Add event → See events 12236- Add button positioned between calendar and event list 12237- Acts as visual separator 12238- More logical action placement 12239 12240## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR 12241- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color 12242- **Changed:** Events now display with single 3px color bar (event's assigned color only) 12243- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly 12244- **Simplified:** Cleaner visual with one color bar instead of two 12245- **Improved:** More space for event content without extra bar 12246 12247### Visual Changes: 12248 12249**Before (v3.10.7)** - Dual color bars: 12250``` 12251├─ [Orange][Green] Event Title 12252├─ [Blue][Purple] Event Title 12253``` 12254 12255**After (v3.10.8)** - Single color bar: 12256``` 12257├─ [Green] Event Title ← Only event color! 12258├─ [Purple] Event Title ← Only event color! 12259``` 12260 12261### Add Bar Changes: 12262- Added `margin:0` to eliminate gaps 12263- Now flush against header (no space above) 12264- Now flush against week grid (no space below) 12265- Perfect seamless connection 12266 12267### Technical Changes: 12268**renderSidebarEvent()**: 12269- Removed section color bar (4px) 12270- Kept only event color bar (3px) 12271 12272**showDayEvents() JavaScript**: 12273- Removed section color bar (4px blue) 12274- Kept only event color bar (3px) 12275 12276**Add Event bar**: 12277- Added `margin:0` inline style 12278- Removed all top/bottom margins 12279 12280## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR 12281- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day) 12282- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%` 12283- **Changed:** Add Event bar color from orange to dark green (#006400) 12284- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off) 12285- **Changed:** Add Event bar text now bright green (#00ff00) with green glow 12286- **Changed:** Add Event bar font size increased from 7px to 9px 12287- **Changed:** Add Event bar letter spacing increased to 0.5px 12288- **Improved:** Hover effect on Add Event bar now darker green (#004d00) 12289 12290### Color Bar Fix Details: 12291**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars 12292**Solution**: Applied same fix as clicked day events: 12293- Changed parent div: `align-items:start` → `align-items:stretch` 12294- Added `min-height:20px` to parent 12295- Changed bars: `height:100%` → `align-self:stretch` 12296- Bars now properly fill vertical space in ALL sections 12297 12298### Add Event Bar Changes: 12299**Before**: 12300- Background: Orange (#ff9800) 12301- Text: Black (#000) 12302- Height: 6px (text cut off) 12303- Font: 7px 12304 12305**After**: 12306- Background: Dark green (#006400) 12307- Text: Bright green (#00ff00) with green glow 12308- Height: 12px (text fully visible) 12309- Font: 9px 12310- Hover: Darker green (#004d00) 12311- Matrix-themed green aesthetic 12312 12313## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE 12314- **Fixed:** Event color bars now display correctly in clicked day events 12315- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events 12316- **Added:** Conflict badge (⚠) appears on right side of conflicting events 12317- **Updated:** Complete README.md rewrite with full Matrix theme documentation 12318- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering) 12319- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px` 12320- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning 12321 12322### Color Bar Fix: 12323**Problem**: Bars had `height:100%` but parent had no explicit height 12324**Solution**: 12325- Changed to `align-self:stretch` on bars 12326- Parent uses `align-items:stretch` 12327- Added `min-height:20px` to parent 12328- Bars now properly fill vertical space 12329 12330### Sorting Change: 12331**Before**: Timed events first → All-day events last 12332**After**: All-day events FIRST → Timed events chronologically 12333 12334**Example**: 12335``` 12336Monday, Feb 5 12337├─ All Day - Project Deadline ← All-day first 12338├─ 8:00 AM - Morning Standup ← Earliest time 12339├─ 10:30 AM - Coffee with Bob 12340└─ 2:00 PM - Team Meeting ← Latest time 12341``` 12342 12343### Conflict Badge: 12344- Orange warning triangle (⚠) on right side 12345- 10px font size 12346- Only appears if `event.conflict` is true 12347- Title attribute shows "Time conflict detected" 12348- Small and unobtrusive 12349 12350### README Update: 12351- Complete rewrite with Matrix theme focus 12352- Full usage instructions for all features 12353- Admin interface documentation 12354- Outlook sync setup guide 12355- System monitoring details 12356- Troubleshooting section 12357- Color scheme reference 12358- File structure documentation 12359- Performance tips 12360- Security notes 12361- Quick start examples 12362 12363## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR 12364- **Added:** Events now sorted by time when clicking week grid days 12365- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px) 12366- **Improved:** Events with times appear first, sorted chronologically 12367- **Improved:** All-day events appear after timed events 12368- **Changed:** Add Event bar font size reduced to 7px (from 10px) 12369- **Changed:** Add Event bar now has 0 padding and fixed 6px height 12370 12371### Sorting Logic: 12372- Events with times sorted by time (earliest first) 12373- All-day events (no time) appear at the end 12374- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare 12375- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event 12376 12377### Add Event Bar Changes: 12378- **Height**: 6px (was ~12px with padding) 12379- **Padding**: 0 (was 4px top/bottom) 12380- **Font Size**: 7px (was 10px) 12381- **Letter Spacing**: 0.3px (was 0.5px) 12382- **Line Height**: 6px to match height 12383- **Vertical Align**: Middle for text centering 12384 12385## Version 3.10.4 (2026-02-06) - ADD EVENT BAR 12386- **Added:** Thin orange "Add Event" bar between header and week grid 12387- **Added:** Quick access to event creation from sidebar widget 12388- **Styled:** Sleek design with hover effects and glow 12389- **Interactive:** Clicks navigate to Manage Events tab in admin 12390- **Improved:** User workflow for adding events from sidebar 12391 12392### Visual Design: 12393- Orange background (#ff9800) matching Today section color 12394- 4px top/bottom padding for thin, sleek appearance 12395- Black text with white text-shadow for visibility 12396- Hover effect: Darkens to #ff7700 with enhanced glow 12397- Orange glow effect (box-shadow) matching Matrix theme 12398- Centered "+ ADD EVENT" text (10px, bold, letter-spacing) 12399 12400### Technical Changes: 12401- Added between header close and renderWeekGrid() call 12402- Inline onclick handler navigates to admin manage tab 12403- Inline onmouseover/onmouseout for hover effects 12404- Smooth 0.2s transition on all style changes 12405 12406## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION 12407- **Changed:** Update Plugin tab is now the default tab when opening admin 12408- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab 12409- **Improved:** Clear Cache button now larger and more prominent with helpful description 12410- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events 12411- **Removed:** Debug console.log statements from day event display 12412- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab 12413 12414### UI Changes: 12415- Update Plugin tab opens by default (was Config/Outlook Sync tab) 12416- Clear Cache button prominently displayed at top of Update Plugin tab 12417- Orange ️ button (10px 20px padding) with confirmation dialog 12418- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin" 12419- Success/error messages display on Update Plugin tab after cache clear 12420- Tab navigation reordered to put Update first 12421 12422### Technical Changes: 12423- Default tab changed from 'config' to 'update' in html() method 12424- Tab navigation HTML reordered to show Update Plugin tab first 12425- clearCache() method now redirects with 'update' tab parameter 12426- Removed Clear Cache button from renderConfigTab() 12427- Added Clear Cache button to renderUpdateTab() with message display 12428 12429## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX 12430- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days 12431- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML 12432- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields 12433- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events 12434 12435### Technical Changes: 12436- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render() 12437- Events added to weekEvents now include pre-rendered HTML versions 12438- title_html and description_html fields populated before json_encode() 12439- JavaScript now receives properly formatted HTML content 12440 12441## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON 12442- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123) 12443- **Fixed:** HTML event handlers now call correctly sanitized function names 12444- **Fixed:** Weather temperature now updates correctly in sidebar widget 12445- **Added:** Weather update function to sidebar widget JavaScript 12446- **Added:** "Clear Cache" button in admin panel for easy cache refresh 12447- **Added:** Default weather location set to Irvine, CA when geolocation unavailable 12448- **Improved:** All tooltip functions now work correctly on system status bars 12449 12450### Technical Changes: 12451- Changed tooltip function names to use $jsCalId instead of $calId 12452- Changed HTML onmouseover/onmouseout to use $jsCalId 12453- Added updateWeather() function to sidebar widget 12454- Added getWeatherIcon() function to sidebar widget 12455- Added clearCache() method in admin.php 12456- Added recursiveDelete() helper method in admin.php 12457- Admin UI now has ️ Clear Cache button alongside Export/Import 12458 12459## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES 12460- **Fixed:** JavaScript syntax error "Missing initializer in const declaration" 12461- **Fixed:** Event links and formatting not displaying in clicked day events 12462- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores 12463- **Changed:** Event titles now use `title_html` field to preserve HTML formatting 12464- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting 12465- **Improved:** All JavaScript variable names now use valid syntax 12466- **Improved:** Links, bold, italic, and other HTML formatting preserved in events 12467 12468### Technical Changes: 12469- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);` 12470- JavaScript variables now use underscores instead of dashes 12471- Event HTML rendering preserves DokuWiki formatting 12472- Fixed "showTooltip_sidebar is not defined" errors 12473- Fixed "showDayEvents_cal is not defined" errors 12474 12475## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX 12476- **Fixed:** Critical JavaScript loading order issue causing ReferenceError 12477- **Fixed:** Functions now defined BEFORE HTML that uses them 12478- **Changed:** Consolidated all JavaScript into single comprehensive script block 12479- **Removed:** ~290 lines of duplicate JavaScript code 12480- **Added:** Shared state management with `sharedState_[calId]` object 12481- **Improved:** System tooltip functions now work correctly 12482- **Improved:** Week grid click events now work correctly 12483 12484### Technical Changes: 12485- Moved all JavaScript to beginning of widget (before HTML) 12486- Removed duplicate script blocks 12487- Unified tooltip and stats functions 12488- Shared latestStats and cpuHistory state 12489- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined" 12490 12491## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS 12492- **Added:** Dual color bars on events (section color + event color) 12493- **Added:** Click week grid days to view events (replaced hover tooltips) 12494- **Added:** Expandable section below week grid for selected day events 12495- **Added:** Blue theme for selected day section 12496- **Changed:** Week grid days now clickable instead of tooltips 12497- **Changed:** Section bar: 4px wide (left) 12498- **Changed:** Event bar: 3px wide (right) 12499- **Increased:** Gap between color bars from 3px to 6px 12500- **Improved:** Click is more reliable and mobile-friendly than hover tooltips 12501 12502### Visual Changes: 12503- Each event shows TWO color bars side-by-side 12504- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue) 12505- Right bar (3px): Individual event's assigned color 12506- Click any day in week grid to expand event list 12507- X button to close selected day events 12508 12509## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY 12510- **Increased:** Event color bar width from 2px to 3px 12511- **Increased:** Gap between section and event bars from 3px to 6px 12512- **Improved:** Event color bars now more visible alongside section bars 12513- **Note:** Dual color bar system already in place from v3.9.6 12514 12515## Version 3.9.6 (2026-02-05) - UI REFINEMENTS 12516- **Changed:** Date in Important Events moved below event name (was above) 12517- **Changed:** Section headers now 9px font size (was 10px) 12518- **Changed:** Section headers now normal case (was ALL CAPS) 12519- **Changed:** Letter spacing reduced from 0.8px to 0.3px 12520- **Improved:** More natural reading flow with date below event name 12521- **Improved:** Cleaner, more subtle section headers 12522 12523### Header Changes: 12524- "TODAY" → "Today" 12525- "TOMORROW" → "Tomorrow" 12526- "IMPORTANT EVENTS" → "Important Events" 12527 12528## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN 12529- **Redesigned:** Complete overhaul of `sidebar` parameter 12530- **Added:** Compact week-at-a-glance itinerary view (200px wide) 12531- **Added:** Live clock widget at top of sidebar 12532- **Added:** 7-cell week grid showing event bars 12533- **Added:** Today section with orange header and left border 12534- **Added:** Tomorrow section with green header and left border 12535- **Added:** Important Events section with purple header and left border 12536- **Added:** Admin setting to configure important namespaces 12537- **Added:** Time conflict badges in sidebar events 12538- **Added:** Task checkboxes in sidebar events 12539- **Changed:** Sidebar now optimized for narrow spaces (200px) 12540- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets 12541 12542### New Features: 12543- Clock updates every second showing current time 12544- Week grid shows Mon-Sun with colored event bars 12545- Today/Tomorrow sections show full event details 12546- Important events highlighted in purple (configurable namespaces) 12547- All badges (conflict, time, etc.) shown in compact format 12548- Automatic time conflict detection 12549 12550## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP 12551- **Removed:** 16 unused/debug/backup files 12552- **Removed:** 69 console.log() debug statements 12553- **Removed:** 3 orphaned object literals from console.log removal 12554- **Removed:** Temporary comments and markers 12555- **Fixed:** JavaScript syntax errors from cleanup 12556- **Improved:** Code quality and maintainability 12557- **Improved:** Reduced plugin size by removing unnecessary files 12558- **Status:** Production-ready, fully cleaned codebase 12559 12560### Files Removed: 12561- style.css.backup, script.js.backup 12562- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php 12563- debug_events.php, debug_html.php, cleanup_events.php 12564- fix_corrupted_json.php, fix_wildcard_namespaces.php 12565- find_outlook_duplicates.php, update_namespace.php 12566- validate_calendar_json.php, admin.js 12567- test_date_field.html 12568 12569## Version 3.7.5 (2026-02-05) 12570- **Fixed:** PHP syntax error (duplicate foreach loop removed) 12571- **Fixed:** Time variable handling in grace period logic 12572 12573## Version 3.7.4 (2026-02-05) 12574- **Added:** 15-minute grace period for timed events 12575- **Changed:** Events with times now stay visible for 15 minutes after their start time 12576- **Changed:** Prevents events from immediately disappearing when they start 12577- **Improved:** Better user experience for ongoing events 12578- **Fixed:** Events from earlier today now properly handled with grace period 12579 12580## Version 3.7.3 (2026-02-05) 12581- **Changed:** Complete redesign of cleanup section for compact, sleek layout 12582- **Changed:** Radio buttons now in single row at top 12583- **Changed:** All options visible with grayed-out inactive states (opacity 0.4) 12584- **Changed:** Inline controls - no more grid layout or wrapper boxes 12585- **Changed:** Namespace filter now compact single-line input 12586- **Changed:** Smaller buttons and tighter spacing throughout 12587- **Improved:** More professional, space-efficient design 12588 12589## Version 3.7.2 (2026-02-04) 12590- **Fixed:** Strange boxes under cleanup options - now properly hidden 12591- **Changed:** Unified color scheme across all admin sections 12592- **Changed:** Green (#00cc07) - Primary actions and main theme 12593- **Changed:** Orange (#ff9800) - Warnings and cleanup features 12594- **Changed:** Purple (#7b1fa2) - Secondary actions and accents 12595- **Improved:** Consistent visual design throughout admin interface 12596 12597## Version 3.7.1 (2026-02-04) 12598- **Fixed:** Cleanup section background changed from orange to white 12599- **Fixed:** Event cleanup now properly scans all calendar directories 12600- **Added:** Debug info display when preview finds no events 12601- **Improved:** Better directory scanning logic matching other features 12602 12603## Version 3.7.0 (2026-02-04) 12604- **Added:** Event cleanup feature in Events Manager 12605- **Added:** Delete old events by age (months/years old) 12606- **Added:** Delete events by status (completed tasks, past events) 12607- **Added:** Delete events by date range 12608- **Added:** Namespace filter for targeted cleanup 12609- **Added:** Preview function to see what will be deleted 12610- **Added:** Automatic backup creation before cleanup 12611- **Changed:** Reduced changelog viewer height to 100px (was 400px) 12612 12613## Version 3.6.3 (2026-02-04) 12614- **Fixed:** Conflict tooltips now work properly after navigating between months 12615- **Added:** Changelog display in Update Plugin tab 12616- **Added:** CHANGELOG.md file with version history 12617- **Improved:** Changelog shows last 10 versions with color-coded change types 12618- **Fixed:** Removed debug console.log statements 12619 12620## Version 3.6.2 (2026-02-04) 12621- **Fixed:** Month title now updates correctly when navigating between months 12622- **Changed:** All eventpanel header elements reduced by 10% for more compact design 12623- **Changed:** Reduced header height from 78px to 70px 12624 12625## Version 3.6.1 (2026-02-04) 12626- **Changed:** Complete redesign of eventpanel header with practical two-row layout 12627- **Fixed:** Improved layout for narrow widths (~500px) 12628- **Changed:** Simplified color scheme (removed purple gradient) 12629 12630## Version 3.6.0 (2026-02-04) 12631- **Changed:** Redesigned eventpanel header with gradient background 12632- **Changed:** Consolidated multiple header rows into compact single-row design 12633 12634## Version 3.5.1 (2026-02-04) 12635- **Changed:** Moved event search bar into header row next to + Add button 12636- **Improved:** More compact UI with search integrated into header 12637 12638## Version 3.5.0 (2026-02-04) 12639- **Added:** Event search functionality in sidebar and eventpanel 12640- **Added:** Real-time filtering as you type 12641- **Added:** Clear button (✕) appears when searching 12642- **Added:** "No results" message when search returns nothing 12643 12644## Version 3.4.7 (2026-02-04) 12645- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding) 12646- **Fixed:** Removed debug logging from console 12647- **Changed:** Updated export version number to match plugin version 12648 12649## Version 3.4.6 (2026-02-04) 12650- **Added:** Debug logging to diagnose conflict detection issues 12651- **Development:** Extensive console logging for troubleshooting 12652 12653## Version 3.4.5 (2026-02-04) 12654- **Added:** Debug logging to showDayPopup and conflict detection 12655- **Development:** Added logging to trace conflict detection flow 12656 12657## Version 3.4.4 (2026-02-04) 12658- **Fixed:** Conflict detection now persists across page refreshes (PHP-based) 12659- **Fixed:** Conflict tooltips now appear on hover 12660- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation) 12661- **Added:** Conflict badges in both future and past events sections 12662 12663## Version 3.4.3 (2026-02-04) 12664- **Added:** Custom styled conflict tooltips with hover functionality 12665- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2) 12666- **Improved:** Beautiful tooltip design with orange header and clean formatting 12667 12668## Version 3.4.2 (2026-02-04) 12669- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3) 12670 12671## Version 3.4.1 (2026-02-04) 12672- **Fixed:** End time field now properly saves to database 12673- **Fixed:** End time dropdown now filters to show only valid times after start time 12674- **Added:** Smart dropdown behavior - expands on focus, filters invalid options 12675- **Improved:** End time auto-suggests +1 hour when start time selected 12676 12677## Version 3.4.0 (2026-02-04) 12678- **Added:** End time support for events (start and end times) 12679- **Added:** Automatic time conflict detection 12680- **Added:** Conflict warning badges (⚠️) on events with overlapping times 12681- **Added:** Conflict tooltips showing which events conflict 12682- **Added:** Visual conflict indicators with pulse animation 12683- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM") 12684 12685## Version 3.3.77 (2026-02-04) 12686- **Fixed:** Namespace badge onclick handlers restored after clearing filter 12687- **Fixed:** Namespace filtering works infinitely (filter → clear → filter) 12688 12689## Version 3.3.76 (2026-02-04) 12690- **Fixed:** Namespace badges now clickable after clearing namespace filter 12691 12692## Version 3.3.75 (2026-02-04) 12693- **Fixed:** Form resubmission warnings eliminated 12694- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303 12695- **Changed:** All admin redirects now use absolute URLs 12696 12697## Version 3.3.74 (2026-02-04) 12698- **Fixed:** Clearing namespace filter now restores original namespace instead of default 12699- **Added:** data-original-namespace attribute to preserve initial namespace setting 12700- **Improved:** Console logging for namespace filter debugging 12701 12702## Version 3.3.73 (2026-02-03) 12703- **Added:** Dynamic namespace filtering banner with clear button 12704- **Fixed:** JavaScript function accessibility issues 12705- **Fixed:** Namespace badge click handlers in event lists 12706- **Improved:** Persistent namespace filtering across views 12707 12708## Earlier Versions 12709See previous transcripts for complete history through v3.3.73, including: 12710- Recurring events with Outlook sync 12711- Multi-namespace support 12712- Event categories and mapping 12713- Backup/restore functionality 12714- System statistics bar 12715- Namespace selector with fuzzy search 12716- Events Manager with import/export 12717- And much more... 12718