Jake Vanderwerf
3 hours ago cf7c6dae604a0bbd471afa156f82555a5a2e9ab7
=gitblit switch
18 files deleted
2 files renamed
5 files modified
17 files added
3763 ■■■■ changed files
ajakevan.php 142 ●●●●● patch | view | raw | blame | history
amartianit.php 301 ●●●●● patch | view | raw | blame | history
assets/css/dash.css 1 ●●●● patch | view | raw | blame | history
assets/css/forms.css 1 ●●●● patch | view | raw | blame | history
assets/css/icons.css 1 ●●●● patch | view | raw | blame | history
assets/icons/full-logo.svg 1 ●●●● patch | view | raw | blame | history
assets/icons/jakevan-logo.svg 1 ●●●● patch | view | raw | blame | history
assets/icons/martian infotech logo.svg 1 ●●●● patch | view | raw | blame | history
assets/icons/martian infotech.svg 1 ●●●● patch | view | raw | blame | history
assets/icons/martian logo shadow.svg 1 ●●●● patch | view | raw | blame | history
blocks/_setup.php 46 ●●●●● patch | view | raw | blame | history
content/_setup.php 30 ●●●●● patch | view | raw | blame | history
content/art.php 46 ●●●●● patch | view | raw | blame | history
content/design.php 44 ●●●●● patch | view | raw | blame | history
content/development.php 45 ●●●●● patch | view | raw | blame | history
content/product.php 141 ●●●●● patch | view | raw | blame | history
content/service.php 144 ●●●●● patch | view | raw | blame | history
content/strategy.php 44 ●●●●● patch | view | raw | blame | history
content/support.php 3 ●●●● patch | view | raw | blame | history
content/writing.php 44 ●●●●● patch | view | raw | blame | history
dashboard/setup.php 1 ●●●● patch | view | raw | blame | history
files/fileManagement.php 444 ●●●●● patch | view | raw | blame | history
forms/_setup.php 25 ●●●●● patch | view | raw | blame | history
forms/contact.php 81 ●●●●● patch | view | raw | blame | history
forms/setup.php 1 ●●●● patch | view | raw | blame | history
login/_setup.php 10 ●●●●● patch | view | raw | blame | history
login/setup.php 18 ●●●●● patch | view | raw | blame | history
seo.php 645 ●●●●● patch | view | raw | blame | history
taxonomies/_setup.php 32 ●●●●● patch | view | raw | blame | history
taxonomies/city.php 136 ●●●● patch | view | raw | blame | history
taxonomies/form.php 32 ●●●●● patch | view | raw | blame | history
taxonomies/media.php 34 ●●●●● patch | view | raw | blame | history
taxonomies/product_cat.php 109 ●●●●● patch | view | raw | blame | history
taxonomies/progress.php 34 ●●●●● patch | view | raw | blame | history
taxonomies/style.php 39 ●●●●● patch | view | raw | blame | history
taxonomies/tags.php 111 ●●●●● patch | view | raw | blame | history
taxonomies/target.php 32 ●●●●● patch | view | raw | blame | history
taxonomies/theme.php 57 ●●●●● patch | view | raw | blame | history
temp.php 849 ●●●●● patch | view | raw | blame | history
users/client.php 2 ●●● patch | view | raw | blame | history
users/enthusiast.php 21 ●●●●● patch | view | raw | blame | history
users/setup.php 12 ●●●● patch | view | raw | blame | history
ajakevan.php
File was deleted
amartianit.php
New file
@@ -0,0 +1,301 @@
<?php
/*
Plugin Name: Martian Infotech Extension
Plugin URI: https://martianit.ca/
Description: An Extension of JakeVan Base, for Martian Infotech.
Author: Jake Vanderwerf
Version: 1.0.0
Author URI: https://jakevan.ca/
Textdomain: ami
*/
//PLUGIN STRUCTURE
// /content/
//      art.php
//      design.php
//      development.php
//      setup.php
//      strategy.php
//      writing.php
// /dashboard/
//      setup.php
// /files/
//      fileManagement.php
// /forms/
//      setup.php
// /login/
//      setup.php
// /taxonomies/
//      city.php
//      form.php
//      media.php
//      progress.php
//      setup.php
//      style.php
//      target.php
//      theme.php
// /users/
//      client.php
//      setup.php
// ajakevan.php     <-- main plugin file
use JVBase\base\Site;
if (!defined('ABSPATH')) {
    exit;
}
//use JVBase\managers\CacheManager;
add_filter('jvb_base', function () {
    return 'ami_';
});
const AMI_DIR = WP_PLUGIN_DIR . '/amartianit';
define('AMI_URL', plugin_dir_url(__FILE__));
add_filter('jvbChildDir', function() { return AMI_DIR; });
add_filter('jvbChildUrl', function() { return AMI_URL; });
require(AMI_DIR . '/content/_setup.php');
//require(AMI_DIR . '/dashboard/_setup.php');
require(AMI_DIR . '/forms/_setup.php');
require(AMI_DIR . '/login/_setup.php');
require(AMI_DIR . '/taxonomies/_setup.php');
//require(AMI_DIR . '/users/setup.php');
require(AMI_DIR . '/blocks/_setup.php');
require(AMI_DIR . '/seo.php');
//require(AMI_DIR . '/files/fileManagement.php');
add_action('plugins_loaded', 'aei_siteDefinition', 2);
add_action('jvbLoadDefinitions', 'aei_siteDefinition');
function aei_siteDefinition():void
{
    if (!class_exists('JVBase\base\Site')) {
        return;
    }
    $site = Site::getInstance();
    $site->set('icons', 'light');
    $site->setAll([
        'dashboard',
        'is_directory',
        'magic_link',
        'feed_block',
//        'faq',
//        'referrals'
//        'has_map',
//        'referrals',
    ]);
    $site->setIntegrations([
        'cloudflare',
        'facebook',
        'gmb',
        'maps',
        'helcim',
        'postmark',
        'instagram',
        'umami'
    ]);
//    $login = $site->login();
    $site->setDirectorySingular('List');
    $site->setDirectoryPlural('Lists');
}
/**
 * Defines base options like:
 *         - directory & Membership
 *         - dashboard
 *         - membership settings (JVB_MEMBERSHIP)
 *         - post types (JVB_CONTENT)
 *         - taxonomies (JVB_TAXONOMY)
 *         - User Roles (JVB_USER)
 *         - enthusiast     = (bool) short form for a subscriber-like user that can collect content for reference
 *         - forum            = (bool) create a forum
 *         - member_only    = (bool) if forum and this is true, creates a member-only forum in the custom dashboard
 *
 * as well as central filters for
 *         - rewrite rules
 *         - archive title
 */
//add_filter('jvb_site', 'ami_setup_site');
function ami_setup_site():array
{
    return [
        'icons'               => 'light',
        'is_directory'        => false,        //as in, a membership directory
        'has_membership'      => false,
        'has_map'             => false,
        'dashboard'           => true,
        'support'         => true,
        'feed_block'      => true,
        'email_notifications' => true,
        'integrations'  => [
            'bluesky'     => true,
            'cloudflare'  => true,
            'facebook'    => true,
            'maps'        => true,
            'gmb'         => true,
            'helcim'      => true,
            'instagram'   => true,
            'square'      => false,
            'umami'       => true,
        ],
        'is_restaurant'       => false,
        'limit_hours'         => false,
        'enthusiast'          => false,
        'favourites'          => false,    //optional flag to allow enthusiasts, but not favourites
    ];
}
/**
 * JVB_MEMBERSHIP defines the structure of the directory
 *         Options include:
 *         - membership_expires        = useful if members pay a yearly membership fee
 *         - hide_expired                = removes users once membership expired; only used if membership_expires is true
 *         - clip_expired                = keeps users once membership expires, but limits the information shown; only used if membership_expires is true
 *         - membership_approval        = verified users can approve other users
 *         - term_approval              = (bool) verified users can create new terms, but needs approval
 *          - member_only              = (array) if empty, open to any registered user. otherwise an array of registered user roles
 */
