From cf7c6dae604a0bbd471afa156f82555a5a2e9ab7 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 28 May 2026 19:26:52 +0000
Subject: [PATCH] =gitblit switch

---
 forms/_setup.php                       |   25 
 assets/css/icons.css                   |    1 
 taxonomies/_setup.php                  |   32 
 taxonomies/product_cat.php             |  109 ++
 amartianit.php                         |  301 +++++++
 content/_setup.php                     |   30 
 seo.php                                |  645 ++++++++++++++++
 forms/contact.php                      |   81 ++
 files/fileManagement.php               |  444 -----------
 taxonomies/city.php                    |  142 ++
 login/_setup.php                       |   10 
 blocks/_setup.php                      |   46 +
 content/support.php                    |    3 
 taxonomies/tags.php                    |  111 ++
 /dev/null                              |   21 
 assets/css/dash.css                    |    1 
 assets/icons/full-logo.svg             |    1 
 assets/icons/martian logo shadow.svg   |    1 
 content/product.php                    |  141 +++
 assets/icons/martian infotech logo.svg |    1 
 content/service.php                    |  144 +++
 assets/icons/martian infotech.svg      |    1 
 users/setup.php                        |   12 
 assets/css/forms.css                   |    1 
 users/client.php                       |    2 
 25 files changed, 1,763 insertions(+), 543 deletions(-)

