Accessibility Statement\n

Last updated: March 31, 2026

\n

We are committed to making this website easier to use for as many visitors as possible. The accessibility panel provides practical on-page controls for visual comfort, reading support, and easier navigation.

\n

What the Accessibility Panel Can Help With

\n\n

Important Note

\n

This accessibility panel is an assistive interface layer, not a one-click accessibility fix. The actual accessibility of any website still depends on the site's underlying code, structure, content, media, documents, forms, and third-party integrations.

\n

Using this panel by itself does not guarantee that a website meets WCAG requirements or legal compliance obligations. Site owners should review and improve their own content and code to support accessibility.

\n

Feedback

\n

If you notice an accessibility issue or need help using this website, please contact the site owner through the contact information provided elsewhere on this site.

"; } public static function get_legacy_default_statements() { return [ "

Accessibility Commitment

\n

At ADecksibility, we are committed to making our digital presence as accessible and inclusive as reasonably possible for all users, including individuals with disabilities. Our goal is to support a more accessible experience for everyone, regardless of their abilities or the technologies they use.

\n

Our Approach

\n

We aim to align with the Web Content Accessibility Guidelines (WCAG), which define internationally recognized standards for digital accessibility. Accessibility is an ongoing process, and we are committed to improving the experience over time as technologies, standards, and user needs evolve.

", '

Accessibility Commitment

We are committed to improving accessibility and creating a more inclusive experience for all visitors.

', '

Komitmen Aksesibilitas

Kami berkomitmen untuk terus meningkatkan aksesibilitas dan menghadirkan pengalaman yang lebih inklusif untuk semua pengunjung.

', "

Accessibility Statement

\n

Last updated: March 31, 2026

\n

We are committed to making this website easier to use for as many visitors as possible.

\n

What the Accessibility Panel Can Help With

\n\n

Important Note

\n

This accessibility panel is an assistive interface layer, not a one-click accessibility fix.

\n

Feedback

\n

If something is not working right, contact the site owner through the contact information provided elsewhere on this site.

", "

Accessibility Statement

\n

Last updated: March 31, 2026

\n

We are committed to making this website easier to use for as many visitors as possible. The accessibility panel provides practical on-page controls for visual comfort, reading support, and easier navigation.

\n

Important Note

\n

This accessibility panel is an assistive interface layer, not a one-click accessibility fix. Site owners should review and improve their own content and code to support accessibility.

", "

Accessibility Statement

\n

Last updated: March 31, 2026

\n

We are committed to making this website easier to use for as many visitors as possible. The accessibility panel provides practical on-page controls for visual comfort, reading support, and easier navigation.

\n

Important Note

\n

This accessibility panel is an assistive interface layer, not a one-click accessibility fix. Site owners should review and improve their own content and code to support accessibility.

