diff --git a/.github/workflows/compile-mo.yml b/.github/workflows/compile-mo.yml new file mode 100644 index 0000000..1261795 --- /dev/null +++ b/.github/workflows/compile-mo.yml @@ -0,0 +1,40 @@ +name: Compile translation binaries + +# Triggered when Weblate pushes updated .po files back to main. +# Compiles each .po file into a .mo binary that WordPress loads at runtime. +# The .mo files are NOT versioned (see .gitignore); they are committed here +# so the theme works immediately after install without a build step. + +on: + push: + branches: [main] + paths: + - 'languages/**.po' + +permissions: + contents: write + +jobs: + compile-mo: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.2' + tools: wp-cli + + - name: Compile all .po → .mo + run: | + for po in languages/*.po; do + wp i18n make-mo "$po" --allow-root + done + + - name: Commit compiled .mo files + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: "i18n: compile .mo files [skip ci]" + file_pattern: "languages/*.mo" diff --git a/.github/workflows/update-pot.yml b/.github/workflows/update-pot.yml new file mode 100644 index 0000000..a2e0870 --- /dev/null +++ b/.github/workflows/update-pot.yml @@ -0,0 +1,47 @@ +name: Update translation template + +on: + push: + branches: [main] + paths: + - '**.php' + - 'woocommerce/**/*.php' + +permissions: + contents: write + +jobs: + update-pot: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.2' + tools: wp-cli + + - name: Generate .pot file + run: | + wp i18n make-pot . languages/libresign.pot \ + --domain=libresign \ + --exclude=vendor,node_modules \ + --allow-root + + - name: Commit updated .pot if changed + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: "i18n: update translation template [skip ci]" + file_pattern: "languages/libresign.pot" + + - name: Notify Weblate to pull latest changes + if: env.WEBLATE_API_TOKEN != '' + env: + WEBLATE_API_TOKEN: ${{ secrets.WEBLATE_API_TOKEN }} + run: | + curl -sf -X POST \ + -H "Authorization: Token ${WEBLATE_API_TOKEN}" \ + "https://hosted.weblate.org/api/components/libresign-coop-site/wordpress-theme/repository/" \ + -d "operation=pull" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..be3e02d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Compiled translation binaries — generated from .po files by the workflow +languages/*.mo diff --git a/assets/css/button-outline.css b/assets/css/button-outline.css deleted file mode 100644 index 2603236..0000000 --- a/assets/css/button-outline.css +++ /dev/null @@ -1,6 +0,0 @@ -.wp-block-button.is-style-outline - > .wp-block-button__link:not(.has-text-color, .has-background):hover { - background-color: var(--wp--preset--color--contrast-2, var(--wp--preset--color--contrast, transparent)); - color: var(--wp--preset--color--base); - border-color: var(--wp--preset--color--contrast-2, var(--wp--preset--color--contrast, currentColor)); -} diff --git a/functions.php b/functions.php index 5580647..49f5340 100644 --- a/functions.php +++ b/functions.php @@ -8,1964 +8,13 @@ * @since libresign 1.0 */ -/** - * Register block styles. - */ - -if ( ! function_exists( 'libresign_block_styles' ) ) : - /** - * Register custom block styles - * - * @since libresign 1.0 - * @return void - */ - function libresign_block_styles() { - - register_block_style( - 'core/details', - array( - 'name' => 'arrow-icon-details', - 'label' => __( 'Arrow icon', 'libresign' ), - /* - * Styles for the custom Arrow icon style of the Details block - */ - 'inline_style' => ' - .is-style-arrow-icon-details { - padding-top: var(--wp--preset--spacing--10); - padding-bottom: var(--wp--preset--spacing--10); - } - - .is-style-arrow-icon-details summary { - list-style-type: "\2193\00a0\00a0\00a0"; - } - - .is-style-arrow-icon-details[open]>summary { - list-style-type: "\2192\00a0\00a0\00a0"; - }', - ) - ); - register_block_style( - 'core/post-terms', - array( - 'name' => 'pill', - 'label' => __( 'Pill', 'libresign' ), - /* - * Styles variation for post terms - * https://github.com/WordPress/gutenberg/issues/24956 - */ - 'inline_style' => ' - .is-style-pill a, - .is-style-pill span:not([class], [data-rich-text-placeholder]) { - display: inline-block; - background-color: var(--wp--preset--color--base-2); - padding: 0.375rem 0.875rem; - border-radius: var(--wp--preset--spacing--20); - } - - .is-style-pill a:hover { - background-color: var(--wp--preset--color--contrast-3); - }', - ) - ); - register_block_style( - 'core/list', - array( - 'name' => 'checkmark-list', - 'label' => __( 'Checkmark', 'libresign' ), - /* - * Styles for the custom checkmark list block style - * https://github.com/WordPress/gutenberg/issues/51480 - */ - 'inline_style' => ' - ul.is-style-checkmark-list { - list-style-type: "\2713"; - } - - ul.is-style-checkmark-list li { - padding-inline-start: 1ch; - }', - ) - ); - register_block_style( - 'core/navigation-link', - array( - 'name' => 'arrow-link', - 'label' => __( 'With arrow', 'libresign' ), - /* - * Styles for the custom arrow nav link block style - */ - 'inline_style' => ' - .is-style-arrow-link .wp-block-navigation-item__label:after { - content: "\2197"; - padding-inline-start: 0.25rem; - vertical-align: middle; - text-decoration: none; - display: inline-block; - }', - ) - ); - register_block_style( - 'core/heading', - array( - 'name' => 'asterisk', - 'label' => __( 'With asterisk', 'libresign' ), - 'inline_style' => " - .is-style-asterisk:before { - content: ''; - width: 1.5rem; - height: 3rem; - background: var(--wp--preset--color--contrast-2, currentColor); - clip-path: path('M11.93.684v8.039l5.633-5.633 1.216 1.23-5.66 5.66h8.04v1.737H13.2l5.701 5.701-1.23 1.23-5.742-5.742V21h-1.737v-8.094l-5.77 5.77-1.23-1.217 5.743-5.742H.842V9.98h8.162l-5.701-5.7 1.23-1.231 5.66 5.66V.684h1.737Z'); - display: block; - } - - /* Hide the asterisk if the heading has no content, to avoid using empty headings to display the asterisk only, which is an A11Y issue */ - .is-style-asterisk:empty:before { - content: none; - } - - .is-style-asterisk:-moz-only-whitespace:before { - content: none; - } - - .is-style-asterisk.has-text-align-center:before { - margin: 0 auto; - } - - .is-style-asterisk.has-text-align-right:before { - margin-left: auto; - } - - .rtl .is-style-asterisk.has-text-align-left:before { - margin-right: auto; - }", - ) - ); - } -endif; - -add_action( 'init', 'libresign_block_styles' ); - -/** - * Enqueue block stylesheets. - */ - -if ( ! function_exists( 'libresign_block_stylesheets' ) ) : - /** - * Enqueue custom block stylesheets - * - * @since libresign 1.0 - * @return void - */ - function libresign_block_stylesheets() { - /** - * The wp_enqueue_block_style() function allows us to enqueue a stylesheet - * for a specific block. These will only get loaded when the block is rendered - * (both in the editor and on the front end), improving performance - * and reducing the amount of data requested by visitors. - * - * See https://make.wordpress.org/core/2021/12/15/using-multiple-stylesheets-per-block/ for more info. - */ - wp_enqueue_block_style( - 'core/button', - array( - 'handle' => 'libresign-button-style-outline', - 'src' => get_parent_theme_file_uri( 'assets/css/button-outline.css' ), - 'ver' => wp_get_theme( get_template() )->get( 'Version' ), - 'path' => get_parent_theme_file_path( 'assets/css/button-outline.css' ), - ) - ); - } -endif; - -add_action( 'init', 'libresign_block_stylesheets' ); - -/** - * Register pattern categories. - */ - -if ( ! function_exists( 'libresign_pattern_categories' ) ) : - /** - * Register pattern categories - * - * @since libresign 1.0 - * @return void - */ - function libresign_pattern_categories() { - - register_block_pattern_category( - 'libresign_page', - array( - 'label' => _x( 'Pages', 'Block pattern category', 'libresign' ), - 'description' => __( 'A collection of full page layouts.', 'libresign' ), - ) - ); - } -endif; - -add_action( 'init', 'libresign_pattern_categories' ); - +require_once __DIR__ . '/inc/theme-setup.php'; +require_once __DIR__ . '/inc/logo.php'; require_once __DIR__ . '/inc/footer-fragment.php'; require_once __DIR__ . '/inc/github-site-webhook.php'; - -/** - * Return the LibreSign logo URL used as a theme-level fallback. - */ -function libresign_get_theme_logo_url() { - return 'https://github.com/LibreSign/site/raw/refs/heads/main/source/assets/images/logo/logo.svg'; -} - -/** - * Detect whether the rendered custom logo points to a missing local upload. - */ -function libresign_custom_logo_needs_fallback( $custom_logo_html ) { - if ( '' === trim( (string) $custom_logo_html ) ) { - return true; - } - - if ( ! preg_match( '/]+src=["\']([^"\']+)["\']/', (string) $custom_logo_html, $matches ) ) { - return true; - } - - $logo_url = html_entity_decode( $matches[1] ); - $logo_parts = wp_parse_url( $logo_url ); - $home_parts = wp_parse_url( home_url( '/' ) ); - - if ( empty( $logo_parts['host'] ) || empty( $logo_parts['path'] ) ) { - return false; - } - - if ( empty( $home_parts['host'] ) || $logo_parts['host'] !== $home_parts['host'] ) { - return false; - } - - if ( 0 !== strpos( $logo_parts['path'], '/wp-content/uploads/' ) ) { - return false; - } - - $local_file = trailingslashit( ABSPATH ) . ltrim( $logo_parts['path'], '/' ); - - return ! file_exists( $local_file ); -} - -/** - * Provide a stable fallback logo when the current site logo upload is missing. - */ -function libresign_filter_custom_logo( $custom_logo_html, $blog_id ) { - if ( ! libresign_custom_logo_needs_fallback( $custom_logo_html ) ) { - return $custom_logo_html; - } - - $aria_current = is_front_page() && ! is_paged() ? ' aria-current="page"' : ''; - $alt_text = get_bloginfo( 'name' ); - - return sprintf( - '', - esc_url( home_url( '/' ) ), - $aria_current, - esc_url( libresign_get_theme_logo_url() ), - esc_attr( $alt_text ) - ); -} -add_filter( 'get_custom_logo', 'libresign_filter_custom_logo', 10, 2 ); - -/** - * Resolve the active account tab for the guest experience. - */ -function libresign_get_account_active_tab() { - $tab = 'register'; - - if ( isset( $_GET['tab'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended - $requested = sanitize_key( wp_unslash( $_GET['tab'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended - if ( in_array( $requested, array( 'login', 'register' ), true ) ) { - $tab = $requested; - } - } - - if ( isset( $_POST['login'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing - $tab = 'login'; - } elseif ( isset( $_POST['register'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing - $tab = 'register'; - } - - return $tab; -} - -/** - * Render the product grid from the store page inside the account page. - */ -function libresign_render_account_store_preview() { - if ( ! function_exists( 'wc_get_page_permalink' ) ) { - return ''; - } - - $active_tab = libresign_get_account_active_tab(); - - ob_start(); - ?> -
- - -
- - - - - - - -
-
- -
- - - - - -
- -
- - -
- - - -
-
- Nenhum plano encontrado no momento.