diff --git a/ajakevan.php b/ajakevan.php
deleted file mode 100644
index 34f71b6..0000000
--- a/ajakevan.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-/*
-Plugin Name: JakeVan Extension
-Plugin URI: https://jakevan.ca/
-Description: An Extension of JakeVan Base, for jakevan.
-Author: Jake Vanderwerf
-Version: 1.0.0
-Author URI: https://jakevan.ca/
-Textdomain: ajv
-*/
-
-//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
-
-if (!defined('ABSPATH')) {
-    exit;
-}
-
-use JVBase\managers\CacheManager;
-
-add_filter('jvb_base', function () {
-    return 'ajv_';
-});
-
-
-const AJV_DIR = WP_PLUGIN_DIR . '/ajakevan';
-define('AJV_URL', plugin_dir_url(__FILE__));
-
-require(AJV_DIR . '/content/setup.php');
-//require(AJV_DIR . '/dashboard/setup.php');
-//require(AJV_DIR . '/forms/setup.php');
-require(AJV_DIR . '/login/setup.php');
-require(AJV_DIR . '/taxonomies/setup.php');
-//require(AJV_DIR . '/users/setup.php');
-//require(AJV_DIR . '/files/fileManagement.php');
-
-
-/**
- * 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', 'ajv_setup_site');
-function ajv_setup_site():array
-{
-    return [
-        'icons'               => 'light',
-        'is_directory'        => false,        //as in, a membership directory
-        'has_membership'      => false,
-        'has_map'             => true,
-        'dashboard'           => true,
-        'support'         => true,
-        'feed_block'      => true,
-        'email_notifications' => true,
-        'integrations'  => [
-            'bluesky'     => true,
-            'cloudflare'  => true,
-            'facebook'    => false,
-            'maps'        => true,
-            'gmb'         => true,
-            'helcim'      => false,
-            'instagram'   => false,
-            'square'      => true,
-            'umami'       => true,
-        ],
-        'is_restaurant'       => false,
-        'limit_hours'         => false,
-        'enthusiast'          => true,
-        'favourites'          => true,    //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', 'ajv_setup_membership');
-//function ajv_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', 'ajv_loading_quips');
-//function ajv_loading_quips(array $quips):array
-//{
-//    return [];
-//}
diff --git a/amartianit.php b/amartianit.php
new file mode 100644
index 0000000..478a935
--- /dev/null
+++ b/amartianit.php
@@ -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
+}
+
diff --git a/assets/css/dash.css b/assets/css/dash.css
new file mode 100644
index 0000000..8b43a5e
--- /dev/null
+++ b/assets/css/dash.css
@@ -0,0 +1 @@
+.icon-magnifying-glass{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjguMjQsMjE5Ljc2bC01MS4zOC01MS4zOGE4Ni4xNSw4Ni4xNSwwLDEsMC04LjQ4LDguNDhsNTEuMzgsNTEuMzhhNiw2LDAsMCwwLDguNDgtOC40OFpNMzgsMTEyYTc0LDc0LDAsMSwxLDc0LDc0QTc0LjA5LDc0LjA5LDAsMCwxLDM4LDExMloiLz48L3N2Zz4=');}
\ No newline at end of file
diff --git a/assets/css/forms.css b/assets/css/forms.css
new file mode 100644
index 0000000..6244e34
--- /dev/null
+++ b/assets/css/forms.css
@@ -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+');}
\ No newline at end of file
diff --git a/assets/css/icons.css b/assets/css/icons.css
new file mode 100644
index 0000000..91cf450
--- /dev/null
+++ b/assets/css/icons.css
@@ -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=');}
\ No newline at end of file
diff --git a/assets/icons/full-logo.svg b/assets/icons/full-logo.svg
new file mode 100644
index 0000000..47bdee9
--- /dev/null
+++ b/assets/icons/full-logo.svg
@@ -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>
\ No newline at end of file
diff --git a/assets/icons/jakevan-logo.svg b/assets/icons/jakevan-logo.svg
deleted file mode 100644
index 9f1c702..0000000
--- a/assets/icons/jakevan-logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-<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="M17.88 14.68H12.9l-.43-1.63H9.58l-.45 1.63H6.5l2.89-8.74h3.2l2.89 8.64v-8.6h2.4v3.78c.1-.2.22-.38.35-.57.13-.2.26-.37.39-.54l1.86-2.67h7.8v1.89H25.4v1.37h2.65v1.88H25.4v1.65h2.86v1.91h-7.93l-1.75-3.32-.7.41zm5.13-8.59-2.7 3.79 2.7 4.74zm-11.05 5.03-.38-1.43a136.86 136.86 0 0 0-.4-1.55L11 7.38a17.76 17.76 0 0 1-.36 1.6l-.18.71-.39 1.43zm-8.58 6.3a5.74 5.74 0 0 1-1.24-.13v-1.83l.41.08c.15.03.3.05.47.05.3 0 .51-.06.67-.17a.92.92 0 0 0 .34-.52c.06-.23.1-.52.1-.86V5.98h2.4v7.85c0 .88-.13 1.57-.4 2.1-.26.52-.63.9-1.1 1.14-.48.23-1.03.35-1.65.35Z" style="fill:currentColor;stroke-width:.0184392" transform="translate(1.4 .66) scale(.96050134)"/><path d="M22.82 22.27h-4.06l-.37-1.4H15.9l-.39 1.4h-2.26l2.49-7.53h2.75l2.49 7.44v-7.41h2.7l2.77 5.21h.03a41.1 41.1 0 0 1-.07-1.82v-3.39h1.83v7.5h-2.7l-2.79-5.28h-.04a12.83 12.83 0 0 1 .08 1.26l.02.64zm-4.86-3.07-.33-1.23a89.07 89.07 0 0 0-.35-1.34l-.14-.65a15.04 15.04 0 0 1-.31 1.37l-.16.62-.33 1.23zm-3.85-4.43-2.5 7.5H9.2l-2.5-7.5h2.32l1.04 3.8a15.03 15.03 0 0 1 .36 1.76 7.61 7.61 0 0 1 .2-1.2l.14-.54 1.06-3.82z" style="fill:currentColor;stroke-width:.0159884" transform="translate(1.4 .66) scale(.96050134)"/><path d="M11.9 24.21c0 .4-.07.72-.2.99-.15.26-.36.46-.63.6-.28.13-.62.2-1.03.2H9.2v-3.5h.97c.38 0 .7.06.96.19.25.13.45.32.58.58.14.25.2.57.2.94zm-.26.01c0-.33-.05-.61-.16-.83a1.1 1.1 0 0 0-.51-.51 1.95 1.95 0 0 0-.87-.17h-.66v3.07h.6c.53 0 .93-.13 1.2-.39.27-.26.4-.65.4-1.17zM14.27 26h-1.95v-3.5h1.95v.22h-1.7v1.32h1.6v.23h-1.6v1.5h1.7zm1.28-3.5c.28 0 .52.02.7.08a.8.8 0 0 1 .44.3c.1.14.14.33.14.57a.9.9 0 0 1-.1.45.87.87 0 0 1-.27.32c-.12.08-.25.14-.4.18l.98 1.6h-.3l-.92-1.53h-.89V26h-.25v-3.5zm-.03.21h-.59v1.55h.71c.3 0 .52-.07.69-.21.16-.14.24-.34.24-.6 0-.28-.09-.47-.26-.58-.17-.1-.43-.16-.79-.16zm5.57-.22L20.12 26h-.25l-.76-2.65-.05-.16-.04-.14a18.8 18.8 0 0 1-.06-.24 20.6 20.6 0 0 1-.11.48L18.09 26h-.25l-.96-3.5h.26l.67 2.47a27.36 27.36 0 0 1 .09.35l.04.17.03.15.03-.16a4.83 4.83 0 0 1 .14-.53l.7-2.46h.25l.73 2.48a11.98 11.98 0 0 1 .13.53l.04.15a11.02 11.02 0 0 1 .15-.68l.69-2.48zM23.26 26h-1.95v-3.5h1.95v.22h-1.7v1.32h1.6v.23h-1.6v1.5h1.7zm1.28-3.5c.28 0 .52.02.71.08a.8.8 0 0 1 .43.3c.1.14.14.33.14.57a.9.9 0 0 1-.1.45.87.87 0 0 1-.27.32c-.11.08-.25.14-.4.18l.98 1.6h-.3l-.92-1.53h-.88V26h-.26v-3.5zm-.02.21h-.6v1.55h.72c.29 0 .51-.07.68-.21.16-.14.24-.34.24-.6 0-.28-.08-.47-.26-.58-.17-.1-.43-.16-.78-.16zM26.5 26h-.25v-3.5h1.95v.22h-1.7v1.49h1.6v.22h-1.6z" style="fill:currentColor;stroke-width:.0101068" transform="translate(1.4 .66) scale(.96050134)"/></svg>
\ No newline at end of file
diff --git a/assets/icons/martian infotech logo.svg b/assets/icons/martian infotech logo.svg
new file mode 100644
index 0000000..c09a11c
--- /dev/null
+++ b/assets/icons/martian infotech logo.svg
@@ -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>
\ No newline at end of file
diff --git a/assets/icons/martian infotech.svg b/assets/icons/martian infotech.svg
new file mode 100644
index 0000000..63cfb2f
--- /dev/null
+++ b/assets/icons/martian infotech.svg
@@ -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>
\ No newline at end of file
diff --git a/assets/icons/martian logo shadow.svg b/assets/icons/martian logo shadow.svg
new file mode 100644
index 0000000..6b00597
--- /dev/null
+++ b/assets/icons/martian logo shadow.svg
@@ -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>
\ No newline at end of file
diff --git a/blocks/_setup.php b/blocks/_setup.php
new file mode 100644
index 0000000..a57fec7
--- /dev/null
+++ b/blocks/_setup.php
@@ -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);
+}
+
diff --git a/content/setup.php b/content/_setup.php
similarity index 74%
rename from content/setup.php
rename to content/_setup.php
index 069e0d3..3bc8758 100644
--- a/content/setup.php
+++ b/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(),
-    ];
-}
\ No newline at end of file
+//add_filter('jvb_content', 'ami_content');
+//function ami_content($content):array
+//{
+//    return [
+//        'product'      => ami_product(),
+//        'service'      => ami_service(),
+//        'support'       => ami_support(),
+//    ];
+//}
\ No newline at end of file
diff --git a/content/art.php b/content/art.php
deleted file mode 100644
index 1d308c4..0000000
--- a/content/art.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-// /content/art.php
-function ajv_art():array
-{
-    return [
-        'singular'       => 'Art',
-        'plural'       => 'Art',
-        'dash_title'    => 'Art',
-        'dash_description' => 'Manage your art posts',
-        'breadcrumb'    => 'Art',
-        'hide_single'  => false,
-        'show_feed'    => true,
-        'favouritable' => true,
-        'karma'        => false,
-        'icon'         => 'palette',
-        'rewrite'      => [
-            'slug'       => 'art',
-            'with_front' => false,
-        ],
-        '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 Artwork',
-    ];
-}
diff --git a/content/design.php b/content/design.php
deleted file mode 100644
index a4a1fb5..0000000
--- a/content/design.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-// /content/design.php
-function ajv_design():array
-{
-    return [
-        'singular'       => 'Graphic Design',
-        'plural'       => 'Designs',
-        'hide_single'  => false,
-        'redirectToAuthor'=> false,
-        'show_feed'    => true,
-        'favouritable' => true,
-        'karma'        => false,
-        'icon'         => 'artwork',
-        'rewrite'      => [
-            'slug'       => 'design',
-            'with_front' => false,
-        ],
-        '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 Artwork',
-    ];
-}
diff --git a/content/development.php b/content/development.php
deleted file mode 100644
index 2067b95..0000000
--- a/content/development.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-// /content/development.php
-function ajv_development():array
-{
-    return [
-        'singular'       => 'Development',
-        'plural'       => 'Developments',
-        'hide_single'  => false,
-        'redirectToAuthor'=> false,
-        'show_feed'    => true,
-        'favouritable' => true,
-        'karma'        => false,
-        'icon'         => 'brackets-angle',
-        'rewrite'      => [
-            'slug'       => 'development',
-            'with_front' => false,
-        ],
-        '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 Artwork',
-    ];
-}
diff --git a/content/product.php b/content/product.php
new file mode 100644
index 0000000..870fdc2
--- /dev/null
+++ b/content/product.php
@@ -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',
+//    ];
+//}
diff --git a/content/service.php b/content/service.php
new file mode 100644
index 0000000..9039c9d
--- /dev/null
+++ b/content/service.php
@@ -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',
+//    ];
+//}
diff --git a/content/strategy.php b/content/strategy.php
deleted file mode 100644
index bc1092a..0000000
--- a/content/strategy.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-// /content/strategy.php
-function ajv_strategy():array
-{
-    return [
-        'singular'       => 'Strategy',
-        'plural'       => 'Strategies',
-        'hide_single'  => false,
-        'redirectToAuthor'=> false,
-        'show_feed'    => true,
-        'favouritable' => true,
-        'karma'        => false,
-        'icon'         => 'brain',
-        'rewrite'      => [
-            'slug'       => 'strategy',
-            'with_front' => false,
-        ],
-        '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 Artwork',
-    ];
-}
diff --git a/content/support.php b/content/support.php
index 3ea1c3e..72204b8 100644
--- a/content/support.php
+++ b/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,
diff --git a/content/writing.php b/content/writing.php
deleted file mode 100644
index 7039d9c..0000000
--- a/content/writing.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-// /content/writing.php
-function ajv_writing():array
-{
-    return [
-        'singular'       => 'Writing',
-        'plural'       => 'Writings',
-        'hide_single'  => false,
-        'redirectToAuthor'=> false,
-        'show_feed'    => true,
-        'favouritable' => true,
-        'karma'        => false,
-        'icon'         => 'pen-nib',
-        'rewrite'      => [
-            'slug'       => 'writing',
-            'with_front' => false,
-        ],
-        '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 Artwork',
-    ];
-}
diff --git a/dashboard/setup.php b/dashboard/setup.php
deleted file mode 100644
index b3d9bbc..0000000
--- a/dashboard/setup.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/files/fileManagement.php b/files/fileManagement.php
index 312d3aa..b3d9bbc 100644
--- a/files/fileManagement.php
+++ b/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
-});
-*/
\ No newline at end of file
diff --git a/forms/_setup.php b/forms/_setup.php
new file mode 100644
index 0000000..833e7f0
--- /dev/null
+++ b/forms/_setup.php
@@ -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;
+}
\ No newline at end of file
diff --git a/forms/contact.php b/forms/contact.php
new file mode 100644
index 0000000..6a765fe
--- /dev/null
+++ b/forms/contact.php
@@ -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!'
+            ]
+        ]
+    ];
+}
\ No newline at end of file
diff --git a/forms/setup.php b/forms/setup.php
deleted file mode 100644
index b3d9bbc..0000000
--- a/forms/setup.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/login/_setup.php b/login/_setup.php
new file mode 100644
index 0000000..9f3d44f
--- /dev/null
+++ b/login/_setup.php
@@ -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',
+    ];
+}
diff --git a/login/setup.php b/login/setup.php
deleted file mode 100644
index b2932d9..0000000
--- a/login/setup.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-// /login/setup.php
-add_filter('jvb_login', 'ajv_setup_login');
-function ajv_setup_login():array
-{
-    return [
-        'login_from_favourite_header' => 'Join the scene; <small>keep your collection.</small>',
-        'login_header'                => 'Log in',
-        'join_header'                 => 'Join in',
-        'from_favourites_benefits'    => [
-            'Save designs you love',
-            'Get personalized recommendations',
-            'Connect with artists',
-            'Build your inspiration collection',
-            'Bonus: It\'s all free!'
-        ]
-    ];
-}
diff --git a/seo.php b/seo.php
new file mode 100644
index 0000000..48f6d69
--- /dev/null
+++ b/seo.php
@@ -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',
+//                ],
+//            ],
+//        ],
+//    ]);
+//});
\ No newline at end of file
diff --git a/taxonomies/setup.php b/taxonomies/_setup.php
similarity index 66%
rename from taxonomies/setup.php
rename to taxonomies/_setup.php
index fb46b2e..47cab37 100644
--- a/taxonomies/setup.php
+++ b/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(),
-    ];
-}
\ No newline at end of file
+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(),
+//    ];
+//}
\ No newline at end of file
diff --git a/taxonomies/city.php b/taxonomies/city.php
index 3604bf6..7001d85 100644
--- a/taxonomies/city.php
+++ b/taxonomies/city.php
@@ -1,37 +1,117 @@
 <?php
 // /taxonomies/city.php