//add_filter('jvb_membership', 'ami_setup_membership');
//function ami_setup_membership():array
//{
//    return [
//        'member_content'  => true,
//        'can_invite'      => ['artist' => ['artist']],
//        'member_verified' => true,
//        'notifications'   => true,
//        'forum'           => true,
//        'member_only'     => [ 'artist' ],
//        'member_expires'  => false,
//        'hide_expired'    => false,
//        'clip_expired'    => false,
//        'term_approval'   => true,
//        'can_approve'     => [ 'artist' ]
//    ];
//}
//
//add_filter('jvbLoadingQuips', 'ami_loading_quips');
//function ami_loading_quips(array $quips):array
//{
//    return [];
//}
//add_filter('jvbBeforeFooter', 'ami_acknowledgement');
function ami_acknowledgement():string
{
    return '<p>I live and work in Tk’emlúps te SecweÌ“pemc territory.</p><p>The <a href="https://stkemlups.ca/" title="Learn More">unceded ancestral lands of Stk’emlúpsemc te Secwépemc Nation.</a></p><p>Kamloops, British Columbia, Canada</p>';
}
add_filter('jvbSeparatorLogo', 'ami_logo_separator');
function ami_logo_separator(string $logo):string
{
    return 'logo-alien-shadow';
}
add_filter('jvbRegisterCustomIcons', 'ami_custom_icons');
function ami_custom_icons(array $icons):array
{
    $icons['logo'] = AMI_DIR . '/assets/icons/full-logo.svg';
    $icons['logo-text'] = AMI_DIR . '/assets/icons/martian infotech.svg';
    $icons['logo-alien'] = AMI_DIR . '/assets/icons/martian infotech logo.svg';
    $icons['logo-alien-shadow'] = AMI_DIR . '/assets/icons/martian logo shadow.svg';
    return $icons;
}
add_filter('jvbLoadingIcon', 'ami_loading_icon', 999999);
function ami_loading_icon():string
{
    return 'logo-alien';
}
add_filter('jvbMenuExtra', 'ami_contact_nav', 10, 3);
function ami_contact_nav(string $nav, string $menuName, array $block):string
{
    if (array_key_exists('attrs', $block)
        && array_key_exists('className', $block['attrs'])
        && $block['attrs']['className'] === 'is-style-fixed'
        && $nav === '') {
        $text = '<li><a href="tel:+17808008354" title="Call Me">'.jvbIcon('phone').'<span class="hide-small">780-800-8354</span></a></li>';
        $email = '<li><a href="'.jvbMailToLink(
                'myron@martianit.ca',
                '[Martian Infotech] Website Inquiry','Be sure to as much detail as possible, including what your idea is about, when you need it done by, and budget.'
            ).'" title="Email Me">'.jvbIcon('envelope').'<span class="hide-small">myron@martianit.ca</span></a></li>';
        return $text.$email;
    }
    if (array_key_exists('attrs', $block)
        && array_key_exists('className', $block['attrs'])
        && $block['attrs']['className'] === 'is-style-floating'
    ) {
        return $nav.'<li>'.ami_socials_nav().'</li>';
    }
    return $nav;
}
function ami_socials_nav():string
{
    return '<ul class="socials row right">
            <li>
                <a href="https://www.facebook.com/MartianIT/" target="_blank" rel="nofollow" title="Find us on Facebook">
                    '.jvbIcon('facebook-logo').'
                    <span class="screen-reader-text">
                        Find us on Facebook
                    </span>
                </a>
            </li>
            <li>
                <a href="https://x.com/martianinfotech" target="_blank" rel="nofollow" title="Find us on X, previously known as Twitter">
                    '.jvbIcon('x-logo').'
                    <span class="screen-reader-text">
                        Find us on X
                    </span>
                </a>
            </li>
            <li>
                <a href="https://www.instagram.com/martianinfotech/" target="_blank" rel="nofollow" title="Find me on Instagram">
                    '.jvbIcon('instagram-logo').'
                    <span class="screen-reader-text">
                        Find me on Instagram
                    </span>
                </a>
            </li>
            <li>
                <a href="https://ca.linkedin.com/in/mlewitski" target="_blank" rel="nofollow" title="Find us on LinkedIn">
                    '.jvbIcon('linkedin-logo').'
                    <span class="screen-reader-text">
                        Find me on LinkedIn
                    </span>
                </a>
            </li>
        </ul>';
}
add_filter('jvbAboveHeader', 'ami_above_header');
function ami_above_header(string $header):string
{
    return ami_socials_nav();
}
add_filter('jvbBelowHeader', 'ami_below_header');
function ami_below_header(string $header):string
{
    return '<p>'.get_bloginfo('description').'</p>';
}
add_filter('the_seo_framework_meta_render_data', 'ami_no_next_archive', 10, 1);
function ami_no_next_archive($tags) {
    if (is_tax() || is_post_type_archive()) {
        if (array_key_exists('next', $tags)) {
            unset($tags['next']);
        }
    }
    return $tags; // Keep the link for other pages
}
assets/css/dash.css
New file
@@ -0,0 +1 @@
.icon-magnifying-glass{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjguMjQsMjE5Ljc2bC01MS4zOC01MS4zOGE4Ni4xNSw4Ni4xNSwwLDEsMC04LjQ4LDguNDhsNTEuMzgsNTEuMzhhNiw2LDAsMCwwLDguNDgtOC40OFpNMzgsMTEyYTc0LDc0LDAsMSwxLDc0LDc0QTc0LjA5LDc0LjA5LDAsMCwxLDM4LDExMloiLz48L3N2Zz4=');}
assets/css/forms.css
New file
@@ -0,0 +1 @@
.icon-copy{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTYsMzRIODhhNiw2LDAsMCwwLTYsNlY4Mkg0MGE2LDYsMCwwLDAtNiw2VjIxNmE2LDYsMCwwLDAsNiw2SDE2OGE2LDYsMCwwLDAsNi02VjE3NGg0MmE2LDYsMCwwLDAsNi02VjQwQTYsNiwwLDAsMCwyMTYsMzRaTTE2MiwyMTBINDZWOTRIMTYyWm00OC00OEgxNzRWODhhNiw2LDAsMCwwLTYtNkg5NFY0NkgyMTBaIi8+PC9zdmc+');}.icon-paragraph{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMDgsNDJIOTZhNjIsNjIsMCwwLDAsMCwxMjRoNDJ2NDJhNiw2LDAsMCwwLDEyLDBWNTRoMjhWMjA4YTYsNiwwLDAsMCwxMiwwVjU0aDE4YTYsNiwwLDAsMCwwLTEyWk0xMzgsMTU0SDk2QTUwLDUwLDAsMCwxLDk2LDU0aDQyWiIvPjwvc3ZnPg==');}.icon-text-h-one{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzAsMTEydjk2YTYsNiwwLDAsMS0xMiwwVjEyMy4yMUwyMDMuMzMsMTMzYTYsNiwwLDAsMS02LjY2LTEwbDI0LTE2YTYsNiwwLDAsMSw5LjMzLDVaTTE0NCw1MGE2LDYsMCwwLDAtNiw2djU0SDQ2VjU2YTYsNiwwLDAsMC0xMiwwVjE3NmE2LDYsMCwwLDAsMTIsMFYxMjJoOTJ2NTRhNiw2LDAsMCwwLDEyLDBWNTZBNiw2LDAsMCwwLDE0NCw1MFoiLz48L3N2Zz4=');}.icon-text-h-two{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNTAsNTZWMTc2YTYsNiwwLDAsMS0xMiwwVjEyMkg0NnY1NGE2LDYsMCwwLDEtMTIsMFY1NmE2LDYsMCwwLDEsMTIsMHY1NGg5MlY1NmE2LDYsMCwwLDEsMTIsMFptOTAsMTQ2SDIwNEwyNDAsMTU0LjA1QTMwLDMwLDAsMSwwLDE4Ny43MSwxMjYsNiw2LDAsMSwwLDE5OSwxMzBhMTgsMTgsMCwwLDEsMTQuNDctMTEuODIsMTgsMTgsMCwwLDEsMTYuODcsMjguNjZMMTg3LjIsMjA0LjRBNiw2LDAsMCwwLDE5MiwyMTRoNDhhNiw2LDAsMCwwLDAtMTJaIi8+PC9zdmc+');}.icon-text-h-three{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDYsMTgwYTM0LDM0LDAsMCwxLTU4LjI5LDIzLjc5LDYsNiwwLDAsMSw4LjU4LTguMzlBMjIsMjIsMCwxLDAsMjEyLDE1OGE2LDYsMCwwLDEtNC45Mi05LjQ0TDIyOC40OCwxMThIMTkyYTYsNiwwLDAsMSwwLTEyaDQ4YTYsNiwwLDAsMSw0LjkxLDkuNDRsLTIyLjUyLDMyLjE4QTM0LjA2LDM0LjA2LDAsMCwxLDI0NiwxODBaTTE0NCw1MGE2LDYsMCwwLDAtNiw2djU0SDQ2VjU2YTYsNiwwLDAsMC0xMiwwVjE3NmE2LDYsMCwwLDAsMTIsMFYxMjJoOTJ2NTRhNiw2LDAsMCwwLDEyLDBWNTZBNiw2LDAsMCwwLDE0NCw1MFoiLz48L3N2Zz4=');}.icon-text-h-four{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNTAsNTZWMTc2YTYsNiwwLDAsMS0xMiwwVjEyMkg0NnY1NGE2LDYsMCwwLDEtMTIsMFY1NmE2LDYsMCwwLDEsMTIsMHY1NGg5MlY1NmE2LDYsMCwwLDEsMTIsMFpNMjU0LDE4NGE2LDYsMCwwLDEtNiw2SDIzOHYxOGE2LDYsMCwwLDEtMTIsMFYxOTBIMTc2YTYsNiwwLDAsMS00Ljc0LTkuNjhsNTYtNzJBNiw2LDAsMCwxLDIzOCwxMTJ2NjZoMTBBNiw2LDAsMCwxLDI1NCwxODRabS0yOC01NC41MUwxODguMjcsMTc4SDIyNloiLz48L3N2Zz4=');}.icon-text-h-five{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDYsMTgwYTM0LDM0LDAsMCwxLTM0LDM0LDMzLjYsMzMuNiwwLDAsMS0yNC4yOS05LjgsNiw2LDAsMCwxLDguNTgtOC40QTIxLjY1LDIxLjY1LDAsMCwwLDIxMiwyMDJhMjIsMjIsMCwwLDAsMC00NCwyMS42NSwyMS42NSwwLDAsMC0xNS43MSw2LjJBNiw2LDAsMCwxLDE4Ni4wOCwxNTlsOC00OGE2LDYsMCwwLDEsNS45Mi01aDQwYTYsNiwwLDAsMSwwLDEySDIwNS4wOGwtNSwzMEEzNiwzNiwwLDAsMSwyMTIsMTQ2LDM0LDM0LDAsMCwxLDI0NiwxODBaTTE0NCw1MGE2LDYsMCwwLDAtNiw2djU0SDQ2VjU2YTYsNiwwLDAsMC0xMiwwVjE3NmE2LDYsMCwwLDAsMTIsMFYxMjJoOTJ2NTRhNiw2LDAsMCwwLDEyLDBWNTZBNiw2LDAsMCwwLDE0NCw1MFoiLz48L3N2Zz4=');}.icon-text-h-six{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTIsMTQ2YTM0LjUsMzQuNSwwLDAsMC01LjYuNDdsMTguNzUtMzEuMzlhNiw2LDAsMCwwLTEwLjMtNi4xNmwtMzIuMjUsNTQtLjIyLjQxQTM0LDM0LDAsMSwwLDIxMiwxNDZabTAsNTZhMjIsMjIsMCwxLDEsMjItMjJBMjIsMjIsMCwwLDEsMjEyLDIwMlpNMTUwLDU2VjE3NmE2LDYsMCwwLDEtMTIsMFYxMjJINDZ2NTRhNiw2LDAsMCwxLTEyLDBWNTZhNiw2LDAsMCwxLDEyLDB2NTRoOTJWNTZhNiw2LDAsMCwxLDEyLDBaIi8+PC9zdmc+');}.icon-text-italic{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xOTgsNTZhNiw2LDAsMCwxLTYsNkgxNTYuMzJsLTQ0LDEzMkgxNDRhNiw2LDAsMCwxLDAsMTJINjRhNiw2LDAsMCwxLDAtMTJIOTkuNjhsNDQtMTMySDExMmE2LDYsMCwwLDEsMC0xMmg4MEE2LDYsMCwwLDEsMTk4LDU2WiIvPjwvc3ZnPg==');}.icon-text-underline{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xOTgsMjI0YTYsNiwwLDAsMS02LDZINjRhNiw2LDAsMCwxLDAtMTJIMTkyQTYsNiwwLDAsMSwxOTgsMjI0Wm0tNzAtMjZhNjIuMDcsNjIuMDcsMCwwLDAsNjItNjJWNTZhNiw2LDAsMCwwLTEyLDB2ODBhNTAsNTAsMCwwLDEtMTAwLDBWNTZhNiw2LDAsMCwwLTEyLDB2ODBBNjIuMDcsNjIuMDcsMCwwLDAsMTI4LDE5OFoiLz48L3N2Zz4=');}.icon-text-strikethrough{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsMTI4YTYsNiwwLDAsMS02LDZIMTY5LjQ1YzExLjI4LDYuOTIsMjAuNTUsMTcuMzgsMjAuNTUsMzQsMCwyNS4zNi0yNy44MSw0Ni02Miw0NnMtNjItMjAuNjQtNjItNDZhNiw2LDAsMCwxLDEyLDBjMCwxOC43NSwyMi40MywzNCw1MCwzNHM1MC0xNS4yNSw1MC0zNGMwLTE4LjIzLTE1LjQ2LTI2LjU5LTQwLjQ3LTM0SDQwYTYsNiwwLDAsMSwwLTEySDIxNkE2LDYsMCwwLDEsMjIyLDEyOFpNNzYuMzMsMTAyYTYuMiw2LjIsMCwwLDAsMS44OC0uM0E2LDYsMCwwLDAsODIsOTQuMTMsMTkuNzQsMTkuNzQsMCwwLDEsODEuMTEsODhjMC0xOS4zOCwyMC4xNi0zNCw0Ni44OS0zNCwxOS41OCwwLDM1LjU2LDcuODEsNDIuNzQsMjAuODlhNiw2LDAsMCwwLDEwLjUyLTUuNzhDMTcxLjk0LDUyLjEzLDE1Miw0MiwxMjgsNDIsOTQuNDMsNDIsNjkuMTEsNjEuNzcsNjkuMTEsODhhMzEuNjIsMzEuNjIsMCwwLDAsMS41Miw5Ljg3QTYsNiwwLDAsMCw3Ni4zMywxMDJaIi8+PC9zdmc+');}.icon-list-dashes{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik05MCw2NGE2LDYsMCwwLDEsNi02SDIxNmE2LDYsMCwwLDEsMCwxMkg5NkE2LDYsMCwwLDEsOTAsNjRabTEyNiw1OEg5NmE2LDYsMCwwLDAsMCwxMkgyMTZhNiw2LDAsMCwwLDAtMTJabTAsNjRIOTZhNiw2LDAsMCwwLDAsMTJIMjE2YTYsNiwwLDAsMCwwLTEyWk01Niw1OEg0MGE2LDYsMCwwLDAsMCwxMkg1NmE2LDYsMCwwLDAsMC0xMlptMCw2NEg0MGE2LDYsMCwwLDAsMCwxMkg1NmE2LDYsMCwwLDAsMC0xMlptMCw2NEg0MGE2LDYsMCwwLDAsMCwxMkg1NmE2LDYsMCwwLDAsMC0xMloiLz48L3N2Zz4=');}.icon-list-numbers{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsMTI4YTYsNiwwLDAsMS02LDZIMTA0YTYsNiwwLDAsMSwwLTEySDIxNkE2LDYsMCwwLDEsMjIyLDEyOFpNMTA0LDcwSDIxNmE2LDYsMCwwLDAsMC0xMkgxMDRhNiw2LDAsMCwwLDAsMTJaTTIxNiwxODZIMTA0YTYsNiwwLDAsMCwwLDEySDIxNmE2LDYsMCwwLDAsMC0xMlpNNDIuNjgsNTMuMzcsNTAsNDkuNzFWMTA0YTYsNiwwLDAsMCwxMiwwVjQwYTYsNiwwLDAsMC04LjY4LTUuMzdsLTE2LDhhNiw2LDAsMCwwLDUuMzYsMTAuNzRaTTcyLDIwMkg1MmwyMS40OC0yOC43NEEyMS41LDIxLjUsMCwwLDAsNzcuNzksMTU3LDIxLjc1LDIxLjc1LDAsMCwwLDY5LDE0Mi4zOGEyMi44NiwyMi44NiwwLDAsMC0zMS4zNSw0LjMxLDIyLjE4LDIyLjE4LDAsMCwwLTMuMjgsNS45Miw2LDYsMCwwLDAsMTEuMjgsNC4xMSw5Ljg3LDkuODcsMCwwLDEsMS40OC0yLjY3LDEwLjc4LDEwLjc4LDAsMCwxLDE0Ljc4LTIsOS44OSw5Ljg5LDAsMCwxLDQsNi42MSw5LjY0LDkuNjQsMCwwLDEtMiw3LjI4bC0uMDYuMDlMMzUuMiwyMDQuNDFBNiw2LDAsMCwwLDQwLDIxNEg3MmE2LDYsMCwwLDAsMC0xMloiLz48L3N2Zz4=');}.icon-text-align-left{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0zNCw2NGE2LDYsMCwwLDEsNi02SDIxNmE2LDYsMCwwLDEsMCwxMkg0MEE2LDYsMCwwLDEsMzQsNjRabTYsNDZIMTY4YTYsNiwwLDAsMCwwLTEySDQwYTYsNiwwLDAsMCwwLDEyWm0xNzYsMjhINDBhNiw2LDAsMCwwLDAsMTJIMjE2YTYsNiwwLDAsMCwwLTEyWm0tNDgsNDBINDBhNiw2LDAsMCwwLDAsMTJIMTY4YTYsNiwwLDAsMCwwLTEyWiIvPjwvc3ZnPg==');}.icon-text-align-center{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0zNCw2NGE2LDYsMCwwLDEsNi02SDIxNmE2LDYsMCwwLDEsMCwxMkg0MEE2LDYsMCwwLDEsMzQsNjRaTTY0LDk4YTYsNiwwLDAsMCwwLDEySDE5MmE2LDYsMCwwLDAsMC0xMlptMTUyLDQwSDQwYTYsNiwwLDAsMCwwLDEySDIxNmE2LDYsMCwwLDAsMC0xMlptLTI0LDQwSDY0YTYsNiwwLDAsMCwwLDEySDE5MmE2LDYsMCwwLDAsMC0xMloiLz48L3N2Zz4=');}.icon-text-align-right{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0zNCw2NGE2LDYsMCwwLDEsNi02SDIxNmE2LDYsMCwwLDEsMCwxMkg0MEE2LDYsMCwwLDEsMzQsNjRaTTIxNiw5OEg4OGE2LDYsMCwwLDAsMCwxMkgyMTZhNiw2LDAsMCwwLDAtMTJabTAsNDBINDBhNiw2LDAsMCwwLDAsMTJIMjE2YTYsNiwwLDAsMCwwLTEyWm0wLDQwSDg4YTYsNiwwLDAsMCwwLDEySDIxNmE2LDYsMCwwLDAsMC0xMloiLz48L3N2Zz4=');}input[type=url],.icon-link{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzgsODguMThhNTIuNDIsNTIuNDIsMCwwLDEtMTUuNCwzNS42NmwtMzQuNzUsMzQuNzVBNTIuMjgsNTIuMjgsMCwwLDEsMTUwLjYyLDE3NGgtLjA1QTUyLjYzLDUyLjYzLDAsMCwxLDk4LDExOS45YTYsNiwwLDAsMSw2LTUuODRoLjE3YTYsNiwwLDAsMSw1LjgzLDYuMTZBNDAuNjIsNDAuNjIsMCwwLDAsMTUwLjU4LDE2MmgwYTQwLjQsNDAuNCwwLDAsMCwyOC43My0xMS45bDM0Ljc1LTM0Ljc0QTQwLjYzLDQwLjYzLDAsMCwwLDE1Ni42Myw1Ny45bC0xMSwxMWE2LDYsMCwwLDEtOC40OS04LjQ5bDExLTExYTUyLjYyLDUyLjYyLDAsMCwxLDc0LjQzLDBBNTIuODMsNTIuODMsMCwwLDEsMjM4LDg4LjE4Wm0tMTI3LjYyLDk4LjktMTEsMTFBNDAuMzYsNDAuMzYsMCwwLDEsNzAuNiwyMTBoMGE0MC42Myw0MC42MywwLDAsMS0yOC43LTY5LjM2TDc2LjYyLDEwNS45QTQwLjYzLDQwLjYzLDAsMCwxLDE0NiwxMzUuNzdhNiw2LDAsMCwwLDUuODMsNi4xNkgxNTJhNiw2LDAsMCwwLDYtNS44NEE1Mi42Myw1Mi42MywwLDAsMCw2OC4xNCw5Ny40MkwzMy4zOCwxMzIuMTZBNTIuNjMsNTIuNjMsMCwwLDAsNzAuNTYsMjIyaDBhNTIuMjYsNTIuMjYsMCwwLDAsMzcuMjItMTUuNDJsMTEtMTFhNiw2LDAsMSwwLTguNDktOC40OFoiLz48L3N2Zz4=');}.icon-file-pdf{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsMTUyYTYsNiwwLDAsMS02LDZIMTkwdjIwaDE4YTYsNiwwLDAsMSwwLDEySDE5MHYxOGE2LDYsMCwwLDEtMTIsMFYxNTJhNiw2LDAsMCwxLDYtNmgzMkE2LDYsMCwwLDEsMjIyLDE1MlpNOTAsMTcyYTI2LDI2LDAsMCwxLTI2LDI2SDU0djEwYTYsNiwwLDAsMS0xMiwwVjE1MmE2LDYsMCwwLDEsNi02SDY0QTI2LDI2LDAsMCwxLDkwLDE3MlptLTEyLDBhMTQsMTQsMCwwLDAtMTQtMTRINTR2MjhINjRBMTQsMTQsMCwwLDAsNzgsMTcyWm04NCw4YTM0LDM0LDAsMCwxLTM0LDM0SDExMmE2LDYsMCwwLDEtNi02VjE1MmE2LDYsMCwwLDEsNi02aDE2QTM0LDM0LDAsMCwxLDE2MiwxODBabS0xMiwwYTIyLDIyLDAsMCwwLTIyLTIySDExOHY0NGgxMEEyMiwyMiwwLDAsMCwxNTAsMTgwWk00MiwxMTJWNDBBMTQsMTQsMCwwLDEsNTYsMjZoOTZhNiw2LDAsMCwxLDQuMjUsMS43Nmw1Niw1NkE2LDYsMCwwLDEsMjE0LDg4djI0YTYsNiwwLDAsMS0xMiwwVjk0SDE1MmE2LDYsMCwwLDEtNi02VjM4SDU2YTIsMiwwLDAsMC0yLDJ2NzJhNiw2LDAsMCwxLTEyLDBaTTE1OCw4MmgzNS41MkwxNTgsNDYuNDhaIi8+PC9zdmc+');}.icon-file-csv{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik00NiwxODBjMCwxMi4xMyw4LjA3LDIyLDE4LDIyYTE2LjI0LDE2LjI0LDAsMCwwLDExLjY3LTUuMjgsNiw2LDAsMCwxLDguNjYsOC4zQTI4LjA2LDI4LjA2LDAsMCwxLDY0LDIxNGMtMTYuNTQsMC0zMC0xNS4yNS0zMC0zNHMxMy40Ni0zNCwzMC0zNGEyOC4wNiwyOC4wNiwwLDAsMSwyMC4zMyw5LDYsNiwwLDAsMS04LjY2LDguM0ExNi4yMywxNi4yMywwLDAsMCw2NCwxNThDNTQuMDcsMTU4LDQ2LDE2Ny44Niw0NiwxODBabTgxLjA1LTYuNzdjLTEwLjg2LTMuMTMtMTMuNDEtNC42OS0xMy03LjkxYTYuNTksNi41OSwwLDAsMSwyLjg4LTUuMDhjNS42LTMuNzksMTcuNjYtMS44MiwyMS40NS0uODRhNiw2LDAsMCwwLDMuMDYtMTEuNmMtMi0uNTMtMjAuMS01LTMxLjIxLDIuNDhhMTguNjEsMTguNjEsMCwwLDAtOC4wOCwxMy41NGMtMS44LDE0LjE5LDEyLjI2LDE4LjI1LDIxLjU3LDIwLjk0LDEyLjEyLDMuNSwxNC43OCw1LjMzLDE0LjIsOS43NmE2Ljg1LDYuODUsMCwwLDEtMyw1LjM0Yy01LjYxLDMuNzMtMTcuNDgsMS42NC0yMS4xOS42MkE2LDYsMCwwLDAsMTEwLjQ4LDIxMmE1OS40MSw1OS40MSwwLDAsMCwxNC42OCwyYzUuNDksMCwxMS41NC0uOTUsMTYuMzYtNC4xNGExOC44OSwxOC44OSwwLDAsMCw4LjMxLTEzLjgxQzE1MS44NCwxODAuMzksMTM2LjkyLDE3Ni4wOCwxMjcuMDUsMTczLjIyWm04My0yNi44OGE2LDYsMCwwLDAtNy42NywzLjYzTDE4OCwxOTAuMTUsMTczLjY1LDE1MGE2LDYsMCwxLDAtMTEuMyw0bDIwLDU2YTYsNiwwLDAsMCwxMS4zLDBsMjAtNTZBNiw2LDAsMCwwLDIxMCwxNDYuMzRaTTIxNCw4OHYyNGE2LDYsMCwxLDEtMTIsMFY5NEgxNTJhNiw2LDAsMCwxLTYtNlYzOEg1NmEyLDIsMCwwLDAtMiwydjcyYTYsNiwwLDEsMS0xMiwwVjQwQTE0LDE0LDAsMCwxLDU2LDI2aDk2YTYsNiwwLDAsMSw0LjI0LDEuNzZsNTYsNTZBNiw2LDAsMCwxLDIxNCw4OFptLTIwLjQ5LTZMMTU4LDQ2LjQ4VjgyWiIvPjwvc3ZnPg==');}.icon-file-doc{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik01MiwxNDZIMzZhNiw2LDAsMCwwLTYsNnY1NmE2LDYsMCwwLDAsNiw2SDUyYTM0LDM0LDAsMCwwLDAtNjhabTAsNTZINDJWMTU4SDUyYTIyLDIyLDAsMCwxLDAsNDRabTE2OC4xNS01LjQ2YTYsNiwwLDAsMSwuMTgsOC40OEEyOC4wNiwyOC4wNiwwLDAsMSwyMDAsMjE0Yy0xNi41NCwwLTMwLTE1LjI1LTMwLTM0czEzLjQ2LTM0LDMwLTM0YTI4LjA2LDI4LjA2LDAsMCwxLDIwLjMzLDksNiw2LDAsMCwxLTguNjYsOC4zQTE2LjIzLDE2LjIzLDAsMCwwLDIwMCwxNThjLTkuOTMsMC0xOCw5Ljg3LTE4LDIyczguMDcsMjIsMTgsMjJhMTYuMjMsMTYuMjMsMCwwLDAsMTEuNjctNS4yOEE2LDYsMCwwLDEsMjIwLjE1LDE5Ni41NFpNMTI4LDE0NmMtMTYuNTQsMC0zMCwxNS4yNS0zMCwzNHMxMy40NiwzNCwzMCwzNCwzMC0xNS4yNSwzMC0zNFMxNDQuNTQsMTQ2LDEyOCwxNDZabTAsNTZjLTkuOTMsMC0xOC05Ljg3LTE4LTIyczguMDctMjIsMTgtMjIsMTgsOS44NywxOCwyMlMxMzcuOTMsMjAyLDEyOCwyMDJaTTQ4LDExOGE2LDYsMCwwLDAsNi02VjQwYTIsMiwwLDAsMSwyLTJoOTBWODhhNiw2LDAsMCwwLDYsNmg1MHYxOGE2LDYsMCwwLDAsMTIsMFY4OGE2LDYsMCwwLDAtMS43Ni00LjI0bC01Ni01NkE2LDYsMCwwLDAsMTUyLDI2SDU2QTE0LDE0LDAsMCwwLDQyLDQwdjcyQTYsNiwwLDAsMCw0OCwxMThaTTE1OCw0Ni40OCwxOTMuNTIsODJIMTU4WiIvPjwvc3ZnPg==');}.icon-file-txt{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik00OCwxMThhNiw2LDAsMCwwLDYtNlY0MGEyLDIsMCwwLDEsMi0yaDkwVjg4YTYsNiwwLDAsMCw2LDZoNTB2MThhNiw2LDAsMCwwLDEyLDBWODhhNiw2LDAsMCwwLTEuNzYtNC4yNGwtNTYtNTZBNiw2LDAsMCwwLDE1MiwyNkg1NkExNCwxNCwwLDAsMCw0Miw0MHY3MkE2LDYsMCwwLDAsNDgsMTE4Wk0xNTgsNDYuNDgsMTkzLjUyLDgySDE1OFptLTUuMTIsMTA5TDEzNS4zNywxODBsMTcuNTEsMjQuNTFhNiw2LDAsMSwxLTkuNzYsN0wxMjgsMTkwLjMybC0xNS4xMiwyMS4xN2E2LDYsMCwwLDEtOS43Ni03TDEyMC42MywxODBsLTE3LjUxLTI0LjUxYTYsNiwwLDEsMSw5Ljc2LTdMMTI4LDE2OS42OGwxNS4xMi0yMS4xN2E2LDYsMCwwLDEsOS43Niw3Wk05MCwxNTJhNiw2LDAsMCwxLTYsNkg3MHY1MGE2LDYsMCwwLDEtMTIsMFYxNThINDRhNiw2LDAsMCwxLDAtMTJIODRBNiw2LDAsMCwxLDkwLDE1MlptMTI4LDBhNiw2LDAsMCwxLTYsNkgxOTh2NTBhNiw2LDAsMCwxLTEyLDBWMTU4SDE3MmE2LDYsMCwwLDEsMC0xMmg0MEE2LDYsMCwwLDEsMjE4LDE1MloiLz48L3N2Zz4=');}.icon-file-xls{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNTQsMjA4YTYsNiwwLDAsMS02LDZIMTIwYTYsNiwwLDAsMS02LTZWMTUyYTYsNiwwLDEsMSwxMiwwdjUwaDIyQTYsNiwwLDAsMSwxNTQsMjA4Wk05MS40OCwxNDcuMTFhNiw2LDAsMCwwLTguMzYsMS4zOUw2OCwxNjkuNjcsNTIuODgsMTQ4LjVhNiw2LDAsMSwwLTkuNzYsN0w2MC42MywxODAsNDMuMTIsMjA0LjVhNiw2LDAsMSwwLDkuNzYsN0w2OCwxOTAuMzFsMTUuMTIsMjEuMTZBNiw2LDAsMCwwLDg4LDIxNGE1LjkxLDUuOTEsMCwwLDAsMy40OC0xLjEyLDYsNiwwLDAsMCwxLjQtOC4zN0w3NS4zNywxODBsMTcuNTEtMjQuNTFBNiw2LDAsMCwwLDkxLjQ4LDE0Ny4xMVpNMTkxLDE3My4yMmMtMTAuODUtMy4xMy0xMy40MS00LjY5LTEzLTcuOTFhNi41OSw2LjU5LDAsMCwxLDIuODgtNS4wOGM1LjYtMy43OSwxNy42NS0xLjgzLDIxLjQ0LS44NGE2LDYsMCwwLDAsMy4wNy0xMS42Yy0yLS41NC0yMC4xLTUtMzEuMjEsMi40OGExOC42NCwxOC42NCwwLDAsMC04LjA4LDEzLjU0Yy0xLjgsMTQuMTksMTIuMjYsMTguMjUsMjEuNTcsMjAuOTQsMTIuMTIsMy41LDE0Ljc3LDUuMzMsMTQuMiw5Ljc2YTYuODUsNi44NSwwLDAsMS0zLDUuMzRjLTUuNjEsMy43My0xNy40OCwxLjY0LTIxLjE5LjYyQTYsNiwwLDAsMCwxNzQuNDcsMjEyYTU5LjQxLDU5LjQxLDAsMCwwLDE0LjY4LDJjNS40OSwwLDExLjU0LS45NSwxNi4zNi00LjE0YTE4Ljg5LDE4Ljg5LDAsMCwwLDguMzEtMTMuODFDMjE1LjgzLDE4MC4zOSwyMDAuOTEsMTc2LjA4LDE5MSwxNzMuMjJaTTQyLDExMlY0MEExNCwxNCwwLDAsMSw1NiwyNmg5NmE2LDYsMCwwLDEsNC4yNCwxLjc2bDU2LDU2QTYsNiwwLDAsMSwyMTQsODh2MjRhNiw2LDAsMSwxLTEyLDBWOTRIMTUyYTYsNiwwLDAsMS02LTZWMzhINTZhMiwyLDAsMCwwLTIsMnY3MmE2LDYsMCwxLDEtMTIsMFpNMTU4LDgySDE5My41TDE1OCw0Ni40OFoiLz48L3N2Zz4=');}.icon-text-b-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjgsMTU2YTIwLDIwLDAsMCwxLTIwLDIwSDk2VjEzNmg1MkEyMCwyMCwwLDAsMSwxNjgsMTU2Wk0yMjQsNDhWMjA4YTE2LDE2LDAsMCwxLTE2LDE2SDQ4YTE2LDE2LDAsMCwxLTE2LTE2VjQ4QTE2LDE2LDAsMCwxLDQ4LDMySDIwOEExNiwxNiwwLDAsMSwyMjQsNDhaTTE4NCwxNTZhMzYsMzYsMCwwLDAtMTgtMzEuMTVBMzYsMzYsMCwwLDAsMTQwLDY0SDg4YTgsOCwwLDAsMC04LDhWMTg0YTgsOCwwLDAsMCw4LDhoNjBBMzYsMzYsMCwwLDAsMTg0LDE1NlptLTI0LTU2YTIwLDIwLDAsMCwwLTIwLTIwSDk2djQwaDQ0QTIwLDIwLDAsMCwwLDE2MCwxMDBaIi8+PC9zdmc+');}
assets/css/icons.css
New file
@@ -0,0 +1 @@
.icon-google-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjQsMTI4YTk2LDk2LDAsMSwxLTIxLjk1LTYxLjA5LDgsOCwwLDEsMS0xMi4zMywxMC4xOEE4MCw4MCwwLDEsMCwyMDcuNiwxMzZIMTI4YTgsOCwwLDAsMSwwLTE2aDg4QTgsOCwwLDAsMSwyMjQsMTI4WiIvPjwvc3ZnPg==');}.icon-apple-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjMuMywxNjkuNTlhOC4wNyw4LjA3LDAsMCwwLTIuOC0zLjRDMjAzLjUzLDE1NC41MywyMDAsMTM0LjY0LDIwMCwxMjBjMC0xNy42NywxMy40Ny0zMy4wNiwyMS41LTQwLjY3YTgsOCwwLDAsMCwwLTExLjYyQzIwOC44Miw1NS43NCwxODcuODIsNDgsMTY4LDQ4YTcyLjIsNzIuMiwwLDAsMC00MCwxMi4xMyw3MS41Niw3MS41NiwwLDAsMC05MC43MSw5LjA5QTc0LjYzLDc0LjYzLDAsMCwwLDE2LDEyMy40YTEyNy4wNiwxMjcuMDYsMCwwLDAsNDAuMTQsODkuNzNBMzkuOCwzOS44LDAsMCwwLDgzLjU5LDIyNGg4Ny42OGEzOS44NCwzOS44NCwwLDAsMCwyOS4xMi0xMi41NywxMjUsMTI1LDAsMCwwLDE3LjgyLTI0LjZDMjI1LjIzLDE3NCwyMjQuMzMsMTcyLDIyMy4zLDE2OS41OVptLTM0LjYzLDMwLjk0YTIzLjc2LDIzLjc2LDAsMCwxLTE3LjQsNy40N0g4My41OWEyMy44MiwyMy44MiwwLDAsMS0xNi40NC02LjUxQTExMS4xNCwxMTEuMTQsMCwwLDEsMzIsMTIzLDU4LjUsNTguNSwwLDAsMSw0OC42NSw4MC40Nyw1NC44MSw1NC44MSwwLDAsMSw4OCw2NGguNzhBNTUuNDUsNTUuNDUsMCwwLDEsMTIzLDc2LjI4YTgsOCwwLDAsMCwxMCwwQTU1LjQ0LDU1LjQ0LDAsMCwxLDE2OCw2NGE3MC42NCw3MC42NCwwLDAsMSwzNiwxMC4zNWMtMTMsMTQuNTItMjAsMzAuNDctMjAsNDUuNjUsMCwyMy43Nyw3LjY0LDQyLjczLDIyLjE4LDU1LjNBMTA1LjgyLDEwNS44MiwwLDAsMSwxODguNjcsMjAwLjUzWk0xMjguMjMsMzBBNDAsNDAsMCwwLDEsMTY3LDBoMWE4LDgsMCwwLDEsMCwxNmgtMWEyNCwyNCwwLDAsMC0yMy4yNCwxOCw4LDgsMCwxLDEtMTUuNS00WiIvPjwvc3ZnPg==');}.icon-check-circle{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNzMuNjYsOTguMzRhOCw4LDAsMCwxLDAsMTEuMzJsLTU2LDU2YTgsOCwwLDAsMS0xMS4zMiwwbC0yNC0yNGE4LDgsMCwwLDEsMTEuMzItMTEuMzJMMTEyLDE0OC42OWw1MC4zNC01MC4zNUE4LDgsMCwwLDEsMTczLjY2LDk4LjM0Wk0yMzIsMTI4QTEwNCwxMDQsMCwxLDEsMTI4LDI0LDEwNC4xMSwxMDQuMTEsMCwwLDEsMjMyLDEyOFptLTE2LDBhODgsODgsMCwxLDAtODgsODhBODguMSw4OC4xLDAsMCwwLDIxNiwxMjhaIi8+PC9zdmc+');}details.all-filters summary::after,.icon-faders-horizontal{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNzYsODBhOCw4LDAsMCwxLDgtOGgzMmE4LDgsMCwwLDEsMCwxNkgxODRBOCw4LDAsMCwxLDE3Niw4MFpNNDAsODhIMTQ0djE2YTgsOCwwLDAsMCwxNiwwVjU2YTgsOCwwLDAsMC0xNiwwVjcySDQwYTgsOCwwLDAsMCwwLDE2Wm0xNzYsODBIMTIwYTgsOCwwLDAsMCwwLDE2aDk2YTgsOCwwLDAsMCwwLTE2Wk04OCwxNDRhOCw4LDAsMCwwLTgsOHYxNkg0MGE4LDgsMCwwLDAsMCwxNkg4MHYxNmE4LDgsMCwwLDAsMTYsMFYxNTJBOCw4LDAsMCwwLDg4LDE0NFoiLz48L3N2Zz4=');}.icon-cloud-slash{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik01My45MiwzNC42MkE4LDgsMCwxLDAsNDIuMDgsNDUuMzhMODEuMzIsODguNTVsLS4wNi4xMkE2NSw2NSwwLDAsMCw3Miw4OGE2NCw2NCwwLDAsMCwwLDEyOGg4OGE4Ny4zNCw4Ny4zNCwwLDAsMCwzMS44LTUuOTNsMTAuMjgsMTEuMzFhOCw4LDAsMSwwLDExLjg0LTEwLjc2Wk0xNjAsMjAwSDcyYTQ4LDQ4LDAsMCwxLDAtOTZjMS4xLDAsMi4yLDAsMy4zLjEyQTg4LjQsODguNCwwLDAsMCw3MiwxMjhhOCw4LDAsMCwwLDE2LDAsNzIuMjUsNzIuMjUsMCwwLDEsNS4wNi0yNi41NGw4Nyw5NS43QTcxLjY2LDcxLjY2LDAsMCwxLDE2MCwyMDBabTg4LTcyYTg3Ljg5LDg3Ljg5LDAsMCwxLTIyLjM1LDU4LjYxQTgsOCwwLDAsMSwyMTMuNzEsMTc2LDcyLDcyLDAsMCwwLDExNy4zNyw3MGE4LDgsMCwwLDEtOS40OC0xMi44OUE4OCw4OCwwLDAsMSwyNDgsMTI4WiIvPjwvc3ZnPg==');}.icon-exclamation-mark{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNDQsMjAwYTE2LDE2LDAsMSwxLTE2LTE2QTE2LDE2LDAsMCwxLDE0NCwyMDBabS0xNi00MGE4LDgsMCwwLDAsOC04VjQ4YTgsOCwwLDAsMC0xNiwwVjE1MkE4LDgsMCwwLDAsMTI4LDE2MFoiLz48L3N2Zz4=');}.icon-cloud-arrow-down{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDgsMTI4YTg3LjM0LDg3LjM0LDAsMCwxLTE3LjYsNTIuODEsOCw4LDAsMSwxLTEyLjgtOS42MkE3MS4zNCw3MS4zNCwwLDAsMCwyMzIsMTI4YTcyLDcyLDAsMCwwLTE0NCwwLDgsOCwwLDAsMS0xNiwwLDg4LDg4LDAsMCwxLDMuMjktMjMuODhDNzQuMiwxMDQsNzMuMSwxMDQsNzIsMTA0YTQ4LDQ4LDAsMCwwLDAsOTZIOTZhOCw4LDAsMCwxLDAsMTZINzJBNjQsNjQsMCwxLDEsODEuMjksODguNjgsODgsODgsMCwwLDEsMjQ4LDEyOFptLTY5LjY2LDQyLjM0TDE2MCwxODguNjlWMTI4YTgsOCwwLDAsMC0xNiwwdjYwLjY5bC0xOC4zNC0xOC4zNWE4LDgsMCwwLDAtMTEuMzIsMTEuMzJsMzIsMzJhOCw4LDAsMCwwLDExLjMyLDBsMzItMzJhOCw4LDAsMCwwLTExLjMyLTExLjMyWiIvPjwvc3ZnPg==');}details summary::after,.icon-caret-down{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTMuNjYsMTAxLjY2bC04MCw4MGE4LDgsMCwwLDEtMTEuMzIsMGwtODAtODBBOCw4LDAsMCwxLDUzLjY2LDkwLjM0TDEyOCwxNjQuNjlsNzQuMzQtNzQuMzVhOCw4LDAsMCwxLDExLjMyLDExLjMyWiIvPjwvc3ZnPg==');}.icon-cloud-arrow-up{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNzguMzQsMTY1LjY2LDE2MCwxNDcuMzFWMjA4YTgsOCwwLDAsMS0xNiwwVjE0Ny4zMWwtMTguMzQsMTguMzVhOCw4LDAsMCwxLTExLjMyLTExLjMybDMyLTMyYTgsOCwwLDAsMSwxMS4zMiwwbDMyLDMyYTgsOCwwLDAsMS0xMS4zMiwxMS4zMlpNMTYwLDQwQTg4LjA4LDg4LjA4LDAsMCwwLDgxLjI5LDg4LjY4LDY0LDY0LDAsMSwwLDcyLDIxNmg0MGE4LDgsMCwwLDAsMC0xNkg3MmE0OCw0OCwwLDAsMSwwLTk2YzEuMSwwLDIuMiwwLDMuMjkuMTJBODgsODgsMCwwLDAsNzIsMTI4YTgsOCwwLDAsMCwxNiwwLDcyLDcyLDAsMSwxLDEwMC44LDY2LDgsOCwwLDAsMCwzLjIsMTUuMzQsNy45LDcuOSwwLDAsMCwzLjItLjY4QTg4LDg4LDAsMCwwLDE2MCw0MFoiLz48L3N2Zz4=');}.icon-cloud-check{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDBBODguMDksODguMDksMCwwLDAsODEuMjksODguNjcsNjQsNjQsMCwxLDAsNzIsMjE2aDg4YTg4LDg4LDAsMCwwLDAtMTc2Wm0wLDE2MEg3MmE0OCw0OCwwLDAsMSwwLTk2YzEuMSwwLDIuMiwwLDMuMjkuMTFBODgsODgsMCwwLDAsNzIsMTI4YTgsOCwwLDAsMCwxNiwwLDcyLDcyLDAsMSwxLDcyLDcyWm0zNy42Ni05My42NmE4LDgsMCwwLDEsMCwxMS4zMmwtNDgsNDhhOCw4LDAsMCwxLTExLjMyLDBsLTI0LTI0YTgsOCwwLDAsMSwxMS4zMi0xMS4zMkwxNDQsMTQ4LjY5bDQyLjM0LTQyLjM1QTgsOCwwLDAsMSwxOTcuNjYsMTA2LjM0WiIvPjwvc3ZnPg==');}.icon-cloud-warning{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDBBODguMDksODguMDksMCwwLDAsODEuMjksODguNjcsNjQsNjQsMCwxLDAsNzIsMjE2aDg4YTg4LDg4LDAsMCwwLDAtMTc2Wm0wLDE2MEg3MmE0OCw0OCwwLDAsMSwwLTk2YzEuMSwwLDIuMiwwLDMuMjkuMTFBODgsODgsMCwwLDAsNzIsMTI4YTgsOCwwLDAsMCwxNiwwLDcyLDcyLDAsMSwxLDcyLDcyWm0tOC03MlY4OGE4LDgsMCwwLDEsMTYsMHY0MGE4LDgsMCwwLDEtMTYsMFptMjAsMzZhMTIsMTIsMCwxLDEtMTItMTJBMTIsMTIsMCwwLDEsMTcyLDE2NFoiLz48L3N2Zz4=');}.icon-syncing{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0iY3VycmVudENvbG9yIiB2aWV3Qm94PSIwIDAgMjU2IDI1NiI+PHBhdGggaWQ9InJlZnJlc2giIGQ9Ik0xNjAuMDQ3IDEyMi44NzVhMzAuNzg0IDMwLjc4NCAwIDAgMC0yMS43NSA4Ljc5N2MtMi44NDIgMy4wMDMtLjQ2NyA0Ljk3MSAxLjMxMiAzLjE1NiAxMS4wNDMtMTAuNzg2IDI4LjcxLTEwLjY4IDM5LjYyNS4yMzRsNy4yMDMgNy4yMDRoLTEyLjg3NWMtMy4zNDcuMDA4LTMuMTY1IDMuODc1IDAgMy44NzVoMTYuMTFjMi4wNjIgMCAyLjU0LTEuNDE4IDIuNTYyLTQuOTdsLjA5NC0xNC45MjFjLjAyLTMuMjktMy40MzctMy4xNjUtMy40MzcgMHYxMi44NmwtNy4yMDMtNy4xODhhMzAuNzY4IDMwLjc2OCAwIDAgMC0yMS42NDEtOS4wNDd6bS0yOS41OTQgMzkuNzk3Yy0yLjA2MiAwLTIuNTI0IDEuNDAyLTIuNTQ3IDQuOTUzbC0uMDk0IDE0LjkyMmMtLjAyIDMuMjkgMy40MjIgMy4xNjQgMy40MjIgMHYtMTIuODZsNy4yMDMgNy4yMDRjMTEuOTU2IDExLjk1NSAzMS4zMTIgMTIuMDY0IDQzLjQwNy4yNSAyLjg0Mi0zLjAwMy40NTEtNC45ODgtMS4zMjgtMy4xNzItMTEuMDQzIDEwLjc4Ni0yOC43MSAxMC42OC0zOS42MjUtLjIzNWwtNy4xODgtNy4yMDNoMTIuODZjMy4zNDctLjAwOCAzLjE2NS0zLjg2IDAtMy44NmgtMTYuMTF6Ii8+PHBhdGggZD0iTTE2MCA0NGE4NC4xMSA4NC4xMSAwIDAgMC03Ni40MSA0OS4xMkE2MC43MSA2MC43MSAwIDAgMCA3MiA5MmE2MCA2MCAwIDAgMCAwIDEyMGg4OGE4NCA4NCAwIDAgMCAwLTE2OFptMCAxNjBINzJhNTIgNTIgMCAxIDEgOC41NS0xMDMuM0E4My42NiA4My42NiAwIDAgMCA3NiAxMjhhNCA0IDAgMCAwIDggMCA3NiA3NiAwIDEgMSA3NiA3NloiLz48L3N2Zz4=');}.icon-cloud-x{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDBBODguMDksODguMDksMCwwLDAsODEuMjksODguNjcsNjQsNjQsMCwxLDAsNzIsMjE2aDg4YTg4LDg4LDAsMCwwLDAtMTc2Wm0wLDE2MEg3MmE0OCw0OCwwLDAsMSwwLTk2YzEuMSwwLDIuMiwwLDMuMjkuMTFBODgsODgsMCwwLDAsNzIsMTI4YTgsOCwwLDAsMCwxNiwwLDcyLDcyLDAsMSwxLDcyLDcyWm0yOS42Ni04Mi4zNEwxNzEuMzEsMTM2bDE4LjM1LDE4LjM0YTgsOCwwLDAsMS0xMS4zMiwxMS4zMkwxNjAsMTQ3LjMxbC0xOC4zNCwxOC4zNWE4LDgsMCwwLDEtMTEuMzItMTEuMzJMMTQ4LjY5LDEzNmwtMTguMzUtMTguMzRhOCw4LDAsMCwxLDExLjMyLTExLjMyTDE2MCwxMjQuNjlsMTguMzQtMTguMzVhOCw4LDAsMCwxLDExLjMyLDExLjMyWiIvPjwvc3ZnPg==');}.icon-arrows-clockwise{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjQsNDhWOTZhOCw4LDAsMCwxLTgsOEgxNjhhOCw4LDAsMCwxLDAtMTZoMjguNjlMMTgyLjA2LDczLjM3YTc5LjU2LDc5LjU2LDAsMCwwLTU2LjEzLTIzLjQzaC0uNDVBNzkuNTIsNzkuNTIsMCwwLDAsNjkuNTksNzIuNzEsOCw4LDAsMCwxLDU4LjQxLDYxLjI3YTk2LDk2LDAsMCwxLDEzNSwuNzlMMjA4LDc2LjY5VjQ4YTgsOCwwLDAsMSwxNiwwWk0xODYuNDEsMTgzLjI5YTgwLDgwLDAsMCwxLTExMi40Ny0uNjZMNTkuMzEsMTY4SDg4YTgsOCwwLDAsMCwwLTE2SDQwYTgsOCwwLDAsMC04LDh2NDhhOCw4LDAsMCwwLDE2LDBWMTc5LjMxbDE0LjYzLDE0LjYzQTk1LjQzLDk1LjQzLDAsMCwwLDEzMCwyMjIuMDZoLjUzYTk1LjM2LDk1LjM2LDAsMCwwLDY3LjA3LTI3LjMzLDgsOCwwLDAsMC0xMS4xOC0xMS40NFoiLz48L3N2Zz4=');}.icon-share-fat{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzcuNjYsMTA2LjM1bC04MC04MEE4LDgsMCwwLDAsMTQ0LDMyVjcyLjM1Yy0yNS45NCwyLjIyLTU0LjU5LDE0LjkyLTc4LjE2LDM0LjkxLTI4LjM4LDI0LjA4LTQ2LjA1LDU1LjExLTQ5Ljc2LDg3LjM3YTEyLDEyLDAsMCwwLDIwLjY4LDkuNThoMGMxMS0xMS43MSw1MC4xNC00OC43NCwxMDcuMjQtNTJWMTkyYTgsOCwwLDAsMCwxMy42Niw1LjY1bDgwLTgwQTgsOCwwLDAsMCwyMzcuNjYsMTA2LjM1Wk0xNjAsMTcyLjY5VjE0NGE4LDgsMCwwLDAtOC04Yy0yOC4wOCwwLTU1LjQzLDcuMzMtODEuMjksMjEuOGExOTYuMTcsMTk2LjE3LDAsMCwwLTM2LjU3LDI2LjUyYzUuOC0yMy44NCwyMC40Mi00Ni41MSw0Mi4wNS02NC44NkM5OS40MSw5OS43NywxMjcuNzUsODgsMTUyLDg4YTgsOCwwLDAsMCw4LThWNTEuMzJMMjIwLjY5LDExMloiLz48L3N2Zz4=');}.icon-trash{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTYsNDhIMTc2VjQwYTI0LDI0LDAsMCwwLTI0LTI0SDEwNEEyNCwyNCwwLDAsMCw4MCw0MHY4SDQwYTgsOCwwLDAsMCwwLDE2aDhWMjA4YTE2LDE2LDAsMCwwLDE2LDE2SDE5MmExNiwxNiwwLDAsMCwxNi0xNlY2NGg4YTgsOCwwLDAsMCwwLTE2Wk05Niw0MGE4LDgsMCwwLDEsOC04aDQ4YTgsOCwwLDAsMSw4LDh2OEg5NlptOTYsMTY4SDY0VjY0SDE5MlpNMTEyLDEwNHY2NGE4LDgsMCwwLDEtMTYsMFYxMDRhOCw4LDAsMCwxLDE2LDBabTQ4LDB2NjRhOCw4LDAsMCwxLTE2LDBWMTA0YTgsOCwwLDAsMSwxNiwwWiIvPjwvc3ZnPg==');}.icon-star{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzkuMTgsOTcuMjZBMTYuMzgsMTYuMzgsMCwwLDAsMjI0LjkyLDg2bC01OS00Ljc2TDE0My4xNCwyNi4xNWExNi4zNiwxNi4zNiwwLDAsMC0zMC4yNywwTDkwLjExLDgxLjIzLDMxLjA4LDg2YTE2LjQ2LDE2LjQ2LDAsMCwwLTkuMzcsMjguODZsNDUsMzguODNMNTMsMjExLjc1YTE2LjM4LDE2LjM4LDAsMCwwLDI0LjUsMTcuODJMMTI4LDE5OC40OWw1MC41MywzMS4wOEExNi40LDE2LjQsMCwwLDAsMjAzLDIxMS43NWwtMTMuNzYtNTguMDcsNDUtMzguODNBMTYuNDMsMTYuNDMsMCwwLDAsMjM5LjE4LDk3LjI2Wm0tMTUuMzQsNS40Ny00OC43LDQyYTgsOCwwLDAsMC0yLjU2LDcuOTFsMTQuODgsNjIuOGEuMzcuMzcsMCwwLDEtLjE3LjQ4Yy0uMTguMTQtLjIzLjExLS4zOCwwbC01NC43Mi0zMy42NWE4LDgsMCwwLDAtOC4zOCwwTDY5LjA5LDIxNS45NGMtLjE1LjA5LS4xOS4xMi0uMzgsMGEuMzcuMzcsMCwwLDEtLjE3LS40OGwxNC44OC02Mi44YTgsOCwwLDAsMC0yLjU2LTcuOTFsLTQ4LjctNDJjLS4xMi0uMS0uMjMtLjE5LS4xMy0uNXMuMTgtLjI3LjMzLS4yOWw2My45Mi01LjE2QTgsOCwwLDAsMCwxMDMsOTEuODZsMjQuNjItNTkuNjFjLjA4LS4xNy4xMS0uMjUuMzUtLjI1cy4yNy4wOC4zNS4yNUwxNTMsOTEuODZhOCw4LDAsMCwwLDYuNzUsNC45Mmw2My45Miw1LjE2Yy4xNSwwLC4yNCwwLC4zMy4yOVMyMjQsMTAyLjYzLDIyMy44NCwxMDIuNzNaIi8+PC9zdmc+');}.icon-alphabetical{--icon:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIGZpbGw9ImN1cnJlbnRDb2xvciIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTgzLjc4IDE4NC4wNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtNTkuNTg2IDY5Ljc0MmMtMC44NTEzIDAtMS40NjEgMC4xOTY1Ni0xLjgzNjYgMC41OTcxOC0wLjM1MDU0IDAuMzc1NTgtMC41Mjk1OCAxLjAyMjktMC41Mjk1OCAxLjk0OTNzMC4xNzkwMyAxLjU5MzcgMC41Mjk1OCAxLjk5NDRjMC4zNzU1OCAwLjM3NTU4IDAuOTg1MjkgMC41NjMzOCAxLjgzNjYgMC41NjMzOGg3LjAxOTdsLTEyLjQyOCAzNC4zNjZoLTIuMTA3Yy0wLjg1MTMgMC0xLjQ2MSAwLjE5NjU2LTEuODM2NiAwLjU5NzE4LTAuMzUwNTQgMC4zNzU1OC0wLjUyOTU3IDEuMDM0MS0wLjUyOTU3IDEuOTYwNiAwIDAuOTI2NDQgMC4xNzkwMyAxLjU4MjUgMC41Mjk1NyAxLjk4MyAwLjM3NTU4IDAuMzc1NTkgMC45ODUyOSAwLjU2MzM4IDEuODM2NiAwLjU2MzM4aDEyLjU1MmMwLjg1MTMgMCAxLjQ1MjItMC4xODc3OSAxLjgwMjgtMC41NjMzOCAwLjM3NTU4LTAuNDAwNjIgMC41NjMzNy0xLjA1NjYgMC41NjMzNy0xLjk4MyAwLTAuOTI2NDUtMC4xODc3OS0xLjU4NS0wLjU2MzM3LTEuOTYwNi0wLjM1MDU0LTAuNDAwNjItMC45NTE0Ny0wLjU5NzE4LTEuODAyOC0wLjU5NzE4aC00LjU1MjFsMy4xMjExLTguOTM0OWgxOC4yMmwzLjA3NiA4LjkzNDloLTUuMDcwNGMtMC44NTEzIDAtMS40NjEgMC4xOTY1Ni0xLjgzNjYgMC41OTcxOC0wLjM1MDU0IDAuMzc1NTgtMC41Mjk1OCAxLjAzNDEtMC41Mjk1OCAxLjk2MDYgMCAwLjkyNjQ0IDAuMTc5MDMgMS41ODI1IDAuNTI5NTggMS45ODMgMC4zNzU1OCAwLjM3NTU5IDAuOTg1MjkgMC41NjMzOCAxLjgzNjYgMC41NjMzOGgxMy4yOTZjMC44NTEzIDAgMS40NTIyLTAuMTg3NzkgMS44MDI4LTAuNTYzMzggMC4zNzU1OC0wLjQwMDYyIDAuNTYzMzctMS4wNTY2IDAuNTYzMzctMS45ODMgMC0wLjkyNjQ1LTAuMTg3NzktMS41ODUtMC41NjMzNy0xLjk2MDYtMC4zNTA1NC0wLjQwMDYyLTAuOTUxNDctMC41OTcxOC0xLjgwMjgtMC41OTcxOGgtMi4yODczbC0xMy4yNjItMzcuMDM2Yy0wLjMwMDQ3LTAuODUxMy0wLjc1OTk0LTEuNDYxLTEuMzg1OS0xLjgzNjYtMC42MDA5My0wLjQwMDYyLTEuNDA5Ny0wLjU5NzE4LTIuNDExMy0wLjU5NzE4em00NC4xNDYgMGMtMC44NTEzIDAtMS40NzIzIDAuMTk2NTYtMS44NDc4IDAuNTk3MTgtMC4zNTA1NSAwLjM3NTU4LTAuNTE4MyAxLjAyMjktMC41MTgzIDEuOTQ5M3YxMS45MWMwIDAuODc2MzMgMC4yMDUzMiAxLjUwNjEgMC42MzA5OCAxLjg4MTcgMC40MjU2NiAwLjM3NTU4IDEuMTU5MyAwLjU2MzM3IDIuMTg1OSAwLjU2MzM3czEuNzQ5LTAuMTg3NzkgMi4xNzQ3LTAuNTYzMzdjMC40MjU2OS0wLjM3NTU4IDAuNjQyMjYtMS4wMDUzIDAuNjQyMjYtMS44ODE3di05LjM1MTdoMTguODUxbC0yNC43NTQgMzUuMzAxYy0wLjM1MDU0IDAuNTI1ODItMC41MTgzMSAxLjA3MTctMC41MTgzMSAxLjYyMjYgMCAwLjkyNjQ1IDAuMTY3NzcgMS41ODI1IDAuNTE4MzEgMS45ODMxIDAuMzc1NTggMC4zNzU1OCAwLjk5NjU0IDAuNTYzMzggMS44NDc4IDAuNTYzMzhoMjguNzY2YzAuODUxMyAwIDEuNDUyMi0wLjE4NzggMS44MDI4LTAuNTYzMzggMC4zNzU1OC0wLjQwMDYyIDAuNTYzMzgtMS4wNTY2IDAuNTYzMzgtMS45ODMxdi0xMi42NjVjMC0wLjg3NjMzLTAuMjE2NTgtMS40OTQ4LTAuNjQyMjUtMS44NzA0LTAuNDI1NjYtMC4zNzU1OC0xLjE0OC0wLjU2MzM4LTIuMTc0Ny0wLjU2MzM4LTEuMDI2NiAwLTEuNzQ5IDAuMTg3NzktMi4xNzQ3IDAuNTYzMzgtMC40MjU2NiAwLjM3NTU4LTAuNjQyMjQgMC45OTQwMi0wLjY0MjI0IDEuODcwNHYxMC4xMDdoLTE5Ljk3OGwyNC45MDEtMzUuNDU5YzAuMjUwMzktMC4zNTA1NCAwLjM3MTgzLTAuODM4ODMgMC4zNzE4My0xLjQ2NDggMC0wLjkyNjQ1LTAuMTg3OC0xLjU3MzctMC41NjMzOC0xLjk0OTMtMC4zNTA1NS0wLjQwMDYyLTAuOTUxNDctMC41OTcxOC0xLjgwMjgtMC41OTcxOHptLTMxLjc1MiA1LjEwNDJoMC43MDk4NWw2Ljk4NTkgMjAuMzE1aC0xNC43MTZ6bS0zNy43MjMtNDkuMTgzYy00LjczNDIgMC04LjYzMTMgMy44OTctOC42MzEzIDguNjMxM3YxMTUuNDdjMCA0LjczNDIgMy44OTcgOC42MzEzIDguNjMxMyA4LjYzMTNoMTE1LjI2YzQuNzM0MiAwIDguNjQyMS0zLjg5NyA4LjY0MjEtOC42MzEzdi0xMTUuNDdjMC00LjczNDItMy45MDgyLTguNjMxMy04LjY0MjEtOC42MzEzem0wIDUuNzI0aDExNS4yNmMxLjY1OCAwIDIuOTA3IDEuMjQ5MSAyLjkwNyAyLjkwNzF2MTE1LjQ3YzAgMS42NTgtMS4yNDkxIDIuOTA3LTIuOTA3IDIuOTA3aC0xMTUuMjZjLTEuNjU4IDAtMi44OTU4LTEuMjQ5MS0yLjg5NTgtMi45MDd2LTExNS40N2MwLTEuNjU4IDEuMjM3OC0yLjkwNzEgMi44OTU4LTIuOTA3MXoiIGZpbGw9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIuNzIxMTQiLz48L3N2Zz4=');}.icon-shopping-cart-simple{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMDQsMjE2YTE2LDE2LDAsMSwxLTE2LTE2QTE2LDE2LDAsMCwxLDEwNCwyMTZabTg4LTE2YTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE5MiwyMDBaTTIzOS43MSw3NC4xNGwtMjUuNjQsOTIuMjhBMjQuMDYsMjQuMDYsMCwwLDEsMTkxLDE4NEg5Mi4xNkEyNC4wNiwyNC4wNiwwLDAsMSw2OSwxNjYuNDJMMzMuOTIsNDBIMTZhOCw4LDAsMCwxLDAtMTZINDBhOCw4LDAsMCwxLDcuNzEsNS44Nkw1Ny4xOSw2NEgyMzJhOCw4LDAsMCwxLDcuNzEsMTAuMTRaTTIyMS40Nyw4MEg2MS42NGwyMi44MSw4Mi4xNEE4LDgsMCwwLDAsOTIuMTYsMTY4SDE5MWE4LDgsMCwwLDAsNy43MS01Ljg2WiIvPjwvc3ZnPg==');}.icon-star-half-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzkuMTgsOTcuMjZBMTYuMzgsMTYuMzgsMCwwLDAsMjI0LjkyLDg2bC01OS00Ljc2TDE0My4xNCwyNi4xNWExNi4zNiwxNi4zNiwwLDAsMC0zMC4yNywwTDkwLjExLDgxLjIzLDMxLjA4LDg2YTE2LjQ2LDE2LjQ2LDAsMCwwLTkuMzcsMjguODZsNDUsMzguODNMNTMsMjExLjc1YTE2LjQsMTYuNCwwLDAsMCwyNC41LDE3LjgyTDEyOCwxOTguNDlsNTAuNTMsMzEuMDhBMTYuNCwxNi40LDAsMCwwLDIwMywyMTEuNzVsLTEzLjc2LTU4LjA3LDQ1LTM4LjgzQTE2LjQzLDE2LjQzLDAsMCwwLDIzOS4xOCw5Ny4yNlptLTE1LjM0LDUuNDctNDguNyw0MmE4LDgsMCwwLDAtMi41Niw3LjkxbDE0Ljg4LDYyLjhhLjM3LjM3LDAsMCwxLS4xNy40OGMtLjE4LjE0LS4yMy4xMS0uMzgsMGwtNTQuNzItMzMuNjVBOCw4LDAsMCwwLDEyOCwxODEuMVYzMmMuMjQsMCwuMjcuMDguMzUuMjZMMTUzLDkxLjg2YTgsOCwwLDAsMCw2Ljc1LDQuOTJsNjMuOTEsNS4xNmMuMTYsMCwuMjUsMCwuMzQuMjlTMjI0LDEwMi42MywyMjMuODQsMTAyLjczWiIvPjwvc3ZnPg==');}.icon-star-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzQuMjksMTE0Ljg1bC00NSwzOC44M0wyMDMsMjExLjc1YTE2LjQsMTYuNCwwLDAsMS0yNC41LDE3LjgyTDEyOCwxOTguNDksNzcuNDcsMjI5LjU3QTE2LjQsMTYuNCwwLDAsMSw1MywyMTEuNzVsMTMuNzYtNTguMDctNDUtMzguODNBMTYuNDYsMTYuNDYsMCwwLDEsMzEuMDgsODZsNTktNC43NiwyMi43Ni01NS4wOGExNi4zNiwxNi4zNiwwLDAsMSwzMC4yNywwbDIyLjc1LDU1LjA4LDU5LDQuNzZhMTYuNDYsMTYuNDYsMCwwLDEsOS4zNywyOC44NloiLz48L3N2Zz4=');}
assets/icons/full-logo.svg
New file
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="svg5" width="32" height="32" viewBox="0 0 32 32" style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" version="1.1"><path id="Martian" d="M3.58 18.13v5.75H3V20.9l-.45 1.97h-.18c-.34 0-.4-.34-.44-.47l-.35-1.5v2.97H1v-5.75h.36c.23 0 .26.2.26.2l.69 3.31.65-3.3c0-.03.04-.21.26-.21Zm4.72 5.75h-.65l-.51-3.96-.52 3.96h-.65l.87-5.75h.32c.25 0 .29.15.31.3zm4.49 0h-.6v-2.1c0-.29-.14-.38-.3-.38h-.3v2.48h-.6v-5.75h1.08c.39 0 .72.32.72.72v1.77s.02.45-.22.51c.23.12.22.54.22.54zm-1.2-3.04h.3c.16 0 .3-.06.3-.32v-1.55c0-.21-.14-.3-.3-.3h-.3zm6.4-2.71-.2.42c-.03.08-.12.16-.31.16h-.46c-.08 0-.14.06-.15.14v5.03h-.42c-.14 0-.16-.09-.16-.13v-5.04h-.83v-.4c0-.1.08-.18.18-.18zm2.65 0H21c.18 0 .24.13.24.23v5.52h-.42c-.14 0-.16-.09-.17-.13zm5.82 5.75h-.65l-.52-3.96-.52 3.96h-.65l.87-5.75h.33c.24 0 .28.15.3.3zM31 18.13v5.75h-.27c-.32 0-.37-.26-.4-.37l-.63-2.85v3.22h-.59v-5.75h.27c.33 0 .39.15.42.32l.6 2.99v-3.31z" style="fill:#15a54b;stroke-width:.0996171"/><path id="Infotech" d="M6.57 26.1h.17v1.73h-.17Zm2.47.82-.2-.54.02.56v.89h-.18v-1.74h.2l.37.92.2.54a6.4 6.4 0 0 1-.02-.57v-.89h.18v1.74h-.2zm2.51.9V26.1h.7v.16h-.52v.66h.49v.15h-.5v.77zm3.34-.37a.4.4 0 0 1-.11.3c-.08.07-.18.1-.33.1-.14 0-.25-.03-.32-.1a.4.4 0 0 1-.11-.3v-.98a.4.4 0 0 1 .1-.3c.08-.07.19-.1.33-.1.15 0 .25.03.33.1a.4.4 0 0 1 .1.3zm-.18-.97c0-.17-.08-.25-.26-.25-.17 0-.26.08-.26.25v.96c0 .17.09.26.26.26.18 0 .26-.09.26-.26zm2.74-.23h-.32v1.58h-.18v-1.58h-.33v-.16h.83zm2.51 1.58h-.75v-1.74h.75v.16h-.57v.63h.5v.15h-.5v.64h.57zm2.67-.51v.13a.4.4 0 0 1-.11.3c-.08.07-.18.1-.33.1-.14 0-.25-.03-.32-.1a.4.4 0 0 1-.11-.3v-.98a.4.4 0 0 1 .1-.3c.08-.07.19-.1.33-.1.15 0 .25.03.33.1a.4.4 0 0 1 .1.3v.14h-.17v-.13c0-.17-.08-.25-.26-.25-.17 0-.26.08-.26.25v.96c0 .17.09.26.26.26.18 0 .26-.09.26-.26v-.12zm2.8-1.23v1.74h-.17v-.78h-.57v.78h-.17v-1.74h.17v.8h.57v-.8z" style="fill:#231f20;stroke-width:.0996171"/><path id="spaceship-loop-black" d="M24.02 11.6c-.27-.93-1.64-1.4-3.51-1.4 1.5.06 2.56.49 2.79 1.25.41 1.4-2.06 3.35-5.52 4.38-3.45 1.03-6.6.75-7.01-.64-.26-.85.58-1.92 2.06-2.85-1.87 1.09-2.96 2.37-2.66 3.38.46 1.53 3.92 1.85 7.75.7 3.82-1.13 6.55-3.3 6.1-4.82z" style="clip-rule:evenodd;fill:#231f20;fill-rule:nonzero;stroke:#fff;stroke-width:.424869;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"/><path id="spaceship-loop-green-2" d="M21.65 9.84c.83.03 1.68.16 2.46.49.2.08.38.18.55.31.17.14.33.3.43.49a1.22 1.22 0 0 1 .15.63c0 .22-.08.43-.16.62-.09.2-.2.38-.32.55a9.04 9.04 0 0 1-1.32 1.36 17.69 17.69 0 0 1-2.06 1.45c.68-.49 1.36-.98 1.99-1.53.3-.27.62-.56.9-.86a5.1 5.1 0 0 0 .39-.48c.11-.17.23-.35.3-.54a1.49 1.49 0 0 0 .14-.88c-.02-.09-.06-.18-.1-.27a1.98 1.98 0 0 0-.93-.76c-.37-.18-.78-.3-1.18-.39-.4-.09-.82-.15-1.24-.19Zm-11.24 7.05c-.23-.11-.43-.25-.62-.42a1.4 1.4 0 0 1-.38-.65c-.06-.25-.02-.5.04-.75.08-.24.2-.47.34-.68.29-.4.63-.77 1-1.1a10.65 10.65 0 0 1 1.18-.89l-.28.24-.29.24-.27.23-.27.26c-.36.34-.7.7-.96 1.1-.14.2-.26.4-.33.63-.08.23-.1.47-.06.7.04.23.17.45.33.63s.36.33.57.46z" style="clip-rule:evenodd;fill:#15a54b;fill-rule:evenodd;stroke:none;stroke-width:.424869;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"/><path id="path2" d="M14.87 4.32c1.3.4 1.14 1.02 1.14 1.02-1.7-1.43-3.4.83-3.4.83a4.87 4.87 0 0 1 1.77-.12 4.68 4.68 0 0 0-2.15 2.58 4.66 4.66 0 0 0-.04.01c-.5.13-.77.71-.6 1.24a8.22 8.22 0 0 0 1.68 3.06s0 0 0 0a13.02 13.02 0 0 0 .07.08 10.48 10.48 0 0 0 1.03.98 13.02 13.02 0 0 0 .13.11l.57.45c.3.22.62.43.96.42h.04a2.27 2.27 0 0 0 1.76-.42c.75-.56 1.65-1.34 2.3-2.22.6-.74.97-1.82 1.18-2.46.18-.53-.1-1.1-.6-1.24h-.03A4.58 4.58 0 0 0 17.3 5.6c-.5-1.1-2.43-1.28-2.43-1.28Z" style="clip-rule:evenodd;fill:none;fill-rule:nonzero;stroke:#fff;stroke-width:.424869;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:2;stroke-dasharray:none;stroke-opacity:1"/><path id="Dark-Back-7" d="M20.95 10.25c0 1.66-1.8 3.32-3.12 4.3a2.27 2.27 0 0 1-2.76 0c-1.32-.98-3.11-2.64-3.11-4.3a4.62 4.62 0 0 1 4.49-4.73c2.48 0 4.5 2.12 4.5 4.73z" style="clip-rule:evenodd;fill:#0a8943;fill-rule:nonzero;stroke-width:.0987792;stroke-linejoin:round;stroke-miterlimit:2"/><path id="path1-6" d="M13.77 13.1c-.11-.05-.23-.1-.34-.17-1-.6-1.56-2.2-1.84-3.05-.17-.53.1-1.1.6-1.23a4.66 4.66 0 0 1 2.16-.1 4.25 4.25 0 0 0-2.06-.07 4.88 4.88 0 0 1 2.68-2.7c1.33-.55 3.49.83 4.32 2.62-.25.02-.5.07-.75.15a4.74 4.74 0 0 1 2.18.1c.49.13.77.7.6 1.23-.3.85-.85 2.46-1.84 3.05-.23.13-.46.2-.68.24-.7 1.08-1.73 1.8-2.77 1.81-.34.01-.67-.2-.96-.42a13.02 13.02 0 0 1-1.8-1.62c.16.08.33.12.5.15zm3.68-.11c.35.06.35.27.35.27.02-.42-.34-.27-.34-.27Zm-.31 1c.17 0 .38 0 .47-.08.1-.09.07-.3.05-.38 0 .12.03.25-.1.36-.1.09-.23.1-.42.1z" style="clip-rule:evenodd;fill:#15a54b;fill-rule:evenodd;stroke-width:.0987792;stroke-linejoin:round;stroke-miterlimit:2"/><path id="Black" d="M12.22 9c.62-.17 1.55-.3 2.33.2.77.48 1.2 1.47 1.42 2.16.14.43-.07.9-.45 1.01-.63.17-1.56.3-2.34-.19-.77-.49-1.2-1.47-1.43-2.16-.13-.43.08-.91.47-1.02zm8.46 0c.39.12.6.59.47 1.02-.22.7-.65 1.67-1.43 2.16-.78.49-1.72.36-2.33.2-.38-.12-.6-.6-.46-1.03.22-.69.65-1.67 1.42-2.16.78-.48 1.71-.36 2.33-.19zm-5.06-2.2s-.42-1.2-3-.63c0 0 1.69-2.26 3.4-.83 0 0 .15-.62-1.15-1.02 0 0 2.01.2 2.45 1.35 0 0-.24.56-1.7 1.13zm.4 6.93s1.35-.16 1.55-.54v.5c0 .12-.11.16-.2.18-.26.05-.96.05-1.36-.14z" style="clip-rule:evenodd;fill:#231f20;fill-rule:evenodd;stroke-width:.0987792;stroke-linejoin:round;stroke-miterlimit:2"/><path id="whites-1" d="M15.03 10.32c-.08.17-.6.07-1.15-.22-.56-.3-.93-.67-.85-.84.1-.17.67-.15 1.22.14.56.3.87.76.79.92zm2.87 0c-.08-.16.23-.62.79-.92.55-.29 1.13-.3 1.21-.14.1.17-.28.54-.84.84-.55.29-1.07.4-1.16.22z" style="clip-rule:evenodd;fill:#fff;fill-rule:evenodd;stroke-width:.0987792;stroke-linejoin:round;stroke-miterlimit:2"/></svg>
assets/icons/jakevan-logo.svg
File was deleted
assets/icons/martian infotech logo.svg
New file
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="martian-infotech-logo" width="32" height="32" viewBox="0 0 32 32" style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" version="1.1"><path id="spaceship-loop-black" d="M27.84 17.56c-.48-1.63-2.9-2.47-6.2-2.46 2.65.1 4.53.86 4.93 2.2.73 2.46-3.63 5.9-9.74 7.73-6.1 1.82-11.65 1.32-12.38-1.12-.45-1.5 1.03-3.4 3.64-5.04-3.3 1.92-5.23 4.19-4.7 5.97.8 2.7 6.93 3.26 13.68 1.25s11.57-5.83 10.77-8.53z" style="fill:#231f20;fill-rule:nonzero;stroke:#fff;stroke-width:.75;stroke-linecap:square;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"/><path id="spaceship-loop-green" d="M23.66 14.46c1.47.06 2.96.28 4.34.86.35.15.68.33.98.56.3.23.57.5.76.85a2.16 2.16 0 0 1 .26 1.12c-.02.39-.14.76-.3 1.1-.14.35-.34.67-.56.97a15.95 15.95 0 0 1-2.33 2.39 31.22 31.22 0 0 1-3.63 2.56c1.2-.86 2.4-1.73 3.5-2.7.56-.48 1.1-.98 1.59-1.52a9 9 0 0 0 .7-.85c.2-.3.4-.61.54-.94a2.62 2.62 0 0 0 .24-1.55c-.04-.16-.1-.33-.2-.5a3.49 3.49 0 0 0-1.62-1.33c-.66-.31-1.37-.52-2.1-.68-.7-.16-1.43-.27-2.17-.34zM3.8 26.9a4.37 4.37 0 0 1-1.08-.73c-.31-.31-.56-.7-.67-1.15-.11-.44-.05-.9.07-1.33a5 5 0 0 1 .6-1.2c.5-.72 1.1-1.35 1.76-1.93a18.8 18.8 0 0 1 2.08-1.58l-.5.42-.5.42-.5.42-.46.45c-.63.6-1.23 1.22-1.7 1.93-.24.36-.45.73-.58 1.13-.13.4-.18.83-.1 1.24.07.4.3.79.58 1.1.29.32.64.58 1 .8z" style="fill:#15a54b;stroke:none;stroke-width:.75;stroke-linecap:square;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"/><path id="path2" d="M11.69 4.7c2.3.72 2.02 1.8 2.02 1.8-3.01-2.5-6 1.48-6 1.48a8.6 8.6 0 0 1 3.12-.21 8.26 8.26 0 0 0-3.8 4.56 8.23 8.23 0 0 0-.08.02c-.87.23-1.35 1.25-1.05 2.18.38 1.14 1.04 3.06 2.12 4.38.26.35.54.7.84 1.02h-.01a22.98 22.98 0 0 0 .14.14 18.5 18.5 0 0 0 1.82 1.73 22.98 22.98 0 0 0 .23.2l1 .8c.52.38 1.09.75 1.7.74h.07a4.01 4.01 0 0 0 3.1-.75c1.33-1 2.93-2.37 4.06-3.91 1.06-1.31 1.7-3.22 2.09-4.35.3-.93-.18-1.95-1.05-2.18l-.07-.02a8.08 8.08 0 0 0-5.97-5.35c-.86-1.93-4.28-2.27-4.28-2.27z" style="fill:none;fill-rule:nonzero;stroke:#fff;stroke-width:.75;stroke-linecap:square;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"/><path id="Dark-Back" d="M22.42 15.19c0 2.93-3.18 5.85-5.51 7.6a4.01 4.01 0 0 1-4.86 0c-2.33-1.75-5.5-4.67-5.5-7.6 0-4.62 3.55-8.36 7.93-8.36s7.94 3.74 7.94 8.36z" style="fill:#0a8943;fill-rule:nonzero;stroke-width:.17437"/><path id="path1" d="M9.75 20.2c-.2-.07-.41-.16-.61-.28-1.76-1.05-2.74-3.9-3.24-5.4-.3-.92.18-1.94 1.05-2.17a8.23 8.23 0 0 1 3.82-.17 7.51 7.51 0 0 0-3.63-.12 8.61 8.61 0 0 1 4.73-4.77c2.35-.96 6.15 1.46 7.62 4.63-.44.04-.88.12-1.32.27 1.38-.32 2.8-.1 3.84.16.87.23 1.36 1.25 1.05 2.18-.5 1.5-1.48 4.34-3.24 5.39-.4.23-.8.36-1.2.42-1.23 1.9-3.04 3.17-4.88 3.2-.61 0-1.18-.36-1.7-.75a22.98 22.98 0 0 1-3.2-2.86c.3.14.6.22.9.27zm6.5-.18c.62.1.62.48.62.48.02-.74-.61-.48-.61-.48zm-.56 1.78c.3 0 .68 0 .83-.15.17-.16.13-.53.1-.68 0 .2.04.44-.17.63-.18.16-.41.17-.76.2z" style="clip-rule:evenodd;fill:#15a54b;fill-rule:evenodd;stroke-width:.17437;stroke-linejoin:round;stroke-miterlimit:2"/><path id="Black" d="M7 12.98c1.1-.3 2.75-.52 4.12.34 1.37.86 2.13 2.6 2.52 3.82.24.76-.14 1.6-.81 1.79-1.1.3-2.75.52-4.12-.34-1.37-.86-2.13-2.6-2.52-3.82-.24-.76.14-1.6.82-1.8zm14.95 0c.68.2 1.06 1.03.82 1.8-.4 1.22-1.15 2.95-2.52 3.8-1.37.87-3.03.65-4.12.35-.67-.2-1.05-1.03-.81-1.8.39-1.22 1.15-2.95 2.52-3.81 1.37-.86 3.02-.64 4.1-.34zM13 9.1s-.74-2.14-5.3-1.12c0 0 2.99-3.98 6-1.46 0 0 .28-1.1-2.02-1.81 0 0 3.55.35 4.33 2.38 0 0-.42 1-3.01 2zm.7 12.23s2.39-.3 2.75-.95v.86c0 .22-.2.3-.35.33-.47.1-1.7.1-2.4-.24z" style="fill:#231f20;stroke-width:.17437"/><path id="whites" d="M11.98 15.3c-.15.3-1.07.13-2.04-.4-.98-.51-1.64-1.17-1.5-1.46.17-.3 1.18-.27 2.16.25.98.52 1.54 1.33 1.39 1.62zm5.06 0c-.15-.28.4-1.1 1.39-1.61.97-.52 1.99-.54 2.14-.25.16.3-.5.95-1.48 1.47s-1.9.7-2.05.4z" style="fill:#fff;stroke-width:.17437"/></svg>
assets/icons/martian infotech.svg
New file
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="martian-infotech" width="60" height="19.46" viewBox="0 0 60 19.462367" style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" version="1.1"><path id="Martian" d="M7.23.81v10.55H6.16V5.92l-.81 3.61h-.33c-.64 0-.76-.63-.82-.86l-.63-2.75v5.44H2.5V.8h.66c.42 0 .49.4.49.4L4.9 7.25l1.18-6.07c.02-.05.1-.38.49-.38Zm8.66 10.55h-1.2l-.94-7.26-.95 7.26h-1.19L13.21.8h.59c.45 0 .52.29.57.58zm8.22 0h-1.08V7.5c0-.51-.27-.68-.56-.68h-.57v4.54H20.8V.8h1.98c.72 0 1.32.6 1.32 1.33v3.25s.05.83-.39.94c.42.2.4.99.4.99zM21.9 5.8h.57c.29 0 .56-.12.56-.6V2.36c0-.39-.27-.54-.56-.54h-.57ZM33.64.8l-.36.79c-.06.13-.22.28-.57.28h-.84c-.15 0-.26.12-.27.26v9.22h-.77c-.26 0-.3-.16-.3-.23V1.88H29v-.74c0-.18.15-.33.33-.33zm4.87 0h.65c.31 0 .43.24.43.42v10.13h-.76c-.26 0-.3-.16-.32-.23zm10.66 10.55h-1.19l-.95-7.26-.95 7.26H44.9L46.5.8h.59c.45 0 .52.29.57.58zM57.5.8v10.55H57c-.58 0-.68-.47-.72-.68l-1.16-5.21v5.89h-1.08V.8h.5c.6 0 .7.29.76.6l1.12 5.47V.81Z" style="fill:#15a54b;stroke-width:.18263"/><path id="Infotech" d="M12.7 15.42h.33v3.18h-.33Zm4.55 1.51-.38-1c.02.25.03.6.03 1.04v1.63h-.32v-3.18h.38l.66 1.67.37 1c-.02-.18-.03-.52-.03-1.04v-1.63h.33v3.18h-.38zm4.6 1.67v-3.18h1.29v.28h-.97v1.22h.9v.28h-.9v1.4zm6.11-.7c0 .22-.07.4-.2.54s-.33.2-.6.2c-.26 0-.46-.06-.6-.2a.74.74 0 0 1-.2-.54v-1.78c0-.23.07-.4.2-.54.14-.14.34-.21.6-.21.27 0 .47.07.6.2.13.14.2.32.2.55zm-.32-1.78c0-.3-.16-.46-.48-.46-.32 0-.48.16-.48.46v1.77c0 .31.16.47.48.47.32 0 .48-.16.48-.47zm5.02-.42h-.6v2.9h-.32v-2.9h-.6v-.28h1.52zm4.6 2.9H35.9v-3.18h1.37v.28h-1.05v1.16h.91v.28h-.91v1.18h1.05zm4.9-.93v.23c0 .22-.08.4-.21.54-.14.14-.33.2-.6.2-.26 0-.46-.06-.6-.2a.74.74 0 0 1-.2-.54v-1.78c0-.23.07-.4.2-.54.14-.14.34-.21.6-.21.27 0 .46.07.6.2.13.14.2.32.2.55v.25h-.32v-.25c0-.3-.16-.46-.48-.46-.32 0-.48.16-.48.46v1.77c0 .31.16.47.48.47.32 0 .48-.16.48-.47v-.22zm5.14-2.25v3.18h-.33v-1.42h-1.03v1.42h-.32v-3.18h.32v1.48h1.03v-1.48z" style="fill:#231f20;stroke-width:.18263"/></svg>
assets/icons/martian logo shadow.svg
New file
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" viewBox="0 0 32 32"><path d="M11.69 4.623c-.105-.01-.136.139-.036.17 1.137.35 1.621.793 1.825 1.133a1 1 0 0 1 .142.418c.003.039 0 .034-.002.058-.721-.557-1.449-.822-2.129-.804-.724.019-1.394.287-1.965.632-1.141.691-1.894 1.698-1.894 1.698a.087.087 0 0 0 .088.136c1.198-.267 2.124-.315 2.841-.242-1.712 1.006-3.051 2.58-3.693 4.555-.817.271-1.257 1.252-.967 2.143.144.43.333.977.563 1.556.126.99.665 1.987 1.4 2.932-3.158 1.89-4.99 4.094-4.472 5.832.8 2.7 6.93 3.26 13.68 1.25s11.569-5.83 10.769-8.53c-.42-1.422-2.317-2.244-4.987-2.423.077-.217.147-.426.207-.608.295-.882-.133-1.844-.921-2.136a8.16 8.16 0 0 0-6.116-5.489c-.45-.96-1.497-1.52-2.443-1.847-.988-.343-1.86-.429-1.875-.43zm.458.283c.298.042.652.064 1.375.315.96.332 1.988.913 2.377 1.861.055.023.146.032.19.041l.002-.006a7.96 7.96 0 0 1 5.814 5.21c-1.03-.25-2.4-.447-3.736-.138.44-.15.88-.23 1.32-.27-.816-1.76-2.352-3.289-3.959-4.136l.002-.002c-.07-.007-.145-.05-.199-.068-.027.022-.063.058-.086.076-.103.08-.228.167-.363.256l-.078.053-.002.002a8 8 0 0 1-.274.166l-.002.002a9 9 0 0 1-.312.17l-.004.001q-.165.087-.352.176l-.004.002q-.373.179-.832.36c-.023-.055-.036-.11-.142-.248l-.06-.075a2 2 0 0 0-.307-.299 3 3 0 0 0-.342-.232q-.036-.022-.072-.043a3 3 0 0 0-.334-.15q-.071-.028-.145-.053a4.3 4.3 0 0 0-.783-.193.1.1 0 0 0-.055.01h-.002c-.72-.09-1.652-.059-2.83.175.13-.164.668-.887 1.664-1.49.553-.335 1.194-.59 1.877-.608.684-.018 1.412.197 2.15.815.05.041.125.017.141-.045 0 0 .02-.085.01-.21-.01-.127-.052-.301-.168-.495-.178-.298-.796-.624-1.479-.93m-3.627 6.992q.221-.006.442 0a7.5 7.5 0 0 1 1.807.282 8.2 8.2 0 0 0-3.655.132q.045-.131.094-.261c.432-.09.872-.14 1.312-.153m.168.817q.135-.004.27 0c.721.015 1.475.175 2.16.605 1.37.86 2.132 2.6 2.522 3.82.24.76-.14 1.6-.81 1.79-1.1.3-2.75.52-4.12-.34s-2.132-2.6-2.522-3.82c-.24-.76.14-1.6.82-1.8L7 12.98a7.2 7.2 0 0 1 1.69-.265m11.309 0a6.8 6.8 0 0 1 1.941.265h.01c.68.2 1.06 1.03.82 1.8-.4 1.22-1.149 2.95-2.519 3.8-1.37.87-3.03.65-4.12.35-.67-.2-1.05-1.03-.81-1.8.39-1.22 1.15-2.95 2.52-3.81.685-.43 1.44-.59 2.158-.605m-11.059.535c-.254.011-.436.077-.5.19-.14.29.52.95 1.5 1.46.97.53 1.891.7 2.041.4l.01.01c.15-.29-.41-1.1-1.39-1.62-.613-.326-1.237-.459-1.66-.44m11.012.004c-.413.01-.976.143-1.521.435-.99.51-1.54 1.332-1.39 1.612v.01c.15.3 1.07.12 2.05-.4s1.64-1.172 1.48-1.472c-.065-.126-.297-.193-.619-.185m3.71 1.207c.74.07 1.47.18 2.17.34.73.16 1.439.37 2.099.68a3.5 3.5 0 0 1 1.62 1.33c.1.17.16.34.2.5a2.6 2.6 0 0 1-.24 1.548c-.14.33-.34.642-.54.942a9 9 0 0 1-.7.85c-.49.54-1.03 1.039-1.59 1.519-1.1.97-2.3 1.84-3.5 2.7a31 31 0 0 0 3.63-2.56 16 16 0 0 0 2.33-2.39c.22-.3.42-.62.56-.97.16-.34.28-.71.3-1.1a2.16 2.16 0 0 0-.26-1.12c-.19-.35-.46-.62-.76-.85s-.63-.41-.98-.56c-1.38-.58-2.87-.8-4.34-.86m-.829.736c2.012.258 3.401.975 3.738 2.104.73 2.46-3.63 5.898-9.74 7.728-6.1 1.82-11.65 1.321-12.38-1.119-.438-1.456.95-3.288 3.42-4.894q.294.378.624.744c1.095 1.206 2.428 2.291 3.504 3.1v-.003a4.1 4.1 0 0 0 4.965 0v.002c2.124-1.595 5.061-4.146 5.566-6.851q.167-.426.303-.81M8.068 18.97c.321.383.676.714 1.073.95.2.12.409.21.609.28h-.01a3.5 3.5 0 0 1-.812-.232 9.285 9.285 0 0 1-.86-.998m-1.507.011a19 19 0 0 0-2.08 1.58c-.66.58-1.26 1.21-1.76 1.93a5 5 0 0 0-.602 1.2c-.12.43-.178.89-.068 1.33.11.45.36.84.67 1.15a4.4 4.4 0 0 0 1.08.73v-.01c-.36-.22-.71-.48-1-.8-.28-.31-.51-.7-.58-1.1-.08-.41-.03-.84.1-1.24s.34-.77.58-1.13c.47-.71 1.069-1.33 1.699-1.93l.46-.45.5-.42.5-.42zm13.72.606c-1.049 1.22-2.325 2.308-3.424 3.133v.002a3.92 3.92 0 0 1-2.699.789c1.693-.199 3.325-1.414 4.461-3.17.4-.06.801-.19 1.201-.42.161-.096.313-.21.461-.334m-3.822.39c.183-.01.423.062.41.524 0 0 .001-.38-.619-.48h.01s.09-.037.199-.043m-.01.405v.86c0 .22-.2.3-.35.33-.47.1-1.7.1-2.4-.24 0 0 2.39-.3 2.75-.95m.17.59c.03.15.07.52-.1.68-.15.15-.53.15-.83.15.35-.03.58-.041.76-.201.21-.19.17-.43.17-.63" style="fill:#231f20;fill-rule:nonzero;stroke:none;stroke-width:.75;stroke-linecap:square;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"/></svg>
blocks/_setup.php
New file
@@ -0,0 +1,46 @@
<?php
function ami_prerender_core_site_logo(array $block, ?string $content):?string
{
    $open = $close = '';
    if (!is_home() && !is_front_page()) {
        $open = '<a href="'.get_home_url().'" rel="home">';
        $close = '</a>';
    }
    $cache = (class_exists('JVBase\managers\Cache')) ? JVBase\managers\Cache::for('full-icons') : false;
    if (array_key_exists('attrs', $block) && array_key_exists('className', $block['attrs'])) {
        $logo = false;
        if (str_contains($block['attrs']['className'], 'is-text')) {
            if ($cache) {
                $martian = $cache->remember('martian', function() {
                    return file_get_contents(AMI_DIR . '/assets/icons/martian infotech logo.svg');
                });
                $text = $cache->remember('text', function() {
                    return file_get_contents(AMI_DIR . '/assets/icons/martian infotech.svg');
                });
            }else {
                $martian = file_get_contents(AMI_DIR . '/assets/icons/martian infotech logo.svg');
                $text = file_get_contents(AMI_DIR . '/assets/icons/martian infotech.svg');
            }
            $logo = '<div class="logo">'.$martian.$text.'</div>';
        }else if (array_key_exists('attrs', $block) && str_contains($block['attrs']['className'], 'is-full')) {
            if ($cache) {
                $logo = $cache->remember('logo', function() {
                    return file_get_contents(AMI_DIR . '/assets/icons/full-logo.svg');
                });
            }else {
                $logo = file_get_contents(AMI_DIR . '/assets/icons/full-logo.svg');
            }
        }
        if ($logo) {
            return $open.$logo.$close;
        }
    }
    return JVB()->blocks()->prerender_core_site_logo($block, $content);
}
content/_setup.php
File was renamed from content/setup.php
@@ -28,22 +28,16 @@
 *  - 'section' => (string) the slug of the section, as defined above
 */
