=== JTZL's Dark Mode === Contributors: jtzl, yoren Tags: dark mode, dark theme, prefers-color-scheme, accessibility Requires at least: 6.9 Tested up to: 6.9 Requires PHP: 8.2 Stable tag: 1.0.0 License: GPL-2.0-or-later License URI: https://www.gnu.org/licenses/gpl-2.0.html Automatic dark mode styling based on visitor OS preference using CSS prefers-color-scheme media query. == Description == JTZL's Dark Mode automatically applies dark mode styling to your WordPress site based on your visitors' operating system preferences. No configuration required - it just works. Interactive demo: https://playground.wordpress.net/?blueprint-url=https://wordpress.org/plugins/wp-json/plugins/v1/plugin/jtzls-dark-mode/blueprint.json **Key Features:** * Automatic detection using CSS `prefers-color-scheme: dark` media query * Zero configuration - works out of the box * Privacy-respecting - all detection happens client-side * Theme-agnostic - works with any WordPress theme * Media preservation - images, videos, and embeds display correctly * Developer-friendly - extensible via WordPress filter hooks **How It Works:** The plugin uses the CSS `prefers-color-scheme` media query to detect when a visitor's operating system is set to dark mode. When detected, dark mode styles are automatically applied without any JavaScript or server-side processing. **Technical Features:** * Modern PHP 8.2+ architecture with dependency injection (PHP-DI) * Service-oriented design with PSR-4 autoloading * Separate styling strategies for Block themes (CSS variables) and Classic themes (filter inversion) * Comprehensive test coverage with PHPUnit **Developer Hooks:** Customize the plugin behavior using these filter hooks: * `jtzl_dark_mode_enabled` - Enable/disable dark mode on specific pages * `jtzl_dark_mode_css_variables` - Customize dark mode colors * `jtzl_dark_mode_custom_css` - Add custom CSS rules == Installation == 1. Upload the `jtzls-dark-mode` folder to the `/wp-content/plugins/` directory 2. Activate the plugin through the 'Plugins' menu in WordPress 3. That's it! Dark mode will automatically apply based on visitor preferences == Frequently Asked Questions == = Does this plugin require any configuration? = No. JTZL's Dark Mode works automatically without any settings or configuration. = How does dark mode detection work? = The plugin uses the CSS `prefers-color-scheme: dark` media query, which detects your operating system's color scheme preference. This is a privacy-respecting, client-side-only approach. = Will this affect my images and videos? = No. The plugin includes media preservation rules that ensure images, videos, iframes, and embedded content display without color distortion. = Can I disable dark mode on specific pages? = Yes. Use the `jtzl_dark_mode_enabled` filter hook: ` add_filter( 'jtzl_dark_mode_enabled', function( $enabled ) { if ( is_page( 'landing-page' ) ) { return false; } return $enabled; } ); ` = Can I customize the dark mode colors? = Yes. Use the `jtzl_dark_mode_css_variables` filter hook to override default CSS variables: ` add_filter( 'jtzl_dark_mode_css_variables', function( $variables ) { $variables['--id-bg-primary'] = '#0d1117'; $variables['--id-text-primary'] = '#f0f0f0'; return $variables; } ); ` Available CSS variables: * `--id-bg-primary` - Primary background color * `--id-bg-secondary` - Secondary background color * `--id-text-primary` - Primary text color * `--id-text-secondary` - Secondary text color * `--id-border-color` - Border color * `--id-link-color` - Link color * `--id-link-hover` - Link hover color Note: CSS variables only apply to Block themes. Classic themes use filter inversion. = Does this work with Full Site Editing (FSE) themes? = Yes. JTZL's Dark Mode uses different styling strategies optimized for each theme type: * Block themes (FSE): Uses CSS custom properties for precise color control * Classic themes: Uses CSS filter inversion for broad compatibility Both approaches ensure proper dark mode rendering without theme modifications. = Does this affect the WordPress admin area? = No. Dark mode styling is applied only to the public-facing frontend of your site. = Can I add custom CSS rules? = Yes. Use the `jtzl_dark_mode_custom_css` filter hook: ` add_filter( 'jtzl_dark_mode_custom_css', function( $css ) { return $css . '@media (prefers-color-scheme: dark) { .my-element { color: #fff; } }'; } ); ` = What are the system requirements? = * PHP 8.2 or higher * WordPress 6.9 or higher * Composer (for development only) = Is there an interactive preview? = Yes. Launch a live preview in WordPress Playground: https://playground.wordpress.net/?blueprint-url=https://wordpress.org/plugins/wp-json/plugins/v1/plugin/jtzls-dark-mode/blueprint.json == Screenshots == 1. Dark mode automatically applied based on OS preference == Changelog == = 1.0.0 = * Initial release * Automatic dark mode detection via CSS prefers-color-scheme * Theme-agnostic styling with CSS custom properties * Media preservation for images, videos, and embeds * Developer filter hooks for customization == Upgrade Notice == = 1.0.0 = Initial release of JTZL's Dark Mode.