Cargo PHP 8.3 Local Compatibility Edition
==========================================

Version: 2.0.9-php83.2.2.1

Changes in this edition
-----------------------
- Corrects attribute placement in the initial compat2 package so PHP parses
  the legacy NSafeStream and admin renderer class declarations correctly.
- Normalizes nullable Nette tokenizer and template buffers before measuring
  their length under PHP 8.3.
- Casts the legacy random-string modulo operand explicitly, avoiding lossy
  float-to-integer conversion notices while preserving the selected index.
- Corrects the closing delimiter of that random-string index expression from
  the initial compat2.2 package.
- Prevents the legacy Nette regular-expression helper from passing null to
  strlen(), preg_split(), preg_match(), preg_match_all() and preg_replace().
- Normalizes the exception code passed to PHP's Exception constructor.
- Prevents implicit float-to-integer conversion when selecting random string
  characters.
- Removes the obsolete cURL hook for ait-themes.club. That hook disabled TLS
  peer verification and referenced CURLOPT_SSL_VERIFYSTATUS unconditionally.
- Disables the abandoned remote AIT subscription check. The local theme now
  treats the historical license check as satisfied and makes no request to
  system.ait-themes.club for that check.
- Replaces invalid null PCRE flags in the legacy LESS parser with integer zero.
  This eliminates the main source of debug.log growth under PHP 8.3.
- Uses integer division while decoding LESS hexadecimal colors, preventing
  lossy float-to-integer conversions without changing the resulting colors.
- Replaces deprecated ${var} string interpolation in the LESS compiler.
- Declares PHP 8 compatibility for legacy dynamic-property classes used by
  AitLess, WP Thumb, the contact-form CAPTCHA and theme option renderers.
- Adds temporary PHP 8 return-type compatibility to WpLatte's loop iterator.
- Loads the legacy Nette declaration bundle with scoped deprecation handling;
  the site's previous error-reporting level is restored immediately afterward.
- Handles a missing header headItems option as an empty list, preventing the
  generated template warning seen in debug.log.

Files modified
--------------
- style.css
- ait-theme/@framework/framework.min.php
- ait-theme/@framework/vendor/nette-closures.min.inc
- ait-theme/@framework/load.php
- ait-theme/@framework/libs/AitLess.inc
- ait-theme/@framework/libs/wplatte/wplatte.min.php
- ait-theme/@framework/libs/wpthumb/wpthumb.inc
- ait-theme/@framework/admin/admin.min.php
- ait-theme/elements/contact-form/captcha/really-simple-captcha.php
- ait-theme/elements/contact-form/captcha/ait-really-simple-captcha.php
- parts/header-items.php

Installation
------------
1. Back up the database and the current wp-content/themes/cargo directory.
2. Rename the current directory to cargo-original; do not delete it yet.
3. Extract this package in wp-content/themes so the path is cargo/style.css.
4. Clear the Cargo cache and any server/page cache.
5. Test the front page, wp-admin, pages, posts, forms and theme options.

Rollback
--------
If an error occurs, rename cargo to cargo-php83-test and rename cargo-original
back to cargo.

Scope
-----
This is a targeted compatibility release based on the supplied PHP logs and a
static code review. The theme is legacy software, so additional paths may need
adjustment when rarely used features are exercised. Keep WP_DEBUG_DISPLAY off
on production and provide a fresh debug.log if another fatal error appears.