require(AJV_DIR . '/content/art.php');
require(AJV_DIR . '/content/design.php');
require(AJV_DIR . '/content/development.php');
require(AJV_DIR . '/content/strategy.php');
require(AJV_DIR . '/content/support.php');
require(AJV_DIR . '/content/writing.php');
require(AMI_DIR . '/content/product.php');
require(AMI_DIR . '/content/service.php');
//require(AMI_DIR . '/content/support.php');
add_filter('jvb_content', 'ajv_content');
function ajv_content($content):array
{
    return [
        'design'        => ajv_design(),
        'development'   => ajv_development(),
        'strategy'      => ajv_strategy(),
        'art'           => ajv_art(),
        'writing'       => ajv_writing(),
        'support'       => ajv_support(),
    ];
}
//add_filter('jvb_content', 'ami_content');
//function ami_content($content):array
//{
//    return [
//        'product'      => ami_product(),
//        'service'      => ami_service(),
//        'support'       => ami_support(),
//    ];
//}
content/art.php
File was deleted
content/design.php
File was deleted
content/development.php
File was deleted
content/product.php
New file
@@ -0,0 +1,141 @@
<?php
// /content/product.php
use JVBase\registrar\Registrar;
add_action('jvbDefineRegistrar', 'ami_product');
add_action('jvbDefineRegistrarFields', 'ami_product_fields');
add_action('plugins_loaded', 'ami_product',1);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'ami_product_fields', 2);
add_filter('ami_ProductSchemaDefault', 'ami_product_schema');
add_filter('ami_ProductMetaDefault', 'ami_product_meta');
add_filter('ami_ProductArchiveDefault', 'ami_product_archive');
function ami_product(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $product = Registrar::forPost('product', 'Product', 'Products')
        ->setIcon('shopping-cart-simple')
        ->make([
            'rewrite'   => [
                'slug'          => 'products',
                'with_front'    => false,
            ],
            'taxonomies'    => [
                'product_cat',
            ],
            'rewrite_taxonomy' => 'product_cat'
        ])
        ->setAll([
            'show_directory',
        ])
        ->setIntegration('helcim')
        ->setIntegration('facebook')
        ->setIntegration('instagram');
//$directory = $product->getConfig('directory');
}
function ami_product_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $product = Registrar::getInstance('product');
    $breadcrumbs = $product->config('breadcrumbs');
    $breadcrumbs->setCrumb('product_cat');
    $fields = $product->fields();
    $fields->addField('gallery', [
        'type'      => 'upload',
        'subtype'   => 'image',
        'multiple'  => true,
        'label'     => 'Gallery',
    ]);
    $fields->addField('product_cat', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'product_cat',
        'label'     => 'Categories'
    ]);
}
function ami_product_schema():array
{
    return [
        'type'  => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'mainEntity'    => [
            'type'              => 'JVBase\managers\SEO\render\Thing\Intangible\Service',
            'name'  => '{{post_title}}'
        ],
        'name'              => '{{post_title}}',
    ];
}
function ami_product_meta():array
{
    return[
        'name' => '{{post_title}}',
    ];
}
function ami_product_archive(array $defaults):array
{
    return array_merge($defaults, [
    ]);
}
function ami_product_reference_schema(array $defaults):array
{
    return $defaults;
}
//
//function ami_product():array
//{
//    return [
//        'singular'       => 'Product',
//        'plural'       => 'Products',
//        'show_feed'    => true,
//        'favouritable' => true,
//        'icon'         => 'shopping-cart-simple',
//        'rewrite'      => [
//            'slug'       => 'products',
//            'with_front' => false,
//        ],
//        'use_helcim'    => true,
//        'fields'       => [
//            'post_title'     => [
//                'type'  => 'text',
//                'label' => 'Title',
//            ],
//            'featured_image' => [
//                'type'  => 'image',
//                'label' => 'Image',
//            ],
//            'gallery'        => [
//                'type'  => 'gallery',
//                'label' => 'Gallery',
//            ],
//            'price'          => [
//                'type'  => 'number',
//                'label' => 'Price',
//            ],
//            'post_content'   => [
//                'type'  => 'textarea',
//                'quill' => true,
//                'label' => 'Notes'
//            ]
//        ],
//        'single_image' => false,
//        'upload_title' => 'Upload Products',
//    ];
//}
content/service.php
New file
@@ -0,0 +1,144 @@
<?php
// /content/service.php
use JVBase\registrar\Registrar;
add_action('jvbDefineRegistrar', 'ami_service');
add_action('jvbDefineRegistrarFields', 'ami_service_fields');
add_action('plugins_loaded', 'ami_service',1);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'ami_service_fields', 2);
add_filter('ami_ServiceSchemaDefault', 'ami_service_schema');
add_filter('ami_ServiceMetaDefault', 'ami_service_meta');
add_filter('ami_ServiceArchiveDefault', 'ami_service_archive');
function ami_service(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $service = Registrar::forPost('service', 'Service', 'Services')
        ->setIcon('headset')
        ->make([
            'rewrite'   => [
                'slug'          => 'services',
                'with_front'    => false,
            ],
            'taxonomies'    => [
                'tags',
                'city',
            ],
        ])
        ->setAll([
            'show_directory',
        ])
        ->setIntegration('helcim')
        ->setIntegration('facebook')
        ->setIntegration('instagram');
//$directory = $service->getConfig('directory');
}
function ami_service_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $service = Registrar::getInstance('service');
//    $breadcrumbs = $service->config('breadcrumbs');
    $fields = $service->fields();
    $fields->addField('gallery', [
        'type'      => 'upload',
        'subtype'   => 'image',
        'multiple'  => true,
        'label'     => 'Gallery',
    ]);
    $fields->addField('tags', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'tags',
        'label'     => 'Tags'
    ]);
    $fields->addField('city', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'city',
        'label'     => 'City'
    ]);
}
function ami_service_schema():array
{
    return [
        'type'  => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{post_title}}',
        'mainEntity'    => [
            'type'              => 'JVBase\managers\SEO\render\Thing\Intangible\Service',
            'name'  => '{{post_title}}'
        ]
    ];
}
function ami_service_meta():array
{
    return[
        'name' => '{{post_title}}',
    ];
}
function ami_service_archive(array $defaults):array
{
    return array_merge($defaults, [
    ]);
}
function ami_service_reference_schema(array $defaults):array
{
    return $defaults;
}
//
//function ami_service():array
//{
//    return [
//        'singular'       => 'Service',
//        'plural'       => 'Services',
//        'show_feed'    => true,
//        'favouritable' => true,
//        'icon'         => 'headset',
//        'rewrite'      => [
//            'slug'       => 'services',
//            'with_front' => false,
//        ],
//        'use_helcim'    => true,
//        'fields'       => [
//            'post_title'     => [
//                'type'  => 'text',
//                'label' => 'Title',
//            ],
//            'featured_image' => [
//                'type'  => 'image',
//                'label' => 'Image',
//            ],
//            'gallery'        => [
//                'type'  => 'gallery',
//                'label' => 'Gallery',
//            ],
//            'price'          => [
//                'type'  => 'number',
//                'label' => 'Price',
//            ],
//            'post_content'   => [
//                'type'  => 'textarea',
//                'quill' => true,
//                'label' => 'Notes'
//            ]
//        ],
//        'single_image' => false,
//        'upload_title' => 'Upload Services',
//    ];
//}
content/strategy.php
File was deleted
content/support.php
@@ -1,6 +1,6 @@
<?php
// /content/support.php
function ajv_support(): array
function ami_support(): array
{
    return [
        'singular' => 'Support',
@@ -8,6 +8,7 @@
        'hide_single' => false,
        'show_feed' => false,
        'icon' => 'question',
        'public'    => false,
        'rewrite' => [
            'slug' => 'support',
            'with_front' => false,
content/writing.php
File was deleted
dashboard/setup.php
File was deleted
files/fileManagement.php
@@ -1,445 +1 @@
<?php
/**
 * Custom upload directory structure for edmonton.ink
 * Recreates the original directory logic with shops, artists, partners, etc.
 */
add_filter('jvb_upload_directory', 'ajv_upload_directory', 10, 4);
function ajv_upload_directory($path, $post_type, $user_id, $term_id)
{
    switch ($post_type) {
        case 'shop':
            // Shop directory
            return 'shops/' . $term_id;
        case 'partner':
            // Partner directory
            return 'partners/' . $user_id;
        case 'artist':
            // Artist profile directory
            return 'artists/' . $user_id;
        default:
            // Content directories within artist folder (tattoos, artwork, etc)
            if (!$user_id) {
                return $path; // fallback to default
            }
            $link = get_user_meta($user_id, BASE . 'link', true);
            $type = str_replace(BASE, '', get_post_type((int)$link));
            return sanitize_title($type) . '/' . $user_id . '/' . sanitize_title($post_type);
    }
}
/**
 * Custom filename generation for edmonton.ink
 * Recreates the original SEO-friendly filename logic
 */
add_filter('jvb_upload_filename', 'ajv_filename', 10, 6);
function ajv_filename($filename, $original_name, $user_data, $post_type, $user_id, $term_id)
{
    // Get artist/shop/partner details
    $post = (int)get_user_meta($user_id, BASE . 'link', true);
    if (!$post) {
        return $filename; // fallback to default
    }
    $city = jvbArtistCity($post);
    switch ($post_type) {
        case 'shop':
            // Shop images: {city}-best-tattoo-shop-{shop-name}
            $shop_term = get_term($term_id, BASE . 'shop');
            if (!$shop_term || is_wp_error($shop_term)) {
                return $filename;
            }
            return sprintf(
                '%s-best-tattoo-shop-%s-%s',
                sanitize_title($city),
                sanitize_title($shop_term->name),
                ajv_get_counter($user_id, $post_type)
            );
        case 'artist':
            // Profile images: {city}-best-{type}-{specialties}-{name}
            $type = jvbArtistType($post);
            $specialties = ajv_get_artist_top_styles($post);
            return sprintf(
                '%s-best-%s-%s-%s-%s',
                sanitize_title($city),
                sanitize_title($type),
                sanitize_title($specialties),
                sanitize_title($user_data->display_name),
                ajv_get_counter($user_id, $post_type)
            );
        case 'partner':
            // Partner images: {city}-tattoo-{service-type}-{name}
            $service_type = jvb_partner_type($post);
            return sprintf(
                '%s-tattoo-%s-%s-%s',
                sanitize_title($city),
                sanitize_title($service_type),
                sanitize_title($user_data->display_name),
                ajv_get_counter($user_id, $post_type)
            );
        case 'tattoo':
            // Get style and subject if available
            $style = ajv_get_primary_taxonomy($post, BASE . 'style');
            $subject = ajv_get_primary_taxonomy($post, BASE . 'theme');
            return sprintf(
                '%s-%s-%s-tattoo-by-%s-%s',
                sanitize_title($city),
                sanitize_title($style),
                sanitize_title($subject),
                sanitize_title($user_data->display_name),
                ajv_get_counter($user_id, $post_type)
            );
        case 'artwork':
            // Get style and subject if available
            $style = ajv_get_primary_taxonomy($post, BASE . 'artstyle');
            $subject = ajv_get_primary_taxonomy($post, BASE . 'arttheme');
            return sprintf(
                '%s-%s-%s-artwork-by-%s-%s',
                sanitize_title($city),
                sanitize_title($style),
                sanitize_title($subject),
                sanitize_title($user_data->display_name),
                ajv_get_counter($user_id, $post_type)
            );
        case 'piercing':
            // Get style if available
            $style = ajv_get_primary_taxonomy($post, BASE . 'pstyle');
            return sprintf(
                '%s-%s-piercing-by-%s-%s',
                sanitize_title($city),
                sanitize_title($style),
                sanitize_title($user_data->display_name),
                ajv_get_counter($user_id, $post_type)
            );
        default:
            // Content: {city}-{content_type}-by-{name}
            $content_type = $post_type;
            return sprintf(
                '%s-%s-by-%s-%s',
                sanitize_title($city),
                sanitize_title($content_type),
                sanitize_title($user_data->display_name),
                ajv_get_counter($user_id, $post_type)
            );
    }
}
/**
 * Custom alt text generation for edmonton.ink
 * Recreates the original detailed alt text logic
 */
add_filter('jvb_upload_alt_text', 'ajv_alt_text', 10, 7);
function ajv_alt_text($alt_text, $file, $user_data, $post_id, $post_type, $user_id, $term_id)
{
    $post = get_user_meta($user_id, BASE . 'link', true);
    if (!$post) {
        return $alt_text; // fallback to default
    }
    $city = jvbArtistCity($post);
    $type = jvbArtistType($post);
    switch ($post_type) {
        case 'shop':
            $shop_term = get_term($term_id, BASE . 'shop');
            if (!$shop_term || is_wp_error($shop_term)) {
                return $alt_text;
            }
            return sprintf(
                'A photo of %s tattoo shop %s',
                $city,
                $shop_term->name
            );
        case 'artist':
            $specialties = ajv_get_artist_top_styles($post);
            return sprintf(
                'A photo of %s %s %s, specializing in %s tattoos',
                $city,
                $type,
                $user_data->display_name,
                $specialties
            );
        case 'partner':
            $service_type = jvb_partner_type($post);
            return sprintf(
                'A photo of %s, providing %s in %s',
                $user_data->display_name,
                $service_type,
                $city
            );
        default:
            if (!$post_id) {
                return $alt_text;
            }
            // Get primary style
            $style = wp_get_post_terms($post_id, BASE . 'style', ['fields' => 'names']);
            $first_style = !empty($style) ? $style[0] : 'custom';
            // Get content type
            $content_type = $post_type;
            // Base alt text
            $alt = sprintf(
                'A photo of a %s %s by %s %s %s',
                $first_style,
                $content_type,
                $city,
                $type,
                $user_data->display_name
            );
            // Add themes for tattoos only
            if ($post_type === 'tattoo') {
                $themes = wp_get_post_terms($post_id, BASE . 'theme', [
                    'fields' => 'names',
                    'number' => 3
                ]);
                if (!empty($themes)) {
                    $theme_list = implode(', ', $themes);
                    $alt .= sprintf(', with %s', $theme_list);
                }
            }
            return $alt;
    }
}
/**
 * Custom image title generation for edmonton.ink
 * Recreates the original SEO-friendly title logic
 */
add_filter('jvb_upload_image_title', 'ajv_image_title', 10, 7);
function ajv_image_title($title, $file, $user_data, $post_id, $post_type, $user_id, $term_id)
{
    $post = get_user_meta($user_id, BASE . 'link', true);
    if (!$post) {
        return $title; // fallback to default
    }
    $city = jvbArtistCity($post);
    $type = jvbArtistType($post);
    switch ($post_type) {
        case 'shop':
            $shop_term = get_term($term_id, BASE . 'shop');
            if (!$shop_term || is_wp_error($shop_term)) {
                return $title;
            }
            return sprintf(
                '%s | %s\'s Best Tattoo Shops',
                $shop_term->name,
                $city
            );
        case 'artist':
            return sprintf(
                '%s | %s\'s Best %s',
                $user_data->display_name,
                $city,
                $type
            );
        case 'tattoo':
            if (!$post_id) {
                return $title;
            }
            $style = wp_get_post_terms($post_id, BASE . 'style', ['fields' => 'names']);
            $first_style = !empty($style) ? $style[0] : 'custom';
            $content_type = str_replace(BASE, '', $post_type);
            return sprintf(
                '%s %s by %s | %s\'s Best %s',
                $first_style,
                $content_type,
                $user_data->display_name,
                $city,
                $type
            );
        case 'artwork':
            if (!$post_id) {
                return $title;
            }
            $style = wp_get_post_terms($post_id, BASE . 'artstyle', ['fields' => 'names']);
            $first_style = !empty($style) ? $style[0] : 'custom';
            $content_type = str_replace(BASE, '', $post_type);
            return sprintf(
                '%s %s by %s | %s\'s Best %s',
                $first_style,
                $content_type,
                $user_data->display_name,
                $city,
                $type
            );
        case 'piercing':
            if (!$post_id) {
                return $title;
            }
            $style = wp_get_post_terms($post_id, BASE . 'pstyle', ['fields' => 'names']);
            $first_style = !empty($style) ? $style[0] : 'custom';
            $content_type = str_replace(BASE, '', $post_type);
            return sprintf(
                '%s %s by %s | %s\'s Best %s',
                $first_style,
                $content_type,
                $user_data->display_name,
                $city,
                $type
            );
        default:
            return sprintf(
                'Image by %s %s, %s',
                $city,
                $type,
                $user_data->display_name
            );
    }
}
/**
 * Helper Functions
 * These recreate the helper functions from the original UploadManager
 */
/**
 * Get the next file counter for edmonton.ink style counters
 */
function ajv_get_counter($user_id, $post_type)
{
    // Get counter key for this post type
    $counter_key = BASE . str_replace(BASE, '', $post_type) . '_counter';
    // Get current counter value, default to 0
    $counter = (int)get_user_meta($user_id, $counter_key, true) ?: 0;
    // Increment counter
    $counter++;
    // Update counter in user meta
    update_user_meta($user_id, $counter_key, $counter);
    // Return formatted counter
    return sprintf('%08d', $counter);
}
/**
 * Get artist's top styles for filename generation
 */
function ajv_get_artist_top_styles($post_id)
{
    if (!function_exists('JVBase\\meta\\MetaManager')) {
        // Fallback if MetaManager not available
        $styles = wp_get_post_terms($post_id, BASE . 'style', array('fields' => 'names'));
        if (is_wp_error($styles) || empty($styles)) {
            return 'custom-tattoos';
        }
        return implode('-', array_slice($styles, 0, 2));
    }
    $styles = wp_get_post_terms($post_id, BASE . 'style', array('fields' => 'names'));
    if (is_wp_error($styles) || empty($styles)) {
        return 'custom-tattoos';
    }
    // Get top highlighted styles first
    $meta = new JVBase\meta\MetaManager($post_id, 'post');
    $highlighted = explode(',', $meta->getValue('top_style')) ?: array();
    if (!empty($highlighted)) {
        $style_names = array();
        foreach ($highlighted as $style_id) {
            $term = get_term((int)$style_id, BASE . 'style');
            if ($term && !is_wp_error($term)) {
                $style_names[] = $term->name;
            }
        }
        if (!empty($style_names)) {
            return implode('-', array_slice($style_names, 0, 2));
        }
    }
    // Fallback to first two styles
    return implode('-', array_slice($styles, 0, 2));
}
/**
 * Get primary taxonomy term for content
 */
function ajv_get_primary_taxonomy($post_id, $taxonomy)
{
    $terms = wp_get_post_terms($post_id, $taxonomy, array('fields' => 'names'));
    if (is_wp_error($terms) || empty($terms)) {
        return $taxonomy === BASE . 'style' ? 'custom' : 'tattoo';
    }
    return $terms[0];
}
/**
 * Get partner type (placeholder - implement based on your edmonton.ink logic)
 * This function was referenced in the original but not provided
 */
function ajv_partner_type($post_id)
{
    // Implement based on your edmonton.ink logic
    // This might look at a taxonomy or meta field
    $terms = wp_get_post_terms($post_id, BASE . 'partner_type', array('fields' => 'names'));
    if (is_wp_error($terms) || empty($terms)) {
        return 'service';
    }
    return $terms[0];
}
/**
 * Optional: Add action to schedule cleanup (from original code)
 * Uncomment if you want the original cleanup functionality
 */
/*
add_action('init', function() {
    if (!wp_next_scheduled('jvb_cleanup_original_uploads')) {
        wp_schedule_event(time(), 'daily', 'jvb_cleanup_original_uploads');
    }
});
add_action('jvb_cleanup_original_uploads', function() {
    // You could instantiate your upload manager here and call cleanup
    // Or implement the cleanup logic directly
});
*/
forms/_setup.php
New file
@@ -0,0 +1,25 @@
<?php
/*************************************************************
 *
 *  Filters the forms for the form block
 *      Must contain an array with:
 *          'title'         => {string} optional
 *          'description    => {array} of strings, each entry becoming its own <p></p>
 *          'submit'        => {string} submit button text
 *          'success_title' => {string} a custom heading for the success message
 *          'success_message'=> {array} of strings, each entry becoming its own <p></p>
 *          'email_subject' => {string} subject for admin's email
 *          'fields'        => {array} as per MetaManager.php
 *          'sections'      => {array} optional array of sections, as per MetaManager.php, for a tabbed form
 *
 ************************************************************/
require(AMI_DIR . '/forms/contact.php');
add_filter('jvb_register_forms', 'ami_register_forms');
function ami_register_forms($forms) {
    $forms['contact']           = ami_contact();
    return $forms;
}
forms/contact.php
New file
@@ -0,0 +1,81 @@
<?php
function ami_contact():array
{
    return [
        'title'         => 'Contact',
        'description'   => [
            'You can always text, call, or email.',
            'Or you can fill out this form and we\'ll get back to you as soon as we can.',
        ],
        'submit'        => 'Contact',
        'success_title' => 'Success!',
        'success_description'   => [
            'We got it.',
            'We\'ll get back to you as soon as we can - usually pretty quick (unless it\'s a Monday or a Tuesday)'
        ],
        'email_subject' => '[CONTACT]',
        'fields'        => [
            'first_name'    => [
                'type'  => 'text',
                'label' => 'First Name',
                'autocomplete' => 'given-name',
                'required' => true,
                'section'   => 'about_you',
            ],
            'last_name'     => [
                'type'  => 'text',
                'label' => 'Last Name',
                'required' => true,
                'autocomplete'=> 'family-name',
                'section'   => 'about_you',
            ],
            'email'         => [
                'type'  => 'email',
                'label' => 'Email',
                'autocomplete'  => 'email',
                'required' => true,
                'section'   => 'about_you',
            ],
            'phone'         => [
                'type'  => 'tel',
                'label' => 'Phone',
                'required' => true,
                'autocomplete'  => 'tel',
                'section'   => 'about_you',
            ],
            'contact'       => [
                'type'  => 'checkbox',
                'label' => 'Preferred Contact',
                'options'   => [
                    'text'      => 'Text',
                    'email'     => 'Email',
                    'call'      => 'Call',
                ],
                'section'   => 'about_you',
            ],
            'type'  => [
                'type'  => 'radio',
                'label' => 'Nature of your Inquiry',
                'options'   => [
                    'residential'   => 'Residential',
                    'business'      => 'Business',
                ]
            ],
            'subtype'   => [
                'type'  => 'radio',
                'label' => 'Type of Inquiry',
                'options'   => [
                    'sales'         => 'Sales',
                    'repairs'       => 'Repairs',
                    'protection'    => 'Protection Plan',
                ]
            ],
            'message'   => [
                'type'  => 'textarea',
                'label' => 'How can I help?',
                'hint'  => 'Include general information about your idea, as well as details such as timeline, budget, location - the more the better!'
            ]
        ]
    ];
}
forms/setup.php
File was deleted
login/_setup.php
New file
@@ -0,0 +1,10 @@
<?php
// /login/setup.php
add_filter('jvb_login', 'ami_setup_login');
function ami_setup_login():array
{
    return [
        'login_header'                => 'Log in',
        'join_header'                 => 'Join in',
    ];
}
login/setup.php
File was deleted
seo.php
New file
@@ -0,0 +1,645 @@
<?php
add_filter('ami_OrganizationSchemaDefault', 'ami_organization_schema');
function ami_organization_schema(array $schema):array
{
    return array_merge($schema, [
        'id'    => '#martian-infotech',
        'type' => 'JVBase\managers\SEO\render\Thing\Organization\LocalBusiness\LocalBusiness',
        'name' => 'Martian Infotech',
        'url' => get_home_url(),
        'description' => 'Onsite and virtual tech support for residential and small business in Kamloops and throughout BC and Alberta.',
        'slogan' => 'Out of This World Technology. Down to Earth Support.',
        'logo' => get_theme_mod('custom_logo'),
        'foundingDate' => '2020-11-10',
        'founder' => [
            [
                'id'    => '#myron-lewitski',
                'type' => 'JVBase\managers\SEO\render\Thing\Person\Person',
                'name' => 'Myron Lewitski',
                'url' => 'https://martianit.ca'],
        ],
        'sameAs' => [
            'https://www.instagram.com/martianinfotech/',
            'https://www.facebook.com/MartianIT/',
            'https://www.twitter.com/martianinfotech',
            'https://ca.linkedin.com/in/mlewitski'
        ],
        // Contact
        'telephone' => '+1-780-800-8354',
        'email' => 'myron@martianit.ca',
        // Address - note the key names
        'address' => [
//                'street' => '6551 111 St NW',           // was 'street_address'
            'addressLocality' => 'Kamloops',                    // was 'locality'
            'addressRegion' => 'BC',                      // was 'region'
//                'postal_code' => 'T6H 4R5',
            'addressCountry' => 'CA',
        ],
        // Geo - note the key names
        'geo' => [
            'latitude' => '50.6890639',
            'longitude' => '-120.3528468',
        ],
        // Business details
        'priceRange' => '$$',
        'paymentAccepted' => ['Cash', 'Credit Card', 'Debit Card', 'E-Transfer'],
        'currenciesAccepted' => ['CAD'],
        'areaServed' => [
            [
                'id'    => '#kelowna',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Kelowna',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Kelowna'
            ],
            [
                'id'    => '#barriere',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Barriere',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Barriere,_British_Columbia'
            ],
            [
                'id'    => '#chase',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Chase',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Chase,_British_Columbia'
            ],
            [
                'id'    => '#savona',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Savona',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Savona,_British_Columbia'
            ],
            [
                'id'    => '#cache-creek',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Savona',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Cache_Creek,_British_Columbia'
            ],
            [
                'id'    => '#ashcroft',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Ashcroft',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Ashcroft,_British_Columbia'
            ],
            [
                'id'    => '#merritt',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Merritt',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Merritt,_British_Columbia'
            ],
            [
                'id'    => '#logan-lake',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Logan Lake',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Logan_Lake'
            ],
            [
                'id'    => '#cherry-creek',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Cherry Creek',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Cherry_Creek_(British_Columbia)'
            ],
            [
                'id'    => '#pinantan',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Pinantan',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Pinantan_Lake'
            ],
            [
                'id'    => '#monte-creek',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Monte Creek',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Monte_Creek'
            ],
            [
                'id'    => '#rayleigh',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Rayleigh',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Rayleigh,_Kamloops'
            ],
            [
                'id'    => '#clearwater',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Clearwater',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Clearwater,_British_Columbia'
            ],
            [
                'id'    => '#sicamous',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Sicamous',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Sicamous'
            ],
            [
                'id'    => '#salmon-arm',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Salmon Arm',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Salmon_Arm'
            ],
            [
                'id'    => '#british-columbia',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\State',
                'name' => 'British Columbia',
                'sameAs'    => 'https://en.wikipedia.org/wiki/British_Columbia'
            ],
            [
                'id'    => '#alberta',
                'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\State',
                'name' => 'Alberta',
                'sameAs'    => 'https://en.wikipedia.org/wiki/Alberta'
            ],
        ],
        // Hours - note the key names
        'openingHoursSpecification' => [
            [
                'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\StructuredValue\OpeningHoursSpecification',
                'dayOfWeek' => ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday','Saturday','Sunday'],
                'opens' => '9:00',
                'closes' => '15:00'
            ]
        ],
        // Services as offer catalog
        'hasOfferCatalog' => [
            'name'  => 'Our Products & Services',
            'items' => [
                [
                    'id'    => '#remote-tech-support',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#service-remote-tech-support',
                        'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service',
                        'name' => 'Remote Tech Support',
                        'description' => 'Hardware or Software Diagnostics & Repairs',
                    ],
                ],
                [
                    'id'    => '#onsite-tech-support',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#service-onsite-tech-support',
                        'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service',
                        'name' => 'Onsite Tech Support',
                        'description' => 'Hardware or Software Diagnostics & Repairs',
                    ],
                ],
                [
                    'id'    => '#windows-10-upgrades',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#service-windows-10-upgrades',
                        'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service',
                        'name' => 'Windows 10 Upgrades',
//                        'description' => 'Hardware or Software Diagnostics & Repairs',
                    ],
                ],
                [
                    'id'    => '#windows-11-upgrades',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#service-windows-11-upgrades',
                        'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service',
                        'name' => 'Windows 11 Upgrades',
//                        'description' => 'Hardware or Software Diagnostics & Repairs',
                    ],
                ],
                [
                    'id'    => '#mac-os-upgrades',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#service-mac-os-upgrades',
                        'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service',
                        'name' => 'Mac OS Upgrades',
//                        'description' => 'Hardware or Software Diagnostics & Repairs',
                    ],
                ],
                [
                    'id'    => '#virus-removal',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#service-virus-removal',
                        'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service',
                        'name' => 'Virus Removal',
//                        'description' => 'Hardware or Software Diagnostics & Repairs',
                    ],
                ],
                [
                    'id'    => '#malware-removal',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#service-malware-removal',
                        'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service',
                        'name' => 'Malware Removal',
//                        'description' => 'Hardware or Software Diagnostics & Repairs',
                    ],
                ],
                [
                    'id'    => '#data-recovery',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#service-data-recovery',
                        'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service',
                        'name' => 'Data Recovery',
                        'description' => 'Recover data from your failed hard drive, USB, or memory cards.',
                    ],
                ],
                [
                    'id'    => '#internet-network-support',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#service-internet-network-support',
                        'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service',
                        'name' => 'Internet & Network Support',
                        'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.',
                    ],
                ],
                [
                    'id'    => '#new-refurbished-desktop-pc',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#product-new-refurbished-desktop-pc',
                        'type' => 'JVBase\managers\SEO\render\Thing\Product\Product',
                        'name' => 'New & Off Lease or Refurbished PC Desktop Computers',
//                        'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.',
                    ],
                ],
                [
                    'id'    => '#new-refurbished-pc-laptops',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#product-new-refurbished-pc-laptops',
                        'type' => 'JVBase\managers\SEO\render\Thing\Product\Product',
                        'name' => 'New & Off Lease or Refurbished PC Laptops',
//                        'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.',
                    ],
                ],
                [
                    'id'    => '#new-refurbished-mac-desktop',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#product-new-refurbished-mac-desktop',
                        'type' => 'JVBase\managers\SEO\render\Thing\Product\Product',
                        'name' => 'New & Off Lease or Refurbished Mac Desktop Computers',
//                        'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.',
                    ],
                ],
                [
                    'id'    => '#new-refurbished-mac-laptops',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#product-new-refurbished-mac-laptops',
                        'type' => 'JVBase\managers\SEO\render\Thing\Product\Product',
                        'name' => 'New & Off Lease or Refurbished Mac Laptops',
//                        'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.',
                    ],
                ],
                [
                    'id'    => '#network-wifi-equipment',
                    'type'  => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
//                    'price'  => '200',
                    'priceCurrency' => 'CAD',
//                    'priceSpecification'    => [
//                        'type'  => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification',
//                        'price'  => '200',
//                        'priceCurrency' => 'CAD',
//                        'unitText' => 'treatment'
//                    ],
                    'itemOffered' => [
                        'id'    => '#product-network-wifi-equipment',
                        'type' => 'JVBase\managers\SEO\render\Thing\Product\Product',
                        'name' => 'Network & WiFi Equipment',
//                        'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.',
                    ],
                ],
            ]
        ],
