 * -----------------------------------------------------------------------------------------
 *        MODULE VERSION HISTORY
 * -----------------------------------------------------------------------------------------
 * based on the AddonMonitor-Module from Stefek, new version by jacobi22, dbs

 * -----------------------------------------------------------------------------------------
 * Version 2.1.1 - 2026/04/07
 * -----------------------------------------------------------------------------------------
 * + Fix: mod_addon_monitor_settings.setting_value changed from varchar(255) to TEXT
 *   to allow longer repo_sources JSON with multiple custom repos
 * + Fix: Upgrade now alters existing mod_addon_monitor_settings.setting_value to TEXT
 * + Change: Invalid or offline repo URLs no longer block saving settings; repo state
 *   is shown via per-repo status in the settings dialog instead
 * + Fix: Official repo fallback URL in Settings.inc.php corrected to
 *   https://addon.websitebaker.org/media/versionlist.json
 * + Fix: Missing language keys REPO_MULTIPLE and REPO_MULTIPLE_AVAIL added for DE/EN
 *   and template fallback texts added for incomplete language files
 * + New: Settings dialog now shows a small multilingual per-repo status hint
 *   (OK / HTTP error / invalid JSON / offline)
 * + Fix: Settings save now blocks duplicate repo names and duplicate repo URLs
 *   with dedicated error messages in DE/EN
 * + Fix: Settings modal widened and repo source table extended with a dedicated
 *   status column; official repo URLs are kept on one line for better readability

 * -----------------------------------------------------------------------------------------
 * Version 2.1.0 - 2026/04/06
 * -----------------------------------------------------------------------------------------
 * + New: Multiple repo sources configurable in settings modal (name + URL per source)
 *   Official WB repo always first, not deletable, labeled "Official" (multilingual)
 * + New: Each repo source has its own cache file (md5 of URL as filename)
 * + New: fetchUrl() extracted as reusable static method in Monitor.php
 * + New: getRepoVersionList() collects entries from all configured sources and keeps
 *   repo/source metadata so multiple matching repos can be shown per addon
 * + Fix: Repo matching now supports install_directory from repo JSON and keeps
 *   foreign repos with dl_url / dl_detail usable for version display and install
 * + New: clearRepoCache() and getRepoCacheInfo() updated for multiple cache files
 * + New: repo_sources stored as JSON in mod_addon_monitor_settings table
 * + New: json_decode Twig filter added for repo_sources rendering in settings modal
 * + New: Language keys OFFICIAL, SETTINGS_REPO_SOURCES, SETTINGS_REPO_NAME,
 *   SETTINGS_REPO_URL, SETTINGS_REPO_ADD, SETTINGS_REPO_DELETE in all 23 languages
 * + Fix: PAGE_MODULES label shortened to 'Page' in all languages (was 'Page-Module')