" ]; } public static function get_widget_config_version() { return '1.0.0'; } public static function get_option_defaults() { return [ 'adeck_widget_enable' => 'on', 'adeck_widget_position' => 'bottom-right', 'adeck_widget_side' => 'right', 'adeck_widget_launcher_size' => '48', 'adeck_widget_launcher_icon' => 'original', 'adeck_display_mode' => 'everywhere', 'adeck_display_page_ids' => [], 'adeck_display_url_patterns' => '', 'adeck_display_exclusions_enabled' => 'off', 'adeck_display_excluded_page_ids' => [], 'adeck_display_excluded_url_patterns' => '', 'adeck_display_hide_desktop' => 'off', 'adeck_display_hide_tablet' => 'off', 'adeck_display_hide_mobile' => 'off', 'adeck_visible_widget_features' => self::get_default_visible_widget_features(), 'adeck_visible_widget_features_initialized' => 'on', 'adeck_statement_enable' => 'on', 'adeck_statement_content' => self::get_default_statement(), 'adeck_footer_enable' => 'off', 'adeck_custom_logo' => '', 'adeck_footer_link' => 'https://adeck.top/adecksibility/', 'adeck_widget_color' => '#1e3bc9', 'adeck_header_bg_color' => '#1e3bc9', 'adeck_primary_color' => '#1e3bc9', 'adeck_modal_bg_color' => '#ffffff', 'adeck_icon_text_color' => '#222222', 'adeck_reset_bg_color' => '#1e3bc9', 'adeck_reset_text_color' => '#ffffff', 'adeck_reset_hover_color' => '#152a91', ]; } public static function get_color_option_keys() { return [ 'adeck_widget_color', 'adeck_header_bg_color', 'adeck_primary_color', 'adeck_modal_bg_color', 'adeck_icon_text_color', 'adeck_reset_bg_color', 'adeck_reset_text_color', 'adeck_reset_hover_color', ]; } public static function get_remote_overridable_option_keys() { return array_keys( self::get_option_defaults() ); } public static function get_storage_keys() { return [ 'features' => 'adeck_features', 'theme' => 'adeck_theme', 'language' => 'adeck_lang', 'activeProfile' => 'adeck_active_profile', 'fontScale' => 'adeck_fontScale', 'lineHeight' => 'adeck_lineHeight', 'textSpacing' => 'adeck_textSpacing', 'hideUntil' => 'adeck_hide_until', 'hiddenSession' => 'adeck_hidden_session', ]; } public static function get_allowed_widget_positions() { return [ 'top-left', 'top-right', 'middle-left', 'middle-right', 'bottom-left', 'bottom-right', ]; } public static function get_allowed_widget_sides() { return [ 'left', 'right' ]; } public static function get_allowed_display_modes() { return [ 'everywhere', 'hide_selected', 'show_selected' ]; } public static function get_widget_feature_catalog() { return [ [ 'id' => 'profiles', 'label' => 'Profiles', 'description' => 'Preset accessibility profiles shown at the top of the panel.', 'items' => [ [ 'key' => 'profiles', 'label' => 'Accessibility Profiles', 'description' => 'Show the preset profile cards section.', ], ], ], [ 'id' => 'color_display', 'label' => 'Color & Display', 'description' => 'Visual adjustments for contrast, saturation, and reading comfort.', 'items' => [ [ 'key' => 'darkMode', 'label' => 'Dark Mode', 'description' => 'Invert the interface into a dark reading mode.' ], [ 'key' => 'grayscale', 'label' => 'Monochrome', 'description' => 'Remove colors from the page.' ], [ 'key' => 'negative', 'label' => 'High Contrast', 'description' => 'Increase contrast using an inverted visual mode.' ], [ 'key' => 'lowSaturation', 'label' => 'Low Saturation', 'description' => 'Reduce strong colors on the page.' ], [ 'key' => 'highSaturation','label' => 'High Saturation', 'description' => 'Boost color intensity.' ], ], ], [ 'id' => 'typography', 'label' => 'Typography', 'description' => 'Text sizing and readability tools inside the panel.', 'items' => [ [ 'key' => 'fontSize', 'label' => 'Font Size', 'description' => 'Show the font size adjustment row.' ], [ 'key' => 'lineHeight', 'label' => 'Line Height', 'description' => 'Show the line height adjustment row.' ], [ 'key' => 'textSpacing', 'label' => 'Text Spacing', 'description' => 'Show the text spacing adjustment row.' ], [ 'key' => 'dyslexiaFont', 'label' => 'Dyslexia Font', 'description' => 'Switch to a dyslexia-friendly font.' ], [ 'key' => 'centerText', 'label' => 'Center Text', 'description' => 'Center long text blocks.' ], [ 'key' => 'boldText', 'label' => 'Bold Text', 'description' => 'Increase text weight for readability.' ], ], ], [ 'id' => 'navigation', 'label' => 'Navigation & Assistance', 'description' => 'Focus aids, reading helpers, and structure tools.', 'items' => [ [ 'key' => 'focusIndicator', 'label' => 'Focus Indicator', 'description' => 'Highlight keyboard focus states.' ], [ 'key' => 'muteMedia', 'label' => 'Mute Media', 'description' => 'Mute audio and video playback.' ], [ 'key' => 'highlightLinks', 'label' => 'Highlight Links', 'description' => 'Emphasize links across the page.' ], [ 'key' => 'highlightTitles', 'label' => 'Highlight Titles', 'description' => 'Emphasize headings and titles.' ], [ 'key' => 'highlightContent','label' => 'Highlight Content', 'description' => 'Emphasize content blocks.' ], [ 'key' => 'stopAnimations', 'label' => 'Stop Animations', 'description' => 'Reduce motion by stopping animations.' ], [ 'key' => 'hideImages', 'label' => 'Hide Images', 'description' => 'Hide decorative and inline images.' ], [ 'key' => 'readingGuide', 'label' => 'Reading Guide', 'description' => 'Show a reading guide overlay.' ], [ 'key' => 'readingMask', 'label' => 'Reading Mask', 'description' => 'Dim surrounding content while reading.' ], [ 'key' => 'readAloud', 'label' => 'Read Aloud', 'description' => 'Read page text aloud using browser speech.' ], [ 'key' => 'bigCursor', 'label' => 'Big Cursor', 'description' => 'Use a larger cursor.' ], [ 'key' => 'pageStructure', 'label' => 'Page Structure', 'description' => 'Open the heading and landmark structure view.' ], ], ], ]; } public static function get_allowed_widget_feature_visibility_keys() { $keys = []; foreach ( self::get_widget_feature_catalog() as $group ) { if ( empty( $group['items'] ) || ! is_array( $group['items'] ) ) { continue; } foreach ( $group['items'] as $item ) { if ( empty( $item['key'] ) || ! is_string( $item['key'] ) ) { continue; } $keys[] = $item['key']; } } return array_values( array_unique( $keys ) ); } public static function get_default_visible_widget_features() { return self::get_allowed_widget_feature_visibility_keys(); } public static function normalize_visible_widget_feature_key( $value ) { if ( ! is_string( $value ) ) { return ''; } $candidate = trim( $value ); if ( '' === $candidate ) { return ''; } foreach ( self::get_allowed_widget_feature_visibility_keys() as $allowed_key ) { if ( 0 === strcasecmp( $candidate, $allowed_key ) ) { return $allowed_key; } } return ''; } public static function get_legacy_buggy_default_visible_widget_features() { return array_values( array_filter( self::get_default_visible_widget_features(), function( $feature_key ) { return is_string( $feature_key ) && sanitize_key( $feature_key ) === $feature_key; } ) ); } public static function sanitize_display_mode( $value ) { $mode = sanitize_key( $value ); return in_array( $mode, self::get_allowed_display_modes(), true ) ? $mode : 'everywhere'; } public static function sanitize_display_page_ids( $value ) { if ( is_string( $value ) ) { $value = preg_split( '/[\s,]+/', $value ); } if ( ! is_array( $value ) ) { return []; } $page_ids = []; foreach ( $value as $page_id ) { $page_id = absint( $page_id ); if ( $page_id > 0 ) { $page_ids[] = $page_id; } } return array_values( array_unique( $page_ids ) ); } public static function sanitize_display_url_patterns( $value ) { if ( ! is_string( $value ) ) { return ''; } $lines = preg_split( '/\r\n|\r|\n/', wp_unslash( $value ) ); $patterns = []; foreach ( $lines as $line ) { $line = trim( sanitize_text_field( $line ) ); if ( '' === $line ) { continue; } $patterns[] = substr( $line, 0, 180 ); if ( count( $patterns ) >= 50 ) { break; } } return implode( "\n", array_values( array_unique( $patterns ) ) ); } public static function sanitize_visible_widget_features( $value ) { if ( is_string( $value ) ) { $value = preg_split( '/[\s,]+/', $value ); } if ( ! is_array( $value ) ) { return self::get_default_visible_widget_features(); } $visible_keys = []; foreach ( $value as $feature_key ) { $feature_key = self::normalize_visible_widget_feature_key( $feature_key ); if ( '' !== $feature_key ) { $visible_keys[] = $feature_key; } } return array_values( array_unique( $visible_keys ) ); } public static function get_widget_launcher_size_bounds() { return [ 'min' => 40, 'max' => 64, 'step' => 2, 'default' => 48, ]; } public static function get_allowed_widget_launcher_icons() { return [ 'original', 'accessibility', 'accessibility-more', 'hand' ]; } public static function get_widget_launcher_icon_map() { return [ 'original' => 'original-icon.svg', 'accessibility' => 'accessibility-icon.svg', 'accessibility-more' => 'accessibility-more-icon.svg', 'hand' => 'hand-icon.svg', ]; } public static function sanitize_widget_launcher_icon( $value ) { $icon = sanitize_key( $value ); if ( in_array( $icon, self::get_allowed_widget_launcher_icons(), true ) ) { return $icon; } return 'original'; } public static function get_widget_launcher_icon_url( $value ) { $icon = self::sanitize_widget_launcher_icon( $value ); $map = self::get_widget_launcher_icon_map(); if ( ! isset( $map[ $icon ] ) ) { $icon = 'original'; } return ADECK_PLUGIN_URL . 'assets/images/launcher-icons/' . $map[ $icon ]; } public static function sanitize_widget_launcher_size( $value ) { $bounds = self::get_widget_launcher_size_bounds(); $size = absint( $value ); if ( 0 === $size ) { $size = (int) $bounds['default']; } if ( $size < $bounds['min'] ) { $size = (int) $bounds['min']; } if ( $size > $bounds['max'] ) { $size = (int) $bounds['max']; } $step = max( 1, (int) $bounds['step'] ); $size = (int) ( round( ( $size - $bounds['min'] ) / $step ) * $step ) + (int) $bounds['min']; if ( $size > $bounds['max'] ) { $size = (int) $bounds['max']; } return (string) $size; } }