'; - } - - return '
' . $products . '
'; -} - -/** - * Prepend the SaaS onboarding block to the key WooCommerce pages. - * - * This keeps the guidance close to the user journey without having to - * maintain duplicated page content in the editor. - */ -function libresign_disable_wpautop_on_account_page( $content ) { - if ( function_exists( 'is_account_page' ) && is_account_page() ) { - remove_filter( 'the_content', 'wpautop' ); - remove_filter( 'the_content', 'shortcode_unautop' ); - } - - return $content; -} -add_filter( 'the_content', 'libresign_disable_wpautop_on_account_page', 0 ); - -function libresign_prepend_saas_onboarding_to_content( $content ) { - if ( is_admin() || ! in_the_loop() || ! is_main_query() ) { - return $content; - } - - if ( function_exists( 'is_account_page' ) && is_account_page() && libresign_is_lost_password_request() ) { - // Confirmation steps need WooCommerce's set-new-password form; only the initial request uses the custom form. - if ( libresign_is_password_reset_confirmation() ) { - return function_exists( 'do_shortcode' ) ? do_shortcode( '[woocommerce_my_account]' ) : $content; - } - - ob_start(); - libresign_render_lost_password_form(); - return ob_get_clean(); - } - - if ( function_exists( 'is_account_page' ) && is_account_page() && is_user_logged_in() ) { - if ( function_exists( 'do_shortcode' ) ) { - return do_shortcode( '[woocommerce_my_account]' ); - } - - return $content; - } - - if ( function_exists( 'is_account_page' ) && is_account_page() ) { - return libresign_render_account_store_preview(); - } - - $account_store_preview = ''; - $should_prepend = ( function_exists( 'is_shop' ) && is_shop() ) - || ( function_exists( 'is_checkout' ) && is_checkout() ); - - if ( function_exists( 'is_order_received_page' ) && is_order_received_page() ) { - $should_prepend = true; - } - - if ( $should_prepend ) { - $onboarding_block = ''; - if ( false === strpos( $content, 'libresign/saas-onboarding' ) ) { - $content = do_blocks( $onboarding_block ) . $content; - } - } - - if ( function_exists( 'is_account_page' ) && is_account_page() && false === strpos( $content, 'libresign-account-store-preview' ) ) { - $account_store_preview = libresign_render_account_store_preview(); - } - - if ( function_exists( 'is_account_page' ) && is_account_page() ) { - $content = preg_replace( '#]*>\\s*

#', '', $content ); - } - - return $account_store_preview . $content; -} -add_filter( 'the_content', 'libresign_prepend_saas_onboarding_to_content', 5 ); - -/** - * Render the lost-password page directly when the route is visited outside the account page. - */ -function libresign_render_direct_lost_password_route() { - if ( is_admin() || wp_doing_ajax() || ! libresign_is_direct_lost_password_route() ) { - return; - } - - // Let WooCommerce's redirect_reset_password_link() (template_redirect priority 10) handle confirmation links. - if ( libresign_is_password_reset_confirmation() ) { - return; - } - - status_header( 200 ); - nocache_headers(); - - get_header(); - echo '
'; - libresign_render_lost_password_form(); - echo '
'; - get_footer(); - exit; -} -add_action( 'template_redirect', 'libresign_render_direct_lost_password_route', 1 ); - -/** - * Print account-page-specific styles inline so cache and specificity do not hide them. - */ -function libresign_account_store_preview_head_styles() { - if ( ! function_exists( 'is_account_page' ) || ! is_account_page() || is_user_logged_in() ) { - return; - } - - ?> - - - - add( 'full_name_required', 'Informe seu nome completo.' ); - } - - if ( '' === $organization ) { - $errors->add( 'organization_required', 'Informe sua organização.' ); - } - - if ( '' === $email ) { - $errors->add( 'email_required', 'Informe um e-mail válido.' ); - } - - if ( '' === $password ) { - $errors->add( 'password_required', 'Informe uma senha.' ); - } - - if ( empty( $_POST['libresign_workspace_terms'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing - $errors->add( - 'libresign_workspace_terms', - 'Você precisa aceitar os termos para criar o workspace.' - ); - } - - return $errors; -} -add_filter( 'woocommerce_registration_errors', 'libresign_validate_workspace_registration_fields', 10, 3 ); - -/** - * Generate a unique username from the registration e-mail. - */ -function libresign_generate_workspace_username( $email ) { - $base = sanitize_user( current( explode( '@', sanitize_email( $email ) ) ), true ); - - if ( '' === $base ) { - $base = 'workspace'; - } - - $username = $base; - $suffix = 1; - - while ( username_exists( $username ) ) { - $username = $base . '-' . $suffix; - $suffix++; - } - - return $username; -} - -/** - * Persist the custom workspace fields on customer creation. - */ -function libresign_save_workspace_registration_fields( $customer_id ) { - $full_name = isset( $_POST['full_name'] ) ? sanitize_text_field( wp_unslash( $_POST['full_name'] ) ) : ''; - $organization = isset( $_POST['organization'] ) ? sanitize_text_field( wp_unslash( $_POST['organization'] ) ) : ''; - - if ( '' !== $full_name ) { - $parts = preg_split( '/\s+/', $full_name ); - $first = array_shift( $parts ); - $last = trim( implode( ' ', (array) $parts ) ); - - if ( $first ) { - update_user_meta( $customer_id, 'first_name', $first ); - update_user_meta( $customer_id, 'billing_first_name', $first ); - } - - if ( $last ) { - update_user_meta( $customer_id, 'last_name', $last ); - update_user_meta( $customer_id, 'billing_last_name', $last ); - } - - update_user_meta( $customer_id, 'libresign_full_name', $full_name ); - update_user_meta( $customer_id, 'billing_name', $full_name ); - } - - if ( '' !== $organization ) { - update_user_meta( $customer_id, 'billing_company', $organization ); - update_user_meta( $customer_id, 'libresign_organization', $organization ); - } - - if ( ! empty( $_POST['libresign_workspace_terms'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing - update_user_meta( $customer_id, 'libresign_workspace_terms', 'yes' ); - update_user_meta( $customer_id, 'libresign_workspace_terms_date', current_time( 'mysql' ) ); - } -} -add_action( 'woocommerce_created_customer', 'libresign_save_workspace_registration_fields', 10, 1 ); - -/** - * Keep the visitor-provided password for the custom workspace form. - */ -function libresign_use_custom_workspace_password( $generate_password ) { - if ( ! empty( $_POST['password'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing - return false; - } - - return $generate_password; -} -add_filter( 'woocommerce_registration_generate_password', 'libresign_use_custom_workspace_password' ); - -/** - * Make sure the newly created customer ends up logged in. - */ -function libresign_authenticate_new_workspace_customer( $customer_id ) { - wp_set_current_user( $customer_id ); - wp_set_auth_cookie( $customer_id, true ); -} -add_action( 'woocommerce_created_customer', 'libresign_authenticate_new_workspace_customer', 20, 1 ); - -/** - * Get the site policy URL used by the consent checkboxes. - */ -function libresign_get_policy_url() { - $policy_page_id = 3; - $policy_url = get_permalink( $policy_page_id ); - - if ( ! empty( $policy_url ) ) { - return $policy_url; - } - - return home_url( '/privacy-police/' ); -} - -/** - * Render the policy consent checkbox on the WooCommerce registration form. - */ -function libresign_render_registration_policy_checkbox() { - $policy_url = libresign_get_policy_url(); - ?> -

- -

- add( - "libresign_policy_consent", - __( "Please confirm that you agree with the policies before creating an account.", "libresign" ) - ); - } - - return $errors; -} -add_filter( 'woocommerce_registration_errors', 'libresign_validate_registration_policy_consent', 10, 3 ); - -/** - * Persist the consent flag so the approval is auditable. - */ -function libresign_save_registration_policy_consent( $customer_id ) { - if ( ! empty( $_POST['libresign_policy_consent'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing - update_user_meta( $customer_id, 'libresign_policy_consent', 'yes' ); - update_user_meta( $customer_id, 'libresign_policy_consent_date', current_time( 'mysql' ) ); - } -} -add_action( 'woocommerce_created_customer', 'libresign_save_registration_policy_consent' ); - -/** - * Send newly registered users to their WooCommerce account area. - */ -function libresign_registration_redirect_to_account( $redirect ) { - return libresign_get_purchase_redirect_target(); -} -add_filter( 'woocommerce_registration_redirect', 'libresign_registration_redirect_to_account', 10, 1 ); - -/** - * Send authenticated users to the account dashboard after login. - */ -function libresign_login_redirect_to_account( $redirect, $user ) { - return libresign_get_purchase_redirect_target(); -} -add_filter( 'woocommerce_login_redirect', 'libresign_login_redirect_to_account', 10, 2 ); - -/** - * Preserve the intended destination after authentication when coming from a product page. - */ -function libresign_get_purchase_redirect_target() { - $redirect_to = ''; - - if ( isset( $_REQUEST['redirect_to'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended - $redirect_to = wp_unslash( $_REQUEST['redirect_to'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended - } - - $redirect_to = wp_validate_redirect( $redirect_to, '' ); - - if ( '' !== $redirect_to ) { - return $redirect_to; - } - - return libresign_get_account_url(); -} - -/** - * Resolve the canonical account URL. - */ -function libresign_get_account_url() { - if ( function_exists( 'wc_get_page_permalink' ) ) { - $account_url = wc_get_page_permalink( 'myaccount' ); - if ( ! empty( $account_url ) ) { - return $account_url; - } - } - - return home_url( '/account/' ); -} - -/** - * Translate the WooCommerce account navigation into Portuguese. - */ -function libresign_translate_account_menu_items( $items ) { - $translations = array( - 'dashboard' => 'Painel', - 'orders' => 'Pedidos', - 'downloads' => 'Downloads', - 'edit-address' => 'Endereços', - 'payment-methods' => 'Métodos de pagamento', - 'edit-account' => 'Dados da conta', - 'subscriptions' => 'Assinaturas', - 'customer-logout' => 'Sair', - ); - - foreach ( $items as $key => $label ) { - if ( isset( $translations[ $key ] ) ) { - $items[ $key ] = $translations[ $key ]; - } - } - - return $items; -} -add_filter( 'woocommerce_account_menu_items', 'libresign_translate_account_menu_items' ); - -/** - * Translate WooCommerce account dashboard copy when the account page is loaded. - */ -function libresign_translate_account_gettext( $translated, $text, $domain ) { - if ( 'woocommerce' !== $domain || ! function_exists( 'is_account_page' ) || ! is_account_page() ) { - return $translated; - } - - $replacements = array( - 'Dashboard' => 'Painel', - 'Orders' => 'Pedidos', - 'Payment methods' => 'Métodos de pagamento', - 'Account details' => 'Dados da conta', - 'Addresses' => 'Endereços', - 'Logout' => 'Sair', - 'From your account dashboard you can view your recent orders, manage your shipping and billing addresses, and edit your password and account details.' => - 'No painel da sua conta, você pode ver seus pedidos recentes, gerenciar seus endereços de cobrança e entrega e editar sua senha e os detalhes da conta.', - ); - - if ( isset( $replacements[ $text ] ) ) { - return $replacements[ $text ]; - } - - return $translated; -} -add_filter( 'gettext', 'libresign_translate_account_gettext', 20, 3 ); - -/** - * Customize the checkout terms checkbox text to point at the policy page. - */ -function libresign_checkout_policy_checkbox_text( $text ) { - $policy_url = libresign_get_policy_url(); - - return sprintf( - /* translators: %s: policy page link */ - __( 'I agree to the %s before placing the order.', 'libresign' ), - sprintf( - '%s', - esc_url( $policy_url ), - esc_html__( 'policies and privacy policy', 'libresign' ) - ) - ); -} -add_filter( 'woocommerce_get_terms_and_conditions_checkbox_text', 'libresign_checkout_policy_checkbox_text' ); - -/** - * Make sure checkout cannot be submitted without accepting the policy terms. - */ -function libresign_validate_checkout_policy_consent( $data, $errors ) { - if ( empty( $data['terms'] ) ) { - $errors->add( - 'libresign_policy_consent', - __( 'You must agree to the policies before completing the purchase.', 'libresign' ) - ); - } -} -add_action( 'woocommerce_after_checkout_validation', 'libresign_validate_checkout_policy_consent', 10, 2 ); - -/** - * Force visitors to authenticate before using cart or checkout. - */ -function libresign_redirect_guests_from_purchase_flow() { - if ( is_admin() || wp_doing_ajax() ) { - return; - } - - if ( is_user_logged_in() ) { - return; - } - - $is_cart = function_exists( 'is_cart' ) && is_cart(); - $is_checkout = function_exists( 'is_checkout' ) && is_checkout(); - - if ( ! $is_cart && ! $is_checkout ) { - return; - } - - wc_add_notice( - __( 'Entre para continuar com a compra.', 'libresign' ), - 'notice' - ); - - $account_url = function_exists( 'wc_get_page_permalink' ) ? wc_get_page_permalink( 'myaccount' ) : home_url( '/account/' ); - $redirect_to = rawurlencode( home_url( wp_unslash( $_SERVER['REQUEST_URI'] ?? '' ) ) ); - - wp_safe_redirect( add_query_arg( 'redirect_to', $redirect_to, $account_url ) ); - exit; -} -add_action( 'template_redirect', 'libresign_redirect_guests_from_purchase_flow', 1 ); - -/** - * Build the account CTA used for guests in product purchase areas. - */ -function libresign_get_guest_purchase_checkout_url() { - $checkout_url = function_exists( 'wc_get_checkout_url' ) ? wc_get_checkout_url() : home_url( '/checkout/' ); - - if ( ! function_exists( 'is_product' ) || ! is_product() || ! function_exists( 'wc_get_product' ) ) { - return $checkout_url; - } - - $product_id = get_queried_object_id(); - $product = wc_get_product( $product_id ); - - if ( ! $product ) { - return $checkout_url; - } - - $add_to_cart_args = array( - 'add-to-cart' => $product->get_id(), - ); - - if ( $product->is_type( 'variable' ) ) { - $selected_attributes = array(); - $default_attributes = $product->get_default_attributes(); - - foreach ( $default_attributes as $attribute_name => $attribute_value ) { - if ( '' === (string) $attribute_value ) { - continue; - } - - $selected_attributes[ 'attribute_' . sanitize_title( $attribute_name ) ] = (string) $attribute_value; - } - - if ( ! empty( $selected_attributes ) ) { - $matching_variation_id = 0; - - foreach ( $product->get_children() as $variation_id ) { - $variation = wc_get_product( $variation_id ); - - if ( ! $variation ) { - continue; - } - - $variation_attributes = $variation->get_attributes(); - $is_match = true; - - foreach ( $default_attributes as $attribute_name => $attribute_value ) { - if ( '' === (string) $attribute_value ) { - continue; - } - - $variation_key = sanitize_title( $attribute_name ); - - if ( ! isset( $variation_attributes[ $variation_key ] ) || (string) $variation_attributes[ $variation_key ] !== (string) $attribute_value ) { - $is_match = false; - break; - } - } - - if ( $is_match ) { - $matching_variation_id = $variation_id; - break; - } - } - - if ( $matching_variation_id ) { - $add_to_cart_args['variation_id'] = $matching_variation_id; - $add_to_cart_args = array_merge( $add_to_cart_args, $selected_attributes ); - } - } - } - - return add_query_arg( $add_to_cart_args, $checkout_url ); -} - -function libresign_get_guest_purchase_cta( $label = '' ) { - $checkout_url = libresign_get_guest_purchase_checkout_url(); - $button_label = '' !== $label ? $label : __( 'Contratar', 'libresign' ); - - return sprintf( - '', - esc_url( $checkout_url ), - esc_html( $button_label ) - ); -} - -/** - * Replace purchase CTAs with account CTA for visitors who are not logged in. - */ -function libresign_replace_guest_purchase_ctas( $block_content, $block ) { - if ( is_admin() || is_user_logged_in() ) { - return $block_content; - } - - $block_name = isset( $block['blockName'] ) ? (string) $block['blockName'] : ''; - - if ( 'woocommerce/product-button' === $block_name ) { - return libresign_get_guest_purchase_cta(); - } - - if ( 'woocommerce/add-to-cart-form' === $block_name ) { - return libresign_get_guest_purchase_cta(); - } - - return $block_content; -} -add_filter( 'render_block', 'libresign_replace_guest_purchase_ctas', 10, 2 ); +require_once __DIR__ . '/inc/account.php'; +require_once __DIR__ . '/inc/registration.php'; +require_once __DIR__ . '/inc/product.php'; +require_once __DIR__ . '/inc/cpf-cnpj.php'; +require_once __DIR__ . '/inc/checkout.php'; +require_once __DIR__ . '/inc/guest-access.php'; diff --git a/inc/account.php b/inc/account.php new file mode 100644 index 0000000..b34a996 --- /dev/null +++ b/inc/account.php @@ -0,0 +1,250 @@ + + + tags inside form HTML on + // account pages; remove them before returning any account page output. + if ( function_exists( 'is_account_page' ) && is_account_page() ) { + remove_filter( 'the_content', 'wpautop' ); + remove_filter( 'the_content', 'shortcode_unautop' ); + } + + if ( function_exists( 'is_account_page' ) && is_account_page() && libresign_is_lost_password_request() ) { + if ( libresign_is_password_reset_confirmation() ) { + return $content; + } + + ob_start(); + libresign_render_lost_password_form(); + return ob_get_clean(); + } + + // The My Account page has empty post_content; delegate rendering to + // WooCommerce so the template override is respected. + if ( function_exists( 'is_account_page' ) && is_account_page() ) { + return function_exists( 'do_shortcode' ) ? do_shortcode( '[woocommerce_my_account]' ) : $content; + } + + $should_prepend = ( function_exists( 'is_shop' ) && is_shop() ) + || ( function_exists( 'is_checkout' ) && is_checkout() ); + + if ( function_exists( 'is_order_received_page' ) && is_order_received_page() ) { + $should_prepend = true; + } + + if ( $should_prepend ) { + $onboarding_block = ''; + if ( false === strpos( $content, 'libresign/saas-onboarding' ) ) { + $content = do_blocks( $onboarding_block ) . $content; + } + } + + return $content; +} +add_filter( 'the_content', 'libresign_prepend_saas_onboarding_to_content', 5 ); + +// --------------------------------------------------------------------------- +// Direct /lost-password/ route handler +// --------------------------------------------------------------------------- + +/** + * Render the lost-password page when the route is visited outside the + * WooCommerce account page (e.g. /lost-password/ directly). + */ +function libresign_render_direct_lost_password_route() { + if ( is_admin() || wp_doing_ajax() || ! libresign_is_direct_lost_password_route() ) { + return; + } + + // Let WooCommerce's redirect_reset_password_link() (priority 10) handle + // confirmation links. + if ( libresign_is_password_reset_confirmation() ) { + return; + } + + status_header( 200 ); + nocache_headers(); + + get_header(); + echo '
'; + libresign_render_lost_password_form(); + echo '
'; + get_footer(); + exit; +} +add_action( 'template_redirect', 'libresign_render_direct_lost_password_route', 1 ); diff --git a/inc/checkout.php b/inc/checkout.php new file mode 100644 index 0000000..6ce4581 --- /dev/null +++ b/inc/checkout.php @@ -0,0 +1,39 @@ +%s', + esc_url( $policy_url ), + esc_html__( 'terms and privacy policy', 'libresign' ) + ) + ); +} +add_filter( 'woocommerce_get_terms_and_conditions_checkbox_text', 'libresign_checkout_policy_checkbox_text' ); + +/** + * Prevent checkout submission without policy terms acceptance. + */ +function libresign_validate_checkout_policy_consent( $data, $errors ) { + if ( empty( $data['terms'] ) ) { + $errors->add( + 'libresign_policy_consent', + __( 'You must agree to the policies before completing the purchase.', 'libresign' ) + ); + } +} +add_action( 'woocommerce_after_checkout_validation', 'libresign_validate_checkout_policy_consent', 10, 2 ); diff --git a/inc/cpf-cnpj.php b/inc/cpf-cnpj.php new file mode 100644 index 0000000..1eaf000 --- /dev/null +++ b/inc/cpf-cnpj.php @@ -0,0 +1,424 @@ + 'libresign/cpf-cnpj', + 'label' => __( 'CPF or CNPJ', 'libresign' ), + 'location' => 'address', + 'required' => false, + 'type' => 'text', + 'attributes' => array( + 'autocomplete' => 'off', + 'placeholder' => __( 'Required for customers in Brazil', 'libresign' ), + ), + ) + ); +} ); + +/** + * Require CPF/CNPJ only when the billing country is Brazil — server-side. + * + * woocommerce_get_contextual_fields_for_location lets us override the field + * required flag at request time based on the billing address country, so we + * can make it truly required for BR without breaking checkout for other + * countries. + * + * The decision is based exclusively on the billing address country, NOT on + * browser language or site locale. A customer browsing in English from England + * with a Brazilian billing address will have this field required. + * + * The field is registered as required: false so the React client does not + * block non-BR customers. This filter flips required to true for BR before + * WooCommerce runs its own "required field is empty" check. + */ +add_filter( 'woocommerce_get_contextual_fields_for_location', function ( array $fields, string $location, $document_object ) { + if ( ! isset( $fields['libresign/cpf-cnpj'] ) ) { + return $fields; + } + + $country = ''; + + // DocumentObject (WooCommerce Blocks Store API) exposes the request's + // billing address via get_customer_data()['billing_address']['country']. + // This is populated directly from the checkout REST request, so it + // reflects the country the customer is submitting — not the browser + // language and not any previously saved billing address. + if ( is_object( $document_object ) && method_exists( $document_object, 'get_customer_data' ) ) { + $customer = $document_object->get_customer_data(); + $country = $customer['billing_address']['country'] ?? ''; + } + + // Fallback for classic WC_Customer / WC_Order objects (non-Blocks contexts). + if ( '' === $country ) { + if ( is_object( $document_object ) && method_exists( $document_object, 'get_billing_address' ) ) { + $billing = $document_object->get_billing_address(); + $country = $billing['country'] ?? ''; + } + } + + if ( '' === $country && function_exists( 'WC' ) && WC()->customer ) { + $country = WC()->customer->get_billing_country(); + } + + $fields['libresign/cpf-cnpj']['required'] = ( 'BR' === $country ); + + return $fields; +}, 10, 3 ); + +/** + * Validate CPF — 11-digit Brazilian individual taxpayer ID. + * + * Uses the standard Módulo 11 algorithm with decreasing weights 10..2 / 11..2. + * + * @param string $cpf Raw or formatted CPF (dots and dash are stripped). + * @return bool + */ +function libresign_validate_cpf( string $cpf ): bool { + $cpf = preg_replace( '/[^0-9]/', '', $cpf ); + if ( strlen( $cpf ) !== 11 ) { + return false; + } + // All identical digits (e.g. 000.000.000-00) are never valid. + if ( preg_match( '/^(\d)\1{10}$/', $cpf ) ) { + return false; + } + + $mod11 = function ( string $str, int $start_weight ): int { + $sum = 0; + $w = $start_weight; + for ( $i = 0; $i < strlen( $str ); $i++ ) { + $sum += (int) $str[ $i ] * $w--; + } + $rem = $sum % 11; + return $rem < 2 ? 0 : 11 - $rem; + }; + + $dv1 = $mod11( substr( $cpf, 0, 9 ), 10 ); + if ( $dv1 !== (int) $cpf[9] ) { + return false; + } + return $mod11( substr( $cpf, 0, 10 ), 11 ) === (int) $cpf[10]; +} + +/** + * Validate CNPJ — 14-character Brazilian company taxpayer ID. + * + * Handles both the legacy numeric format and the new alphanumeric format + * introduced by Instrução Normativa RFB nº 2.119/2022 (Anexo Único): + * - Positions 1–12: alphanumeric (root 8 chars + order 4 chars) + * - Positions 13–14: numeric check digits + * + * Algorithm: Módulo 11 with weights 2–9 assigned right-to-left, cycling + * back to 2 after reaching 9. Character value = ord(char) − 48, which gives + * the digit value for '0'–'9' (ASCII 48–57) and 17–42 for 'A'–'Z' + * (ASCII 65–90), exactly as specified in the Receita Federal table. + * + * @param string $cnpj Raw or formatted CNPJ (dots, slash, dash are stripped). + * @return bool + */ +function libresign_validate_cnpj( string $cnpj ): bool { + $cnpj = strtoupper( preg_replace( '/[\.\-\/]/', '', $cnpj ) ); + if ( strlen( $cnpj ) !== 14 ) { + return false; + } + // All identical digits — applies to legacy numeric CNPJs. + if ( preg_match( '/^(\d)\1{13}$/', $cnpj ) ) { + return false; + } + // Positions 1–12: uppercase letters or digits; positions 13–14: digits. + if ( ! preg_match( '/^[A-Z0-9]{12}\d{2}$/', $cnpj ) ) { + return false; + } + + $mod11 = function ( string $str ): int { + $sum = 0; + $w = 2; + for ( $i = strlen( $str ) - 1; $i >= 0; $i-- ) { + $sum += ( ord( $str[ $i ] ) - 48 ) * $w; + $w = 9 === $w ? 2 : $w + 1; + } + $rem = $sum % 11; + return $rem < 2 ? 0 : 11 - $rem; + }; + + $dv1 = $mod11( substr( $cnpj, 0, 12 ) ); + if ( $dv1 !== (int) $cnpj[12] ) { + return false; + } + return $mod11( substr( $cnpj, 0, 13 ) ) === (int) $cnpj[13]; +} + +/** + * Server-side format validation for the CPF/CNPJ checkout field. + * + * Fires for every additional checkout field submitted via the WooCommerce + * Blocks Store API. Adding an error code causes WooCommerce to reject the + * order with HTTP 400 and surface the message in the checkout UI. + * + * Note: the empty-field check is already handled by the required flag set in + * the woocommerce_get_contextual_fields_for_location filter in billing.php; + * this hook only validates format when a value is present. + */ +add_action( 'woocommerce_blocks_validate_additional_checkout_field', function ( \WP_Error $errors, string $field_key, $field_value ) { + if ( 'libresign/cpf-cnpj' !== $field_key ) { + return; + } + + $value = trim( (string) $field_value ); + if ( '' === $value ) { + return; + } + + $digits_only = preg_replace( '/[^0-9]/', '', $value ); + $stripped = strtoupper( preg_replace( '/[\.\-\/]/', '', $value ) ); + + if ( 11 === strlen( $digits_only ) ) { + if ( ! libresign_validate_cpf( $value ) ) { + $errors->add( 'invalid_cpf', __( 'Please enter a valid CPF.', 'libresign' ) ); + } + } elseif ( 14 === strlen( $stripped ) ) { + if ( ! libresign_validate_cnpj( $value ) ) { + $errors->add( 'invalid_cnpj', __( 'Please enter a valid CNPJ.', 'libresign' ) ); + } + } else { + $errors->add( 'invalid_cpf_cnpj', __( 'Please enter a valid CPF (11 digits) or CNPJ (14 characters).', 'libresign' ) ); + } +}, 10, 3 ); + +/** + * Client-side script for the CPF/CNPJ checkout field. + * + * Outputs a single inline script that handles two concerns: + * 1. Visibility — hides the field for non-BR customers and reveals it when + * the billing country is Brazil, surviving React re-renders via a + * MutationObserver. + * 2. Validation — mirrors the PHP Módulo 11 algorithms above so the user + * gets native WooCommerce Blocks error feedback (red border + message + * below the field) without a server round-trip. A re-entrancy guard + * prevents the wp.data subscriber from triggering itself in an infinite + * dispatch loop. + */ +add_action( 'wp_footer', function () { + if ( ! function_exists( 'is_checkout' ) || ! is_checkout() ) { + return; + } + ?> + + + attribute. In + * fresh Docker volumes or staging environments those thumbnails may not + * exist, causing the browser to pick a srcset candidate that returns 404 + * and rendering the logo as a broken image. + * + * This file hooks into get_custom_logo to replace the broken upload with a + * stable remote SVG whenever any of the referenced local files is absent. + * + * @package libresign + */ + +defined( 'ABSPATH' ) || exit; + +/** + * Return the LibreSign logo URL for the given display context. + * + * - 'light': dark-coloured logo, legible on light/white backgrounds (default). + * - 'dark': light-coloured logo, legible on dark backgrounds. + * + * @param string $variant 'light' for light backgrounds (default), 'dark' for dark. + * @return string + */ +function libresign_get_theme_logo_url( string $variant = 'light' ): string { + $base = 'https://github.com/LibreSign/site/raw/refs/heads/main/source/assets/images/logo/'; + return 'dark' === $variant + ? $base . 'logo-2.svg' // pale logo — legible on dark backgrounds + : $base . 'logo.svg'; // dark logo — legible on light backgrounds +} + +/** + * Detect whether the rendered custom logo points to a missing local upload. + * + * Checks every URL referenced by both the src attribute and the srcset + * attribute. A single missing file is enough to trigger the fallback, because + * the browser may select any of the srcset candidates based on viewport and + * device pixel ratio. + */ +function libresign_custom_logo_needs_fallback( $custom_logo_html ) { + if ( '' === trim( (string) $custom_logo_html ) ) { + return true; + } + + if ( ! preg_match( '/]+>/', (string) $custom_logo_html, $tag_matches ) ) { + return true; + } + + $img_tag = $tag_matches[0]; + + // Collect every image URL from src and srcset. + $urls = array(); + + if ( preg_match( '/src=["\']([^"\']+)["\']/', $img_tag, $m ) ) { + $urls[] = html_entity_decode( $m[1] ); + } + + if ( preg_match( '/srcset=["\']([^"\']+)["\']/', $img_tag, $m ) ) { + foreach ( explode( ',', html_entity_decode( $m[1] ) ) as $part ) { + $candidate = trim( explode( ' ', trim( $part ) )[0] ); + if ( $candidate ) { + $urls[] = $candidate; + } + } + } + + if ( empty( $urls ) ) { + return true; + } + + $home_parts = wp_parse_url( home_url( '/' ) ); + + foreach ( $urls as $url ) { + $logo_parts = wp_parse_url( $url ); + + if ( empty( $logo_parts['host'] ) || empty( $logo_parts['path'] ) ) { + continue; + } + + if ( empty( $home_parts['host'] ) || $logo_parts['host'] !== $home_parts['host'] ) { + continue; + } + + if ( 0 !== strpos( $logo_parts['path'], '/wp-content/uploads/' ) ) { + continue; + } + + $local_file = trailingslashit( ABSPATH ) . ltrim( $logo_parts['path'], '/' ); + + if ( ! file_exists( $local_file ) ) { + return true; + } + } + + return false; +} + +/** + * Provide a stable fallback logo when the current site logo upload is missing. + * + * The checkout page (and any other page using the simplified block header) does + * not load the webhook fragment header, so get_custom_logo() is called and + * must resolve to a usable image even in environments where the local uploads + * directory has not been seeded (fresh Docker volumes, staging, etc.). + * + * Patches the existing logo HTML in-place: + * 1. Removes srcset and sizes (the thumbnail files likely do not exist). + * 2. Sets src to the light-background logo (logo-2.svg) as the default. + * 3. Wraps the in a element so the browser picks the correct + * variant from the system color-scheme preference without JavaScript. + */ +function libresign_filter_custom_logo( $custom_logo_html, $blog_id ) { + if ( ! libresign_custom_logo_needs_fallback( $custom_logo_html ) ) { + return $custom_logo_html; + } + + $logo_light = esc_url( libresign_get_theme_logo_url( 'light' ) ); + $logo_dark = esc_url( libresign_get_theme_logo_url( 'dark' ) ); + + // Remove srcset/sizes and set src to the light-background logo. + $patched = preg_replace( '/\ssrcset=["\'][^"\']*["\']/', '', $custom_logo_html ); + $patched = preg_replace( '/\ssizes=["\'][^"\']*["\']/', '', $patched ); + $patched = preg_replace( + '/(]+)src=["\'][^"\']*["\']/', + '$1src="' . $logo_light . '"', + $patched + ); + + // Wrap in for automatic dark/light switching. + $patched = preg_replace( + '/(]+>)/', + '' + . '' + . '' + . '$1' + . '', + $patched + ); + + return $patched ?: $custom_logo_html; +} +add_filter( 'get_custom_logo', 'libresign_filter_custom_logo', 10, 2 ); diff --git a/inc/product.php b/inc/product.php new file mode 100644 index 0000000..01b9cea --- /dev/null +++ b/inc/product.php @@ -0,0 +1,28 @@ +get_variation_attributes() ) as $attribute_name ) { + // wc_display_product_attributes() builds keys as 'attribute_' + sanitize_title_with_dashes( name ). + unset( $attributes[ 'attribute_' . sanitize_title( $attribute_name ) ] ); + } + + return $attributes; +}, 10, 2 ); diff --git a/inc/registration.php b/inc/registration.php new file mode 100644 index 0000000..460ce40 --- /dev/null +++ b/inc/registration.php @@ -0,0 +1,228 @@ +add( 'full_name_required', __( 'Please enter your full name.', 'libresign' ) ); + } + + if ( '' === $email ) { + $errors->add( 'email_required', __( 'Please enter a valid email address.', 'libresign' ) ); + } + + if ( '' === $password ) { + $errors->add( 'password_required', __( 'Please enter a password.', 'libresign' ) ); + } + + if ( empty( $_POST['libresign_workspace_terms'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing + $errors->add( + 'libresign_workspace_terms', + __( 'You must accept the terms to create your workspace.', 'libresign' ) + ); + } + + return $errors; +} +add_filter( 'woocommerce_registration_errors', 'libresign_validate_workspace_registration_fields', 10, 3 ); + +/** + * Generate a unique username from the registration e-mail. + */ +function libresign_generate_workspace_username( $email ) { + $base = sanitize_user( current( explode( '@', sanitize_email( $email ) ) ), true ); + + if ( '' === $base ) { + $base = 'workspace'; + } + + $username = $base; + $suffix = 1; + + while ( username_exists( $username ) ) { + $username = $base . '-' . $suffix; + $suffix++; + } + + return $username; +} + +/** + * Persist the custom workspace fields on customer creation. + */ +function libresign_save_workspace_registration_fields( $customer_id ) { + $full_name = isset( $_POST['full_name'] ) ? sanitize_text_field( wp_unslash( $_POST['full_name'] ) ) : ''; + + if ( '' !== $full_name ) { + $parts = preg_split( '/\s+/', $full_name ); + $first = array_shift( $parts ); + $last = trim( implode( ' ', (array) $parts ) ); + + if ( $first ) { + update_user_meta( $customer_id, 'first_name', $first ); + update_user_meta( $customer_id, 'billing_first_name', $first ); + } + + if ( $last ) { + update_user_meta( $customer_id, 'last_name', $last ); + update_user_meta( $customer_id, 'billing_last_name', $last ); + } + + update_user_meta( $customer_id, 'libresign_full_name', $full_name ); + update_user_meta( $customer_id, 'billing_name', $full_name ); + } + + if ( ! empty( $_POST['libresign_workspace_terms'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing + update_user_meta( $customer_id, 'libresign_workspace_terms', 'yes' ); + update_user_meta( $customer_id, 'libresign_workspace_terms_date', current_time( 'mysql' ) ); + } +} +add_action( 'woocommerce_created_customer', 'libresign_save_workspace_registration_fields', 10, 1 ); + +/** + * Keep the visitor-provided password for the custom workspace form. + */ +function libresign_use_custom_workspace_password( $generate_password ) { + if ( ! empty( $_POST['password'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing + return false; + } + + return $generate_password; +} +add_filter( 'woocommerce_registration_generate_password', 'libresign_use_custom_workspace_password' ); + +/** + * Make sure the newly created customer ends up logged in immediately. + */ +function libresign_authenticate_new_workspace_customer( $customer_id ) { + wp_set_current_user( $customer_id ); + wp_set_auth_cookie( $customer_id, true ); +} +add_action( 'woocommerce_created_customer', 'libresign_authenticate_new_workspace_customer', 20, 1 ); + +// --------------------------------------------------------------------------- +// Policy consent (standard WooCommerce registration form) +// --------------------------------------------------------------------------- + +/** + * Render the policy consent checkbox on the WooCommerce registration form. + * Used when the standard (non-workspace) registration form is rendered. + */ +function libresign_render_registration_policy_checkbox() { + $policy_url = libresign_get_policy_url(); + ?> +

+ +

+ add( + 'libresign_policy_consent', + __( 'Please confirm that you agree with the policies before creating an account.', 'libresign' ) + ); + } + + return $errors; +} +add_filter( 'woocommerce_registration_errors', 'libresign_validate_registration_policy_consent', 10, 3 ); + +/** + * Persist the consent flag so the approval is auditable. + */ +function libresign_save_registration_policy_consent( $customer_id ) { + if ( ! empty( $_POST['libresign_policy_consent'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing + update_user_meta( $customer_id, 'libresign_policy_consent', 'yes' ); + update_user_meta( $customer_id, 'libresign_policy_consent_date', current_time( 'mysql' ) ); + } +} +add_action( 'woocommerce_created_customer', 'libresign_save_registration_policy_consent' ); + +// --------------------------------------------------------------------------- +// Post-registration / login redirects +// --------------------------------------------------------------------------- + +/** + * Send newly registered users to their WooCommerce account area. + */ +function libresign_registration_redirect_to_account( $redirect ) { + return libresign_get_purchase_redirect_target(); +} +add_filter( 'woocommerce_registration_redirect', 'libresign_registration_redirect_to_account', 10, 1 ); + +/** + * Send authenticated users to the account dashboard after login. + */ +function libresign_login_redirect_to_account( $redirect, $user ) { + return libresign_get_purchase_redirect_target(); +} +add_filter( 'woocommerce_login_redirect', 'libresign_login_redirect_to_account', 10, 2 ); diff --git a/inc/theme-setup.php b/inc/theme-setup.php new file mode 100644 index 0000000..5d01928 --- /dev/null +++ b/inc/theme-setup.php @@ -0,0 +1,18 @@ + 1);\n" + +#. Theme Name of the theme +#: style.css +msgid "libresign" +msgstr "" + +#. Description of the theme +#: style.css +msgid "Nosso tema" +msgstr "" + +#. Author of the theme +#: style.css +msgid "LibreCode" +msgstr "" + +#: functions.php:37 +msgid "Arrow icon" +msgstr "" + +#: functions.php:60 +msgid "Pill" +msgstr "" + +#: functions.php:83 +msgid "Checkmark" +msgstr "" + +#: functions.php:102 +msgid "With arrow" +msgstr "" + +#: functions.php:120 +msgid "With asterisk" +msgstr "" + +#: functions.php:208 +msgctxt "Block pattern category" +msgid "Pages" +msgstr "" + +#: functions.php:209 +msgid "A collection of full page layouts." +msgstr "" + +#: functions.php:335 +msgid "Access" +msgstr "Acesso" + +#: functions.php:336 +msgid "Reset password" +msgstr "Recuperar senha" + +#: functions.php:337 +msgid "Enter your email or username to receive a password reset link." +msgstr "Informe seu e-mail ou usuário para receber o link de redefinição de senha." + +#: functions.php:341 +msgid "Create free workspace" +msgstr "Criar workspace grátis" + +#: functions.php:342 +msgid "Back to sign in" +msgstr "Voltar para entrar" + +#: functions.php:347 +msgid "LibreSign access" +msgstr "Acesso LibreSign" + +#: functions.php:348 +msgid "Sign in" +msgstr "Entrar" + +#: functions.php:349 functions.php:355 +msgid "Forgot password" +msgstr "Esqueci a senha" + +#: functions.php:356 functions.php:376 +msgid "Send reset link" +msgstr "Enviar link de redefinição" + +#: functions.php:357 +msgid "If your account exists, we will send you an email with the next step." +msgstr "Se sua conta existir, enviaremos um e-mail com o próximo passo." + +#: functions.php:368 +msgid "Email or username" +msgstr "E-mail ou usuário" + +#: functions.php:492 +msgid "Please enter your full name." +msgstr "Informe seu nome completo." + +#: functions.php:496 +msgid "Please enter a valid email address." +msgstr "Informe um e-mail válido." + +#: functions.php:500 +msgid "Please enter a password." +msgstr "Informe uma senha." + +#: functions.php:506 +msgid "You must accept the terms to create your workspace." +msgstr "Você precisa aceitar os termos para criar o workspace." + +#. translators: %s: policy page link +#: functions.php:621 +#, php-format +msgid "" +"I agree to the policies and privacy policy." +msgstr "" + +#: functions.php:643 +msgid "" +"Please confirm that you agree with the policies before creating an account." +msgstr "" + +#: functions.php:723 +msgid "CPF or CNPJ" +msgstr "CPF ou CNPJ" + +#: functions.php:729 +msgid "Required for customers in Brazil" +msgstr "Obrigatório para clientes no Brasil" + +#: functions.php:748 +msgid "Please enter your CPF or CNPJ for tax invoice issuance." +msgstr "Informe seu CPF ou CNPJ para emissão da nota fiscal." + +#. translators: %s: policy page link +#: functions.php:761 +#, php-format +msgid "I agree to the %s before placing the order." +msgstr "Eu concordo com %s antes de finalizar o pedido." + +#: functions.php:765 +msgid "terms and privacy policy" +msgstr "termos e política de privacidade" + +#: functions.php:778 +msgid "You must agree to the policies before completing the purchase." +msgstr "Você precisa aceitar as políticas antes de finalizar a compra." + +#: functions.php:804 +msgid "Entre para continuar com a compra." +msgstr "" + +#: functions.php:893 +msgid "Contratar" +msgstr "" + +#. translators: 1: HTTP status code, 2: requested URL. +#: inc/footer-fragment.php:172 +#, php-format +msgid "Unexpected HTTP status %1$d while fetching %2$s." +msgstr "" + +#: inc/footer-fragment.php:218 +msgid "Fragment HTML is missing the expected CSS/JS references." +msgstr "" + +#: inc/footer-fragment.php:335 +msgid "A static site origin is required to synchronize fragments." +msgstr "" + +#. translators: %s: fragment type. +#: inc/footer-fragment.php:459 +#, php-format +msgid "Unable to create local storage for the %s fragment." +msgstr "" + +#: inc/github-site-webhook.php:30 +msgid "Site fragment integration" +msgstr "" + +#. translators: %s: REST webhook endpoint URL. +#: inc/github-site-webhook.php:34 +#, php-format +msgid "" +"Sync shared header and footer fragments after the GitHub production deploy " +"finishes. Configure the repository webhook to post to %s using the " +"workflow_run event." +msgstr "" + +#: inc/github-site-webhook.php:52 +msgid "GitHub webhook secret" +msgstr "" + +#: inc/github-site-webhook.php:55 +msgid "" +"Use the same shared secret in the GitHub repository webhook and in this " +"theme setting." +msgstr "" + +#: inc/github-site-webhook.php:71 +msgid "Static site origin" +msgstr "" + +#: inc/github-site-webhook.php:74 +msgid "" +"Production URL used to fetch /fragments/header and /fragments/footer after a " +"successful deploy." +msgstr "" + +#: inc/github-site-webhook.php:90 +msgid "GitHub repository" +msgstr "" + +#: inc/github-site-webhook.php:93 +msgid "Expected repository full name for incoming workflow_run deliveries." +msgstr "" + +#: inc/github-site-webhook.php:109 +msgid "Monitored workflow name" +msgstr "" + +#: inc/github-site-webhook.php:112 +msgid "" +"Exact GitHub Actions workflow name that represents the production deploy." +msgstr "" + +#: inc/github-site-webhook.php:128 +msgid "Monitored branch name" +msgstr "" + +#: inc/github-site-webhook.php:131 +msgid "" +"Expected branch name for the monitored workflow (e.g. gh-pages for pages " +"build and deployment)." +msgstr "" + +#: inc/github-site-webhook.php:426 +msgid "The GitHub webhook secret is not configured." +msgstr "" + +#: inc/github-site-webhook.php:435 +msgid "The webhook request does not look like a GitHub delivery." +msgstr "" + +#: inc/github-site-webhook.php:445 +msgid "Invalid GitHub webhook signature." +msgstr "" + +#: inc/github-site-webhook.php:473 +msgid "The GitHub webhook payload must be valid JSON." +msgstr "" + +#: patterns/banner-hero.php +msgctxt "Pattern title" +msgid "Hero" +msgstr "" + +#: patterns/banner-hero.php +msgctxt "Pattern description" +msgid "A hero section with a title, a paragraph, a CTA button, and an image." +msgstr "" + +#: patterns/banner-hero.php:18 +msgctxt "Heading of the hero section" +msgid "A commitment to innovation and sustainability" +msgstr "" + +#: patterns/banner-hero.php:26 +msgctxt "Content of the hero section" +msgid "" +"Études is a pioneering firm that seamlessly merges creativity and " +"functionality to redefine architectural excellence." +msgstr "" + +#: patterns/banner-hero.php:37 +msgctxt "Button text of the hero section" +msgid "About us" +msgstr "" + +#: patterns/banner-hero.php:52 +msgid "Building exterior in Toronto, Canada" +msgstr "" + +#: patterns/banner-project-description.php +msgctxt "Pattern title" +msgid "Project description" +msgstr "" + +#: patterns/banner-project-description.php +msgctxt "Pattern description" +msgid "Project description section with title, paragraph, and an image." +msgstr "" + +#: patterns/banner-project-description.php:17 +msgctxt "Sample title for a project or post" +msgid "Art Gallery — Overview" +msgstr "" + +#: patterns/banner-project-description.php:26 +msgctxt "Sample descriptive text for a project or post." +msgid "" +"This transformative project seeks to enhance the gallery's infrastructure, " +"accessibility, and exhibition spaces while preserving its rich cultural " +"heritage." +msgstr "" + +#: patterns/banner-project-description.php:41 +msgid "Hyatt Regency San Francisco, San Francisco, United States" +msgstr "" + +#: patterns/cta-content-image-on-right.php +msgctxt "Pattern title" +msgid "Call to action with image on right" +msgstr "" + +#: patterns/cta-content-image-on-right.php +msgctxt "Pattern description" +msgid "" +"A title, paragraph, two CTA buttons, and an image for a general CTA section." +msgstr "" + +#: patterns/cta-content-image-on-right.php:18 +msgctxt "Sample heading" +msgid "Enhance your architectural journey with the Études Architect app." +msgstr "" + +#: patterns/cta-content-image-on-right.php:24 +#: patterns/text-alternating-images.php:44 +msgctxt "Sample list item" +msgid "Collaborate with fellow architects." +msgstr "" + +#: patterns/cta-content-image-on-right.php:28 +#: patterns/text-alternating-images.php:48 +msgctxt "Sample list item" +msgid "Showcase your projects." +msgstr "" + +#: patterns/cta-content-image-on-right.php:32 +#: patterns/text-alternating-images.php:52 +msgctxt "Sample list item" +msgid "Experience the world of architecture." +msgstr "" + +#: patterns/cta-content-image-on-right.php:41 +msgctxt "Button text of this section" +msgid "Download app" +msgstr "" + +#: patterns/cta-content-image-on-right.php:47 +msgctxt "Button text of this section" +msgid "How it works" +msgstr "" + +#: patterns/cta-content-image-on-right.php:59 +#: patterns/cta-services-image-left.php:19 +msgid "White abstract geometric artwork from Dresden, Germany" +msgstr "" + +#: patterns/cta-pricing.php +msgctxt "Pattern title" +msgid "Pricing" +msgstr "" + +#: patterns/cta-pricing.php +msgctxt "Pattern description" +msgid "A pricing section with a title, a paragraph and three pricing levels." +msgstr "" + +#: patterns/cta-pricing.php:11 +msgctxt "Name for the pricing pattern" +msgid "Pricing Table" +msgstr "" + +#: patterns/cta-pricing.php:18 +msgctxt "Sample heading for pricing pattern" +msgid "Our Services" +msgstr "" + +#: patterns/cta-pricing.php:22 +msgctxt "Sample description for a pricing table" +msgid "" +"We offer flexible options, which you can adapt to the different needs of " +"each project." +msgstr "" + +#: patterns/cta-pricing.php:37 +msgctxt "Sample heading for the first pricing level" +msgid "Free" +msgstr "" + +#: patterns/cta-pricing.php:42 +msgctxt "Sample price for the first pricing level" +msgid "$0" +msgstr "" + +#: patterns/cta-pricing.php:53 +msgctxt "Feature for pricing level" +msgid "Access to 5 exclusive Études Articles per month." +msgstr "" + +#: patterns/cta-pricing.php:62 patterns/cta-pricing.php:123 +#: patterns/cta-pricing.php:181 +msgctxt "Feature for pricing level" +msgid "Weekly print edition." +msgstr "" + +#: patterns/cta-pricing.php:72 patterns/cta-pricing.php:131 +msgctxt "Feature for pricing level" +msgid "Exclusive access to the Études app for iOS and Android." +msgstr "" + +#: patterns/cta-pricing.php:87 +msgctxt "Button text for the first pricing level" +msgid "Subscribe" +msgstr "" + +#: patterns/cta-pricing.php:99 +msgctxt "Sample heading for the second pricing level" +msgid "Connoisseur" +msgstr "" + +#: patterns/cta-pricing.php:104 +msgctxt "Sample price for the second pricing level" +msgid "$12" +msgstr "" + +#: patterns/cta-pricing.php:115 +msgctxt "Feature for pricing level" +msgid "Access to 20 exclusive Études Articles per month." +msgstr "" + +#: patterns/cta-pricing.php:145 +msgctxt "Button text for the second pricing level" +msgid "Subscribe" +msgstr "" + +#: patterns/cta-pricing.php:157 +msgctxt "Sample heading for the third pricing level" +msgid "Expert" +msgstr "" + +#: patterns/cta-pricing.php:162 +msgctxt "Sample price for the third pricing level" +msgid "$28" +msgstr "" + +#: patterns/cta-pricing.php:173 +msgctxt "Feature for pricing level" +msgid "Exclusive, unlimited access to Études Articles." +msgstr "" + +#: patterns/cta-pricing.php:189 +msgctxt "Feature for pricing level" +msgid "Exclusive access to the Études app for iOS and Android" +msgstr "" + +#: patterns/cta-pricing.php:203 +msgctxt "Button text for the third pricing level" +msgid "Subscribe" +msgstr "" + +#: patterns/cta-rsvp.php +msgctxt "Pattern title" +msgid "RSVP" +msgstr "" + +#: patterns/cta-rsvp.php patterns/page-rsvp-landing.php +msgctxt "Pattern description" +msgid "A large RSVP heading sideways, a description, and a CTA button." +msgstr "" + +#: patterns/cta-rsvp.php:11 +msgctxt "Name of RSVP pattern" +msgid "RSVP" +msgstr "" + +#: patterns/cta-rsvp.php:21 patterns/page-rsvp-landing.php:23 +msgctxt "Initials for ´please respond´" +msgid "RSVP" +msgstr "" + +#: patterns/cta-rsvp.php:27 patterns/page-rsvp-landing.php:28 +msgctxt "RSVP call to action description" +msgid "" +"Experience the fusion of imagination and expertise with Études Arch Summit, " +"February 2025." +msgstr "" + +#: patterns/cta-rsvp.php:34 patterns/page-rsvp-landing.php:34 +msgctxt "Call to action button text for the reservation button" +msgid "Reserve your spot" +msgstr "" + +#: patterns/cta-rsvp.php:50 patterns/text-title-left-image-right.php:51 +msgid "A ramp along a curved wall in the Kiasma Museu, Helsinki, Finland" +msgstr "" + +#: patterns/cta-services-image-left.php +msgctxt "Pattern title" +msgid "Services call to action with image on left" +msgstr "" + +#: patterns/cta-services-image-left.php +msgctxt "Pattern description" +msgid "An image, title, paragraph and a CTA button to describe services." +msgstr "" + +#: patterns/cta-services-image-left.php:28 +msgctxt "Sample heading of the services pattern" +msgid "Guiding your business through the project" +msgstr "" + +#: patterns/cta-services-image-left.php:32 +msgctxt "Sample description of the services pattern" +msgid "" +"Experience the fusion of imagination and expertise with Études—the catalyst " +"for architectural transformations that enrich the world around us." +msgstr "" + +#: patterns/cta-services-image-left.php:39 +msgctxt "Sample button text to view the services" +msgid "Our services" +msgstr "" + +#: patterns/cta-subscribe-centered.php +msgctxt "Pattern title" +msgid "Centered call to action" +msgstr "" + +#: patterns/cta-subscribe-centered.php +msgctxt "Pattern description" +msgid "Subscribers CTA section with a title, a paragraph and a CTA button." +msgstr "" + +#: patterns/cta-subscribe-centered.php:20 +msgctxt "Sample text for Subscriber Heading with numbers" +msgid "Join 900+ subscribers" +msgstr "" + +#: patterns/cta-subscribe-centered.php:24 +msgctxt "Sample text for Subscriber Description" +msgid "Stay in the loop with everything you need to know." +msgstr "" + +#: patterns/cta-subscribe-centered.php:31 +msgctxt "Sample text for Sign Up Button" +msgid "Sign up" +msgstr "" + +#: patterns/footer-centered-logo-nav.php +msgctxt "Pattern title" +msgid "Footer with centered logo and navigation" +msgstr "" + +#: patterns/footer-centered-logo-nav.php +msgctxt "Pattern description" +msgid "" +"A footer section with a centered logo, navigation, and WordPress credits." +msgstr "" + +#. Translators: WordPress link. +#: patterns/footer-centered-logo-nav.php:22 +#: patterns/footer-colophon-3-col.php:91 patterns/footer.php:117 +msgid "https://wordpress.org" +msgstr "" + +#. Translators: Designed with WordPress +#: patterns/footer-centered-logo-nav.php:25 +#: patterns/footer-colophon-3-col.php:94 patterns/footer.php:120 +#, php-format +msgid "Designed with %1$s" +msgstr "" + +#: patterns/footer-colophon-3-col.php +msgctxt "Pattern title" +msgid "Footer with colophon, 3 columns" +msgstr "" + +#: patterns/footer-colophon-3-col.php +msgctxt "Pattern description" +msgid "A footer section with a colophon and 3 columns." +msgstr "" + +#: patterns/footer-colophon-3-col.php:30 +msgid "Keep up, get in touch." +msgstr "" + +#: patterns/footer-colophon-3-col.php:39 +msgid "Contact" +msgstr "" + +#: patterns/footer-colophon-3-col.php:42 +msgctxt "Example email in site footer" +msgid "info@example.com" +msgstr "" + +#: patterns/footer-colophon-3-col.php:57 +msgid "Follow" +msgstr "" + +#: patterns/footer-colophon-3-col.php:60 patterns/footer.php:95 +msgid "Instagram" +msgstr "" + +#: patterns/footer-colophon-3-col.php:60 patterns/footer.php:94 +msgid "Facebook" +msgstr "" + +#: patterns/footer-colophon-3-col.php:82 +msgid "©" +msgstr "" + +#: patterns/footer.php +msgctxt "Pattern title" +msgid "Footer with colophon, 4 columns" +msgstr "" + +#: patterns/footer.php +msgctxt "Pattern description" +msgid "A footer section with a colophon and 4 columns." +msgstr "" + +#: patterns/footer.php:41 patterns/footer.php:47 +msgid "About" +msgstr "" + +#: patterns/footer.php:49 +msgid "Team" +msgstr "" + +#: patterns/footer.php:50 +msgid "History" +msgstr "" + +#: patterns/footer.php:51 +msgid "Careers" +msgstr "" + +#: patterns/footer.php:64 patterns/footer.php:70 +msgid "Privacy" +msgstr "" + +#: patterns/footer.php:72 +msgid "Privacy Policy" +msgstr "" + +#: patterns/footer.php:73 +msgid "Terms and Conditions" +msgstr "" + +#: patterns/footer.php:74 +msgid "Contact Us" +msgstr "" + +#: patterns/footer.php:86 +msgid "Social" +msgstr "" + +#: patterns/footer.php:92 +msgid "Social Media" +msgstr "" + +#: patterns/footer.php:96 +msgid "Twitter/X" +msgstr "" + +#: patterns/gallery-full-screen-image.php +msgctxt "Pattern title" +msgid "Full screen image" +msgstr "" + +#: patterns/gallery-full-screen-image.php +msgctxt "Pattern description" +msgid "A cover image section that covers the entire width." +msgstr "" + +#: patterns/gallery-offset-images-grid-2-col.php +msgctxt "Pattern title" +msgid "Offset gallery, 2 columns" +msgstr "" + +#: patterns/gallery-offset-images-grid-2-col.php +msgctxt "Pattern description" +msgid "A gallery section with 2 columns and offset images." +msgstr "" + +#: patterns/gallery-offset-images-grid-3-col.php +msgctxt "Pattern title" +msgid "Offset gallery, 3 columns" +msgstr "" + +#: patterns/gallery-offset-images-grid-3-col.php +msgctxt "Pattern description" +msgid "A gallery section with 3 columns and offset images." +msgstr "" + +#: patterns/gallery-offset-images-grid-4-col.php +msgctxt "Pattern title" +msgid "Offset gallery, 4 columns" +msgstr "" + +#: patterns/gallery-offset-images-grid-4-col.php +msgctxt "Pattern description" +msgid "A gallery section with 4 columns and offset images." +msgstr "" + +#: patterns/gallery-project-layout.php +msgctxt "Pattern title" +msgid "Project layout" +msgstr "" + +#: patterns/gallery-project-layout.php +msgctxt "Pattern description" +msgid "A gallery section with a project layout with 2 images." +msgstr "" + +#: patterns/gallery-project-layout.php:21 +msgid "" +"An empty staircase under an angular roof in Darling Harbour, Sydney, " +"Australia" +msgstr "" + +#: patterns/gallery-project-layout.php:26 +msgctxt "Sample text for the feature area" +msgid "" +"1. Through Études, we aspire to redefine architectural boundaries and usher " +"in a new era of design excellence that leaves an indelible mark on the built " +"environment." +msgstr "" + +#: patterns/gallery-project-layout.php:38 +msgctxt "Sample text for the feature area" +msgid "" +"Our comprehensive suite of professional services caters to a diverse " +"clientele, ranging from homeowners to commercial developers. With a " +"commitment to innovation and sustainability, Études is the bridge that " +"transforms architectural dreams into remarkable built realities." +msgstr "" + +#: patterns/gallery-project-layout.php:49 +msgctxt "Sample text for the feature area" +msgid "" +"2. Case studies that celebrate the artistry can fuel curiosity and ignite " +"inspiration." +msgstr "" + +#: patterns/gallery-project-layout.php:54 +msgid "Art Gallery of Ontario, Toronto, Canada" +msgstr "" + +#: patterns/hidden-404.php +msgctxt "Pattern title" +msgid "404" +msgstr "" + +#: patterns/hidden-404.php:10 +msgctxt "Heading for a webpage that is not found" +msgid "Page Not Found" +msgstr "" + +#: patterns/hidden-404.php:13 +msgctxt "Message to convey that a webpage could not be found" +msgid "" +"The page you are looking for does not exist, or it has been moved. Please " +"try searching using the form below." +msgstr "" + +#: patterns/hidden-comments.php +msgctxt "Pattern title" +msgid "Comments" +msgstr "" + +#: patterns/hidden-comments.php:12 +msgid "Comments" +msgstr "" + +#: patterns/hidden-no-results.php +msgctxt "Pattern title" +msgid "No results" +msgstr "" + +#: patterns/hidden-no-results.php:9 +msgctxt "Message explaining that there are no results returned from a search" +msgid "No posts were found." +msgstr "" + +#: patterns/hidden-portfolio-hero.php +msgctxt "Pattern title" +msgid "Portfolio hero" +msgstr "" + +#: patterns/hidden-portfolio-hero.php:16 +msgid "" +"I’m Leia Acosta, a passionate photographer who finds inspiration in " +"capturing the fleeting beauty of life." +msgstr "" + +#: patterns/hidden-post-meta.php +msgctxt "Pattern title" +msgid "Post meta" +msgstr "" + +#: patterns/hidden-post-meta.php:20 +msgctxt "Prefix for the post author block: By author name" +msgid "by" +msgstr "" + +#: patterns/hidden-post-meta.php:25 +msgctxt "Prefix for the post category block: in category name" +msgid "in " +msgstr "" + +#: patterns/hidden-post-navigation.php +msgctxt "Pattern title" +msgid "Post navigation" +msgstr "" + +#: patterns/hidden-post-navigation.php:9 patterns/hidden-post-navigation.php:10 +#: patterns/template-index-portfolio.php:16 +msgid "Posts" +msgstr "" + +#: patterns/hidden-post-navigation.php:11 +msgctxt "" +"Label before the title of the previous post. There is a space after the " +"colon." +msgid "Previous: " +msgstr "" + +#: patterns/hidden-post-navigation.php:12 +msgctxt "" +"Label before the title of the next post. There is a space after the colon." +msgid "Next: " +msgstr "" + +#: patterns/hidden-search.php +msgctxt "Pattern title" +msgid "Search" +msgstr "" + +#: patterns/hidden-search.php:9 patterns/hidden-sidebar.php:75 +msgctxt "search form label" +msgid "Search" +msgstr "" + +#: patterns/hidden-search.php:9 +msgctxt "search button text" +msgid "Search" +msgstr "" + +#: patterns/hidden-sidebar.php +msgctxt "Pattern title" +msgid "Sidebar" +msgstr "" + +#: patterns/hidden-sidebar.php:17 +msgid "About the author" +msgstr "" + +#: patterns/hidden-sidebar.php:33 +msgid "Popular Categories" +msgstr "" + +#: patterns/hidden-sidebar.php:49 +msgid "Useful Links" +msgstr "" + +#: patterns/hidden-sidebar.php:53 +msgid "Links I found useful and wanted to share." +msgstr "" + +#: patterns/hidden-sidebar.php:59 +msgid "Latest inflation report" +msgstr "" + +#: patterns/hidden-sidebar.php:60 +msgid "Financial apps for families" +msgstr "" + +#: patterns/hidden-sidebar.php:72 +msgid "Search the website" +msgstr "" + +#: patterns/hidden-sidebar.php:75 +msgctxt "search form placeholder" +msgid "Search..." +msgstr "" + +#: patterns/page-about-business.php +msgctxt "Pattern title" +msgid "About" +msgstr "" + +#: patterns/page-about-business.php +msgctxt "Pattern description" +msgid "" +"A business about page with a hero section, a text section, a services " +"section, a team section, a clients section, a FAQ section, and a CTA section." +msgstr "" + +#: patterns/page-home-blogging.php +msgctxt "Pattern title" +msgid "Blogging home" +msgstr "" + +#: patterns/page-home-blogging.php +msgctxt "Pattern description" +msgid "" +"A blogging home page with a hero section, a text section, a blog section, " +"and a CTA section." +msgstr "" + +#: patterns/page-home-business.php +msgctxt "Pattern title" +msgid "Business home" +msgstr "" + +#: patterns/page-home-business.php +msgctxt "Pattern description" +msgid "" +"A business home page with a hero section, a text section, a services " +"section, a team section, a clients section, a FAQ section, and a CTA section." +msgstr "" + +#: patterns/page-home-portfolio-gallery.php +msgctxt "Pattern title" +msgid "Portfolio home image gallery" +msgstr "" + +#: patterns/page-home-portfolio-gallery.php +msgctxt "Pattern description" +msgid "A porfolio home page that features a gallery." +msgstr "" + +#: patterns/page-home-portfolio.php +msgctxt "Pattern title" +msgid "Portfolio home with post featured images" +msgstr "" + +#: patterns/page-home-portfolio.php +msgctxt "Pattern description" +msgid "" +"A portfolio home page with a description and a 4-column post section with " +"only feature images." +msgstr "" + +#: patterns/page-newsletter-landing.php +msgctxt "Pattern title" +msgid "Newsletter landing" +msgstr "" + +#: patterns/page-newsletter-landing.php +msgctxt "Pattern description" +msgid "A block with a newsletter subscription CTA for a landing page." +msgstr "" + +#: patterns/page-newsletter-landing.php:29 +msgctxt "sample content for newsletter subscription" +msgid "Subscribe to the newsletter and stay connected with our community" +msgstr "" + +#: patterns/page-newsletter-landing.php:40 +msgctxt "Sample content for newsletter subscribe button" +msgid "Sign up" +msgstr "" + +#: patterns/page-portfolio-overview.php +msgctxt "Pattern title" +msgid "Portfolio project overview" +msgstr "" + +#: patterns/page-portfolio-overview.php +msgctxt "Pattern description" +msgid "" +"A full portfolio page with a section for project description, project " +"details, a full screen image, and a gallery section with two images." +msgstr "" + +#: patterns/page-rsvp-landing.php +msgctxt "Pattern title" +msgid "RSVP landing" +msgstr "" + +#: patterns/page-rsvp-landing.php:14 +msgctxt "Name of RSVP landing page pattern" +msgid "RSVP Landing Page" +msgstr "" + +#: patterns/page-rsvp-landing.php:49 +msgid "Green staircase at Western University, London, Canada" +msgstr "" + +#: patterns/posts-1-col.php +msgctxt "Pattern title" +msgid "List of posts, 1 column" +msgstr "" + +#: patterns/posts-1-col.php +msgctxt "Pattern description" +msgid "A list of posts, 1 column." +msgstr "" + +#: patterns/posts-3-col.php +msgctxt "Pattern title" +msgid "List of posts, 3 columns" +msgstr "" + +#: patterns/posts-3-col.php +msgctxt "Pattern description" +msgid "A list of posts, 3 columns." +msgstr "" + +#: patterns/posts-grid-2-col.php +msgctxt "Pattern title" +msgid "Grid of posts featuring the first post, 2 columns" +msgstr "" + +#: patterns/posts-grid-2-col.php +msgctxt "Pattern description" +msgid "A grid of posts featuring the first post, 2 columns." +msgstr "" + +#: patterns/posts-grid-2-col.php:14 patterns/posts-list.php:14 +#: patterns/template-index-blogging.php:16 +msgid "Watch, Read, Listen" +msgstr "" + +#: patterns/posts-images-only-3-col.php +msgctxt "Pattern title" +msgid "Posts with featured images only, 3 columns" +msgstr "" + +#: patterns/posts-images-only-3-col.php +msgctxt "Pattern description" +msgid "A list of posts with featured images only, 3 columns." +msgstr "" + +#: patterns/posts-images-only-offset-4-col.php +msgctxt "Pattern title" +msgid "Offset posts with featured images only, 4 columns" +msgstr "" + +#: patterns/posts-images-only-offset-4-col.php +msgctxt "Pattern description" +msgid "A list of posts with featured images only, 4 columns." +msgstr "" + +#: patterns/posts-list.php +msgctxt "Pattern title" +msgid "List of posts without images, 1 column" +msgstr "" + +#: patterns/posts-list.php +msgctxt "Pattern description" +msgid "A list of posts without images, 1 column." +msgstr "" + +#: patterns/team-4-col.php +msgctxt "Pattern title" +msgid "Team members, 4 columns" +msgstr "" + +#: patterns/team-4-col.php +msgctxt "Pattern description" +msgid "" +"A team section, with a heading, a paragraph, and 4 columns for team members." +msgstr "" + +#: patterns/team-4-col.php:11 +msgctxt "Name of team pattern" +msgid "Team members" +msgstr "" + +#: patterns/team-4-col.php:16 +msgctxt "Sample heading for the team pattern" +msgid "Meet our team" +msgstr "" + +#: patterns/team-4-col.php:20 +msgctxt "Sample descriptive text of the team pattern" +msgid "" +"Our comprehensive suite of professionals caters to a diverse team, ranging " +"from seasoned architects to renowned engineers." +msgstr "" + +#: patterns/team-4-col.php:44 +msgctxt "Sample name of a team member" +msgid "Francesca Piovani" +msgstr "" + +#: patterns/team-4-col.php:49 +msgctxt "Sample role of a team member" +msgid "Founder, CEO & Architect" +msgstr "" + +#: patterns/team-4-col.php:68 +msgctxt "Sample name of a team member" +msgid "Rhye Moore" +msgstr "" + +#: patterns/team-4-col.php:73 +msgctxt "Sample role of a team member" +msgid "Engineering Manager" +msgstr "" + +#: patterns/team-4-col.php:92 +msgctxt "Sample name of a team member" +msgid "Helga Steiner" +msgstr "" + +#: patterns/team-4-col.php:97 +msgctxt "Sample role of a team member" +msgid "Architect" +msgstr "" + +#: patterns/team-4-col.php:116 +msgctxt "Sample name of a team member" +msgid "Ivan Lawrence" +msgstr "" + +#: patterns/team-4-col.php:121 +msgctxt "Sample role of a team member" +msgid "Project Manager" +msgstr "" + +#: patterns/template-archive-blogging.php +msgctxt "Pattern title" +msgid "Blogging archive template" +msgstr "" + +#: patterns/template-archive-portfolio.php +msgctxt "Pattern title" +msgid "Portfolio archive template" +msgstr "" + +#: patterns/template-home-blogging.php +msgctxt "Pattern title" +msgid "Blogging home template" +msgstr "" + +#: patterns/template-home-business.php +msgctxt "Pattern title" +msgid "Business home template" +msgstr "" + +#: patterns/template-home-portfolio.php +msgctxt "Pattern title" +msgid "Portfolio home template with post featured images" +msgstr "" + +#: patterns/template-index-blogging.php +msgctxt "Pattern title" +msgid "Blogging index template" +msgstr "" + +#: patterns/template-index-portfolio.php +msgctxt "Pattern title" +msgid "Portfolio index template" +msgstr "" + +#: patterns/template-search-blogging.php +msgctxt "Pattern title" +msgid "Blogging search template" +msgstr "" + +#: patterns/template-search-portfolio.php +msgctxt "Pattern title" +msgid "Portfolio search template" +msgstr "" + +#: patterns/template-single-portfolio.php +msgctxt "Pattern title" +msgid "Portfolio single post template" +msgstr "" + +#: patterns/testimonial-centered.php +msgctxt "Pattern title" +msgid "Centered testimonial" +msgstr "" + +#: patterns/testimonial-centered.php +msgctxt "Pattern description" +msgid "A centered testimonial section with a avatar, name, and job title." +msgstr "" + +#: patterns/testimonial-centered.php:12 +msgctxt "Name of testimonial pattern" +msgid "Testimonial" +msgstr "" + +#: patterns/testimonial-centered.php:18 +msgctxt "Testimonial Text or Review Text Got From the Person" +msgid "" +"“Études has saved us thousands of hours of work and has unlocked insights we " +"never thought possible.”" +msgstr "" + +#: patterns/testimonial-centered.php:26 +msgctxt "Name of testimonial citation group" +msgid "Testimonial source" +msgstr "" + +#: patterns/testimonial-centered.php:35 +msgctxt "Name of Person Provided the Testimonial" +msgid "Annie Steiner" +msgstr "" + +#: patterns/testimonial-centered.php:39 +msgctxt "Designation of Person Provided Testimonial" +msgid "CEO, Greenprint" +msgstr "" + +#: patterns/text-alternating-images.php +msgctxt "Pattern title" +msgid "Text with alternating images" +msgstr "" + +#: patterns/text-alternating-images.php +msgctxt "Pattern description" +msgid "" +"A text section, then a two column section with text in one and image in " +"another." +msgstr "" + +#: patterns/text-alternating-images.php:19 +msgctxt "Sample heading content" +msgid "An array of resources" +msgstr "" + +#: patterns/text-alternating-images.php:23 +msgctxt "Sample subheading content" +msgid "" +"Our comprehensive suite of professional services caters to a diverse " +"clientele, ranging from homeowners to commercial developers." +msgstr "" + +#: patterns/text-alternating-images.php:37 +msgctxt "Sample list heading" +msgid "Études Architect App" +msgstr "" + +#: patterns/text-alternating-images.php:64 +msgid "Tourist taking photo of a building" +msgstr "" + +#: patterns/text-alternating-images.php:82 +msgid "Windows of a building in Nuremberg, Germany" +msgstr "" + +#: patterns/text-alternating-images.php:91 +msgctxt "Sample heading" +msgid "Études Newsletter" +msgstr "" + +#: patterns/text-alternating-images.php:97 +msgctxt "Sample list item" +msgid "A world of thought-provoking articles." +msgstr "" + +#: patterns/text-alternating-images.php:101 +msgctxt "Sample list item" +msgid "Case studies that celebrate architecture." +msgstr "" + +#: patterns/text-alternating-images.php:105 +msgctxt "Sample list item" +msgid "Exclusive access to design insights." +msgstr "" + +#: patterns/text-centered-statement-small.php +msgctxt "Pattern title" +msgid "Centered statement, small" +msgstr "" + +#: patterns/text-centered-statement-small.php +msgctxt "Pattern description" +msgid "A centered itallic text statement with compact padding." +msgstr "" + +#. Translators: About link placeholder +#: patterns/text-centered-statement-small.php:20 +msgid "Money Studies" +msgstr "" + +#. Translators: About text placeholder +#: patterns/text-centered-statement-small.php:23 +#, php-format +msgid "" +"I write about finance, management and economy, my book “%1$s” is out now." +msgstr "" + +#: patterns/text-centered-statement.php +msgctxt "Pattern title" +msgid "Centered statement" +msgstr "" + +#: patterns/text-centered-statement.php +msgctxt "Pattern description" +msgid "A centered text statement with a large paddings." +msgstr "" + +#: patterns/text-centered-statement.php:21 +msgid "" +"Études is not confined to the past—we are passionate about the " +"cutting edge designs shaping our world today." +msgstr "" + +#: patterns/text-faq.php +msgctxt "Pattern title" +msgid "FAQ" +msgstr "" + +#: patterns/text-faq.php +msgctxt "Pattern description" +msgid "" +"A FAQ section with a large FAQ heading and list of toggle questions and " +"answers." +msgstr "" + +#: patterns/text-faq.php:12 +msgctxt "Name of the FAQ pattern" +msgid "FAQs" +msgstr "" + +#: patterns/text-faq.php:15 +msgctxt "Heading of the FAQs" +msgid "FAQs" +msgstr "" + +#: patterns/text-faq.php:24 +msgctxt "Question in the FAQ pattern" +msgid "What is your process working in smaller projects?" +msgstr "" + +#: patterns/text-faq.php:27 patterns/text-faq.php:38 patterns/text-faq.php:49 +#: patterns/text-faq.php:60 +msgctxt "Answer in the FAQ pattern" +msgid "" +"Études offers comprehensive consulting, management, design, and research " +"solutions. Our vision is to be at the forefront of architectural innovation, " +"fostering a global community of architects and enthusiasts united by a " +"passion for creating spaces. Every architectural endeavor is an opportunity " +"to shape the future." +msgstr "" + +#: patterns/text-faq.php:35 +msgctxt "Question in the FAQ pattern" +msgid "Who is behind Études?" +msgstr "" + +#: patterns/text-faq.php:46 +msgctxt "Question in the FAQ pattern" +msgid "I'd like to get to meet fellow architects, how can I do that?" +msgstr "" + +#: patterns/text-faq.php:57 +msgctxt "Question in the FAQ pattern" +msgid "Can I apply to be a part of the team or work as a contractor?" +msgstr "" + +#: patterns/text-feature-grid-3-col.php +msgctxt "Pattern title" +msgid "Feature grid, 3 columns" +msgstr "" + +#: patterns/text-feature-grid-3-col.php +msgctxt "Pattern description" +msgid "A feature grid of 2 rows and 3 columns with headings and text." +msgstr "" + +#: patterns/text-feature-grid-3-col.php:16 +msgctxt "Heading of the features" +msgid "A passion for creating spaces" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:24 +msgctxt "Sub-heading of the features" +msgid "" +"Our comprehensive suite of professional services caters to a diverse " +"clientele, ranging from homeowners to commercial developers." +msgstr "" + +#: patterns/text-feature-grid-3-col.php:39 +msgctxt "Sample feature heading" +msgid "Renovation and restoration" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:43 +#: patterns/text-feature-grid-3-col.php:55 +#: patterns/text-feature-grid-3-col.php:67 +#: patterns/text-feature-grid-3-col.php:88 +#: patterns/text-feature-grid-3-col.php:100 +msgctxt "Sample feature content" +msgid "" +"Experience the fusion of imagination and expertise with Études Architectural " +"Solutions." +msgstr "" + +#: patterns/text-feature-grid-3-col.php:51 +msgctxt "Sample feature heading" +msgid "Continuous Support" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:63 +msgctxt "Sample feature heading" +msgid "App Access" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:84 +msgctxt "Sample feature heading" +msgid "Consulting" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:96 +msgctxt "Sample feature heading" +msgid "Project Management" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:108 +msgctxt "Sample heading" +msgid "Architectural Solutions" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:112 +msgctxt "Sample content" +msgid "" +"Experience the fusion of imagination and expertise with Études Architectural " +"Solutions." +msgstr "" + +#: patterns/text-project-details.php +msgctxt "Pattern title" +msgid "Project details" +msgstr "" + +#: patterns/text-project-details.php +msgctxt "Pattern description" +msgid "A text only section for project details." +msgstr "" + +#: patterns/text-project-details.php:18 +msgctxt "Title text for the feature area" +msgid "The revitalized art gallery is set to redefine cultural landscape." +msgstr "" + +#: patterns/text-project-details.php:27 +msgctxt "Descriptive title for the feature area" +msgid "" +"With meticulous attention to detail and a commitment to excellence, we " +"create spaces that inspire, elevate, and enrich the lives of those who " +"inhabit them." +msgstr "" + +#: patterns/text-project-details.php:35 patterns/text-project-details.php:43 +msgctxt "Descriptive text for the feature area" +msgid "" +"The revitalized Art Gallery is set to redefine the cultural landscape of " +"Toronto, serving as a nexus of artistic expression, community engagement, " +"and architectural marvel. The expansion and renovation project pay homage to " +"the Art Gallery's rich history while embracing the future, ensuring that the " +"gallery remains a beacon of inspiration." +msgstr "" + +#: patterns/text-title-left-image-right.php +msgctxt "Pattern title" +msgid "Title text and button on left with image on right" +msgstr "" + +#: patterns/text-title-left-image-right.php +msgctxt "Pattern description" +msgid "" +"A title, a paragraph and a CTA button on the left with an image on the right." +msgstr "" + +#: patterns/text-title-left-image-right.php:21 +msgctxt "Headline for the About pattern" +msgid "" +"Études offers comprehensive consulting, management, design, and research " +"solutions. Every architectural endeavor is an opportunity to shape the " +"future." +msgstr "" + +#: patterns/text-title-left-image-right.php:28 +msgctxt "Description for the About pattern" +msgid "Leaving an indelible mark on the landscape of tomorrow." +msgstr "" + +#: patterns/text-title-left-image-right.php:35 +msgctxt "Call to Action button text" +msgid "About us" +msgstr "" + +#: woocommerce/myaccount/form-login.php:91 +msgid "Full name" +msgstr "Nome completo" + +#. translators: %s: URL of the terms and privacy policy page +#: woocommerce/myaccount/form-login.php:124 +#, php-format +msgid "" +"I have read and agree to the Terms of Use and Privacy Policy of LibreSign, including the " +"processing of data for service operation." +msgstr "" + +#: woocommerce/myaccount/form-login.php:169 +#: woocommerce/myaccount/form-login.php:200 +msgid "Entrar" +msgstr "" + +#: woocommerce/myaccount/form-login.php:177 +msgid "E-mail ou usuário" +msgstr "" + +#: woocommerce/myaccount/form-login.php:177 +#: woocommerce/myaccount/form-login.php:184 +#: woocommerce/myaccount/form-login.php:227 +#: woocommerce/myaccount/form-login.php:234 +#: woocommerce/myaccount/form-login.php:241 +msgid "Obrigatório" +msgstr "" + +#: woocommerce/myaccount/form-login.php:184 +#: woocommerce/myaccount/form-login.php:241 +msgid "Senha" +msgstr "" + +#: woocommerce/myaccount/form-login.php:194 +msgid "Lembrar de mim" +msgstr "" + +#: woocommerce/myaccount/form-login.php:204 +msgid "Esqueceu a senha?" +msgstr "" + +#: woocommerce/myaccount/form-login.php:216 +#: woocommerce/myaccount/form-login.php:274 +msgid "Criar conta" +msgstr "" + +#: woocommerce/myaccount/form-login.php:227 +msgid "Nome completo" +msgstr "" + +#: woocommerce/myaccount/form-login.php:234 +msgid "E-mail" +msgstr "" + +#. translators: %s: link to terms and privacy policy page +#: woocommerce/myaccount/form-login.php:260 +#, php-format +msgid "" +"Li e aceito os Termos de Uso e a Política de Privacidade do LibreSign, " +"incluindo o tratamento de dados para operação do serviço." +msgstr "" + +#: theme.json +msgctxt "Custom template name" +msgid "Page No Title" +msgstr "" + +#: theme.json +msgctxt "Custom template name" +msgid "Page with Sidebar" +msgstr "" + +#: theme.json +msgctxt "Custom template name" +msgid "Page with Wide Image" +msgstr "" + +#: theme.json +msgctxt "Custom template name" +msgid "Single with Sidebar" +msgstr "" + +#: theme.json +msgctxt "Duotone name" +msgid "Black and white" +msgstr "" + +#: theme.json +msgctxt "Duotone name" +msgid "Black and sandstone" +msgstr "" + +#: theme.json +msgctxt "Duotone name" +msgid "Black and rust" +msgstr "" + +#: theme.json +msgctxt "Duotone name" +msgid "Black and sage" +msgstr "" + +#: theme.json +msgctxt "Duotone name" +msgid "Black and pastel blue" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical soft beige to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical soft sandstone to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical soft rust to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical soft sage to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical soft mint to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical soft pewter to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical hard beige to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical hard sandstone to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical hard rust to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical hard sage to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical hard mint to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical hard pewter to white" +msgstr "" + +#: theme.json styles/ember.json styles/fossil.json styles/ice.json +#: styles/maelstrom.json styles/mint.json styles/onyx.json styles/rust.json +msgctxt "Color name" +msgid "Base" +msgstr "" + +#: theme.json styles/ember.json styles/fossil.json styles/ice.json +#: styles/maelstrom.json styles/mint.json styles/onyx.json +msgctxt "Color name" +msgid "Base / Two" +msgstr "" + +#: theme.json styles/ember.json styles/fossil.json styles/ice.json +#: styles/maelstrom.json styles/mint.json styles/onyx.json styles/rust.json +msgctxt "Color name" +msgid "Contrast" +msgstr "" + +#: theme.json styles/fossil.json styles/ice.json styles/mint.json +#: styles/onyx.json +msgctxt "Color name" +msgid "Contrast / Two" +msgstr "" + +#: theme.json styles/fossil.json styles/ice.json styles/mint.json +#: styles/onyx.json +msgctxt "Color name" +msgid "Contrast / Three" +msgstr "" + +#: theme.json styles/onyx.json +msgctxt "Color name" +msgid "Accent" +msgstr "" + +#: theme.json styles/onyx.json +msgctxt "Color name" +msgid "Accent / Two" +msgstr "" + +#: theme.json styles/onyx.json +msgctxt "Color name" +msgid "Accent / Three" +msgstr "" + +#: theme.json styles/onyx.json +msgctxt "Color name" +msgid "Accent / Four" +msgstr "" + +#: theme.json styles/onyx.json +msgctxt "Color name" +msgid "Accent / Five" +msgstr "" + +#: theme.json +msgctxt "Space size name" +msgid "1" +msgstr "" + +#: theme.json +msgctxt "Space size name" +msgid "2" +msgstr "" + +#: theme.json +msgctxt "Space size name" +msgid "3" +msgstr "" + +#: theme.json +msgctxt "Space size name" +msgid "4" +msgstr "" + +#: theme.json +msgctxt "Space size name" +msgid "5" +msgstr "" + +#: theme.json +msgctxt "Space size name" +msgid "6" +msgstr "" + +#: theme.json styles/fossil.json styles/ice.json +msgctxt "Font family name" +msgid "Inter" +msgstr "" + +#: theme.json styles/fossil.json styles/maelstrom.json +msgctxt "Font family name" +msgid "Cardo" +msgstr "" + +#: theme.json styles/ember.json styles/fossil.json styles/ice.json +#: styles/maelstrom.json styles/mint.json +msgctxt "Font family name" +msgid "System Sans-serif" +msgstr "" + +#: theme.json styles/ember.json styles/fossil.json styles/ice.json +#: styles/maelstrom.json styles/mint.json +msgctxt "Font family name" +msgid "System Serif" +msgstr "" + +#: theme.json styles/fossil.json styles/ice.json styles/maelstrom.json +msgctxt "Font size name" +msgid "Small" +msgstr "" + +#: theme.json styles/fossil.json styles/ice.json styles/maelstrom.json +msgctxt "Font size name" +msgid "Medium" +msgstr "" + +#: theme.json styles/fossil.json styles/ice.json styles/maelstrom.json +msgctxt "Font size name" +msgid "Large" +msgstr "" + +#: theme.json styles/fossil.json styles/ice.json styles/maelstrom.json +msgctxt "Font size name" +msgid "Extra Large" +msgstr "" + +#: theme.json styles/fossil.json styles/ice.json styles/maelstrom.json +msgctxt "Font size name" +msgid "Extra Extra Large" +msgstr "" + +#: theme.json +msgctxt "Template part name" +msgid "Header" +msgstr "" + +#: theme.json +msgctxt "Template part name" +msgid "Footer" +msgstr "" + +#: theme.json +msgctxt "Template part name" +msgid "Sidebar" +msgstr "" + +#: theme.json +msgctxt "Template part name" +msgid "Post Meta" +msgstr "" + +#: styles/ember.json +msgctxt "Style variation name" +msgid "Ember" +msgstr "" + +#: styles/ember.json +msgctxt "Duotone name" +msgid "Orange and white" +msgstr "" + +#: styles/ember.json styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical linen to beige" +msgstr "" + +#: styles/ember.json styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical taupe to beige" +msgstr "" + +#: styles/ember.json styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical sable to beige" +msgstr "" + +#: styles/ember.json styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical ebony to beige" +msgstr "" + +#: styles/ember.json styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical ebony to sable" +msgstr "" + +#: styles/ember.json styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical hard beige to linen" +msgstr "" + +#: styles/ember.json styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical hard taupe to beige" +msgstr "" + +#: styles/ember.json styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical hard sable to beige" +msgstr "" + +#: styles/ember.json styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical hard ebony to beige" +msgstr "" + +#: styles/ember.json styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical hard sable to taupe" +msgstr "" + +#: styles/ember.json styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical hard ebony to sable" +msgstr "" + +#: styles/ember.json styles/maelstrom.json +msgctxt "Color name" +msgid "Contrast / 2" +msgstr "" + +#: styles/ember.json styles/mint.json +msgctxt "Font family name" +msgid "Instrument Sans" +msgstr "" + +#: styles/ember.json styles/ice.json styles/maelstrom.json styles/mint.json +msgctxt "Font family name" +msgid "Jost" +msgstr "" + +#: styles/fossil.json +msgctxt "Style variation name" +msgid "Fossil" +msgstr "" + +#: styles/ice.json +msgctxt "Style variation name" +msgid "Ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical azure to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical slate to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical ocean to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical ink to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical ocean to slate" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical ink to ocean" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical hard ice to azure" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical hard slate to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical hard ocean to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical hard ink to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical hard ocean to slate" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical hard ink to ocean" +msgstr "" + +#: styles/maelstrom.json +msgctxt "Style variation name" +msgid "Maelstrom" +msgstr "" + +#: styles/maelstrom.json +msgctxt "Color name" +msgid "Contrast / 3" +msgstr "" + +#: styles/mint.json +msgctxt "Style variation name" +msgid "Mint" +msgstr "" + +#: styles/onyx.json +msgctxt "Style variation name" +msgid "Onyx" +msgstr "" + +#: styles/onyx.json +msgctxt "Duotone name" +msgid "Dark gray and white" +msgstr "" + +#: styles/onyx.json +msgctxt "Duotone name" +msgid "Dark gray and walnut" +msgstr "" + +#: styles/onyx.json +msgctxt "Duotone name" +msgid "Dark gray and cinnamon" +msgstr "" + +#: styles/onyx.json +msgctxt "Duotone name" +msgid "Dark gray and olive" +msgstr "" + +#: styles/onyx.json +msgctxt "Duotone name" +msgid "Dark gray and steel" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical soft driftwood to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical soft walnut to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical soft cinnamon to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical soft olive to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical soft steel to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical soft pewter to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical hard beige to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical hard walnut to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical hard cinnamon to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical hard olive to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical hard steel to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical hard pewter to dark gray" +msgstr "" + +#: styles/rust.json +msgctxt "Style variation name" +msgid "Rust" +msgstr "" + +#: styles/rust.json +msgctxt "Duotone name" +msgid "Dark rust to beige" +msgstr "" + +#: styles/rust.json +msgctxt "Gradient name" +msgid "Vertical transparent rust to beige" +msgstr "" + +#: styles/rust.json +msgctxt "Gradient name" +msgid "Vertical hard transparent rust to beige" +msgstr "" + +#: styles/rust.json +msgctxt "Gradient name" +msgid "Vertical rust to beige" +msgstr "" + +#: styles/rust.json +msgctxt "Gradient name" +msgid "Vertical hard rust to beige" +msgstr "" + +#: styles/rust.json +msgctxt "Color name" +msgid "Base / 2" +msgstr "" diff --git a/languages/libresign.pot b/languages/libresign.pot new file mode 100644 index 0000000..7ba82fb --- /dev/null +++ b/languages/libresign.pot @@ -0,0 +1,2110 @@ +# Copyright (C) 2026 LibreCode +# This file is distributed under the GNU General Public License v2 or later. +msgid "" +msgstr "" +"Project-Id-Version: libresign 1.0\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/theme/libresign\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"POT-Creation-Date: 2026-07-14T17:37:40+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"X-Generator: WP-CLI 2.12.0\n" +"X-Domain: libresign\n" + +#. Theme Name of the theme +#: style.css +msgid "libresign" +msgstr "" + +#. Description of the theme +#: style.css +msgid "Nosso tema" +msgstr "" + +#. Author of the theme +#: style.css +msgid "LibreCode" +msgstr "" + +#: functions.php:37 +msgid "Arrow icon" +msgstr "" + +#: functions.php:60 +msgid "Pill" +msgstr "" + +#: functions.php:83 +msgid "Checkmark" +msgstr "" + +#: functions.php:102 +msgid "With arrow" +msgstr "" + +#: functions.php:120 +msgid "With asterisk" +msgstr "" + +#: functions.php:208 +msgctxt "Block pattern category" +msgid "Pages" +msgstr "" + +#: functions.php:209 +msgid "A collection of full page layouts." +msgstr "" + +#: functions.php:335 +msgid "Access" +msgstr "" + +#: functions.php:336 +msgid "Reset password" +msgstr "" + +#: functions.php:337 +msgid "Enter your email or username to receive a password reset link." +msgstr "" + +#: functions.php:341 +msgid "Create free workspace" +msgstr "" + +#: functions.php:342 +msgid "Back to sign in" +msgstr "" + +#: functions.php:347 +msgid "LibreSign access" +msgstr "" + +#: functions.php:348 +msgid "Sign in" +msgstr "" + +#: functions.php:349 +#: functions.php:355 +msgid "Forgot password" +msgstr "" + +#: functions.php:356 +#: functions.php:376 +msgid "Send reset link" +msgstr "" + +#: functions.php:357 +msgid "If your account exists, we will send you an email with the next step." +msgstr "" + +#: functions.php:368 +msgid "Email or username" +msgstr "" + +#: functions.php:492 +msgid "Please enter your full name." +msgstr "" + +#: functions.php:496 +msgid "Please enter a valid email address." +msgstr "" + +#: functions.php:500 +msgid "Please enter a password." +msgstr "" + +#: functions.php:506 +msgid "You must accept the terms to create your workspace." +msgstr "" + +#. translators: %s: policy page link +#: functions.php:621 +#, php-format +msgid "I agree to the policies and privacy policy." +msgstr "" + +#: functions.php:643 +msgid "Please confirm that you agree with the policies before creating an account." +msgstr "" + +#: functions.php:723 +msgid "CPF or CNPJ" +msgstr "" + +#: functions.php:729 +msgid "Required for customers in Brazil" +msgstr "" + +#: functions.php:748 +msgid "Please enter your CPF or CNPJ for tax invoice issuance." +msgstr "" + +#. translators: %s: policy page link +#: functions.php:761 +#, php-format +msgid "I agree to the %s before placing the order." +msgstr "" + +#: functions.php:765 +msgid "terms and privacy policy" +msgstr "" + +#: functions.php:778 +msgid "You must agree to the policies before completing the purchase." +msgstr "" + +#: functions.php:804 +msgid "Entre para continuar com a compra." +msgstr "" + +#: functions.php:893 +msgid "Contratar" +msgstr "" + +#. translators: 1: HTTP status code, 2: requested URL. +#: inc/footer-fragment.php:172 +#, php-format +msgid "Unexpected HTTP status %1$d while fetching %2$s." +msgstr "" + +#: inc/footer-fragment.php:218 +msgid "Fragment HTML is missing the expected CSS/JS references." +msgstr "" + +#: inc/footer-fragment.php:335 +msgid "A static site origin is required to synchronize fragments." +msgstr "" + +#. translators: %s: fragment type. +#: inc/footer-fragment.php:459 +#, php-format +msgid "Unable to create local storage for the %s fragment." +msgstr "" + +#: inc/github-site-webhook.php:30 +msgid "Site fragment integration" +msgstr "" + +#. translators: %s: REST webhook endpoint URL. +#: inc/github-site-webhook.php:34 +#, php-format +msgid "Sync shared header and footer fragments after the GitHub production deploy finishes. Configure the repository webhook to post to %s using the workflow_run event." +msgstr "" + +#: inc/github-site-webhook.php:52 +msgid "GitHub webhook secret" +msgstr "" + +#: inc/github-site-webhook.php:55 +msgid "Use the same shared secret in the GitHub repository webhook and in this theme setting." +msgstr "" + +#: inc/github-site-webhook.php:71 +msgid "Static site origin" +msgstr "" + +#: inc/github-site-webhook.php:74 +msgid "Production URL used to fetch /fragments/header and /fragments/footer after a successful deploy." +msgstr "" + +#: inc/github-site-webhook.php:90 +msgid "GitHub repository" +msgstr "" + +#: inc/github-site-webhook.php:93 +msgid "Expected repository full name for incoming workflow_run deliveries." +msgstr "" + +#: inc/github-site-webhook.php:109 +msgid "Monitored workflow name" +msgstr "" + +#: inc/github-site-webhook.php:112 +msgid "Exact GitHub Actions workflow name that represents the production deploy." +msgstr "" + +#: inc/github-site-webhook.php:128 +msgid "Monitored branch name" +msgstr "" + +#: inc/github-site-webhook.php:131 +msgid "Expected branch name for the monitored workflow (e.g. gh-pages for pages build and deployment)." +msgstr "" + +#: inc/github-site-webhook.php:426 +msgid "The GitHub webhook secret is not configured." +msgstr "" + +#: inc/github-site-webhook.php:435 +msgid "The webhook request does not look like a GitHub delivery." +msgstr "" + +#: inc/github-site-webhook.php:445 +msgid "Invalid GitHub webhook signature." +msgstr "" + +#: inc/github-site-webhook.php:473 +msgid "The GitHub webhook payload must be valid JSON." +msgstr "" + +#: patterns/banner-hero.php +msgctxt "Pattern title" +msgid "Hero" +msgstr "" + +#: patterns/banner-hero.php +msgctxt "Pattern description" +msgid "A hero section with a title, a paragraph, a CTA button, and an image." +msgstr "" + +#: patterns/banner-hero.php:18 +msgctxt "Heading of the hero section" +msgid "A commitment to innovation and sustainability" +msgstr "" + +#: patterns/banner-hero.php:26 +msgctxt "Content of the hero section" +msgid "Études is a pioneering firm that seamlessly merges creativity and functionality to redefine architectural excellence." +msgstr "" + +#: patterns/banner-hero.php:37 +msgctxt "Button text of the hero section" +msgid "About us" +msgstr "" + +#: patterns/banner-hero.php:52 +msgid "Building exterior in Toronto, Canada" +msgstr "" + +#: patterns/banner-project-description.php +msgctxt "Pattern title" +msgid "Project description" +msgstr "" + +#: patterns/banner-project-description.php +msgctxt "Pattern description" +msgid "Project description section with title, paragraph, and an image." +msgstr "" + +#: patterns/banner-project-description.php:17 +msgctxt "Sample title for a project or post" +msgid "Art Gallery — Overview" +msgstr "" + +#: patterns/banner-project-description.php:26 +msgctxt "Sample descriptive text for a project or post." +msgid "This transformative project seeks to enhance the gallery's infrastructure, accessibility, and exhibition spaces while preserving its rich cultural heritage." +msgstr "" + +#: patterns/banner-project-description.php:41 +msgid "Hyatt Regency San Francisco, San Francisco, United States" +msgstr "" + +#: patterns/cta-content-image-on-right.php +msgctxt "Pattern title" +msgid "Call to action with image on right" +msgstr "" + +#: patterns/cta-content-image-on-right.php +msgctxt "Pattern description" +msgid "A title, paragraph, two CTA buttons, and an image for a general CTA section." +msgstr "" + +#: patterns/cta-content-image-on-right.php:18 +msgctxt "Sample heading" +msgid "Enhance your architectural journey with the Études Architect app." +msgstr "" + +#: patterns/cta-content-image-on-right.php:24 +#: patterns/text-alternating-images.php:44 +msgctxt "Sample list item" +msgid "Collaborate with fellow architects." +msgstr "" + +#: patterns/cta-content-image-on-right.php:28 +#: patterns/text-alternating-images.php:48 +msgctxt "Sample list item" +msgid "Showcase your projects." +msgstr "" + +#: patterns/cta-content-image-on-right.php:32 +#: patterns/text-alternating-images.php:52 +msgctxt "Sample list item" +msgid "Experience the world of architecture." +msgstr "" + +#: patterns/cta-content-image-on-right.php:41 +msgctxt "Button text of this section" +msgid "Download app" +msgstr "" + +#: patterns/cta-content-image-on-right.php:47 +msgctxt "Button text of this section" +msgid "How it works" +msgstr "" + +#: patterns/cta-content-image-on-right.php:59 +#: patterns/cta-services-image-left.php:19 +msgid "White abstract geometric artwork from Dresden, Germany" +msgstr "" + +#: patterns/cta-pricing.php +msgctxt "Pattern title" +msgid "Pricing" +msgstr "" + +#: patterns/cta-pricing.php +msgctxt "Pattern description" +msgid "A pricing section with a title, a paragraph and three pricing levels." +msgstr "" + +#: patterns/cta-pricing.php:11 +msgctxt "Name for the pricing pattern" +msgid "Pricing Table" +msgstr "" + +#: patterns/cta-pricing.php:18 +msgctxt "Sample heading for pricing pattern" +msgid "Our Services" +msgstr "" + +#: patterns/cta-pricing.php:22 +msgctxt "Sample description for a pricing table" +msgid "We offer flexible options, which you can adapt to the different needs of each project." +msgstr "" + +#: patterns/cta-pricing.php:37 +msgctxt "Sample heading for the first pricing level" +msgid "Free" +msgstr "" + +#: patterns/cta-pricing.php:42 +msgctxt "Sample price for the first pricing level" +msgid "$0" +msgstr "" + +#: patterns/cta-pricing.php:53 +msgctxt "Feature for pricing level" +msgid "Access to 5 exclusive Études Articles per month." +msgstr "" + +#: patterns/cta-pricing.php:62 +#: patterns/cta-pricing.php:123 +#: patterns/cta-pricing.php:181 +msgctxt "Feature for pricing level" +msgid "Weekly print edition." +msgstr "" + +#: patterns/cta-pricing.php:72 +#: patterns/cta-pricing.php:131 +msgctxt "Feature for pricing level" +msgid "Exclusive access to the Études app for iOS and Android." +msgstr "" + +#: patterns/cta-pricing.php:87 +msgctxt "Button text for the first pricing level" +msgid "Subscribe" +msgstr "" + +#: patterns/cta-pricing.php:99 +msgctxt "Sample heading for the second pricing level" +msgid "Connoisseur" +msgstr "" + +#: patterns/cta-pricing.php:104 +msgctxt "Sample price for the second pricing level" +msgid "$12" +msgstr "" + +#: patterns/cta-pricing.php:115 +msgctxt "Feature for pricing level" +msgid "Access to 20 exclusive Études Articles per month." +msgstr "" + +#: patterns/cta-pricing.php:145 +msgctxt "Button text for the second pricing level" +msgid "Subscribe" +msgstr "" + +#: patterns/cta-pricing.php:157 +msgctxt "Sample heading for the third pricing level" +msgid "Expert" +msgstr "" + +#: patterns/cta-pricing.php:162 +msgctxt "Sample price for the third pricing level" +msgid "$28" +msgstr "" + +#: patterns/cta-pricing.php:173 +msgctxt "Feature for pricing level" +msgid "Exclusive, unlimited access to Études Articles." +msgstr "" + +#: patterns/cta-pricing.php:189 +msgctxt "Feature for pricing level" +msgid "Exclusive access to the Études app for iOS and Android" +msgstr "" + +#: patterns/cta-pricing.php:203 +msgctxt "Button text for the third pricing level" +msgid "Subscribe" +msgstr "" + +#: patterns/cta-rsvp.php +msgctxt "Pattern title" +msgid "RSVP" +msgstr "" + +#: patterns/cta-rsvp.php +#: patterns/page-rsvp-landing.php +msgctxt "Pattern description" +msgid "A large RSVP heading sideways, a description, and a CTA button." +msgstr "" + +#: patterns/cta-rsvp.php:11 +msgctxt "Name of RSVP pattern" +msgid "RSVP" +msgstr "" + +#: patterns/cta-rsvp.php:21 +#: patterns/page-rsvp-landing.php:23 +msgctxt "Initials for ´please respond´" +msgid "RSVP" +msgstr "" + +#: patterns/cta-rsvp.php:27 +#: patterns/page-rsvp-landing.php:28 +msgctxt "RSVP call to action description" +msgid "Experience the fusion of imagination and expertise with Études Arch Summit, February 2025." +msgstr "" + +#: patterns/cta-rsvp.php:34 +#: patterns/page-rsvp-landing.php:34 +msgctxt "Call to action button text for the reservation button" +msgid "Reserve your spot" +msgstr "" + +#: patterns/cta-rsvp.php:50 +#: patterns/text-title-left-image-right.php:51 +msgid "A ramp along a curved wall in the Kiasma Museu, Helsinki, Finland" +msgstr "" + +#: patterns/cta-services-image-left.php +msgctxt "Pattern title" +msgid "Services call to action with image on left" +msgstr "" + +#: patterns/cta-services-image-left.php +msgctxt "Pattern description" +msgid "An image, title, paragraph and a CTA button to describe services." +msgstr "" + +#: patterns/cta-services-image-left.php:28 +msgctxt "Sample heading of the services pattern" +msgid "Guiding your business through the project" +msgstr "" + +#: patterns/cta-services-image-left.php:32 +msgctxt "Sample description of the services pattern" +msgid "Experience the fusion of imagination and expertise with Études—the catalyst for architectural transformations that enrich the world around us." +msgstr "" + +#: patterns/cta-services-image-left.php:39 +msgctxt "Sample button text to view the services" +msgid "Our services" +msgstr "" + +#: patterns/cta-subscribe-centered.php +msgctxt "Pattern title" +msgid "Centered call to action" +msgstr "" + +#: patterns/cta-subscribe-centered.php +msgctxt "Pattern description" +msgid "Subscribers CTA section with a title, a paragraph and a CTA button." +msgstr "" + +#: patterns/cta-subscribe-centered.php:20 +msgctxt "Sample text for Subscriber Heading with numbers" +msgid "Join 900+ subscribers" +msgstr "" + +#: patterns/cta-subscribe-centered.php:24 +msgctxt "Sample text for Subscriber Description" +msgid "Stay in the loop with everything you need to know." +msgstr "" + +#: patterns/cta-subscribe-centered.php:31 +msgctxt "Sample text for Sign Up Button" +msgid "Sign up" +msgstr "" + +#: patterns/footer-centered-logo-nav.php +msgctxt "Pattern title" +msgid "Footer with centered logo and navigation" +msgstr "" + +#: patterns/footer-centered-logo-nav.php +msgctxt "Pattern description" +msgid "A footer section with a centered logo, navigation, and WordPress credits." +msgstr "" + +#. Translators: WordPress link. +#: patterns/footer-centered-logo-nav.php:22 +#: patterns/footer-colophon-3-col.php:91 +#: patterns/footer.php:117 +msgid "https://wordpress.org" +msgstr "" + +#. Translators: Designed with WordPress +#: patterns/footer-centered-logo-nav.php:25 +#: patterns/footer-colophon-3-col.php:94 +#: patterns/footer.php:120 +#, php-format +msgid "Designed with %1$s" +msgstr "" + +#: patterns/footer-colophon-3-col.php +msgctxt "Pattern title" +msgid "Footer with colophon, 3 columns" +msgstr "" + +#: patterns/footer-colophon-3-col.php +msgctxt "Pattern description" +msgid "A footer section with a colophon and 3 columns." +msgstr "" + +#: patterns/footer-colophon-3-col.php:30 +msgid "Keep up, get in touch." +msgstr "" + +#: patterns/footer-colophon-3-col.php:39 +msgid "Contact" +msgstr "" + +#: patterns/footer-colophon-3-col.php:42 +msgctxt "Example email in site footer" +msgid "info@example.com" +msgstr "" + +#: patterns/footer-colophon-3-col.php:57 +msgid "Follow" +msgstr "" + +#: patterns/footer-colophon-3-col.php:60 +#: patterns/footer.php:95 +msgid "Instagram" +msgstr "" + +#: patterns/footer-colophon-3-col.php:60 +#: patterns/footer.php:94 +msgid "Facebook" +msgstr "" + +#: patterns/footer-colophon-3-col.php:82 +msgid "©" +msgstr "" + +#: patterns/footer.php +msgctxt "Pattern title" +msgid "Footer with colophon, 4 columns" +msgstr "" + +#: patterns/footer.php +msgctxt "Pattern description" +msgid "A footer section with a colophon and 4 columns." +msgstr "" + +#: patterns/footer.php:41 +#: patterns/footer.php:47 +msgid "About" +msgstr "" + +#: patterns/footer.php:49 +msgid "Team" +msgstr "" + +#: patterns/footer.php:50 +msgid "History" +msgstr "" + +#: patterns/footer.php:51 +msgid "Careers" +msgstr "" + +#: patterns/footer.php:64 +#: patterns/footer.php:70 +msgid "Privacy" +msgstr "" + +#: patterns/footer.php:72 +msgid "Privacy Policy" +msgstr "" + +#: patterns/footer.php:73 +msgid "Terms and Conditions" +msgstr "" + +#: patterns/footer.php:74 +msgid "Contact Us" +msgstr "" + +#: patterns/footer.php:86 +msgid "Social" +msgstr "" + +#: patterns/footer.php:92 +msgid "Social Media" +msgstr "" + +#: patterns/footer.php:96 +msgid "Twitter/X" +msgstr "" + +#: patterns/gallery-full-screen-image.php +msgctxt "Pattern title" +msgid "Full screen image" +msgstr "" + +#: patterns/gallery-full-screen-image.php +msgctxt "Pattern description" +msgid "A cover image section that covers the entire width." +msgstr "" + +#: patterns/gallery-offset-images-grid-2-col.php +msgctxt "Pattern title" +msgid "Offset gallery, 2 columns" +msgstr "" + +#: patterns/gallery-offset-images-grid-2-col.php +msgctxt "Pattern description" +msgid "A gallery section with 2 columns and offset images." +msgstr "" + +#: patterns/gallery-offset-images-grid-3-col.php +msgctxt "Pattern title" +msgid "Offset gallery, 3 columns" +msgstr "" + +#: patterns/gallery-offset-images-grid-3-col.php +msgctxt "Pattern description" +msgid "A gallery section with 3 columns and offset images." +msgstr "" + +#: patterns/gallery-offset-images-grid-4-col.php +msgctxt "Pattern title" +msgid "Offset gallery, 4 columns" +msgstr "" + +#: patterns/gallery-offset-images-grid-4-col.php +msgctxt "Pattern description" +msgid "A gallery section with 4 columns and offset images." +msgstr "" + +#: patterns/gallery-project-layout.php +msgctxt "Pattern title" +msgid "Project layout" +msgstr "" + +#: patterns/gallery-project-layout.php +msgctxt "Pattern description" +msgid "A gallery section with a project layout with 2 images." +msgstr "" + +#: patterns/gallery-project-layout.php:21 +msgid "An empty staircase under an angular roof in Darling Harbour, Sydney, Australia" +msgstr "" + +#: patterns/gallery-project-layout.php:26 +msgctxt "Sample text for the feature area" +msgid "1. Through Études, we aspire to redefine architectural boundaries and usher in a new era of design excellence that leaves an indelible mark on the built environment." +msgstr "" + +#: patterns/gallery-project-layout.php:38 +msgctxt "Sample text for the feature area" +msgid "Our comprehensive suite of professional services caters to a diverse clientele, ranging from homeowners to commercial developers. With a commitment to innovation and sustainability, Études is the bridge that transforms architectural dreams into remarkable built realities." +msgstr "" + +#: patterns/gallery-project-layout.php:49 +msgctxt "Sample text for the feature area" +msgid "2. Case studies that celebrate the artistry can fuel curiosity and ignite inspiration." +msgstr "" + +#: patterns/gallery-project-layout.php:54 +msgid "Art Gallery of Ontario, Toronto, Canada" +msgstr "" + +#: patterns/hidden-404.php +msgctxt "Pattern title" +msgid "404" +msgstr "" + +#: patterns/hidden-404.php:10 +msgctxt "Heading for a webpage that is not found" +msgid "Page Not Found" +msgstr "" + +#: patterns/hidden-404.php:13 +msgctxt "Message to convey that a webpage could not be found" +msgid "The page you are looking for does not exist, or it has been moved. Please try searching using the form below." +msgstr "" + +#: patterns/hidden-comments.php +msgctxt "Pattern title" +msgid "Comments" +msgstr "" + +#: patterns/hidden-comments.php:12 +msgid "Comments" +msgstr "" + +#: patterns/hidden-no-results.php +msgctxt "Pattern title" +msgid "No results" +msgstr "" + +#: patterns/hidden-no-results.php:9 +msgctxt "Message explaining that there are no results returned from a search" +msgid "No posts were found." +msgstr "" + +#: patterns/hidden-portfolio-hero.php +msgctxt "Pattern title" +msgid "Portfolio hero" +msgstr "" + +#: patterns/hidden-portfolio-hero.php:16 +msgid "I’m Leia Acosta, a passionate photographer who finds inspiration in capturing the fleeting beauty of life." +msgstr "" + +#: patterns/hidden-post-meta.php +msgctxt "Pattern title" +msgid "Post meta" +msgstr "" + +#: patterns/hidden-post-meta.php:20 +msgctxt "Prefix for the post author block: By author name" +msgid "by" +msgstr "" + +#: patterns/hidden-post-meta.php:25 +msgctxt "Prefix for the post category block: in category name" +msgid "in " +msgstr "" + +#: patterns/hidden-post-navigation.php +msgctxt "Pattern title" +msgid "Post navigation" +msgstr "" + +#: patterns/hidden-post-navigation.php:9 +#: patterns/hidden-post-navigation.php:10 +#: patterns/template-index-portfolio.php:16 +msgid "Posts" +msgstr "" + +#: patterns/hidden-post-navigation.php:11 +msgctxt "Label before the title of the previous post. There is a space after the colon." +msgid "Previous: " +msgstr "" + +#: patterns/hidden-post-navigation.php:12 +msgctxt "Label before the title of the next post. There is a space after the colon." +msgid "Next: " +msgstr "" + +#: patterns/hidden-search.php +msgctxt "Pattern title" +msgid "Search" +msgstr "" + +#: patterns/hidden-search.php:9 +#: patterns/hidden-sidebar.php:75 +msgctxt "search form label" +msgid "Search" +msgstr "" + +#: patterns/hidden-search.php:9 +msgctxt "search button text" +msgid "Search" +msgstr "" + +#: patterns/hidden-sidebar.php +msgctxt "Pattern title" +msgid "Sidebar" +msgstr "" + +#: patterns/hidden-sidebar.php:17 +msgid "About the author" +msgstr "" + +#: patterns/hidden-sidebar.php:33 +msgid "Popular Categories" +msgstr "" + +#: patterns/hidden-sidebar.php:49 +msgid "Useful Links" +msgstr "" + +#: patterns/hidden-sidebar.php:53 +msgid "Links I found useful and wanted to share." +msgstr "" + +#: patterns/hidden-sidebar.php:59 +msgid "Latest inflation report" +msgstr "" + +#: patterns/hidden-sidebar.php:60 +msgid "Financial apps for families" +msgstr "" + +#: patterns/hidden-sidebar.php:72 +msgid "Search the website" +msgstr "" + +#: patterns/hidden-sidebar.php:75 +msgctxt "search form placeholder" +msgid "Search..." +msgstr "" + +#: patterns/page-about-business.php +msgctxt "Pattern title" +msgid "About" +msgstr "" + +#: patterns/page-about-business.php +msgctxt "Pattern description" +msgid "A business about page with a hero section, a text section, a services section, a team section, a clients section, a FAQ section, and a CTA section." +msgstr "" + +#: patterns/page-home-blogging.php +msgctxt "Pattern title" +msgid "Blogging home" +msgstr "" + +#: patterns/page-home-blogging.php +msgctxt "Pattern description" +msgid "A blogging home page with a hero section, a text section, a blog section, and a CTA section." +msgstr "" + +#: patterns/page-home-business.php +msgctxt "Pattern title" +msgid "Business home" +msgstr "" + +#: patterns/page-home-business.php +msgctxt "Pattern description" +msgid "A business home page with a hero section, a text section, a services section, a team section, a clients section, a FAQ section, and a CTA section." +msgstr "" + +#: patterns/page-home-portfolio-gallery.php +msgctxt "Pattern title" +msgid "Portfolio home image gallery" +msgstr "" + +#: patterns/page-home-portfolio-gallery.php +msgctxt "Pattern description" +msgid "A porfolio home page that features a gallery." +msgstr "" + +#: patterns/page-home-portfolio.php +msgctxt "Pattern title" +msgid "Portfolio home with post featured images" +msgstr "" + +#: patterns/page-home-portfolio.php +msgctxt "Pattern description" +msgid "A portfolio home page with a description and a 4-column post section with only feature images." +msgstr "" + +#: patterns/page-newsletter-landing.php +msgctxt "Pattern title" +msgid "Newsletter landing" +msgstr "" + +#: patterns/page-newsletter-landing.php +msgctxt "Pattern description" +msgid "A block with a newsletter subscription CTA for a landing page." +msgstr "" + +#: patterns/page-newsletter-landing.php:29 +msgctxt "sample content for newsletter subscription" +msgid "Subscribe to the newsletter and stay connected with our community" +msgstr "" + +#: patterns/page-newsletter-landing.php:40 +msgctxt "Sample content for newsletter subscribe button" +msgid "Sign up" +msgstr "" + +#: patterns/page-portfolio-overview.php +msgctxt "Pattern title" +msgid "Portfolio project overview" +msgstr "" + +#: patterns/page-portfolio-overview.php +msgctxt "Pattern description" +msgid "A full portfolio page with a section for project description, project details, a full screen image, and a gallery section with two images." +msgstr "" + +#: patterns/page-rsvp-landing.php +msgctxt "Pattern title" +msgid "RSVP landing" +msgstr "" + +#: patterns/page-rsvp-landing.php:14 +msgctxt "Name of RSVP landing page pattern" +msgid "RSVP Landing Page" +msgstr "" + +#: patterns/page-rsvp-landing.php:49 +msgid "Green staircase at Western University, London, Canada" +msgstr "" + +#: patterns/posts-1-col.php +msgctxt "Pattern title" +msgid "List of posts, 1 column" +msgstr "" + +#: patterns/posts-1-col.php +msgctxt "Pattern description" +msgid "A list of posts, 1 column." +msgstr "" + +#: patterns/posts-3-col.php +msgctxt "Pattern title" +msgid "List of posts, 3 columns" +msgstr "" + +#: patterns/posts-3-col.php +msgctxt "Pattern description" +msgid "A list of posts, 3 columns." +msgstr "" + +#: patterns/posts-grid-2-col.php +msgctxt "Pattern title" +msgid "Grid of posts featuring the first post, 2 columns" +msgstr "" + +#: patterns/posts-grid-2-col.php +msgctxt "Pattern description" +msgid "A grid of posts featuring the first post, 2 columns." +msgstr "" + +#: patterns/posts-grid-2-col.php:14 +#: patterns/posts-list.php:14 +#: patterns/template-index-blogging.php:16 +msgid "Watch, Read, Listen" +msgstr "" + +#: patterns/posts-images-only-3-col.php +msgctxt "Pattern title" +msgid "Posts with featured images only, 3 columns" +msgstr "" + +#: patterns/posts-images-only-3-col.php +msgctxt "Pattern description" +msgid "A list of posts with featured images only, 3 columns." +msgstr "" + +#: patterns/posts-images-only-offset-4-col.php +msgctxt "Pattern title" +msgid "Offset posts with featured images only, 4 columns" +msgstr "" + +#: patterns/posts-images-only-offset-4-col.php +msgctxt "Pattern description" +msgid "A list of posts with featured images only, 4 columns." +msgstr "" + +#: patterns/posts-list.php +msgctxt "Pattern title" +msgid "List of posts without images, 1 column" +msgstr "" + +#: patterns/posts-list.php +msgctxt "Pattern description" +msgid "A list of posts without images, 1 column." +msgstr "" + +#: patterns/team-4-col.php +msgctxt "Pattern title" +msgid "Team members, 4 columns" +msgstr "" + +#: patterns/team-4-col.php +msgctxt "Pattern description" +msgid "A team section, with a heading, a paragraph, and 4 columns for team members." +msgstr "" + +#: patterns/team-4-col.php:11 +msgctxt "Name of team pattern" +msgid "Team members" +msgstr "" + +#: patterns/team-4-col.php:16 +msgctxt "Sample heading for the team pattern" +msgid "Meet our team" +msgstr "" + +#: patterns/team-4-col.php:20 +msgctxt "Sample descriptive text of the team pattern" +msgid "Our comprehensive suite of professionals caters to a diverse team, ranging from seasoned architects to renowned engineers." +msgstr "" + +#: patterns/team-4-col.php:44 +msgctxt "Sample name of a team member" +msgid "Francesca Piovani" +msgstr "" + +#: patterns/team-4-col.php:49 +msgctxt "Sample role of a team member" +msgid "Founder, CEO & Architect" +msgstr "" + +#: patterns/team-4-col.php:68 +msgctxt "Sample name of a team member" +msgid "Rhye Moore" +msgstr "" + +#: patterns/team-4-col.php:73 +msgctxt "Sample role of a team member" +msgid "Engineering Manager" +msgstr "" + +#: patterns/team-4-col.php:92 +msgctxt "Sample name of a team member" +msgid "Helga Steiner" +msgstr "" + +#: patterns/team-4-col.php:97 +msgctxt "Sample role of a team member" +msgid "Architect" +msgstr "" + +#: patterns/team-4-col.php:116 +msgctxt "Sample name of a team member" +msgid "Ivan Lawrence" +msgstr "" + +#: patterns/team-4-col.php:121 +msgctxt "Sample role of a team member" +msgid "Project Manager" +msgstr "" + +#: patterns/template-archive-blogging.php +msgctxt "Pattern title" +msgid "Blogging archive template" +msgstr "" + +#: patterns/template-archive-portfolio.php +msgctxt "Pattern title" +msgid "Portfolio archive template" +msgstr "" + +#: patterns/template-home-blogging.php +msgctxt "Pattern title" +msgid "Blogging home template" +msgstr "" + +#: patterns/template-home-business.php +msgctxt "Pattern title" +msgid "Business home template" +msgstr "" + +#: patterns/template-home-portfolio.php +msgctxt "Pattern title" +msgid "Portfolio home template with post featured images" +msgstr "" + +#: patterns/template-index-blogging.php +msgctxt "Pattern title" +msgid "Blogging index template" +msgstr "" + +#: patterns/template-index-portfolio.php +msgctxt "Pattern title" +msgid "Portfolio index template" +msgstr "" + +#: patterns/template-search-blogging.php +msgctxt "Pattern title" +msgid "Blogging search template" +msgstr "" + +#: patterns/template-search-portfolio.php +msgctxt "Pattern title" +msgid "Portfolio search template" +msgstr "" + +#: patterns/template-single-portfolio.php +msgctxt "Pattern title" +msgid "Portfolio single post template" +msgstr "" + +#: patterns/testimonial-centered.php +msgctxt "Pattern title" +msgid "Centered testimonial" +msgstr "" + +#: patterns/testimonial-centered.php +msgctxt "Pattern description" +msgid "A centered testimonial section with a avatar, name, and job title." +msgstr "" + +#: patterns/testimonial-centered.php:12 +msgctxt "Name of testimonial pattern" +msgid "Testimonial" +msgstr "" + +#: patterns/testimonial-centered.php:18 +msgctxt "Testimonial Text or Review Text Got From the Person" +msgid "“Études has saved us thousands of hours of work and has unlocked insights we never thought possible.”" +msgstr "" + +#: patterns/testimonial-centered.php:26 +msgctxt "Name of testimonial citation group" +msgid "Testimonial source" +msgstr "" + +#: patterns/testimonial-centered.php:35 +msgctxt "Name of Person Provided the Testimonial" +msgid "Annie Steiner" +msgstr "" + +#: patterns/testimonial-centered.php:39 +msgctxt "Designation of Person Provided Testimonial" +msgid "CEO, Greenprint" +msgstr "" + +#: patterns/text-alternating-images.php +msgctxt "Pattern title" +msgid "Text with alternating images" +msgstr "" + +#: patterns/text-alternating-images.php +msgctxt "Pattern description" +msgid "A text section, then a two column section with text in one and image in another." +msgstr "" + +#: patterns/text-alternating-images.php:19 +msgctxt "Sample heading content" +msgid "An array of resources" +msgstr "" + +#: patterns/text-alternating-images.php:23 +msgctxt "Sample subheading content" +msgid "Our comprehensive suite of professional services caters to a diverse clientele, ranging from homeowners to commercial developers." +msgstr "" + +#: patterns/text-alternating-images.php:37 +msgctxt "Sample list heading" +msgid "Études Architect App" +msgstr "" + +#: patterns/text-alternating-images.php:64 +msgid "Tourist taking photo of a building" +msgstr "" + +#: patterns/text-alternating-images.php:82 +msgid "Windows of a building in Nuremberg, Germany" +msgstr "" + +#: patterns/text-alternating-images.php:91 +msgctxt "Sample heading" +msgid "Études Newsletter" +msgstr "" + +#: patterns/text-alternating-images.php:97 +msgctxt "Sample list item" +msgid "A world of thought-provoking articles." +msgstr "" + +#: patterns/text-alternating-images.php:101 +msgctxt "Sample list item" +msgid "Case studies that celebrate architecture." +msgstr "" + +#: patterns/text-alternating-images.php:105 +msgctxt "Sample list item" +msgid "Exclusive access to design insights." +msgstr "" + +#: patterns/text-centered-statement-small.php +msgctxt "Pattern title" +msgid "Centered statement, small" +msgstr "" + +#: patterns/text-centered-statement-small.php +msgctxt "Pattern description" +msgid "A centered itallic text statement with compact padding." +msgstr "" + +#. Translators: About link placeholder +#: patterns/text-centered-statement-small.php:20 +msgid "Money Studies" +msgstr "" + +#. Translators: About text placeholder +#: patterns/text-centered-statement-small.php:23 +#, php-format +msgid "I write about finance, management and economy, my book “%1$s” is out now." +msgstr "" + +#: patterns/text-centered-statement.php +msgctxt "Pattern title" +msgid "Centered statement" +msgstr "" + +#: patterns/text-centered-statement.php +msgctxt "Pattern description" +msgid "A centered text statement with a large paddings." +msgstr "" + +#: patterns/text-centered-statement.php:21 +msgid "Études is not confined to the past—we are passionate about the cutting edge designs shaping our world today." +msgstr "" + +#: patterns/text-faq.php +msgctxt "Pattern title" +msgid "FAQ" +msgstr "" + +#: patterns/text-faq.php +msgctxt "Pattern description" +msgid "A FAQ section with a large FAQ heading and list of toggle questions and answers." +msgstr "" + +#: patterns/text-faq.php:12 +msgctxt "Name of the FAQ pattern" +msgid "FAQs" +msgstr "" + +#: patterns/text-faq.php:15 +msgctxt "Heading of the FAQs" +msgid "FAQs" +msgstr "" + +#: patterns/text-faq.php:24 +msgctxt "Question in the FAQ pattern" +msgid "What is your process working in smaller projects?" +msgstr "" + +#: patterns/text-faq.php:27 +#: patterns/text-faq.php:38 +#: patterns/text-faq.php:49 +#: patterns/text-faq.php:60 +msgctxt "Answer in the FAQ pattern" +msgid "Études offers comprehensive consulting, management, design, and research solutions. Our vision is to be at the forefront of architectural innovation, fostering a global community of architects and enthusiasts united by a passion for creating spaces. Every architectural endeavor is an opportunity to shape the future." +msgstr "" + +#: patterns/text-faq.php:35 +msgctxt "Question in the FAQ pattern" +msgid "Who is behind Études?" +msgstr "" + +#: patterns/text-faq.php:46 +msgctxt "Question in the FAQ pattern" +msgid "I'd like to get to meet fellow architects, how can I do that?" +msgstr "" + +#: patterns/text-faq.php:57 +msgctxt "Question in the FAQ pattern" +msgid "Can I apply to be a part of the team or work as a contractor?" +msgstr "" + +#: patterns/text-feature-grid-3-col.php +msgctxt "Pattern title" +msgid "Feature grid, 3 columns" +msgstr "" + +#: patterns/text-feature-grid-3-col.php +msgctxt "Pattern description" +msgid "A feature grid of 2 rows and 3 columns with headings and text." +msgstr "" + +#: patterns/text-feature-grid-3-col.php:16 +msgctxt "Heading of the features" +msgid "A passion for creating spaces" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:24 +msgctxt "Sub-heading of the features" +msgid "Our comprehensive suite of professional services caters to a diverse clientele, ranging from homeowners to commercial developers." +msgstr "" + +#: patterns/text-feature-grid-3-col.php:39 +msgctxt "Sample feature heading" +msgid "Renovation and restoration" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:43 +#: patterns/text-feature-grid-3-col.php:55 +#: patterns/text-feature-grid-3-col.php:67 +#: patterns/text-feature-grid-3-col.php:88 +#: patterns/text-feature-grid-3-col.php:100 +msgctxt "Sample feature content" +msgid "Experience the fusion of imagination and expertise with Études Architectural Solutions." +msgstr "" + +#: patterns/text-feature-grid-3-col.php:51 +msgctxt "Sample feature heading" +msgid "Continuous Support" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:63 +msgctxt "Sample feature heading" +msgid "App Access" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:84 +msgctxt "Sample feature heading" +msgid "Consulting" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:96 +msgctxt "Sample feature heading" +msgid "Project Management" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:108 +msgctxt "Sample heading" +msgid "Architectural Solutions" +msgstr "" + +#: patterns/text-feature-grid-3-col.php:112 +msgctxt "Sample content" +msgid "Experience the fusion of imagination and expertise with Études Architectural Solutions." +msgstr "" + +#: patterns/text-project-details.php +msgctxt "Pattern title" +msgid "Project details" +msgstr "" + +#: patterns/text-project-details.php +msgctxt "Pattern description" +msgid "A text only section for project details." +msgstr "" + +#: patterns/text-project-details.php:18 +msgctxt "Title text for the feature area" +msgid "The revitalized art gallery is set to redefine cultural landscape." +msgstr "" + +#: patterns/text-project-details.php:27 +msgctxt "Descriptive title for the feature area" +msgid "With meticulous attention to detail and a commitment to excellence, we create spaces that inspire, elevate, and enrich the lives of those who inhabit them." +msgstr "" + +#: patterns/text-project-details.php:35 +#: patterns/text-project-details.php:43 +msgctxt "Descriptive text for the feature area" +msgid "The revitalized Art Gallery is set to redefine the cultural landscape of Toronto, serving as a nexus of artistic expression, community engagement, and architectural marvel. The expansion and renovation project pay homage to the Art Gallery's rich history while embracing the future, ensuring that the gallery remains a beacon of inspiration." +msgstr "" + +#: patterns/text-title-left-image-right.php +msgctxt "Pattern title" +msgid "Title text and button on left with image on right" +msgstr "" + +#: patterns/text-title-left-image-right.php +msgctxt "Pattern description" +msgid "A title, a paragraph and a CTA button on the left with an image on the right." +msgstr "" + +#: patterns/text-title-left-image-right.php:21 +msgctxt "Headline for the About pattern" +msgid "Études offers comprehensive consulting, management, design, and research solutions. Every architectural endeavor is an opportunity to shape the future." +msgstr "" + +#: patterns/text-title-left-image-right.php:28 +msgctxt "Description for the About pattern" +msgid "Leaving an indelible mark on the landscape of tomorrow." +msgstr "" + +#: patterns/text-title-left-image-right.php:35 +msgctxt "Call to Action button text" +msgid "About us" +msgstr "" + +#: woocommerce/myaccount/form-login.php:91 +msgid "Full name" +msgstr "" + +#. translators: %s: URL of the terms and privacy policy page +#: woocommerce/myaccount/form-login.php:124 +#, php-format +msgid "I have read and agree to the Terms of Use and Privacy Policy of LibreSign, including the processing of data for service operation." +msgstr "" + +#: woocommerce/myaccount/form-login.php:169 +#: woocommerce/myaccount/form-login.php:200 +msgid "Entrar" +msgstr "" + +#: woocommerce/myaccount/form-login.php:177 +msgid "E-mail ou usuário" +msgstr "" + +#: woocommerce/myaccount/form-login.php:177 +#: woocommerce/myaccount/form-login.php:184 +#: woocommerce/myaccount/form-login.php:227 +#: woocommerce/myaccount/form-login.php:234 +#: woocommerce/myaccount/form-login.php:241 +msgid "Obrigatório" +msgstr "" + +#: woocommerce/myaccount/form-login.php:184 +#: woocommerce/myaccount/form-login.php:241 +msgid "Senha" +msgstr "" + +#: woocommerce/myaccount/form-login.php:194 +msgid "Lembrar de mim" +msgstr "" + +#: woocommerce/myaccount/form-login.php:204 +msgid "Esqueceu a senha?" +msgstr "" + +#: woocommerce/myaccount/form-login.php:216 +#: woocommerce/myaccount/form-login.php:274 +msgid "Criar conta" +msgstr "" + +#: woocommerce/myaccount/form-login.php:227 +msgid "Nome completo" +msgstr "" + +#: woocommerce/myaccount/form-login.php:234 +msgid "E-mail" +msgstr "" + +#. translators: %s: link to terms and privacy policy page +#: woocommerce/myaccount/form-login.php:260 +#, php-format +msgid "Li e aceito os Termos de Uso e a Política de Privacidade do LibreSign, incluindo o tratamento de dados para operação do serviço." +msgstr "" + +#: theme.json +msgctxt "Custom template name" +msgid "Page No Title" +msgstr "" + +#: theme.json +msgctxt "Custom template name" +msgid "Page with Sidebar" +msgstr "" + +#: theme.json +msgctxt "Custom template name" +msgid "Page with Wide Image" +msgstr "" + +#: theme.json +msgctxt "Custom template name" +msgid "Single with Sidebar" +msgstr "" + +#: theme.json +msgctxt "Duotone name" +msgid "Black and white" +msgstr "" + +#: theme.json +msgctxt "Duotone name" +msgid "Black and sandstone" +msgstr "" + +#: theme.json +msgctxt "Duotone name" +msgid "Black and rust" +msgstr "" + +#: theme.json +msgctxt "Duotone name" +msgid "Black and sage" +msgstr "" + +#: theme.json +msgctxt "Duotone name" +msgid "Black and pastel blue" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical soft beige to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical soft sandstone to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical soft rust to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical soft sage to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical soft mint to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical soft pewter to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical hard beige to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical hard sandstone to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical hard rust to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical hard sage to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical hard mint to white" +msgstr "" + +#: theme.json +msgctxt "Gradient name" +msgid "Vertical hard pewter to white" +msgstr "" + +#: theme.json +#: styles/ember.json +#: styles/fossil.json +#: styles/ice.json +#: styles/maelstrom.json +#: styles/mint.json +#: styles/onyx.json +#: styles/rust.json +msgctxt "Color name" +msgid "Base" +msgstr "" + +#: theme.json +#: styles/ember.json +#: styles/fossil.json +#: styles/ice.json +#: styles/maelstrom.json +#: styles/mint.json +#: styles/onyx.json +msgctxt "Color name" +msgid "Base / Two" +msgstr "" + +#: theme.json +#: styles/ember.json +#: styles/fossil.json +#: styles/ice.json +#: styles/maelstrom.json +#: styles/mint.json +#: styles/onyx.json +#: styles/rust.json +msgctxt "Color name" +msgid "Contrast" +msgstr "" + +#: theme.json +#: styles/fossil.json +#: styles/ice.json +#: styles/mint.json +#: styles/onyx.json +msgctxt "Color name" +msgid "Contrast / Two" +msgstr "" + +#: theme.json +#: styles/fossil.json +#: styles/ice.json +#: styles/mint.json +#: styles/onyx.json +msgctxt "Color name" +msgid "Contrast / Three" +msgstr "" + +#: theme.json +#: styles/onyx.json +msgctxt "Color name" +msgid "Accent" +msgstr "" + +#: theme.json +#: styles/onyx.json +msgctxt "Color name" +msgid "Accent / Two" +msgstr "" + +#: theme.json +#: styles/onyx.json +msgctxt "Color name" +msgid "Accent / Three" +msgstr "" + +#: theme.json +#: styles/onyx.json +msgctxt "Color name" +msgid "Accent / Four" +msgstr "" + +#: theme.json +#: styles/onyx.json +msgctxt "Color name" +msgid "Accent / Five" +msgstr "" + +#: theme.json +msgctxt "Space size name" +msgid "1" +msgstr "" + +#: theme.json +msgctxt "Space size name" +msgid "2" +msgstr "" + +#: theme.json +msgctxt "Space size name" +msgid "3" +msgstr "" + +#: theme.json +msgctxt "Space size name" +msgid "4" +msgstr "" + +#: theme.json +msgctxt "Space size name" +msgid "5" +msgstr "" + +#: theme.json +msgctxt "Space size name" +msgid "6" +msgstr "" + +#: theme.json +#: styles/fossil.json +#: styles/ice.json +msgctxt "Font family name" +msgid "Inter" +msgstr "" + +#: theme.json +#: styles/fossil.json +#: styles/maelstrom.json +msgctxt "Font family name" +msgid "Cardo" +msgstr "" + +#: theme.json +#: styles/ember.json +#: styles/fossil.json +#: styles/ice.json +#: styles/maelstrom.json +#: styles/mint.json +msgctxt "Font family name" +msgid "System Sans-serif" +msgstr "" + +#: theme.json +#: styles/ember.json +#: styles/fossil.json +#: styles/ice.json +#: styles/maelstrom.json +#: styles/mint.json +msgctxt "Font family name" +msgid "System Serif" +msgstr "" + +#: theme.json +#: styles/fossil.json +#: styles/ice.json +#: styles/maelstrom.json +msgctxt "Font size name" +msgid "Small" +msgstr "" + +#: theme.json +#: styles/fossil.json +#: styles/ice.json +#: styles/maelstrom.json +msgctxt "Font size name" +msgid "Medium" +msgstr "" + +#: theme.json +#: styles/fossil.json +#: styles/ice.json +#: styles/maelstrom.json +msgctxt "Font size name" +msgid "Large" +msgstr "" + +#: theme.json +#: styles/fossil.json +#: styles/ice.json +#: styles/maelstrom.json +msgctxt "Font size name" +msgid "Extra Large" +msgstr "" + +#: theme.json +#: styles/fossil.json +#: styles/ice.json +#: styles/maelstrom.json +msgctxt "Font size name" +msgid "Extra Extra Large" +msgstr "" + +#: theme.json +msgctxt "Template part name" +msgid "Header" +msgstr "" + +#: theme.json +msgctxt "Template part name" +msgid "Footer" +msgstr "" + +#: theme.json +msgctxt "Template part name" +msgid "Sidebar" +msgstr "" + +#: theme.json +msgctxt "Template part name" +msgid "Post Meta" +msgstr "" + +#: styles/ember.json +msgctxt "Style variation name" +msgid "Ember" +msgstr "" + +#: styles/ember.json +msgctxt "Duotone name" +msgid "Orange and white" +msgstr "" + +#: styles/ember.json +#: styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical linen to beige" +msgstr "" + +#: styles/ember.json +#: styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical taupe to beige" +msgstr "" + +#: styles/ember.json +#: styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical sable to beige" +msgstr "" + +#: styles/ember.json +#: styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical ebony to beige" +msgstr "" + +#: styles/ember.json +#: styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical ebony to sable" +msgstr "" + +#: styles/ember.json +#: styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical hard beige to linen" +msgstr "" + +#: styles/ember.json +#: styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical hard taupe to beige" +msgstr "" + +#: styles/ember.json +#: styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical hard sable to beige" +msgstr "" + +#: styles/ember.json +#: styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical hard ebony to beige" +msgstr "" + +#: styles/ember.json +#: styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical hard sable to taupe" +msgstr "" + +#: styles/ember.json +#: styles/fossil.json +msgctxt "Gradient name" +msgid "Vertical hard ebony to sable" +msgstr "" + +#: styles/ember.json +#: styles/maelstrom.json +msgctxt "Color name" +msgid "Contrast / 2" +msgstr "" + +#: styles/ember.json +#: styles/mint.json +msgctxt "Font family name" +msgid "Instrument Sans" +msgstr "" + +#: styles/ember.json +#: styles/ice.json +#: styles/maelstrom.json +#: styles/mint.json +msgctxt "Font family name" +msgid "Jost" +msgstr "" + +#: styles/fossil.json +msgctxt "Style variation name" +msgid "Fossil" +msgstr "" + +#: styles/ice.json +msgctxt "Style variation name" +msgid "Ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical azure to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical slate to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical ocean to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical ink to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical ocean to slate" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical ink to ocean" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical hard ice to azure" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical hard slate to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical hard ocean to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical hard ink to ice" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical hard ocean to slate" +msgstr "" + +#: styles/ice.json +msgctxt "Gradient name" +msgid "Vertical hard ink to ocean" +msgstr "" + +#: styles/maelstrom.json +msgctxt "Style variation name" +msgid "Maelstrom" +msgstr "" + +#: styles/maelstrom.json +msgctxt "Color name" +msgid "Contrast / 3" +msgstr "" + +#: styles/mint.json +msgctxt "Style variation name" +msgid "Mint" +msgstr "" + +#: styles/onyx.json +msgctxt "Style variation name" +msgid "Onyx" +msgstr "" + +#: styles/onyx.json +msgctxt "Duotone name" +msgid "Dark gray and white" +msgstr "" + +#: styles/onyx.json +msgctxt "Duotone name" +msgid "Dark gray and walnut" +msgstr "" + +#: styles/onyx.json +msgctxt "Duotone name" +msgid "Dark gray and cinnamon" +msgstr "" + +#: styles/onyx.json +msgctxt "Duotone name" +msgid "Dark gray and olive" +msgstr "" + +#: styles/onyx.json +msgctxt "Duotone name" +msgid "Dark gray and steel" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical soft driftwood to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical soft walnut to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical soft cinnamon to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical soft olive to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical soft steel to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical soft pewter to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical hard beige to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical hard walnut to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical hard cinnamon to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical hard olive to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical hard steel to dark gray" +msgstr "" + +#: styles/onyx.json +msgctxt "Gradient name" +msgid "Vertical hard pewter to dark gray" +msgstr "" + +#: styles/rust.json +msgctxt "Style variation name" +msgid "Rust" +msgstr "" + +#: styles/rust.json +msgctxt "Duotone name" +msgid "Dark rust to beige" +msgstr "" + +#: styles/rust.json +msgctxt "Gradient name" +msgid "Vertical transparent rust to beige" +msgstr "" + +#: styles/rust.json +msgctxt "Gradient name" +msgid "Vertical hard transparent rust to beige" +msgstr "" + +#: styles/rust.json +msgctxt "Gradient name" +msgid "Vertical rust to beige" +msgstr "" + +#: styles/rust.json +msgctxt "Gradient name" +msgid "Vertical hard rust to beige" +msgstr "" + +#: styles/rust.json +msgctxt "Color name" +msgid "Base / 2" +msgstr "" diff --git a/patterns/cta-pricing.php b/patterns/cta-pricing.php deleted file mode 100644 index 25a6f9d..0000000 --- a/patterns/cta-pricing.php +++ /dev/null @@ -1,215 +0,0 @@ - - - -
- -
- -
- -

- - - -

- -
- - - - - - - -
- -
- -

- -

- - - -
- - - - - - - -
- -

Études Articles per month.', 'Feature for pricing level', 'libresign' ) ); ?>

- - - -
- - - - - - - -
- - - - - -
- - - - - - - -
- -
- -
- -
- -
- - - -
- -

- -

- - - -
- - - - - - - -
- -

Études Articles per month.', 'Feature for pricing level', 'libresign' ) ); ?>

- - - -
- - - -

- - - -
- - - -

Études app for iOS and Android.', 'Feature for pricing level', 'libresign' ) ); ?>

- -
- - - - - - - -
- -
- -
- -
- -
- - - -
- -

- -

- - - -
- - - - - - - -
- -

Études Articles.', 'Feature for pricing level', 'libresign' ) ); ?>

- - - -
- - - -

- - - -
- - - -

Études app for iOS and Android', 'Feature for pricing level', 'libresign' ) ); ?>

- -
- - - - - - - -
- -
- -
- -
- -
- -
- -
- -
- diff --git a/patterns/cta-rsvp.php b/patterns/cta-rsvp.php deleted file mode 100644 index 1ec6e87..0000000 --- a/patterns/cta-rsvp.php +++ /dev/null @@ -1,58 +0,0 @@ - - - -
- -
- -
- -
- - -

- - - -
- -

- - - -
- -
- -
- -
- -
- -
- -
- - - -
- -
- <?php esc_attr_e( 'A ramp along a curved wall in the Kiasma Museu, Helsinki, Finland', 'libresign' ); ?> -
- -
- -
- -
- diff --git a/patterns/footer-centered-logo-nav.php b/patterns/footer-centered-logo-nav.php deleted file mode 100644 index 7fafca1..0000000 --- a/patterns/footer-centered-logo-nav.php +++ /dev/null @@ -1,32 +0,0 @@ - - - -
- - - - - - - - -
- diff --git a/patterns/footer-colophon-3-col.php b/patterns/footer-colophon-3-col.php deleted file mode 100644 index 1b9f8e5..0000000 --- a/patterns/footer-colophon-3-col.php +++ /dev/null @@ -1,106 +0,0 @@ - - - -
- -
- -
- -
- - - -
- - - -
- -
- -

- -
- - -
- -
- -

- - -

- -
- -
- - -
- -
- -
- -
- -

- - -

/

- -
- -
- -
- -
- -
- - - - - - - -
- -
- -

- - -
- - -

- WordPress'; - echo sprintf( - /* Translators: Designed with WordPress */ - esc_html__( 'Designed with %1$s', 'libresign' ), - $wordpress_link - ); - ?> -

- -
- - -
- -
- diff --git a/patterns/footer.php b/patterns/footer.php deleted file mode 100644 index b579f60..0000000 --- a/patterns/footer.php +++ /dev/null @@ -1,129 +0,0 @@ - - - -
- -
- -
- -
- - - - - -
- -
- - - -
-
- - - -
- -
- -
- -

- - - -
- - - - - - - - - -
- -
- - - - -
- -

- - - -
- - - - - - - - - -
- -
- - - -
- -

- - - -
- - - - - - - - - -
- -
- -
- -
- -
- - - -
- - - -
- -
- diff --git a/patterns/gallery-offset-images-grid-2-col.php b/patterns/gallery-offset-images-grid-2-col.php deleted file mode 100644 index d724667..0000000 --- a/patterns/gallery-offset-images-grid-2-col.php +++ /dev/null @@ -1,59 +0,0 @@ - - -
- -
- -
- -
- -
- - - - - - - -
- -
- -
- - - -
- - - - - -
-
- - - - - - - -
-
- -
- -
- -
- diff --git a/patterns/gallery-offset-images-grid-3-col.php b/patterns/gallery-offset-images-grid-3-col.php deleted file mode 100644 index fd630f1..0000000 --- a/patterns/gallery-offset-images-grid-3-col.php +++ /dev/null @@ -1,111 +0,0 @@ - - -
- -
- -
- -
- -
- - - - - - - -
- -
- - - - - - - -
- -
- -
- - - -
- - - - - -
- -
- - - - - - - -
- -
- - - - - - - -
- -
- -
- - - -
- -
- -
- - - - - - - -
- -
- - - - - - - -
- -
- -
- -
- -
- diff --git a/patterns/hidden-portfolio-hero.php b/patterns/hidden-portfolio-hero.php deleted file mode 100644 index 64ede3d..0000000 --- a/patterns/hidden-portfolio-hero.php +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - -
- -

Leia Acosta, a passionate photographer who finds inspiration in capturing the fleeting beauty of life.', 'libresign' ) ); ?>

- -
- diff --git a/patterns/hidden-post-meta.php b/patterns/hidden-post-meta.php deleted file mode 100644 index 82cba0f..0000000 --- a/patterns/hidden-post-meta.php +++ /dev/null @@ -1,30 +0,0 @@ - - - -
- -
- - - -

- - - -

- - - - - - -
- -
- diff --git a/patterns/hidden-sidebar.php b/patterns/hidden-sidebar.php deleted file mode 100644 index 39a7965..0000000 --- a/patterns/hidden-sidebar.php +++ /dev/null @@ -1,84 +0,0 @@ - - -
- -
- - - -
- -

- - - -
- -
- - - -
- - - -
- -

- - - -
- - - -
- - - -
- -
- -

- - - -

- -
- - - - - - -
- - - -
- - - -
- -

- - - -
- - - - - -
- diff --git a/patterns/page-about-business.php b/patterns/page-about-business.php deleted file mode 100644 index 7009227..0000000 --- a/patterns/page-about-business.php +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - diff --git a/patterns/page-home-blogging.php b/patterns/page-home-blogging.php deleted file mode 100644 index edf5fa8..0000000 --- a/patterns/page-home-blogging.php +++ /dev/null @@ -1,84 +0,0 @@ - - - - - -
- -
- -
-
- - - -
- -
- - -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - -
- -
- - - -
-
- - - -
- -
- - - -
-
- -
- -
- - - diff --git a/patterns/page-home-business.php b/patterns/page-home-business.php deleted file mode 100644 index 45612a4..0000000 --- a/patterns/page-home-business.php +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - diff --git a/patterns/page-home-portfolio-gallery.php b/patterns/page-home-portfolio-gallery.php deleted file mode 100644 index 15dcfa2..0000000 --- a/patterns/page-home-portfolio-gallery.php +++ /dev/null @@ -1,15 +0,0 @@ - - - - diff --git a/patterns/page-home-portfolio.php b/patterns/page-home-portfolio.php deleted file mode 100644 index c87844c..0000000 --- a/patterns/page-home-portfolio.php +++ /dev/null @@ -1,15 +0,0 @@ - - - - diff --git a/patterns/page-newsletter-landing.php b/patterns/page-newsletter-landing.php deleted file mode 100644 index 806179c..0000000 --- a/patterns/page-newsletter-landing.php +++ /dev/null @@ -1,48 +0,0 @@ - - - -
- -
- -
- -
- - - - - - - - - - - - - - - -
- -
- -
- -
- -
- -
- diff --git a/patterns/page-portfolio-overview.php b/patterns/page-portfolio-overview.php deleted file mode 100644 index 6d01701..0000000 --- a/patterns/page-portfolio-overview.php +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/patterns/page-rsvp-landing.php b/patterns/page-rsvp-landing.php deleted file mode 100644 index 784b2ec..0000000 --- a/patterns/page-rsvp-landing.php +++ /dev/null @@ -1,57 +0,0 @@ - - - -
- -
- -
- -
- -

- - -
- -

- - -
- -
- -
- -
- -
- -
- -
- - -
- -
- <?php esc_attr_e( 'Green staircase at Western University, London, Canada', 'libresign' ); ?> -
- -
- -
- -
- diff --git a/patterns/posts-grid-2-col.php b/patterns/posts-grid-2-col.php deleted file mode 100644 index e659e30..0000000 --- a/patterns/posts-grid-2-col.php +++ /dev/null @@ -1,81 +0,0 @@ - - - -
- -

- - - - - - - -
- -
- -
- - - - - - - - -
- - - - - - -
- - -
- -
- - - -
- -
- - - - - - - - -
- - - - - -
- - -
- -
- -
- -
- diff --git a/patterns/template-archive-blogging.php b/patterns/template-archive-blogging.php deleted file mode 100644 index d49c00b..0000000 --- a/patterns/template-archive-blogging.php +++ /dev/null @@ -1,21 +0,0 @@ - - - - - -
- - - -
- - - diff --git a/patterns/template-archive-portfolio.php b/patterns/template-archive-portfolio.php deleted file mode 100644 index da52537..0000000 --- a/patterns/template-archive-portfolio.php +++ /dev/null @@ -1,23 +0,0 @@ - - - - - -
- - - - - -
- - - diff --git a/patterns/template-home-blogging.php b/patterns/template-home-blogging.php deleted file mode 100644 index bc39a5c..0000000 --- a/patterns/template-home-blogging.php +++ /dev/null @@ -1,21 +0,0 @@ - - - - - -
- - - -
- - - diff --git a/patterns/template-home-business.php b/patterns/template-home-business.php deleted file mode 100644 index a4328a1..0000000 --- a/patterns/template-home-business.php +++ /dev/null @@ -1,19 +0,0 @@ - - - - - -
- -
- - - diff --git a/patterns/template-home-portfolio.php b/patterns/template-home-portfolio.php deleted file mode 100644 index f16cbf6..0000000 --- a/patterns/template-home-portfolio.php +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -
- - - - -
- - - diff --git a/patterns/template-index-blogging.php b/patterns/template-index-blogging.php deleted file mode 100644 index 190f573..0000000 --- a/patterns/template-index-blogging.php +++ /dev/null @@ -1,23 +0,0 @@ - - - - - -
- -

- - - -
- - - diff --git a/patterns/template-index-portfolio.php b/patterns/template-index-portfolio.php deleted file mode 100644 index 920d8f2..0000000 --- a/patterns/template-index-portfolio.php +++ /dev/null @@ -1,24 +0,0 @@ - - - - - -
- -

- - - - -
- - - diff --git a/patterns/template-search-blogging.php b/patterns/template-search-blogging.php deleted file mode 100644 index 86b2811..0000000 --- a/patterns/template-search-blogging.php +++ /dev/null @@ -1,26 +0,0 @@ - - - - - -
- -
- - -
- - - -
- - - diff --git a/patterns/template-search-portfolio.php b/patterns/template-search-portfolio.php deleted file mode 100644 index 16a7688..0000000 --- a/patterns/template-search-portfolio.php +++ /dev/null @@ -1,27 +0,0 @@ - - - - - -
- - - -
- -
- - - -
- - - diff --git a/patterns/template-single-portfolio.php b/patterns/template-single-portfolio.php deleted file mode 100644 index 27672ae..0000000 --- a/patterns/template-single-portfolio.php +++ /dev/null @@ -1,36 +0,0 @@ - - - - - -
- - - - - - - -
- -
- - - - - - -
- - - diff --git a/templates/archive.html b/templates/archive.html deleted file mode 100644 index d5736b4..0000000 --- a/templates/archive.html +++ /dev/null @@ -1,13 +0,0 @@ - - - -
- - - - - -
- - - diff --git a/templates/home.html b/templates/home.html deleted file mode 100644 index 4704102..0000000 --- a/templates/home.html +++ /dev/null @@ -1,9 +0,0 @@ - - - -
- -
- - - diff --git a/templates/page-no-title.html b/templates/page-no-title.html deleted file mode 100644 index f221eaf..0000000 --- a/templates/page-no-title.html +++ /dev/null @@ -1,9 +0,0 @@ - - - -
- -
- - - diff --git a/templates/page-wide.html b/templates/page-wide.html deleted file mode 100644 index 21478ea..0000000 --- a/templates/page-wide.html +++ /dev/null @@ -1,33 +0,0 @@ - - - -
- -
- -
- - - -
- -
- -
- -
- - - -
- -
- -
- -
- -
- - - diff --git a/templates/page-with-sidebar.html b/templates/page-with-sidebar.html deleted file mode 100644 index f57b2ba..0000000 --- a/templates/page-with-sidebar.html +++ /dev/null @@ -1,54 +0,0 @@ - - - -
- - -
- -
-
- - - -
- -
- - - - - - - - - -
- -
- - - -
-
- - - -
- -
- - - -
-
- -
- -
- - - diff --git a/templates/search.html b/templates/search.html deleted file mode 100644 index 7b1863a..0000000 --- a/templates/search.html +++ /dev/null @@ -1,17 +0,0 @@ - - - -
- - - -
- -
- - - -
- - - diff --git a/templates/single-with-sidebar.html b/templates/single-with-sidebar.html deleted file mode 100644 index f5ea2cc..0000000 --- a/templates/single-with-sidebar.html +++ /dev/null @@ -1,61 +0,0 @@ - - - -
- -
- -
- -
- - - - - - - - - - -
- - - -
- - - -
- - - -
- - - - - - - - - - - - -
- -
- - - -
- -
- -
- -
- - - diff --git a/templates/single.html b/templates/single.html deleted file mode 100644 index 39d7317..0000000 --- a/templates/single.html +++ /dev/null @@ -1,49 +0,0 @@ - - - -
- -
- - - -
- - - -
- -
- - - - - -
- - - -
- - - - - -
- - - - - - -
- -
- -
- - - diff --git a/woocommerce/myaccount/form-login.php b/woocommerce/myaccount/form-login.php new file mode 100644 index 0000000..669f633 --- /dev/null +++ b/woocommerce/myaccount/form-login.php @@ -0,0 +1,150 @@ + + + +
+
+ + +

+ + + + +
+ +
+ +

+ +
> + + + + + + +

+ + +

+ +

+ + +

+ +

+ + +

+ +

+ +

+ + + + + + +

+ +

+ + + +
+ +
+ +
+ + +