--------------------------------------------
 * Version 2.0.3 - 2026/03/06
 * -----------------------------------------------------------------------------------------
 * + Fix: WBM_PATH constant defined in tool.php so it is available before cmd files load
 * + Fix: SQL statement splitting in rollback used semicolon-only split and try/catch
 *   to prevent Duplicate entry exception on wb_addons primary key
 * + Fix: wb_addons row backup moved from JSON manifest into SQL dump file for consistency
 * + Fix: is_dir() check added before rmdir() to suppress E_WARNING on Windows
 * + New: All path concatenations use WBM_PATH (normalized slashes) for Windows compat
 * + New: Language files added for all 20 remaining WB languages (BG,CA,CS,DA,ES,ET,
 *   EE,FI,FR,HR,HU,IT,LV,NO,PL,PT,RU,SE,SK,TR)
 * + New: Settings option "Show Restore button" (default: off)
 * + Fix: German comments replaced with English throughout cmd/ and Lib/ files
 * + Fix: Settings save used header() redirect causing E_WARNING; replaced with
 *   admin->print_success()
 * + Fix: Rollback button text shortened to "Wiederherstellen" with full title in tooltip
 *   including previous version number
 * + Fix: Rollback button width set to auto to prevent full-width stretch
 * + Fix: SQL values containing newlines now escaped as \n in dump to prevent
 *   broken INSERT statements on rollback

 * -----------------------------------------------------------------------------------------
 * Version 2.0.0 - 2026/03/05
 * -----------------------------------------------------------------------------------------
 * + Major feature: Automatic backup before repo install (module folder as ZIP,
 *   wb_addons DB row, module-owned tables parsed from install-struct.sql.php).
 *   Backups stored in temp/wb_monitor_backups/.
 * + Major feature: "Wiederherstellen" button in module list after install.
 *   Shows previous version number in tooltip. Restores all backed-up data and
 *   removes backup after successful rollback.
 * + Major feature: Configurable settings modal (gear icon next to "Jetzt prüfen"):
 *   backup retention days (default 14), show/hide Templates and Languages tabs.
 * + Expired backups cleaned up automatically on next page load.
 * + New DB table: mod_addon_monitor_settings (created via upgrade path).
 * + New files: cmd/Settings.inc.php, cmd/RepoRollback.inc.php

 * -----------------------------------------------------------------------------------------
 * Version 1.9.2 - 2026/03/03
 * -----------------------------------------------------------------------------------------
 * + Fix: Fatal exception when mod_addon_monitor_settings table does not yet exist
 *   (e.g. after manual file upload without running WB upgrade). getWbmSettings() now
 *   checks table existence via table_exists() before querying.
 * + Fix: Upgrade.inc.php now creates mod_addon_monitor_settings if missing, ensuring
 *   the table is available after any upgrade path.

 * -----------------------------------------------------------------------------------------
 * Version 1.9.1 - 2026/03/03
 * -----------------------------------------------------------------------------------------
 * + Fix: Settings show_templates and show_languages are now applied in Tool.twig -
 *   the Templates and Languages tabs are hidden when disabled in settings.

 * -----------------------------------------------------------------------------------------
 * Version 1.9.0 - 2026/03/03
 * -----------------------------------------------------------------------------------------
 * + Feature: Settings modal (gear icon next to "Check now") with configurable options:
 *   backup retention days (default 14) and show/hide Templates and Languages tabs.
 *   Settings stored in new DB table mod_addon_monitor_settings.
 * + Feature: Before repo install, a full backup is created automatically:
 *   module folder as ZIP, wb_addons DB row, and module-owned tables (parsed from
 *   install-struct.sql.php). Stored in temp/wb_monitor_backups/.
 * + Feature: "Restore previous version" button appears in module list after install,
 *   showing remaining days until backup expires. Clicking restores all backed-up data
 *   and removes the backup.
 * + Feature: Expired backups are cleaned up automatically on next page load.
 * + New command handlers: cmd/Settings.inc.php, cmd/RepoRollback.inc.php
 * + New DB table: mod_addon_monitor_settings

 * -----------------------------------------------------------------------------------------
 * Version 1.8.0 - 2026/03/03
 * -----------------------------------------------------------------------------------------
 * + Fix: Search bar in Search.twig rendered with extra vertical height in some browsers
 *   (Brave, Chrome) due to inherited border-spacing:0 20px from table.basic CSS rule.
 *   Fixed by adding border-spacing:0 directly on the search table element.

 * -----------------------------------------------------------------------------------------
 * Version 1.7.9 - 2026/03/03
 * -----------------------------------------------------------------------------------------
 * + Fix: WB automatically inserts a visibility:hidden helper span (#help-modfiles) inside
 *   module cells, which caused the description collapser to incorrectly show "...more"
 *   even for short single-line descriptions. Fixed via display:none in backend.css.

 * -----------------------------------------------------------------------------------------
 * Version 1.7.8 - 2026/03/03
 * -----------------------------------------------------------------------------------------
 * + Fix: After repo install/upgrade, the actually installed version is now read from
 *   the target info.php and shown in the success message - helps identify cases where
 *   the repo ZIP contains an older version than advertised in the repo metadata.

 * -----------------------------------------------------------------------------------------
 * Version 1.7.7 - 2026/03/03
 * -----------------------------------------------------------------------------------------
 * + Fix: Removed separate PclZip Constants.php include to prevent "already defined"
 *   warnings when PclZip was already loaded elsewhere in WB.

 * -----------------------------------------------------------------------------------------
 * Version 1.7.6 - 2026/03/03
 * -----------------------------------------------------------------------------------------
 * + Improved: matchRepoEntry() now prioritizes install_directory for matching if available.
 *   Falls back to existing title-based matching for entries without install_directory.

 * -----------------------------------------------------------------------------------------
 * Version 1.7.5 - 2026/03/03
 * -----------------------------------------------------------------------------------------
 * + Security: If repo JSON contains install_directory, it is verified against the local
 *   addon directory before download. On mismatch, addon is not shown as update candidate.

 * -----------------------------------------------------------------------------------------
 * Version 1.7.4 - 2026/03/03
 * -----------------------------------------------------------------------------------------
 * + Security: Before install, module_directory in ZIP info.php is verified against
 *   expected addon directory. Aborts with clear error on mismatch or unreadable info.php.
 *   Uses PclZip (WB-native) with ZipArchive fallback.

 * -----------------------------------------------------------------------------------------
 * Version 1.7.3 - 2026/03/03
 * -----------------------------------------------------------------------------------------
 * + Fix: Repo entries with visible=0 are correctly hidden even if the field
 *   is missing in the JSON (backwards compatibility)

 * -----------------------------------------------------------------------------------------
 * Version 1.7.2 - 2026/03/03
 * -----------------------------------------------------------------------------------------
 * + Fix: Repo entries with visible=0 are no longer shown with version comparison,
 *   detail link or download button

 * -----------------------------------------------------------------------------------------
 * Version 1.7.1 - 2026/03/02
 * -----------------------------------------------------------------------------------------
 * + Fix: Description collapser more-link no longer duplicates on tab switch
 *   (guard via collapser-init class)
 * + Fix: Collapser expand/collapse now works correctly

 * -----------------------------------------------------------------------------------------
 * Version 1.7.0 - 2026/03/02
 * -----------------------------------------------------------------------------------------
 * + Fix: Description collapser now uses scrollHeight detection instead of line counting -
 *   correctly handles browser-wrapped text regardless of window width

 * -----------------------------------------------------------------------------------------
 * Version 1.6.8 - 2026/03/02
 * -----------------------------------------------------------------------------------------
 * + Fix: Description line breaks now correctly preserved via white-space:pre-wrap
 *   on .collapser - both in truncated and expanded state

 * -----------------------------------------------------------------------------------------
 * Version 1.6.7 - 2026/03/02
 * -----------------------------------------------------------------------------------------
 * + Feature: Description column truncates after 4 lines with "..." and a
 *   multilingual "mehr"/"weniger" toggle link (all three tabs)

 * -----------------------------------------------------------------------------------------
 * Version 1.6.6 - 2026/03/02
 * -----------------------------------------------------------------------------------------
 * + Cleanup: Removed deprecated curl_close() calls from RepoDownload.inc.php
 *   and Monitor.php (deprecated since PHP 8.0, resource freed automatically)

 * -----------------------------------------------------------------------------------------
 * Version 1.6.5 - 2026/03/01
 * -----------------------------------------------------------------------------------------
 * + Fix: Tooltip CSS used display:inline-block which caused list items to render
 *   side by side - changed to display:list-item to restore correct vertical layout

 * -----------------------------------------------------------------------------------------
 * Version 1.6.4 - 2026/03/01
 * -----------------------------------------------------------------------------------------
 * + Fix: Tooltip now shows ID and title on one line each
 *   (e.g. "Page ID: 1 Seitentitel" instead of ID and title on separate lines)

 * -----------------------------------------------------------------------------------------
 * Version 1.6.3 - 2026/03/01
 * -----------------------------------------------------------------------------------------
 * + Fix: CSS tooltip now opens to the left instead of right to prevent
 *   overflow outside the table boundaries

 * -----------------------------------------------------------------------------------------
 * Version 1.6.2 - 2026/03/01
 * -----------------------------------------------------------------------------------------
 * + Feature: Page/Section ID entries now show a styled CSS tooltip on hover instead
 *   of the plain browser title attribute - two-line layout with label and title
 *   (all three tabs: Modules, Templates, Languages)

 * -----------------------------------------------------------------------------------------
 * Version 1.6.1 - 2026/03/01
 * -----------------------------------------------------------------------------------------
 * + Feature: Download error message now shows exact cause based on runtime checks:
 *   - cURL not available (function_exists check)
 *   - allow_url_fopen=Off (ini_get check)
 *   - Firewall/proxy (fallback when both are active but download still fails)

 * -----------------------------------------------------------------------------------------
 * Version 1.6.0 - 2026/03/01
 * -----------------------------------------------------------------------------------------
 * + Feature: Download error message now includes helpful hints for local environments:
 *   check cURL (extension=curl in php.ini) and allow_url_fopen=On
 * + Feature: "Not a valid ZIP" error message now multilingual (DE/EN/NL)
 * + Fix: RepoDownload.inc.php now loads the correct language file for error messages

 * -----------------------------------------------------------------------------------------
 * Version 1.5.9 - 2026/03/01
 * -----------------------------------------------------------------------------------------
 * + Fix: ZIP download now uses cURL as primary method with SSL retry fallback,
 *   same as repo version fetch - fixes download failures on local environments
 *   (Uniform Server, XAMPP etc.) where file_get_contents with follow_location fails
 * + Fix: ZIP_MISSING warning now uses language variable (DE/EN/NL) instead of
 *   hardcoded English text

 * -----------------------------------------------------------------------------------------
 * Version 1.5.8 - 2026/03/01
 * -----------------------------------------------------------------------------------------
 * + Fix: RepoDownload.inc.php - graceful error message when ZipArchive extension
 *   is not available (instead of uncaught exception crash)
 * + Feature: Warning banner shown at top of page when php_zip extension is missing,
 *   advising user to enable it in php.ini (Tool.twig, Tool.inc.php)
 * + Cleanup: Removed unused TXT_SHOW_MORE and TXT_HIDE variables from backend_body.js

 * -----------------------------------------------------------------------------------------
 * Version 1.5.7 - 2026/02/28
 * -----------------------------------------------------------------------------------------
 * + Fix: Details link no longer inherits row type color (was orange for snippets,
 *   different shades for tools/page-modules/wysiwyg) - link color removed from
 *   all row type CSS rules (backend_default.css)
 * + Feature: Details link styled as a small, light button (wbm-details-btn)
 *   visually distinct from the Install button

 * -----------------------------------------------------------------------------------------
 * Version 1.5.6 - 2026/02/28
 * -----------------------------------------------------------------------------------------
 * + Fix: Clicking tabs no longer scrolls the page to the top - scroll position is
 *   preserved across form submits via sessionStorage (backend_body.js)

 * -----------------------------------------------------------------------------------------
 * Version 1.5.5 - 2026/02/28
 * -----------------------------------------------------------------------------------------
 * + Fix: Monitor.php - syntax error caused by orphaned lines after file_get_contents
 *   fallback block (duplicate closing brace and duplicate stream_context lines)

 * -----------------------------------------------------------------------------------------
 * Version 1.5.3 - 2026/02/28
 * -----------------------------------------------------------------------------------------
 * + Feature: Repo fetch - cURL with SSL verification as primary method,
 *   automatic retry without SSL verification on failure (compatible with local/XAMPP)
 *   fallback to file_get_contents with the same SSL retry logic
 * + Feature: Hover title on page/section ID entries now shows page title
 *   and section title (all three tabs: Modules, Templates, Languages)
 * + Fix: Monitor.php - active_pages for Templates and Languages now includes
 *   page_title (JOIN on pages table)
 * + Fix: Monitor.php - active_sections for Page-Modules now includes page_title
 *   (JOIN on pages table)

 * -----------------------------------------------------------------------------------------
 * Version 1.5.2 - 2026/02/28
 * -----------------------------------------------------------------------------------------
 * + Fix: Increased spacing between search result and "Installed Modules" heading to 30px
 *   (.wb-monitor-h2 margin-top: 4px → 30px)

 * -----------------------------------------------------------------------------------------
 * Version 1.5.1 - 2026/02/28
 * -----------------------------------------------------------------------------------------
 * + Fix: EN.php and NL.php - added and translated all missing AMTEXT keys
 *   (approx. 65 keys were missing, including SEARCH_*, LATEST, DESCRIPTION, LANGUAGES, REPO_*)
 *   backend set to English or Dutch previously showed German text

 * -----------------------------------------------------------------------------------------
 * Version 1.5.0 - 2026/02/28
 * -----------------------------------------------------------------------------------------
 * + Feature: Full internationalization - all hardcoded strings replaced:
 *   - Module type labels (Admin-Tool, Page-Module, Snippet, WYSIWYG) → language variables
 *   - Template type labels (Page Template, ACP Theme) → language variables
 *   - Toggle labels (weitere/weniger) → LABEL_MORE/LABEL_LESS in all 3 tabs
 *   - Hover titles (PageID, SectionID) → LABEL_PAGE_ID/LABEL_SECTION_ID
 *   - Status texts (in use, not used, always active) → language variables
 *   - Noscript warning (Tool.twig) → NOSCRIPT
 * + Fix: DE.php - PAGE_MODULES corrected from 'Seiten-Module' to 'Page-Module'
 * + New: language keys TYPE_SNIPPET, TYPE_TOOL, TYPE_PAGE, TYPE_WYSIWYG,
 *   TYPE_TEMPLATE, TYPE_THEME, LABEL_DEFAULT, LABEL_MORE, LABEL_LESS,
 *   LABEL_PAGE_ID, LABEL_SECTION_ID, ACTIVE_ALWAYS, IN_USE_PAGES,
 *   NOT_USED_PAGE, NOSCRIPT added to DE.php, EN.php, NL.php

 * -----------------------------------------------------------------------------------------
 * Version 1.4.9 - 2026/02/28
 * -----------------------------------------------------------------------------------------
 * + Feature: Default badge (green) in addon name column for default template,
 *   default ACP theme (Templates tab) and default WYSIWYG editor (Modules tab)
 * + Fix: "Default Template"/"Default ACP Theme"/"Default WYSIWYG EDITOR" text
 *   removed from last column (replaced by badge in addon name column)

 * -----------------------------------------------------------------------------------------
 * Version 1.4.8 - 2026/02/28
 * -----------------------------------------------------------------------------------------
 * + Feature: Default language badge (green) in addon name column (Languages tab)
 * + Fix: Toggle label simplified - count removed (already shown as bold heading) — all 3 tabs

 * -----------------------------------------------------------------------------------------
 * Version 1.4.7 - 2026/02/28
 * -----------------------------------------------------------------------------------------
 * + Feature: Section title displayed in search section-ID dropdown
 * + Fix: Monitor.php - usedSectionList() query now also selects title field
 * + Fix: Search.twig - option text shows "ID - Title" when title is available

 * -----------------------------------------------------------------------------------------
 * Version 1.4.6 - 2026/02/28
 * -----------------------------------------------------------------------------------------
 * + Fix: First li in expanded sec-extra list had green background
 *   (CSS reset for ul.using_sections ul.sec-extra li:first-child)

 * -----------------------------------------------------------------------------------------
 * Version 1.4.5 - 2026/02/28
 * -----------------------------------------------------------------------------------------
 * + Fix: Templates tab - "Default Template" label and page IDs were not
 *   displayed simultaneously (incorrect else nesting in Twig logic)
 * + Fix: Languages tab - same fix as Templates tab

 * -----------------------------------------------------------------------------------------
 * Version 1.3.7 - 2026/02/27
 * -----------------------------------------------------------------------------------------
 * + Fix: Warning icon changed to fa-exclamation-triangle red with red background
 * + Fix: Green checkmark before version number removed (redundant)
 * + Fix: Red arrow before version number removed
 * + Fix: Install button grey instead of orange
 * + Fix: Search bar - select and button aligned flush via flexbox

 * -----------------------------------------------------------------------------------------
 * Version 1.3.6 - 2026/02/27
 * -----------------------------------------------------------------------------------------
 * + Feature: Font Awesome 5.13.1 embedded as fallback in module (css/fa/)
 *   only loaded if theme does not already provide FA5
 * + Feature: Details link icon: fa-external-link-alt (external page)
 * + Fix: Install button icon: fa-download (instead of incorrect emoji)
 *   applies to all three tabs (Modules, Templates, Languages)

 * -----------------------------------------------------------------------------------------
 * Version 1.3.5 - 2026/02/27
 * -----------------------------------------------------------------------------------------
 * + Fix: After unpacking, load_module()/load_template()/load_language()
 *   from framework/functions.php is now called - correctly updates the WB addon table
 *   (INSERT on new install, UPDATE on upgrade) including upgrade.php call

 * -----------------------------------------------------------------------------------------
 * Version 1.3.4 - 2026/02/27
 * -----------------------------------------------------------------------------------------
 * + Feature: Install mechanism completely rebuilt via ZipArchive:
 *   1. Extract ZIP to /temp/wb_monitor_downloads/
 *   2. Validate info.php
 *   3. Back up old addon directory to /temp/
 *   4. Move new directory to target (modules/templates/languages)
 *   5. Run upgrade.php if present
 *   6. Silently delete backup
 *   On move failure: backup is automatically restored

 * -----------------------------------------------------------------------------------------
 * Version 1.3.3 - 2026/02/27
 * -----------------------------------------------------------------------------------------
 * + Fix: Install button icon changed to down arrow

 * -----------------------------------------------------------------------------------------
 * Version 1.3.2 - 2026/02/27
 * -----------------------------------------------------------------------------------------
 * + Fix: Download button removed - only one "Install" button which downloads
 *   and installs internally, in all three tabs
 * + Fix: "Latest?" column shows warning icon instead of green checkmark when
 *   repo update is available, in all three tabs

 * -----------------------------------------------------------------------------------------
 * Version 1.3.1 - 2026/02/27
 * -----------------------------------------------------------------------------------------
 * + Feature: Download/Install buttons moved to addon name column in all three tabs
 *   (Modules, Templates, Languages) - Repo column now shows only version + details link

 * -----------------------------------------------------------------------------------------
 * Version 1.3.0 - 2026/02/27
 * -----------------------------------------------------------------------------------------
 * + Feature: Modules tab active column (Page-Modules): count as bold heading,
 *   first 3 entries visible, remainder expandable via toggle (jQuery slideToggle)
 *   (Templates and Languages tab unchanged)

 * -----------------------------------------------------------------------------------------
 * Version 1.2.9 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Fix: Templates tab - type column widened from 7% to 14% (room for preview image)
 * + Fix: Templates tab - description column reduced from 38% to 31% (compensation)
 *   (Modules and Languages tab unchanged)

 * -----------------------------------------------------------------------------------------
 * Version 1.2.3 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Fix: Check button aligned to far right via position:absolute
 * + Opt: Repo version column 13% to 9%, description 34% to 38%

 * -----------------------------------------------------------------------------------------
 * Version 1.2.2 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Fix: Spacing below tab row to table (margin-bottom:8px)
 * + Opt: Active column reduced from 12% to 6%, description enlarged from 28% to 34%

 * -----------------------------------------------------------------------------------------
 * Version 1.2.1 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Fix: tabs-list padding reset to 0 via CSS override (tabs were overlapping checkbox row)
 * + Fix: h2 "Installed Modules" margin reduced (was too far from search bar)
 * + Fix: Redundant br before h2 removed
 * + Fix: Mobile view - table stays as table with min-width:700px and horizontal scrolling
 *   instead of block layout that made the table unreadable
 * + Fix: Repo info wraps to its own line below tabs on mobile

 * -----------------------------------------------------------------------------------------
 * Version 1.2.0 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Refactoring: all three Twig files completely rewritten
 * + Removed: nested table-in-table structure (monitor > tr > td > moduleList)
 * + Removed: w3-row, w3-card-2, w3-row-padding from tr/td elements
 * + Removed: filter checkboxes from table - clean div with flexbox
 * + Retained: table for tabular data (correct), with table-layout:fixed
 * + Retained: overflow-x:auto container for small screens
 * + Cleaned: indentation and structure of all three Twig files

 * -----------------------------------------------------------------------------------------
 * Version 1.1.10 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Fix: Upgrade.inc.php - Translate::clearCache correctly called via $oReg->getTranslate()
 *   (instead of direct namespace call not available in some WB versions)

 * -----------------------------------------------------------------------------------------
 * Version 1.1.9 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Fix: w3-row removed from tr - w3-row sets padding which indented first column
 * + Fix: Upgrade.inc.php - Translate::clearCache secured with class_exists()

 * -----------------------------------------------------------------------------------------
 * Version 1.1.8 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Fix: tabs-list li float:left overridden via CSS - repo button now lands on the right
 * + Fix: margin-left:auto on last li for true right-aligned positioning
 * + Fix: border-spacing:0 and border-collapse:collapse on moduleList - first column flush left

 * -----------------------------------------------------------------------------------------
 * Version 1.1.7 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Fix: Outer table-in-table wrapper level in monitor_modules.twig removed
 *   (caused empty column at the start of every row)

 * -----------------------------------------------------------------------------------------
 * Version 1.1.6 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Fix: Table with table-layout:fixed and width:100% - no more empty column
 * + Fix: Check-now button at same height as tab buttons (flexbox)
 * + Fix: tabs-list as flexbox for correct alignment

 * -----------------------------------------------------------------------------------------
 * Version 1.1.5 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Fix: Repo bar moved in Tool.twig - now appears to the right of tab buttons
 * + Fix: overflow-x:auto on table container for small screens (horizontal scrolling)
 * + Fix: Repo bar removed from monitor_modules/templates/languages.twig (was duplicated)

 * -----------------------------------------------------------------------------------------
 * Version 1.1.4 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Fix: Repo bar no longer overlaps tab buttons (margin-top:10px)
 * + Fix: Column widths switched to percentage (no more gaps from l-classes)
 * + Fix: vertical-align:top on all columns (rows no longer stretch with long text)
 * + Fix: all three Twig files (modules, templates, languages) unified

 * -----------------------------------------------------------------------------------------
 * Version 1.1.3 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Fix: "Check now" button was too wide (w3-bar removed, width:auto added)
 * + Fix: Column widths corrected (l-values now correctly sum to 12)
 * + Fix: iHidden removed from author column (prevented correct rendering)
 * + Fix: Icon in type column had disappeared after sed error

 * -----------------------------------------------------------------------------------------
 * Version 1.1.2 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Fix: Upgrade.inc.php was an incorrect copy from accordion module - correctly replaced
 * + Fix: matchRepoEntry() now uses exact word match instead of loose substring
 *   (prevents false matches like wysiwyg to wysiwyg_slider)

 * -----------------------------------------------------------------------------------------
 * Version 1.1.0 - 2026/02/26
 * -----------------------------------------------------------------------------------------
 * + Repo version check: fetches versionlist.json from addon.websitebaker.org
 * + Automatic cache (6h) stored in WB_PATH/temp/wb_monitor_repolist.json
 * + Manual cache refresh button on all three tabs (Modules, Templates, Languages)
 * + Version comparison: installed vs. repo version per addon/template/language
 * + Update indicator: green checkmark (up to date) / red arrow (update available)
 * + Download button: delivers ZIP directly to browser
 * + Install button: auto-install/upgrade via WB install_module() with confirm dialog
 * + Detail link to addon page on addon.websitebaker.org
 * + Repo column added to monitor_modules.twig, monitor_templates.twig, monitor_languages.twig
 * + New language keys in DE.php and EN.php (REPO_VERSION, REPO_CHECK, REPO_REFRESH, ...)
 * + New command handler: cmd/RepoDownload.inc.php
 * + Routing for repo_action in tool.php

 * -----------------------------------------------------------------------------------------
 * Version 1.0.0 - 2025/03/27
 * -----------------------------------------------------------------------------------------
 * + Initial release