-function ajv_city():array
+
+
+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/city',
+                'with_front'    => false,
+                'hierarchical'  => true,
+            ],
+            'for'    => [
+                'product',
+                'service',
+            ],
+        ])
+        ->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 [
-        'singular'       => 'City',
-        'plural'         => 'Cities',
-        'icon'           => 'city',
-        'description'    => [
-            'From Edmonton, yes - but also throughout Alberta.'
-        ],
-        'show_feed'      => true,
-        'show_directory' => true,
-        'approve_new'    => false,
-        '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' ]
-        ]
+        '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' ]
+//        ]
+//    ];
+//}
diff --git a/taxonomies/form.php b/taxonomies/form.php
deleted file mode 100644
index 7f50b8e..0000000
--- a/taxonomies/form.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-// /taxonomies/form.php
-function ajv_form():array
-{
-    return [
-        'singular'       => 'Form',
-        'plural'         => 'Forms',
-        'description'    => [
-            'From paintings to sculptures.'
-        ],
-        'icon'           => 'shapes',
-        'show_feed'      => true,
-        'show_directory' => false,
-        'approve_new'    => false,
-        'rewrite'        => [
-            'slug'       => 'form',
-            'with_front' => false,
-        ],
-        'for_content'    => [
-            'art',
-            'design',
-        ],
-        'fields'         => [
-            'term_name' => [
-                'label'     => 'Name',
-                'type'      => 'text',
-                'quickEdit' => true,
-            ],
-            'common'    => [ 'wiki' ]
-        ]
-    ];
-}
diff --git a/taxonomies/media.php b/taxonomies/media.php
deleted file mode 100644
index 1bf734c..0000000
--- a/taxonomies/media.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-// /taxonomies/media.php
-function ajv_media():array
-{
-    return [
-        'singular'       => 'Medium',
-        'plural'         => 'Media',
-        'description'    => [
-            '<b>What it\'s made of.</b>',
-            'From clay to oil paints'
-        ],
-        'icon'           => 'media',
-        'show_feed'      => true,
-        'show_directory' => true,
-        'approve_new'    => true,
-        'rewrite'        => [
-            'slug'         => 'media',
-            'with_front'   => false,
-            'hierarchical' => true,
-        ],
-        'hierarchical'   => true,
-        'for_content'    => [
-            'art'
-        ],
-        'fields'         => [
-            'term_name' => [
-                'label'     => 'Name',
-                'type'      => 'text',
-                'quickEdit' => true,
-            ],
-            'common'    => [ 'wiki' ]
-        ]
-    ];
-}
diff --git a/taxonomies/product_cat.php b/taxonomies/product_cat.php
new file mode 100644
index 0000000..8c71760
--- /dev/null
+++ b/taxonomies/product_cat.php
@@ -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' ]
+//        ]
+//    ];
+//}
diff --git a/taxonomies/progress.php b/taxonomies/progress.php
deleted file mode 100644
index 6c6e290..0000000
--- a/taxonomies/progress.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-// /taxonomies/progress.php
-function ajv_progress():array
-{
-    return [
-        'singular'       => 'Progress',
-        'plural'         => 'Progress',
-        'icon'           => 'circle-notch',
-        'show_feed'      => true,
-        'show_directory' => true,
-        'approve_new'    => false,
-        'rewrite'        => [
-            'slug'         => 'progress',
-            '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' ]
-        ]
-    ];
-}
diff --git a/taxonomies/style.php b/taxonomies/style.php
deleted file mode 100644
index bf4475d..0000000
--- a/taxonomies/style.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-// /taxonomies/style.php
-function ajv_style():array
-{
-    return [
-        'directory'    => 'Styles',
-        'description'    => [
-            'From American Traditional to Japanese.'
-        ],
-        'singular'     => 'Style',
-        'plural'       => 'Styles',
-        'show_directory' => true,
-        'approve_new'  => false,
-        'icon'         => 'folder',
-        'favouritable' => true,
-        'show_feed'    => true,
-        'rewrite'      => [
-            'slug'         => 'style',
-            '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', 'alternate_name', 'keywords' ]
-        ]
-    ];
-}
diff --git a/taxonomies/tags.php b/taxonomies/tags.php
new file mode 100644
index 0000000..369a870
--- /dev/null
+++ b/taxonomies/tags.php
@@ -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' ]
+//        ]
+//    ];
+//}
diff --git a/taxonomies/target.php b/taxonomies/target.php
deleted file mode 100644
index 2fd2a07..0000000
--- a/taxonomies/target.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-// /taxonomies/target.php
-function ajv_target():array
-{
-    return [
-        'singular'     => 'Target Audience',
-        'plural'       => 'Target Audiences',
-        'icon'         => 'crosshair-simple',
-        'show_feed'    => false,
-        'rewrite'      => [
-            'slug'         => 'target',
-            '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' ]
-        ]
-    ];
-}
diff --git a/taxonomies/theme.php b/taxonomies/theme.php
deleted file mode 100644
index 9c8583c..0000000
--- a/taxonomies/theme.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-// /taxonomies/theme.php
-function ajv_theme():array
-{
-    return [
-        'directory'    => 'Themes',
-        'show_directory' => true,
-        'isGrouped'     => true,
-        'description'    => [
-            'What makes up the tattoo, asides from style.',
-            'From bees to ideas to carrots.'
-        ],
-        'singular'     => 'Theme',
-        'plural'       => 'Themes',
-        'icon'         => 'hashtag',
-        'favouritable' => true,
-        'show_feed'    => true,
-        'approve_new'  => false,
-        'rewrite'      => [
-            'slug'         => 'themes',
-            'with_front'   => false,
-            'hierarchical' => true,
-        ],
-        'hierarchical' => true,
-        'for_content'  => [
-            'art',
-            'design',
-            'development',
-            'strategy',
-            'writing',
-        ],
-        'fields'       => [
-            'term_name'       => [
-                'label'     => 'Name',
-                'type'      => 'text',
-                'quickEdit' => true,
-            ],
-            'similar'         => [
-                'type'          => 'taxonomy',
-                'taxonomy_type' => 'reference',
-                'taxonomy'      => 'theme',
-                'label'         => 'Similar Themes',
-            ],
-            'description'     => [
-                'type'  => 'textarea',
-                'quill' => true,
-                'label' => 'Description',
-            ],
-            'archive_title'   => [
-                'type'        => 'text',
-                'label'       => 'Archive Title',
-                'description' => 'If the generated title does not jive, set it here',
-            ],
-            'common'          => [ 'wiki', 'alternate_name', 'keywords' ]
-        ]
-    ];
-}
diff --git a/temp.php b/temp.php
deleted file mode 100644
index f2591b7..0000000
--- a/temp.php
+++ /dev/null
@@ -1,849 +0,0 @@
-<?php
-//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
-
-if (!defined('ABSPATH')) {
-    exit;
-}
-
-use JVBase\managers\CacheManager;
-
-add_filter('jvb_base', function () {
-    return 'ajv_';
-});
-
-
-const AJV_DIR = WP_PLUGIN_DIR . '/ajakevan';
-define('AJV_URL', plugin_dir_url(__FILE__));
-
-require(AJV_DIR . '/content/setup.php');
-//require(AJV_DIR . '/dashboard/setup.php');
-//require(AJV_DIR . '/forms/setup.php');
-require(AJV_DIR . '/login/setup.php');
-require(AJV_DIR . '/taxonomies/setup.php');
-//require(AJV_DIR . '/users/setup.php');
-//require(AJV_DIR . '/files/fileManagement.php');
-
-
-/**
- * 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', 'ajv_setup_site');
-function ajv_setup_site(): array
-{
-    return [
-        'icons' => 'light',
-        'is_directory' => false,        //as in, a membership directory
-        'has_membership' => false,
-        'has_map' => true,
-        'dashboard' => true,
-        'has_support' => true,
-        'use_feed_block' => true,
-        'email_notifications' => true,
-        'integrations' => [
-            'bluesky' => true,
-            'cloudflare' => true,
-            'facebook' => false,
-            'maps' => true,
-            'gmb' => true,
-            'helcim' => false,
-            'instagram' => false,
-            'square' => true,
-            'umami' => true,
-        ],
-//        'is_restaurant'       => false,
-//        'limit_hours'         => false,
-//        'enthusiast'          => true,
-//        'favourites'          => true,    //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', 'ajv_setup_membership');
-//function ajv_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', 'ajv_loading_quips');
-function ajv_loading_quips(array $quips): array
-{
-    return [];
-}
-
-
-// /content/art.php
-function ajv_art(): array
-{
-    return [
-        'singular' => 'Art',
-        'plural' => 'Art',
-        'dash_title' => 'Art',
-        'dash_description' => 'Manage your art posts',
-        'breadcrumb' => 'Art',
-        'hide_single' => false,
-        'show_feed' => true,
-        'favouritable' => true,
-        'karma' => false,
-        'icon' => 'artwork',
-        'rewrite' => [
-            'slug' => 'art',
-            'with_front' => false,
-        ],
-        '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 Artwork',
-    ];
-}
-
-
-// /content/design.php
-function ajv_design(): array
-{
-    return [
-        'singular' => 'Graphic Design',
-        'plural' => 'Designs',
-        'hide_single' => false,
-        'redirectToAuthor' => false,
-        'show_feed' => true,
-        'favouritable' => true,
-        'karma' => false,
-        'icon' => 'artwork',
-        'rewrite' => [
-            'slug' => 'design',
-            'with_front' => false,
-        ],
-        '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 Artwork',
-    ];
-}
-
-
-// /content/development.php
-function ajv_development(): array
-{
-    return [
-        'singular' => 'Development',
-        'plural' => 'Developments',
-        'hide_single' => false,
-        'redirectToAuthor' => false,
-        'show_feed' => true,
-        'favouritable' => true,
-        'karma' => false,
-        'icon' => 'brackets-angle',
-        'rewrite' => [
-            'slug' => 'development',
-            'with_front' => false,
-        ],
-        '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 Artwork',
-    ];
-}
-
-
-// /content/setup.php
-
-/**
- * JVB_CONTENT: Base post type definitions
- *  Structure:  [ 'slug' => [$options], ]
- *  Note: slug is prepended with BASE in registration
- *  $options includes:
- *  - any $args from register_post_type
- *  - single and plural labels (string)
- *  - hide_single     = (bool) if true, only show posts on author page, not on is_singular() view
- *  - show_feed     = (bool) if true, becomes one of the content types shown in feed block
- *  - show_directory= (bool) if true, creates an alphabetical list directory page
- *  - karma            = (bool) if true, sets up upvotes/downvotes system
- *  - favouritable     = (bool)
- *  - responses        = (bool) if true, sets up comments and replies
- *  - is_calendar    = (bool) if true, sets up default calendar functionality
- *  - single_image    = (bool) if true, and dashboard is setup, each image becomes its own post
- *  - upload_title    = (string)),
- *  - rewrites      = (array) key = associated taxonomy; value = what to append to rewrite base
- *  - description = (array) strings for login description of type
- *  -dash_title = (string) customize the title for custom dashboard
- *  - dash_description = (string) customize the description for custom dashboard
- *  - directory_extra = (array) of BASEless slugs of taxonomies to link in directory
- *  - sections = (array) 'slug' => $options, where options include ['label' => $label, 'icon' => $iconSlug]; used to split large groups of fields into tabs on the edit page
- *  - fields = (array) of fields, as defined in MetaManager.php, as well as additional options:
- *  - 'quickEdit' => (bool) whether this field can be edited in the custom administrator dashboard (best for text fields)
- *  - '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');
-
-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(),
-    ];
-}
-
-
-// /content/strategy.php
-function ajv_strategy(): array
-{
-    return [
-        'singular' => 'Strategy',
-        'plural' => 'Strategies',
-        'hide_single' => false,
-        'redirectToAuthor' => false,
-        'show_feed' => true,
-        'favouritable' => true,
-        'karma' => false,
-        'icon' => 'brain',
-        'rewrite' => [
-            'slug' => 'strategy',
-            'with_front' => false,
-        ],
-        '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 Artwork',
-    ];
-}
-
-
-// /content/support.php
-function ajv_support(): array
-{
-    return [
-        'singular' => 'Support',
-        'plural' => 'Support',
-        'hide_single' => false,
-        'show_feed' => false,
-        'icon' => 'life-ring',
-        'rewrite' => [
-            'slug' => 'support',
-            'with_front' => false,
-        ],
-        'fields' => [
-            'post_title' => [
-                'type' => 'text',
-                'label' => 'Title',
-            ],
-            'post_content' => [
-                'type' => 'textarea',
-                'quill' => true,
-                'label' => 'Content'
-            ]
-        ],
-    ];
-}
-
-
-// /content/writing.php
-function ajv_writing(): array
-{
-    return [
-        'singular' => 'Writing',
-        'plural' => 'Writings',
-        'hide_single' => false,
-        'redirectToAuthor' => false,
-        'show_feed' => true,
-        'favouritable' => true,
-        'karma' => false,
-        'icon' => 'pen-nib',
-        'rewrite' => [
-            'slug' => 'writing',
-            'with_front' => false,
-        ],
-        '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 Artwork',
-    ];
-}
-
-
-// /login/setup.php
-add_filter('jvb_login', 'ajv_setup_login');
-function ajv_setup_login(): array
-{
-    return [
-        'login_from_favourite_header' => 'Join the scene; <small>keep your collection.</small>',
-        'login_header' => 'Log in',
-        'join_header' => 'Join in',
-        'from_favourites_benefits' => [
-            'Save designs you love',
-            'Get personalized recommendations',
-            'Connect with artists',
-            'Build your inspiration collection',
-            'Bonus: It\'s all free!'
-        ]
-    ];
-}
-
-
-// /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,
-        '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
-function ajv_form(): array
-{
-    return [
-        'singular' => 'Form',
-        'plural' => 'Forms',
-        'description' => [
-            'From paintings to sculptures.'
-        ],
-        'icon' => 'shapes',
-        'show_feed' => true,
-        'show_directory' => false,
-        'approve_new' => false,
-        'rewrite' => [
-            'slug' => 'form',
-            'with_front' => false,
-        ],
-        'for_content' => [
-            'art',
-            'design',
-        ],
-        'fields' => [
-            'term_name' => [
-                'label' => 'Name',
-                'type' => 'text',
-                'quickEdit' => true,
-            ],
-            'common' => ['wiki']
-        ]
-    ];
-}
-
-// /taxonomies/media.php
-function ajv_media(): array
-{
-    return [
-        'singular' => 'Medium',
-        'plural' => 'Media',
-        'description' => [
-            '<b>What it\'s made of.</b>',
-            'From clay to oil paints'
-        ],
-        'icon' => 'media',
-        'show_feed' => true,
-        'show_directory' => true,
-        'approve_new' => true,
-        'rewrite' => [
-            'slug' => 'media',
-            'with_front' => false,
-            'hierarchical' => true,
-        ],
-        'hierarchical' => true,
-        'for_content' => [
-            'art'
-        ],
-        'fields' => [
-            'term_name' => [
-                'label' => 'Name',
-                'type' => 'text',
-                'quickEdit' => true,
-            ],
-            'common' => ['wiki']
-        ]
-    ];
-}
-
-// /taxonomies/progress.php
-function ajv_progress(): array
-{
-    return [
-        'singular' => 'Progress',
-        'plural' => 'Progress',
-        'icon' => 'circle-notch',
-        'show_feed' => true,
-        'show_directory' => true,
-        'approve_new' => false,
-        'rewrite' => [
-            'slug' => 'progress',
-            '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/setup.php
-/**
- * JVB_TAXONOMY : defines the custom taxonomies
- *  structure: slug => [$options]
- *    Note: slug is prepended with BASE
- *    $options includes:
- *         - any $args from register_taxonomy
- *         - (string) singular and plural labels
- *         - show_feed            = (bool) whether to show in feed block
- *         - show_directory    = (bool) whether to output a directory for this taxonomy
- *      - is_content        = (bool) if true, sets it up to be more like a content type, but collects other content types
- *      - is_ownable        = (bool) if true, allows defined users to manage
- *      - karma             = (bool) if true, sets up upvotes/downvotes system
- *         - verify_entry      = (bool) if true, users not already attached to this taxonomy need to be approved before entry.
- *         - approve_new        = (bool) if true, admin/verified users need to approve before 'live'
- *         - track_changes        = (bool) if true, table is created to track historical changes
- *         - for_content        = (array) of post type slugs, as defined in JVB_CONTENT
- *         - fields            = (array) of custom field definitions, from inc/managers/MetaManager.php
- *             -> 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(),
-    ];
-}
-
-// /taxonomies/style.php
-function ajv_style(): array
-{
-    return [
-        'directory' => 'Styles',
-        'description' => [
-            'From American Traditional to Japanese.'
-        ],
-        'singular' => 'Style',
-        'plural' => 'Styles',
-        'show_directory' => true,
-        'approve_new' => false,
-        'icon' => 'folder',
-        'favouritable' => true,
-        'show_feed' => true,
-        'rewrite' => [
-            'slug' => 'style',
-            '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', 'alternate_name', 'keywords']
-        ]
-    ];
-}
-
-// /taxonomies/target.php
-function ajv_target(): array
-{
-    return [
-        'singular' => 'Target Audience',
-        'plural' => 'Target Audiences',
-        'icon' => 'crosshair-simple',
-        'show_feed' => false,
-        'rewrite' => [
-            'slug' => 'target',
-            '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/theme.php
-function ajv_theme(): array
-{
-    return [
-        'directory' => 'Themes',
-        'show_directory' => true,
-        'isGrouped' => true,
-        'description' => [
-            'What makes up the tattoo, asides from style.',
-            'From bees to ideas to carrots.'
-        ],
-        'singular' => 'Theme',
-        'plural' => 'Themes',
-        'icon' => 'hashtag',
-        'favouritable' => true,
-        'show_feed' => true,
-        'approve_new' => false,
-        'rewrite' => [
-            'slug' => 'themes',
-            'with_front' => false,
-            'hierarchical' => true,
-        ],
-        'hierarchical' => true,
-        'for_content' => [
-            'art',
-            'design',
-            'development',
-            'strategy',
-            'writing',
-        ],
-        'fields' => [
-            'term_name' => [
-                'label' => 'Name',
-                'type' => 'text',
-                'quickEdit' => true,
-            ],
-            'similar' => [
-                'type' => 'taxonomy',
-                'taxonomy_type' => 'reference',
-                'taxonomy' => 'theme',
-                'label' => 'Similar Themes',
-            ],
-            'description' => [
-                'type' => 'textarea',
-                'quill' => true,
-                'label' => 'Description',
-            ],
-            'archive_title' => [
-                'type' => 'text',
-                'label' => 'Archive Title',
-                'description' => 'If the generated title does not jive, set it here',
-            ],
-            'common' => ['wiki', 'alternate_name', 'keywords']
-        ]
-    ];
-}
-
-
-// /users/client.php
-function ajv_user_client(): array
-{
-    return [
-        'label' => 'Client',
-        'has_dashboard' => true,
-        'can_create' => ['support'],
-        'can_register' => true,
-        'keep_stats' => true,
-        'join_text' => 'Save your favourites. Get Notified.',
-        'join_title' => 'Welcome to the Scene.',
-        'join_description' => [
-            'Save your favourites for easy access',
-            'Get notified when your favourite artists add new content',
-            'Stay in the loop with local flash days and events',
-            'Discover styles and artists that match your vision'
-        ],
-        'join_bonus' => '<strong>BONUS: </strong>Everything\'s free. And always will be. We work with partners vetted by the community to keep the lights on.',
-    ];
-}
-
-// /users/enthusiast.php
-function ajv_user_enthusiast(): array
-{
-    return [
-        'label' => 'Enthusiast',
-        'has_dashboard' => true,
-        'can_create' => [],
-        'can_register' => true,
-        'keep_stats' => true,
-        'join_text' => 'Save your favourites. Get Notified.',
-        'join_title' => 'Welcome to the Scene.',
-        'join_description' => [
-            'Save your favourites for easy access',
-            'Get notified when your favourite artists add new content',
-            'Stay in the loop with local flash days and events',
-            'Discover styles and artists that match your vision'
-        ],
-        'join_bonus' => '<strong>BONUS: </strong>Everything\'s free. And always will be. We work with partners vetted by the community to keep the lights on.',
-    ];
-}
-
-
-// /users/setup.php
-/**
- * JVB_USER -> defines user roles. Mainly for Dashboard/Directory sites
- *      Structure: slug => $options
- *    Note: slug is prepended with BASE
- *     $options includes:
- *         - has_dashboard        = user has access to custom dashboard
- *         - can_create        = (array) of post types and taxonomies they can create
- *                             --> Optionally, if the user is split between types (example: tattoo artist vs piercer), you can define types here.
- *                                 ex: [
- *                                     ['tattoo-artist'    => ['tattoo', 'artwork']],
- *                                     ['piercer'        => ['piercing', 'artwork']],
- *                                 ]
- *         - manage_others    = (array) of post types this role can manage other users items
- *         - can_register        = (bool) if true, this user can self register
- *         - profile            = (string) associated post type to treat as archive page, as registered in JVB_CONTENT
- *         - register_fields    = (array) of field names available in registration, as defined in settings OR associated profile JVB_CONTENT
- *         - approve_new        = (bool) if true, user content is hidden until verified by admin/other verified users
- *         - keep_stats        = (bool) if true, creates a statistics table that tracks how much content is created per user per day
- *         - settings            = (array) of fields users can modify
- *         - admin                = (array) of fields admin/moderators can modify, attached to user
- *        - register            = (array) of field names as defined in settings that are on registration, if can_register === true
- *         - description        = (array|string) if an array, each item in array will be it's own paragraph
- *                             -> description of the user role. Used in the registration page
- */
-
-require(AJV_DIR . '/users/client.php');
-require(AJV_DIR . '/users/enthusiast.php');
-
-add_filter('jvb_user', 'ajv_user');
-
-function ajv_user():array
-{
-    return [
-        'enthusiast'    => ajv_user_enthusiast(),
-        'client'        => ajv_user_client(),
-    ];
-}
\ No newline at end of file
diff --git a/users/client.php b/users/client.php
index 9820ccb..bd7b79f 100644
--- a/users/client.php
+++ b/users/client.php
@@ -1,6 +1,6 @@
 <?php
 // /users/client.php