//        'aggregateRating' => [
//            'ratingValue' => 5,
//            'reviewCount' => 109,
//            'bestRating' => 5,
//            'worstRating' => 1,
//        ],
    ]);
}
add_filter('ami_WebsiteSchemaDefault', 'ami_website_schema');
function ami_website_schema(array $schema):array
{
    return array_merge(
        $schema,
        [
            'type'  => 'JVBase\managers\SEO\render\Thing\CreativeWork\WebSite',
            'name' => 'Martian Infotech',
            'description' => 'Out of This World Technology. Down to Earth Support.',
            'inLanguage' => 'en-CA',
            'potentialAction' => [
                [
                    'id'    => '#contact',
                    'type' => 'JVBase\inc\managers\SEO\render\Thing\Action\CommunicateAction',
                    'name' => 'Contact Us',
                    'target' => '/contact/',
                    'description' => 'Get in touch with our team',
                ],
            ],
        ],
    );
}
//
//add_filter('jvb_schema', function($schema) {
//    return array_merge($schema, [
//        'organization' => [
//            'type' => 'LocalBusiness',
//            'name' => 'Martian Infotech',
//            'url' => get_home_url(),
//            'description' => 'Onsite and virtual tech support for residential and small business in Kamloops and throughout BC and Alberta.',
//            'slogan' => 'Out of This World Technology. Down to Earth Support.',
//            'logo' => get_theme_mod('custom_logo'),
//            'foundingDate' => '2020-11-10',
//
//            'founders' => [
//                ['name' => 'Myron Lewitski', 'url' => 'https://martianit.ca'],
//            ],
//
//            'sameAs' => [
//                [ 'url' => 'https://www.facebook.com/MartianIT/'],
//                [ 'url' => 'https://twitter.com/martianinfotech'],
//                [ 'url' => 'https://www.linkedin.com/in/mlewitski/'],
//                [ 'url' => 'https://www.instagram.com/martianinfotech/'],
//            ],
//
//            // Contact
//            'telephone' => '+1-780-800-8354',
//            'email' => 'myron@martianit.ca',
//
//            // Address - note the key names
//            'address' => [
////                'street' => '6551 111 St NW',           // was 'street_address'
//                'city' => 'Kamloops',                    // was 'locality'
//                'province' => 'BC',                      // was 'region'
////                'postal_code' => 'T6H 4R5',
//                'country' => 'CA',
//            ],
//
//            // Geo - note the key names
//            'geo' => [
//                'lat' => '50.6890639',                      // was 'latitude'
//                'lng' => '-120.3528468',                    // was 'longitude'
//            ],
//
//            // Business details
//            'priceRange' => '$$',
//            'paymentAccepted' => ['Cash', 'Credit Card', 'Debit Card', 'E-Transfer'],
//            'currenciesAccepted' => ['CAD'],
//            'areaServed' => [
//                ['name' => 'Kelowna'],
//                ['name' => 'Barriere'],
//                ['name' => 'Chase'],
//                ['name' => 'Savona'],
//                ['name' => 'Cache Creek'],
//                ['name' => 'Ashcroft'],
//                ['name' => 'Merritt'],
//                ['name' => 'Logan Lake'],
//                ['name' => 'Cherry Creek'],
//                ['name' => 'Paul Lake'],
//                ['name' => 'Pinantan'],
//                ['name' => 'Monte Creek'],
//                ['name' => 'Rayleigh'],
//                ['name' => 'Clearwater'],
//                ['name' => 'Sicamous'],
//                ['name' => 'Salmon Arm'],
//                ['name' => 'British Columbia'],
//                ['name' => 'Alberta'],
//            ],
//
//            // Hours - note the key names
//            'openingHours' => [
//                'monday' => ['opens' => '9:00', 'closes' => '17:00'],
//                'tuesday' => ['opens' => '9:00', 'closes' => '17:00'],
//                'wednesday' => ['opens' => '9:00', 'closes' => '17:00'],
//                'thursday' => ['opens' => '9:00', 'closes' => '17:00'],
//                'friday' => ['opens' => '9:00', 'closes' => '17:00'],
//                'saturday' => ['opens' => '9:00', 'closes' => '17:00'],
//                'sunday' => ['opens' => '9:00', 'closes' => '17:00'],
//            ],
//
//            // Services as offer catalog
//            'hasOfferCatalog' => [
//                'source'    => 'manual',
//                'manual_items' => [
//                    [
//                        'type'  => 'Product',
//                        'name' => 'New & Off Lease or Refurbished PC Desktop Computers',
////                        'description' => '',
//                    ],
//                    [
//                        'type'  => 'Product',
//                        'name' => 'New & Off Lease or Refurbished Mac Desktop Computers',
////                        'description' => '',
//                    ],
//                    [
//                        'type'  => 'Product',
//                        'name' => 'New & Off Lease or Refurbished Mac Laptops',
////                        'description' => '',
//                    ],
//                    [
//                        'type'  => 'Product',
//                        'name' => 'New & Off Lease or Refurbished PC Laptops',
////                        'description' => '',
//                    ],
//                    [
//                        'type'  => 'Product',
//                        'name' => 'Network & WiFi Equipment',
////                        'description' => '',
//                    ],
//                    [
//                        'type' => 'Service',
//                        'name' => 'Remote Tech Support',
//                        'description' => 'Hardware or Software Diagnostics & Repairs',
//                    ],
//                    [
//                        'type' => 'Service',
//                        'name' => 'Onsite Tech Support',
//                        'description' => 'Hardware or Software Diagnostics & Repairs',
//                    ],
//                    [
//                        'type' => 'Service',
//                        'name' => 'Windows 10 Upgrades',
////                        'description' => 'Hardware or Software Diagnostics & Repairs',
//                    ],
//                    [
//                        'type' => 'Service',
//                        'name' => 'Windows 11 Upgrades',
////                        'description' => 'Hardware or Software Diagnostics & Repairs',
//                    ],
//                    [
//                        'type' => 'Service',
//                        'name' => 'Mac OS Upgrades',
////                        'description' => 'Hardware or Software Diagnostics & Repairs',
//                    ],
//                    [
//                        'type' => 'Service',
//                        'name' => 'Virus Removal',
////                        'description' => 'Hardware or Software Diagnostics & Repairs',
//                    ],
//                    [
//                        'type' => 'Service',
//                        'name' => 'Malware Removal',
////                        'description' => 'Hardware or Software Diagnostics & Repairs',
//                    ],
//                    [
//                        'type' => 'Service',
//                        'name' => 'Internet & Network Support',
//                        'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.',
//                    ],
//                    [
//                        'type' => 'Service',
//                        'name' => 'Data Recovery',
//                        'description' => 'Recover data from your failed hard drive, USB, or memory cards.',
//                    ],
//                ]
//            ],
//
//            // Rating - note the structure
////            'aggregateRating' => [
////                'value' => 5,
////                'count' => 103,
////                'best' => 5,
////                'worst' => 1,
////            ],
//        ],
//
//        // Website settings (optional overrides)
//        'website' => [
//            'name' => 'JakeVan',
//            'description' => 'Out of this world technology. Down to earth support.',
//            'inLanguage' => 'en-CA',
//            'potentialAction' => [
//                [
//                    'name'  => 'Search',
//                    'type' => 'searchAction',
//                    'target' => '/?s={query}',
//                ],
//                [
//                    'type' => 'communicateAction',
//                    'name' => 'Contact Us',
//                    'target' => '/contact/',
//                    'description' => 'Get in touch with our team',
//                ],
//            ],
//        ],
//    ]);
//});
taxonomies/_setup.php
File was renamed from taxonomies/setup.php
@@ -20,24 +20,14 @@
 *             -> add use_in_stats (bool) to use the field in user statistics
 */
