Файловый менеджер - Редактировать - /home/tuudkjt/globeasy/wp-includes/ID3/hello-elementor.zip
Назад
PK �<,]�G�Jg g footer.phpnu ��� <?php /** * The template for displaying the footer. * * Contains the body & html closing tags. * * @package HelloElementor */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } if ( ! function_exists( 'elementor_theme_do_location' ) || ! elementor_theme_do_location( 'footer' ) ) { if ( hello_elementor_display_header_footer() ) { if ( did_action( 'elementor/loaded' ) && hello_header_footer_experiment_active() ) { get_template_part( 'template-parts/dynamic-footer' ); } else { get_template_part( 'template-parts/footer' ); } } } ?> <?php wp_footer(); ?> </body> </html> PK �<,]_�EX~A ~A readme.txtnu ��� === Hello Elementor === Contributors: elemntor, KingYes, ariel.k, bainternet Requires at least: 6.0 Tested up to: 6.8 Stable tag: 3.4.6 Version: 3.4.6 Requires PHP: 7.4 License: GNU General Public License v3 or later License URI: https://www.gnu.org/licenses/gpl-3.0.html A lightweight and minimalist WordPress theme for Elementor site builder. == Description == Hello Elementor is a lightweight and minimalist WordPress theme that was built specifically to work seamlessly with the Elementor site builder plugin. The theme is free, open-source, and designed for users who want a flexible, easy-to-use, and customizable website. The theme's main focus is on providing a solid foundation for users to build their own unique designs using the Elementor drag-and-drop site builder. It is optimized for speed and performance, and its simplicity and flexibility make it a great choice for both beginners and experienced website designers. The theme supports common WordPress features which can be extended using a child-theme. In addition, there are several ways to add custom styles. It can be done from **Elementor**, using a child-theme, or with an external plugin. To customize the theme further, visit [Elementor developers docs](https://developers.elementor.com/docs/hello-elementor-theme/). == Copyright == This theme, like WordPress, is distributed under the terms of GPL. Use it as your springboard to building a site with ***Elementor***. Hello Elementor bundles the following third-party resources: Font Awesome icons for theme screenshot License: SIL Open Font License, version 1.1. Source: https://fontawesome.com/v4.7.0/ Image for theme screenshot, Copyright Jason Blackeye License: CC0 1.0 Universal (CC0 1.0) Source: https://stocksnap.io/photo/4B83RD7BV9 == Changelog == = 3.4.6 - 2026-01-21 * Tweak: Updated Elementor assets = 3.4.5 - 2025-10-27 * New: Add theme home to Finder * Tweak: Improve banner behavior after clicking on action button * Fix: Load styles correctly in Gutenberg pages * Fix: Do not change menu name after Elementor activation * Fix: Ensure quicklinks works correctly from home page = 3.4.4 - 2025-06-08 = * Tweak: Improve Header/Footer edit access from theme Home = 3.4.3 - 2025-05-26 = * Fix: Settings page empty after 3.4.0 in translated sites * Fix: PHP 8.4 deprecation notice = 3.4.2 - 2025-05-19 = * Tweak: Set Home links font weight to regular * Tweak: Dart SASS 3.0.0 - resolve scss deprecated warnings * Fix: Settings page empty after 3.4.0 = 3.4.1 - 2025-05-08 = * Fix: Critical Error after theme update [critical-error-on-website-54/#post-18454740](https://wordpress.org/support/topic/critical-error-on-website-54/#post-18454740) = 3.4.0 - 2025-05-05 = * New: Add Theme Home * Tweak: Theme settings page style = 3.3.0 - 2025-01-21 = * Tweak: Added changelog link in theme settings * Tweak: Updated minimum required Safari version to 15.5 * Tweak: Update autoprefixer to latest versions = 3.2.1 - 2024-12-16 = * Fix: Gutenberg editor expanded disproportionately after adding support for `theme.json` ([#430](https://github.com/elementor/hello-theme/issues/430)) * Fix: Use CSS logical properties in the theme * Fix: Add ARIA attributes to header nav menu = 3.2.0 - 2024-12-15 = * Tweak: Convert classic to hybrid theme with block-editor support * Tweak: Added new design options to header/footer * Tweak: Update `Tested up to 6.7` * Fix: Minify JS files ([#419](https://github.com/elementor/hello-theme/issues/419)) = 3.1.1 - 2024-07-30 = * Fix: Use consistent `<h2>` for comments title and comment form = 3.1.0 - 2024-06-19 = * Tweak: Update `Requires PHP 7.4` * Tweak: Update `Tested up to 6.5` * Tweak: Add the ability to style the brand layout * Tweak: Remove deprecated Elementor code * Tweak: Restore default focus styling inside the theme * Tweak: Add `aria-label` attribute to various `<nav>` elements * Tweak: Improve mobile menu keyboard accessibility * Tweak: Semantic mobile menu toggle button * Fix: The header renders redundant `<p>` when tagline is empty * Fix: Single post renders redundant wrapping `<div>` when it has no tags * Fix: Remove redundant wrapping `<div>` from `wp_nav_menu()` output * Fix: Wrap page `<h1>` with `<div>`, not `<header>` * Fix: Use consistent `<h3>` for comments title and comment form * Fix: Remove heading tags from dynamic header/footer * Fix: Mobile Menu hamburger is not visible for logged-out users in some cases ([#369](https://github.com/elementor/hello-theme/issues/369)) * Fix: Remove duplicate ID attributes in the header mobile menu * Fix: Remove redundant table styles ([#311](https://github.com/elementor/hello-theme/issues/311)) * Fix: Remove redundant space bellow Site Logo in the header/footer * Fix: Remove redundant CSS from dynamic header/footer layout * Fix: Separate post tags in single post ([#304](https://github.com/elementor/hello-theme/issues/304)) * Fix: Display `the_tags()` after `wp_link_pages()` * Fix: Remove page break navigation from archives when using `<!--nextpage-->` * Fix: Style posts pagination component layout * Fix: Add RTL support to pagination arrows in archive pages * Fix: Update pagination prev/next labels and positions ([#404](https://github.com/elementor/hello-theme/issues/404)) * Fix: Check if Elementor is loaded when using dynamic header & footer = 3.0.2 - 2024-05-28 = * Internal: Version bump release to refresh WordPress repository = 3.0.1 - 2024-01-24 = * Fix: Harden security for admin notice dismiss button * Fix: Add `alt` attribute to all the images in the dashboard = 3.0.0 - 2023-12-26 = * New: Option to disable cross-site header & footer * Tweak: Update `Requires PHP 7.3` * Tweak: Update `Tested up to 6.4` * Tweak: Move cross-site header & footer styles to a separate CSS file * Tweak: Don't load `header-footer.min.css` when disabling header & footer * Tweak: Don't load `hello-frontend.min.js` when disabling header & footer * Tweak: Replace jQuery code with vanilla JS in the frontend * Tweak: Replace jQuery code with vanilla JS in WordPress admin * Tweak: Remove unused JS code from the frontend * Tweak: Remove unused CSS code from the editor * Tweak: Remove unnecessary `role` attributes from HTML landmark elements * Tweak: Link from Elementor Site Settings to Hello Theme Settings * Fix: Dynamic script version for better caching = 2.9.0 - 2023-10-25 = * New: Introducing the new settings page for the theme * New: Option to disable description meta tag * New: Option to disable skip link * New: Option to disable page title * New: Option to unregister Hello style.css * New: Option to unregister Hello theme.css * Tweak: Update `Requires at least 6.0` * Tweak: Update `Tested up to 6.3` = 2.8.1 - 2023-07-05 = * Tweak: Added additional CSS selectors to apply RTL on comments * Fix: Comment area style regression = 2.8.0 - 2023-07-04 = * Tweak: Update `Requires PHP 7.0` * Tweak: Added description meta tag with excerpt text * Tweak: Use CSS logical properties rather than physical properties * Tweak: Replace legacy `page-break-*` CSS properties with `break-*` properties * Tweak: Remove duplicate CSS classes for screen readers * Tweak: Merge similar translation strings (i18n) = 2.7.1 - 2023-03-27 = * Tweak: Add excerpt support for pages * Tweak: When post comments are closed, display it to the user * Fix: Empty "Skip to content" href ([#276](https://github.com/elementor/hello-theme/issues/276)) * Fix: Child themes using `hello_elementor_body_open()` no longer working ([#278](https://github.com/elementor/hello-theme/issues/278)) = 2.7.0 - 2023-03-26 = * Tweak: Update `Requires at least 5.9` * Tweak: Update `Tested up to 6.2` * Tweak: Remove backwards compatibility support for `wp_body_open()` * Tweak: Match `search.php` markup to `archive.php` markup * Tweak: Check if posts have featured images set * Tweak: Remove unnecessary `role` attributes from HTML landmark elements * Tweak: Escape translation strings for secure HTML output * Tweak: Use i18n function to make the "Menu" string translatable * Tweak: Minify SVG assets * Tweak: Make header nav-menu keyboard accessible * Tweak: Add `role="button"` to the nav-menu toggle for better accessibility * Tweak: Toggle mobile nav-menu with `Enter` & `Space` keyboard keys * Tweak: Add `hello_elementor_enable_skip_link` filter to enable/disable the skip link * Tweak: Add `hello_elementor_skip_link_url` filter to change skip link URL * Tweak: Use theme CSS not Elementor plugins CSS * Tweak: Added support for the new Elementor version * Tweak: Update autoprefixer to exclude dead browsers * Tweak: Delete deprecated `elementor_hello_theme_load_textdomain` filter hook * Tweak: Delete deprecated `elementor_hello_theme_register_menus` filter hook * Tweak: Delete deprecated `elementor_hello_theme_add_theme_support` filter hook * Tweak: Delete deprecated `elementor_hello_theme_add_woocommerce_support` filter hook * Tweak: Delete deprecated `elementor_hello_theme_enqueue_style` filter hook * Tweak: Delete deprecated `elementor_hello_theme_register_elementor_locations` filter hook * Tweak: Added additional and `custom` units to header & footer panels * Tweak: Link to Elementor "Site Identity" panel from the header & footer panels * Tweak: Delete the `hello_elementor_load_textdomain` filter hook = 2.6.1 - 2022-07-11 = * Tweak: Tables looks weird on dark backgrounds ([#126](https://github.com/elementor/hello-theme/issues/126)) * Fix: Remove unnecessary PHP tags ([#213](https://github.com/elementor/hello-theme/issues/213)) = 2.6.0 - 2022-07-10 = * Tweak: Added `theme_support` for `script` and `style` to avoid validation warnings ([#184](https://github.com/elementor/hello-theme/issues/184)) * Tweak: Sanitized content for allowed HTML tags in post title ([#118](https://github.com/elementor/hello-theme/issues/118)) * Tweak: Changed the containers to `max-width: 1140px` instead of `960px` to align with the header-footer width * Tweak: Centering the page title for better consistency in all cases * Tweak: Added link between the customizer to Elementor global settings * Tweak: Added Skip Links to custom or dynamic header for better accessibility * Fix: Added output escaping in several places ([#194](https://github.com/elementor/hello-theme/issues/194)) * Fix: Post Password Form Submit button alignment (Props [@romanbondar](https://github.com/romanbondar)) * Fix: Fatal error when kit doesn't exist or needs to be recreated ([#175](https://github.com/elementor/hello-theme/issues/175)) = 2.5.0 - 2022-01-26 = * Tweak: Added keyboard navigation to Hello Elementor theme menus * Tweak: Added Skip Links and `#content` for the main wrapper for better accessibility ([#133](https://github.com/elementor/hello-theme/issues/133)) * Tweak: Added underline for text links in Post Content for better accessibility * Tweak: Removed `outline: none` from inputs for better accessibility * Fix: Footer menu location is not being presented on sites that are not running Elementor = 2.4.2 - 2021-12-20 = * Tweak: Use HTTPS in XFN profile link to prevent mixed content error ([Topic](https://wordpress.org/support/topic/url-scheme-in-xfn-profile-link/)) * Tweak: Remove comments in `style.min.css` output ([#179](https://github.com/elementor/hello-theme/issues/179)) * Tweak: Promoted Hello Elementor theme Header & Footer experiment status to Stable * Tweak: Added compatibility for upcoming WordPress version 5.9 = 2.4.1 - 2021-07-07 = * Fix: Hello Elementor theme Header & Footer experiment should be inactive for existing sites = 2.4.0 - 2021-06-29 = * New: Introducing Header and Footer site elements as an Elementor Experiment * Tweak: Updated Elementor admin notices UI = 2.3.1 - 2020-12-28 = * Tweak: Improved UI for table elements * Tweak: Added support for Gutenberg Wide and Full image formats (Props [@ramiy](https://github.com/ramiy)) * Tweak: Added font smoothing * Tweak: Update `Tested up to 5.6` * Tweak: Update `Requires PHP 5.6` * Fix: Adjusted font-family in `code`, `pre`, `kbd` and `samp` elements (Props [@75th](https://github.com/75th)) = 2.3.0 - 2020-04-19 = * Tweak: Removed caption centering by default to allow alignment using Elementor (Props [@cirkut](https://github.com/cirkut)) * Tweak: Removed `text-align` property from table elements to avoid alignment issue in RTL websites (Props [@ramiy](https://github.com/ramiy)) * Tweak: Added `input[type="url"]` to CSS reset rules ([#109](https://github.com/elementor/hello-theme/issues/109)) * Tweak: Update `Tested up to 5.4` = 2.2.2 - 2019-12-23 = * Fix: Conflicts with minifier `cssnano` and CSS animations (Props [@CeliaRozalenM](https://github.com/CeliaRozalenM)) * Fix: Max-width property is missing in `_archive.scss` (Props [@redpik](https://github.com/redpik)) = 2.2.1 - 2019-09-10 = * Tweak: Added max width to `wp-caption` ([#91](https://github.com/elementor/hello-theme/issues/91)) * Tweak: Added support of `wp_body_open` = 2.2.0 - 2019-07-22 = * Tweak: Added viewport content filter ([#49](https://github.com/elementor/hello-theme/issues/49)) * Tweak: Added support Hide Title in Elementor * Tweak: Adhere to TRT's Theme Sniffer = 2.1.2 - 2019-06-19 = * Tweak: Added theme version to enqueued styles * Tweak: Remove header tags with `hello_elementor_page_title` filter = 2.1.1 - 2019-06-13 = * Tweak: Rename `Install Elementor Now` button to `Install Elementor` = 2.1.0 - 2019-06-12 = * New: Added basic theme styling * New: Added tagline under the site name in header * New: Added `hello_elementor_page_title` filter for show\hide page title * New: Added `hello_elementor_enqueue_theme_style` filter for enqueue theme-specific style * Tweak: Hide site name & tagline if logo file is exist * Tweak: Hide default page list when there is no primary menu * Tweak: Removed `#main` in `archive.php`, `single.php`, `search.php` & `404.php` files * Tweak: Removed `#site-header` in `header.php` file * Tweak: Replaced `#top-menu` with `.site-navigation` * Tweak: Removed custom SCSS directory, it is recommended to use child theme instead of editing parent theme = 2.0.7 - 2019-06-04 = * Tweak: Added nextpage support to `single.php` * Tweak: Keep both original and minified css files * Tweak: Removed `flexible-header`, `custom-colors`, `editor-style` tags = 2.0.6 - 2019-05-08 = * Tweak: Removed irrelevant font family from `$font-family-base` * Fix: Minified `style.css` for better optimization = 2.0.5 - 2019-05-21 = * New: Introducing [Hello Theme Child](https://github.com/elementor/hello-theme-child) * Tweak: Enqueue only parent theme stylesheet * Tweak: Added admin notice box for recommending Elementor plugin = 2.0.4 - 2019-05-20 = * Tweak: Removed `accessibility-ready` tag from `style.css` = 2.0.3 - 2019-05-19 = * Tweak: Removed `accessibility-ready` tag = 2.0.2 - 2019-05-13 = * Tweak: Added `hello_elementor_content_width` filter, as per WordPress best practice = 2.0.1 - 2019-05-12 = * Tweak: Updated theme screenshot (following comment by WP Theme Review team) = 2.0.0 - 2019-05-12 = * Tweak: Updated theme screenshot (following comment by WP Theme Review team) * Tweak: Add Copyright & Image and Icon License sections in readme (following comment by WP Theme Review team) * Tweak: Remove duplicated call to `add_theme_support( 'custom-logo')` * Tweak: Readme file grammar & spelling * Tweak: Update `Tested up to 5.2` * Tweak: Change functions.php methods names prefix from `hello_elementor_theme_` to `hello_elementor_` * Tweak: Change hook names to fit theme's name. Old hooks are deprecated, users are urged to update their code where needed * Tweak: Update style for `img`, `textarea`, 'label' = 1.2.0 - 2019-02-12 = * New: Added classic-editor.css for Classic editor * Tweak: A lot of changes to match theme review guidelines * Tweak: Updated theme screenshot = 1.1.1 - 2019-01-28 = * Tweak: Removed padding reset for lists = 1.1.0 - 2018-12-26 = * New: Added SCSS & do thorough style reset * New: Added readme file * New: Added `elementor_hello_theme_load_textdomain` filter for load theme's textdomain * New: Added `elementor_hello_theme_register_menus` filter for register the theme's default menu location * New: Added `elementor_hello_theme_add_theme_support` filter for register the various supported features * New: Added `elementor_hello_theme_add_woocommerce_support` filter for register woocommerce features, including product-gallery zoom, swipe & lightbox features * New: Added `elementor_hello_theme_enqueue_style` filter for enqueue style * New: Added `elementor_hello_theme_register_elementor_locations` filter for register elementor settings * New: Added child-theme preparations * New: Added template part search * New: Added translation support * Tweak: Re-write of already existing template parts = 1.0.0 - 2018-03-19 = * Initial Public Release PK �<,]��$�� � index.phpnu ��� <?php /** * The site's entry point. * * Loads the relevant template part, * the loop is executed (when needed) by the relevant template part. * * @package HelloElementor */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } get_header(); $is_elementor_theme_exist = function_exists( 'elementor_theme_do_location' ); if ( is_singular() ) { if ( ! $is_elementor_theme_exist || ! elementor_theme_do_location( 'single' ) ) { get_template_part( 'template-parts/single' ); } } elseif ( is_archive() || is_home() ) { if ( ! $is_elementor_theme_exist || ! elementor_theme_do_location( 'archive' ) ) { get_template_part( 'template-parts/archive' ); } } elseif ( is_search() ) { if ( ! $is_elementor_theme_exist || ! elementor_theme_do_location( 'archive' ) ) { get_template_part( 'template-parts/search' ); } } else { if ( ! $is_elementor_theme_exist || ! elementor_theme_do_location( 'single' ) ) { get_template_part( 'template-parts/404' ); } } get_footer(); PK �<,]#\��R �R % includes/settings/settings-header.phpnu ��� <?php namespace HelloElementor\Includes\Settings; use Elementor\Plugin; use Elementor\Controls_Manager; use Elementor\Group_Control_Background; use Elementor\Group_Control_Text_Shadow; use Elementor\Group_Control_Text_Stroke; use Elementor\Group_Control_Typography; use Elementor\Core\Kits\Documents\Tabs\Tab_Base; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } class Settings_Header extends Tab_Base { public function get_id() { return 'hello-settings-header'; } public function get_title() { return esc_html__( 'Hello Theme Header', 'hello-elementor' ); } public function get_icon() { return 'eicon-header'; } public function get_help_url() { return ''; } public function get_group() { return 'theme-style'; } protected function register_tab_controls() { $start = is_rtl() ? 'right' : 'left'; $end = ! is_rtl() ? 'right' : 'left'; $this->start_controls_section( 'hello_header_section', [ 'tab' => 'hello-settings-header', 'label' => esc_html__( 'Header', 'hello-elementor' ), ] ); $this->add_control( 'hello_header_logo_display', [ 'type' => Controls_Manager::SWITCHER, 'label' => esc_html__( 'Site Logo', 'hello-elementor' ), 'default' => 'yes', 'label_on' => esc_html__( 'Show', 'hello-elementor' ), 'label_off' => esc_html__( 'Hide', 'hello-elementor' ), ] ); $this->add_control( 'hello_header_tagline_display', [ 'type' => Controls_Manager::SWITCHER, 'label' => esc_html__( 'Tagline', 'hello-elementor' ), 'default' => 'yes', 'label_on' => esc_html__( 'Show', 'hello-elementor' ), 'label_off' => esc_html__( 'Hide', 'hello-elementor' ), ] ); $this->add_control( 'hello_header_menu_display', [ 'type' => Controls_Manager::SWITCHER, 'label' => esc_html__( 'Menu', 'hello-elementor' ), 'default' => 'yes', 'label_on' => esc_html__( 'Show', 'hello-elementor' ), 'label_off' => esc_html__( 'Hide', 'hello-elementor' ), ] ); $this->add_control( 'hello_header_disable_note', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'warning', 'content' => sprintf( /* translators: %s: Link that opens the theme settings page. */ __( 'Note: Hiding all the elements, only hides them visually. To disable them completely go to <a href="%s">Theme Settings</a> .', 'hello-elementor' ), admin_url( 'themes.php?page=hello-theme-settings' ) ), 'render_type' => 'ui', 'condition' => [ 'hello_header_logo_display' => '', 'hello_header_tagline_display' => '', 'hello_header_menu_display' => '', ], ] ); $this->add_control( 'hello_header_layout', [ 'type' => Controls_Manager::CHOOSE, 'label' => esc_html__( 'Layout', 'hello-elementor' ), 'options' => [ 'inverted' => [ 'title' => esc_html__( 'Inverted', 'hello-elementor' ), 'icon' => "eicon-arrow-$start", ], 'stacked' => [ 'title' => esc_html__( 'Centered', 'hello-elementor' ), 'icon' => 'eicon-h-align-center', ], 'default' => [ 'title' => esc_html__( 'Default', 'hello-elementor' ), 'icon' => "eicon-arrow-$end", ], ], 'toggle' => false, 'selector' => '.site-header', 'default' => 'default', 'separator' => 'before', ] ); $this->add_responsive_control( 'hello_header_tagline_position', [ 'type' => Controls_Manager::CHOOSE, 'label' => esc_html__( 'Tagline Position', 'hello-elementor' ), 'options' => [ 'before' => [ 'title' => esc_html__( 'Before', 'hello-elementor' ), 'icon' => "eicon-arrow-$start", ], 'below' => [ 'title' => esc_html__( 'Below', 'hello-elementor' ), 'icon' => 'eicon-arrow-down', ], 'after' => [ 'title' => esc_html__( 'After', 'hello-elementor' ), 'icon' => "eicon-arrow-$end", ], ], 'toggle' => false, 'default' => 'below', 'selectors_dictionary' => [ 'before' => 'flex-direction: row-reverse; align-items: center;', 'below' => 'flex-direction: column; align-items: stretch;', 'after' => 'flex-direction: row; align-items: center;', ], 'condition' => [ 'hello_header_tagline_display' => 'yes', 'hello_header_logo_display' => 'yes', ], 'selectors' => [ '.site-header .site-branding' => '{{VALUE}}', ], ] ); $this->add_responsive_control( 'hello_header_tagline_gap', [ 'type' => Controls_Manager::SLIDER, 'label' => esc_html__( 'Tagline Gap', 'hello-elementor' ), 'size_units' => [ 'px', 'em ', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'max' => 10, ], 'rem' => [ 'max' => 10, ], ], 'condition' => [ 'hello_header_tagline_display' => 'yes', 'hello_header_logo_display' => 'yes', ], 'selectors' => [ '.site-header .site-branding' => 'gap: {{SIZE}}{{UNIT}};', ], ] ); $this->add_control( 'hello_header_width', [ 'type' => Controls_Manager::SELECT, 'label' => esc_html__( 'Width', 'hello-elementor' ), 'options' => [ 'boxed' => esc_html__( 'Boxed', 'hello-elementor' ), 'full-width' => esc_html__( 'Full Width', 'hello-elementor' ), ], 'selector' => '.site-header', 'default' => 'boxed', 'separator' => 'before', ] ); $this->add_responsive_control( 'hello_header_custom_width', [ 'type' => Controls_Manager::SLIDER, 'label' => esc_html__( 'Content Width', 'hello-elementor' ), 'size_units' => [ '%', 'px', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 2000, ], 'em' => [ 'max' => 100, ], 'rem' => [ 'max' => 100, ], ], 'condition' => [ 'hello_header_width' => 'boxed', ], 'selectors' => [ '.site-header .header-inner' => 'width: {{SIZE}}{{UNIT}}; max-width: 100%;', ], ] ); $this->add_responsive_control( 'hello_header_gap', [ 'type' => Controls_Manager::SLIDER, 'label' => esc_html__( 'Side Margins', 'hello-elementor' ), 'size_units' => [ '%', 'px', 'em ', 'rem', 'vw', 'custom' ], 'default' => [ 'size' => '0', ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'max' => 5, ], 'rem' => [ 'max' => 5, ], ], 'selectors' => [ '.site-header' => 'padding-inline-end: {{SIZE}}{{UNIT}}; padding-inline-start: {{SIZE}}{{UNIT}}', ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'hello_header_layout', 'operator' => '!=', 'value' => 'stacked', ], ], ], ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'hello_header_background', 'label' => esc_html__( 'Background', 'hello-elementor' ), 'types' => [ 'classic', 'gradient' ], 'separator' => 'before', 'selector' => '.site-header', ] ); $this->end_controls_section(); $this->start_controls_section( 'hello_header_logo_section', [ 'tab' => 'hello-settings-header', 'label' => esc_html__( 'Site Logo', 'hello-elementor' ), 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'hello_header_logo_display', 'operator' => '=', 'value' => 'yes', ], ], ], ] ); $this->add_control( 'hello_header_logo_link', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( /* translators: %s: Link that opens Elementor's "Site Identity" panel. */ __( 'Go to <a href="%s">Site Identity</a> to manage your site\'s logo', 'hello-elementor' ), "javascript:\$e.route('panel/global/settings-site-identity')" ), 'render_type' => 'ui', 'condition' => [ 'hello_header_logo_display' => 'yes', 'hello_header_logo_type' => 'logo', ], ] ); $this->add_control( 'hello_header_title_link', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( /* translators: %s: Link that opens Elementor's "Site Identity" panel. */ __( 'Go to <a href="%s">Site Identity</a> to manage your site\'s title', 'hello-elementor' ), "javascript:\$e.route('panel/global/settings-site-identity')" ), 'render_type' => 'ui', 'condition' => [ 'hello_header_logo_display' => 'yes', 'hello_header_logo_type' => 'title', ], ] ); $this->add_control( 'hello_header_logo_type', [ 'label' => esc_html__( 'Type', 'hello-elementor' ), 'type' => Controls_Manager::SELECT, 'default' => ( has_custom_logo() ? 'logo' : 'title' ), 'options' => [ 'logo' => esc_html__( 'Logo', 'hello-elementor' ), 'title' => esc_html__( 'Title', 'hello-elementor' ), ], 'frontend_available' => true, ] ); $this->add_responsive_control( 'hello_header_logo_width', [ 'type' => Controls_Manager::SLIDER, 'label' => esc_html__( 'Logo Width', 'hello-elementor' ), 'size_units' => [ '%', 'px', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 1000, ], 'em' => [ 'max' => 100, ], 'rem' => [ 'max' => 100, ], ], 'condition' => [ 'hello_header_logo_display' => 'yes', 'hello_header_logo_type' => 'logo', ], 'selectors' => [ '.site-header .site-branding .site-logo img' => 'width: {{SIZE}}{{UNIT}}; max-width: {{SIZE}}{{UNIT}}', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'hello_header_title_typography', 'label' => esc_html__( 'Typography', 'hello-elementor' ), 'condition' => [ 'hello_header_logo_display' => 'yes', 'hello_header_logo_type' => 'title', ], 'selector' => '.site-header .site-title', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'hello_header_title_text_shadow', 'label' => esc_html__( 'Text Shadow', 'hello-elementor' ), 'condition' => [ 'hello_header_logo_display' => 'yes', 'hello_header_logo_type' => 'title', ], 'selector' => '.site-header .site-title a', ] ); $this->add_group_control( Group_Control_Text_Stroke::get_type(), [ 'name' => 'hello_header_title_text_stroke', 'label' => esc_html__( 'Text Stroke', 'hello-elementor' ), 'condition' => [ 'hello_header_logo_display' => 'yes', 'hello_header_logo_type' => 'title', ], 'selector' => '.site-header .site-title a', ] ); $this->start_controls_tabs( 'hello_header_title_colors' ); $this->start_controls_tab( 'hello_header_title_colors_normal', [ 'label' => esc_html__( 'Normal', 'hello-elementor' ), 'condition' => [ 'hello_header_logo_display' => 'yes', 'hello_header_logo_type' => 'title', ], ] ); $this->add_control( 'hello_header_title_color', [ 'label' => esc_html__( 'Text Color', 'hello-elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'hello_header_logo_display' => 'yes', 'hello_header_logo_type' => 'title', ], 'selectors' => [ '.site-header .site-title a' => 'color: {{VALUE}};', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'hello_header_title_colors_hover', [ 'label' => esc_html__( 'Hover', 'hello-elementor' ), 'condition' => [ 'hello_header_logo_display' => 'yes', 'hello_header_logo_type' => 'title', ], ] ); $this->add_control( 'hello_header_title_hover_color', [ 'label' => esc_html__( 'Text Color', 'hello-elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'hello_header_logo_display' => 'yes', 'hello_header_logo_type' => 'title', ], 'selectors' => [ '.site-header .site-title a:hover' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'hello_header_title_hover_color_transition_duration', [ 'label' => esc_html__( 'Transition Duration', 'hello-elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 's', 'ms', 'custom' ], 'default' => [ 'unit' => 's', ], 'selectors' => [ '.site-header .site-title a' => 'transition-duration: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); $this->start_controls_section( 'hello_header_tagline', [ 'tab' => 'hello-settings-header', 'label' => esc_html__( 'Tagline', 'hello-elementor' ), 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'hello_header_tagline_display', 'operator' => '=', 'value' => 'yes', ], ], ], ] ); $this->add_control( 'hello_header_tagline_link', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( /* translators: %s: Link that opens Elementor's "Site Identity" panel. */ __( 'Go to <a href="%s">Site Identity</a> to manage your site\'s tagline', 'hello-elementor' ), "javascript:\$e.route('panel/global/settings-site-identity')" ), 'render_type' => 'ui', 'condition' => [ 'hello_header_tagline_display' => 'yes', ], ] ); $this->add_control( 'hello_header_tagline_color', [ 'label' => esc_html__( 'Text Color', 'hello-elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'hello_header_tagline_display' => 'yes', ], 'selectors' => [ '.site-header .site-description' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'hello_header_tagline_typography', 'label' => esc_html__( 'Typography', 'hello-elementor' ), 'condition' => [ 'hello_header_tagline_display' => 'yes', ], 'selector' => '.site-header .site-description', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'hello_header_tagline_text_shadow', 'label' => esc_html__( 'Text Shadow', 'hello-elementor' ), 'condition' => [ 'hello_header_tagline_display' => 'yes', ], 'selector' => '.site-header .site-description', ] ); $this->end_controls_section(); $this->start_controls_section( 'hello_header_menu_tab', [ 'tab' => 'hello-settings-header', 'label' => esc_html__( 'Menu', 'hello-elementor' ), 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'hello_header_menu_display', 'operator' => '=', 'value' => 'yes', ], ], ], ] ); $available_menus = wp_get_nav_menus(); $menus = [ '0' => esc_html__( '— Select a Menu —', 'hello-elementor' ) ]; foreach ( $available_menus as $available_menu ) { $menus[ $available_menu->term_id ] = $available_menu->name; } if ( 1 === count( $menus ) ) { $this->add_control( 'hello_header_menu_notice', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'heading' => esc_html__( 'There are no menus in your site.', 'hello-elementor' ), 'content' => sprintf( __( 'Go to <a href="%s" target="_blank">Menus screen</a> to create one.', 'hello-elementor' ), admin_url( 'nav-menus.php?action=edit&menu=0' ) ), 'render_type' => 'ui', ] ); } else { $this->add_control( 'hello_header_menu_warning', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( __( 'Go to the <a href="%s" target="_blank">Menus screen</a> to manage your menus. Changes will be reflected in the preview only after the page reloads.', 'hello-elementor' ), admin_url( 'nav-menus.php' ) ), 'render_type' => 'ui', ] ); $this->add_control( 'hello_header_menu', [ 'label' => esc_html__( 'Menu', 'hello-elementor' ), 'type' => Controls_Manager::SELECT, 'options' => $menus, 'default' => array_keys( $menus )[0], ] ); $this->add_control( 'hello_header_menu_layout', [ 'label' => esc_html__( 'Menu Layout', 'hello-elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'horizontal', 'options' => [ 'horizontal' => esc_html__( 'Horizontal', 'hello-elementor' ), 'dropdown' => esc_html__( 'Dropdown', 'hello-elementor' ), ], 'frontend_available' => true, ] ); $dropdown_options = []; $active_breakpoints = Plugin::$instance->breakpoints->get_active_breakpoints(); $selected_breakpoints = [ 'mobile', 'tablet' ]; foreach ( $active_breakpoints as $breakpoint_key => $breakpoint_instance ) { if ( ! in_array( $breakpoint_key, $selected_breakpoints, true ) ) { continue; } $dropdown_options[ $breakpoint_key ] = sprintf( /* translators: 1: Breakpoint label, 2: Breakpoint value. */ esc_html__( '%1$s (> %2$dpx)', 'hello-elementor' ), $breakpoint_instance->get_label(), $breakpoint_instance->get_value() ); } $dropdown_options['none'] = esc_html__( 'None', 'hello-elementor' ); $this->add_control( 'hello_header_menu_dropdown', [ 'label' => esc_html__( 'Breakpoint', 'hello-elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'tablet', 'options' => $dropdown_options, 'selector' => '.site-header', 'condition' => [ 'hello_header_menu_layout!' => 'dropdown', ], ] ); $this->add_control( 'hello_header_menu_color', [ 'label' => esc_html__( 'Color', 'hello-elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'hello_header_menu_display' => 'yes', ], 'selectors' => [ '.site-header .site-navigation ul.menu li a' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'hello_header_menu_toggle_color', [ 'label' => esc_html__( 'Toggle Color', 'hello-elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'hello_header_menu_display' => 'yes', ], 'selectors' => [ '.site-header .site-navigation-toggle .site-navigation-toggle-icon' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'hello_header_menu_toggle_background_color', [ 'label' => esc_html__( 'Toggle Background Color', 'hello-elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'hello_header_menu_display' => 'yes', ], 'selectors' => [ '.site-header .site-navigation-toggle' => 'background-color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'hello_header_menu_typography', 'label' => esc_html__( 'Typography', 'hello-elementor' ), 'condition' => [ 'hello_header_menu_display' => 'yes', ], 'selector' => '.site-header .site-navigation .menu li', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'hello_header_menu_text_shadow', 'label' => esc_html__( 'Text Shadow', 'hello-elementor' ), 'condition' => [ 'hello_header_menu_display' => 'yes', ], 'selector' => '.site-header .site-navigation .menu li', ] ); } $this->end_controls_section(); } public function on_save( $data ) { // Save chosen header menu to the WP settings. if ( isset( $data['settings']['hello_header_menu'] ) ) { $menu_id = $data['settings']['hello_header_menu']; $locations = get_theme_mod( 'nav_menu_locations' ); $locations['menu-1'] = (int) $menu_id; set_theme_mod( 'nav_menu_locations', $locations ); } } public function get_additional_tab_content() { $content_template = ' <div class="hello-elementor elementor-nerd-box"> <img src="%1$s" class="elementor-nerd-box-icon" alt="%2$s"> <p class="elementor-nerd-box-title">%3$s</p> <p class="elementor-nerd-box-message">%4$s</p> <a class="elementor-nerd-box-link elementor-button go-pro" target="_blank" href="%5$s">%6$s</a> </div>'; if ( ! defined( 'ELEMENTOR_PRO_VERSION' ) ) { return sprintf( $content_template, get_template_directory_uri() . '/assets/images/go-pro.svg', esc_attr__( 'Get Elementor Pro', 'hello-elementor' ), esc_html__( 'Create custom headers', 'hello-elementor' ), esc_html__( 'Add mega menus, search bars, login buttons and more with Elementor Pro.', 'hello-elementor' ), 'https://go.elementor.com/hello-theme-header/', esc_html__( 'Upgrade Now', 'hello-elementor' ) ); } else { return sprintf( $content_template, get_template_directory_uri() . '/assets/images/go-pro.svg', esc_attr__( 'Elementor Pro', 'hello-elementor' ), esc_html__( 'Create a custom header with the Theme Builder', 'hello-elementor' ), esc_html__( 'With the Theme Builder you can jump directly into each part of your site', 'hello-elementor' ), get_admin_url( null, 'admin.php?page=elementor-app#/site-editor/templates/header' ), esc_html__( 'Create Header', 'hello-elementor' ) ); } } } PK �<,]�V��O �O % includes/settings/settings-footer.phpnu ��� <?php namespace HelloElementor\Includes\Settings; use Elementor\Controls_Manager; use Elementor\Group_Control_Background; use Elementor\Group_Control_Text_Shadow; use Elementor\Group_Control_Text_Stroke; use Elementor\Group_Control_Typography; use Elementor\Core\Kits\Documents\Tabs\Tab_Base; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } class Settings_Footer extends Tab_Base { public function get_id() { return 'hello-settings-footer'; } public function get_title() { return esc_html__( 'Hello Theme Footer', 'hello-elementor' ); } public function get_icon() { return 'eicon-footer'; } public function get_help_url() { return ''; } public function get_group() { return 'theme-style'; } protected function register_tab_controls() { $start = is_rtl() ? 'right' : 'left'; $end = ! is_rtl() ? 'right' : 'left'; $this->start_controls_section( 'hello_footer_section', [ 'tab' => 'hello-settings-footer', 'label' => esc_html__( 'Footer', 'hello-elementor' ), ] ); $this->add_control( 'hello_footer_logo_display', [ 'type' => Controls_Manager::SWITCHER, 'label' => esc_html__( 'Site Logo', 'hello-elementor' ), 'default' => 'yes', 'label_on' => esc_html__( 'Show', 'hello-elementor' ), 'label_off' => esc_html__( 'Hide', 'hello-elementor' ), 'selector' => '.site-footer .site-branding', ] ); $this->add_control( 'hello_footer_tagline_display', [ 'type' => Controls_Manager::SWITCHER, 'label' => esc_html__( 'Tagline', 'hello-elementor' ), 'default' => 'yes', 'label_on' => esc_html__( 'Show', 'hello-elementor' ), 'label_off' => esc_html__( 'Hide', 'hello-elementor' ), 'selector' => '.site-footer .site-description', ] ); $this->add_control( 'hello_footer_menu_display', [ 'type' => Controls_Manager::SWITCHER, 'label' => esc_html__( 'Menu', 'hello-elementor' ), 'default' => 'yes', 'label_on' => esc_html__( 'Show', 'hello-elementor' ), 'label_off' => esc_html__( 'Hide', 'hello-elementor' ), 'selector' => '.site-footer .site-navigation', ] ); $this->add_control( 'hello_footer_copyright_display', [ 'type' => Controls_Manager::SWITCHER, 'label' => esc_html__( 'Copyright', 'hello-elementor' ), 'default' => 'yes', 'label_on' => esc_html__( 'Show', 'hello-elementor' ), 'label_off' => esc_html__( 'Hide', 'hello-elementor' ), 'selector' => '.site-footer .copyright', ] ); $this->add_control( 'hello_footer_disable_note', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'warning', 'content' => sprintf( /* translators: %s: Link that opens the theme settings page. */ __( 'Note: Hiding all the elements, only hides them visually. To disable them completely go to <a href="%s">Theme Settings</a> .', 'hello-elementor' ), admin_url( 'themes.php?page=hello-theme-settings' ) ), 'render_type' => 'ui', 'condition' => [ 'hello_footer_logo_display' => '', 'hello_footer_tagline_display' => '', 'hello_footer_menu_display' => '', 'hello_footer_copyright_display' => '', ], ] ); $this->add_control( 'hello_footer_layout', [ 'type' => Controls_Manager::CHOOSE, 'label' => esc_html__( 'Layout', 'hello-elementor' ), 'options' => [ 'inverted' => [ 'title' => esc_html__( 'Inverted', 'hello-elementor' ), 'icon' => "eicon-arrow-$start", ], 'stacked' => [ 'title' => esc_html__( 'Centered', 'hello-elementor' ), 'icon' => 'eicon-h-align-center', ], 'default' => [ 'title' => esc_html__( 'Default', 'hello-elementor' ), 'icon' => "eicon-arrow-$end", ], ], 'toggle' => false, 'selector' => '.site-footer', 'default' => 'default', 'separator' => 'before', ] ); $this->add_responsive_control( 'hello_footer_tagline_position', [ 'type' => Controls_Manager::CHOOSE, 'label' => esc_html__( 'Tagline Position', 'hello-elementor' ), 'options' => [ 'before' => [ 'title' => esc_html__( 'Before', 'hello-elementor' ), 'icon' => "eicon-arrow-$start", ], 'below' => [ 'title' => esc_html__( 'Below', 'hello-elementor' ), 'icon' => 'eicon-arrow-down', ], 'after' => [ 'title' => esc_html__( 'After', 'hello-elementor' ), 'icon' => "eicon-arrow-$end", ], ], 'toggle' => false, 'default' => 'below', 'selectors_dictionary' => [ 'before' => 'flex-direction: row-reverse; align-items: center;', 'below' => 'flex-direction: column; align-items: stretch;', 'after' => 'flex-direction: row; align-items: center;', ], 'condition' => [ 'hello_footer_tagline_display' => 'yes', 'hello_footer_logo_display' => 'yes', ], 'selectors' => [ '.site-footer .site-branding' => '{{VALUE}}', ], ] ); $this->add_responsive_control( 'hello_footer_tagline_gap', [ 'type' => Controls_Manager::SLIDER, 'label' => esc_html__( 'Tagline Gap', 'hello-elementor' ), 'size_units' => [ 'px', 'em ', 'rem', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'max' => 10, ], 'rem' => [ 'max' => 10, ], ], 'condition' => [ 'hello_footer_tagline_display' => 'yes', 'hello_footer_logo_display' => 'yes', ], 'selectors' => [ '.site-footer .site-branding' => 'gap: {{SIZE}}{{UNIT}};', ], ] ); $this->add_control( 'hello_footer_width', [ 'type' => Controls_Manager::SELECT, 'label' => esc_html__( 'Width', 'hello-elementor' ), 'options' => [ 'boxed' => esc_html__( 'Boxed', 'hello-elementor' ), 'full-width' => esc_html__( 'Full Width', 'hello-elementor' ), ], 'selector' => '.site-footer', 'default' => 'boxed', 'separator' => 'before', ] ); $this->add_responsive_control( 'hello_footer_custom_width', [ 'type' => Controls_Manager::SLIDER, 'label' => esc_html__( 'Content Width', 'hello-elementor' ), 'size_units' => [ '%', 'px', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 2000, ], 'em' => [ 'max' => 100, ], 'rem' => [ 'max' => 100, ], ], 'condition' => [ 'hello_footer_width' => 'boxed', ], 'selectors' => [ '.site-footer .footer-inner' => 'width: {{SIZE}}{{UNIT}}; max-width: 100%;', ], ] ); $this->add_responsive_control( 'hello_footer_gap', [ 'type' => Controls_Manager::SLIDER, 'label' => esc_html__( 'Side Margins', 'hello-elementor' ), 'size_units' => [ '%', 'px', 'em ', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 100, ], 'em' => [ 'max' => 5, ], 'rem' => [ 'max' => 5, ], ], 'selectors' => [ '.site-footer' => 'padding-inline-end: {{SIZE}}{{UNIT}}; padding-inline-start: {{SIZE}}{{UNIT}}', ], 'condition' => [ 'hello_footer_layout!' => 'stacked', ], ] ); $this->add_group_control( Group_Control_Background::get_type(), [ 'name' => 'hello_footer_background', 'label' => esc_html__( 'Background', 'hello-elementor' ), 'types' => [ 'classic', 'gradient' ], 'separator' => 'before', 'selector' => '.site-footer', ] ); $this->end_controls_section(); $this->start_controls_section( 'hello_footer_logo_section', [ 'tab' => 'hello-settings-footer', 'label' => esc_html__( 'Site Logo', 'hello-elementor' ), 'condition' => [ 'hello_footer_logo_display!' => '', ], ] ); $this->add_control( 'hello_footer_logo_link', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( /* translators: %s: Link that opens Elementor's "Site Identity" panel. */ __( 'Go to <a href="%s">Site Identity</a> to manage your site\'s logo', 'hello-elementor' ), "javascript:\$e.route('panel/global/settings-site-identity')" ), 'render_type' => 'ui', 'condition' => [ 'hello_footer_logo_display' => 'yes', 'hello_footer_logo_type' => 'logo', ], ] ); $this->add_control( 'hello_footer_title_link', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( /* translators: %s: Link that opens Elementor's "Site Identity" panel. */ __( 'Go to <a href="%s">Site Identity</a> to manage your site\'s title', 'hello-elementor' ), "javascript:\$e.route('panel/global/settings-site-identity')" ), 'render_type' => 'ui', 'condition' => [ 'hello_footer_logo_display' => 'yes', 'hello_footer_logo_type' => 'title', ], ] ); $this->add_control( 'hello_footer_logo_type', [ 'label' => esc_html__( 'Type', 'hello-elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'logo', 'options' => [ 'logo' => esc_html__( 'Logo', 'hello-elementor' ), 'title' => esc_html__( 'Title', 'hello-elementor' ), ], 'frontend_available' => true, ] ); $this->add_responsive_control( 'hello_footer_logo_width', [ 'type' => Controls_Manager::SLIDER, 'label' => esc_html__( 'Logo Width', 'hello-elementor' ), 'size_units' => [ '%', 'px', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'max' => 1000, ], 'em' => [ 'max' => 100, ], 'rem' => [ 'max' => 100, ], ], 'condition' => [ 'hello_footer_logo_display' => 'yes', 'hello_footer_logo_type' => 'logo', ], 'selectors' => [ '.site-footer .site-branding .site-logo img' => 'width: {{SIZE}}{{UNIT}}; max-width: {{SIZE}}{{UNIT}}', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'hello_footer_title_typography', 'label' => esc_html__( 'Typography', 'hello-elementor' ), 'condition' => [ 'hello_footer_logo_display' => 'yes', 'hello_footer_logo_type' => 'title', ], 'selector' => '.site-footer .site-title', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'hello_footer_title_text_shadow', 'label' => esc_html__( 'Text Shadow', 'hello-elementor' ), 'condition' => [ 'hello_footer_logo_display' => 'yes', 'hello_footer_logo_type' => 'title', ], 'selector' => '.site-footer .site-title a', ] ); $this->add_group_control( Group_Control_Text_Stroke::get_type(), [ 'name' => 'hello_footer_title_text_stroke', 'label' => esc_html__( 'Text Stroke', 'hello-elementor' ), 'condition' => [ 'hello_footer_logo_display' => 'yes', 'hello_footer_logo_type' => 'title', ], 'selector' => '.site-footer .site-title a', ] ); $this->start_controls_tabs( 'hello_footer_title_colors' ); $this->start_controls_tab( 'hello_footer_title_colors_normal', [ 'label' => esc_html__( 'Normal', 'hello-elementor' ), 'condition' => [ 'hello_footer_logo_display' => 'yes', 'hello_footer_logo_type' => 'title', ], ] ); $this->add_control( 'hello_footer_title_color', [ 'label' => esc_html__( 'Text Color', 'hello-elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'hello_footer_logo_display' => 'yes', 'hello_footer_logo_type' => 'title', ], 'selectors' => [ '.site-footer .site-title a' => 'color: {{VALUE}};', ], ] ); $this->end_controls_tab(); $this->start_controls_tab( 'hello_footer_title_colors_hover', [ 'label' => esc_html__( 'Hover', 'hello-elementor' ), 'condition' => [ 'hello_footer_logo_display' => 'yes', 'hello_footer_logo_type' => 'title', ], ] ); $this->add_control( 'hello_footer_title_hover_color', [ 'label' => esc_html__( 'Text Color', 'hello-elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'hello_footer_logo_display' => 'yes', 'hello_footer_logo_type' => 'title', ], 'selectors' => [ '.site-footer .site-title a:hover' => 'color: {{VALUE}};', ], ] ); $this->add_control( 'hello_footer_title_hover_color_transition_duration', [ 'label' => esc_html__( 'Transition Duration', 'hello-elementor' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 's', 'ms', 'custom' ], 'default' => [ 'unit' => 's', ], 'selectors' => [ '.site-footer .site-title a' => 'transition-duration: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_tab(); $this->end_controls_tabs(); $this->end_controls_section(); $this->start_controls_section( 'hello_footer_tagline', [ 'tab' => 'hello-settings-footer', 'label' => esc_html__( 'Tagline', 'hello-elementor' ), 'condition' => [ 'hello_footer_tagline_display' => 'yes', ], ] ); $this->add_control( 'hello_footer_tagline_link', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( /* translators: %s: Link that opens Elementor's "Site Identity" panel. */ __( 'Go to <a href="%s">Site Identity</a> to manage your site\'s tagline', 'hello-elementor' ), "javascript:\$e.route('panel/global/settings-site-identity')" ), 'render_type' => 'ui', 'condition' => [ 'hello_footer_tagline_display' => 'yes', ], ] ); $this->add_control( 'hello_footer_tagline_color', [ 'label' => esc_html__( 'Text Color', 'hello-elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'hello_footer_tagline_display' => 'yes', ], 'selectors' => [ '.site-footer .site-description' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'hello_footer_tagline_typography', 'label' => esc_html__( 'Typography', 'hello-elementor' ), 'condition' => [ 'hello_footer_tagline_display' => 'yes', ], 'selector' => '.site-footer .site-description', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'hello_footer_tagline_text_shadow', 'label' => esc_html__( 'Text Shadow', 'hello-elementor' ), 'condition' => [ 'hello_footer_tagline_display' => 'yes', ], 'selector' => '.site-footer .site-description', ] ); $this->end_controls_section(); $this->start_controls_section( 'hello_footer_menu_tab', [ 'tab' => 'hello-settings-footer', 'label' => esc_html__( 'Menu', 'hello-elementor' ), 'condition' => [ 'hello_footer_menu_display' => 'yes', ], ] ); $available_menus = wp_get_nav_menus(); $menus = [ '0' => esc_html__( '— Select a Menu —', 'hello-elementor' ) ]; foreach ( $available_menus as $available_menu ) { $menus[ $available_menu->term_id ] = $available_menu->name; } if ( 1 === count( $menus ) ) { $this->add_control( 'hello_footer_menu_notice', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'heading' => esc_html__( 'There are no menus in your site.', 'hello-elementor' ), 'content' => sprintf( __( 'Go to <a href="%s" target="_blank">Menus screen</a> to create one.', 'hello-elementor' ), admin_url( 'nav-menus.php?action=edit&menu=0' ) ), 'render_type' => 'ui', ] ); } else { $this->add_control( 'hello_footer_menu_warning', [ 'type' => Controls_Manager::ALERT, 'alert_type' => 'info', 'content' => sprintf( __( 'Go to the <a href="%s" target="_blank">Menus screen</a> to manage your menus. Changes will be reflected in the preview only after the page reloads.', 'hello-elementor' ), admin_url( 'nav-menus.php' ) ), 'render_type' => 'ui', ] ); $this->add_control( 'hello_footer_menu', [ 'label' => esc_html__( 'Menu', 'hello-elementor' ), 'type' => Controls_Manager::SELECT, 'options' => $menus, 'default' => array_keys( $menus )[0], ] ); $this->add_control( 'hello_footer_menu_color', [ 'label' => esc_html__( 'Color', 'hello-elementor' ), 'type' => Controls_Manager::COLOR, 'selectors' => [ 'footer .footer-inner .site-navigation a' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'hello_footer_menu_typography', 'label' => esc_html__( 'Typography', 'hello-elementor' ), 'selector' => 'footer .footer-inner .site-navigation a', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'hello_footer_menu_text_shadow', 'label' => esc_html__( 'Text Shadow', 'hello-elementor' ), 'selector' => 'footer .footer-inner .site-navigation a', ] ); } $this->end_controls_section(); $this->start_controls_section( 'hello_footer_copyright_section', [ 'tab' => 'hello-settings-footer', 'label' => esc_html__( 'Copyright', 'hello-elementor' ), 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'hello_footer_copyright_display', 'operator' => '=', 'value' => 'yes', ], ], ], ] ); $this->add_control( 'hello_footer_copyright_text', [ 'type' => Controls_Manager::TEXTAREA, 'label' => esc_html__( 'Text', 'hello-elementor' ), 'default' => esc_html__( 'All rights reserved', 'hello-elementor' ), ] ); $this->add_control( 'hello_footer_copyright_color', [ 'label' => esc_html__( 'Text Color', 'hello-elementor' ), 'type' => Controls_Manager::COLOR, 'condition' => [ 'hello_footer_copyright_display' => 'yes', ], 'selectors' => [ '.site-footer .copyright p' => 'color: {{VALUE}};', ], ] ); $this->add_group_control( Group_Control_Typography::get_type(), [ 'name' => 'hello_footer_copyright_typography', 'label' => esc_html__( 'Typography', 'hello-elementor' ), 'condition' => [ 'hello_footer_copyright_display' => 'yes', ], 'selector' => '.site-footer .copyright p', ] ); $this->add_group_control( Group_Control_Text_Shadow::get_type(), [ 'name' => 'hello_footer_copyright_text_shadow', 'label' => esc_html__( 'Text Shadow', 'hello-elementor' ), 'condition' => [ 'hello_footer_copyright_display' => 'yes', ], 'selector' => '.site-footer .copyright p', ] ); $this->end_controls_section(); } public function on_save( $data ) { // Save chosen footer menu to the WP settings. if ( isset( $data['settings']['hello_footer_menu'] ) ) { $menu_id = $data['settings']['hello_footer_menu']; $locations = get_theme_mod( 'nav_menu_locations' ); $locations['menu-2'] = (int) $menu_id; set_theme_mod( 'nav_menu_locations', $locations ); } } public function get_additional_tab_content() { $content_template = ' <div class="hello-elementor elementor-nerd-box"> <img src="%1$s" class="elementor-nerd-box-icon" alt="%2$s"> <p class="elementor-nerd-box-title">%3$s</p> <p class="elementor-nerd-box-message">%4$s</p> <a class="elementor-nerd-box-link elementor-button go-pro" target="_blank" href="%5$s">%6$s</a> </div>'; if ( ! defined( 'ELEMENTOR_PRO_VERSION' ) ) { return sprintf( $content_template, get_template_directory_uri() . '/assets/images/go-pro.svg', esc_attr__( 'Get Elementor Pro', 'hello-elementor' ), esc_html__( 'Create custom footers', 'hello-elementor' ), esc_html__( 'Adjust your footer to include contact forms, sitemaps and more with Elementor Pro.', 'hello-elementor' ), 'https://go.elementor.com/hello-theme-footer/', esc_html__( 'Upgrade Now', 'hello-elementor' ) ); } else { return sprintf( $content_template, get_template_directory_uri() . '/assets/images/go-pro.svg', esc_attr__( 'Elementor Pro', 'hello-elementor' ), esc_html__( 'Create a custom footer with the Theme Builder', 'hello-elementor' ), esc_html__( 'With the Theme Builder you can jump directly into each part of your site', 'hello-elementor' ), get_admin_url( null, 'admin.php?page=elementor-app#/site-editor/templates/footer' ), esc_html__( 'Create Footer', 'hello-elementor' ) ); } } } PK �<,]���` ` / includes/customizer/customizer-action-links.phpnu ��� <?php namespace HelloElementor\Includes\Customizer; use HelloTheme\Includes\Utils; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } class Hello_Customizer_Action_Links extends \WP_Customize_Control { // Whitelist content parameter public $content = ''; /** * Render the control's content. * * Allows the content to be overridden without having to rewrite the wrapper. * * @return void */ public function render_content() { $this->print_customizer_action_links(); if ( isset( $this->description ) ) { echo '<span class="description customize-control-description">' . wp_kses_post( $this->description ) . '</span>'; } } /** * Print customizer action links. * * @return void */ private function print_customizer_action_links() { if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $action_link_data = []; $action_link_type = Utils::get_action_link_type(); switch ( $action_link_type ) { case 'install-elementor': $action_link_data = [ 'image' => get_template_directory_uri() . '/assets/images/elementor.svg', 'alt' => esc_attr__( 'Elementor', 'hello-elementor' ), 'title' => esc_html__( 'Install Elementor', 'hello-elementor' ), 'message' => esc_html__( 'Create cross-site header & footer using Elementor.', 'hello-elementor' ), 'button' => esc_html__( 'Install Elementor', 'hello-elementor' ), 'link' => wp_nonce_url( add_query_arg( [ 'action' => 'install-plugin', 'plugin' => 'elementor', ], admin_url( 'update.php' ) ), 'install-plugin_elementor' ), ]; break; case 'activate-elementor': $action_link_data = [ 'image' => get_template_directory_uri() . '/assets/images/elementor.svg', 'alt' => esc_attr__( 'Elementor', 'hello-elementor' ), 'title' => esc_html__( 'Activate Elementor', 'hello-elementor' ), 'message' => esc_html__( 'Create cross-site header & footer using Elementor.', 'hello-elementor' ), 'button' => esc_html__( 'Activate Elementor', 'hello-elementor' ), 'link' => wp_nonce_url( 'plugins.php?action=activate&plugin=elementor/elementor.php', 'activate-plugin_elementor/elementor.php' ), ]; break; case 'activate-header-footer-experiment': $action_link_data = [ 'image' => get_template_directory_uri() . '/assets/images/elementor.svg', 'alt' => esc_attr__( 'Elementor', 'hello-elementor' ), 'title' => esc_html__( 'Style using Elementor', 'hello-elementor' ), 'message' => esc_html__( 'Design your cross-site header & footer from Elementor’s "Site Settings" panel.', 'hello-elementor' ), 'button' => esc_html__( 'Activate header & footer experiment', 'hello-elementor' ), 'link' => wp_nonce_url( 'admin.php?page=elementor#tab-experiments' ), ]; break; case 'style-header-footer': $action_link_data = [ 'image' => get_template_directory_uri() . '/assets/images/elementor.svg', 'alt' => esc_attr__( 'Elementor', 'hello-elementor' ), 'title' => esc_html__( 'Style cross-site header & footer', 'hello-elementor' ), 'message' => esc_html__( 'Customize your cross-site header & footer from Elementor’s "Site Settings" panel.', 'hello-elementor' ), 'button' => esc_html__( 'Start Designing', 'hello-elementor' ), 'link' => wp_nonce_url( 'post.php?post=' . get_option( 'elementor_active_kit' ) . '&action=elementor' ), ]; break; } $customizer_content = $this->get_customizer_action_links_html( $action_link_data ); echo wp_kses_post( $customizer_content ); } /** * Get the customizer action links HTML. * * @param array $data * * @return string */ private function get_customizer_action_links_html( $data ) { if ( empty( $data ) || ! isset( $data['image'] ) || ! isset( $data['alt'] ) || ! isset( $data['title'] ) || ! isset( $data['message'] ) || ! isset( $data['link'] ) || ! isset( $data['button'] ) ) { return; } return sprintf( '<div class="hello-action-links"> <img src="%1$s" alt="%2$s"> <p class="hello-action-links-title">%3$s</p> <p class="hello-action-links-message">%4$s</p> <a class="button button-primary" target="_blank" href="%5$s">%6$s</a> </div>', $data['image'], $data['alt'], $data['title'], $data['message'], $data['link'], $data['button'], ); } } PK �<,]�Sn� � ) includes/customizer/customizer-upsell.phpnu ��� <?php namespace HelloElementor\Includes\Customizer; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } class Hello_Customizer_Upsell extends \WP_Customize_Section { public $heading; public $description; public $button_text; public $button_url; /** * Render the section, and the controls that have been added to it. */ protected function render() { ?> <li id="accordion-section-<?php echo esc_attr( $this->id ); ?>" class="accordion-section control-section control-section-<?php echo esc_attr( $this->id ); ?> cannot-expand"> <h3 class="accordion-section-title"><?php echo esc_html( $this->heading ); ?></h3> <p class="accordion-section-description"><?php echo esc_html( $this->description ); ?></p> <div class="accordion-section-buttons"> <a href="<?php echo esc_url( $this->button_url ); ?>" target="_blank"><?php echo esc_html( $this->button_text ); ?></a> </div> </li> <?php } } PK �<,]�Wt� � includes/script.phpnu ��� <?php namespace HelloTheme\Includes; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } class Script { protected string $handle; protected array $dependencies; public function __construct( string $handle, array $dependencies = [] ) { $this->handle = $handle; $this->dependencies = $dependencies; } public function enqueue() { $asset_path = HELLO_THEME_SCRIPTS_PATH . $this->handle . '.asset.php'; $asset_url = HELLO_THEME_SCRIPTS_URL; if ( ! file_exists( $asset_path ) ) { throw new \Exception( $asset_path . ' - You need to run `npm run build` for the "hello-elementor" first.' ); } $script_asset = require $asset_path; foreach ( $this->dependencies as $dependency ) { $script_asset['dependencies'][] = $dependency; } wp_enqueue_script( $this->handle, $asset_url . "$this->handle.js", $script_asset['dependencies'], $script_asset['version'], true ); \wp_set_script_translations( $this->handle, 'hello-elementor' ); } } PK �<,]kl� � includes/module-base.phpnu ��� <?php namespace HelloTheme\Includes; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Module Base. * * An abstract class providing the properties and methods needed to * manage and handle modules in inheriting classes. * * @abstract * @package HelloTheme * @subpackage HelloThemeModules */ abstract class Module_Base { /** * Module class reflection. * * Holds the information about a class. * @access private * * @var ?\ReflectionClass */ private ?\ReflectionClass $reflection = null; /** * Module components. * * Holds the module components. * @access private * * @var array */ private array $components = []; /** * Module instance. * * Holds the module instance. * @access protected * * @var Module_Base[] */ protected static array $instances = []; /** * Get module name. * * Retrieve the module name. * @access public * @abstract * * @return string Module name. */ abstract public static function get_name(): string; /** * @abstract * @access protected * * @return string[] */ abstract protected function get_component_ids(): array; /** * Singleton Instance. * * Ensures only one instance of the module class is loaded or can be loaded. * @access public * @static * * @return Module_Base An instance of the class. */ public static function instance(): Module_Base { $class_name = static::class_name(); if ( empty( static::$instances[ $class_name ] ) ) { static::$instances[ $class_name ] = new static(); // @codeCoverageIgnore } return static::$instances[ $class_name ]; } /** * is_active * * @access public * @static * * @return bool */ public static function is_active(): bool { /** * allow enabling/disabling the module on run-time * * @param bool $is_active the filters value */ return apply_filters( 'hello-plus-theme/modules/' . static::get_name() . '/is-active', true ); } /** * Class name. * * Retrieve the name of the class. * @access public * @static */ public static function class_name(): string { return get_called_class(); } /** * @access public * * @return \ReflectionClass */ public function get_reflection(): \ReflectionClass { if ( null === $this->reflection ) { try { $this->reflection = new \ReflectionClass( $this ); } catch ( \ReflectionException $e ) { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( $e->getMessage() ); //phpcs:ignore } } } return $this->reflection; } /** * Add module component. * * Add new component to the current module. * @access public * * @param string $id Component ID. * @param mixed $instance An instance of the component. */ public function add_component( string $id, $instance ) { $this->components[ $id ] = $instance; } /** * @access public * * @return array */ public function get_components(): array { return $this->components; } /** * Get module component. * * Retrieve the module component. * @access public * * @param string $id Component ID. * * @return mixed An instance of the component, or `null` if the component * doesn't exist. */ public function get_component( string $id ) { if ( isset( $this->components[ $id ] ) ) { return $this->components[ $id ]; } return null; } /** * Retrieve the namespace of the class * * @static * @access public * * @return string */ public static function namespace_name(): string { $class_name = static::class_name(); return substr( $class_name, 0, strrpos( $class_name, '\\' ) ); } /** * Adds an array of components. * Assumes namespace structure contains `\Components\` * * @access protected * * @param ?array $components_ids => component's class name. * @return void */ protected function register_components( ?array $components_ids = null ): void { if ( empty( $components_ids ) ) { $components_ids = $this->get_component_ids(); } $namespace = static::namespace_name(); foreach ( $components_ids as $component_id ) { $class_name = $namespace . '\\Components\\' . $component_id; $this->add_component( $component_id, new $class_name() ); } } /** * Registers the Module's widgets. * Assumes namespace structure contains `\Widgets\` * * @access protected * * @param \Elementor\Widgets_Manager $widgets_manager * @return void */ public function register_widgets( \Elementor\Widgets_Manager $widgets_manager ): void { $widget_ids = $this->get_widget_ids(); $namespace = static::namespace_name(); foreach ( $widget_ids as $widget_id ) { $class_name = $namespace . '\\Widgets\\' . $widget_id; $widgets_manager->register( new $class_name() ); } } /** * @access protected * * @return string[] */ protected function get_widget_ids(): array { return []; } /** * @access protected * * @return void */ protected function register_hooks(): void { add_action( 'elementor/widgets/register', [ $this, 'register_widgets' ] ); } /** * Clone. * * Disable class cloning and throw an error on object clone. * * The whole idea of the singleton design pattern is that there is a single * object. Therefore, we don't want the object to be cloned. * * @access private */ public function __clone() { // Cloning instances of the class is forbidden _doing_it_wrong( __FUNCTION__, esc_html__( 'Something went wrong.', 'hello-elementor' ), '0.0.1' ); // @codeCoverageIgnore } /** * Wakeup. * * Disable un-serializing of the class. * @access public */ public function __wakeup() { // Un-serializing instances of the class is forbidden _doing_it_wrong( __FUNCTION__, esc_html__( 'Something went wrong.', 'hello-elementor' ), '0.0.1' ); // @codeCoverageIgnore } /** * class constructor * * @access protected * * @param ?string[] $components_list */ protected function __construct( ?array $components_list = null ) { $this->register_components( $components_list ); $this->register_hooks(); } } PK �<,]�1P�� � ! includes/customizer-functions.phpnu ��� <?php if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Register Customizer controls for header & footer. * * @return void */ function hello_customizer_register( $wp_customize ) { require_once get_template_directory() . '/includes/customizer/customizer-action-links.php'; $wp_customize->add_section( 'hello-options', [ 'title' => esc_html__( 'Header & Footer', 'hello-elementor' ), 'capability' => 'edit_theme_options', ] ); $wp_customize->add_setting( 'hello-header-footer', [ 'sanitize_callback' => false, 'transport' => 'refresh', ] ); $wp_customize->add_control( new HelloElementor\Includes\Customizer\Hello_Customizer_Action_Links( $wp_customize, 'hello-header-footer', [ 'section' => 'hello-options', 'priority' => 20, ] ) ); } add_action( 'customize_register', 'hello_customizer_register' ); /** * Register Customizer controls for Elementor Pro upsell. * * @return void */ function hello_customizer_register_elementor_pro_upsell( $wp_customize ) { if ( function_exists( 'elementor_pro_load_plugin' ) ) { return; } require_once get_template_directory() . '/includes/customizer/customizer-upsell.php'; $wp_customize->add_section( new HelloElementor\Includes\Customizer\Hello_Customizer_Upsell( $wp_customize, 'hello-upsell-elementor-pro', [ 'heading' => esc_html__( 'Customize your entire website with Elementor Pro', 'hello-elementor' ), 'description' => esc_html__( 'Build and customize every part of your website, including Theme Parts with Elementor Pro.', 'hello-elementor' ), 'button_text' => esc_html__( 'Upgrade Now', 'hello-elementor' ), 'button_url' => 'https://elementor.com/pro/?utm_source=hello-theme-customize&utm_campaign=gopro&utm_medium=wp-dash', 'priority' => 999999, ] ) ); } add_action( 'customize_register', 'hello_customizer_register_elementor_pro_upsell' ); /** * Enqueue Customizer CSS. * * @return void */ function hello_customizer_styles() { wp_enqueue_style( 'hello-elementor-customizer', HELLO_THEME_STYLE_URL . 'customizer.css', [], HELLO_ELEMENTOR_VERSION ); } add_action( 'admin_enqueue_scripts', 'hello_customizer_styles' ); PK �<,]!�Y� includes/elementor-functions.phpnu ��� <?php if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * Register Site Settings Controls. */ add_action( 'elementor/init', 'hello_elementor_settings_init' ); function hello_elementor_settings_init() { if ( ! hello_header_footer_experiment_active() ) { return; } require 'settings/settings-header.php'; require 'settings/settings-footer.php'; add_action( 'elementor/kit/register_tabs', function( \Elementor\Core\Kits\Documents\Kit $kit ) { if ( ! hello_elementor_display_header_footer() ) { return; } $kit->register_tab( 'hello-settings-header', HelloElementor\Includes\Settings\Settings_Header::class ); $kit->register_tab( 'hello-settings-footer', HelloElementor\Includes\Settings\Settings_Footer::class ); }, 1, 40 ); } /** * Helper function to return a setting. * * Saves 2 lines to get kit, then get setting. Also caches the kit and setting. * * @param string $setting_id * @return string|array same as the Elementor internal function does. */ function hello_elementor_get_setting( $setting_id ) { global $hello_elementor_settings; $return = ''; if ( ! isset( $hello_elementor_settings['kit_settings'] ) ) { $kit = \Elementor\Plugin::$instance->kits_manager->get_active_kit(); $hello_elementor_settings['kit_settings'] = $kit->get_settings(); } if ( isset( $hello_elementor_settings['kit_settings'][ $setting_id ] ) ) { $return = $hello_elementor_settings['kit_settings'][ $setting_id ]; } return apply_filters( 'hello_elementor_' . $setting_id, $return ); } /** * Helper function to show/hide elements * * This works with switches, if the setting ID that has been passed is toggled on, we'll return show, otherwise we'll return hide * * @param string $setting_id * @return string|array same as the Elementor internal function does. */ function hello_show_or_hide( $setting_id ) { return ( 'yes' === hello_elementor_get_setting( $setting_id ) ? 'show' : 'hide' ); } /** * Helper function to translate the header layout setting into a class name. * * @return string */ function hello_get_header_layout_class() { $layout_classes = []; $header_layout = hello_elementor_get_setting( 'hello_header_layout' ); if ( 'inverted' === $header_layout ) { $layout_classes[] = 'header-inverted'; } elseif ( 'stacked' === $header_layout ) { $layout_classes[] = 'header-stacked'; } $header_width = hello_elementor_get_setting( 'hello_header_width' ); if ( 'full-width' === $header_width ) { $layout_classes[] = 'header-full-width'; } $header_menu_dropdown = hello_elementor_get_setting( 'hello_header_menu_dropdown' ); if ( 'tablet' === $header_menu_dropdown ) { $layout_classes[] = 'menu-dropdown-tablet'; } elseif ( 'mobile' === $header_menu_dropdown ) { $layout_classes[] = 'menu-dropdown-mobile'; } elseif ( 'none' === $header_menu_dropdown ) { $layout_classes[] = 'menu-dropdown-none'; } $hello_header_menu_layout = hello_elementor_get_setting( 'hello_header_menu_layout' ); if ( 'dropdown' === $hello_header_menu_layout ) { $layout_classes[] = 'menu-layout-dropdown'; } return implode( ' ', $layout_classes ); } /** * Helper function to translate the footer layout setting into a class name. * * @return string */ function hello_get_footer_layout_class() { $footer_layout = hello_elementor_get_setting( 'hello_footer_layout' ); $layout_classes = []; if ( 'inverted' === $footer_layout ) { $layout_classes[] = 'footer-inverted'; } elseif ( 'stacked' === $footer_layout ) { $layout_classes[] = 'footer-stacked'; } $footer_width = hello_elementor_get_setting( 'hello_footer_width' ); if ( 'full-width' === $footer_width ) { $layout_classes[] = 'footer-full-width'; } if ( hello_elementor_get_setting( 'hello_footer_copyright_display' ) && '' !== hello_elementor_get_setting( 'hello_footer_copyright_text' ) ) { $layout_classes[] = 'footer-has-copyright'; } return implode( ' ', $layout_classes ); } add_action( 'elementor/editor/after_enqueue_scripts', function() { if ( ! hello_header_footer_experiment_active() ) { return; } $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_enqueue_script( 'hello-theme-editor', HELLO_THEME_SCRIPTS_URL . 'hello-editor.js', [ 'jquery', 'elementor-editor' ], HELLO_ELEMENTOR_VERSION, true ); wp_enqueue_style( 'hello-editor', HELLO_THEME_STYLE_URL . 'editor.css', [], HELLO_ELEMENTOR_VERSION ); } ); add_action( 'wp_enqueue_scripts', function() { if ( ! hello_elementor_display_header_footer() ) { return; } if ( ! hello_header_footer_experiment_active() ) { return; } wp_enqueue_script( 'hello-theme-frontend', HELLO_THEME_SCRIPTS_URL . 'hello-frontend.js', [], HELLO_ELEMENTOR_VERSION, true ); \Elementor\Plugin::$instance->kits_manager->frontend_before_enqueue_styles(); } ); /** * Helper function to decide whether to output the header template. * * @return bool */ function hello_get_header_display() { $is_editor = isset( $_GET['elementor-preview'] ); return ( $is_editor || hello_elementor_get_setting( 'hello_header_logo_display' ) || hello_elementor_get_setting( 'hello_header_tagline_display' ) || hello_elementor_get_setting( 'hello_header_menu_display' ) ); } /** * Helper function to decide whether to output the footer template. * * @return bool */ function hello_get_footer_display() { $is_editor = isset( $_GET['elementor-preview'] ); return ( $is_editor || hello_elementor_get_setting( 'hello_footer_logo_display' ) || hello_elementor_get_setting( 'hello_footer_tagline_display' ) || hello_elementor_get_setting( 'hello_footer_menu_display' ) || hello_elementor_get_setting( 'hello_footer_copyright_display' ) ); } /** * Add Hello Elementor theme Header & Footer to Experiments. */ add_action( 'elementor/experiments/default-features-registered', function( \Elementor\Core\Experiments\Manager $experiments_manager ) { $experiments_manager->add_feature( [ 'name' => 'hello-theme-header-footer', 'title' => esc_html__( 'Header & Footer', 'hello-elementor' ), 'tag' => esc_html__( 'Hello Theme', 'hello-elementor' ), 'description' => sprintf( '%1$s <a href="%2$s" target="_blank">%3$s</a>', esc_html__( 'Customize and style the builtin Hello Theme’s cross-site header & footer from the Elementor "Site Settings" panel.', 'hello-elementor' ), 'https://go.elementor.com/wp-dash-header-footer', esc_html__( 'Learn More', 'hello-elementor' ) ), 'release_status' => $experiments_manager::RELEASE_STATUS_STABLE, 'new_site' => [ 'minimum_installation_version' => '3.3.0', 'default_active' => $experiments_manager::STATE_ACTIVE, ], ] ); } ); /** * Helper function to check if Header & Footer Experiment is Active/Inactive */ function hello_header_footer_experiment_active() { // If Elementor is not active, return false if ( ! did_action( 'elementor/loaded' ) ) { return false; } // Backwards compat. if ( ! method_exists( \Elementor\Plugin::$instance->experiments, 'is_feature_active' ) ) { return false; } return (bool) ( \Elementor\Plugin::$instance->experiments->is_feature_active( 'hello-theme-header-footer' ) ); } PK �<,]沣�� � includes/settings-functions.phpnu ��� <?php use HelloTheme\Theme; use HelloTheme\Modules\AdminHome\Components\Settings_Controller; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } add_action( 'init', 'hello_elementor_tweak_settings', 0 ); function hello_elementor_tweak_settings() { /** * @var Settings_Controller $settings_controller */ $settings_controller = Theme::instance() ->get_module( 'AdminHome' ) ->get_component( 'Settings_Controller' ); $settings_controller->legacy_register_settings(); } /** * Register a new setting. * * @deprecated 3.4.0 */ function hello_elementor_register_settings( $settings_group, $settings ) { /** * @var Settings_Controller $settings_controller */ $settings_controller = Theme::instance() ->get_module( 'AdminHome' ) ->get_component( 'Settings_Controller' ); $settings_controller->register_settings( $settings_group, $settings ); } /** * Run a tweek only if the user requested it. * * @deprecated 3.4.0 */ function hello_elementor_do_tweak( $setting, $tweak_callback ) { /** * @var Settings_Controller $settings_controller */ $settings_controller = Theme::instance() ->get_module( 'AdminHome' ) ->get_component( 'Settings_Controller' ); $settings_controller->apply_setting( $setting, $tweak_callback ); } /** * Render theme tweaks. * * @deprecated 3.4.0 */ function hello_elementor_render_tweaks( $settings_group, $settings ) { /** * @var Settings_Controller $settings_controller */ $settings_controller = Theme::instance() ->get_module( 'AdminHome' ) ->get_component( 'Settings_Controller' ); $settings_controller->apply_settings( $settings_group, $settings ); } PK �<,]B7�� � includes/utils.phpnu ��� <?php namespace HelloTheme\Includes; use Elementor\App\App; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } /** * class Utils **/ class Utils { public static function elementor(): \Elementor\Plugin { return \Elementor\Plugin::$instance; } public static function has_pro(): bool { return defined( 'ELEMENTOR_PRO_VERSION' ); } public static function is_elementor_active(): bool { static $elementor_active = null; if ( null === $elementor_active ) { $elementor_active = defined( 'ELEMENTOR_VERSION' ); } return $elementor_active; } public static function is_elementor_installed(): bool { static $elementor_installed = null; if ( null === $elementor_installed ) { $elementor_installed = file_exists( WP_PLUGIN_DIR . '/elementor/elementor.php' ); } return $elementor_installed; } public static function get_theme_builder_slug(): string { if ( ! class_exists( 'Elementor\App\App' ) ) { return ''; } if ( self::has_pro() ) { return App::PAGE_ID . '&ver=' . ELEMENTOR_VERSION . '#site-editor'; } if ( self::is_elementor_active() ) { return App::PAGE_ID . '&ver=' . ELEMENTOR_VERSION . '#site-editor/promotion'; } return ''; } public static function get_theme_builder_url(): string { if ( ! class_exists( 'Elementor\App\App' ) ) { return 'https://go.elementor.com/hello-theme-builder'; } if ( self::has_pro() ) { return admin_url( 'admin.php?page=' . App::PAGE_ID . '&ver=' . ELEMENTOR_VERSION ) . '#site-editor'; } if ( self::is_elementor_active() ) { return admin_url( 'admin.php?page=' . App::PAGE_ID . '&ver=' . ELEMENTOR_VERSION ) . '#site-editor/promotion'; } return 'https://go.elementor.com/hello-theme-builder'; } public static function get_elementor_activation_link(): string { $plugin = 'elementor/elementor.php'; $url = 'plugins.php?action=activate&plugin=' . $plugin . '&plugin_status=all'; return add_query_arg( '_wpnonce', wp_create_nonce( 'activate-plugin_' . $plugin ), $url ); } public static function get_ai_site_planner_url(): string { return 'https://go.elementor.com/hello-site-planner'; } public static function get_plugin_install_url( $plugin_slug ): string { $action = 'install-plugin'; $url = add_query_arg( [ 'action' => $action, 'plugin' => $plugin_slug, 'referrer' => 'hello-elementor', ], admin_url( 'update.php' ) ); return add_query_arg( '_wpnonce', wp_create_nonce( $action . '_' . $plugin_slug ), $url ); } public static function get_action_link_type() { $installed_plugins = get_plugins(); if ( ! isset( $installed_plugins['elementor/elementor.php'] ) ) { $action_link_type = 'install-elementor'; } elseif ( ! defined( 'ELEMENTOR_VERSION' ) ) { $action_link_type = 'activate-elementor'; } elseif ( ! hello_header_footer_experiment_active() ) { $action_link_type = 'activate-header-footer-experiment'; } else { $action_link_type = 'style-header-footer'; } return $action_link_type; } } PK �<,]'��� � style.cssnu ��� /* Theme Name: Hello Elementor Theme URI: https://elementor.com/hello-theme/?utm_source=wp-themes&utm_campaign=theme-uri&utm_medium=wp-dash Description: Hello Elementor is a lightweight and minimalist WordPress theme that was built specifically to work seamlessly with the Elementor site builder plugin. The theme is free, open-source, and designed for users who want a flexible, easy-to-use, and customizable website. The theme, which is optimized for performance, provides a solid foundation for users to build their own unique designs using the Elementor drag-and-drop site builder. Its simplicity and flexibility make it a great choice for both beginners and experienced Web Creators. Author: Elementor Team Author URI: https://elementor.com/?utm_source=wp-themes&utm_campaign=author-uri&utm_medium=wp-dash Version: 3.4.6 Stable tag: 3.4.6 Requires at least: 6.0 Tested up to: 6.8 Requires PHP: 7.4 License: GNU General Public License v3 or later. License URI: https://www.gnu.org/licenses/gpl-3.0.html Text Domain: hello-elementor Tags: accessibility-ready, flexible-header, custom-colors, custom-menu, custom-logo, featured-images, rtl-language-support, threaded-comments, translation-ready, */ PK �<,]Q�H theme.phpnu ��� <?php namespace HelloTheme; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } use HelloTheme\Includes\Module_Base; /** * Theme's main class, * responsible over initializing the modules & some general definitions. * * @package HelloTheme */ final class Theme { /** * @var ?Theme */ private static ?Theme $instance = null; /** * @var Module_Base[] */ private array $modules = []; /** * @var array */ private array $classes_aliases = []; /** * Throw error on object clone * * The whole idea of the singleton design pattern is that there is a single * object therefore, we don't want the object to be cloned. * * @since 1.0.0 * @return void */ public function __clone() { _doing_it_wrong( __FUNCTION__, sprintf( 'Cloning instances of the singleton "%s" class is forbidden.', get_class( $this ) ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped '1.0.0' ); } /** * Disable un-serializing of the class * * @since 1.0.0 * @return void */ public function __wakeup() { _doing_it_wrong( __FUNCTION__, sprintf( 'Deserializing instances of the singleton "%s" class is forbidden.', get_class( $this ) ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped '1.0.0' ); } /** * @param $class_name * * @return void */ public function autoload( $class_name ) { if ( 0 !== strpos( $class_name, __NAMESPACE__ ) ) { return; } $has_class_alias = isset( $this->classes_aliases[ $class_name ] ); // Backward Compatibility: Save old class name for set an alias after the new class is loaded if ( $has_class_alias ) { $class_alias_name = $this->classes_aliases[ $class_name ]; $class_to_load = $class_alias_name; } else { $class_to_load = $class_name; } if ( ! class_exists( $class_to_load ) ) { $filename = strtolower( preg_replace( [ '/^' . __NAMESPACE__ . '\\\/', '/([a-z])([A-Z])/', '/_/', '/\\\/' ], [ '', '$1-$2', '-', DIRECTORY_SEPARATOR ], $class_to_load ) ); $filename = trailingslashit( HELLO_THEME_PATH ) . $filename . '.php'; if ( is_readable( $filename ) ) { include $filename; } } if ( $has_class_alias ) { class_alias( $class_alias_name, $class_name ); } } /** * Singleton * * @return Theme */ public static function instance(): Theme { if ( is_null( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * @param string $module_name * * @return ?Module_Base */ public function get_module( string $module_name ): ?Module_Base { if ( isset( $this->modules[ $module_name ] ) ) { return $this->modules[ $module_name ]; } return null; } /** * @param Module_Base $module * * allow child theme and 3rd party plugins to add modules * * @return void */ public function add_module( Module_Base $module ) { $class_name = $module->get_reflection()->getName(); if ( $module::is_active() ) { $this->modules[ $class_name ] = $module::instance(); } } /** * Activate the theme * * @return void */ public function activate() { do_action( 'hello-plus-theme/after_switch_theme' ); } /** * Initialize all Modules * * @return void */ private function init_modules() { $modules_list = [ 'AdminHome', ]; foreach ( $modules_list as $module_name ) { $class_name = str_replace( '-', ' ', $module_name ); $class_name = str_replace( ' ', '', ucwords( $class_name ) ); $class_name = __NAMESPACE__ . '\\Modules\\' . $class_name . '\Module'; /** @var Module_Base $class_name */ if ( $class_name::is_active() && empty( $this->classes_aliases[ $module_name ] ) ) { $this->modules[ $module_name ] = $class_name::instance(); } } } /** * Theme private constructor. */ private function __construct() { static $autoloader_registered = false; if ( ! $autoloader_registered ) { $autoloader_registered = spl_autoload_register( [ $this, 'autoload' ] ); } add_action( 'after_switch_theme', [ $this, 'activate' ] ); $this->init_modules(); } } PK �<,]Lю theme.jsonnu ��� { "$schema": "https://schemas.wp.org/trunk/theme.json", "version": 3, "settings": { "appearanceTools": true, "layout": { "contentSize": "800px", "wideSize": "1200px" }, "color": { "custom": true, "link": true }, "typography": { "customFontSize": true, "lineHeight": true }, "spacing": { "defaultSpacingSizes": false, "margin": true, "padding": true, "units": [ "%", "px", "em", "rem", "vh", "vw" ] } } } PK �<,]�VO�T T assets/css/editor.asset.phpnu ��� <?php return array('dependencies' => array(), 'version' => '29d3ef9742e2e1da326c'); PK �<,]��k� � assets/css/customizer-rtl.cssnu ��� #accordion-section-hello-options .accordion-section-title,#accordion-section-hello-options .accordion-section-title:after{color:#c36}#customize-control-hello-header-footer .hello-action-links{margin:15px auto;text-align:center}#customize-control-hello-header-footer .hello-action-links-title{font-weight:600;margin:10px 0}#customize-control-hello-header-footer .hello-action-links-message{margin:0 0 20px}#accordion-section-hello-upsell-elementor-pro{background-color:#fff;box-shadow:-2px 8px 20px 0 rgba(0,0,0,.2);display:flex!important;flex-direction:column;gap:8px;margin:20px 20px 30px;padding:16px}#accordion-section-hello-upsell-elementor-pro .accordion-section-title:after{display:none}#accordion-section-hello-upsell-elementor-pro h3,#accordion-section-hello-upsell-elementor-pro p{background-color:transparent!important;border:0!important;margin:0;padding:0;text-decoration:none}#accordion-section-hello-upsell-elementor-pro h3{font-weight:700}#accordion-section-hello-upsell-elementor-pro .accordion-section-buttons{display:flex;gap:8px;justify-content:flex-end;margin-block-start:16px}#accordion-section-hello-upsell-elementor-pro .accordion-section-buttons a{background-color:#92003b;border-radius:4px;color:#fff;padding:8px 16px;text-decoration:none} PK �<,]�K�4 4 assets/css/editor-styles.cssnu ��� body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}p{margin-block-end:.75rem}img{border-style:none;height:auto;max-width:100%;vertical-align:middle}pre{font-family:monospace;font-size:1em;white-space:pre-wrap}code,kbd,pre,samp{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem}blockquote{font-style:italic} PK �<,]��ZP P assets/css/reset.cssnu ��� html{line-height:1.15;-webkit-text-size-adjust:100%}*,:after,:before{box-sizing:border-box}body{background-color:#fff;color:#333;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;line-height:1.5;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{color:inherit;font-family:inherit;font-weight:500;line-height:1.2;margin-block-end:1rem;margin-block-start:.5rem}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.75rem}h4{font-size:1.5rem}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-block-end:.9rem;margin-block-start:0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em;white-space:pre-wrap}a{background-color:transparent;color:#c36;text-decoration:none}a:active,a:hover{color:#336}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}abbr[title]{border-block-end:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none;height:auto;max-width:100%}details{display:block}summary{display:list-item}figcaption{color:#333;font-size:16px;font-style:italic;font-weight:400;line-height:1.4}[hidden],template{display:none}@media print{*,:after,:before{background:transparent!important;box-shadow:none!important;color:#000!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre{white-space:pre-wrap!important}blockquote,pre{-moz-column-break-inside:avoid;border:1px solid #ccc;break-inside:avoid}thead{display:table-header-group}img,tr{-moz-column-break-inside:avoid;break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{-moz-column-break-after:avoid;break-after:avoid}}label{display:inline-block;line-height:1;vertical-align:middle}button,input,optgroup,select,textarea{font-family:inherit;font-size:1rem;line-height:1.5;margin:0}input[type=date],input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],select,textarea{border:1px solid #666;border-radius:3px;padding:.5rem 1rem;transition:all .3s;width:100%}input[type=date]:focus,input[type=email]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,select:focus,textarea:focus{border-color:#333}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;width:auto}[type=button],[type=submit],button{background-color:transparent;border:1px solid #c36;border-radius:3px;color:#c36;display:inline-block;font-size:1rem;font-weight:400;padding:.5rem 1rem;text-align:center;transition:all .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}[type=button]:focus:not(:focus-visible),[type=submit]:focus:not(:focus-visible),button:focus:not(:focus-visible){outline:none}[type=button]:focus,[type=button]:hover,[type=submit]:focus,[type=submit]:hover,button:focus,button:hover{background-color:#c36;color:#fff;text-decoration:none}[type=button]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto;resize:vertical}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}select{display:block}table{background-color:transparent;border-collapse:collapse;border-spacing:0;font-size:.9em;margin-block-end:15px;width:100%}table td,table th{border:1px solid hsla(0,0%,50%,.502);line-height:1.5;padding:15px;vertical-align:top}table th{font-weight:700}table tfoot th,table thead th{font-size:1em}table caption+thead tr:first-child td,table caption+thead tr:first-child th,table colgroup+thead tr:first-child td,table colgroup+thead tr:first-child th,table thead:first-child tr:first-child td,table thead:first-child tr:first-child th{border-block-start:1px solid hsla(0,0%,50%,.502)}table tbody>tr:nth-child(odd)>td,table tbody>tr:nth-child(odd)>th{background-color:hsla(0,0%,50%,.071)}table tbody tr:hover>td,table tbody tr:hover>th{background-color:hsla(0,0%,50%,.102)}table tbody+tbody{border-block-start:2px solid hsla(0,0%,50%,.502)}@media(max-width:767px){table table{font-size:.8em}table table td,table table th{line-height:1.3;padding:7px}table table th{font-weight:400}}dd,dl,dt,li,ol,ul{background:transparent;border:0;font-size:100%;margin-block-end:0;margin-block-start:0;outline:0;vertical-align:baseline} PK �<,]+gzoT T "