>
*/
public static function admin_kses(): array
{
return [
'div' => ['class' => true, 'id' => true, 'style' => true, 'lang' => true, 'dir' => true, 'role' => true, 'aria-hidden' => true],
'span' => ['class' => true, 'style' => true, 'aria-hidden' => true, 'aria-label' => true],
'a' => ['href' => true, 'class' => true, 'style' => true, 'target' => true, 'rel' => true, 'title' => true, 'aria-label' => true],
'button' => ['type' => true, 'class' => true, 'style' => true, 'title' => true, 'aria-label' => true, 'disabled' => true],
'strong' => ['class' => true, 'style' => true],
'small' => ['class' => true, 'style' => true],
'em' => ['class' => true, 'style' => true],
'code' => ['class' => true, 'style' => true],
'p' => ['class' => true, 'id' => true, 'style' => true],
'h1' => ['class' => true, 'id' => true, 'style' => true],
'h2' => ['class' => true, 'id' => true, 'style' => true],
'h3' => ['class' => true, 'id' => true, 'style' => true],
'br' => [],
'bdi' => ['dir' => true, 'class' => true, 'style' => true],
'img' => ['src' => true, 'alt' => true, 'class' => true, 'style' => true, 'width' => true, 'height' => true],
'svg' => ['xmlns' => true, 'width' => true, 'height' => true, 'viewbox' => true, 'preserveaspectratio' => true, 'aria-hidden' => true, 'focusable' => true, 'class' => true, 'fill' => true, 'role' => true],
'g' => ['transform' => true, 'fill' => true],
'path' => ['fill' => true, 'd' => true, 'transform' => true],
'polyline' => ['fill' => true, 'stroke' => true, 'stroke-width' => true, 'points' => true],
];
}
public static function header(string $page_title = ''): string
{
// v3.3.4 — switched from (which broke when data_uri failed and
// the URL fallback hit the wrong path on some hosts) to an inline
// SVG logo. Always renders, no asset path dependency, no broken alt
// text overlay. The inline_icon() method already produces a valid
// eagle silhouette; we just scale it up for the header.
$logo_html = '';
$name_ar = defined('AETOS_SEO_BRAND_NAME_AR')
? (string) AETOS_SEO_BRAND_NAME_AR
: 'Aetos SEO';
$name_en = defined('AETOS_SEO_BRAND_NAME')
? (string) AETOS_SEO_BRAND_NAME
: 'Aetos SEO';
$is_rtl = I18n::is_arabic();
$primary = $is_rtl ? $name_ar : $name_en;
$tagline = $is_rtl ? self::TAGLINE_AR : self::TAGLINE_EN;
$title_html = $page_title !== ''
? '' . esc_html($page_title) . ''
: '';
// v3.3.4 — contact info (site / email / whatsapp) was repeating on
// every Aetos admin page header. PASS audit flagged it as P1-4.
// Moved to a one-time block on the License + Settings pages instead.
// Header now stays clean: logo + brand name + tagline + page badge.
// v3.3.13 — quick-access actions on the right side of every Aetos
// page header. The Help link → docs is always present. The free build
// ships only the Help link; the Pro-only feedback button is stripped.
$help_label = $is_rtl ? 'المساعدة' : 'Help';
$actions_html = '