-function ajv_user_client():array
+function ami_user_client():array
 {
     return [
         'label'            => 'Client',
diff --git a/users/enthusiast.php b/users/enthusiast.php
deleted file mode 100644
index cbe165d..0000000
--- a/users/enthusiast.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-// /users/enthusiast.php
-function ajv_user_enthusiast():array
-{
-    return [
-        'label'            => 'Enthusiast',
-        'has_dashboard'    => true,
-        'can_create'       => [],
-        'can_register'     => true,
-        'keep_stats'       => true,
-        'join_text'        => 'Save your favourites. Get Notified.',
-        'join_title'       => 'Welcome to the Scene.',
-        'join_description' => [
-            'Save your favourites for easy access',
-            'Get notified when your favourite artists add new content',
-            'Stay in the loop with local flash days and events',
-            'Discover styles and artists that match your vision'
-        ],
-        'join_bonus'       => '<strong>BONUS: </strong>Everything\'s free. And always will be. We work with partners vetted by the community to keep the lights on.',
-    ];
-}
\ No newline at end of file
diff --git a/users/setup.php b/users/setup.php
index 56f6490..f0115ff 100644
--- a/users/setup.php
+++ b/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(),
 //    ];
 //}
\ No newline at end of file

--
Gitblit v1.10.0