require(AJV_DIR . '/taxonomies/city.php');
require(AJV_DIR . '/taxonomies/form.php');
require(AJV_DIR . '/taxonomies/media.php');
require(AJV_DIR . '/taxonomies/progress.php');
require(AJV_DIR . '/taxonomies/style.php');
require(AJV_DIR . '/taxonomies/target.php');
require(AJV_DIR . '/taxonomies/theme.php');
//add_filter('jvb_taxonomy', 'ajv_taxonomy');
function ajv_taxonomy():array
{
    return [
        'city'      => ajv_city(),
        'style'     => ajv_style(),
        'theme'     => ajv_theme(),
        'form'      => ajv_form(),
        'medium'    => ajv_media(),
        'target'    => ajv_target(),
        'progress'  => ajv_progress(),
    ];
}
require(AMI_DIR . '/taxonomies/product_cat.php');
require(AMI_DIR . '/taxonomies/city.php');
require(AMI_DIR . '/taxonomies/tags.php');
//
//add_filter('jvb_taxonomy', 'ami_taxonomy');
//function ami_taxonomy():array
//{
//    return [
//        'product_cat'      => ami_category(),
//    ];
//}
taxonomies/city.php
@@ -1,37 +1,117 @@
<?php
// /taxonomies/city.php
function ajv_city():array
{
    return [
        'singular'       => 'City',
        'plural'         => 'Cities',
        'icon'           => 'city',
        'description'    => [
            'From Edmonton, yes - but also throughout Alberta.'
        ],
        'show_feed'      => true,
        'show_directory' => true,
        'approve_new'    => false,
use JVBase\registrar\Registrar;
add_action('jvbDefineRegistrar', 'ami_city');
add_action('jvbDefineRegistrarFields', 'ami_city_fields');
add_action('plugins_loaded', 'ami_city',1);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'ami_city_fields', 2);
add_filter('ami_CitySchemaDefault', 'ami_city_schema');
add_filter('ami_CityMetaDefault', 'ami_city_meta');
add_filter('ami_CityArchiveDefault', 'ami_city_archive');
function ami_city(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $city = Registrar::forTerm('city', 'City', 'Cities')
        ->setIcon('city')
        ->make([
        'rewrite'        => [
            'slug'         => 'in',
                'slug'          => 'in/city',
            'with_front'   => false,
            'hierarchical' => true,
        ],
        'hierarchical'   => true,
        'for_content'    => [
            'art',
            'design',
            'development',
            'strategy',
            'writing',
            'for'    => [
                'product',
                'service',
        ],
        'fields'         => [
            'term_name' => [
                'label'     => 'Name',
                'type'      => 'text',
                'quickEdit' => true,
            ],
            'common'    => [ 'wiki' ]
        ]
        ])
        ->setAll([
            'show_directory',
            'show_feed',
        ]);
//$directory = $city->getConfig('directory');
}
function ami_city_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $city = Registrar::getInstance('city');
//    $breadcrumbs = $city->config('breadcrumbs');
    $fields = $city->fields();
    $fields->addCommon('wiki');
}
function ami_city_schema():array
{
    return [
        'type'              => 'JVBase\managers\SEO\render\Thing\City\City',
        'name'              => '{{post_title}}',
    ];
}
function ami_city_meta():array
{
    return[
        'name' => '{{post_title}}',
    ];
}
function ami_city_archive(array $defaults):array
{
    return array_merge($defaults, [
    ]);
}
function ami_city_reference_schema(array $defaults):array
{
    return $defaults;
}
//
//function ami_city():array
//{
//    return [
//        'singular'       => 'City',
//        'plural'         => 'Cities',
//        'icon'           => 'city',
//        'description'    => [
//            'From Kamloops, yes - but also throughout Alberta and BC.'
//        ],
//        'show_feed'      => true,
//        'show_directory' => true,
//        'rewrite'        => [
//            'slug'         => 'in',
//            'with_front'   => false,
//            'hierarchical' => true,
//        ],
//        'hierarchical'   => true,
//        'for_content'    => [
//            'art',
//            'design',
//            'development',
//            'strategy',
//            'writing',
//        ],
//        'fields'         => [
//            'term_name' => [
//                'label'     => 'Name',
//                'type'      => 'text',
//                'quickEdit' => true,
//            ],
//            'common'    => [ 'wiki' ]
//        ]
//    ];
//}
taxonomies/form.php
File was deleted
taxonomies/media.php
File was deleted
taxonomies/product_cat.php
New file
@@ -0,0 +1,109 @@
<?php
// /taxonomies/product_cat.php
use JVBase\registrar\Registrar;
add_action('jvbDefineRegistrar', 'ami_product_cat');
add_action('jvbDefineRegistrarFields', 'ami_product_cat_fields');
add_action('plugins_loaded', 'ami_product_cat',1);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'ami_product_cat_fields', 2);
add_filter('ami_Product_catSchemaDefault', 'ami_product_cat_schema');
add_filter('ami_Product_catMetaDefault', 'ami_product_cat_meta');
add_filter('ami_Product_catArchiveDefault', 'ami_product_cat_archive');
function ami_product_cat(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $product_cat = Registrar::forTerm('product_cat', 'Category', 'Categories')
        ->setIcon('folder')
        ->make([
            'rewrite'   => [
                'slug'          => 'in/category',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'product',
                'service',
            ],
        ])
        ->setAll([
            'show_directory',
            'show_feed',
        ]);
//$directory = $product_cat->getConfig('directory');
}
function ami_product_cat_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $product_cat = Registrar::getInstance('product_cat');
//    $breadcrumbs = $product_cat->config('breadcrumbs');
    $fields = $product_cat->fields();
    $fields->addCommon('wiki');
}
function ami_product_cat_schema():array
{
    return [
        'name'              => '{{post_title}}',
    ];
}
function ami_product_cat_meta():array
{
    return[
        'name' => '{{post_title}}',
    ];
}
function ami_product_cat_archive(array $defaults):array
{
    return array_merge($defaults, [
    ]);
}
function ami_product_cat_reference_schema(array $defaults):array
{
    return $defaults;
}
//
//function ami_category():array
//{
//    return [
//        'singular'       => 'Category',
//        'plural'         => 'Categories',
//        'icon'           => 'folder',
//        'show_feed'      => true,
//        'show_directory' => true,
//        'rewrite'        => [
//            'slug'         => 'in',
//            'with_front'   => false,
//            'hierarchical' => true,
//        ],
//        'hierarchical'   => true,
//        'for_content'    => [
//            'product',
//            'service',
//        ],
//        'fields'         => [
//            'term_name' => [
//                'label'     => 'Name',
//                'type'      => 'text',
//                'quickEdit' => true,
//            ],
//            'common'    => [ 'wiki' ]
//        ]
//    ];
//}
taxonomies/progress.php
File was deleted
taxonomies/style.php
File was deleted
taxonomies/tags.php
New file
@@ -0,0 +1,111 @@
<?php
// /taxonomies/tags.php
use JVBase\registrar\Registrar;
add_action('jvbDefineRegistrar', 'ami_tags');
add_action('jvbDefineRegistrarFields', 'ami_tags_fields');
add_action('plugins_loaded', 'ami_tags',1);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'ami_tags_fields', 2);
add_filter('ami_TagsSchemaDefault', 'ami_tags_schema');
add_filter('ami_TagsMetaDefault', 'ami_tags_meta');
add_filter('ami_TagsArchiveDefault', 'ami_tags_archive');
function ami_tags(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $tags = Registrar::forTerm('tags', 'Tag', 'Tags')
        ->setIcon('hash')
        ->make([
            'rewrite'   => [
                'slug'          => 'in/tag',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'product',
                'service',
            ],
        ])
        ->setAll([
            'show_directory',
            'show_feed',
        ]);
//$directory = $tags->getConfig('directory');
}
function ami_tags_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $tags = Registrar::getInstance('tags');
//    $breadcrumbs = $tags->config('breadcrumbs');
    $fields = $tags->fields();
    $fields->addCommon('wiki');
}
function ami_tags_schema():array
{
    return [
        'name'              => '{{post_title}}',
    ];
}
function ami_tags_meta():array
{
    return[
        'name' => '{{post_title}}',
    ];
}
function ami_tags_archive(array $defaults):array
{
    return array_merge($defaults, [
    ]);
}
function ami_tags_reference_schema(array $defaults):array
{
    return $defaults;
}
//function ami_tags():array
//{
//    return [
//        'singular'       => 'Tag',
//        'plural'         => 'Tags',
//        'icon'           => 'tag',
//        'description'    => [
//            'Further descriptors of your products and services. Example: "new", "refurbished",etc'
//        ],
//        'show_feed'      => true,
//        'show_directory' => true,
//        'rewrite'        => [
//            'slug'         => 'is',
//            'with_front'   => false,
//            'hierarchical' => true,
//        ],
//        'hierarchical'   => true,
//        'for_content'    => [
//            'product',
//            'service',
//        ],
//        'fields'         => [
//            'term_name' => [
//                'label'     => 'Name',
//                'type'      => 'text',
//                'quickEdit' => true,
//            ],
//            'common'    => [ 'wiki' ]
//        ]
//    ];
//}
taxonomies/target.php
File was deleted
taxonomies/theme.php
File was deleted
temp.php
File was deleted
users/client.php
@@ -1,6 +1,6 @@
<?php
// /users/client.php
function ajv_user_client():array
function ami_user_client():array
{
    return [
        'label'            => 'Client',
users/enthusiast.php
File was deleted
users/setup.php
@@ -25,15 +25,15 @@
 *                             -> description of the user role. Used in the registration page
 */
//require(AJV_DIR . '/users/client.php');
//require(AJV_DIR . '/users/enthusiast.php');
//require(AMI_DIR . '/users/client.php');
//require(AMI_DIR . '/users/enthusiast.php');
//add_filter('jvb_user', 'ajv_user');
//add_filter('jvb_user', 'ami_user');
//
//function ajv_user():array
//function ami_user():array
//{
//    return [
////        'enthusiast'    => ajv_user_enthusiast(),
//        'client'        => ajv_user_client(),
////        'enthusiast'    => ami_user_enthusiast(),
//        'client'        => ami_user_client(),
//    ];
//}