From 86c6cd3cc099d2480932ede03c12cea01e625c94 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 26 Apr 2026 21:56:28 +0000
Subject: [PATCH] =Requiring files based on Site class settings

---
 base/_setup.php                                     |   14 
 assets/css/icons.css                                |    2 
 inc/managers/Notifications/Notifications.php        |    4 
 inc/managers/CustomTable.php                        |    2 
 jvb.php                                             |   18 
 inc/helpers/ui.php                                  |    9 
 inc/registrar/config/Integration.php                |    4 
 inc/rest/routes/TermRoutes.php                      |    5 
 inc/managers/DashboardManager.php                   |   64 -
 inc/managers/RoleManager.php                        |    4 
 inc/managers/Notifications/_setup.php               |   10 
 inc/registrar/_setup.php                            |   51 +-
 inc/rest/routes/FeedRoutes.php                      |    4 
 inc/rest/routes/ApprovalRoutes.php                  |    6 
 inc/managers/_setup.php                             |  114 ++--
 inc/blocks/RegisterBlocks.php                       |   10 
 inc/integrations/_setup.php                         |   24 
 inc/registrar/config/seo/Schema.php                 |    7 
 JVBase.php                                          |   68 +-
 inc/managers/LoginManager.php                       |   74 --
 inc/blocks/TimelineBlock.php                        |    2 
 base/Site.php                                       |  234 +++++++++
 inc/managers/IconsManager.php                       |   10 
 base/Membership.php                                 |  121 ++++
 inc/registry/providers/IntegrationFieldProvider.php |   14 
 inc/managers/DirectoryManager.php                   |    3 
 inc/rest/routes/FormRoutes.php                      |    4 
 inc/blocks/FeedBlock.php                            |    8 
 inc/managers/SEO/BreadcrumbManager.php              |   22 
 inc/registrar/Registrar.php                         |   18 
 inc/registry/PostTypeRegistrar.php                  |    4 
 activate.php                                        |   19 
 inc/meta/Meta.php                                   |    4 
 inc/blocks/_setup.php                               |   12 
 inc/registry/FieldRegistry.php                      |    4 
 inc/rest/routes/ContentTermsRoutes.php              |    2 
 inc/managers/ReferralManager.php                    |   48 -
 inc/registrar/helpers/MakeVerification.php          |   14 
 inc/rest/_setup.php                                 |   58 +-
 base/seo.php                                        |    2 
 checks.php                                          |    6 
 inc/managers/AdminPages.php                         |    4 
 inc/managers/ErrorHandler.php                       |  129 ----
 inc/registrar/helpers/AddIntegrationFields.php      |   14 
 base/Login.php                                      |  162 ++++++
 base/content.php                                    |    2 
 inc/managers/queue/executors/UploadExecutor.php     |    2 
 /dev/null                                           |   35 -
 inc/rest/Rest.php                                   |    4 
 inc/rest/RestRouteManager.php                       |    4 
 inc/rest/routes/LoginRoutes.php                     |   14 
 inc/blocks/FormBlock.php                            |    6 
 inc/managers/InvitationsManager.php                 |    5 
 53 files changed, 915 insertions(+), 569 deletions(-)

diff --git a/JVBase.php b/JVBase.php
index a4efe54..cf531ec 100644
--- a/JVBase.php
+++ b/JVBase.php
@@ -2,8 +2,7 @@
 namespace JVBase;
 
 use JVBase\blocks\CustomBlocks;
-use JVBase\integrations\BlueSky;
-use JVBase\managers\Cache;
+use JVBase\base\Site;
 use JVBase\managers\EmailManager;
 use JVBase\managers\ErrorHandler;
 use JVBase\managers\InvitationsManager;
@@ -14,9 +13,7 @@
 use JVBase\managers\DirectoryManager;
 use JVBase\managers\ReferralManager;
 use JVBase\managers\RoleManager;
-//use JVBase\managers\SchemaManager;
 use JVBase\managers\SEO\render\SchemaOutput;
-use JVBase\managers\SEO\SchemaOutputManager;
 use JVBase\admin\SEOAdmin;
 use JVBase\managers\AdminPages;
 use JVBase\managers\NotificationManager;
@@ -31,9 +28,7 @@
 use JVBase\rest\routes\ContentRoutes;
 use JVBase\rest\routes\TermRoutes;
 use JVBase\rest\routes\UploadRoutes;
-//use JVBase\rest\routes\BioRoutes;
 use JVBase\rest\routes\SettingsRoutes;
-//use JVBase\rest\routes\ShopRoutes;
 use JVBase\rest\routes\ContentTermsRoutes;
 use JVBase\rest\routes\SEORoutes;
 use JVBase\rest\routes\QueueRoutes;
@@ -42,7 +37,6 @@
 use JVBase\rest\routes\LoginRoutes;
 use JVBase\rest\routes\NewsRoutes;
 use JVBase\rest\routes\ReferralRoutes;
-//use JVBase\rest\routes\MagicLinkRoutes;
 use JVBase\rest\routes\ResponseRoutes;
 use JVBase\rest\routes\OptionsRoutes;
 use JVBase\rest\routes\VoteRoutes;
@@ -50,7 +44,6 @@
 use JVBase\rest\routes\ApprovalRoutes;
 use JVBase\rest\routes\AdminRoutes;
 use JVBase\rest\routes\IntegrationsRoutes;
-use JVBase\utility\Features;
 use JVBase\base\SchemaHelper;
 
 if (!defined('ABSPATH')) {
@@ -105,11 +98,19 @@
 			'seo'		=> new SchemaOutput(),
 			'schemaHelper' => new SchemaHelper(),
 //			'uploads'	=> new UploadManager(),
-			'userTerms' => new UserTermsManager(),
+//			'userTerms' => new UserTermsManager(),
 			'email' 	=> new EmailManager(),
-			'terms'		=> new TaxonomyRelationships(),
+//			'terms'		=> new TaxonomyRelationships(),
 		];
 
+        if (Site::has('feed_block')) {
+            $this->managers['terms'] = new TaxonomyRelationships();
+        }
+
+        if (Site::hasAll(['dashboard', 'membership', 'feed_block'])) {
+            $this->managers['userTerms'] = new UserTermsManager();
+        }
+
 		$this->routes = [
 			'login' => new LoginRoutes(),
 			'integrations' => new IntegrationsRoutes(),
@@ -120,42 +121,43 @@
 			'forms' => new FormRoutes()
 		];
 
-		if (Features::forSite()->has('magicLink')) {
+		if (Site::has('magicLink')) {
 //			$this->routes['magicLink'] = new MagicLinkRoutes();
 			$this->managers['magicLink'] = new MagicLinkManager();
 		}
-		if (Features::forSite()->has('referrals')) {
+		if (Site::has('referrals')) {
 			$this->managers['referral'] = new ReferralManager();
 			$this->routes['referral'] = new ReferralRoutes();
 		}
 
-		if (Features::forSite()->has('dashboard')) {
+		if (Site::has('dashboard')) {
 			$this->managers['dash'] = new DashboardManager();
 		}
 
-		if (Features::hasIntegration('square')) {
+		if (Site::hasIntegration('square')) {
 			$this->routes['square'] = new IntegrationsSquareRoutes();
 		}
-		if (Features::hasIntegration('helcim')) {
+		if (Site::hasIntegration('helcim')) {
 			$this->routes['helcim'] = new IntegrationsHelcimRoutes();
 		}
 
-		if (Features::forSite()->has('feed_block')) {
+		if (Site::has('feed_block')) {
 			$this->routes['feed'] = new FeedRoutes();
 		}
-		if (Features::forMembership()->has('notifications')) {
+        $membership = Site::membership();
+		if ($membership && $membership->has('notifications')) {
 			$this->managers['notifications'] = new NotificationManager();
 			$this->routes['notifications'] = new NotificationsRoutes();
 		}
-		if (Features::forSite()->has('feed_block') || Features::forSite()->has('dashboard')) {
+		if (Site::has('feed_block') || Site::has('dashboard')) {
 			$this->routes['term'] = new TermRoutes();
 		}
 
-		if (Features::forSite()->has('is_directory')) {
+		if (Site::has('is_directory')) {
 			$this->managers['directory'] = new DirectoryManager();
 		}
 
-		if (Features::forSite()->has('dashboard')) {
+		if (Site::has('dashboard')) {
 			$this->routes['error'] = new ErrorRoutes();
             $this->routes['admin']  = new AdminRoutes();
 			$this->routes['content'] = new ContentRoutes();
@@ -165,14 +167,14 @@
 			$this->routes['options'] = new OptionsRoutes();
 		}
 
-		if (Features::forSite()->has('favourites')) {
+		if (Site::has('favourites')) {
 			$this->routes['favourites'] = new FavouritesRoutes();
 		}
 
-		if (Features::forMembership()->has('forum')) {
+		if ($membership && $membership->has('forum')) {
 			$this->routes['news'] = new NewsRoutes();
 		}
-		if (Features::forMembership()->has('invitable')) {
+		if ($membership && $membership->has('invitable')) {
 			$this->managers['invitations'] = new InvitationsManager();
 		}
 		if (!empty(Registrar::getFeatured('has_responses'))) {
@@ -182,11 +184,11 @@
 			$this->routes['vote'] = new VoteRoutes();
 		}
 		if (!empty(Registrar::getFeatured('karma'))
-			|| Features::forMembership()->has('member_verified') ||
-			Features::forMembership()->has('term_approval')) {
+			|| ($membership && $membership->has('member_verified')) ||
+            ($membership && $membership->has('term_approval'))) {
 			$this->routes['approvals'] = new ApprovalRoutes();
 		}
-		if (Features::forMembership()->has('can_invite')) {
+		if ($membership && $membership->has('can_invite')) {
 			$this->routes['invites'] = new Invitations();
 		}
 
@@ -201,17 +203,9 @@
 
 	protected function setupIntegrations(): void
 	{
-		if (array_key_exists('integrations', JVB_SITE)) {
-			foreach (JVB_SITE['integrations'] as $service => $use) {
-				if (!$use) {
-					continue;
-				}
-				if (array_key_exists($service, $this->serviceMap)) {
-					$this->integrations[$service] = new $this->serviceMap[$service]();
-				}
-
-			}
-		}
+        foreach(array_keys(Site::getIntegrations()) as $integration) {
+            $this->integrations[$integration] = new $this->serviceMap[$integration]();
+        }
 	}
 
 	public function registeredContent(): array
diff --git a/activate.php b/activate.php
index 12625f6..90db75b 100644
--- a/activate.php
+++ b/activate.php
@@ -1,17 +1,12 @@
 <?php
 
-use JVBase\integrations\Umami;
 use JVBase\managers\Cache;
 use JVBase\managers\CustomTable;
-use JVBase\managers\DirectoryManager;
-use JVBase\managers\ErrorHandler;
-use JVBase\managers\InvitationsManager;
+use JVBase\base\Site;
 use JVBase\managers\queue\Queue;
 use JVBase\managers\ReferralManager;
 use JVBase\managers\RoleManager;
-use JVBase\managers\SEO\SEOAdminPage;
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
 
 if (!defined('ABSPATH')) {
     exit; // Exit if accessed directly
@@ -55,12 +50,12 @@
 	error_log('Roles removed!');
 	error_log('New Roles done!');
 	jvbRegisterAdminPages();
-	if (array_key_exists('integrations', JVB_SITE) && array_key_exists('umami', JVB_SITE['integrations']) && JVB_SITE['integrations']['umami']=== true) {
-		error_log('Adding Umami tables');
-		Umami::createTables();
-	}
+//	if (array_key_exists('integrations', JVB_SITE) && array_key_exists('umami', JVB_SITE['integrations']) && JVB_SITE['integrations']['umami']=== true) {
+//		error_log('Adding Umami tables');
+//		Umami::createTables();
+//	}
 
-//	if (Features::forSite()->has('is_directory')) {
+//	if (Site::has('is_directory')) {
 //		error_log('Activating DirectoryManager');
 //		jvb_register_do_once('buildDirectory', ['JVBase\managers\DirectoryManager', 'activate']);
 //	}
@@ -278,7 +273,7 @@
 
 function jvbRegisterAdminPages():void
 {
-	if (Features::forSite()->has('referrals')){
+	if (Site::has('referrals')){
 		ReferralManager::addSubpage();
 	}
 //	SEOAdminPage::addSubpage();
diff --git a/assets/css/icons.css b/assets/css/icons.css
index 6cc8753..6751bac 100644
--- a/assets/css/icons.css
+++ b/assets/css/icons.css
@@ -1 +1 @@
-.icon-google-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsMTI4YTk0LDk0LDAsMSwxLTIxLjQ5LTU5LjgyLDYsNiwwLDEsMS05LjI1LDcuNjRBODIsODIsMCwxLDAsMjA5Ljc4LDEzNEgxMjhhNiw2LDAsMCwxLDAtMTJoODhBNiw2LDAsMCwxLDIyMiwxMjhaIi8+PC9zdmc+');}.icon-apple-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTkuNCwxNjcuODRDMjAxLjcxLDE1NS42OSwxOTgsMTM1LjEyLDE5OCwxMjBjMC0xOC40MiwxMy44Ni0zNC4yOSwyMi4xMi00Mi4xMmE2LDYsMCwwLDAsMC04LjcxQzIwOCw1Ny43LDE4Ny4wNyw1MCwxNjgsNTBhNzAuMjMsNzAuMjMsMCwwLDAtNDAsMTIuNTUsNjkuNiw2OS42LDAsMCwwLTg5LjMxLDguMDhBNzIuNjMsNzIuNjMsMCwwLDAsMTgsMTIzLjM1YTEyNS4xMSwxMjUuMTEsMCwwLDAsMzkuNTMsODguMzNBMzcuODUsMzcuODUsMCwwLDAsODMuNiwyMjJoODcuN0EzNy44MywzNy44MywwLDAsMCwxOTksMjEwLjA3YTEyMi42LDEyMi42LDAsMCwwLDE3LjU0LTI0LjJjNi41NS0xMiw1Ljc3LTEzLjc1LDUtMTUuNDhBNi4wNyw2LjA3LDAsMCwwLDIxOS40LDE2Ny44NFptLTI5LjIzLDM0QTI1LjgyLDI1LjgyLDAsMCwxLDE3MS4zLDIxMEg4My42QTI1Ljg1LDI1Ljg1LDAsMCwxLDY1Ljc4LDIwMywxMTMuMjEsMTEzLjIxLDAsMCwxLDMwLDEyM2E2MC41NSw2MC41NSwwLDAsMSwxNy4yMS00NEE1Ni44Miw1Ni44MiwwLDAsMSw4OCw2MmguODFhNTcuMzUsNTcuMzUsMCwwLDEsMzUuNDQsMTIuNzEsNiw2LDAsMCwwLDcuNSwwQTU3LjM5LDU3LjM5LDAsMCwxLDE2OCw2MmMxMy44OSwwLDI4LjgxLDQuNjgsMzkuMTEsMTItOS40NCwxMC4xNC0yMS4xLDI2LjU5LTIxLjEsNDYsMCwyMy43OCw3LjgxLDQyLjYsMjIuNjYsNTQuNzdBMTA3LjMzLDEwNy4zMywwLDAsMSwxOTAuMTcsMjAxLjg5Wm0tNjAtMTcxLjM5QTM4LDM4LDAsMCwxLDE2NywyaDFhNiw2LDAsMCwxLDAsMTJoLTFhMjYsMjYsMCwwLDAtMjUuMTgsMTkuNSw2LDYsMCwxLDEtMTEuNjItM1oiLz48L3N2Zz4=');}.icon-check-circle{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNzIuMjQsOTkuNzZhNiw2LDAsMCwxLDAsOC40OGwtNTYsNTZhNiw2LDAsMCwxLTguNDgsMGwtMjQtMjRhNiw2LDAsMCwxLDguNDgtOC40OEwxMTIsMTUxLjUxbDUxLjc2LTUxLjc1QTYsNiwwLDAsMSwxNzIuMjQsOTkuNzZaTTIzMCwxMjhBMTAyLDEwMiwwLDEsMSwxMjgsMjYsMTAyLjEyLDEwMi4xMiwwLDAsMSwyMzAsMTI4Wm0tMTIsMGE5MCw5MCwwLDEsMC05MCw5MEE5MC4xLDkwLjEsMCwwLDAsMjE4LDEyOFoiLz48L3N2Zz4=');}.icon-cloud-slash{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik01Mi40NCwzNkE2LDYsMCwwLDAsNDMuNTYsNDRsNDAuMTgsNDQuMmMtLjQ1Ljg3LS45LDEuNzUtMS4zMiwyLjY0QTYyLDYyLDAsMSwwLDcyLDIxNGg4OGE4NS4yMyw4NS4yMywwLDAsMCwzMi4zNS02LjNMMjAzLjU2LDIyMGE2LDYsMCwwLDAsOC44OC04LjA4Wk0xNjAsMjAySDcyYTUwLDUwLDAsMSwxLDUuOS05OS42NEE4Ni4yNSw4Ni4yNSwwLDAsMCw3NCwxMjhhNiw2LDAsMCwwLDEyLDAsNzMuOTIsNzMuOTIsMCwwLDEsNi40NC0zMC4ybDkxLjIyLDEwMC4zNEE3My42NSw3My42NSwwLDAsMSwxNjAsMjAyWm04Ni03NGE4NS44NSw4NS44NSwwLDAsMS0yMS44NSw1Ny4yNyw2LDYsMCwwLDEtNC40NywyLDYsNiwwLDAsMS00LjQ3LTEwLDc0LDc0LDAsMCwwLTk5LTEwOC45Miw2LDYsMCwxLDEtNy4xMS05LjY3QTg2LDg2LDAsMCwxLDI0NiwxMjhaIi8+PC9zdmc+');}.icon-exclamation-mark{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNDIsMjAwYTE0LDE0LDAsMSwxLTE0LTE0QTE0LDE0LDAsMCwxLDE0MiwyMDBabS0xNC00MmE2LDYsMCwwLDAsNi02VjQ4YTYsNiwwLDAsMC0xMiwwVjE1MkE2LDYsMCwwLDAsMTI4LDE1OFoiLz48L3N2Zz4=');}.icon-cloud-arrow-down{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDYsMTI4YTg1LjI3LDg1LjI3LDAsMCwxLTE3LjIsNTEuNiw2LDYsMCwxLDEtOS42LTcuMkE3NCw3NCwwLDEsMCw4NiwxMjhhNiw2LDAsMCwxLTEyLDAsODUuNTQsODUuNTQsMCwwLDEsMy45MS0yNS42NEE1MC42OCw1MC42OCwwLDAsMCw3MiwxMDJhNTAsNTAsMCwwLDAsMCwxMDBIOTZhNiw2LDAsMCwxLDAsMTJINzJBNjIsNjIsMCwxLDEsODIuNDMsOTAuODgsODYsODYsMCwwLDEsMjQ2LDEyOFptLTY2LjI0LDQzLjc2TDE1OCwxOTMuNTFWMTI4YTYsNiwwLDAsMC0xMiwwdjY1LjUxbC0yMS43Ni0yMS43NWE2LDYsMCwwLDAtOC40OCw4LjQ4bDMyLDMyYTYsNiwwLDAsMCw4LjQ4LDBsMzItMzJhNiw2LDAsMCwwLTguNDgtOC40OFoiLz48L3N2Zz4=');}.icon-caret-down{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTIuMjQsMTAwLjI0bC04MCw4MGE2LDYsMCwwLDEtOC40OCwwbC04MC04MGE2LDYsMCwwLDEsOC40OC04LjQ4TDEyOCwxNjcuNTFsNzUuNzYtNzUuNzVhNiw2LDAsMCwxLDguNDgsOC40OFoiLz48L3N2Zz4=');}.icon-cloud-arrow-up{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xODguMjQsMTY0LjI0YTYsNiwwLDAsMS04LjQ4LDBMMTU4LDE0Mi40OVYyMDhhNiw2LDAsMCwxLTEyLDBWMTQyLjQ5bC0yMS43NiwyMS43NWE2LDYsMCwwLDEtOC40OC04LjQ4bDMyLTMyYTYsNiwwLDAsMSw4LjQ4LDBsMzIsMzJBNiw2LDAsMCwxLDE4OC4yNCwxNjQuMjRaTTE2MCw0MkE4Ni4xLDg2LjEsMCwwLDAsODIuNDMsOTAuODgsNjIsNjIsMCwxLDAsNzIsMjE0aDQwYTYsNiwwLDAsMCwwLTEySDcyYTUwLDUwLDAsMCwxLDAtMTAwLDUwLjY4LDUwLjY4LDAsMCwxLDUuOTEuMzZBODUuNTQsODUuNTQsMCwwLDAsNzQsMTI4YTYsNiwwLDAsMCwxMiwwLDc0LDc0LDAsMSwxLDEwMy42LDY3Ljg1LDYsNiwwLDAsMCw0LjgsMTFBODYsODYsMCwwLDAsMTYwLDQyWiIvPjwvc3ZnPg==');}.icon-cloud-check{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDJBODYuMTEsODYuMTEsMCwwLDAsODIuNDMsOTAuODgsNjIsNjIsMCwxLDAsNzIsMjE0aDg4YTg2LDg2LDAsMCwwLDAtMTcyWm0wLDE2MEg3MmE1MCw1MCwwLDAsMSwwLTEwMCw1MC42Nyw1MC42NywwLDAsMSw1LjkxLjM1QTg1LjYxLDg1LjYxLDAsMCwwLDc0LDEyOGE2LDYsMCwwLDAsMTIsMCw3NCw3NCwwLDEsMSw3NCw3NFptMzYuMjQtOTQuMjRhNiw2LDAsMCwxLDAsOC40OGwtNDgsNDhhNiw2LDAsMCwxLTguNDgsMGwtMjQtMjRhNiw2LDAsMCwxLDguNDgtOC40OEwxNDQsMTUxLjUxbDQzLjc2LTQzLjc1QTYsNiwwLDAsMSwxOTYuMjQsMTA3Ljc2WiIvPjwvc3ZnPg==');}.icon-cloud-warning{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDJBODYuMTEsODYuMTEsMCwwLDAsODIuNDMsOTAuODgsNjIsNjIsMCwxLDAsNzIsMjE0aDg4YTg2LDg2LDAsMCwwLDAtMTcyWm0wLDE2MEg3MmE1MCw1MCwwLDAsMSwwLTEwMCw1MC42Nyw1MC42NywwLDAsMSw1LjkxLjM1QTg1LjYxLDg1LjYxLDAsMCwwLDc0LDEyOGE2LDYsMCwwLDAsMTIsMCw3NCw3NCwwLDEsMSw3NCw3NFptLTYtNzRWODhhNiw2LDAsMCwxLDEyLDB2NDBhNiw2LDAsMCwxLTEyLDBabTE2LDM2YTEwLDEwLDAsMSwxLTEwLTEwQTEwLDEwLDAsMCwxLDE3MCwxNjRaIi8+PC9zdmc+');}.icon-syncing{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0iY3VycmVudENvbG9yIiB2aWV3Qm94PSIwIDAgMjU2IDI1NiI+PHBhdGggaWQ9InJlZnJlc2giIGQ9Ik0xNjAuMDQ3IDEyMi44NzVhMzAuNzg0IDMwLjc4NCAwIDAgMC0yMS43NSA4Ljc5N2MtMi44NDIgMy4wMDMtLjQ2NyA0Ljk3MSAxLjMxMiAzLjE1NiAxMS4wNDMtMTAuNzg2IDI4LjcxLTEwLjY4IDM5LjYyNS4yMzRsNy4yMDMgNy4yMDRoLTEyLjg3NWMtMy4zNDcuMDA4LTMuMTY1IDMuODc1IDAgMy44NzVoMTYuMTFjMi4wNjIgMCAyLjU0LTEuNDE4IDIuNTYyLTQuOTdsLjA5NC0xNC45MjFjLjAyLTMuMjktMy40MzctMy4xNjUtMy40MzcgMHYxMi44NmwtNy4yMDMtNy4xODhhMzAuNzY4IDMwLjc2OCAwIDAgMC0yMS42NDEtOS4wNDd6bS0yOS41OTQgMzkuNzk3Yy0yLjA2MiAwLTIuNTI0IDEuNDAyLTIuNTQ3IDQuOTUzbC0uMDk0IDE0LjkyMmMtLjAyIDMuMjkgMy40MjIgMy4xNjQgMy40MjIgMHYtMTIuODZsNy4yMDMgNy4yMDRjMTEuOTU2IDExLjk1NSAzMS4zMTIgMTIuMDY0IDQzLjQwNy4yNSAyLjg0Mi0zLjAwMy40NTEtNC45ODgtMS4zMjgtMy4xNzItMTEuMDQzIDEwLjc4Ni0yOC43MSAxMC42OC0zOS42MjUtLjIzNWwtNy4xODgtNy4yMDNoMTIuODZjMy4zNDctLjAwOCAzLjE2NS0zLjg2IDAtMy44NmgtMTYuMTF6Ii8+PHBhdGggZD0iTTE2MCA0NGE4NC4xMSA4NC4xMSAwIDAgMC03Ni40MSA0OS4xMkE2MC43MSA2MC43MSAwIDAgMCA3MiA5MmE2MCA2MCAwIDAgMCAwIDEyMGg4OGE4NCA4NCAwIDAgMCAwLTE2OFptMCAxNjBINzJhNTIgNTIgMCAxIDEgOC41NS0xMDMuM0E4My42NiA4My42NiAwIDAgMCA3NiAxMjhhNCA0IDAgMCAwIDggMCA3NiA3NiAwIDEgMSA3NiA3NloiLz48L3N2Zz4=');}.icon-cloud-x{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDJBODYuMTEsODYuMTEsMCwwLDAsODIuNDMsOTAuODgsNjIsNjIsMCwxLDAsNzIsMjE0aDg4YTg2LDg2LDAsMCwwLDAtMTcyWm0wLDE2MEg3MmE1MCw1MCwwLDAsMSwwLTEwMCw1MC42Nyw1MC42NywwLDAsMSw1LjkxLjM1QTg1LjYxLDg1LjYxLDAsMCwwLDc0LDEyOGE2LDYsMCwwLDAsMTIsMCw3NCw3NCwwLDEsMSw3NCw3NFptMjguMjQtODUuNzZMMTY4LjQ4LDEzNmwxOS43NiwxOS43NmE2LDYsMCwxLDEtOC40OCw4LjQ4TDE2MCwxNDQuNDhsLTE5Ljc2LDE5Ljc2YTYsNiwwLDAsMS04LjQ4LTguNDhMMTUxLjUyLDEzNmwtMTkuNzYtMTkuNzZhNiw2LDAsMCwxLDguNDgtOC40OEwxNjAsMTI3LjUybDE5Ljc2LTE5Ljc2YTYsNiwwLDAsMSw4LjQ4LDguNDhaIi8+PC9zdmc+');}.icon-arrows-clockwise{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsNDhWOTZhNiw2LDAsMCwxLTYsNkgxNjhhNiw2LDAsMCwxLDAtMTJoMzMuNTJMMTgzLjQ3LDcyYTgxLjUxLDgxLjUxLDAsMCwwLTU3LjUzLTI0aC0uNDZBODEuNSw4MS41LDAsMCwwLDY4LjE5LDcxLjI4YTYsNiwwLDEsMS04LjM4LTguNTgsOTMuMzgsOTMuMzgsMCwwLDEsNjUuNjctMjYuNzZIMTI2YTkzLjQ1LDkzLjQ1LDAsMCwxLDY2LDI3LjUzbDE4LDE4VjQ4YTYsNiwwLDAsMSwxMiwwWk0xODcuODEsMTg0LjcyYTgxLjUsODEuNSwwLDAsMS01Ny4yOSwyMy4zNGgtLjQ2YTgxLjUxLDgxLjUxLDAsMCwxLTU3LjUzLTI0TDU0LjQ4LDE2Nkg4OGE2LDYsMCwwLDAsMC0xMkg0MGE2LDYsMCwwLDAtNiw2djQ4YTYsNiwwLDAsMCwxMiwwVjE3NC40OGwxOCwxOC4wNWE5My40NSw5My40NSwwLDAsMCw2NiwyNy41M2guNTJhOTMuMzgsOTMuMzgsMCwwLDAsNjUuNjctMjYuNzYsNiw2LDAsMSwwLTguMzgtOC41OFoiLz48L3N2Zz4=');}.icon-share-fat{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzYuMjQsMTA3Ljc2bC04MC04MEE2LDYsMCwwLDAsMTQ2LDMyVjc0LjJjLTU0LjQ4LDMuNTktMTIwLjM5LDU1LTEyNy45MywxMjAuNjZhMTAsMTAsMCwwLDAsMTcuMjMsOGgwQzQ2LjU2LDE5MC44NSw4NywxNTIuNiwxNDYsMTUwLjEzVjE5MmE2LDYsMCwwLDAsMTAuMjQsNC4yNGw4MC04MEE2LDYsMCwwLDAsMjM2LjI0LDEwNy43NlpNMTU4LDE3Ny41MlYxNDRhNiw2LDAsMCwwLTYtNmMtMjcuNzMsMC01NC43Niw3LjI1LTgwLjMyLDIxLjU1YTE5My4zOCwxOTMuMzgsMCwwLDAtNDAuODEsMzAuNjVjNC43LTI2LjU2LDIwLjE2LTUyLDQ0LTcyLjI3Qzk4LjQ3LDk3Ljk0LDEyNy4yOSw4NiwxNTIsODZhNiw2LDAsMCwwLDYtNlY0Ni40OUwyMjMuNTEsMTEyWiIvPjwvc3ZnPg==');}.icon-trash{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTYsNTBIMTc0VjQwYTIyLDIyLDAsMCwwLTIyLTIySDEwNEEyMiwyMiwwLDAsMCw4Miw0MFY1MEg0MGE2LDYsMCwwLDAsMCwxMkg1MFYyMDhhMTQsMTQsMCwwLDAsMTQsMTRIMTkyYTE0LDE0LDAsMCwwLDE0LTE0VjYyaDEwYTYsNiwwLDAsMCwwLTEyWk05NCw0MGExMCwxMCwwLDAsMSwxMC0xMGg0OGExMCwxMCwwLDAsMSwxMCwxMFY1MEg5NFpNMTk0LDIwOGEyLDIsMCwwLDEtMiwySDY0YTIsMiwwLDAsMS0yLTJWNjJIMTk0Wk0xMTAsMTA0djY0YTYsNiwwLDAsMS0xMiwwVjEwNGE2LDYsMCwwLDEsMTIsMFptNDgsMHY2NGE2LDYsMCwwLDEtMTIsMFYxMDRhNiw2LDAsMCwxLDEyLDBaIi8+PC9zdmc+');}.icon-star{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzcuMjgsOTcuODdBMTQuMTgsMTQuMTgsMCwwLDAsMjI0Ljc2LDg4bC02MC4yNS00Ljg3LTIzLjIyLTU2LjJhMTQuMzcsMTQuMzcsMCwwLDAtMjYuNTgsMEw5MS40OSw4My4xMSwzMS4yNCw4OGExNC4xOCwxNC4xOCwwLDAsMC0xMi41Miw5Ljg5QTE0LjQzLDE0LjQzLDAsMCwwLDIzLDExMy4zMkw2OSwxNTIuOTNsLTE0LDU5LjI1YTE0LjQsMTQuNCwwLDAsMCw1LjU5LDE1LDE0LjEsMTQuMSwwLDAsMCwxNS45MS42TDEyOCwxOTYuMTJsNTEuNTgsMzEuNzFhMTQuMSwxNC4xLDAsMCwwLDE1LjkxLS42LDE0LjQsMTQuNCwwLDAsMCw1LjU5LTE1bC0xNC01OS4yNUwyMzMsMTEzLjMyQTE0LjQzLDE0LjQzLDAsMCwwLDIzNy4yOCw5Ny44N1ptLTEyLjE0LDYuMzctNDguNjksNDJhNiw2LDAsMCwwLTEuOTIsNS45MmwxNC44OCw2Mi43OWEyLjM1LDIuMzUsMCwwLDEtLjk1LDIuNTcsMi4yNCwyLjI0LDAsMCwxLTIuNi4xTDEzMS4xNCwxODRhNiw2LDAsMCwwLTYuMjgsMEw3MC4xNCwyMTcuNjFhMi4yNCwyLjI0LDAsMCwxLTIuNi0uMSwyLjM1LDIuMzUsMCwwLDEtMS0yLjU3bDE0Ljg4LTYyLjc5YTYsNiwwLDAsMC0xLjkyLTUuOTJsLTQ4LjY5LTQyYTIuMzcsMi4zNywwLDAsMS0uNzMtMi42NSwyLjI4LDIuMjgsMCwwLDEsMi4wNy0xLjY1bDYzLjkyLTUuMTZhNiw2LDAsMCwwLDUuMDYtMy42OWwyNC42My01OS42YTIuMzUsMi4zNSwwLDAsMSw0LjM4LDBsMjQuNjMsNTkuNmE2LDYsMCwwLDAsNS4wNiwzLjY5bDYzLjkyLDUuMTZhMi4yOCwyLjI4LDAsMCwxLDIuMDcsMS42NUEyLjM3LDIuMzcsMCwwLDEsMjI1LjE0LDEwNC4yNFoiLz48L3N2Zz4=');}.icon-alphabetical{--icon:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIGZpbGw9ImN1cnJlbnRDb2xvciIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTgzLjc4IDE4NC4wNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtNTkuNTg2IDY5Ljc0MmMtMC44NTEzIDAtMS40NjEgMC4xOTY1Ni0xLjgzNjYgMC41OTcxOC0wLjM1MDU0IDAuMzc1NTgtMC41Mjk1OCAxLjAyMjktMC41Mjk1OCAxLjk0OTNzMC4xNzkwMyAxLjU5MzcgMC41Mjk1OCAxLjk5NDRjMC4zNzU1OCAwLjM3NTU4IDAuOTg1MjkgMC41NjMzOCAxLjgzNjYgMC41NjMzOGg3LjAxOTdsLTEyLjQyOCAzNC4zNjZoLTIuMTA3Yy0wLjg1MTMgMC0xLjQ2MSAwLjE5NjU2LTEuODM2NiAwLjU5NzE4LTAuMzUwNTQgMC4zNzU1OC0wLjUyOTU3IDEuMDM0MS0wLjUyOTU3IDEuOTYwNiAwIDAuOTI2NDQgMC4xNzkwMyAxLjU4MjUgMC41Mjk1NyAxLjk4MyAwLjM3NTU4IDAuMzc1NTkgMC45ODUyOSAwLjU2MzM4IDEuODM2NiAwLjU2MzM4aDEyLjU1MmMwLjg1MTMgMCAxLjQ1MjItMC4xODc3OSAxLjgwMjgtMC41NjMzOCAwLjM3NTU4LTAuNDAwNjIgMC41NjMzNy0xLjA1NjYgMC41NjMzNy0xLjk4MyAwLTAuOTI2NDUtMC4xODc3OS0xLjU4NS0wLjU2MzM3LTEuOTYwNi0wLjM1MDU0LTAuNDAwNjItMC45NTE0Ny0wLjU5NzE4LTEuODAyOC0wLjU5NzE4aC00LjU1MjFsMy4xMjExLTguOTM0OWgxOC4yMmwzLjA3NiA4LjkzNDloLTUuMDcwNGMtMC44NTEzIDAtMS40NjEgMC4xOTY1Ni0xLjgzNjYgMC41OTcxOC0wLjM1MDU0IDAuMzc1NTgtMC41Mjk1OCAxLjAzNDEtMC41Mjk1OCAxLjk2MDYgMCAwLjkyNjQ0IDAuMTc5MDMgMS41ODI1IDAuNTI5NTggMS45ODMgMC4zNzU1OCAwLjM3NTU5IDAuOTg1MjkgMC41NjMzOCAxLjgzNjYgMC41NjMzOGgxMy4yOTZjMC44NTEzIDAgMS40NTIyLTAuMTg3NzkgMS44MDI4LTAuNTYzMzggMC4zNzU1OC0wLjQwMDYyIDAuNTYzMzctMS4wNTY2IDAuNTYzMzctMS45ODMgMC0wLjkyNjQ1LTAuMTg3NzktMS41ODUtMC41NjMzNy0xLjk2MDYtMC4zNTA1NC0wLjQwMDYyLTAuOTUxNDctMC41OTcxOC0xLjgwMjgtMC41OTcxOGgtMi4yODczbC0xMy4yNjItMzcuMDM2Yy0wLjMwMDQ3LTAuODUxMy0wLjc1OTk0LTEuNDYxLTEuMzg1OS0xLjgzNjYtMC42MDA5My0wLjQwMDYyLTEuNDA5Ny0wLjU5NzE4LTIuNDExMy0wLjU5NzE4em00NC4xNDYgMGMtMC44NTEzIDAtMS40NzIzIDAuMTk2NTYtMS44NDc4IDAuNTk3MTgtMC4zNTA1NSAwLjM3NTU4LTAuNTE4MyAxLjAyMjktMC41MTgzIDEuOTQ5M3YxMS45MWMwIDAuODc2MzMgMC4yMDUzMiAxLjUwNjEgMC42MzA5OCAxLjg4MTcgMC40MjU2NiAwLjM3NTU4IDEuMTU5MyAwLjU2MzM3IDIuMTg1OSAwLjU2MzM3czEuNzQ5LTAuMTg3NzkgMi4xNzQ3LTAuNTYzMzdjMC40MjU2OS0wLjM3NTU4IDAuNjQyMjYtMS4wMDUzIDAuNjQyMjYtMS44ODE3di05LjM1MTdoMTguODUxbC0yNC43NTQgMzUuMzAxYy0wLjM1MDU0IDAuNTI1ODItMC41MTgzMSAxLjA3MTctMC41MTgzMSAxLjYyMjYgMCAwLjkyNjQ1IDAuMTY3NzcgMS41ODI1IDAuNTE4MzEgMS45ODMxIDAuMzc1NTggMC4zNzU1OCAwLjk5NjU0IDAuNTYzMzggMS44NDc4IDAuNTYzMzhoMjguNzY2YzAuODUxMyAwIDEuNDUyMi0wLjE4NzggMS44MDI4LTAuNTYzMzggMC4zNzU1OC0wLjQwMDYyIDAuNTYzMzgtMS4wNTY2IDAuNTYzMzgtMS45ODMxdi0xMi42NjVjMC0wLjg3NjMzLTAuMjE2NTgtMS40OTQ4LTAuNjQyMjUtMS44NzA0LTAuNDI1NjYtMC4zNzU1OC0xLjE0OC0wLjU2MzM4LTIuMTc0Ny0wLjU2MzM4LTEuMDI2NiAwLTEuNzQ5IDAuMTg3NzktMi4xNzQ3IDAuNTYzMzgtMC40MjU2NiAwLjM3NTU4LTAuNjQyMjQgMC45OTQwMi0wLjY0MjI0IDEuODcwNHYxMC4xMDdoLTE5Ljk3OGwyNC45MDEtMzUuNDU5YzAuMjUwMzktMC4zNTA1NCAwLjM3MTgzLTAuODM4ODMgMC4zNzE4My0xLjQ2NDggMC0wLjkyNjQ1LTAuMTg3OC0xLjU3MzctMC41NjMzOC0xLjk0OTMtMC4zNTA1NS0wLjQwMDYyLTAuOTUxNDctMC41OTcxOC0xLjgwMjgtMC41OTcxOHptLTMxLjc1MiA1LjEwNDJoMC43MDk4NWw2Ljk4NTkgMjAuMzE1aC0xNC43MTZ6bS0zNy43MjMtNDkuMTgzYy00LjczNDIgMC04LjYzMTMgMy44OTctOC42MzEzIDguNjMxM3YxMTUuNDdjMCA0LjczNDIgMy44OTcgOC42MzEzIDguNjMxMyA4LjYzMTNoMTE1LjI2YzQuNzM0MiAwIDguNjQyMS0zLjg5NyA4LjY0MjEtOC42MzEzdi0xMTUuNDdjMC00LjczNDItMy45MDgyLTguNjMxMy04LjY0MjEtOC42MzEzem0wIDUuNzI0aDExNS4yNmMxLjY1OCAwIDIuOTA3IDEuMjQ5MSAyLjkwNyAyLjkwNzF2MTE1LjQ3YzAgMS42NTgtMS4yNDkxIDIuOTA3LTIuOTA3IDIuOTA3aC0xMTUuMjZjLTEuNjU4IDAtMi44OTU4LTEuMjQ5MS0yLjg5NTgtMi45MDd2LTExNS40N2MwLTEuNjU4IDEuMjM3OC0yLjkwNzEgMi44OTU4LTIuOTA3MXoiIGZpbGw9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIuNzIxMTQiLz48L3N2Zz4=');}.icon-scribble{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMDQuMjUsMTg4LjI0YTE2LjYzLDE2LjYzLDAsMCwwLDAsMjMuNTIsNiw2LDAsMSwxLTguNDgsOC40OCwyOC42MSwyOC42MSwwLDAsMSwwLTQwLjQ4bDkuMzctOS4zOGExNi42MywxNi42MywwLDAsMC0yMy41Mi0yMy41MWwtNjYuNzUsNjYuNzVhMjguNjMsMjguNjMsMCwwLDEtNDAuNDktNDAuNDlsOTguNzYtOTguNzVhMTYuNjMsMTYuNjMsMCwwLDAtMjMuNTItMjMuNTFMODIuODYsMTE3LjYyQTI4LjYzLDI4LjYzLDAsMCwxLDQyLjM3LDc3LjEzTDgzLjc1LDM1Ljc2YTYsNiwwLDEsMSw4LjQ5LDguNDhMNTAuODYsODUuNjJhMTYuNjMsMTYuNjMsMCwwLDAsMjMuNTIsMjMuNTFsNjYuNzUtNjYuNzVhMjguNjMsMjguNjMsMCwwLDEsNDAuNDksNDAuNDlMODIuODYsMTgxLjYyYTE2LjYzLDE2LjYzLDAsMCwwLDIzLjUyLDIzLjUxbDY2Ljc2LTY2Ljc1YTI4LjYzLDI4LjYzLDAsMCwxLDQwLjQ5LDQwLjQ5WiIvPjwvc3ZnPg==');}.icon-brackets-angle{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik04NS4wNiw0My4yMiwzMS4xMSwxMjhsNTQsODQuNzhhNiw2LDAsMCwxLTEuODQsOC4yOCw2LDYsMCwwLDEtOC4yOC0xLjg0bC01Ni04OGE2LDYsMCwwLDEsMC02LjQ0bDU2LTg4YTYsNiwwLDAsMSwxMC4xMiw2LjQ0Wm0xNTIsODEuNTYtNTYtODhhNiw2LDAsMSwwLTEwLjEyLDYuNDRMMjI0Ljg5LDEyOGwtNTMuOTUsODQuNzhhNiw2LDAsMCwwLDEuODQsOC4yOCw2LDYsMCwwLDAsOC4yOC0xLjg0bDU2LTg4QTYsNiwwLDAsMCwyMzcuMDYsMTI0Ljc4WiIvPjwvc3ZnPg==');}.icon-brain{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDYsMTI0YTU0LjEzLDU0LjEzLDAsMCwwLTMyLTQ5LjMzVjcyYTQ2LDQ2LDAsMCwwLTg2LTIyLjY3QTQ2LDQ2LDAsMCwwLDQyLDcydjIuNjdhNTQsNTQsMCwwLDAsMCw5OC42M1YxNzZhNDYsNDYsMCwwLDAsODYsMjIuNjdBNDYsNDYsMCwwLDAsMjE0LDE3NnYtMi43QTU0LjA3LDU0LjA3LDAsMCwwLDI0NiwxMjRaTTg4LDIxMGEzNCwzNCwwLDAsMS0zNC0zMi45NEE1My42Nyw1My42NywwLDAsMCw2NCwxNzhoOGE2LDYsMCwwLDAsMC0xMkg2NEE0Miw0MiwwLDAsMSw1MCw4NC4zOWE2LDYsMCwwLDAsNC01LjY2VjcyYTM0LDM0LDAsMCwxLDY4LDB2NzMuMDVBNDUuODksNDUuODksMCwwLDAsODgsMTMwYTYsNiwwLDAsMCwwLDEyLDM0LDM0LDAsMCwxLDAsNjhabTEwNC00NGgtOGE2LDYsMCwwLDAsMCwxMmg4YTUzLjY3LDUzLjY3LDAsMCwwLDEwLS45NEEzNCwzNCwwLDEsMSwxNjgsMTQyYTYsNiwwLDAsMCwwLTEyLDQ1Ljg5LDQ1Ljg5LDAsMCwwLTM0LDE1LjA1VjcyYTM0LDM0LDAsMCwxLDY4LDB2Ni43M2E2LDYsMCwwLDAsNCw1LjY2QTQyLDQyLDAsMCwxLDE5MiwxNjZabTE0LTU0YTYsNiwwLDAsMS02LDZoLTRhMzQsMzQsMCwwLDEtMzQtMzRWODBhNiw2LDAsMCwxLDEyLDB2NGEyMiwyMiwwLDAsMCwyMiwyMmg0QTYsNiwwLDAsMSwyMDYsMTEyWk02MCwxMThINTZhNiw2LDAsMCwxLDAtMTJoNEEyMiwyMiwwLDAsMCw4Miw4NFY4MGE2LDYsMCwwLDEsMTIsMHY0QTM0LDM0LDAsMCwxLDYwLDExOFoiLz48L3N2Zz4=');}.icon-palette{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xOTkuMzcsNTUuMzFBMTAxLjMyLDEwMS4zMiwwLDAsMCwxMjgsMjZoLTFBMTAyLDEwMiwwLDAsMCwyNiwxMjhjMCw0Mi4wOSwyNi4wNyw3Ny40NCw2OCw5Mi4yNkEzMC4yMSwzMC4yMSwwLDAsMCwxMDQuMTEsMjIyLDMwLjA2LDMwLjA2LDAsMCwwLDEzNCwxOTJhMTgsMTgsMCwwLDEsMTgtMThoNDYuMjFhMjkuODIsMjkuODIsMCwwLDAsMjkuMjUtMjMuMzFBMTAyLjcxLDEwMi43MSwwLDAsMCwyMzAsMTI3LjExLDEwMS4yNSwxMDEuMjUsMCwwLDAsMTk5LjM3LDU1LjMxWk0yMTUuNzYsMTQ4YTE3Ljg5LDE3Ljg5LDAsMCwxLTE3LjU1LDE0SDE1MmEzMCwzMCwwLDAsMC0zMCwzMCwxOCwxOCwwLDAsMS0yNCwxN0M2MSwxOTUuODYsMzgsMTY0Ljg1LDM4LDEyOGE5MCw5MCwwLDAsMSw4OS4wNy05MEgxMjhhOTAuMzQsOTAuMzQsMCwwLDEsOTAsODkuMjJBOTAuNDYsOTAuNDYsMCwwLDEsMjE1Ljc2LDE0OFpNMTM4LDc2YTEwLDEwLDAsMSwxLTEwLTEwQTEwLDEwLDAsMCwxLDEzOCw3NlpNOTQsMTAwQTEwLDEwLDAsMSwxLDg0LDkwLDEwLDEwLDAsMCwxLDk0LDEwMFptMCw1NmExMCwxMCwwLDEsMS0xMC0xMEExMCwxMCwwLDAsMSw5NCwxNTZabTg4LTU2YTEwLDEwLDAsMSwxLTEwLTEwQTEwLDEwLDAsMCwxLDE4MiwxMDBaIi8+PC9zdmc+');}.icon-pen-nib{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDYsOTIuNjhhMTMuOTQsMTMuOTQsMCwwLDAtNC4xLTkuOUwxNzMuMjEsMTQuMWExNCwxNCwwLDAsMC0xOS44LDBMMTI0LjY4LDQyLjgzLDY2LjIyLDY0Ljc2YTE0LDE0LDAsMCwwLTguOSwxMC44TDM0LjA4LDIxNUE2LDYsMCwwLDAsNDAsMjIyYTYuNjEsNi42MSwwLDAsMCwxLS4wOGwxMzkuNDQtMjMuMjRhMTQsMTQsMCwwLDAsMTAuODEtOC45bDIxLjkyLTU4LjQ2LDI4Ljc0LTI4Ljc0QTEzLjkyLDEzLjkyLDAsMCwwLDI0Niw5Mi42OFptLTY2LDkyLjg5YTIsMiwwLDAsMS0xLjU0LDEuMjdMNTcuNDksMjA3bDUyLjg3LTUyLjg4YTI2LDI2LDAsMSwwLTguNDgtOC40OEw0OSwxOTguNTNsMjAuMTctMTIxQTIsMiwwLDAsMSw3MC40Myw3Nmw1Ni4wNi0yMUwyMDEsMTI5LjUxWk0xMTAsMTMyYTE0LDE0LDAsMSwxLDE0LDE0QTE0LDE0LDAsMCwxLDExMCwxMzJaTTIzMy40MSw5NC4xLDIwOCwxMTkuNTEsMTM2LjQ4LDQ4LDE2MS45LDIyLjU4YTIsMiwwLDAsMSwyLjgzLDBsNjguNjgsNjguNjlhMiwyLDAsMCwxLDAsMi44M1oiLz48L3N2Zz4=');}.icon-question{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMzgsMTgwYTEwLDEwLDAsMSwxLTEwLTEwQTEwLDEwLDAsMCwxLDEzOCwxODBaTTEyOCw3NGMtMjEsMC0zOCwxNS4yNS0zOCwzNHY0YTYsNiwwLDAsMCwxMiwwdi00YzAtMTIuMTMsMTEuNjYtMjIsMjYtMjJzMjYsOS44NywyNiwyMi0xMS42NiwyMi0yNiwyMmE2LDYsMCwwLDAtNiw2djhhNiw2LDAsMCwwLDEyLDB2LTIuNDJjMTguMTEtMi41OCwzMi0xNi42NiwzMi0zMy41OEMxNjYsODkuMjUsMTQ5LDc0LDEyOCw3NFptMTAyLDU0QTEwMiwxMDIsMCwxLDEsMTI4LDI2LDEwMi4xMiwxMDIuMTIsMCwwLDEsMjMwLDEyOFptLTEyLDBhOTAsOTAsMCwxLDAtOTAsOTBBOTAuMSw5MC4xLDAsMCwwLDIxOCwxMjhaIi8+PC9zdmc+');}.icon-city{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDAsMjEwSDIzMFY4OGE2LDYsMCwwLDAtNi02SDE2MGE2LDYsMCwwLDAtNiw2djQySDEwMlY0MGE2LDYsMCwwLDAtNi02SDMyYTYsNiwwLDAsMC02LDZWMjEwSDE2YTYsNiwwLDAsMCwwLDEySDI0MGE2LDYsMCwwLDAsMC0xMlpNMTY2LDk0aDUyVjIxMEgxNjZabS0xMiw0OHY2OEgxMDJWMTQyWk0zOCw0Nkg5MFYyMTBIMzhaTTcwLDcyVjg4YTYsNiwwLDAsMS0xMiwwVjcyYTYsNiwwLDAsMSwxMiwwWm0wLDQ4djE2YTYsNiwwLDAsMS0xMiwwVjEyMGE2LDYsMCwwLDEsMTIsMFptMCw0OHYxNmE2LDYsMCwwLDEtMTIsMFYxNjhhNiw2LDAsMCwxLDEyLDBabTUyLDE2VjE2OGE2LDYsMCwwLDEsMTIsMHYxNmE2LDYsMCwwLDEtMTIsMFptNjQsMFYxNjhhNiw2LDAsMCwxLDEyLDB2MTZhNiw2LDAsMCwxLTEyLDBabTAtNDhWMTIwYTYsNiwwLDAsMSwxMiwwdjE2YTYsNiwwLDAsMS0xMiwwWiIvPjwvc3ZnPg==');}.icon-folder{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTYsNzRIMTMwLjQ5bC0yNy45LTI3LjlhMTMuOTQsMTMuOTQsMCwwLDAtOS45LTQuMUg0MEExNCwxNCwwLDAsMCwyNiw1NlYyMDAuNjJBMTMuMzksMTMuMzksMCwwLDAsMzkuMzgsMjE0SDIxNi44OUExMy4xMiwxMy4xMiwwLDAsMCwyMzAsMjAwLjg5Vjg4QTE0LDE0LDAsMCwwLDIxNiw3NFpNNDAsNTRIOTIuNjlhMiwyLDAsMCwxLDEuNDEuNTlMMTEzLjUxLDc0SDM4VjU2QTIsMiwwLDAsMSw0MCw1NFpNMjE4LDIwMC44OWExLjExLDEuMTEsMCwwLDEtMS4xMSwxLjExSDM5LjM4QTEuNCwxLjQsMCwwLDEsMzgsMjAwLjYyVjg2SDIxNmEyLDIsMCwwLDEsMiwyWiIvPjwvc3ZnPg==');}.icon-hash{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjQsOTBIMTczbDguODktNDguOTNhNiw2LDAsMSwwLTExLjgtMi4xNEwxNjAuODEsOTBIMTA5bDguODktNDguOTNhNiw2LDAsMCwwLTExLjgtMi4xNEw5Ni44MSw5MEg0OGE2LDYsMCwwLDAsMCwxMkg5NC42M2wtOS40Niw1MkgzMmE2LDYsMCwwLDAsMCwxMkg4M0w3NC4xLDIxNC45M2E2LDYsMCwwLDAsNC44Myw3QTUuNjQsNS42NCwwLDAsMCw4MCwyMjJhNiw2LDAsMCwwLDUuODktNC45M0w5NS4xOSwxNjZIMTQ3bC04Ljg5LDQ4LjkzYTYsNiwwLDAsMCw0LjgzLDcsNS42NCw1LjY0LDAsMCwwLDEuMDguMSw2LDYsMCwwLDAsNS44OS00LjkzTDE1OS4xOSwxNjZIMjA4YTYsNiwwLDAsMCwwLTEySDE2MS4zN2w5LjQ2LTUySDIyNGE2LDYsMCwwLDAsMC0xMlptLTc0LjgzLDY0SDk3LjM3bDkuNDYtNTJoNTEuOFoiLz48L3N2Zz4=');}.icon-shapes{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik02OS42OSw2Mi4xYTYsNiwwLDAsMC0xMS4zOCwwbC00MCwxMjBBNiw2LDAsMCwwLDI0LDE5MGg4MGE2LDYsMCwwLDAsNS42OS03LjlaTTMyLjMyLDE3OCw2NCw4M2wzMS42OCw5NVpNMjA2LDc2YTUwLDUwLDAsMSwwLTUwLDUwQTUwLjA2LDUwLjA2LDAsMCwwLDIwNiw3NlptLTg4LDBhMzgsMzgsMCwxLDEsMzgsMzhBMzgsMzgsMCwwLDEsMTE4LDc2Wm0xMDYsNzBIMTM2YTYsNiwwLDAsMC02LDZ2NTZhNiw2LDAsMCwwLDYsNmg4OGE2LDYsMCwwLDAsNi02VjE1MkE2LDYsMCwwLDAsMjI0LDE0NlptLTYsNTZIMTQyVjE1OGg3NloiLz48L3N2Zz4=');}.icon-diamonds-four{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMjMuNzYsMTA4LjI0YTYsNiwwLDAsMCw4LjQ4LDBsNDAtNDBhNiw2LDAsMCwwLDAtOC40OGwtNDAtNDBhNiw2LDAsMCwwLTguNDgsMGwtNDAsNDBhNiw2LDAsMCwwLDAsOC40OFpNMTI4LDMyLjQ5LDE1OS41MSw2NCwxMjgsOTUuNTEsOTYuNDksNjRabTQuMjQsMTE1LjI3YTYsNiwwLDAsMC04LjQ4LDBsLTQwLDQwYTYsNiwwLDAsMCwwLDguNDhsNDAsNDBhNiw2LDAsMCwwLDguNDgsMGw0MC00MGE2LDYsMCwwLDAsMC04LjQ4Wk0xMjgsMjIzLjUxLDk2LjQ5LDE5MiwxMjgsMTYwLjQ5LDE1OS41MSwxOTJabTEwOC4yNC05OS43NS00MC00MGE2LDYsMCwwLDAtOC40OCwwbC00MCw0MGE2LDYsMCwwLDAsMCw4LjQ4bDQwLDQwYTYsNiwwLDAsMCw4LjQ4LDBsNDAtNDBBNiw2LDAsMCwwLDIzNi4yNCwxMjMuNzZaTTE5MiwxNTkuNTEsMTYwLjQ5LDEyOCwxOTIsOTYuNDksMjIzLjUxLDEyOFptLTgzLjc2LTM1Ljc1LTQwLTQwYTYsNiwwLDAsMC04LjQ4LDBsLTQwLDQwYTYsNiwwLDAsMCwwLDguNDhsNDAsNDBhNiw2LDAsMCwwLDguNDgsMGw0MC00MEE2LDYsMCwwLDAsMTA4LjI0LDEyMy43NlpNNjQsMTU5LjUxLDMyLjQ5LDEyOCw2NCw5Ni40OSw5NS41MSwxMjhaIi8+PC9zdmc+');}.icon-crosshair-simple{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMjgsMjZBMTAyLDEwMiwwLDEsMCwyMzAsMTI4LDEwMi4xMiwxMDIuMTIsMCwwLDAsMTI4LDI2Wm02LDE5MS44VjE4NGE2LDYsMCwwLDAtMTIsMHYzMy44QTkwLjE1LDkwLjE1LDAsMCwxLDM4LjIsMTM0SDcyYTYsNiwwLDAsMCwwLTEySDM4LjJBOTAuMTUsOTAuMTUsMCwwLDEsMTIyLDM4LjJWNzJhNiw2LDAsMCwwLDEyLDBWMzguMkE5MC4xNSw5MC4xNSwwLDAsMSwyMTcuOCwxMjJIMTg0YTYsNiwwLDAsMCwwLDEyaDMzLjhBOTAuMTUsOTAuMTUsMCwwLDEsMTM0LDIxNy44WiIvPjwvc3ZnPg==');}.icon-circle-notch{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzAsMTI4YTEwMiwxMDIsMCwwLDEtMjA0LDBjMC00MC4xOCwyMy4zNS03Ni44Niw1OS41LTkzLjQ1YTYsNiwwLDAsMSw1LDEwLjlDNTguNjEsNjAuMDksMzgsOTIuNDksMzgsMTI4YTkwLDkwLDAsMCwwLDE4MCwwYzAtMzUuNTEtMjAuNjEtNjcuOTEtNTIuNS04Mi41NWE2LDYsMCwwLDEsNS0xMC45QzIwNi42NSw1MS4xNCwyMzAsODcuODIsMjMwLDEyOFoiLz48L3N2Zz4=');}.icon-cards-three{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMDgsOTBINDhhMTQsMTQsMCwwLDAtMTQsMTR2OTZhMTQsMTQsMCwwLDAsMTQsMTRIMjA4YTE0LDE0LDAsMCwwLDE0LTE0VjEwNEExNCwxNCwwLDAsMCwyMDgsOTBabTIsMTEwYTIsMiwwLDAsMS0yLDJINDhhMiwyLDAsMCwxLTItMlYxMDRhMiwyLDAsMCwxLDItMkgyMDhhMiwyLDAsMCwxLDIsMlpNNTAsNjRhNiw2LDAsMCwxLDYtNkgyMDBhNiw2LDAsMCwxLDAsMTJINTZBNiw2LDAsMCwxLDUwLDY0Wk02NiwzMmE2LDYsMCwwLDEsNi02SDE4NGE2LDYsMCwwLDEsMCwxMkg3MkE2LDYsMCwwLDEsNjYsMzJaIi8+PC9zdmc+');}.icon-house{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTcuOSwxMTAuMWwtODAtODBhMTQsMTQsMCwwLDAtMTkuOCwwbC04MCw4MEExMy45MiwxMy45MiwwLDAsMCwzNCwxMjB2OTZhNiw2LDAsMCwwLDYsNmg2NGE2LDYsMCwwLDAsNi02VjE1OGgzNnY1OGE2LDYsMCwwLDAsNiw2aDY0YTYsNiwwLDAsMCw2LTZWMTIwQTEzLjkyLDEzLjkyLDAsMCwwLDIxNy45LDExMC4xWk0yMTAsMjEwSDE1OFYxNTJhNiw2LDAsMCwwLTYtNkgxMDRhNiw2LDAsMCwwLTYsNnY1OEg0NlYxMjBhMiwyLDAsMCwxLC41OC0xLjQybDgwLTgwYTIsMiwwLDAsMSwyLjg0LDBsODAsODBBMiwyLDAsMCwxLDIxMCwxMjBaIi8+PC9zdmc+');}.icon-sun-dim{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMjIsNDBWMzJhNiw2LDAsMCwxLDEyLDB2OGE2LDYsMCwwLDEtMTIsMFptNjgsODhhNjIsNjIsMCwxLDEtNjItNjJBNjIuMDcsNjIuMDcsMCwwLDEsMTkwLDEyOFptLTEyLDBhNTAsNTAsMCwxLDAtNTAsNTBBNTAuMDYsNTAuMDYsMCwwLDAsMTc4LDEyOFpNNTkuNzYsNjguMjRhNiw2LDAsMSwwLDguNDgtOC40OGwtOC04YTYsNiwwLDAsMC04LjQ4LDguNDhabTAsMTE5LjUyLTgsOGE2LDYsMCwxLDAsOC40OCw4LjQ4bDgtOGE2LDYsMCwxLDAtOC40OC04LjQ4Wm0xMzYtMTM2LTgsOGE2LDYsMCwxLDAsOC40OCw4LjQ4bDgtOGE2LDYsMCwwLDAtOC40OC04LjQ4Wm0uNDgsMTM2YTYsNiwwLDAsMC04LjQ4LDguNDhsOCw4YTYsNiwwLDAsMCw4LjQ4LTguNDhaTTQwLDEyMkgzMmE2LDYsMCwwLDAsMCwxMmg4YTYsNiwwLDAsMCwwLTEyWm04OCw4OGE2LDYsMCwwLDAtNiw2djhhNiw2LDAsMCwwLDEyLDB2LThBNiw2LDAsMCwwLDEyOCwyMTBabTk2LTg4aC04YTYsNiwwLDAsMCwwLDEyaDhhNiw2LDAsMCwwLDAtMTJaIi8+PC9zdmc+');}.icon-moon{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzIuMTMsMTQzLjY0YTYsNiwwLDAsMC02LTEuNDlBOTAuMDcsOTAuMDcsMCwwLDEsMTEzLjg2LDI5Ljg1YTYsNiwwLDAsMC03LjQ5LTcuNDhBMTAyLjg4LDEwMi44OCwwLDAsMCw1NC40OCw1OC42OCwxMDIsMTAyLDAsMCwwLDE5Ny4zMiwyMDEuNTJhMTAyLjg4LDEwMi44OCwwLDAsMCwzNi4zMS01MS44OUE2LDYsMCwwLDAsMjMyLjEzLDE0My42NFptLTQyLDQ4LjI5YTkwLDkwLDAsMCwxLTEyNi0xMjZBOTAuOSw5MC45LDAsMCwxLDk5LjY1LDM3LjY2LDEwMi4wNiwxMDIuMDYsMCwwLDAsMjE4LjM0LDE1Ni4zNSw5MC45LDkwLjksMCwwLDEsMTkwLjEsMTkxLjkzWiIvPjwvc3ZnPg==');}.icon-sign-out{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMTgsMjE2YTYsNiwwLDAsMS02LDZINDhhNiw2LDAsMCwxLTYtNlY0MGE2LDYsMCwwLDEsNi02aDY0YTYsNiwwLDAsMSwwLDEySDU0VjIxMGg1OEE2LDYsMCwwLDEsMTE4LDIxNlptMTEwLjI0LTkyLjI0LTQwLTQwYTYsNiwwLDAsMC04LjQ4LDguNDhMMjA5LjUxLDEyMkgxMTJhNiw2LDAsMCwwLDAsMTJoOTcuNTFsLTI5Ljc1LDI5Ljc2YTYsNiwwLDEsMCw4LjQ4LDguNDhsNDAtNDBBNiw2LDAsMCwwLDIyOC4yNCwxMjMuNzZaIi8+PC9zdmc+');}.icon-list{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsMTI4YTYsNiwwLDAsMS02LDZINDBhNiw2LDAsMCwxLDAtMTJIMjE2QTYsNiwwLDAsMSwyMjIsMTI4Wk00MCw3MEgyMTZhNiw2LDAsMCwwLDAtMTJINDBhNiw2LDAsMCwwLDAsMTJaTTIxNiwxODZINDBhNiw2LDAsMCwwLDAsMTJIMjE2YTYsNiwwLDAsMCwwLTEyWiIvPjwvc3ZnPg==');}.icon-loading{--icon:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2Zw0gICAgd2lkdGg9IjMyIg0gICAgaGVpZ2h0PSIzMiINICAgIHZpZXdCb3g9IjAgMCAzMiAzMiINICAgIHZlcnNpb249IjEuMSINICAgIHhtbDpzcGFjZT0icHJlc2VydmUiDSAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEuNSINICAgIGlkPSJzdmcxMCINICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINICAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzDSAgICBpZD0iZGVmczEwIiAvPjxwYXRoDSAgICBpZD0icGF0aDExIg0gICAgc3R5bGU9ImJhc2VsaW5lLXNoaWZ0OmJhc2VsaW5lO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmVjdG9yLWVmZmVjdDpub25lO2ZpbGw6IzIyMjIyMjtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO3N0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MSINICAgIGQ9Im0gMTYuNjIxMDk0LDEuMTQyNTc4MSBjIC04LjI2NjMyMzIsMCAtMTYuMjIwODY3MzgsNi40NDI4MDk1IC0xNS41ODU5Mzc4LDE0LjY4NTU0NjkgMC42MDEzNDU1LDcuODA3MzA4IDcuNDM0MTI2NCwxNC4xMjY5OCAxNC45MzM1OTM4LDE0Ljk0MzM1OSA4LjgzOTg0NSwwLjk2MjI4MyAxNS41MDU0NjksLTYuMzc2OTE5IDE1LjAwNTg1OSwtMTQuOTg2MzI4IEMgMzAuNDk1OSw3LjUzNjI2ODQgMjQuODgzMzk3LDEuMTQyNTc4MSAxNi42MjEwOTQsMS4xNDI1NzgxIFogbSAwLDAuNjUwMzkwNyBDIDI2LjQ4ODc4NiwxLjgwMzg2NDUgMjkuNzE0NTE4LDkuNTkzNTgzMyAzMC4zMDI3MzQsMTUuODA0Njg4IDMxLjE0MTk4MiwyNC42NjYzNjUgMjIuMTYwNDU5LDMxLjE2ODA3NyAxNi4wMzkwNjIsMzAuMTI1IDguODk1MTMyNywyOC45MDc2ODEgMi4yNjEzMTQyLDIzLjI3OTM3NiAxLjY4MzU5MzgsMTUuNzc5Mjk3IDEuMDc2OTMzOCw3LjkwMzI3NTQgOC43MjI1NDUxLDEuNzg0MjY5OSAxNi42MjEwOTQsMS43OTI5Njg4IFogbSAtMC4wNjQ0NSwxLjIxODc1IGMgLTMuNjEwMDgzLDAgLTcuMTU0Nzk5NSwxLjQwMTA2ODcgLTkuNzMwNDY5MSwzLjcwMzEyNSBDIDQuMjUwNTAyMyw5LjAxNjkwMDIgMi42NDIwMzcyLDEyLjIyNjI5NSAyLjkxOTkyMTksMTUuODMzOTg0IDMuNDQ2OTM1LDIyLjY3NTcxMiA5LjQyODk2NDksMjguMTk4OTg1IDE1Ljk5ODA0NywyOC45MTQwNjIgMjMuNzE0MjU2LDI5Ljc1NDAyMyAyOS41MzE2MDMsMjMuMzMxNyAyOS4wOTU3MDMsMTUuODIwMzEyIDI4LjY3Nzk0OCw4LjYyMTM5NTMgMjMuNzc2Njg2LDMuMDExNzE4OCAxNi41NTY2NDEsMy4wMTE3MTg4IFogbSAwLDAuMTk1MzEyNCBjIDcuMTE5MTM0LDAgMTEuOTMyNzEsNS41MDgxMzczIDEyLjM0NTcwMywxMi42MjQ5OTk4IEMgMjkuMzMyMDYyLDIzLjIzNjg5NiAyMy42MTg5NTgsMjkuNTQ1OTk4IDE2LjAxOTUzMSwyOC43MTg3NSA5LjU0NTQzMjEsMjguMDE0MDEyIDMuNjM0MTYzNywyMi41NTUxNDMgMy4xMTUyMzQ0LDE1LjgxODM1OSAyLjg0MjQ1NjMsMTIuMjc2OTY3IDQuNDE4NDEwOSw5LjEyODMxNjkgNi45NTcwMzEyLDYuODU5Mzc1IDkuNDk1NjUxNiw0LjU5MDQzMzEgMTIuOTk3MDkzLDMuMjA3MDMxMiAxNi41NTY2NDEsMy4yMDcwMzEyIFogbSAtMC4wNzAzMSwxLjQxNjAxNTcgYyAtMy4xNjE5NzMsMCAtNi4yNjM1MDksMS4yMjU4MTM5IC04LjUxOTUzMTEsMy4yNDIxODc1IEMgNS43MTA3NjkxLDkuODgxNjA4IDQuMzAxNDU0MiwxMi42OTQ1ODkgNC41NDQ5MjE5LDE1Ljg1NTQ2OSA1LjAwNjU2MjQsMjEuODQ4NTU0IDEwLjI0NDE3OCwyNi42ODYxNTkgMTUuOTk4MDQ3LDI3LjMxMjUgMjIuNzU3MDEzLDI4LjA0ODI2MSAyNy44NTQ0NTEsMjIuNDIwOTM2IDI3LjQ3MjY1NiwxNS44NDE3OTcgMjcuMTA2ODI0LDkuNTM3NjAyNSAyMi44MTAxNiw0LjYyMzA0NjkgMTYuNDg2MzI4LDQuNjIzMDQ2OSBaIG0gMCwwLjE5NTMxMjUgYyA2LjIyMjkyLDAgMTAuNDI5OTQ2LDQuODEzMDEzOCAxMC43OTEwMTYsMTEuMDM1MTU2NiAwLjM3NTYxMyw2LjQ3MjYxNSAtNC42MTc1ODQsMTEuOTg2NzIgLTExLjI1OTc2NiwxMS4yNjM2NzIgQyAxMC4zNTg2ODUsMjYuNTAxMTg2IDUuMTkxODM4MSwyMS43Mjc5ODUgNC43MzgyODEyLDE1LjgzOTg0NCA0LjQ5OTkyMDEsMTIuNzQ1MjYyIDUuODc2NzMxNSw5Ljk5NDk3NzggOC4wOTU3MDMxLDguMDExNzE4OCAxMC4zMTQ2NzUsNi4wMjg0NTk1IDEzLjM3NDg5LDQuODE4MzU5NCAxNi40ODYzMjgsNC44MTgzNTk0IFogbSAtMC4wNjgzNiwxLjQxNjAxNTYgYyAtMi43MTM4NzcsMCAtNS4zNzYxMTgsMS4wNTI1MTY0IC03LjMxMjUwMDIsMi43ODMyMDMxIC0xLjkzNjM4MjgsMS43MzA2ODY5IC0zLjE0NjU1MTcsNC4xNDUzMTE5IC0yLjkzNzUsNi44NTkzNzQ5IDAuMzk2MjY5OSw1LjE0NDQzIDQuODg5NDQ0Miw5LjI5NDQyOSA5LjgyODEyNTIsOS44MzIwMzEgNS44MDE3NDksMC42MzE1NjIgMTAuMTc5MjU3LC00LjE5ODgyOCA5Ljg1MTU2MiwtOS44NDU3MDMgQyAyNS41MzM3NSwxMC40NTM4MjIgMjEuODQ1NjE2LDYuMjM0Mzc1IDE2LjQxNzk3NCw2LjIzNDM3NSBaIG0gMCwwLjE5NTMxMjUgYyA1LjMyNjczLDAgOC45MjUyMjYsNC4xMTc5MDU1IDkuMjM0Mzc1LDkuNDQ1MzEyNSAwLjMyMTUxMyw1LjU0MDM1MSAtMy45NDk4MDEsMTAuMjU5NDc0IC05LjYzNDc2Niw5LjY0MDYyNSBDIDExLjE3Mzg3NSwyNC45ODgzNjIgNi43NDk1MTQzLDIwLjkwMDgxNCA2LjM2MTMyODEsMTUuODYxMzI4IDYuMTU3MzgzMSwxMy4yMTM1NjMgNy4zMzUwNDMxLDEwLjg1OTY4MiA5LjIzNDM3NSw5LjE2MjEwOTQgMTEuMTMzNzA3LDcuNDY0NTM3MiAxMy43NTQ2MjgsNi40Mjk2ODc1IDE2LjQxNzk2OSw2LjQyOTY4NzUgWiBtIC0wLjA2ODM2LDEuNDE2MDE1NiBjIC0yLjI2NTc3NSwwIC00LjQ4ODcyOSwwLjg3OTIxOTYgLTYuMTA1NDY4LDIuMzI0MjE4OSAtMS42MTY3NDA4LDEuNDQ0OTk5IC0yLjYyNzc2MDcsMy40NjEyNjkgLTIuNDUzMTI1NCw1LjcyODUxNiAwLjMzMDg5ODYsNC4yOTU3NjggNC4wODE1OTY0LDcuNzYwMTIgOC4yMDUwNzg0LDguMjA4OTg0IDQuODQ0NTI1LDAuNTI3MzYgOC41MDAxNTYsLTMuNTA2MDk3IDguMjI2NTYyLC04LjIyMDcwMyBDIDIzLjk2MDY3MiwxMS4zNzE5OTYgMjAuODgxMDYsNy44NDU3MDMxIDE2LjM0OTYxNCw3Ljg0NTcwMzEgWiBtIDAsMC4xOTUzMTI1IGMgNC40MzA1MzQsMCA3LjQyMjQ2MSwzLjQyMjc5OTQgNy42Nzk2ODgsNy44NTU0Njg0IDAuMjY3NDEyLDQuNjA4MDgyIC0zLjI4Mzk3OCw4LjUzMjIyNiAtOC4wMTE3MTksOC4wMTc1NzggQyAxMS45ODkwNzUsMjMuNDc1NTM4IDguMzA3MTg5OSwyMC4wNzU1OTMgNy45ODQzNzUsMTUuODg0NzY2IDcuODE0ODQ2MywxMy42ODM4MTkgOC43OTUzMTA1LDExLjcyNjMzOCAxMC4zNzUsMTAuMzE0NDUzIDExLjk1NDY4OSw4LjkwMjU2ODkgMTQuMTM0MzcsOC4wNDEwMTU2IDE2LjM0OTYwOSw4LjA0MTAxNTYgWiBtIC0wLjA2ODM2LDEuNDE2MDE1NiBjIC0xLjgxNzY3MiwwIC0zLjYwMTM0MiwwLjcwMzk2ODggLTQuODk4NDM4LDEuODYzMjgwOCAtMS4yOTcwOTUsMS4xNTkzMSAtMi4xMDg5NjgzLDIuNzc5MTg1IC0xLjk2ODc0OTUsNC41OTk2MSAwLjI2NTUyNjksMy40NDcxMTEgMy4yNzM3NTA1LDYuMjI1ODEzIDYuNTgyMDMxNSw2LjU4NTkzNyAzLjg4NzI5NSwwLjQyMzE2IDYuODIzMDA4LC0yLjgxNTMxOCA2LjYwMzUxNSwtNi41OTc2NTYgQyAyMi4zODk1NDEsMTIuMjg4MjIyIDE5LjkxNjQ5NSw5LjQ1NzAzMTEgMTYuMjgxMjUsOS40NTcwMzEyIFogbSAwLDAuMTk1MzEyNiBjIDMuNTM0MzMzLDAgNS45MTc3NDIsMi43Mjc2OTYyIDYuMTIzMDQ3LDYuMjY1NjI1MiAwLjIxMzMxMSwzLjY3NTgxNCAtMi42MTYyMDgsNi44MDMwMjUgLTYuMzg2NzE5LDYuMzkyNTc4IC0zLjIxMzI5OCwtMC4zNDk3ODUgLTYuMTUwNzU5NywtMy4wNjIxMyAtNi40MDgyMDMsLTYuNDA0Mjk3IC0wLjEzNTExMjIsLTEuNzU0MTI3IDAuNjQ0MjUyLC0zLjMxMzI1NyAxLjkwNDI5NywtNC40Mzk0NTMgMS4yNjAwNDUsLTEuMTI2MTk2IDMuMDAwNDQxLC0xLjgxNDQ1MzMgNC43Njc1NzgsLTEuODE0NDUzMiB6IG0gLTAuMDcwMzEsMS40MTYwMTUyIGMgLTEuMzY5NTcyLDAgLTIuNzEyLDAuNTMwNjc1IC0zLjY4OTQ1NCwxLjQwNDI5NyAtMC45Nzc0NTMsMC44NzM2MjIgLTEuNTkwMTc3LDIuMDk1MTQ1IC0xLjQ4NDM3NSwzLjQ2ODc1IDAuMjAwMTU2LDIuNTk4NDUyIDIuNDY1OSw0LjY4OTU1MSA0Ljk1ODk4NSw0Ljk2MDkzOCAyLjkzMDA3LDAuMzE4OTU4IDUuMTQzOTA4LC0yLjEyMjU4NyA0Ljk3ODUxNSwtNC45NzI2NTYgLTAuMTU4MTQ1LC0yLjcyNTI0NCAtMi4wMjQ2MjIsLTQuODYxMzI5IC00Ljc2MzY3MSwtNC44NjEzMjkgeiBtIDAsMC4xOTUzMTMgYyAyLjYzODEzNSwwIDQuNDE0OTc1LDIuMDM0NTQ0IDQuNTY4MzU5LDQuNjc3NzM0IDAuMTU5MjExLDIuNzQzNTQ2IC0xLjk1MDM4Niw1LjA3MzgyNCAtNC43NjM2NzIsNC43Njc1NzggLTIuMzk4MTAyLC0wLjI2MTA0NyAtNC41OTExMzEsLTIuMjg3NzQxIC00Ljc4MzIwMywtNC43ODEyNSAtMC4xMDA2OTYsLTEuMzA3MzA4IDAuNDc5NTE5LC0yLjQ3MDAzOSAxLjQxOTkyMiwtMy4zMTA1NDYgMC45NDA0MDMsLTAuODQwNTA4IDIuMjM5NTU3LC0xLjM1MzUxNiAzLjU1ODU5NCwtMS4zNTM1MTYgeiBtIC0wLjA2ODM2LDEuNDE2MDE2IGMgLTAuOTIxNDcyLDAgLTEuODIyNjU3LDAuMzU1NDI1IC0yLjQ4MDQ2OSwwLjk0MzM1OSAtMC42NTc4MTEsMC41ODc5MzQgLTEuMDczMzM5LDEuNDE1MDEgLTEuMDAxOTUzLDIuMzQxNzk3IDAuMTM0Nzg1LDEuNzQ5NzkyIDEuNjU2MDk1LDMuMTUzMjkxIDMuMzMzOTg1LDMuMzM1OTM3IDEuOTcyODQ2LDAuMjE0NzU5IDMuNDY2NzYsLTEuNDMxODA5IDMuMzU1NDY4LC0zLjM0OTYwOSAtMC4xMDYyMjQsLTEuODMwNTAzIC0xLjM2NDE3NywtMy4yNzE0ODcgLTMuMjA3MDMxLC0zLjI3MTQ4NCB6IG0gMCwwLjE5NTMxMiBjIDEuNzQxOTQyLDAgMi45MTIyMDksMS4zMzk0NCAzLjAxMzY3MiwzLjA4Nzg5MSAwLjEwNTExLDEuODExMjc2IC0xLjI4NDU2MiwzLjM0NjU3NyAtMy4xNDA2MjUsMy4xNDQ1MzEgLTEuNTgyOTA3LC0wLjE3MjMwNyAtMy4wMzM0NTUsLTEuNTEzMzU1IC0zLjE2MDE1NiwtMy4xNTgyMDMgLTAuMDY2MjgsLTAuODYwNDkgMC4zMTQ3ODUsLTEuNjI0ODY4IDAuOTM1NTQ3LC0yLjE3OTY4OCAwLjYyMDc0OSwtMC41NTQ4MTkgMS40ODA2MiwtMC44OTQ1MzEgMi4zNTE1NTYsLTAuODk0NTMxIHogbSAtMC4wNjgzNiwxLjQxNjAxNiBjIC0wLjQ3MzM2OSwwIC0wLjkzNTI3MSwwLjE4MjEyOSAtMS4yNzM0MzgsMC40ODQzNzUgLTAuMzM4MTY3LDAuMzAyMjQ2IC0wLjU1NDU0NiwwLjczMDk2OSAtMC41MTc1NzgsMS4yMTA5MzcgMC4wNjk0MSwwLjkwMTEzMyAwLjg0ODI0OSwxLjYxODk4MSAxLjcxMDkzOCwxLjcxMjg5MSAxLjAxNTYxNiwwLjExMDU1NyAxLjc4OTYxNCwtMC43NDEwMzEgMS43MzI0MjEsLTEuNzI2NTYzIC0wLjA1NDMsLTAuOTM1NzY2IC0wLjcwNTY5MSwtMS42ODE2NCAtMS42NTIzNDMsLTEuNjgxNjQgeiBtIDAsMC4xOTUzMTIgYyAwLjg0NTc0LDAgMS40MDc0OSwwLjY0NDMzMyAxLjQ1NzAzMSwxLjQ5ODA0NyAwLjA1MTAxLDAuODc5MDA4IC0wLjYxNjc5MywxLjYxOTMyOSAtMS41MTU2MjUsMS41MjE0ODQgLTAuNzY3NzA2LC0wLjA4MzU3IC0xLjQ3NTc4LC0wLjczODk2NyAtMS41MzcxMDksLTEuNTM1MTU2IC0wLjAzMTg2LC0wLjQxMzY3MSAwLjE1MDA1NSwtMC43Nzk2OTcgMC40NTExNzIsLTEuMDQ4ODI4IDAuMzAxMTE2LC0wLjI2OTEzMSAwLjcyMTY5OCwtMC40MzU1NDcgMS4xNDQ1MzEsLTAuNDM1NTQ3IHoiIC8+PC9zdmc+');}.icon-x{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMDQuMjQsMTk1Ljc2YTYsNiwwLDEsMS04LjQ4LDguNDhMMTI4LDEzNi40OSw2MC4yNCwyMDQuMjRhNiw2LDAsMCwxLTguNDgtOC40OEwxMTkuNTEsMTI4LDUxLjc2LDYwLjI0YTYsNiwwLDAsMSw4LjQ4LTguNDhMMTI4LDExOS41MWw2Ny43Ni02Ny43NWE2LDYsMCwwLDEsOC40OCw4LjQ4TDEzNi40OSwxMjhaIi8+PC9zdmc+');}.icon-magnifying-glass{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjguMjQsMjE5Ljc2bC01MS4zOC01MS4zOGE4Ni4xNSw4Ni4xNSwwLDEsMC04LjQ4LDguNDhsNTEuMzgsNTEuMzhhNiw2LDAsMCwwLDguNDgtOC40OFpNMzgsMTEyYTc0LDc0LDAsMSwxLDc0LDc0QTc0LjA5LDc0LjA5LDAsMCwxLDM4LDExMloiLz48L3N2Zz4=');}.icon-floppy-disk{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTcuOSw3My40MiwxODIuNTgsMzguMWExMy45LDEzLjksMCwwLDAtOS44OS00LjFINDhBMTQsMTQsMCwwLDAsMzQsNDhWMjA4YTE0LDE0LDAsMCwwLDE0LDE0SDIwOGExNCwxNCwwLDAsMCwxNC0xNFY4My4zMUExMy45LDEzLjksMCwwLDAsMjE3LjksNzMuNDJaTTE3MCwyMTBIODZWMTUyYTIsMiwwLDAsMSwyLTJoODBhMiwyLDAsMCwxLDIsMlptNDAtMmEyLDIsMCwwLDEtMiwySDE4MlYxNTJhMTQsMTQsMCwwLDAtMTQtMTRIODhhMTQsMTQsMCwwLDAtMTQsMTR2NThINDhhMiwyLDAsMCwxLTItMlY0OGEyLDIsMCwwLDEsMi0ySDE3Mi42OWEyLDIsMCwwLDEsMS40MS41OEwyMDkuNDIsODEuOWEyLDIsMCwwLDEsLjU4LDEuNDFaTTE1OCw3MmE2LDYsMCwwLDEtNiw2SDk2YTYsNiwwLDAsMSwwLTEyaDU2QTYsNiwwLDAsMSwxNTgsNzJaIi8+PC9zdmc+');}.icon-plus-square{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMDgsMzRINDhBMTQsMTQsMCwwLDAsMzQsNDhWMjA4YTE0LDE0LDAsMCwwLDE0LDE0SDIwOGExNCwxNCwwLDAsMCwxNC0xNFY0OEExNCwxNCwwLDAsMCwyMDgsMzRabTIsMTc0YTIsMiwwLDAsMS0yLDJINDhhMiwyLDAsMCwxLTItMlY0OGEyLDIsMCwwLDEsMi0ySDIwOGEyLDIsMCwwLDEsMiwyWm0tMzYtODBhNiw2LDAsMCwxLTYsNkgxMzR2MzRhNiw2LDAsMCwxLTEyLDBWMTM0SDg4YTYsNiwwLDAsMSwwLTEyaDM0Vjg4YTYsNiwwLDAsMSwxMiwwdjM0aDM0QTYsNiwwLDAsMSwxNzQsMTI4WiIvPjwvc3ZnPg==');}.icon-x-circle{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjQuMjQsMTAwLjI0LDEzNi40OCwxMjhsMjcuNzYsMjcuNzZhNiw2LDAsMSwxLTguNDgsOC40OEwxMjgsMTM2LjQ4bC0yNy43NiwyNy43NmE2LDYsMCwwLDEtOC40OC04LjQ4TDExOS41MiwxMjgsOTEuNzYsMTAwLjI0YTYsNiwwLDAsMSw4LjQ4LTguNDhMMTI4LDExOS41MmwyNy43Ni0yNy43NmE2LDYsMCwwLDEsOC40OCw4LjQ4Wk0yMzAsMTI4QTEwMiwxMDIsMCwxLDEsMTI4LDI2LDEwMi4xMiwxMDIuMTIsMCwwLDEsMjMwLDEyOFptLTEyLDBhOTAsOTAsMCwxLDAtOTAsOTBBOTAuMSw5MC4xLDAsMCwwLDIxOCwxMjhaIi8+PC9zdmc+');}.icon-infinity{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDYsMTI4YTU0LDU0LDAsMCwxLTkyLjE4LDM4LjE4LDMuMDcsMy4wNywwLDAsMS0uMjUtLjI2bC02MC02Ny43NGE0Miw0MiwwLDEsMCwwLDU5LjY0bDguNTctOS42N2E2LDYsMCwxLDEsOSw4bC04LjY5LDkuODFhMy4wNywzLjA3LDAsMCwxLS4yNS4yNiw1NCw1NCwwLDEsMSwwLTc2LjM2LDMuMDcsMy4wNywwLDAsMSwuMjUuMjZsNjAsNjcuNzRhNDIsNDIsMCwxLDAsMC01OS42NGwtOC41Nyw5LjY3YTYsNiwwLDEsMS05LThsOC42OS05LjgxYTMuMDcsMy4wNywwLDAsMSwuMjUtLjI2QTU0LDU0LDAsMCwxLDI0NiwxMjhaIi8+PC9zdmc+');}.icon-arrow-counter-clockwise{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsMTI4YTk0LDk0LDAsMCwxLTkyLjc0LDk0SDEyOGE5My40Myw5My40MywwLDAsMS02NC41LTI1LjY1LDYsNiwwLDEsMSw4LjI0LTguNzJBODIsODIsMCwxLDAsNzAsNzBsLS4xOS4xOUwzOS40NCw5OEg3MmE2LDYsMCwwLDEsMCwxMkgyNGE2LDYsMCwwLDEtNi02VjU2YTYsNiwwLDAsMSwxMiwwVjkwLjM0TDYxLjYzLDYxLjRBOTQsOTQsMCwwLDEsMjIyLDEyOFoiLz48L3N2Zz4=');}.icon-clock{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMjgsMjZBMTAyLDEwMiwwLDEsMCwyMzAsMTI4LDEwMi4xMiwxMDIuMTIsMCwwLDAsMTI4LDI2Wm0wLDE5MmE5MCw5MCwwLDEsMSw5MC05MEE5MC4xLDkwLjEsMCwwLDEsMTI4LDIxOFptNjItOTBhNiw2LDAsMCwxLTYsNkgxMjhhNiw2LDAsMCwxLTYtNlY3MmE2LDYsMCwwLDEsMTIsMHY1MGg1MEE2LDYsMCwwLDEsMTkwLDEyOFoiLz48L3N2Zz4=');}.icon-x-square{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMDgsMzRINDhBMTQsMTQsMCwwLDAsMzQsNDhWMjA4YTE0LDE0LDAsMCwwLDE0LDE0SDIwOGExNCwxNCwwLDAsMCwxNC0xNFY0OEExNCwxNCwwLDAsMCwyMDgsMzRabTIsMTc0YTIsMiwwLDAsMS0yLDJINDhhMiwyLDAsMCwxLTItMlY0OGEyLDIsMCwwLDEsMi0ySDIwOGEyLDIsMCwwLDEsMiwyWk0xNjQuMjQsMTAwLjI0LDEzNi40OCwxMjhsMjcuNzYsMjcuNzZhNiw2LDAsMSwxLTguNDgsOC40OEwxMjgsMTM2LjQ4bC0yNy43NiwyNy43NmE2LDYsMCwwLDEtOC40OC04LjQ4TDExOS41MiwxMjgsOTEuNzYsMTAwLjI0YTYsNiwwLDAsMSw4LjQ4LTguNDhMMTI4LDExOS41MmwyNy43Ni0yNy43NmE2LDYsMCwwLDEsOC40OCw4LjQ4WiIvPjwvc3ZnPg==');}.icon-eye-closed{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjkuMjEsMTY1YTYsNiwwLDAsMS0xMC40Miw2bC0yMC0zNS4wOGExMjIsMTIyLDAsMCwxLTM5LDE4LjA5bDYuMTcsMzdhNiw2LDAsMCwxLTQuOTMsNi45MSw2Ljg1LDYuODUsMCwwLDEtMSwuMDgsNiw2LDAsMCwxLTUuOTEtNUwxNDgsMTU2LjQ0YTEyOC44NiwxMjguODYsMCwwLDEtNDAsMEwxMDEuOTIsMTkzQTYsNiwwLDAsMSw5NiwxOThhNi44NSw2Ljg1LDAsMCwxLTEtLjA4QTYsNiwwLDAsMSw5MC4wOCwxOTFsNi4xNy0zN2ExMjIsMTIyLDAsMCwxLTM5LTE4LjA5TDM3LjIxLDE3MWE2LDYsMCwxLDEtMTAuNDItNmwyMC44NS0zNi40OGExNTIsMTUyLDAsMCwxLTIwLjMxLTIwLjc3LDYsNiwwLDAsMSw5LjM0LTcuNTRDNTMuNTQsMTIxLjExLDgzLjA3LDE0NiwxMjgsMTQ2czc0LjQ2LTI0Ljg5LDkxLjMzLTQ1Ljc3YTYsNiwwLDAsMSw5LjM0LDcuNTQsMTUyLDE1MiwwLDAsMS0yMC4zMSwyMC43N1oiLz48L3N2Zz4=');}.icon-arrow-elbow-left-up{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzgsMTkyYTYsNiwwLDAsMS02LDZIODhhNiw2LDAsMCwxLTYtNlY2Mi40OUw0NC4yNCwxMDAuMjRhNiw2LDAsMCwxLTguNDgtOC40OGw0OC00OGE2LDYsMCwwLDEsOC40OCwwbDQ4LDQ4YTYsNiwwLDEsMS04LjQ4LDguNDhMOTQsNjIuNDlWMTg2SDIzMkE2LDYsMCwwLDEsMjM4LDE5MloiLz48L3N2Zz4=');}.icon-arrow-elbow-right-up{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjAuMjQsMTAwLjI0YTYsNiwwLDAsMS04LjQ4LDBMMTc0LDYyLjQ5VjE5MmE2LDYsMCwwLDEtNiw2SDI0YTYsNiwwLDAsMSwwLTEySDE2MlY2Mi40OWwtMzcuNzYsMzcuNzVhNiw2LDAsMCwxLTguNDgtOC40OGw0OC00OGE2LDYsMCwwLDEsOC40OCwwbDQ4LDQ4QTYsNiwwLDAsMSwyMjAuMjQsMTAwLjI0WiIvPjwvc3ZnPg==');}.icon-dots-six-vertical{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMDIsNjBBMTAsMTAsMCwxLDEsOTIsNTAsMTAsMTAsMCwwLDEsMTAyLDYwWm02MiwxMGExMCwxMCwwLDEsMC0xMC0xMEExMCwxMCwwLDAsMCwxNjQsNzBaTTkyLDExOGExMCwxMCwwLDEsMCwxMCwxMEExMCwxMCwwLDAsMCw5MiwxMThabTcyLDBhMTAsMTAsMCwxLDAsMTAsMTBBMTAsMTAsMCwwLDAsMTY0LDExOFpNOTIsMTg2YTEwLDEwLDAsMSwwLDEwLDEwQTEwLDEwLDAsMCwwLDkyLDE4NlptNzIsMGExMCwxMCwwLDEsMCwxMCwxMEExMCwxMCwwLDAsMCwxNjQsMTg2WiIvPjwvc3ZnPg==');}.icon-plus{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsMTI4YTYsNiwwLDAsMS02LDZIMTM0djgyYTYsNiwwLDAsMS0xMiwwVjEzNEg0MGE2LDYsMCwwLDEsMC0xMmg4MlY0MGE2LDYsMCwwLDEsMTIsMHY4Mmg4MkE2LDYsMCwwLDEsMjIyLDEyOFoiLz48L3N2Zz4=');}.icon-pencil-simple{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjUuOSw3NC43OCwxODEuMjEsMzAuMDlhMTQsMTQsMCwwLDAtMTkuOCwwTDM4LjEsMTUzLjQxYTEzLjk0LDEzLjk0LDAsMCwwLTQuMSw5LjlWMjA4YTE0LDE0LDAsMCwwLDE0LDE0SDkyLjY5YTEzLjk0LDEzLjk0LDAsMCwwLDkuOS00LjFMMjI1LjksOTQuNThhMTQsMTQsMCwwLDAsMC0xOS44Wk05NC4xLDIwOS40MWEyLDIsMCwwLDEtMS40MS41OUg0OGEyLDIsMCwwLDEtMi0yVjE2My4zMWEyLDIsMCwwLDEsLjU5LTEuNDFMMTM2LDcyLjQ4LDE4My41MSwxMjBaTTIxNy40MSw4Ni4xLDE5MiwxMTEuNTEsMTQ0LjQ5LDY0LDE2OS45LDM4LjU4YTIsMiwwLDAsMSwyLjgzLDBsNDQuNjgsNDQuNjlhMiwyLDAsMCwxLDAsMi44M1oiLz48L3N2Zz4=');}.icon-logo{--icon:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2Zw0gICAgd2lkdGg9IjMyIg0gICAgaGVpZ2h0PSIzMiINICAgIHZpZXdCb3g9IjAgMCAzMiAzMiINICAgIHZlcnNpb249IjEuMSINICAgIHhtbDpzcGFjZT0icHJlc2VydmUiDSAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxLjUiDSAgICBpZD0ic3ZnMTQiDSAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDSAgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcw0gICAgaWQ9ImRlZnMxNCIgLz48cGF0aA0gICAgZD0iTSAxNi41ODAwNzgsMi4xMzI4MTI1IEMgOC44NjQ4NDQ5LDIuMTMyODEyNSAxLjQ0MDYwMjEsOC4xNDY2MjE4IDIuMDMzMjAzMSwxNS44Mzk4NDQgMi41OTQ0NTg4LDIzLjEyNjY2NiA4Ljk3MTIwMTIsMjkuMDI1MTU1IDE1Ljk3MDcwMywyOS43ODcxMDkgMjQuMjIxMjI0LDMwLjY4NTI0IDMwLjQ0MDkxMSwyMy44MzQyNzcgMjkuOTc0NjA5LDE1Ljc5ODgyOCAyOS41Mjc4MTMsOC4wOTk4NjU1IDI0LjI5MTU2LDIuMTMyODEyNSAxNi41ODAwNzgsMi4xMzI4MTI1IFogbSAwLDAuNjA3NDIxOSBjIDAuMDEwNDYsMCAwLjAyMDgzLDAgMC4wMzEyNSwwIFYgMjkuMjMyNDIyIGMgLTAuMTkwMzIzLC0wLjAxMjE4IC0wLjM4MTUyMSwtMC4wMjc4MyAtMC41NzQyMTksLTAuMDQ4ODMgQyA5LjMxMzA0NTMsMjguNDUxNjE1IDMuMTc3ODc3NSwyMi43OTMwNDQgMi42Mzg2NzE5LDE1Ljc5Mjk2OSAyLjA3MjQ1Niw4LjQ0MjAxNTMgOS4yMDgxMDA4LDIuNzQwMjM0NCAxNi41ODAwNzgsMi43NDAyMzQ0IFogTSAxNi4wOTE3OTcsMy44ODQ3NjU2IDE2LDMuODg4NjcxOSBDIDEyLjcyNTQ1NCw0LjAxODM0ODkgOS41NTIzMzc5LDUuMzY0NjgzOCA3LjI1NTg1OTQsNy41IDQuOTU5MzgwOSw5LjYzNTMxNjIgMy41NDAyNzAzLDEyLjU2NDk3MiAzLjc5Mjk2ODgsMTUuODQ1NzAzIDQuMjg0NzczOSwyMi4yMzAwNDUgOS44NjQ0ODEyLDI3LjM4MzYwNiAxNS45OTQxNDEsMjguMDUyNzM0IGwgMC4wODk4NCwwLjAwOTggMC4wMjE0OCwtMC4xODE2NDEgLTAuMDkxOCwtMC4wMDk4IEMgOS45NzI2NzQ5LDI3LjIxMTY0NCA0LjQ1ODg2OTEsMjIuMTE2NDY4IDMuOTc0NjA5NCwxNS44MzAwNzggMy43MjY1NTU5LDEyLjYwOTY1MSA1LjExNTgwODQsOS43MzkwNDM3IDcuMzc4OTA2Miw3LjYzNDc2NTYgOS42NDIwMDQxLDUuNTMwNDg3NSAxMi43Nzg1MzksNC4xOTgxOTY4IDE2LjAwNzgxMiw0LjA3MDMxMjUgbCAwLjA5MTgsLTAuMDAzOTEgeiBtIDAsMS41MDE5NTMxIEwgMTYsNS4zOTA2MjUgQyAxMy4xMzE5NDksNS41MDQyMDQ3IDEwLjM1MzI5OCw2LjY4NDM0MTUgOC4zNDE3OTY5LDguNTU0Njg3NSA2LjMzMDI5NjIsMTAuNDI1MDMzIDUuMDg3MTkyOSwxMi45OTA4MTkgNS4zMDg1OTM3LDE1Ljg2NTIzNCA1LjczOTM5NCwyMS40NTc2NjkgMTAuNjI1MTYxLDI1Ljk3MDU0NyAxNS45OTQxNDEsMjYuNTU2NjQxIGwgMC4wODk4NCwwLjAwOTggMC4wMjE0OCwtMC4xNzk2ODcgLTAuMDkxOCwtMC4wMDk4IEMgMTAuNzMzMzU0LDI1LjgwMDUzMyA1LjkxMzQ4OTIsMjEuMzQ2MDQ2IDUuNDkwMjM0NCwxNS44NTE1NjMgNS4yNzM0Nzg0LDEzLjAzNzQ1MSA2LjQ4NjcyMzcsMTAuNTI2ODA4IDguNDY0ODQzOCw4LjY4NzUgMTAuNDQyOTY0LDYuODQ4MTkyMiAxMy4xODUwMzIsNS42ODQwNTI2IDE2LjAwNzgxMiw1LjU3MjI2NTYgbCAwLjA5MTgsLTAuMDAzOTEgeiBtIDAsMS41MDM5MDYzIEwgMTYsNi44OTI1NzgxIGMgLTIuNDYxNTc3LDAuMDk3NDgzIC00Ljg0NTcyOCwxLjExMTQxNzQgLTYuNTcyMjY1NiwyLjcxNjc5NjkgLTEuNzI2NTM4LDEuNjA1MzggLTIuNzk1NTc0MSwzLjgwNzI4MiAtMi42MDU0Njg4LDYuMjc1MzkxIDAuMzY5Nzk4Niw0LjgwMDU0IDQuNTYzNTMzNCw4LjY3NDY3NCA5LjE3MTg3NTQsOS4xNzc3MzQgbCAwLjA4OTg0LDAuMDA5OCAwLjAyMTQ4LC0wLjE4MTY0MSAtMC4wOTE4LC0wLjAwOTggQyAxMS40OTQwMzcsMjQuMzg3NDgxIDcuMzY2MTU1NywyMC41NzM2MzQgNy4wMDM5MDYyLDE1Ljg3MTA5NCA2LjgxODQ0ODEsMTMuNDYzMzIgNy44NTc2NDA1LDExLjMxNjUxMyA5LjU1MDc4MTMsOS43NDIxODc1IDExLjI0MzkyMiw4LjE2Nzg2MTggMTMuNTkxNTI5LDcuMTcxODYwOCAxNi4wMDc4MTIsNy4wNzYxNzE5IGwgMC4wOTE4LC0wLjAwMzkxIHogbSAwLDEuNTAxOTUzMSBMIDE2LDguMzk2NDg0NCBjIC0yLjA1NTA3MywwLjA4MTM4NCAtNC4wNDQ3NzUsMC45MjUyMzM0IC01LjQ4NjMyOCwyLjI2NTYyNDYgLTEuNDQxNTUzNSwxLjM0MDM5MyAtMi4zMzQ1ODgxLDMuMTgyMzc5IC0yLjE3NTc4MTQsNS4yNDQxNDEgMC4zMDg3OTIsNC4wMDg1NzkgMy44MDg2MDU0LDcuMjQwMTM2IDcuNjU2MjUwNCw3LjY2MDE1NiBsIDAuMDg5ODQsMC4wMDk4IDAuMDA3OCwtMC4wNjgzNiB2IC0wLjAwMiBsIDAuMDAyLC0wLjAwOTggYyA5LjQ5ZS00LC0wLjAwMzQgMC4wMDM1LC0wLjAwNjIgMC4wMDM5LC0wLjAwOTggNi40MmUtNCwtMC4wMDY3IDguMDJlLTQsLTAuMDEzMDEgMCwtMC4wMTk1MyBsIDAuMDA3OCwtMC4wNzIyNyAtMC4wOTE4LC0wLjAwOTggQyAxMi4yNTQ2NjcsMjIuOTc0NDIyIDguODIwNzc5NiwxOS44MDMyMzEgOC41MTk1MzEzLDE1Ljg5MjU3OCA4LjM2NTM2ODIsMTMuODkxMTA1IDkuMjI4NTM3MywxMi4xMDYyMzcgMTAuNjM2NzE5LDEwLjc5Njg3NSAxMi4wNDQ5LDkuNDg3NTEzIDEzLjk5Nzk5OSw4LjY1NzcxNyAxNi4wMDc4MTIsOC41NzgxMjUgbCAwLjA5MTgsLTAuMDAzOTEgeiBtIDAsMS41MDE5NTMyIEwgMTYsOS44OTg0Mzc1IGMgLTEuNjQ4NTg4LDAuMDY1Mjg3IC0zLjI0NTc2MSwwLjc0MjkzODUgLTQuNDAyMzQ0LDEuODE4MzU5NSAtMS4xNTY1ODIsMS4wNzU0MjEgLTEuODcxNjUwNiwyLjU1MzUzOCAtMS43NDQxNDA0LDQuMjA4OTg0IDAuMjQ3Nzg4NCwzLjIxNjY2OSAzLjA1MzY0MTQsNS44MDk1MDEgNi4xNDA2MjU0LDYuMTQ2NDg1IGwgMC4wODk4NCwwLjAwOTggMC4wMjE0OCwtMC4xODE2NCAtMC4wOTE4LC0wLjAwOTggYyAtMi45OTgzNDQsLTAuMzI3MzA4IC01LjczODI3MywtMi44NTk3OTggLTUuOTc4NTE2LC01Ljk3ODUxNiAtMC4xMjI4NjQ1LC0xLjU5NTE0MiAwLjU2NDI5OCwtMy4wMTgxMTcgMS42ODc1LC00LjA2MjUgMS4xMjMyMDIsLTEuMDQ0MzgyIDIuNjgxODM5LC0xLjcwNjAzNyA0LjI4NTE1NiwtMS43Njk1MzEgbCAwLjA5MTgsLTAuMDAzOSB6IG0gMCwxLjUwMzkwNjcgLTAuMDkxOCwwLjAwMiBjIC0xLjI0MjA5NSwwLjA0OTE5IC0yLjQ0NDgsMC41NjA2NTIgLTMuMzE2NDA2LDEuMzcxMDkzIC0wLjg3MTYwNiwwLjgxMDQ0MiAtMS40MTI2MTksMS45MjQ3MTMgLTEuMzE2NDA2LDMuMTczODI5IDAuMTg2NzgzLDIuNDI0NzMyIDIuMzAwNjQzLDQuMzc2OTEzIDQuNjI2OTUzLDQuNjMwODU5IGwgMC4wODk4NCwwLjAwOTggMC4wMjE0OCwtMC4xODE2NCAtMC4wOTE4LC0wLjAwOTggYyAtMi4yMzc2OTIsLTAuMjQ0MjcyIC00LjI4NTYwNCwtMi4xMzYwODMgLTQuNDY0ODQ0LC00LjQ2Mjg5IC0wLjA5MTU3LC0xLjE4ODgyNiAwLjQyMTUzMiwtMi4yNDc5MzMgMS4yNTk3NjYsLTMuMDI3MzQ0IDAuODM4MjM0LC0wLjc3OTQxMSAyLjAwMjM4MywtMS4yNzI5MTYgMy4xOTkyMTgsLTEuMzIwMzEzIGwgMC4wOTE4LC0wLjAwMzkgeiBtIDAsMS41MDE5NTMgLTAuMDkxOCwwLjAwMzkgYyAtMC44MzU2MTMsMC4wMzMwOSAtMS42NDM4MzEsMC4zNzQ0NTIgLTIuMjMwNDY5LDAuOTE5OTIyIC0wLjU4NjYzNywwLjU0NTQ3IC0wLjk1MTYzNiwxLjI5OTc3OCAtMC44ODY3MTgsMi4xNDI1NzggMC4xMjU3OCwxLjYzMjgyMSAxLjU0NTY3MywyLjk0MjM3IDMuMTExMzI4LDMuMTEzMjgxIC0wLjAwMjYsLTIuOGUtNCAtMC4wMDUzLDIuODZlLTQgLTAuMDA3OCwwIDAuMDAzLDYuMDNlLTQgMC4wMDY2LDAuMDAxNyAwLjAwOTgsMC4wMDIgMC4wMDMxLDMuMDhlLTQgMC4wMDY3LDEuMmUtNSAwLjAwOTgsMCBsIDAuMDc4MTMsMC4wMDk4IDAuMDIxNDgsLTAuMTgxNjQxIC0wLjA5MTgsLTAuMDA5OCBjIC0xLjQ3NzAxNSwtMC4xNjEyMzUgLTIuODMwOTg0LC0xLjQxMjM5NiAtMi45NDkyMTksLTIuOTQ3MjY2IC0wLjA2MDI3LC0wLjc4MjQ5NiAwLjI3NjgyMiwtMS40Nzk3MDkgMC44MzAwNzgsLTEuOTk0MTQxIDAuNTUzMjU3LC0wLjUxNDQzMSAxLjMyMjkzOSwtMC44NDE3NDggMi4xMTMyODEsLTAuODczMDQ2IGwgMC4wOTE4LC0wLjAwMzkgeiBtIDAsMS41MDE5NTMgTCAxNiwxNC40MDYyNSBjIC0wLjQyOTExNywwLjAxNjk5IC0wLjg0Mjg3MywwLjE5MjE2NiAtMS4xNDQ1MzEsMC40NzI2NTYgLTAuMzAxNjU5LDAuMjgwNDkxIC0wLjQ5MDY0OCwwLjY3MDk1NSAtMC40NTcwMzEsMS4xMDc0MjIgMC4wNjQ3NywwLjg0MDg4NiAwLjc5MDcyOSwxLjUxMTczMiAxLjU5NTcwMywxLjU5OTYwOSBsIDAuMDg5ODQsMC4wMDk4IDAuMDIxNDgsLTAuMTgxNjQxIC0wLjA5MTgsLTAuMDA5OCBjIC0wLjcxNjM1NywtMC4wNzgyIC0xLjM3NjM2MiwtMC42ODg2ODEgLTEuNDMzNTk0LC0xLjQzMTY0MSAtMC4wMjg5NywtMC4zNzYxNzkgMC4xMzIxMDUsLTAuNzExNDc3IDAuNDAwMzkxLC0wLjk2MDkzNyAwLjI2ODI4NiwtMC4yNDk0NjEgMC42NDM0ODUsLTAuNDA4NjI3IDEuMDI3MzQzLC0wLjQyMzgyOCBsIDAuMDkxOCwtMC4wMDM5IHoiDSAgICBzdHlsZT0iYmFzZWxpbmUtc2hpZnQ6YmFzZWxpbmU7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2ZWN0b3ItZWZmZWN0Om5vbmU7ZmlsbDojMjIyMjIyO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGU7c3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxIg0gICAgaWQ9InBhdGgyNyIgLz48L3N2Zz4=');}.icon-jakevan{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MiIgdmlld0JveD0iMCAwIDMyIDMyIj48cGF0aCBkPSJNMTcuODggMTQuNjhIMTIuOWwtLjQzLTEuNjNIOS41OGwtLjQ1IDEuNjNINi41bDIuODktOC43NGgzLjJsMi44OSA4LjY0di04LjZoMi40djMuNzhjLjEtLjIuMjItLjM4LjM1LS41Ny4xMy0uMi4yNi0uMzcuMzktLjU0bDEuODYtMi42N2g3Ljh2MS44OUgyNS40djEuMzdoMi42NXYxLjg4SDI1LjR2MS42NWgyLjg2djEuOTFoLTcuOTNsLTEuNzUtMy4zMi0uNy40MXptNS4xMy04LjU5LTIuNyAzLjc5IDIuNyA0Ljc0em0tMTEuMDUgNS4wMy0uMzgtMS40M2ExMzYuODYgMTM2Ljg2IDAgMCAwLS40LTEuNTVMMTEgNy4zOGExNy43NiAxNy43NiAwIDAgMS0uMzYgMS42bC0uMTguNzEtLjM5IDEuNDN6bS04LjU4IDYuM2E1Ljc0IDUuNzQgMCAwIDEtMS4yNC0uMTN2LTEuODNsLjQxLjA4Yy4xNS4wMy4zLjA1LjQ3LjA1LjMgMCAuNTEtLjA2LjY3LS4xN2EuOTIuOTIgMCAwIDAgLjM0LS41MmMuMDYtLjIzLjEtLjUyLjEtLjg2VjUuOThoMi40djcuODVjMCAuODgtLjEzIDEuNTctLjQgMi4xLS4yNi41Mi0uNjMuOS0xLjEgMS4xNC0uNDguMjMtMS4wMy4zNS0xLjY1LjM1WiIgc3R5bGU9ImZpbGw6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDouMDE4NDM5MiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40IC42Nikgc2NhbGUoLjk2MDUwMTM0KSIvPjxwYXRoIGQ9Ik0yMi44MiAyMi4yN2gtNC4wNmwtLjM3LTEuNEgxNS45bC0uMzkgMS40aC0yLjI2bDIuNDktNy41M2gyLjc1bDIuNDkgNy40NHYtNy40MWgyLjdsMi43NyA1LjIxaC4wM2E0MS4xIDQxLjEgMCAwIDEtLjA3LTEuODJ2LTMuMzloMS44M3Y3LjVoLTIuN2wtMi43OS01LjI4aC0uMDRhMTIuODMgMTIuODMgMCAwIDEgLjA4IDEuMjZsLjAyLjY0em0tNC44Ni0zLjA3LS4zMy0xLjIzYTg5LjA3IDg5LjA3IDAgMCAwLS4zNS0xLjM0bC0uMTQtLjY1YTE1LjA0IDE1LjA0IDAgMCAxLS4zMSAxLjM3bC0uMTYuNjItLjMzIDEuMjN6bS0zLjg1LTQuNDMtMi41IDcuNUg5LjJsLTIuNS03LjVoMi4zMmwxLjA0IDMuOGExNS4wMyAxNS4wMyAwIDAgMSAuMzYgMS43NiA3LjYxIDcuNjEgMCAwIDEgLjItMS4ybC4xNC0uNTQgMS4wNi0zLjgyeiIgc3R5bGU9ImZpbGw6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDouMDE1OTg4NCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40IC42Nikgc2NhbGUoLjk2MDUwMTM0KSIvPjxwYXRoIGQ9Ik0xMS45IDI0LjIxYzAgLjQtLjA3LjcyLS4yLjk5LS4xNS4yNi0uMzYuNDYtLjYzLjYtLjI4LjEzLS42Mi4yLTEuMDMuMkg5LjJ2LTMuNWguOTdjLjM4IDAgLjcuMDYuOTYuMTkuMjUuMTMuNDUuMzIuNTguNTguMTQuMjUuMi41Ny4yLjk0em0tLjI2LjAxYzAtLjMzLS4wNS0uNjEtLjE2LS44M2ExLjEgMS4xIDAgMCAwLS41MS0uNTEgMS45NSAxLjk1IDAgMCAwLS44Ny0uMTdoLS42NnYzLjA3aC42Yy41MyAwIC45My0uMTMgMS4yLS4zOS4yNy0uMjYuNC0uNjUuNC0xLjE3ek0xNC4yNyAyNmgtMS45NXYtMy41aDEuOTV2LjIyaC0xLjd2MS4zMmgxLjZ2LjIzaC0xLjZ2MS41aDEuN3ptMS4yOC0zLjVjLjI4IDAgLjUyLjAyLjcuMDhhLjguOCAwIDAgMSAuNDQuM2MuMS4xNC4xNC4zMy4xNC41N2EuOS45IDAgMCAxLS4xLjQ1Ljg3Ljg3IDAgMCAxLS4yNy4zMmMtLjEyLjA4LS4yNS4xNC0uNC4xOGwuOTggMS42aC0uM2wtLjkyLTEuNTNoLS44OVYyNmgtLjI1di0zLjV6bS0uMDMuMjFoLS41OXYxLjU1aC43MWMuMyAwIC41Mi0uMDcuNjktLjIxLjE2LS4xNC4yNC0uMzQuMjQtLjYgMC0uMjgtLjA5LS40Ny0uMjYtLjU4LS4xNy0uMS0uNDMtLjE2LS43OS0uMTZ6bTUuNTctLjIyTDIwLjEyIDI2aC0uMjVsLS43Ni0yLjY1LS4wNS0uMTYtLjA0LS4xNGExOC44IDE4LjggMCAwIDEtLjA2LS4yNCAyMC42IDIwLjYgMCAwIDEtLjExLjQ4TDE4LjA5IDI2aC0uMjVsLS45Ni0zLjVoLjI2bC42NyAyLjQ3YTI3LjM2IDI3LjM2IDAgMCAxIC4wOS4zNWwuMDQuMTcuMDMuMTUuMDMtLjE2YTQuODMgNC44MyAwIDAgMSAuMTQtLjUzbC43LTIuNDZoLjI1bC43MyAyLjQ4YTExLjk4IDExLjk4IDAgMCAxIC4xMy41M2wuMDQuMTVhMTEuMDIgMTEuMDIgMCAwIDEgLjE1LS42OGwuNjktMi40OHpNMjMuMjYgMjZoLTEuOTV2LTMuNWgxLjk1di4yMmgtMS43djEuMzJoMS42di4yM2gtMS42djEuNWgxLjd6bTEuMjgtMy41Yy4yOCAwIC41Mi4wMi43MS4wOGEuOC44IDAgMCAxIC40My4zYy4xLjE0LjE0LjMzLjE0LjU3YS45LjkgMCAwIDEtLjEuNDUuODcuODcgMCAwIDEtLjI3LjMyYy0uMTEuMDgtLjI1LjE0LS40LjE4bC45OCAxLjZoLS4zbC0uOTItMS41M2gtLjg4VjI2aC0uMjZ2LTMuNXptLS4wMi4yMWgtLjZ2MS41NWguNzJjLjI5IDAgLjUxLS4wNy42OC0uMjEuMTYtLjE0LjI0LS4zNC4yNC0uNiAwLS4yOC0uMDgtLjQ3LS4yNi0uNTgtLjE3LS4xLS40My0uMTYtLjc4LS4xNnpNMjYuNSAyNmgtLjI1di0zLjVoMS45NXYuMjJoLTEuN3YxLjQ5aDEuNnYuMjJoLTEuNnoiIHN0eWxlPSJmaWxsOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6LjAxMDEwNjgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNCAuNjYpIHNjYWxlKC45NjA1MDEzNCkiLz48L3N2Zz4=');}.icon-chat{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTYsNTBINDBBMTQsMTQsMCwwLDAsMjYsNjRWMjI0YTEzLjg4LDEzLjg4LDAsMCwwLDguMDksMTIuNjlBMTQuMTEsMTQuMTEsMCwwLDAsNDAsMjM4YTEzLjg3LDEzLjg3LDAsMCwwLDktMy4zMWwuMDYtLjA1TDgyLjIzLDIwNkgyMTZhMTQsMTQsMCwwLDAsMTQtMTRWNjRBMTQsMTQsMCwwLDAsMjE2LDUwWm0yLDE0MmEyLDIsMCwwLDEtMiwySDgwYTYsNiwwLDAsMC0zLjkyLDEuNDZMNDEuMjYsMjI1LjUzQTIsMiwwLDAsMSwzOCwyMjRWNjRhMiwyLDAsMCwxLDItMkgyMTZhMiwyLDAsMCwxLDIsMloiLz48L3N2Zz4=');}.icon-envelope{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjQsNTBIMzJhNiw2LDAsMCwwLTYsNlYxOTJhMTQsMTQsMCwwLDAsMTQsMTRIMjE2YTE0LDE0LDAsMCwwLDE0LTE0VjU2QTYsNiwwLDAsMCwyMjQsNTBabS05Niw4NS44Nkw0Ny40Miw2MkgyMDguNThaTTEwMS42NywxMjgsMzgsMTg2LjM2VjY5LjY0Wm04Ljg4LDguMTRMMTI0LDE0OC40MmE2LDYsMCwwLDAsOC4xLDBsMTMuNC0xMi4yOEwyMDguNTgsMTk0SDQ3LjQzWk0xNTQuMzMsMTI4LDIxOCw2OS42NFYxODYuMzZaIi8+PC9zdmc+');}.icon-calendar{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMDgsMzRIMTgyVjI0YTYsNiwwLDAsMC0xMiwwVjM0SDg2VjI0YTYsNiwwLDAsMC0xMiwwVjM0SDQ4QTE0LDE0LDAsMCwwLDM0LDQ4VjIwOGExNCwxNCwwLDAsMCwxNCwxNEgyMDhhMTQsMTQsMCwwLDAsMTQtMTRWNDhBMTQsMTQsMCwwLDAsMjA4LDM0Wk00OCw0Nkg3NFY1NmE2LDYsMCwwLDAsMTIsMFY0Nmg4NFY1NmE2LDYsMCwwLDAsMTIsMFY0NmgyNmEyLDIsMCwwLDEsMiwyVjgySDQ2VjQ4QTIsMiwwLDAsMSw0OCw0NlpNMjA4LDIxMEg0OGEyLDIsMCwwLDEtMi0yVjk0SDIxMFYyMDhBMiwyLDAsMCwxLDIwOCwyMTBabS05OC05MHY2NGE2LDYsMCwwLDEtMTIsMFYxMjkuNzFsLTcuMzIsMy42NmE2LDYsMCwxLDEtNS4zNi0xMC43NGwxNi04QTYsNiwwLDAsMSwxMTAsMTIwWm01OS41NywyOS4yNUwxNDgsMTc4aDIwYTYsNiwwLDAsMSwwLDEySDEzNmE2LDYsMCwwLDEtNC44LTkuNkwxNjAsMTQyYTEwLDEwLDAsMSwwLTE2LjY1LTExQTYsNiwwLDEsMSwxMzMsMTI1YTIyLDIyLDAsMSwxLDM2LjYyLDI0LjI2WiIvPjwvc3ZnPg==');}.icon-clock-clockwise{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMzQsODB2NDQuNmwzNy4wOSwyMi4yNWE2LDYsMCwwLDEtNi4xOCwxMC4zbC00MC0yNEE2LDYsMCwwLDEsMTIyLDEyOFY4MGE2LDYsMCwwLDEsMTIsMFptOTAtMjJhNiw2LDAsMCwwLTYsNlY4Ny4zNmMtNy40OC04LjgzLTE0Ljk0LTE3LjEzLTIzLjUzLTI1LjgzYTk0LDk0LDAsMSwwLTEuOTUsMTM0LjgzLDYsNiwwLDAsMC04LjI0LTguNzJBODIsODIsMCwxLDEsMTg2LDcwYzkuMjQsOS4zNiwxNy4xOCwxOC4zLDI1LjMxLDI4SDE4NGE2LDYsMCwwLDAsMCwxMmg0MGE2LDYsMCwwLDAsNi02VjY0QTYsNiwwLDAsMCwyMjQsNThaIi8+PC9zdmc+');}.icon-shuffle{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzYuMjQsMTc5Ljc2YTYsNiwwLDAsMSwwLDguNDhsLTI0LDI0YTYsNiwwLDAsMS04LjQ4LTguNDhMMjE3LjUyLDE5MEgyMDAuOTRhNzAuMTYsNzAuMTYsMCwwLDEtNTctMjkuMzFsLTQxLjcxLTU4LjRBNTguMTEsNTguMTEsMCwwLDAsNTUuMDYsNzhIMzJhNiw2LDAsMCwxLDAtMTJINTUuMDZhNzAuMTYsNzAuMTYsMCwwLDEsNTcsMjkuMzFsNDEuNzEsNTguNEE1OC4xMSw1OC4xMSwwLDAsMCwyMDAuOTQsMTc4aDE2LjU4bC0xMy43Ni0xMy43NmE2LDYsMCwwLDEsOC40OC04LjQ4Wm0tOTIuMDYtNzQuNDFhNS45MSw1LjkxLDAsMCwwLDMuNDgsMS4xMiw2LDYsMCwwLDAsNC44OS0yLjUxbDEuMTktMS42N0E1OC4xMSw1OC4xMSwwLDAsMSwyMDAuOTQsNzhoMTYuNThMMjAzLjc2LDkxLjc2YTYsNiwwLDEsMCw4LjQ4LDguNDhsMjQtMjRhNiw2LDAsMCwwLDAtOC40OGwtMjQtMjRhNiw2LDAsMCwwLTguNDgsOC40OEwyMTcuNTIsNjZIMjAwLjk0YTcwLjE2LDcwLjE2LDAsMCwwLTU3LDI5LjMxTDE0Mi43OCw5N0E2LDYsMCwwLDAsMTQ0LjE4LDEwNS4zNVptLTMyLjM2LDQ1LjNhNiw2LDAsMCwwLTguMzcsMS4zOWwtMS4xOSwxLjY3QTU4LjExLDU4LjExLDAsMCwxLDU1LjA2LDE3OEgzMmE2LDYsMCwwLDAsMCwxMkg1NS4wNmE3MC4xNiw3MC4xNiwwLDAsMCw1Ny0yOS4zMWwxLjE5LTEuNjdBNiw2LDAsMCwwLDExMS44MiwxNTAuNjVaIi8+PC9zdmc+');}.icon-sort-descending{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik00MiwxMjhhNiw2LDAsMCwxLDYtNmg3MmE2LDYsMCwwLDEsMCwxMkg0OEE2LDYsMCwwLDEsNDIsMTI4Wm02LTU4aDU2YTYsNiwwLDAsMCwwLTEySDQ4YTYsNiwwLDAsMCwwLDEyWk0xODQsMTg2SDQ4YTYsNiwwLDAsMCwwLDEySDE4NGE2LDYsMCwwLDAsMC0xMlpNMjI4LjI0LDgzLjc2bC00MC00MGE2LDYsMCwwLDAtOC40OCwwbC00MCw0MGE2LDYsMCwwLDAsOC40OCw4LjQ4TDE3OCw2Mi40OVYxNDRhNiw2LDAsMCwwLDEyLDBWNjIuNDlsMjkuNzYsMjkuNzVhNiw2LDAsMCwwLDguNDgtOC40OFoiLz48L3N2Zz4=');}.icon-sort-ascending{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMjYsMTI4YTYsNiwwLDAsMS02LDZINDhhNiw2LDAsMCwxLDAtMTJoNzJBNiw2LDAsMCwxLDEyNiwxMjhaTTQ4LDcwSDE4NGE2LDYsMCwwLDAsMC0xMkg0OGE2LDYsMCwwLDAsMCwxMlptNTYsMTE2SDQ4YTYsNiwwLDAsMCwwLDEyaDU2YTYsNiwwLDAsMCwwLTEyWm0xMjQuMjQtMjIuMjRhNiw2LDAsMCwwLTguNDgsMEwxOTAsMTkzLjUxVjExMmE2LDYsMCwwLDAtMTIsMHY4MS41MWwtMjkuNzYtMjkuNzVhNiw2LDAsMCwwLTguNDgsOC40OGw0MCw0MGE2LDYsMCwwLDAsOC40OCwwbDQwLTQwQTYsNiwwLDAsMCwyMjguMjQsMTYzLjc2WiIvPjwvc3ZnPg==');}.icon-arrow-elbow-left-down{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzgsNzJhNiw2LDAsMCwxLTYsNkg5NFYyMDEuNTFsMzcuNzYtMzcuNzVhNiw2LDAsMCwxLDguNDgsOC40OGwtNDgsNDhhNiw2LDAsMCwxLTguNDgsMGwtNDgtNDhhNiw2LDAsMCwxLDguNDgtOC40OEw4MiwyMDEuNTFWNzJhNiw2LDAsMCwxLDYtNkgyMzJBNiw2LDAsMCwxLDIzOCw3MloiLz48L3N2Zz4=');}.icon-arrow-elbow-right-down{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjguMjQsMTY0LjI0bC00OCw0OGE2LDYsMCwwLDEtOC40OCwwbC00OC00OGE2LDYsMCwxLDEsOC40OC04LjQ4TDE3MCwxOTMuNTFWNzBIMzJhNiw2LDAsMCwxLDAtMTJIMTc2YTYsNiwwLDAsMSw2LDZWMTkzLjUxbDM3Ljc2LTM3Ljc1YTYsNiwwLDAsMSw4LjQ4LDguNDhaIi8+PC9zdmc+');}.icon-caret-left{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjQuMjQsMjAzLjc2YTYsNiwwLDEsMS04LjQ4LDguNDhsLTgwLTgwYTYsNiwwLDAsMSwwLTguNDhsODAtODBhNiw2LDAsMCwxLDguNDgsOC40OEw4OC40OSwxMjhaIi8+PC9zdmc+');}.icon-caret-right{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xODAuMjQsMTMyLjI0bC04MCw4MGE2LDYsMCwwLDEtOC40OC04LjQ4TDE2Ny41MSwxMjgsOTEuNzYsNTIuMjRhNiw2LDAsMCwxLDguNDgtOC40OGw4MCw4MEE2LDYsMCwwLDEsMTgwLjI0LDEzMi4yNFoiLz48L3N2Zz4=');}.icon-heart{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNzgsNDJjLTIxLDAtMzkuMjYsOS40Ny01MCwyNS4zNEMxMTcuMjYsNTEuNDcsOTksNDIsNzgsNDJhNjAuMDcsNjAuMDcsMCwwLDAtNjAsNjBjMCwyOS4yLDE4LjIsNTkuNTksNTQuMSw5MC4zMWEzMzQuNjgsMzM0LjY4LDAsMCwwLDUzLjA2LDM3LDYsNiwwLDAsMCw1LjY4LDAsMzM0LjY4LDMzNC42OCwwLDAsMCw1My4wNi0zN0MyMTkuOCwxNjEuNTksMjM4LDEzMS4yLDIzOCwxMDJBNjAuMDcsNjAuMDcsMCwwLDAsMTc4LDQyWk0xMjgsMjE3LjExQzExMS41OSwyMDcuNjQsMzAsMTU3LjcyLDMwLDEwMkE0OC4wNSw0OC4wNSwwLDAsMSw3OCw1NGMyMC4yOCwwLDM3LjMxLDEwLjgzLDQ0LjQ1LDI4LjI3YTYsNiwwLDAsMCwxMS4xLDBDMTQwLjY5LDY0LjgzLDE1Ny43Miw1NCwxNzgsNTRhNDguMDUsNDguMDUsMCwwLDEsNDgsNDhDMjI2LDE1Ny43MiwxNDQuNDEsMjA3LjY0LDEyOCwyMTcuMTFaIi8+PC9zdmc+');}.icon-dots-three{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMzgsMTI4YTEwLDEwLDAsMSwxLTEwLTEwQTEwLDEwLDAsMCwxLDEzOCwxMjhaTTYwLDExOGExMCwxMCwwLDEsMCwxMCwxMEExMCwxMCwwLDAsMCw2MCwxMThabTEzNiwwYTEwLDEwLDAsMSwwLDEwLDEwQTEwLDEwLDAsMCwwLDE5NiwxMThaIi8+PC9zdmc+');}.icon-user-square{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMDgsMzRINDhBMTQsMTQsMCwwLDAsMzQsNDhWMjA4YTE0LDE0LDAsMCwwLDE0LDE0SDIwOGExNCwxNCwwLDAsMCwxNC0xNFY0OEExNCwxNCwwLDAsMCwyMDgsMzRaTTk0LDEyMGEzNCwzNCwwLDEsMSwzNCwzNEEzNCwzNCwwLDAsMSw5NCwxMjBaTTY1Ljc3LDIxMGE2Ni40Myw2Ni40MywwLDAsMSwyMC43Ny0yOS4zNiw2Niw2NiwwLDAsMSw4Mi45MiwwQTY2LjQzLDY2LjQzLDAsMCwxLDE5MC4yMywyMTBaTTIxMCwyMDhhMiwyLDAsMCwxLTIsMmgtNS4xN2E3Ny44NSw3Ny44NSwwLDAsMC00OS4zOC01MS43MSw0Niw0NiwwLDEsMC01MC45LDBBNzcuODUsNzcuODUsMCwwLDAsNTMuMTcsMjEwSDQ4YTIsMiwwLDAsMS0yLTJWNDhhMiwyLDAsMCwxLDItMkgyMDhhMiwyLDAsMCwxLDIsMloiLz48L3N2Zz4=');}.icon-chat-teardrop{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMzIsMjZhOTguMTEsOTguMTEsMCwwLDAtOTgsOTh2ODRhMTQsMTQsMCwwLDAsMTQsMTRoODRhOTgsOTgsMCwwLDAsMC0xOTZabTAsMTg0SDQ4YTIsMiwwLDAsMS0yLTJWMTI0YTg2LDg2LDAsMSwxLDg2LDg2WiIvPjwvc3ZnPg==');}.icon-house-simple{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTcuOSwxMTAuMWwtODAtODBhMTQsMTQsMCwwLDAtMTkuOCwwbC04MCw4MEExMy45MiwxMy45MiwwLDAsMCwzNCwxMjB2OTZhNiw2LDAsMCwwLDYsNkgyMTZhNiw2LDAsMCwwLDYtNlYxMjBBMTMuOTIsMTMuOTIsMCwwLDAsMjE3LjksMTEwLjFaTTIxMCwyMTBINDZWMTIwYTIsMiwwLDAsMSwuNTgtMS40Mmw4MC04MGEyLDIsMCwwLDEsMi44NCwwbDgwLDgwQTIsMiwwLDAsMSwyMTAsMTIwWiIvPjwvc3ZnPg==');}.icon-star-half-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzkuMTgsOTcuMjZBMTYuMzgsMTYuMzgsMCwwLDAsMjI0LjkyLDg2bC01OS00Ljc2TDE0My4xNCwyNi4xNWExNi4zNiwxNi4zNiwwLDAsMC0zMC4yNywwTDkwLjExLDgxLjIzLDMxLjA4LDg2YTE2LjQ2LDE2LjQ2LDAsMCwwLTkuMzcsMjguODZsNDUsMzguODNMNTMsMjExLjc1YTE2LjQsMTYuNCwwLDAsMCwyNC41LDE3LjgyTDEyOCwxOTguNDlsNTAuNTMsMzEuMDhBMTYuNCwxNi40LDAsMCwwLDIwMywyMTEuNzVsLTEzLjc2LTU4LjA3LDQ1LTM4LjgzQTE2LjQzLDE2LjQzLDAsMCwwLDIzOS4xOCw5Ny4yNlptLTE1LjM0LDUuNDctNDguNyw0MmE4LDgsMCwwLDAtMi41Niw3LjkxbDE0Ljg4LDYyLjhhLjM3LjM3LDAsMCwxLS4xNy40OGMtLjE4LjE0LS4yMy4xMS0uMzgsMGwtNTQuNzItMzMuNjVBOCw4LDAsMCwwLDEyOCwxODEuMVYzMmMuMjQsMCwuMjcuMDguMzUuMjZMMTUzLDkxLjg2YTgsOCwwLDAsMCw2Ljc1LDQuOTJsNjMuOTEsNS4xNmMuMTYsMCwuMjUsMCwuMzQuMjlTMjI0LDEwMi42MywyMjMuODQsMTAyLjczWiIvPjwvc3ZnPg==');}.icon-star-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzQuMjksMTE0Ljg1bC00NSwzOC44M0wyMDMsMjExLjc1YTE2LjQsMTYuNCwwLDAsMS0yNC41LDE3LjgyTDEyOCwxOTguNDksNzcuNDcsMjI5LjU3QTE2LjQsMTYuNCwwLDAsMSw1MywyMTEuNzVsMTMuNzYtNTguMDctNDUtMzguODNBMTYuNDYsMTYuNDYsMCwwLDEsMzEuMDgsODZsNTktNC43NiwyMi43Ni01NS4wOGExNi4zNiwxNi4zNiwwLDAsMSwzMC4yNywwbDIyLjc1LDU1LjA4LDU5LDQuNzZhMTYuNDYsMTYuNDYsMCwwLDEsOS4zNywyOC44NloiLz48L3N2Zz4=');}.icon-heart-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDAsMTAyYzAsNzAtMTAzLjc5LDEyNi42Ni0xMDguMjEsMTI5YTgsOCwwLDAsMS03LjU4LDBDMTE5Ljc5LDIyOC42NiwxNiwxNzIsMTYsMTAyQTYyLjA3LDYyLjA3LDAsMCwxLDc4LDQwYzIwLjY1LDAsMzguNzMsOC44OCw1MCwyMy44OUMxMzkuMjcsNDguODgsMTU3LjM1LDQwLDE3OCw0MEE2Mi4wNyw2Mi4wNywwLDAsMSwyNDAsMTAyWiIvPjwvc3ZnPg==');}
\ No newline at end of file
+.icon-google-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsMTI4YTk0LDk0LDAsMSwxLTIxLjQ5LTU5LjgyLDYsNiwwLDEsMS05LjI1LDcuNjRBODIsODIsMCwxLDAsMjA5Ljc4LDEzNEgxMjhhNiw2LDAsMCwxLDAtMTJoODhBNiw2LDAsMCwxLDIyMiwxMjhaIi8+PC9zdmc+');}.icon-apple-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTkuNCwxNjcuODRDMjAxLjcxLDE1NS42OSwxOTgsMTM1LjEyLDE5OCwxMjBjMC0xOC40MiwxMy44Ni0zNC4yOSwyMi4xMi00Mi4xMmE2LDYsMCwwLDAsMC04LjcxQzIwOCw1Ny43LDE4Ny4wNyw1MCwxNjgsNTBhNzAuMjMsNzAuMjMsMCwwLDAtNDAsMTIuNTUsNjkuNiw2OS42LDAsMCwwLTg5LjMxLDguMDhBNzIuNjMsNzIuNjMsMCwwLDAsMTgsMTIzLjM1YTEyNS4xMSwxMjUuMTEsMCwwLDAsMzkuNTMsODguMzNBMzcuODUsMzcuODUsMCwwLDAsODMuNiwyMjJoODcuN0EzNy44MywzNy44MywwLDAsMCwxOTksMjEwLjA3YTEyMi42LDEyMi42LDAsMCwwLDE3LjU0LTI0LjJjNi41NS0xMiw1Ljc3LTEzLjc1LDUtMTUuNDhBNi4wNyw2LjA3LDAsMCwwLDIxOS40LDE2Ny44NFptLTI5LjIzLDM0QTI1LjgyLDI1LjgyLDAsMCwxLDE3MS4zLDIxMEg4My42QTI1Ljg1LDI1Ljg1LDAsMCwxLDY1Ljc4LDIwMywxMTMuMjEsMTEzLjIxLDAsMCwxLDMwLDEyM2E2MC41NSw2MC41NSwwLDAsMSwxNy4yMS00NEE1Ni44Miw1Ni44MiwwLDAsMSw4OCw2MmguODFhNTcuMzUsNTcuMzUsMCwwLDEsMzUuNDQsMTIuNzEsNiw2LDAsMCwwLDcuNSwwQTU3LjM5LDU3LjM5LDAsMCwxLDE2OCw2MmMxMy44OSwwLDI4LjgxLDQuNjgsMzkuMTEsMTItOS40NCwxMC4xNC0yMS4xLDI2LjU5LTIxLjEsNDYsMCwyMy43OCw3LjgxLDQyLjYsMjIuNjYsNTQuNzdBMTA3LjMzLDEwNy4zMywwLDAsMSwxOTAuMTcsMjAxLjg5Wm0tNjAtMTcxLjM5QTM4LDM4LDAsMCwxLDE2NywyaDFhNiw2LDAsMCwxLDAsMTJoLTFhMjYsMjYsMCwwLDAtMjUuMTgsMTkuNSw2LDYsMCwxLDEtMTEuNjItM1oiLz48L3N2Zz4=');}.icon-check-circle{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNzIuMjQsOTkuNzZhNiw2LDAsMCwxLDAsOC40OGwtNTYsNTZhNiw2LDAsMCwxLTguNDgsMGwtMjQtMjRhNiw2LDAsMCwxLDguNDgtOC40OEwxMTIsMTUxLjUxbDUxLjc2LTUxLjc1QTYsNiwwLDAsMSwxNzIuMjQsOTkuNzZaTTIzMCwxMjhBMTAyLDEwMiwwLDEsMSwxMjgsMjYsMTAyLjEyLDEwMi4xMiwwLDAsMSwyMzAsMTI4Wm0tMTIsMGE5MCw5MCwwLDEsMC05MCw5MEE5MC4xLDkwLjEsMCwwLDAsMjE4LDEyOFoiLz48L3N2Zz4=');}.icon-cloud-slash{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik01Mi40NCwzNkE2LDYsMCwwLDAsNDMuNTYsNDRsNDAuMTgsNDQuMmMtLjQ1Ljg3LS45LDEuNzUtMS4zMiwyLjY0QTYyLDYyLDAsMSwwLDcyLDIxNGg4OGE4NS4yMyw4NS4yMywwLDAsMCwzMi4zNS02LjNMMjAzLjU2LDIyMGE2LDYsMCwwLDAsOC44OC04LjA4Wk0xNjAsMjAySDcyYTUwLDUwLDAsMSwxLDUuOS05OS42NEE4Ni4yNSw4Ni4yNSwwLDAsMCw3NCwxMjhhNiw2LDAsMCwwLDEyLDAsNzMuOTIsNzMuOTIsMCwwLDEsNi40NC0zMC4ybDkxLjIyLDEwMC4zNEE3My42NSw3My42NSwwLDAsMSwxNjAsMjAyWm04Ni03NGE4NS44NSw4NS44NSwwLDAsMS0yMS44NSw1Ny4yNyw2LDYsMCwwLDEtNC40NywyLDYsNiwwLDAsMS00LjQ3LTEwLDc0LDc0LDAsMCwwLTk5LTEwOC45Miw2LDYsMCwxLDEtNy4xMS05LjY3QTg2LDg2LDAsMCwxLDI0NiwxMjhaIi8+PC9zdmc+');}.icon-exclamation-mark{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNDIsMjAwYTE0LDE0LDAsMSwxLTE0LTE0QTE0LDE0LDAsMCwxLDE0MiwyMDBabS0xNC00MmE2LDYsMCwwLDAsNi02VjQ4YTYsNiwwLDAsMC0xMiwwVjE1MkE2LDYsMCwwLDAsMTI4LDE1OFoiLz48L3N2Zz4=');}.icon-cloud-arrow-down{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDYsMTI4YTg1LjI3LDg1LjI3LDAsMCwxLTE3LjIsNTEuNiw2LDYsMCwxLDEtOS42LTcuMkE3NCw3NCwwLDEsMCw4NiwxMjhhNiw2LDAsMCwxLTEyLDAsODUuNTQsODUuNTQsMCwwLDEsMy45MS0yNS42NEE1MC42OCw1MC42OCwwLDAsMCw3MiwxMDJhNTAsNTAsMCwwLDAsMCwxMDBIOTZhNiw2LDAsMCwxLDAsMTJINzJBNjIsNjIsMCwxLDEsODIuNDMsOTAuODgsODYsODYsMCwwLDEsMjQ2LDEyOFptLTY2LjI0LDQzLjc2TDE1OCwxOTMuNTFWMTI4YTYsNiwwLDAsMC0xMiwwdjY1LjUxbC0yMS43Ni0yMS43NWE2LDYsMCwwLDAtOC40OCw4LjQ4bDMyLDMyYTYsNiwwLDAsMCw4LjQ4LDBsMzItMzJhNiw2LDAsMCwwLTguNDgtOC40OFoiLz48L3N2Zz4=');}.icon-caret-down{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTIuMjQsMTAwLjI0bC04MCw4MGE2LDYsMCwwLDEtOC40OCwwbC04MC04MGE2LDYsMCwwLDEsOC40OC04LjQ4TDEyOCwxNjcuNTFsNzUuNzYtNzUuNzVhNiw2LDAsMCwxLDguNDgsOC40OFoiLz48L3N2Zz4=');}.icon-cloud-arrow-up{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xODguMjQsMTY0LjI0YTYsNiwwLDAsMS04LjQ4LDBMMTU4LDE0Mi40OVYyMDhhNiw2LDAsMCwxLTEyLDBWMTQyLjQ5bC0yMS43NiwyMS43NWE2LDYsMCwwLDEtOC40OC04LjQ4bDMyLTMyYTYsNiwwLDAsMSw4LjQ4LDBsMzIsMzJBNiw2LDAsMCwxLDE4OC4yNCwxNjQuMjRaTTE2MCw0MkE4Ni4xLDg2LjEsMCwwLDAsODIuNDMsOTAuODgsNjIsNjIsMCwxLDAsNzIsMjE0aDQwYTYsNiwwLDAsMCwwLTEySDcyYTUwLDUwLDAsMCwxLDAtMTAwLDUwLjY4LDUwLjY4LDAsMCwxLDUuOTEuMzZBODUuNTQsODUuNTQsMCwwLDAsNzQsMTI4YTYsNiwwLDAsMCwxMiwwLDc0LDc0LDAsMSwxLDEwMy42LDY3Ljg1LDYsNiwwLDAsMCw0LjgsMTFBODYsODYsMCwwLDAsMTYwLDQyWiIvPjwvc3ZnPg==');}.icon-cloud-check{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDJBODYuMTEsODYuMTEsMCwwLDAsODIuNDMsOTAuODgsNjIsNjIsMCwxLDAsNzIsMjE0aDg4YTg2LDg2LDAsMCwwLDAtMTcyWm0wLDE2MEg3MmE1MCw1MCwwLDAsMSwwLTEwMCw1MC42Nyw1MC42NywwLDAsMSw1LjkxLjM1QTg1LjYxLDg1LjYxLDAsMCwwLDc0LDEyOGE2LDYsMCwwLDAsMTIsMCw3NCw3NCwwLDEsMSw3NCw3NFptMzYuMjQtOTQuMjRhNiw2LDAsMCwxLDAsOC40OGwtNDgsNDhhNiw2LDAsMCwxLTguNDgsMGwtMjQtMjRhNiw2LDAsMCwxLDguNDgtOC40OEwxNDQsMTUxLjUxbDQzLjc2LTQzLjc1QTYsNiwwLDAsMSwxOTYuMjQsMTA3Ljc2WiIvPjwvc3ZnPg==');}.icon-cloud-warning{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDJBODYuMTEsODYuMTEsMCwwLDAsODIuNDMsOTAuODgsNjIsNjIsMCwxLDAsNzIsMjE0aDg4YTg2LDg2LDAsMCwwLDAtMTcyWm0wLDE2MEg3MmE1MCw1MCwwLDAsMSwwLTEwMCw1MC42Nyw1MC42NywwLDAsMSw1LjkxLjM1QTg1LjYxLDg1LjYxLDAsMCwwLDc0LDEyOGE2LDYsMCwwLDAsMTIsMCw3NCw3NCwwLDEsMSw3NCw3NFptLTYtNzRWODhhNiw2LDAsMCwxLDEyLDB2NDBhNiw2LDAsMCwxLTEyLDBabTE2LDM2YTEwLDEwLDAsMSwxLTEwLTEwQTEwLDEwLDAsMCwxLDE3MCwxNjRaIi8+PC9zdmc+');}.icon-syncing{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0iY3VycmVudENvbG9yIiB2aWV3Qm94PSIwIDAgMjU2IDI1NiI+PHBhdGggaWQ9InJlZnJlc2giIGQ9Ik0xNjAuMDQ3IDEyMi44NzVhMzAuNzg0IDMwLjc4NCAwIDAgMC0yMS43NSA4Ljc5N2MtMi44NDIgMy4wMDMtLjQ2NyA0Ljk3MSAxLjMxMiAzLjE1NiAxMS4wNDMtMTAuNzg2IDI4LjcxLTEwLjY4IDM5LjYyNS4yMzRsNy4yMDMgNy4yMDRoLTEyLjg3NWMtMy4zNDcuMDA4LTMuMTY1IDMuODc1IDAgMy44NzVoMTYuMTFjMi4wNjIgMCAyLjU0LTEuNDE4IDIuNTYyLTQuOTdsLjA5NC0xNC45MjFjLjAyLTMuMjktMy40MzctMy4xNjUtMy40MzcgMHYxMi44NmwtNy4yMDMtNy4xODhhMzAuNzY4IDMwLjc2OCAwIDAgMC0yMS42NDEtOS4wNDd6bS0yOS41OTQgMzkuNzk3Yy0yLjA2MiAwLTIuNTI0IDEuNDAyLTIuNTQ3IDQuOTUzbC0uMDk0IDE0LjkyMmMtLjAyIDMuMjkgMy40MjIgMy4xNjQgMy40MjIgMHYtMTIuODZsNy4yMDMgNy4yMDRjMTEuOTU2IDExLjk1NSAzMS4zMTIgMTIuMDY0IDQzLjQwNy4yNSAyLjg0Mi0zLjAwMy40NTEtNC45ODgtMS4zMjgtMy4xNzItMTEuMDQzIDEwLjc4Ni0yOC43MSAxMC42OC0zOS42MjUtLjIzNWwtNy4xODgtNy4yMDNoMTIuODZjMy4zNDctLjAwOCAzLjE2NS0zLjg2IDAtMy44NmgtMTYuMTF6Ii8+PHBhdGggZD0iTTE2MCA0NGE4NC4xMSA4NC4xMSAwIDAgMC03Ni40MSA0OS4xMkE2MC43MSA2MC43MSAwIDAgMCA3MiA5MmE2MCA2MCAwIDAgMCAwIDEyMGg4OGE4NCA4NCAwIDAgMCAwLTE2OFptMCAxNjBINzJhNTIgNTIgMCAxIDEgOC41NS0xMDMuM0E4My42NiA4My42NiAwIDAgMCA3NiAxMjhhNCA0IDAgMCAwIDggMCA3NiA3NiAwIDEgMSA3NiA3NloiLz48L3N2Zz4=');}.icon-cloud-x{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDJBODYuMTEsODYuMTEsMCwwLDAsODIuNDMsOTAuODgsNjIsNjIsMCwxLDAsNzIsMjE0aDg4YTg2LDg2LDAsMCwwLDAtMTcyWm0wLDE2MEg3MmE1MCw1MCwwLDAsMSwwLTEwMCw1MC42Nyw1MC42NywwLDAsMSw1LjkxLjM1QTg1LjYxLDg1LjYxLDAsMCwwLDc0LDEyOGE2LDYsMCwwLDAsMTIsMCw3NCw3NCwwLDEsMSw3NCw3NFptMjguMjQtODUuNzZMMTY4LjQ4LDEzNmwxOS43NiwxOS43NmE2LDYsMCwxLDEtOC40OCw4LjQ4TDE2MCwxNDQuNDhsLTE5Ljc2LDE5Ljc2YTYsNiwwLDAsMS04LjQ4LTguNDhMMTUxLjUyLDEzNmwtMTkuNzYtMTkuNzZhNiw2LDAsMCwxLDguNDgtOC40OEwxNjAsMTI3LjUybDE5Ljc2LTE5Ljc2YTYsNiwwLDAsMSw4LjQ4LDguNDhaIi8+PC9zdmc+');}.icon-arrows-clockwise{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsNDhWOTZhNiw2LDAsMCwxLTYsNkgxNjhhNiw2LDAsMCwxLDAtMTJoMzMuNTJMMTgzLjQ3LDcyYTgxLjUxLDgxLjUxLDAsMCwwLTU3LjUzLTI0aC0uNDZBODEuNSw4MS41LDAsMCwwLDY4LjE5LDcxLjI4YTYsNiwwLDEsMS04LjM4LTguNTgsOTMuMzgsOTMuMzgsMCwwLDEsNjUuNjctMjYuNzZIMTI2YTkzLjQ1LDkzLjQ1LDAsMCwxLDY2LDI3LjUzbDE4LDE4VjQ4YTYsNiwwLDAsMSwxMiwwWk0xODcuODEsMTg0LjcyYTgxLjUsODEuNSwwLDAsMS01Ny4yOSwyMy4zNGgtLjQ2YTgxLjUxLDgxLjUxLDAsMCwxLTU3LjUzLTI0TDU0LjQ4LDE2Nkg4OGE2LDYsMCwwLDAsMC0xMkg0MGE2LDYsMCwwLDAtNiw2djQ4YTYsNiwwLDAsMCwxMiwwVjE3NC40OGwxOCwxOC4wNWE5My40NSw5My40NSwwLDAsMCw2NiwyNy41M2guNTJhOTMuMzgsOTMuMzgsMCwwLDAsNjUuNjctMjYuNzYsNiw2LDAsMSwwLTguMzgtOC41OFoiLz48L3N2Zz4=');}.icon-share-fat{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzYuMjQsMTA3Ljc2bC04MC04MEE2LDYsMCwwLDAsMTQ2LDMyVjc0LjJjLTU0LjQ4LDMuNTktMTIwLjM5LDU1LTEyNy45MywxMjAuNjZhMTAsMTAsMCwwLDAsMTcuMjMsOGgwQzQ2LjU2LDE5MC44NSw4NywxNTIuNiwxNDYsMTUwLjEzVjE5MmE2LDYsMCwwLDAsMTAuMjQsNC4yNGw4MC04MEE2LDYsMCwwLDAsMjM2LjI0LDEwNy43NlpNMTU4LDE3Ny41MlYxNDRhNiw2LDAsMCwwLTYtNmMtMjcuNzMsMC01NC43Niw3LjI1LTgwLjMyLDIxLjU1YTE5My4zOCwxOTMuMzgsMCwwLDAtNDAuODEsMzAuNjVjNC43LTI2LjU2LDIwLjE2LTUyLDQ0LTcyLjI3Qzk4LjQ3LDk3Ljk0LDEyNy4yOSw4NiwxNTIsODZhNiw2LDAsMCwwLDYtNlY0Ni40OUwyMjMuNTEsMTEyWiIvPjwvc3ZnPg==');}.icon-trash{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTYsNTBIMTc0VjQwYTIyLDIyLDAsMCwwLTIyLTIySDEwNEEyMiwyMiwwLDAsMCw4Miw0MFY1MEg0MGE2LDYsMCwwLDAsMCwxMkg1MFYyMDhhMTQsMTQsMCwwLDAsMTQsMTRIMTkyYTE0LDE0LDAsMCwwLDE0LTE0VjYyaDEwYTYsNiwwLDAsMCwwLTEyWk05NCw0MGExMCwxMCwwLDAsMSwxMC0xMGg0OGExMCwxMCwwLDAsMSwxMCwxMFY1MEg5NFpNMTk0LDIwOGEyLDIsMCwwLDEtMiwySDY0YTIsMiwwLDAsMS0yLTJWNjJIMTk0Wk0xMTAsMTA0djY0YTYsNiwwLDAsMS0xMiwwVjEwNGE2LDYsMCwwLDEsMTIsMFptNDgsMHY2NGE2LDYsMCwwLDEtMTIsMFYxMDRhNiw2LDAsMCwxLDEyLDBaIi8+PC9zdmc+');}.icon-star{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzcuMjgsOTcuODdBMTQuMTgsMTQuMTgsMCwwLDAsMjI0Ljc2LDg4bC02MC4yNS00Ljg3LTIzLjIyLTU2LjJhMTQuMzcsMTQuMzcsMCwwLDAtMjYuNTgsMEw5MS40OSw4My4xMSwzMS4yNCw4OGExNC4xOCwxNC4xOCwwLDAsMC0xMi41Miw5Ljg5QTE0LjQzLDE0LjQzLDAsMCwwLDIzLDExMy4zMkw2OSwxNTIuOTNsLTE0LDU5LjI1YTE0LjQsMTQuNCwwLDAsMCw1LjU5LDE1LDE0LjEsMTQuMSwwLDAsMCwxNS45MS42TDEyOCwxOTYuMTJsNTEuNTgsMzEuNzFhMTQuMSwxNC4xLDAsMCwwLDE1LjkxLS42LDE0LjQsMTQuNCwwLDAsMCw1LjU5LTE1bC0xNC01OS4yNUwyMzMsMTEzLjMyQTE0LjQzLDE0LjQzLDAsMCwwLDIzNy4yOCw5Ny44N1ptLTEyLjE0LDYuMzctNDguNjksNDJhNiw2LDAsMCwwLTEuOTIsNS45MmwxNC44OCw2Mi43OWEyLjM1LDIuMzUsMCwwLDEtLjk1LDIuNTcsMi4yNCwyLjI0LDAsMCwxLTIuNi4xTDEzMS4xNCwxODRhNiw2LDAsMCwwLTYuMjgsMEw3MC4xNCwyMTcuNjFhMi4yNCwyLjI0LDAsMCwxLTIuNi0uMSwyLjM1LDIuMzUsMCwwLDEtMS0yLjU3bDE0Ljg4LTYyLjc5YTYsNiwwLDAsMC0xLjkyLTUuOTJsLTQ4LjY5LTQyYTIuMzcsMi4zNywwLDAsMS0uNzMtMi42NSwyLjI4LDIuMjgsMCwwLDEsMi4wNy0xLjY1bDYzLjkyLTUuMTZhNiw2LDAsMCwwLDUuMDYtMy42OWwyNC42My01OS42YTIuMzUsMi4zNSwwLDAsMSw0LjM4LDBsMjQuNjMsNTkuNmE2LDYsMCwwLDAsNS4wNiwzLjY5bDYzLjkyLDUuMTZhMi4yOCwyLjI4LDAsMCwxLDIuMDcsMS42NUEyLjM3LDIuMzcsMCwwLDEsMjI1LjE0LDEwNC4yNFoiLz48L3N2Zz4=');}.icon-alphabetical{--icon:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIGZpbGw9ImN1cnJlbnRDb2xvciIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTgzLjc4IDE4NC4wNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtNTkuNTg2IDY5Ljc0MmMtMC44NTEzIDAtMS40NjEgMC4xOTY1Ni0xLjgzNjYgMC41OTcxOC0wLjM1MDU0IDAuMzc1NTgtMC41Mjk1OCAxLjAyMjktMC41Mjk1OCAxLjk0OTNzMC4xNzkwMyAxLjU5MzcgMC41Mjk1OCAxLjk5NDRjMC4zNzU1OCAwLjM3NTU4IDAuOTg1MjkgMC41NjMzOCAxLjgzNjYgMC41NjMzOGg3LjAxOTdsLTEyLjQyOCAzNC4zNjZoLTIuMTA3Yy0wLjg1MTMgMC0xLjQ2MSAwLjE5NjU2LTEuODM2NiAwLjU5NzE4LTAuMzUwNTQgMC4zNzU1OC0wLjUyOTU3IDEuMDM0MS0wLjUyOTU3IDEuOTYwNiAwIDAuOTI2NDQgMC4xNzkwMyAxLjU4MjUgMC41Mjk1NyAxLjk4MyAwLjM3NTU4IDAuMzc1NTkgMC45ODUyOSAwLjU2MzM4IDEuODM2NiAwLjU2MzM4aDEyLjU1MmMwLjg1MTMgMCAxLjQ1MjItMC4xODc3OSAxLjgwMjgtMC41NjMzOCAwLjM3NTU4LTAuNDAwNjIgMC41NjMzNy0xLjA1NjYgMC41NjMzNy0xLjk4MyAwLTAuOTI2NDUtMC4xODc3OS0xLjU4NS0wLjU2MzM3LTEuOTYwNi0wLjM1MDU0LTAuNDAwNjItMC45NTE0Ny0wLjU5NzE4LTEuODAyOC0wLjU5NzE4aC00LjU1MjFsMy4xMjExLTguOTM0OWgxOC4yMmwzLjA3NiA4LjkzNDloLTUuMDcwNGMtMC44NTEzIDAtMS40NjEgMC4xOTY1Ni0xLjgzNjYgMC41OTcxOC0wLjM1MDU0IDAuMzc1NTgtMC41Mjk1OCAxLjAzNDEtMC41Mjk1OCAxLjk2MDYgMCAwLjkyNjQ0IDAuMTc5MDMgMS41ODI1IDAuNTI5NTggMS45ODMgMC4zNzU1OCAwLjM3NTU5IDAuOTg1MjkgMC41NjMzOCAxLjgzNjYgMC41NjMzOGgxMy4yOTZjMC44NTEzIDAgMS40NTIyLTAuMTg3NzkgMS44MDI4LTAuNTYzMzggMC4zNzU1OC0wLjQwMDYyIDAuNTYzMzctMS4wNTY2IDAuNTYzMzctMS45ODMgMC0wLjkyNjQ1LTAuMTg3NzktMS41ODUtMC41NjMzNy0xLjk2MDYtMC4zNTA1NC0wLjQwMDYyLTAuOTUxNDctMC41OTcxOC0xLjgwMjgtMC41OTcxOGgtMi4yODczbC0xMy4yNjItMzcuMDM2Yy0wLjMwMDQ3LTAuODUxMy0wLjc1OTk0LTEuNDYxLTEuMzg1OS0xLjgzNjYtMC42MDA5My0wLjQwMDYyLTEuNDA5Ny0wLjU5NzE4LTIuNDExMy0wLjU5NzE4em00NC4xNDYgMGMtMC44NTEzIDAtMS40NzIzIDAuMTk2NTYtMS44NDc4IDAuNTk3MTgtMC4zNTA1NSAwLjM3NTU4LTAuNTE4MyAxLjAyMjktMC41MTgzIDEuOTQ5M3YxMS45MWMwIDAuODc2MzMgMC4yMDUzMiAxLjUwNjEgMC42MzA5OCAxLjg4MTcgMC40MjU2NiAwLjM3NTU4IDEuMTU5MyAwLjU2MzM3IDIuMTg1OSAwLjU2MzM3czEuNzQ5LTAuMTg3NzkgMi4xNzQ3LTAuNTYzMzdjMC40MjU2OS0wLjM3NTU4IDAuNjQyMjYtMS4wMDUzIDAuNjQyMjYtMS44ODE3di05LjM1MTdoMTguODUxbC0yNC43NTQgMzUuMzAxYy0wLjM1MDU0IDAuNTI1ODItMC41MTgzMSAxLjA3MTctMC41MTgzMSAxLjYyMjYgMCAwLjkyNjQ1IDAuMTY3NzcgMS41ODI1IDAuNTE4MzEgMS45ODMxIDAuMzc1NTggMC4zNzU1OCAwLjk5NjU0IDAuNTYzMzggMS44NDc4IDAuNTYzMzhoMjguNzY2YzAuODUxMyAwIDEuNDUyMi0wLjE4NzggMS44MDI4LTAuNTYzMzggMC4zNzU1OC0wLjQwMDYyIDAuNTYzMzgtMS4wNTY2IDAuNTYzMzgtMS45ODMxdi0xMi42NjVjMC0wLjg3NjMzLTAuMjE2NTgtMS40OTQ4LTAuNjQyMjUtMS44NzA0LTAuNDI1NjYtMC4zNzU1OC0xLjE0OC0wLjU2MzM4LTIuMTc0Ny0wLjU2MzM4LTEuMDI2NiAwLTEuNzQ5IDAuMTg3NzktMi4xNzQ3IDAuNTYzMzgtMC40MjU2NiAwLjM3NTU4LTAuNjQyMjQgMC45OTQwMi0wLjY0MjI0IDEuODcwNHYxMC4xMDdoLTE5Ljk3OGwyNC45MDEtMzUuNDU5YzAuMjUwMzktMC4zNTA1NCAwLjM3MTgzLTAuODM4ODMgMC4zNzE4My0xLjQ2NDggMC0wLjkyNjQ1LTAuMTg3OC0xLjU3MzctMC41NjMzOC0xLjk0OTMtMC4zNTA1NS0wLjQwMDYyLTAuOTUxNDctMC41OTcxOC0xLjgwMjgtMC41OTcxOHptLTMxLjc1MiA1LjEwNDJoMC43MDk4NWw2Ljk4NTkgMjAuMzE1aC0xNC43MTZ6bS0zNy43MjMtNDkuMTgzYy00LjczNDIgMC04LjYzMTMgMy44OTctOC42MzEzIDguNjMxM3YxMTUuNDdjMCA0LjczNDIgMy44OTcgOC42MzEzIDguNjMxMyA4LjYzMTNoMTE1LjI2YzQuNzM0MiAwIDguNjQyMS0zLjg5NyA4LjY0MjEtOC42MzEzdi0xMTUuNDdjMC00LjczNDItMy45MDgyLTguNjMxMy04LjY0MjEtOC42MzEzem0wIDUuNzI0aDExNS4yNmMxLjY1OCAwIDIuOTA3IDEuMjQ5MSAyLjkwNyAyLjkwNzF2MTE1LjQ3YzAgMS42NTgtMS4yNDkxIDIuOTA3LTIuOTA3IDIuOTA3aC0xMTUuMjZjLTEuNjU4IDAtMi44OTU4LTEuMjQ5MS0yLjg5NTgtMi45MDd2LTExNS40N2MwLTEuNjU4IDEuMjM3OC0yLjkwNzEgMi44OTU4LTIuOTA3MXoiIGZpbGw9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIuNzIxMTQiLz48L3N2Zz4=');}.icon-sun-dim{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMjIsNDBWMzJhNiw2LDAsMCwxLDEyLDB2OGE2LDYsMCwwLDEtMTIsMFptNjgsODhhNjIsNjIsMCwxLDEtNjItNjJBNjIuMDcsNjIuMDcsMCwwLDEsMTkwLDEyOFptLTEyLDBhNTAsNTAsMCwxLDAtNTAsNTBBNTAuMDYsNTAuMDYsMCwwLDAsMTc4LDEyOFpNNTkuNzYsNjguMjRhNiw2LDAsMSwwLDguNDgtOC40OGwtOC04YTYsNiwwLDAsMC04LjQ4LDguNDhabTAsMTE5LjUyLTgsOGE2LDYsMCwxLDAsOC40OCw4LjQ4bDgtOGE2LDYsMCwxLDAtOC40OC04LjQ4Wm0xMzYtMTM2LTgsOGE2LDYsMCwxLDAsOC40OCw4LjQ4bDgtOGE2LDYsMCwwLDAtOC40OC04LjQ4Wm0uNDgsMTM2YTYsNiwwLDAsMC04LjQ4LDguNDhsOCw4YTYsNiwwLDAsMCw4LjQ4LTguNDhaTTQwLDEyMkgzMmE2LDYsMCwwLDAsMCwxMmg4YTYsNiwwLDAsMCwwLTEyWm04OCw4OGE2LDYsMCwwLDAtNiw2djhhNiw2LDAsMCwwLDEyLDB2LThBNiw2LDAsMCwwLDEyOCwyMTBabTk2LTg4aC04YTYsNiwwLDAsMCwwLDEyaDhhNiw2LDAsMCwwLDAtMTJaIi8+PC9zdmc+');}.icon-moon{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzIuMTMsMTQzLjY0YTYsNiwwLDAsMC02LTEuNDlBOTAuMDcsOTAuMDcsMCwwLDEsMTEzLjg2LDI5Ljg1YTYsNiwwLDAsMC03LjQ5LTcuNDhBMTAyLjg4LDEwMi44OCwwLDAsMCw1NC40OCw1OC42OCwxMDIsMTAyLDAsMCwwLDE5Ny4zMiwyMDEuNTJhMTAyLjg4LDEwMi44OCwwLDAsMCwzNi4zMS01MS44OUE2LDYsMCwwLDAsMjMyLjEzLDE0My42NFptLTQyLDQ4LjI5YTkwLDkwLDAsMCwxLTEyNi0xMjZBOTAuOSw5MC45LDAsMCwxLDk5LjY1LDM3LjY2LDEwMi4wNiwxMDIuMDYsMCwwLDAsMjE4LjM0LDE1Ni4zNSw5MC45LDkwLjksMCwwLDEsMTkwLjEsMTkxLjkzWiIvPjwvc3ZnPg==');}.icon-house{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTcuOSwxMTAuMWwtODAtODBhMTQsMTQsMCwwLDAtMTkuOCwwbC04MCw4MEExMy45MiwxMy45MiwwLDAsMCwzNCwxMjB2OTZhNiw2LDAsMCwwLDYsNmg2NGE2LDYsMCwwLDAsNi02VjE1OGgzNnY1OGE2LDYsMCwwLDAsNiw2aDY0YTYsNiwwLDAsMCw2LTZWMTIwQTEzLjkyLDEzLjkyLDAsMCwwLDIxNy45LDExMC4xWk0yMTAsMjEwSDE1OFYxNTJhNiw2LDAsMCwwLTYtNkgxMDRhNiw2LDAsMCwwLTYsNnY1OEg0NlYxMjBhMiwyLDAsMCwxLC41OC0xLjQybDgwLTgwYTIsMiwwLDAsMSwyLjg0LDBsODAsODBBMiwyLDAsMCwxLDIxMCwxMjBaIi8+PC9zdmc+');}.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/base/Login.php b/base/Login.php
new file mode 100644
index 0000000..312cf47
--- /dev/null
+++ b/base/Login.php
@@ -0,0 +1,162 @@
+<?php
+namespace JVBase\base;
+/**
+ * Custom settings for the login page can be set here
+ */
+$jvbLogin = apply_filters('jvb_login', []);
+define('JVB_LOGIN', $jvbLogin);
+
+class Login {
+	protected array $login;
+	protected array  $favourites = [
+		'title'			=> 'Save your favourites',
+		'description'	=> null,
+		'submit'		=> null,
+		'extra'			=> [],
+		'footer'		=> '',
+		'email'			=> '',
+		'successTitle'	=> '',
+		'successDescription' => []
+	];
+	protected array $lostPassword;
+	protected array $resetPassword;
+	protected array $register;
+	protected array $logout;
+	protected array $magic;
+
+	protected array $types = ['login', 'favourites','lostPassword','resetPassword','register','logout', 'magic'];
+
+	public function __construct() {
+		$name = get_bloginfo('name');
+		$this->login = [
+			'title'			=> 'Sign in',
+			'description'	=> [],
+			'submit'		=> 'Sign In',
+			'extra'			=> [],
+			'footer'		=> '',
+			'email'			=> '',
+			'successTitle'	=> '',
+			'successDescription' => []
+		];
+		$this->register = [
+			'title'			=> 'Create Your Account',
+			'description'	=> [],
+			'submit'		=> 'Create Account',
+			'extra'			=> [],
+			'footer'		=> '',
+			'email'			=> '['.$name.'] Finish Creating Your Account',
+			'successTitle'	=> 'Success!',
+			'successDescription' => ['See your email for next steps','(Check your spam folder if you cannot find it after a couple minutes.)']
+		];
+
+		$this->lostPassword = [
+			'title'			=> 'Reset Password',
+			'description'	=> ['Forgot your password?', 'We\'ll send you a reset link to your email'],
+			'submit'		=> 'Send Reset Link',
+			'extra'			=> [],
+			'footer'		=> '',
+			'email'			=> '',
+			'successTitle'	=> 'Success!',
+			'successDescription' => ['Check your email for reset instructions']
+		];
+		$this->resetPassword = [
+			'title'			=> 'Reset Your Password',
+			'description'	=> ['Enter your new password below.'],
+			'submit'		=> 'Change Password',
+			'extra'			=> [],
+			'footer'		=> '',
+			'email'			=> '',
+			'successTitle'	=> '',
+			'successDescription' => []
+		];
+
+		$this->logout = [
+			'title'			=> 'Logged out!',
+			'description'	=> [''],
+			'submit'		=> '',
+			'extra'			=> [],
+			'footer'		=> '',
+			'email'			=> '',
+			'successTitle'	=> '',
+			'successDescription' => []
+		];
+
+		$this->magic = [
+			'title'			=> 'Log In with Magic Link!',
+			'description'	=> ['Enter your email.','You\'ll get an email with a magic link.','Click it, and you\'re logged in!'],
+			'submit'		=> jvbIcon('magic-wand').'Send Magic Link',
+			'extra'			=> [],
+			'footer'		=> '',
+			'email'			=> '',
+			'successTitle'	=> '',
+			'successDescription' => []
+		];
+
+
+	}
+
+	protected function checkType(string $type):bool
+	{
+		return in_array($type, $this->types);
+	}
+	public function setTitle(string $type, string $title):void
+	{
+		if (!$this->checkType($type)) {
+			return;
+		}
+		$this->$type['title'] = $title;
+	}
+	public function getTitle(string $type):string
+	{
+		if (!$this->checkType($type) ||
+		!array_key_exists('title', $this->$type)) {
+			return '';
+		}
+		return $this->$type['title'];
+	}
+
+	public function setDescription(string $type, array|string $description):void
+	{
+		if (!$this->checkType($type)) {
+			return;
+		}
+		$this->$type['description'] = $description;
+	}
+	public function getDescription(string $type):array
+	{
+		if (!$this->checkType($type) ||
+		!array_key_exists('description', $this->$type) ||
+		empty($this->$type['description'])) {
+			return [];
+		}
+		if (is_string($this->$type['description'])) {
+			return [$this->$type['description']];
+		}
+		return $this->$type['description'];
+	}
+	public function setSubmit(string $type, string $submit):void
+	{
+		if (!$this->checkType($type)) {
+			return;
+		}
+		$this->$type['submit'] = $submit;
+	}
+
+	public function getSubmit(string $type):string
+	{
+		if (!$this->checkType($type) ||
+			!array_key_exists('submit', $this->$type) ||
+			empty($this->$type['submit'])) {
+			return $this->login['submit'];
+		}
+		return $this->$type['submit'];
+	}
+
+	public function getLabels(string $type):array
+	{
+		if (!$this->checkType($type)) {
+			return [];
+		}
+		return $this->$type;
+	}
+}
diff --git a/base/Membership.php b/base/Membership.php
new file mode 100644
index 0000000..9032758
--- /dev/null
+++ b/base/Membership.php
@@ -0,0 +1,121 @@
+<?php
+namespace JVBase\base;
+/**
+ * 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
+ *
+ *
+ * Example:
+ * [
+ *    'member_content'  => true,
+ * 		'invitable'		=> 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' ]
+ * ]
+ */
+
+$membership = apply_filters('jvb_membership', [
+	'can_invite' => [],
+]);
+define('JVB_MEMBERSHIP', $membership);
+
+
+class Membership
+{
+	protected bool $member_content = true;
+	protected bool $invitable = false;
+	protected array $can_invite = [];
+	protected bool $notifications = true;
+	protected bool $member_expires = false;
+	protected bool $hide_expired = false;
+	protected bool $clip_expired = false;
+	protected bool $term_approval = false;
+	protected array $can_approve = [];
+	protected bool $forum = true;
+	protected array $member_only = [];
+
+	public function __construct() {
+
+	}
+	public function set(string $property, null|bool|array $value = null):void
+	{
+		if (is_null($value)) {
+			$value = true;
+		}
+		if (property_exists(self::class, $property)) {
+			$this->$property = $value;
+		} else {
+			error_log('[Membership]::set Could not set property '.$property.', it does not exist.');
+		}
+	}
+
+	public function setAll(array $properties):void
+	{
+		foreach ($properties as $property) {
+			if (is_array($property)) {
+				$this->set($property[0], $property[1]);
+			} else {
+				$this->set($property);
+			}
+		}
+	}
+
+	public function has(string $property):bool
+	{
+		return property_exists($this, $property) && $this->$property === true;
+	}
+
+	public function hasAny(array $properties):bool
+	{
+		foreach ($properties as $property) {
+			if ($this->has($property)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public function getInviters():array
+	{
+		return $this->can_invite;
+	}
+	public function canInvite(string $role):bool
+	{
+		return ($this->invitable) && array_key_exists($role, $this->can_invite);
+	}
+	public function getInvitableFor(string $role):array
+	{
+		return array_key_exists($role, $this->can_invite) ? $this->can_invite[$role] : [];
+	}
+
+	public function getApprovers():array
+	{
+		return $this->can_approve;
+	}
+
+	public function canApprove(string $role):bool
+	{
+		return ($this->term_approval) && in_array($role, $this->can_approve);
+	}
+
+
+	public function canSeeForum(string $role):bool
+	{
+		return $this->forum && (empty($this->member_only) || in_array($role, $this->member_only));
+	}
+
+}
diff --git a/base/Site.php b/base/Site.php
new file mode 100644
index 0000000..dfdff4d
--- /dev/null
+++ b/base/Site.php
@@ -0,0 +1,234 @@
+<?php
+namespace JVBase\base;
+
+use JVBase\base\Login;
+
+if (!defined('ABSPATH')) {
+	exit;
+}
+/***********************************************
+ * JVB_SITE defines base site options
+***********************************************/
+class Site {
+	protected static Login $loginConfig;
+	protected static Membership $membershipConfig;
+	protected static Site $instance;
+	protected static string $icons = 'regular';
+
+	/**
+	 * @var bool $is_directory Whether this is a membership directory
+	 */
+	protected static bool $is_directory = false;
+	/**
+	 * @var bool $has_membership Whether this site has membership
+	 */
+	protected static bool $membership = false;
+	/**
+	 * @var bool $dashboard Whether to implement custom dashboard
+	 */
+	protected static bool $dashboard = false;
+	/**
+	 * @var bool $referrals Whether to implement a referral system, with rewards
+	 */
+	protected static bool $referrals = false;
+	/**
+	 * @var bool $magic_link Whether users can login without a password
+	 */
+	protected static bool $magic_link = true;
+	/**
+	 * @var bool $support Whether to implement the support ticket system
+	 */
+	protected static bool $support = false;
+	/**
+	 * @var bool $feed_block Whether to implement the feed block
+	 */
+	protected static bool $feed_block = false;
+
+	/**
+	 * @var bool $is_restaurant Whether this is a restaurant
+	 */
+	protected static bool $is_restaurant = false;
+	/**
+	 * @var bool $limit_hours Whether things should not be able to be sold outside of business hours.
+	 */
+	protected static bool $limit_hours = false;
+	/**
+	 * @var bool $enthusiast Whether to scaffold enthusiasts (users that can interact with and save favourites)
+	 */
+	protected static bool $enthusiast = false;
+	/**
+	 * @var bool Optional flag to allow enthusiasts, but not favourites
+	 */
+	protected static bool $favourites = false;
+
+
+	protected static array $integrations = [
+		'bluesky'	=> false,
+		'cloudflare'=> true,
+		'facebook'	=> false,
+		'instagram'	=> false,
+		'maps'		=> false,
+		'gmb'		=> false,
+		'helcim'	=> false,
+		'postmark'	=> false,
+		'square'	=> false,
+		'umami'		=> true,
+	];
+	private function __construct(){
+
+	}
+
+	public static function getInstance():Site {
+		if (!isset(self::$instance)) {
+			self::$instance = new self();
+			do_action('jvbLoadDefinitions');
+		}
+		return self::$instance;
+	}
+
+	public static function set(string $property, ?string $value = null):void
+	{
+		$property = strtolower($property);
+		if (property_exists(self::class, $property)) {
+			switch ($property) {
+				case 'icons':
+					$allowed = ['thin', 'light', 'regular','bold','fill','duotone'];
+					$value = strtolower($value);
+					if (in_array($value, $allowed)) {
+						self::$icons = $value;
+					} else {
+						error_log('[Site]::set Could not set icons to "'.$value.'", setting to default');
+					}
+					break;
+				default:
+					self::${$property} = true;
+			}
+		} else {
+			error_log('[Site]::set Could not set property: '.$property);
+		}
+	}
+	public static function setAll(array $properties):void
+	{
+		foreach ($properties as $property) {
+			self::set($property);
+		}
+	}
+
+	public static function has(string $property):bool
+	{
+		return property_exists(self::class, $property) && self::${$property} === true;
+	}
+
+	public static function hasAny(array $properties):bool
+	{
+		foreach ($properties as $property) {
+			if (self::has($property)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public static function hasAll(array $properties):bool
+	{
+		foreach ($properties as $property) {
+			if (!self::has($property)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	public static function icon():string
+	{
+		return self::$icons;
+	}
+
+	public static function setIntegration(string $integration, bool $set = true):void
+	{
+		$integration = strtolower($integration);
+		if (array_key_exists($integration, self::$integrations)) {
+			self::$integrations[$integration] = $set;
+		}else {
+			error_log('[Site]::setIntegration Could not set integration: '.$integration);
+		}
+	}
+	public static function setIntegrations(array $integrations, bool $set = true):void
+	{
+		foreach ($integrations as $integration) {
+			self::setIntegration($integration, $set);
+		}
+	}
+	public static function hasIntegration(string $integration):bool
+	{
+		$integration = strtolower($integration);
+		return array_key_exists($integration, self::$integrations);
+	}
+
+	public static function hasAnyIntegration(array $integrations = []):bool
+	{
+		if (empty($integrations)) {
+			$integrations = array_keys(self::$integrations);
+		}
+		foreach ($integrations as $integration) {
+			if (array_key_exists($integration, self::$integrations) && self::$integrations[$integration] === true) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public static function getIntegrations():array
+	{
+		return array_filter(self::$integrations);
+	}
+
+	public static function login():Login|false
+	{
+		if (!isset(self::$loginConfig)) {
+			self::$loginConfig = new Login();
+		}
+		return self::$loginConfig;
+	}
+	public static function membership():Membership|false
+	{
+		if (!self::$membership) {
+			return false;
+		}
+		if (!isset(self::$membershipConfig)) {
+			self::$membershipConfig = new Membership();
+		}
+		return self::$membershipConfig;
+	}
+}
+
+
+$defaults = [
+	'icons'               => 'light',
+	'directory'        => false,        //as in, a membership directory
+	'membership'      => false,
+	'has_map'             => false,			//TODO: migrate to integrations['gmb']
+	'dashboard'           => false,
+	'support'         => false,
+	'feed_block'      => false,
+	'email_notifications' => false,
+	'integrations'  => [
+		'bluesky'     => false,
+		'cloudflare'  => false,
+		'facebook'    => false,
+		'maps'        => false,
+		'gmb'         => false,
+		'helcim'      => false,
+		'instagram'   => false,
+		'square'      => false,
+		'umami'       => false,
+	],
+	'is_restaurant'       => false,
+	'limit_hours'         => false,
+	'enthusiast'          => false,
+	'favourites'          => false,    			//optional flag to allow enthusiasts, but not favourites
+];
+
+$jvb_site = array_merge($defaults, apply_filters('jvb_site', []));
+
+define('JVB_SITE', $jvb_site);
diff --git a/base/_setup.php b/base/_setup.php
index 9a9a9ba..2edffb9 100644
--- a/base/_setup.php
+++ b/base/_setup.php
@@ -1,12 +1,20 @@
 <?php
 
-require(JVB_DIR.'/base/site.php');
+use JVBase\base\Site;
+
+require(JVB_DIR.'/base/Site.php');
+
+
+add_action('plugins_loaded', 'jvbDefineSite', 1);
+function jvbDefineSite() {
+	Site::getInstance();
+}
 require(JVB_DIR.'/base/content.php');
 require(JVB_DIR.'/base/email.php');
 require(JVB_DIR.'/base/taxonomies.php');
 require(JVB_DIR.'/base/users.php');
-require(JVB_DIR.'/base/login.php');
-require(JVB_DIR.'/base/membership.php');
+require(JVB_DIR.'/base/Login.php');
+require(JVB_DIR.'/base/Membership.php');
 require(JVB_DIR.'/base/options.php');
 require(JVB_DIR.'/base/seo.php');
 
diff --git a/base/content.php b/base/content.php
index 15dd130..fb5f436 100644
--- a/base/content.php
+++ b/base/content.php
@@ -18,7 +18,7 @@
  *      - rewrites      = (array) key = associated taxonomy; value = what to append to rewrite base
  */
 $defaults = [];
-if (array_key_exists('has_support', JVB_SITE) && JVB_SITE['has_support'] === true) {
+if (!empty(JVB_SITE) && array_key_exists('has_support', JVB_SITE) && JVB_SITE['has_support'] === true) {
 	$defaults = array_merge($defaults, jvb_support_post_type());
 }
 $content = array_merge($defaults, apply_filters('jvb_content', []));
diff --git a/base/login.php b/base/login.php
deleted file mode 100644
index 9c09001..0000000
--- a/base/login.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Custom settings for the login page can be set here
- */
-$jvbLogin = apply_filters('jvb_login', []);
-define('JVB_LOGIN', $jvbLogin);
diff --git a/base/membership.php b/base/membership.php
deleted file mode 100644
index 2ed3fcb..0000000
--- a/base/membership.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * 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
- *
- *
- * Example:
- * [
- *    'member_content'  => true,
- * 		'invitable'		=> 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' ]
- * ]
- */
-
-$membership = apply_filters('jvb_membership', [
-	'can_invite' => [],
-]);
-define('JVB_MEMBERSHIP', $membership);
diff --git a/base/seo.php b/base/seo.php
index 492e1a3..5e12d47 100644
--- a/base/seo.php
+++ b/base/seo.php
@@ -124,7 +124,7 @@
 			],
 			default => [],
 		};
-		error_log('Getting defaults for: '.BASE.ucfirst($type).ucfirst($format).'Default');
+
 		$result = apply_filters(BASE.ucfirst($type).ucfirst($format).'Default', $defaults);
 		if ($format === 'reference' && empty($result)) {
 			$full = self::getDefault($type, 'schema');
diff --git a/base/site.php b/base/site.php
deleted file mode 100644
index ed68c67..0000000
--- a/base/site.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/***********************************************
- * JVB_SITE defines base site options
-***********************************************/
-
-$defaults = [
-	'icons'               => 'light',
-	'directory'        => false,        //as in, a membership directory
-	'membership'      => false,
-	'has_map'             => false,			//TODO: migrate to integrations['gmb']
-	'dashboard'           => false,
-	'support'         => false,
-	'feed_block'      => false,
-	'email_notifications' => false,
-	'integrations'  => [
-		'bluesky'     => false,
-		'cloudflare'  => false,
-		'facebook'    => false,
-		'maps'        => false,
-		'gmb'         => false,
-		'helcim'      => false,
-		'instagram'   => false,
-		'square'      => false,
-		'umami'       => false,
-	],
-	'is_restaurant'       => false,
-	'limit_hours'         => false,
-	'enthusiast'          => false,
-	'favourites'          => false,    			//optional flag to allow enthusiasts, but not favourites
-];
-
-$jvb_site = array_merge($defaults, apply_filters('jvb_site', []));
-
-define('JVB_SITE', $jvb_site);
diff --git a/checks.php b/checks.php
index 60474c3..d92ef49 100644
--- a/checks.php
+++ b/checks.php
@@ -1,8 +1,8 @@
 <?php
 
+use JVBase\base\Site;
 use JVBase\managers\Cache;
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
 
 if (!defined('ABSPATH')) {
 	exit;
@@ -14,7 +14,9 @@
 
 function jvbUserIsVerified():bool
 {
-    return !(Features::forMembership()->has('member_verified')) || current_user_can('skip_moderation');
+	$membership = Site::membership();
+
+    return !($membership && $membership->has('member_verified')) || current_user_can('skip_moderation');
 }
 
 function jvbUserTypes():array
diff --git a/inc/blocks/FeedBlock.php b/inc/blocks/FeedBlock.php
index 0a14374..fba0d1c 100644
--- a/inc/blocks/FeedBlock.php
+++ b/inc/blocks/FeedBlock.php
@@ -3,7 +3,7 @@
 
 use JVBase\managers\Cache;
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use JVBase\forms\TaxonomySelector;
 use WP_Block;
 
@@ -235,7 +235,7 @@
 			<?php } ?>
 
 
-					<?php if (Features::forSite()->has('favourites') && is_user_logged_in()) : ?>
+					<?php if (Site::has('favourites') && is_user_logged_in()) : ?>
 						<input type="checkbox" id="favourites" class="btn" name="favourites" value="on"
 							   data-filter="favourites">
 						<label for="favourites" title="Show Favourites" class="row">
@@ -416,7 +416,7 @@
 	protected function getFavouritesButton(string $content):string
 	{
 		$registrar = Registrar::getInstance($content);
-		if (!$registrar || !Features::forSite()->has('favourites') || !$registrar->hasFeature('favouritable')) {
+		if (!$registrar || !Site::has('favourites') || !$registrar->hasFeature('favouritable')) {
 			return '';
 		}
 		return '<button class="favourite" type="button" title="Add to favourites" data-action="favourite">
@@ -427,7 +427,7 @@
 	protected function getUpvotesButton(string $content):string
 	{
 		$registrar = Registrar::getInstance($content);
-		if (!Features::forSite()->has('karma') || !$registrar || !$registrar->hasFeature('karma')){
+		if (!Site::has('karma') || !$registrar || !$registrar->hasFeature('karma')){
 			return '';
 		}
 		return '<div class="karma row">
diff --git a/inc/blocks/FormBlock.php b/inc/blocks/FormBlock.php
index bfe7840..a48519a 100644
--- a/inc/blocks/FormBlock.php
+++ b/inc/blocks/FormBlock.php
@@ -3,7 +3,7 @@
 
 use JVBase\managers\Cache;
 use JVBase\meta\Form;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 
 if (!defined('ABSPATH')) {
 	exit; // Exit if accessed directly
@@ -58,7 +58,7 @@
 		}
 
 		// Enqueue Turnstile if needed
-		if (Features::forSite()->hasIntegration('cloudflare')) {
+		if (Site::hasIntegration('cloudflare')) {
 			$cloudflare = JVB()->connect('cloudflare');
 			if ($cloudflare->isSetUp()) {
 				$cloudflare->enqueueTurnstileScripts();
@@ -401,7 +401,7 @@
 	 */
 	protected function renderTurnstile(): void
 	{
-		if (!Features::hasIntegration('cloudflare')) {
+		if (!Site::hasIntegration('cloudflare')) {
 			return;
 		}
 
diff --git a/inc/blocks/RegisterBlocks.php b/inc/blocks/RegisterBlocks.php
index f4360f3..e9811ff 100644
--- a/inc/blocks/RegisterBlocks.php
+++ b/inc/blocks/RegisterBlocks.php
@@ -1,13 +1,13 @@
 <?php
 
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 
 if (!defined('ABSPATH')) {
 	exit;
 }
 //Blocks
-if (Features::forSite()->has('feed_block')) {
+if (Site::has('feed_block')) {
     require(JVB_DIR . '/build/feed/render.php');
 }
 require(JVB_DIR . '/build/list/render.php');
@@ -18,17 +18,17 @@
 	error_log('Has Glossary Type');
 	require(JVB_DIR . '/build/glossary/render.php');
 }
-if (Features::forSite()->has('faq')) {
+if (Site::has('faq')) {
 	require(JVB_DIR . '/build/faq/render.php');
 }
-if (Features::hasIntegration('gmb')) {
+if (Site::hasIntegration('gmb')) {
 	require(JVB_DIR . '/build/gmbreviews/render.php');
 }
 
 
 function jvbRegisterBlocks():void
 {
-	if (Features::hasIntegration('gmb')) {
+	if (Site::hasIntegration('gmb')) {
 		register_block_type(JVB_DIR . '/build/gmb-reviews');
 	}
 //    if (jvbSiteUsesFeedBlock()) {
diff --git a/inc/blocks/TimelineBlock.php b/inc/blocks/TimelineBlock.php
index 849ce91..271dd7e 100644
--- a/inc/blocks/TimelineBlock.php
+++ b/inc/blocks/TimelineBlock.php
@@ -4,7 +4,7 @@
 use JVBase\managers\Cache;
 use JVBase\meta\Meta;
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use WP_Block;
 
 if (!defined('ABSPATH')) {
diff --git a/inc/blocks/_setup.php b/inc/blocks/_setup.php
index 25fc594..c5b6d1d 100644
--- a/inc/blocks/_setup.php
+++ b/inc/blocks/_setup.php
@@ -1,22 +1,22 @@
 <?php
 
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 
 //require(JVB_DIR . '/inc/blocks/RegisterBlocks.php');
 require(JVB_DIR . '/inc/blocks/CustomBlocks.php');
 
-if (Features::forSite()->has('feed_block')) {
+if (Site::has('feed_block')) {
 	require(JVB_DIR . '/inc/blocks/FeedBlock.php');
 	new JVBase\blocks\FeedBlock();
 }
 
-if (Features::forSite()->has('is_restaurant')) {
+if (Site::has('is_restaurant')) {
 	require(JVB_DIR . '/inc/blocks/MenuBlock.php');
 	new JVBase\blocks\MenuBlock();
 }
 
-if (Features::forSite()->has('faq')) {
+if (Site::has('faq')) {
 	require(JVB_DIR . '/inc/blocks/FAQBlock.php');
 	new JVBase\blocks\FAQBlock();
 }
@@ -53,12 +53,12 @@
 }
 add_filter('block_categories_all', 'jvbRegisterBlockCategory');
 
-if (Features::hasIntegration('gmb')) {
+if (Site::hasIntegration('gmb')) {
 	require(JVB_DIR . '/build/gmbreviews/render.php');
 }
 function jvbRegisterBlocks():void
 {
-	if (Features::hasIntegration('gmb')) {
+	if (Site::hasIntegration('gmb')) {
 		register_block_type(
 			JVB_DIR . '/build/gmbreviews',
 		[
diff --git a/inc/helpers/ui.php b/inc/helpers/ui.php
index 6928d43..c9a5c1f 100644
--- a/inc/helpers/ui.php
+++ b/inc/helpers/ui.php
@@ -1,7 +1,7 @@
 <?php
 
 use JVBase\meta\Form;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use JVBase\utility\Image;
 
 if (!defined('ABSPATH')) {
@@ -13,7 +13,7 @@
 
 function jvbClientQueue():void
 {
-    if (!Features::forSite()->has('dashboard') || !is_user_logged_in()) {
+    if (!Site::has('dashboard') || !is_user_logged_in()) {
         return;
     }
 
@@ -111,7 +111,8 @@
  */
 function jvbNotificationMenu():string
 {
-    if (Features::forMembership()->has('notifications') && is_user_logged_in()) {
+	$membership = Site::membership();
+    if ($membership && $membership->has('notifications') && is_user_logged_in()) {
 
         ob_start();
         ?>
@@ -158,7 +159,7 @@
  */
 function jvbHelpMenu():string
 {
-	if (!Features::forSite()->has('helpMenu')) {
+	if (!Site::has('helpMenu')) {
 		return '';
 	}
     $out = get_option(BASE.'help_menu');
diff --git a/inc/integrations/_setup.php b/inc/integrations/_setup.php
index e3a5d39..b9ed54e 100644
--- a/inc/integrations/_setup.php
+++ b/inc/integrations/_setup.php
@@ -1,47 +1,47 @@
 <?php
-use JVBase\utility\Features;
+use JVBase\base\Site;
 require(JVB_DIR . '/inc/integrations/Integrations.php');
 require(JVB_DIR . '/inc/integrations/CredentialsManager.php');
 
-if (Features::hasIntegration('maps')) {
+if (Site::hasIntegration('maps')) {
 	require(JVB_DIR . '/inc/integrations/GoogleMaps.php');
 }
 
-if (Features::hasIntegration('umami')) {
+if (Site::hasIntegration('umami')) {
 	require(JVB_DIR . '/inc/integrations/Umami.php');
 }
-if (Features::hasIntegration('cloudflare')) {
+if (Site::hasIntegration('cloudflare')) {
 	require(JVB_DIR . '/inc/integrations/Cloudflare.php');
 }
 
-if (Features::hasIntegration('square')) {
+if (Site::hasIntegration('square')) {
 	require(JVB_DIR . '/inc/integrations/Square.php');
 }
 
-if (Features::hasIntegration('facebook')) {
+if (Site::hasIntegration('facebook')) {
 	require(JVB_DIR . '/inc/integrations/Facebook.php');
 }
 
-if (Features::hasIntegration('instagram')) {
-	if (!Features::hasIntegration('facebook')) {
+if (Site::hasIntegration('instagram')) {
+	if (!Site::hasIntegration('facebook')) {
 		require(JVB_DIR . '/inc/integrations/Facebook.php');
 	}
 	require(JVB_DIR . '/inc/integrations/Instagram.php');
 }
 
-if (Features::hasIntegration('bluesky')) {
+if (Site::hasIntegration('bluesky')) {
 	require(JVB_DIR . '/inc/integrations/BlueSky.php');
 }
 
-if (Features::hasIntegration('gmb')) {
+if (Site::hasIntegration('gmb')) {
 	require(JVB_DIR . '/inc/integrations/GoogleMyBusiness.php');
 }
 
-if (Features::hasIntegration('postmark')) {
+if (Site::hasIntegration('postmark')) {
 	require(JVB_DIR . '/inc/integrations/PostMark.php');
 }
 
 
-if (Features::hasIntegration('helcim')) {
+if (Site::hasIntegration('helcim')) {
 	require(JVB_DIR . '/inc/integrations/Helcim.php');
 }
diff --git a/inc/managers/AdminPages.php b/inc/managers/AdminPages.php
index a584458..03d4c4d 100644
--- a/inc/managers/AdminPages.php
+++ b/inc/managers/AdminPages.php
@@ -2,9 +2,7 @@
 namespace JVBase\managers;
 
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
-use JVBase\rest\Route;
-use JVBase\rest\PermissionHandler;
+use JVBase\base\Site;
 use WP_REST_Response;
 
 if (!defined('ABSPATH')) {
diff --git a/inc/managers/CustomTable.php b/inc/managers/CustomTable.php
index e344576..cb458ce 100644
--- a/inc/managers/CustomTable.php
+++ b/inc/managers/CustomTable.php
@@ -184,7 +184,7 @@
 				if (is_array($key)) {
 					$value = $key['value'];
 					// Ensure value is wrapped in parentheses
-					if (!str_starts_with(trim($value), '(')) {
+					if (!str_contains(trim($value), '(`')) {
 						$value = '(`' . $value . '`)';
 					}
 					$parts[] = $key['key'] . ' KEY ' . $value;
diff --git a/inc/managers/DashboardManager.php b/inc/managers/DashboardManager.php
index a6fea2d..68f7fe3 100644
--- a/inc/managers/DashboardManager.php
+++ b/inc/managers/DashboardManager.php
@@ -2,10 +2,9 @@
 namespace JVBase\managers;
 
 use JVBase\forms\TaxonomySelector;
-use JVBase\managers\CRUD;
+use JVBase\base\Site;
 use JVBase\meta\Form;
-use JVBase\meta\Meta;
-use JVBase\registrar\Registrar;use JVBase\utility\Features;
+use JVBase\registrar\Registrar;
 use JVBase\ui\Navigation;
 use WP_User;
 
@@ -400,11 +399,11 @@
 //		if ($page === 'integrations' || in_array($page, $integrationSlugs)) {
 //			// Check integration access
 //			if ($page === 'integrations') {
-//				if (!Features::hasAnyIntegration('user', $this->role)) {
+//				if (!Site::hasAnyIntegration('user', $this->role)) {
 //					$this->redirectToDashboard();
 //				}
 //			} else {
-//				if (!Features::hasIntegration($page, 'user', $this->role)) {
+//				if (!Site::hasIntegration($page, 'user', $this->role)) {
 //					$this->redirectToDashboard();
 //				}
 //			}
@@ -530,7 +529,7 @@
 
             switch ($page) {
                 case 'notifications':
-					if (Features::forSite()->has('notifications')) {
+					if (Site::has('notifications')) {
 						wp_enqueue_script('jvb-notification-manager');
 					}
                     break;
@@ -570,7 +569,7 @@
 					wp_enqueue_script('jvb-crud');
 					break;
             }
-			if (Features::forSite()->has('favourites')) {
+			if (Site::has('favourites')) {
 				 wp_enqueue_script('jvb-favourites');
 				wp_localize_script('jvb-favourites-manager', 'favouritesSettings', [
 					'strings' => [
@@ -586,7 +585,7 @@
 
 			wp_enqueue_script('jvb-creator');
 
-			if (Features::forSite()->has('forum')) {
+			if (Site::has('forum')) {
 			wp_enqueue_script('jvb-news');
 			}
 			do_action('jvbDashScripts', $page);
@@ -867,7 +866,7 @@
 			return $content;
 		}
 
-		if (Features::forSite()->has('referrals')) {
+		if (Site::has('referrals')) {
 			$whatever = JVB()->referrals()->getReferralWelcomeMessage($this->user->ID);
 			if (!empty($whatever)) {
 				return $whatever;
@@ -981,7 +980,7 @@
 		$connection = (array_key_exists($page, $map)) ? $map[$page] : $page;
 		if ($connection !== 'integrations') {
 
-			$userID = (Features::forSite()->has('has_membership')) ? $this->user->ID : null;
+			$userID = (Site::has('has_membership')) ? $this->user->ID : null;
 			$integration = JVB()->connect($connection, $userID);
 
 			echo '<h1>Managing '.$integration->title.'</h1>';
@@ -1258,27 +1257,27 @@
 			$pages = [];
 			$pages[] = 'SEO';
 			// Add feature-dependent pages (non-config)
-			if (Features::forSite()->has('referrals')) {
+			if (Site::has('referrals')) {
 				$pages[] = 'Referrals';
 			}
-
-			if (Features::forMembership()->has('can_invite')) {
+			$membership = Site::membership();
+			if ($membership && $membership->has('can_invite')) {
 				$pages[] = 'Invites';
 			}
 
-			if (Features::forMembership()->has('term_approval')) {
+			if ($membership && $membership->has('term_approval')) {
 				$pages[] = 'Approvals';
 			}
 
-			if (Features::forMembership()->has('forum')) {
+			if ($membership && $membership->has('forum')) {
 				$pages[] = 'News';
 			}
 
-			if (Features::forMembership()->has('member_content')) {
+			if ($membership && $membership->has('member_content')) {
 				$pages[] = 'Metrics';
 			}
 
-			if (Features::forSite()->has('favourites')) {
+			if (Site::has('favourites')) {
 				$pages[] = 'Favourites';
 			}
 
@@ -1286,15 +1285,15 @@
 				$pages[] = 'Karmic Score';
 			}
 
-			if (Features::forSite()->has('notifications')) {
+			if (Site::has('notifications')) {
 				$pages[] = 'Notifications';
 			}
 
-			if (Features::forSite()->has('support')) {
+			if (Site::has('support')) {
 				$pages[] = 'Support';
 			}
 
-			if (Features::hasAnyIntegration()) {
+			if (Site::hasAnyIntegration()) {
 				$pages[] = 'Integrations';
 			}
 
@@ -1324,21 +1323,6 @@
 		return $pages;
 	}
 
-	/**
-	 * Get pages available to a specific role
-	 * @param string $role The role slug (with or without BASE prefix)
-	 * @return array
-	 */
-	protected function getRolePages(string $role):array
-	{
-		$role = jvbNoBase($role);
-
-		if (!Registrar::getInstance($role)){
-			return [];
-		}
-
-		return Features::forUser($role)->getDashboardPages();
-	}
 
 	/**
 	 * Get pages that a specific user is allowed to access
@@ -1402,7 +1386,7 @@
 					switch ($slug) {
 						case 'Integrations':
 							foreach($roles as $role) {
-								if (Features::hasAnyIntegration('user', $role)) {
+								if (Registrar::getInstance($role)->hasAnyIntegrations()) {
 									$remove = false;
 								}
 							}
@@ -1423,7 +1407,7 @@
 							break;
 						case 'Approvals':
 							$canApprove = false;
-							if (Features::forMembership()->has('term_approval')) {
+							if ($membership && $membership->has('term_approval')) {
 								if (array_key_exists('can_approve', JVB_MEMBERSHIP)) {
 									foreach ($roles as $role) {
 										if (in_array($role, JVB_MEMBERSHIP['can_approve'])) {
@@ -1454,14 +1438,14 @@
 							break;
 						case 'metrics':
 							foreach ($roles as $role) {
-								if (!empty(Features::forUser($role)->getCreatableContent())) {
+								if (!empty(Registrar::getInstance($role)?->getCreatable())) {
 									$remove = false;
 								}
 							}
 							break;
 						case 'karmic-score':
 							foreach ($roles as $role) {
-								$contents = Features::forUser($role)->getCreatableContent();
+								$contents = Registrar::getInstance($role)?->getCreatable();
 								if (!empty($contents)) {
 									$hasKarma = Registrar::getFeatured('karma');
 									$remove = empty(array_intersect($contents, $hasKarma));
@@ -1510,7 +1494,7 @@
 
 		$creatable = [];
 		foreach ($roles as $role) {
-			$roleCreatable = Features::forUser($role)->getCreatableContent();
+			$roleCreatable = Registrar::getInstance($role)?->getCreatable();
 			$creatable = array_merge($creatable, $roleCreatable);
 		}
 
diff --git a/inc/managers/DirectoryManager.php b/inc/managers/DirectoryManager.php
index f336d60..65c8559 100644
--- a/inc/managers/DirectoryManager.php
+++ b/inc/managers/DirectoryManager.php
@@ -6,6 +6,7 @@
 }
 
 use JVBase\registrar\Registrar;
+use JVBase\base\Site;
 use WP_Block;
 use WP_Query;
 
@@ -186,7 +187,7 @@
 			}
 		}
 
-//        if (Features::forSite()->has('has_map')) {
+//        if (Site::has('has_map')) {
 //            $ID = wp_insert_post([
 //                'post_type'     => BASE.'directory',
 //                'post_title'    => 'Map',
diff --git a/inc/managers/ErrorHandler.php b/inc/managers/ErrorHandler.php
index da34d19..9aefef1 100644
--- a/inc/managers/ErrorHandler.php
+++ b/inc/managers/ErrorHandler.php
@@ -12,8 +12,6 @@
 
 class ErrorHandler
 {
-    protected object $wpdb;
-	protected string $tableName;
     protected int $notification_threshold = 5; // Critical errors within 1 hour
 
     protected array $error_levels = [
@@ -100,7 +98,7 @@
         }
 
         try {
-            $table = $this->tableName;
+
             // Extract error data
             $component = sanitize_text_field($data['component'] ?? '');
             $message = sanitize_textarea_field($data['message'] ?? '');
@@ -126,8 +124,7 @@
             }
 
             // Insert into database
-            $result = $this->wpdb->insert(
-                $table,
+            $result = $this->table->insert(
                 [
                     'error_type' => $error_type,
                     'component' => $component,
@@ -136,24 +133,15 @@
                     'severity' => $severity,
                     'user_id' => get_current_user_id(),
                     'created_at' => current_time('mysql')
-                ],
-                [
-                    '%s', // error_type
-                    '%s', // component
-                    '%s', // message
-                    '%s', // context (JSON)
-                    '%s', // severity
-                    '%d', // user_id
-                    '%s'  // created_at
                 ]
             );
 
-            if ($result === false) {
+            if (!$result) {
                 // If insert fails, log to PHP error log as fallback
-                error_log("[ErrorHandler] Database insert failed: " . $this->wpdb->last_error);
+                error_log("[ErrorHandler] Database insert failed: " . $$this->table->getLastError());
                 return [
 					'success'	=> false,
-					'message'	=> "[ErrorHandler] Database insert failed: " . $this->wpdb->last_error
+					'message'	=> "[ErrorHandler] Database insert failed: " . $$this->table->getLastError()
 				];
             }
 
@@ -187,19 +175,15 @@
     protected function checkErrorThreshold(string $error_type, string $component)
     {
         // Get count of similar critical errors in the last hour
-        $count = $this->wpdb->get_var($this->wpdb->prepare(
-            "SELECT COUNT(*)
-         FROM {$this->tableName}
-         WHERE error_type = %s
-         AND component = %s
-         AND severity = 'critical'
-         AND created_at > DATE_SUB(NOW(), INTERVAL 1 HOUR)",
-            $error_type,
-            $component
-        ));
+		$count = $this->table->count([
+			'error_type' => $error_type,
+			'component' => $component,
+			'severity' => $this->error_levels[$error_type],
+			'created_at' => ['>','DATE_SUB(NOW(), INTERVAL 1 HOUR)']
+		]);
 
         // If threshold reached, take additional actions (e.g., notify developers)
-        if ((int)$count >= $this->notification_threshold) {
+        if ($count >= $this->notification_threshold) {
             // You could send an urgent notification, Slack message, etc.
             $admin_email = get_option('admin_email');
             $subject = "[URGENT] Error Threshold Exceeded for {$component}";
@@ -221,8 +205,6 @@
 	public function log(string $component, string $message, array $context = [], string $severity = 'error'): array
 	{
 		try {
-			$table = $this->wpdb->prefix . BASE . 'error_log';
-
 			// Validate severity
 			if (!array_key_exists($severity, $this->error_levels)) {
 				$severity = 'error';
@@ -239,8 +221,7 @@
 			$source = isset($context['source']) ? $context['source'] :
 				(isset($context['url']) ? 'frontend' : 'backend');
 
-			$result = $this->wpdb->insert(
-				$table,
+			$result = $this->table->insert(
 				[
 					'error_type' => $error_type,
 					'component' => $component,
@@ -253,20 +234,18 @@
 					'user_was_logged_in' => $user_was_logged_in ? 1 : 0,
 					'source' => $source,
 					'created_at' => current_time('mysql')
-				],
-				['%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d', '%d', '%s', '%s']
-			);
+				]);
 
-			if ($result === false) {
-				error_log("[ErrorHandler] Database insert failed: " . $this->wpdb->last_error);
-				return ['success' => false, 'message' => $this->wpdb->last_error];
+			if (!$result) {
+				error_log("[ErrorHandler] Database insert failed: " . $this->table->getLastError());
+				return ['success' => false, 'message' => $this->table->getLastError()];
 			}
 
 			if ($severity === 'critical') {
 				$this->checkErrorThreshold($error_type, $component);
 			}
 
-			return ['success' => true, 'id' => $this->wpdb->insert_id];
+			return ['success' => true, 'id' => $result];
 
 		} catch (Exception $e) {
 			error_log("[ErrorHandler Exception] " . $e->getMessage());
@@ -315,8 +294,6 @@
      */
 	public function gatherErrorSummary(?string $start_date = null, ?string $end_date = null): array
 	{
-		$table = $this->wpdb->prefix . BASE . 'error_log';
-
 		if (!$start_date) {
 			$start_date = gmdate('Y-m-d 00:00:00', strtotime('-1 day'));
 		}
@@ -325,72 +302,14 @@
 		}
 
 		// Most frequent error patterns (deduplicated by component/method/message)
-		$frequent = $this->wpdb->get_results($this->wpdb->prepare(
-			"SELECT
-            component,
-            method,
-            error_type,
-            message,
-            severity,
-            source,
-            COUNT(*) as count,
-            SUM(CASE WHEN user_was_logged_in = 1 THEN 1 ELSE 0 END) as logged_in_count,
-            SUM(CASE WHEN user_was_logged_in = 0 THEN 1 ELSE 0 END) as logged_out_count,
-            MIN(created_at) as first_seen,
-            MAX(created_at) as last_seen
-         FROM {$table}
-         WHERE created_at BETWEEN %s AND %s
-         GROUP BY component, method, error_type, message, severity, source
-         ORDER BY count DESC, severity DESC
-         LIMIT 10",
-			$start_date,
-			$end_date
-		));
-
-		// Critical errors
-		$critical = $this->wpdb->get_results($this->wpdb->prepare(
-			"SELECT
-            component,
-            method,
-            error_type,
-            message,
-            source,
-            COUNT(*) as count,
-            SUM(CASE WHEN user_was_logged_in = 1 THEN 1 ELSE 0 END) as logged_in_count,
-            SUM(CASE WHEN user_was_logged_in = 0 THEN 1 ELSE 0 END) as logged_out_count,
-            MIN(created_at) as first_seen,
-            MAX(created_at) as last_seen
-         FROM {$table}
-         WHERE created_at BETWEEN %s AND %s AND severity = 'critical'
-         GROUP BY component, method, error_type, message, source
-         ORDER BY count DESC
-         LIMIT 5",
-			$start_date,
-			$end_date
-		));
-
-		// Overall stats
-		$stats = $this->wpdb->get_row($this->wpdb->prepare(
-			"SELECT
-            COUNT(*) as total_errors,
-            COUNT(DISTINCT CONCAT(component, '-', COALESCE(method, ''), '-', error_type)) as unique_error_types,
-            SUM(CASE WHEN user_was_logged_in = 1 THEN 1 ELSE 0 END) as logged_in_errors,
-            SUM(CASE WHEN user_was_logged_in = 0 THEN 1 ELSE 0 END) as logged_out_errors,
-            SUM(CASE WHEN source = 'frontend' THEN 1 ELSE 0 END) as frontend_errors,
-            SUM(CASE WHEN source = 'backend' THEN 1 ELSE 0 END) as backend_errors,
-            SUM(CASE WHEN severity = 'critical' THEN 1 ELSE 0 END) as critical_count,
-            SUM(CASE WHEN severity = 'error' THEN 1 ELSE 0 END) as error_count,
-            SUM(CASE WHEN severity = 'warning' THEN 1 ELSE 0 END) as warning_count
-         FROM {$table}
-         WHERE created_at BETWEEN %s AND %s",
-			$start_date,
-			$end_date
-		));
+		$frequent = $this->table->getMany([
+			'where' => [
+				'created_at'	=> ['BETWEEN', "{$start_date} AND {$end_date}"]
+			]
+		]);
 
 		return [
-			'frequent' => $frequent,
-			'critical' => $critical,
-			'stats' => $stats,
+			'errors'	=> $frequent,
 			'date_range' => ['start' => $start_date, 'end' => $end_date]
 		];
 	}
diff --git a/inc/managers/IconsManager.php b/inc/managers/IconsManager.php
index 3e12e60..ee98705 100644
--- a/inc/managers/IconsManager.php
+++ b/inc/managers/IconsManager.php
@@ -2,7 +2,7 @@
 namespace JVBase\managers;
 
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 
 if (!defined('ABSPATH')) {
 	exit;
@@ -351,16 +351,16 @@
 			$map = [
 				'seo'	=> 'robot'
 			];
-			if (Features::forSite()->has('referrals')) {
+			if (Site::has('referrals')) {
 				$map['referrals'] = 'hand-heart';
 			}
-			if (Features::forSite()->has('dashboard')) {
+			if (Site::has('dashboard')) {
 				$map['dash'] = 'door';
 			}
-			if (Features::forSite()->has('magicLink')) {
+			if (Site::has('magicLink')) {
 				$map['magicLink'] = 'magic-wand';
 			}
-			if (Features::hasAnyIntegration()) {
+			if (Site::hasAnyIntegration()) {
 				$map['integrations'] = 'plugs-connected';
 			}
 			update_option(BASE.'iconMap', $map);
diff --git a/inc/managers/InvitationsManager.php b/inc/managers/InvitationsManager.php
index fab93bd..4ab9654 100644
--- a/inc/managers/InvitationsManager.php
+++ b/inc/managers/InvitationsManager.php
@@ -5,7 +5,7 @@
 use JVBase\managers\queue\executors\InvitationExecutor;
 use JVBase\managers\queue\TypeConfig;
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use WP_Error;
 
 if (!defined('ABSPATH')) {
@@ -37,7 +37,8 @@
 	public function defineTable():void
 	{
 		$terms = Registrar::getFeatured('invitable', 'term');
-		$roles = Features::forMembership()->get('can_invite');
+		$membership = Site::membership();
+		$roles = ($membership) ? Site::membership()->has('can_invite') :[];
 		if (empty($terms) && empty($roles)) {
 			return;
 		}
diff --git a/inc/managers/LoginManager.php b/inc/managers/LoginManager.php
index 88daabe..d86d1e8 100644
--- a/inc/managers/LoginManager.php
+++ b/inc/managers/LoginManager.php
@@ -1,10 +1,10 @@
 <?php
 namespace JVBase\managers;
 
+use JVBase\base\Site;
 use JVBase\forms\TaxonomySelector;
 use JVBase\meta\Form;
 
-use JVBase\utility\Features;
 use WP_Error;
 use WP_User;
 
@@ -14,7 +14,6 @@
 
 class LoginManager
 {
-	protected Features $siteFeatures;
 	protected ?Form $form = null;
 	protected Cache $cache;
 
@@ -38,13 +37,10 @@
 
 	public function __construct()
 	{
-		$this->siteFeatures = Features::forSite();
-
-
 		$this->cache = Cache::for('login');
 
 		// Initialize magic link support if enabled
-		if ($this->siteFeatures->has('magicLink')) {
+		if (Site::has('magicLink')) {
 			$this->initMagicLinkSupport();
 		}
 
@@ -129,7 +125,7 @@
 					'placeholder'=> 'look@me.com'
 				]
 			];
-			if (Features::forSite()->has('referrals')) {
+			if (Site::has('referrals')) {
 				$fields['referral_code'] = [
 					'type'	=> 'text',
 					'required'=> false,
@@ -345,7 +341,7 @@
 
 	protected function initMagicLinkSupport(): void
 	{
-		if (!Features::forSite()->has('magicLink')) {
+		if (!Site::has('magicLink')) {
 			return;
 		}
 	}
@@ -715,7 +711,7 @@
 
 	protected function maybeTurnstile(): void
 	{
-		if (!Features::hasIntegration('cloudflare')) {
+		if (!Site::hasIntegration('cloudflare')) {
 			return;
 		}
 		JVB()->connect('cloudflare')->renderTurnstile();
@@ -723,7 +719,7 @@
 
 	protected function maybeTurnstileScripts(): void
 	{
-		if (!Features::hasIntegration('cloudflare')) {
+		if (!Site::hasIntegration('cloudflare')) {
 			return;
 		}
 		JVB()->connect('cloudflare')->enqueueTurnstileScripts();
@@ -731,7 +727,7 @@
 
 	protected function verifyTurnstile(): bool
 	{
-		if (!Features::hasIntegration('cloudflare')) {
+		if (!Site::hasIntegration('cloudflare')) {
 			return true; // Not enabled, pass verification
 		}
 
@@ -784,61 +780,19 @@
 	{
 		switch ($this->action) {
 			case 'register':
-				return [
-					'title' => JVB_LOGIN['register']['title'] ?? 'Create Your Account',
-					'description' => JVB_LOGIN['register']['description'] ?? [],
-					'extra' => JVB_LOGIN['register']['extra'] ?? [],
-					'footer' => JVB_LOGIN['register']['footer'] ?? '',
-					'email' => JVB_LOGIN['register']['email']['subject'] ?? '['.get_bloginfo('name').'] Finish Creating Your Account',
-					'submit' => JVB_LOGIN['register']['submit'] ?? 'Create Account',
-					'successTitle' => JVB_LOGIN['register']['success']['title'] ?? 'Success!',
-					'successDescription' => JVB_LOGIN['register']['success']['description'] ?? ['See your email for next steps','(Check your spam folder if you cannot find it after a couple minutes.)'],
-				];
+				return Site::login()->getLabels('register');
 			case 'lostpassword':
-				return [
-					'title' => JVB_LOGIN['forgot_password']['title'] ?? 'Reset Password',
-					'description' => JVB_LOGIN['forgot_password']['description'] ?? [],
-					'extra' => JVB_LOGIN['forgot_password']['extra'] ?? [],
-					'footer' => JVB_LOGIN['forgot_password']['footer'] ?? '',
-					'submit' => JVB_LOGIN['forgot_password']['submit'] ?? 'Send Reset Link',
-					'successTitle' => JVB_LOGIN['forgot_password']['success']['title'] ?? 'Success!',
-					'successDescription' => JVB_LOGIN['forgot_password']['success']['description'] ?? ['Check your email for reset instructions'],
-				];
+				return Site::login()->getLabels('lostPassword');
 			case 'resetpass':
 			case 'rp':
-				return [
-					'title' => JVB_LOGIN['reset_pass']['title'] ?? 'Reset Your Password',
-					'description' => JVB_LOGIN['reset_pass']['description'] ?? [],
-					'extra' => JVB_LOGIN['reset_pass']['extra'] ?? [],
-					'footer' => JVB_LOGIN['reset_pass']['footer'] ?? '',
-					'submit' => JVB_LOGIN['reset_pass']['submit'] ?? 'Reset Password',
-				];
+				return Site::login()->getLabels('resetPassword');
 			case 'logout':
-				return [
-					'title' => JVB_LOGIN['logout']['title'] ?? 'Logged Out!',
-					'description' => JVB_LOGIN['logout']['description'] ?? [],
-					'extra' => JVB_LOGIN['logout']['extra'] ?? [],
-					'footer' => JVB_LOGIN['logout']['footer'] ?? '',
-					'submit' => JVB_LOGIN['logout']['submit'] ?? '',
-				];
+				return Site::login()->getLabels('logout');
 			case 'magic':
-				return [
-					'title' => JVB_LOGIN['magic']['title'] ?? 'Log in with Magic Link',
-					'description' => JVB_LOGIN['magic']['description'] ?? ['Enter your email.','You\'ll get an email with a magic link.','Click it, and you\'re logged in!'],
-					'extra' => JVB_LOGIN['magic']['extra'] ?? [],
-					'footer' => JVB_LOGIN['magic']['footer'] ?? '',
-					'submit' => JVB_LOGIN['magic']['submit'] ?? jvbIcon('magic-wand').'Send Magic Link',
-
-				];
+				return Site::login()->getLabels('magic');
 			case 'login':
 			default:
-				return [
-					'title' => JVB_LOGIN['login']['title'] ?? 'Sign in',
-					'description' => JVB_LOGIN['login']['description'] ?? [],
-					'extra' => JVB_LOGIN['login']['extra'] ?? [],
-					'footer' => JVB_LOGIN['login']['footer'] ?? '',
-					'submit' => JVB_LOGIN['login']['submit'] ?? 'Sign In',
-				];
+				return Site::login()->getLabels('login');
 		}
 	}
 
@@ -870,7 +824,7 @@
     $action = $this->getAction();
 
     $redirect_to = isset($_GET['redirect_to']) ? esc_url_raw($_GET['redirect_to']) : '';
-    $has_turnstile = Features::hasIntegration('cloudflare');
+    $has_turnstile = Site::hasIntegration('cloudflare');
 
     ob_start();
 
diff --git a/inc/managers/Notifications/Notifications.php b/inc/managers/Notifications/Notifications.php
index af3fd15..8e83c41 100644
--- a/inc/managers/Notifications/Notifications.php
+++ b/inc/managers/Notifications/Notifications.php
@@ -4,7 +4,7 @@
 use Exception;
 use JVBase\managers\CustomTable;
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 
 if (!defined('ABSPATH')) {
 	exit; // Exit if accessed directly
@@ -30,7 +30,7 @@
 			'icon'	=> 'info',
 			'digest'=> true
 		]];
-		if (Features::forSite()->has('favourites')) {
+		if (Site::has('favourites')) {
 			$types = array_merge($types, [
 				'new_favourite' => [
 					'icon'	=> 'heart',
diff --git a/inc/managers/Notifications/_setup.php b/inc/managers/Notifications/_setup.php
index e69de29..db939ab 100644
--- a/inc/managers/Notifications/_setup.php
+++ b/inc/managers/Notifications/_setup.php
@@ -0,0 +1,10 @@
+<?php
+
+if (!defined('ABSPATH')) {
+	exit;
+}
+
+require_once JVB_DIR . '/inc/managers/Notifications/Content.php';
+require_once JVB_DIR . '/inc/managers/Notifications/EmailDigests.php';
+require_once JVB_DIR . '/inc/managers/Notifications/Notifications.php';
+require_once JVB_DIR . '/inc/managers/Notifications/Preferences.php';
diff --git a/inc/managers/ReferralManager.php b/inc/managers/ReferralManager.php
index af9f0b2..6ac1630 100644
--- a/inc/managers/ReferralManager.php
+++ b/inc/managers/ReferralManager.php
@@ -1,12 +1,10 @@
 <?php
 namespace JVBase\managers;
 
-use JVBase\managers\MagicLinkManager;
-use JVBase\integrations\Cloudflare;
 use JVBase\meta\Form;
 use JVBase\ui\CRUDSkeleton;
 use JVBase\ui\Tabs;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use WP_User;
 use WP_Error;
 
@@ -134,7 +132,7 @@
 
 			$table->setKeys([
 				['key' => 'PRIMARY', 'value' => 'id'],
-				['key' => 'UNIQUE', 'value' => 'to_user (`to_user`)'],
+				['key' => 'UNIQUE', 'value' => '(`to_user`)'],
 				'from_user (`from_user`)',
 				'status (`status`)',
 				'code (`referral_code`)',
@@ -165,8 +163,8 @@
 			]);
 
 			$table->setKeys([
-				['key' => 'PRIMARY', 'value' => 'id'],
-				['key' => 'UNIQUE', 'value' => 'code (`code`)'],
+				['key' => 'PRIMARY', 'value' => '(`id`)'],
+				['key' => 'UNIQUE', 'value' => '(`code`)'],
 				'user (`user_id`)',
 			]);
 
@@ -195,7 +193,7 @@
 
 			$table->setKeys([
 				['key' => 'PRIMARY', 'value' => '(`id`)'],
-				['key' => 'UNIQUE', 'value' => 'patient_guid (`patient_guid`)'],
+				['key' => 'UNIQUE', 'value' => '(`patient_guid`)'],
 				'user (`user_id`)',
 				'email (`email`)',
 			]);
@@ -238,9 +236,9 @@
 			$base = BASE;
 			$table->setConstraints([
 				"CONSTRAINT `{$base}reward_referral` FOREIGN KEY (`referral_id`)
-				REFERENCES {$this->referrals->getFullTableName()} (`id`) ON DELETE CASCADE",
+				REFERENCES `{$this->referrals->getFullTableName()}` (`id`) ON DELETE CASCADE",
 				"CONSTRAINT `{$base}reward_user` FOREIGN KEY (`user_id`)
-				REFERENCES {$table->getUserTable()}` (`ID`) ON DELETE CASCADE"
+				REFERENCES `{$table->getUserTable()}` (`ID`) ON DELETE CASCADE"
 			]);
 			$table->defineTable();
 			$this->rewards = $table;
@@ -329,7 +327,7 @@
 			'jvb-data-store',
 		];
 
-		if (Features::hasIntegration('cloudflare') && JVB()->connect('cloudflare')->isSetUp()) {
+		if (Site::hasIntegration('cloudflare') && JVB()->connect('cloudflare')->isSetUp()) {
 			JVB()->connect('cloudflare')->enqueueTurnstileScripts();
 		}
 		if (is_singular(BASE.'dash')) {
@@ -396,24 +394,24 @@
 	 * @param string|null $custom_code Optional custom code
 	 * @return string|WP_Error
 	 */
-	public function getUserReferralCode(int $user_id, ?string $custom_code = null):array|wp_error
+	public function getUserReferralCode(int $user_id, ?string $custom_code = null):string|false
 	{
 		$user = get_userdata($user_id);
 		if (!$user) {
-			return new WP_Error('invalid_user', 'User not found');
+			return false;
 		}
 
 		$existing = $this->codes->pluck('code', ['user_id' => $user_id],'created_at', 'DESC');
-		if ($existing && !$custom_code) {
-			return $existing;
+		if (!empty($existing) && !$custom_code) {
+			return $existing[0];
 		}
-		if ($custom_code && !in_array($custom_code, $existing)) {
+		if ($custom_code && !empty($existing) && !in_array($custom_code, $existing)) {
 			$test = $this->createCode($user_id, $custom_code);
 			if ($test) {
 				return $this->codes->pluck('code', ['user_id' => $user_id], 'created_at', 'DESC');
+			} else {
+				return $existing[0];
 			}
-		} else {
-			return $existing;
 		}
 
 		// Generate new code if custom provided or none exists
@@ -421,10 +419,10 @@
 
 		$success = $this->createCode($user_id, $code);
 		if ($success) {
-			return $this->codes->pluck('code', ['user_id' => $user_id], 'created_at', 'DESC');
+			return $this->codes->pluck('code', ['user_id' => $user_id], 'created_at', 'DESC')[0];
 		}
 
-		return $code;
+		return false;
 	}
 
 	/**
@@ -1395,7 +1393,7 @@
 	public function getLoggedInReferral(int $user_id): string
 	{
 		$referral_code = $this->getUserReferralCode($user_id);
-		if (is_wp_error($referral_code)) {
+		if (!$referral_code) {
 			return '';
 		}
 
@@ -1494,7 +1492,7 @@
 
 		$code = $this->getUserReferralCode($user->ID);
 		$yourCode = '';
-		if (!is_wp_error($code)) {
+		if ($code) {
 			$share_url = $this->getShareURL($code);
 			$yourCode = sprintf(
 				'<div class="callout">
@@ -1556,7 +1554,7 @@
 		$referrer = get_user_by('ID', $user_id);
 		$referral_code = $this->getUserReferralCode($user_id);
 
-		if (is_wp_error($referral_code)) {
+		if ($referral_code) {
 			return $referral_code;
 		}
 
@@ -2621,10 +2619,10 @@
 
 		// Regular users get their referral dashboard
 		$user_id = get_current_user_id();
-		$referral_code = get_user_meta($user_id, BASE . 'referral_code', true);
 
+		$referral_code = $this->getUserReferralCode($user_id);
 		if (!$referral_code) {
-			$referral_code = $this->getUserReferralCode($user_id);
+			$referral_code = $this->generateReferralCode($user_id);
 		}
 
 		$referrals = $this->getUserReferrals($user_id, ['limit' => 20]);
@@ -2892,7 +2890,7 @@
 	public function getShareButtons(int $user_id):void
 	{
 		$referral_code = $this->getUserReferralCode($user_id);
-		if (is_wp_error($referral_code)) {
+		if (!$referral_code) {
 			return;
 		}
 
diff --git a/inc/managers/RoleManager.php b/inc/managers/RoleManager.php
index 4de3271..863ff46 100644
--- a/inc/managers/RoleManager.php
+++ b/inc/managers/RoleManager.php
@@ -2,7 +2,7 @@
 namespace JVBase\managers;
 
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use WP_User;
 use WP_Role;
 
@@ -277,7 +277,7 @@
 			$capabilities['access_dashboard'] = true;
 		}
 
-		if (Features::forSite()->has('favourites') && $registrar->hasFeature('can_favourite') ?? true) {
+		if (Site::has('favourites') && $registrar->hasFeature('can_favourite') ?? true) {
 			$capabilities['can_favourite'] = true;
 		}
 
diff --git a/inc/managers/SEO/BreadcrumbManager.php b/inc/managers/SEO/BreadcrumbManager.php
index 72929a2..7108e4e 100644
--- a/inc/managers/SEO/BreadcrumbManager.php
+++ b/inc/managers/SEO/BreadcrumbManager.php
@@ -3,7 +3,7 @@
 
 use JVBase\managers\Cache;
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use WP_Post;
 use WP_Term;
 
@@ -131,11 +131,13 @@
 
 		// Add directory if exists
 		if ($registrar && $registrar->hasFeature('directory')) {
-			$directory = JVB()->directories()?->directories($tax);
-			$crumbs[] = [
-				'name' => $directory['title'],
-				'url'  => $directory['url']
-			];
+			$directory = JVB()->directories();
+			if ($directory && !empty($directory->directories($tax))) {
+				$crumbs[] = [
+					'name' => $directory['title'],
+					'url'  => $directory['url']
+				];
+			}
 		}
 
 		// Add term hierarchy
@@ -156,8 +158,8 @@
 		}
 
 		if($registrar && $registrar->hasFeature('show_directory')) {
-			$directory = JVB()->directories()?->directories($content)??[];
-			if (!empty($directory)) {
+			$directory = JVB()->directories();
+			if ($directory && !empty($directory->directories($content)??[])){
 				$crumbs[] = [
 					'name'	=> $directory['title'],
 					'url'	=>$directory['url']
@@ -173,7 +175,7 @@
 				if ($pos['title'] == 'Map') {
 					$crumbs[] = [
 						'name' => 'Tattoo Shops',
-						'url'  => JVB()->directories()?->directories(BASE.'shop')['url']
+						'url'  => JVB()->directories()->directories(BASE.'shop')['url']
 					];
 				}
 
@@ -203,7 +205,7 @@
 		$name = jvbNoBase($type);
 
 		$registrar = Registrar::getInstance($name);
-		if (Features::forSite()->has('is_directory') && $name === 'directory') {
+		if (Site::has('is_directory') && $name === 'directory') {
 			$crumbs[] = [
 				'name'	=> JVB()->directories()->referAs(true),
 				'url'	=> get_post_type_archive_link($type)
diff --git a/inc/managers/_setup.php b/inc/managers/_setup.php
index 45b8f73..d6fb3da 100644
--- a/inc/managers/_setup.php
+++ b/inc/managers/_setup.php
@@ -3,7 +3,7 @@
 use JVBase\managers\Cache;
 use JVBase\managers\IconsManager;
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 
 require(JVB_DIR . '/inc/managers/ScriptLoader.php');
 require(JVB_DIR . '/inc/managers/CustomTable.php');
@@ -23,77 +23,71 @@
 	IconsManager::for('forms');
 
 	// Only initialize dash if feature is enabled
-	if (Features::forSite()->has('dashboard')) {
+	if (Site::has('dashboard')) {
 		IconsManager::for('dash');
 	}
+
+	if (Site::has('magicLink')) {
+		require(JVB_DIR . '/inc/managers/MagicLinkManager.php');
+	}
+
+	if (Site::hasAny(['dashboard', 'feed_block'])) {
+		require(JVB_DIR . '/inc/forms/TaxonomySelector.php');
+	}
+
+	if (Site::has('dashboard')) {
+		require(JVB_DIR . '/inc/managers/CRUDManager.php');
+		require(JVB_DIR . '/inc/managers/UploadManager.php');
+	}
+
+	if (Site::has('feed_block')) {
+		require(JVB_DIR . '/inc/managers/TaxonomyRelationships.php');
+	}
+
+	if (Site::hasAll(['dashboard', 'membership'])) {
+		require(JVB_DIR . '/inc/managers/UserTermsManager.php');
+	}
+
+	if (Site::has('notifications')) {
+		require(JVB_DIR . '/inc/managers/Notifications/Content.php');
+		require(JVB_DIR . '/inc/managers/Notifications/EmailDigests.php');
+		require(JVB_DIR . '/inc/managers/Notifications/Notifications.php');
+		require(JVB_DIR . '/inc/managers/Notifications/Preferences.php');
+		require(JVB_DIR . '/inc/managers/NotificationManager.php');
+	}
+
+	$membership = Site::membership();
+	if ($membership) {
+		if ($membership->has('forum') && !empty(Registrar::getFeatured('is_content', 'term'))) {
+			require(JVB_DIR . '/inc/managers/NewsRelationships.php');
+		}
+		if ($membership->has('invitable')) {
+			require(JVB_DIR . '/inc/managers/InvitationsManager.php');
+		}
+	}
+
+	if (Site::has('is_directory')) {
+		require(JVB_DIR . '/inc/managers/DirectoryManager.php');
+	}
+
+	if (Site::has('dashboard')) {
+		require(JVB_DIR . '/inc/managers/DashboardManager.php');
+	}
+
+	if (Site::has('referrals')) {
+		require(JVB_DIR . '/inc/managers/ReferralManager.php');
+	}
 }
 require(JVB_DIR . '/inc/managers/ErrorHandler.php');
 require(JVB_DIR . '/inc/managers/queue/_setup.php');
-//require(JVB_DIR . '/inc/managers/OperationQueue.php');
 require(JVB_DIR . '/inc/managers/EmailManager.php');
-
-if (Features::forSite()->has('magicLink')) {
-	require(JVB_DIR . '/inc/managers/MagicLinkManager.php');
-}
-
 require(JVB_DIR . '/inc/managers/LoginManager.php');
 
 
-//IF SITE HAS DASHBOARD AND FEED BLOCK
-//if (Features::forSite()->hasAny(['dashboard', 'feed_block'])) {
-	require(JVB_DIR . '/inc/forms/TaxonomySelector.php');
-//}
-
-//IF SITE HAS DASHBOARD
-if (Features::forSite()->has('dashboard')) {
-	require(JVB_DIR . '/inc/managers/CRUDManager.php');
-	require(JVB_DIR . '/inc/managers/UploadManager.php');
-}
-
-//IF SITE HAS FEED BLOCK
-if (Features::forSite()->has('feed_block')) {
-	require(JVB_DIR . '/inc/managers/TaxonomyRelationships.php');
-	new JVBase\managers\TaxonomyRelationships();
-}
-
-//if (Features::forSite()->hasAll(['dashboard', 'membership', 'feed_block'])) {
-	require(JVB_DIR . '/inc/managers/UserTermsManager.php');
-	new JVBase\managers\UserTermsManager();
-//}
-
-if (Features::forSite()->has('notifications')) {
-	require(JVB_DIR . '/inc/managers/Notifications/Content.php');
-	require(JVB_DIR . '/inc/managers/Notifications/EmailDigests.php');
-	require(JVB_DIR . '/inc/managers/Notifications/Notifications.php');
-	require(JVB_DIR . '/inc/managers/Notifications/Preferences.php');
-	require(JVB_DIR . '/inc/managers/NotificationManager.php');
-
-}
-
-if (Features::forMembership()->has('forum') && !empty(Registrar::getFeatured('is_content', 'term'))) {
-	require(JVB_DIR . '/inc/managers/NewsRelationships.php');
-}
-
-if (Features::forMembership()->has('invitable')) {
-	require(JVB_DIR . '/inc/managers/Invitations.php');
-}
-
-//
 //require(JVB_DIR . '/inc/managers/SchemaManager.php');
 //require(JVB_DIR . '/inc/managers/SEOMetaManager.php');
 require(JVB_DIR . '/inc/managers/SEO/_setup.php');
-if (Features::forSite()->has('is_directory')) {
-	require(JVB_DIR . '/inc/managers/DirectoryManager.php');
-}
+
 require(JVB_DIR . '/inc/managers/ImageGenerator.php');
 require(JVB_DIR . '/inc/managers/AdminPages.php');
 require(JVB_DIR . '/inc/managers/RoleManager.php');
-
-
-if (Features::forSite()->has('dashboard')) {
-	require(JVB_DIR . '/inc/managers/DashboardManager.php');
-}
-
-if (Features::forSite()->has('referrals')) {
-	require(JVB_DIR . '/inc/managers/ReferralManager.php');
-}
diff --git a/inc/managers/queue/executors/UploadExecutor.php b/inc/managers/queue/executors/UploadExecutor.php
index 8e199d1..8187500 100644
--- a/inc/managers/queue/executors/UploadExecutor.php
+++ b/inc/managers/queue/executors/UploadExecutor.php
@@ -7,7 +7,7 @@
 use JVBase\meta\Meta;
 use Exception;
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 
 if (!defined('ABSPATH')) {
 	exit;
diff --git a/inc/meta/Meta.php b/inc/meta/Meta.php
index 371a059..a32c545 100644
--- a/inc/meta/Meta.php
+++ b/inc/meta/Meta.php
@@ -106,6 +106,10 @@
 			'user', 'integrations' => get_userdata($id),
 			default => null
 		};
+		if (!$this->wpObject){
+			return;
+		}
+
 		$this->slug = match($type) {
 			'post'	=> $this->wpObject->post_type,
 			'term'	=> $this->wpObject->taxonomy,
diff --git a/inc/registrar/Registrar.php b/inc/registrar/Registrar.php
index 727e3b3..686836e 100644
--- a/inc/registrar/Registrar.php
+++ b/inc/registrar/Registrar.php
@@ -1,7 +1,8 @@
 <?php
 namespace JVBase\registrar;
 
-use JVBase\forms\TaxonomySelector;
+
+use JVBase\base\Site;
 use JVBase\inc\registrar\helpers\HideSingle;
 use JVBase\managers\Cache;
 use JVBase\managers\CRUD;
@@ -20,8 +21,6 @@
 use JVBase\registrar\helpers\MakeTimelineType;
 use JVBase\registrar\helpers\MakeTrackChanges;
 use JVBase\registrar\helpers\MakeVerification;
-use JVBase\utility\Features;
-use WP_Post;
 use WP_Query;
 
 if (!defined('ABSPATH')) {
@@ -371,7 +370,8 @@
 	}
 	public function setIntegration(string $integration):self
 	{
-		if (!Features::forSite()->has($integration)){
+
+		if (!Site::hasIntegration($integration)){
 			error_log('Integration not available for '.$this->slug.': '.$integration);
 			return $this;
 		}
@@ -382,7 +382,7 @@
 	public function getIntegrationFields(string $integration):AddIntegrationFields|false
 	{
 
-		if (!Features::forSite()->has($integration)){
+		if (!Site::has($integration)){
 			error_log('Integration not available for '.$this->slug.': '.$integration);
 			return false;
 		}
@@ -399,6 +399,14 @@
 	public function hasIntegration(string $integration) {
 		return in_array($integration, $this->integrationConfigs);
 	}
+    public function hasAnyIntegrations(array $integrations = []):bool
+    {
+        if (empty($integrations)) {
+            $integrations = array_keys($this->integrationConfigs);
+            return !empty($integrations);
+        }
+        return !empty(array_intersect($integrations, array_keys($this->integrationConfigs)));
+    }
 	public function setUploadTitle(string $title):self
 	{
 		$this->upload_title = $title;
diff --git a/inc/registrar/_setup.php b/inc/registrar/_setup.php
index f9d9672..0e4293a 100644
--- a/inc/registrar/_setup.php
+++ b/inc/registrar/_setup.php
@@ -1,30 +1,31 @@
 <?php
-require(JVB_DIR . '/inc/registrar/config/Config.php');
-require(JVB_DIR . '/inc/registrar/config/Breadcrumbs.php');
-require(JVB_DIR . '/inc/registrar/config/Dashboard.php');
-require(JVB_DIR . '/inc/registrar/config/Directory.php');
-require(JVB_DIR . '/inc/registrar/config/Feed.php');
-require(JVB_DIR . '/inc/registrar/config/SEO.php');
-require(JVB_DIR . '/inc/registrar/config/seo/_setup.php');
+require_once(JVB_DIR . '/inc/registrar/config/Config.php');
+require_once(JVB_DIR . '/inc/registrar/config/Breadcrumbs.php');
+require_once(JVB_DIR . '/inc/registrar/config/Dashboard.php');
+require_once(JVB_DIR . '/inc/registrar/config/Directory.php');
+require_once(JVB_DIR . '/inc/registrar/config/Feed.php');
+require_once(JVB_DIR . '/inc/registrar/config/SEO.php');
+require_once(JVB_DIR . '/inc/registrar/config/Integration.php');
+require_once(JVB_DIR . '/inc/registrar/config/seo/_setup.php');
 
-require(JVB_DIR . '/inc/registrar/fields/Field.php');
-require(JVB_DIR . '/inc/registrar/fields/GroupedField.php');
-require(JVB_DIR . '/inc/registrar/fields/RepeaterField.php');
-require(JVB_DIR . '/inc/registrar/fields/TagListField.php');
-require(JVB_DIR . '/inc/registrar/fields/OptionsField.php');
-require(JVB_DIR . '/inc/registrar/fields/SelectorField.php');
-require(JVB_DIR . '/inc/registrar/fields/UploadField.php');
+require_once(JVB_DIR . '/inc/registrar/fields/Field.php');
+require_once(JVB_DIR . '/inc/registrar/fields/GroupedField.php');
+require_once(JVB_DIR . '/inc/registrar/fields/RepeaterField.php');
+require_once(JVB_DIR . '/inc/registrar/fields/TagListField.php');
+require_once(JVB_DIR . '/inc/registrar/fields/OptionsField.php');
+require_once(JVB_DIR . '/inc/registrar/fields/SelectorField.php');
+require_once(JVB_DIR . '/inc/registrar/fields/UploadField.php');
 
-require(JVB_DIR . '/inc/registrar/helpers/AddIntegrationFields.php');
-require(JVB_DIR . '/inc/registrar/helpers/HideSingle.php');
-require(JVB_DIR . '/inc/registrar/helpers/MakeCalendarType.php');
-require(JVB_DIR . '/inc/registrar/helpers/MakeTimelineType.php');
-require(JVB_DIR . '/inc/registrar/helpers/MakeTrackChanges.php');
-require(JVB_DIR . '/inc/registrar/helpers/MakeVerification.php');
+require_once(JVB_DIR . '/inc/registrar/helpers/AddIntegrationFields.php');
+require_once(JVB_DIR . '/inc/registrar/helpers/HideSingle.php');
+require_once(JVB_DIR . '/inc/registrar/helpers/MakeCalendarType.php');
+require_once(JVB_DIR . '/inc/registrar/helpers/MakeTimelineType.php');
+require_once(JVB_DIR . '/inc/registrar/helpers/MakeTrackChanges.php');
+require_once(JVB_DIR . '/inc/registrar/helpers/MakeVerification.php');
 
-require(JVB_DIR . '/inc/registrar/Fields.php');
-require(JVB_DIR . '/inc/registrar/Posts.php');
-require(JVB_DIR . '/inc/registrar/Terms.php');
-require(JVB_DIR . '/inc/registrar/Users.php');
+require_once(JVB_DIR . '/inc/registrar/Fields.php');
+require_once(JVB_DIR . '/inc/registrar/Posts.php');
+require_once(JVB_DIR . '/inc/registrar/Terms.php');
+require_once(JVB_DIR . '/inc/registrar/Users.php');
 
-require(JVB_DIR . '/inc/registrar/Registrar.php');
+require_once(JVB_DIR . '/inc/registrar/Registrar.php');
diff --git a/inc/registrar/config/Integration.php b/inc/registrar/config/Integration.php
index 8723e71..c1cbac4 100644
--- a/inc/registrar/config/Integration.php
+++ b/inc/registrar/config/Integration.php
@@ -2,7 +2,7 @@
 namespace JVBase\registrar\config;
 
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 
 if (!defined('ABSPATH')) {
 	exit;
@@ -31,7 +31,7 @@
 
 
 	public function __construct(string $service) {
-		if (!Features::hasIntegration($service)) {
+		if (!Site::hasIntegration($service)) {
 			error_log('Could not link with integration, as it is not enabled: '.$service);
 			return;
 		}
diff --git a/inc/registrar/config/seo/Schema.php b/inc/registrar/config/seo/Schema.php
index 15c256e..6feef79 100644
--- a/inc/registrar/config/seo/Schema.php
+++ b/inc/registrar/config/seo/Schema.php
@@ -181,7 +181,6 @@
 					$config = $this->getConfig();
 
 					$class = JVB()->schemaHelper()::classFromConfig($config, $meta);
-
 					$class->setAuthor(JVB()->seo()->getCreator(true));
 					return $class->outputSchema();
 				}
@@ -350,6 +349,8 @@
 			error_log('[SEO]Schema::getConfig Invalid type: '.$type);
 			return [];
 		}
+		jvbDump($this->slug);
+		jvbDump($type);
 		return JVB()->schemaHelper()::getConfig($this->slug, $type);
 	}
 
@@ -399,7 +400,7 @@
 			$config['type'] = $this->defaultSchema['type'];
 			update_option(BASE.ucfirst($this->slug).'Schema', $config);
 		}
-		$class = $this->getConfig()['type'];
+		$class = $config['type'];
 		if (!class_exists($class)) {
 			error_log('[SEO]Schema::defineReference Class not found: '.$class);
 			return;
@@ -436,7 +437,7 @@
 		if (is_singular($based)){
 			$config = $this->getConfig('meta');
 			$meta = Meta::forPost(get_the_ID());
-			$title = Resolver::resolve($config['name']??$config['title'], $meta);
+			$title = Resolver::resolve($config['name']??$config['title']??'', $meta);
 		} elseif (is_post_type_archive($based) ) {
 			$config = $this->getConfig('archive');
 			$title = $config['name'];
diff --git a/inc/registrar/helpers/AddIntegrationFields.php b/inc/registrar/helpers/AddIntegrationFields.php
index fde540d..29fe741 100644
--- a/inc/registrar/helpers/AddIntegrationFields.php
+++ b/inc/registrar/helpers/AddIntegrationFields.php
@@ -3,7 +3,7 @@
 
 use JVBase\registrar\config\Integration;
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 
 if (!defined('ABSPATH')) {
 	exit;
@@ -32,22 +32,22 @@
 	protected function initAllowed():void
 	{
 		$allowed = [];
-		if (Features::hasIntegration('gmb')) {
+		if (Site::hasIntegration('gmb')) {
 			$allowed['gmb'] = 'Google My Business';
 		}
-		if (Features::hasIntegration('facebook')) {
+		if (Site::hasIntegration('facebook')) {
 			$allowed['facebook'] = 'Facebook';
 		}
-		if (Features::hasIntegration('square')) {
+		if (Site::hasIntegration('square')) {
 			$allowed['square'] = 'Square';
 		}
-		if (Features::hasIntegration('instagram')) {
+		if (Site::hasIntegration('instagram')) {
 			$allowed['instagram'] = 'Instagram';
 		}
-		if (Features::hasIntegration('bluesky')) {
+		if (Site::hasIntegration('bluesky')) {
 			$allowed['bluesky'] = 'BlueSky';
 		}
-		if (Features::hasIntegration('helcim')) {
+		if (Site::hasIntegration('helcim')) {
 			$allowed['helcim'] = 'Helcim';
 		}
 		$this->allowed = $allowed;
diff --git a/inc/registrar/helpers/MakeVerification.php b/inc/registrar/helpers/MakeVerification.php
index 6574bdb..631df95 100644
--- a/inc/registrar/helpers/MakeVerification.php
+++ b/inc/registrar/helpers/MakeVerification.php
@@ -11,19 +11,7 @@
 	protected CustomTable $table;
 	public function __construct()
 	{
-		$this->defineTables();
+//		$this->defineTables();
 	}
 
-	protected function defineTables():void
-	{
-		$types = implode(',', array_map(function($item) { return "`{$item}`"; },Registrar::getFeatured('verify_entry')));
-
-		$table = CustomTable::for('verify_entry');
-
-		$table->setColumns([
-			'id'			=> 'bigint(20) unsigned NOT NULL AUTO_INCREMENT',
-			'user_id'		=> "{$table->getUserIDType()} NOT NULL",
-			'content'
-		])
-	}
 }
diff --git a/inc/registry/FieldRegistry.php b/inc/registry/FieldRegistry.php
index 4de8e10..63f8eaf 100644
--- a/inc/registry/FieldRegistry.php
+++ b/inc/registry/FieldRegistry.php
@@ -8,7 +8,7 @@
 use JVBase\registry\providers\CalendarFieldProvider;
 use JVBase\registry\providers\CommonFieldProvider;
 use JVBase\registry\providers\FieldProviderInterface;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use JVBase\registry\providers\IntegrationFieldProvider;
 
 class FieldRegistry
@@ -160,7 +160,7 @@
 			}
 		}
 
-		if (Features::hasIntegration('helcim') && jvbCheck('use_helcim', $config)) {
+		if (Site::hasIntegration('helcim') && jvbCheck('use_helcim', $config)) {
 			$helcim = JVB()->connect('helcim');
 			if ($helcim) {
 				$contentType = $config['integrations']['helcim']['content_type'] ?? $helcim->getDefaultContentType();
diff --git a/inc/registry/PostTypeRegistrar.php b/inc/registry/PostTypeRegistrar.php
index 0c60e5e..d248ca4 100644
--- a/inc/registry/PostTypeRegistrar.php
+++ b/inc/registry/PostTypeRegistrar.php
@@ -3,8 +3,8 @@
 
 use JVBase\forms\TaxonomySelector;
 use JVBase\managers\CRUD;
-use JVBase\utility\Features;
-use WP_Post;
+use JVBase\base\Site;
+
 use JVBase\meta\Registry;
 if (!defined('ABSPATH')) {
 	exit;
diff --git a/inc/registry/providers/IntegrationFieldProvider.php b/inc/registry/providers/IntegrationFieldProvider.php
index 23f5535..818a50b 100644
--- a/inc/registry/providers/IntegrationFieldProvider.php
+++ b/inc/registry/providers/IntegrationFieldProvider.php
@@ -1,7 +1,7 @@
 <?php
 namespace JVBase\registry\providers;
 
-use JVBase\utility\Features;
+use JVBase\base\Site;
 
 if (!defined('ABSPATH')) {
 	exit;
@@ -15,22 +15,22 @@
 	protected array $allowed = [];
 	public function __construct() {
 		$allowed = [];
-		if (Features::hasIntegration('gmb')) {
+		if (Site::hasIntegration('gmb')) {
 			$allowed['gmb'] = 'Google My Business';
 		}
-		if (Features::hasIntegration('facebook')) {
+		if (Site::hasIntegration('facebook')) {
 			$allowed['facebook'] = 'Facebook';
 		}
-		if (Features::hasIntegration('square')) {
+		if (Site::hasIntegration('square')) {
 			$allowed['square'] = 'Square';
 		}
-		if (Features::hasIntegration('instagram')) {
+		if (Site::hasIntegration('instagram')) {
 			$allowed['instagram'] = 'Instagram';
 		}
-		if (Features::hasIntegration('bluesky')) {
+		if (Site::hasIntegration('bluesky')) {
 			$allowed['bluesky'] = 'BlueSky';
 		}
-		if (Features::hasIntegration('helcim')) {
+		if (Site::hasIntegration('helcim')) {
 			$allowed['helcim'] = 'Helcim';
 		}
 		$this->allowed = $allowed;
diff --git a/inc/rest/Rest.php b/inc/rest/Rest.php
index 3357ca4..dd6c9cb 100644
--- a/inc/rest/Rest.php
+++ b/inc/rest/Rest.php
@@ -4,7 +4,7 @@
 use JVBase\managers\Cache;
 use JVBase\meta\Meta;
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use WP_REST_Request;
 use WP_REST_Response;
 use Exception;
@@ -549,7 +549,7 @@
 	 */
 	protected function verifyTurnstile(string $token): bool
 	{
-		if (!Features::hasIntegration('cloudflare') || !JVB()->connect('cloudflare')->isSetUp()) {
+		if (!Site::hasIntegration('cloudflare') || !JVB()->connect('cloudflare')->isSetUp()) {
 			return true;
 		}
 
diff --git a/inc/rest/RestRouteManager.php b/inc/rest/RestRouteManager.php
index f66f860..1c8875c 100644
--- a/inc/rest/RestRouteManager.php
+++ b/inc/rest/RestRouteManager.php
@@ -7,7 +7,7 @@
 use JVBase\managers\OperationQueue;
 use JVBase\managers\Cache;
 use JVBase\managers\NotificationManager;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use WP_REST_Request;
 use WP_Error;
 use Exception;
@@ -1052,7 +1052,7 @@
 
 	protected function verifyTurnstile(string $token): bool
 	{
-		if (!Features::hasIntegration('cloudflare') || !JVB()->connect('cloudflare')->isSetUp()) {
+		if (!Site::hasIntegration('cloudflare') || !JVB()->connect('cloudflare')->isSetUp()) {
 			return true;
 		}
 
diff --git a/inc/rest/_setup.php b/inc/rest/_setup.php
index 64fabde..89dcf34 100644
--- a/inc/rest/_setup.php
+++ b/inc/rest/_setup.php
@@ -1,7 +1,7 @@
 <?php
 
 use JVBase\registrar\Registrar;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 
 //NEW METHOD
 require(JVB_DIR . '/inc/rest/Route.php');
@@ -15,64 +15,64 @@
 //require(JVB_DIR . '/inc/rest/RestRouteManager.php');
 //require(JVB_DIR . '/inc/rest/RegisterRoutes.php');
 
-if (Features::forSite()->has('feed_block')) {
+//if (Site::has('feed_block')) {
 	require(JVB_DIR . '/inc/rest/routes/FeedRoutes.php');
-}
-//if (Features::forSite()->has('magicLink')) {
+//}
+//if (Site::has('magicLink')) {
 //	require(JVB_DIR . '/inc/rest/routes/MagicLinkRoutes.php');
 //}
-if (Features::forSite()->has('favourites')) {
+//if (Site::has('favourites')) {
 	require(JVB_DIR . '/inc/rest/routes/FavouritesRoutes.php');
-}
-
-if (Features::forMembership()->has('notifications')) {
+//}
+//$membership = Site::membership();
+//if ($membership && $membership->has('notifications')) {
 	require(JVB_DIR . '/inc/rest/routes/NotificationsRoutes.php');
-}
+//}
 
-if (Features::forSite()->hasAny(['feed_block', 'dashboard'])) {
+//if (Site::hasAny(['feed_block', 'dashboard'])) {
 	require(JVB_DIR . '/inc/rest/routes/TermRoutes.php');
-}
+//}
 
 require(JVB_DIR . '/inc/rest/routes/QueueRoutes.php');
 require(JVB_DIR . '/inc/rest/routes/SEORoutes.php');
 require(JVB_DIR . '/inc/rest/routes/ErrorRoutes.php');
 require(JVB_DIR . '/inc/rest/routes/UploadRoutes.php');
 require(JVB_DIR . '/inc/rest/routes/SettingsRoutes.php');
-if (Features::forSite()->has('dashboard')) {
+//if (Site::has('dashboard')) {
 	require(JVB_DIR . '/inc/rest/routes/AdminRoutes.php');
 	require(JVB_DIR . '/inc/rest/routes/ContentRoutes.php');
 	require(JVB_DIR . '/inc/rest/routes/ContentTermsRoutes.php');
 //	require(JVB_DIR . '/inc/rest/routes/BioRoutes.php');
 //	require(JVB_DIR . '/inc/rest/routes/ShopRoutes.php');
-}
-if (Features::forMembership()->has('forum')) {
+//}
+//if ($membership && $membership->has('forum')) {
 	require(JVB_DIR . '/inc/rest/routes/NewsRoutes.php');
-}
-if (Features::forSite()->has('referrals')) {
+//}
+//if (Site::has('referrals')) {
 	require(JVB_DIR . '/inc/rest/routes/ReferralRoutes.php');
-}
-if (!empty(Registrar::getFeatured('has_responses'))) {
+//}
+//if (!empty(Registrar::getFeatured('has_responses'))) {
 	require(JVB_DIR . '/inc/rest/routes/ResponseRoutes.php');
-}
+//}
 
-if (!empty(Registrar::getFeatured('karma'))) {
+//if (!empty(Registrar::getFeatured('karma'))) {
 	require(JVB_DIR . '/inc/rest/routes/VoteRoutes.php');
-}
+//}
 
-if (Features::forMembership()->has('can_invite')) {
+//if ($membership && $membership->has('can_invite')) {
 	require(JVB_DIR . '/inc/rest/routes/Invitations.php');
-}
-if (Features::forMembership()->has('member_verified')) {
+//}
+//if ($membership && $membership->has('member_verified')) {
 	require(JVB_DIR . '/inc/rest/routes/ApprovalRoutes.php');
-}
+//}
 
-if (Features::hasIntegration('square')) {
+//if (Site::hasIntegration('square')) {
 	require(JVB_DIR . '/inc/rest/routes/IntegrationsSquareRoutes.php');
-}
+//}
 
-if (Features::hasIntegration('helcim')) {
+//if (Site::hasIntegration('helcim')) {
 	require(JVB_DIR . '/inc/rest/routes/IntegrationsHelcimRoutes.php');
-}
+//}
 
 require(JVB_DIR .'/inc/rest/routes/OptionsRoutes.php');
 require(JVB_DIR .'/inc/rest/routes/FormRoutes.php');
diff --git a/inc/rest/routes/ApprovalRoutes.php b/inc/rest/routes/ApprovalRoutes.php
index d955825..fe5db06 100644
--- a/inc/rest/routes/ApprovalRoutes.php
+++ b/inc/rest/routes/ApprovalRoutes.php
@@ -8,7 +8,7 @@
 use JVBase\rest\Rest;
 use JVBase\rest\Route;
 use JVBase\rest\Response;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use WP_REST_Request;
 use WP_REST_Response;
 use Exception;
@@ -29,7 +29,7 @@
     public function __construct()
     {
         $this->cacheName = 'approvals';
-		$this->hasMemberApproval = Features::forMembership()->has('member_verified');
+		$this->hasMemberApproval = Site::membership() && Site::membership()->has('member_verified');
         parent::__construct();
 
         $this->initTypes();
@@ -49,7 +49,7 @@
             $this->userTypes = Registrar::getFeatured('approve_new', 'user');
             $this->allTypes = $this->userTypes;
         }
-        if (Features::forSite()->has('term_approval')) {
+        if (Site::has('term_approval')) {
             $this->termTypes = Registrar::getFeatured('approve_new', 'term');
             $this->allTypes[] = 'term';
         }
diff --git a/inc/rest/routes/ContentTermsRoutes.php b/inc/rest/routes/ContentTermsRoutes.php
index d28cb60..ce50632 100644
--- a/inc/rest/routes/ContentTermsRoutes.php
+++ b/inc/rest/routes/ContentTermsRoutes.php
@@ -7,7 +7,7 @@
 use JVBase\rest\Rest;
 use JVBase\rest\Route;
 use JVBase\rest\PermissionHandler;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use JVBase\managers\CustomTable;
 use WP_REST_Request;
 use WP_REST_Response;
diff --git a/inc/rest/routes/FeedRoutes.php b/inc/rest/routes/FeedRoutes.php
index f1b6bb2..5bc384c 100644
--- a/inc/rest/routes/FeedRoutes.php
+++ b/inc/rest/routes/FeedRoutes.php
@@ -6,7 +6,7 @@
 use JVBase\rest\Rest;
 use JVBase\integrations\Umami;
 use JVBase\rest\Route;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use WP_Query;
 use WP_Post;
 use WP_Term;
@@ -44,7 +44,7 @@
 
 	public function init():void
 	{
-		if (Features::hasIntegration('umami')) {
+		if (Site::hasIntegration('umami')) {
 			$this->tracker = JVB()->connect('umami');
 		}
 	}
diff --git a/inc/rest/routes/FormRoutes.php b/inc/rest/routes/FormRoutes.php
index e6be516..e57163d 100644
--- a/inc/rest/routes/FormRoutes.php
+++ b/inc/rest/routes/FormRoutes.php
@@ -8,7 +8,7 @@
 use JVBase\managers\Cache;
 use JVBase\blocks\FormBlock;
 use JVBase\rest\Route;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use WP_REST_Request;
 use WP_REST_Response;
 use WP_Error;
@@ -121,7 +121,7 @@
 
 	protected function verifyTurnstile(string $token): bool
 	{
-		if (!Features::hasIntegration('cloudflare') || !JVB()->connect('cloudflare')->isSetUp()) {
+		if (!Site::hasIntegration('cloudflare') || !JVB()->connect('cloudflare')->isSetUp()) {
 			return true;
 		}
 
diff --git a/inc/rest/routes/LoginRoutes.php b/inc/rest/routes/LoginRoutes.php
index 10e448f..6f78184 100644
--- a/inc/rest/routes/LoginRoutes.php
+++ b/inc/rest/routes/LoginRoutes.php
@@ -4,7 +4,7 @@
 use JVBase\registrar\Registrar;
 use JVBase\rest\Rest;
 use JVBase\rest\Route;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use WP_REST_Request;
 use WP_REST_Response;
 use WP_Error;
@@ -31,7 +31,7 @@
 
 		parent::__construct();
 
-		$this->hasMagicLink = Features::forSite()->has('magicLink');
+		$this->hasMagicLink = Site::has('magicLink');
 	}
 
 	public function registerRoutes(): void
@@ -262,7 +262,7 @@
 		]);
 
 		// Process referral code if provided
-		if (!empty($referral_code) && Features::forSite()->has('referrals')) {
+		if (!empty($referral_code) && Site::has('referrals')) {
 			$this->processReferralCode($user_id, $referral_code);
 		}
 
@@ -649,7 +649,7 @@
 	 */
 	protected function processReferralCode(int $user_id, string $referral_code): void
 	{
-		if (!Features::forSite()->has('referrals')) {
+		if (!Site::has('referrals')) {
 			return;
 		}
 
@@ -734,16 +734,16 @@
 		$nonces = [
 			'wp_rest'	=> wp_create_nonce('wp_rest'),
 		];
-		if (Features::forSite()->has('dashboard')) {
+		if (Site::has('dashboard')) {
 			$nonces['dash'] = wp_create_nonce('dash-'.$userID);
 		}
-		if (Features::forSite()->has('favourites')) {
+		if (Site::has('favourites')) {
 			$nonces['favourites'] = wp_create_nonce('favourites-'.$userID);
 		}
 		if (!empty(Registrar::getFeatured('karma'))) {
 			$nonces['votes'] = wp_create_nonce('votes-'.$userID);
 		}
-		if (Features::forSite()->has('notifications')) {
+		if (Site::has('notifications')) {
 			$nonces['notifications'] = wp_create_nonce('notifications-'.$userID);
 		}
 		return $nonces;
diff --git a/inc/rest/routes/TermRoutes.php b/inc/rest/routes/TermRoutes.php
index f536bba..ac27d9b 100644
--- a/inc/rest/routes/TermRoutes.php
+++ b/inc/rest/routes/TermRoutes.php
@@ -5,7 +5,7 @@
 use JVBase\rest\Rest;
 use JVBase\managers\UserTermsManager;
 use JVBase\rest\Route;
-use JVBase\utility\Features;
+use JVBase\base\Site;
 use WP_REST_Request;
 use WP_REST_Response;
 use Exception;
@@ -736,7 +736,8 @@
 				]]);
 			}
 
-			if (Features::forMembership()->has('term_approval')) {
+			$membership = Site::membership();
+			if ($membership && $membership->has('term_approval')) {
 				$approval_routes = JVB()->routes('approvals');
 				$request_id = $approval_routes->createTermApprovalRequest(
 					$user_id,
diff --git a/jvb.php b/jvb.php
index 3f2b76e..d340bcd 100644
--- a/jvb.php
+++ b/jvb.php
@@ -11,10 +11,9 @@
 
 use JVBase\JVB;
 use JVBase\managers\IconsManager;
-use JVBase\meta\Meta;
 use JVBase\registrar\Registrar;
 
-use JVBase\utility\Features;
+use JVBase\base\Site;
 
 //security
 if (!defined('ABSPATH')) {
@@ -85,9 +84,10 @@
 
 define('JVB_TESTING', str_contains(get_home_url(),'.test'));
 
-if (JVB_TESTING) {
+//if (!JVB_TESTING) {
 	add_filter('show_admin_bar', '__return_false');
-}
+//}
+
 //if (JVB_TESTING) {
 //	error_log('In testing mode...');
 //} else {
@@ -285,7 +285,7 @@
 {
     add_action('wp_head', 'jvbInlineNavStyles');
 
-	if (Features::forSite()->has('dashboard')) {
+	if (Site::has('dashboard')) {
 		wp_enqueue_script('jvb-queue');
 	}
 
@@ -299,13 +299,13 @@
 
 
 	$interactions = [];
-	if (Features::forSite()->has('favourites')) {
+	if (Site::has('favourites')) {
 		$interactions[] = 'favourites';
 	}
 	if (!empty(Registrar::getFeatured('karma'))) {
 		$interactions[] = 'karma';
 	}
-	if (Features::forSite()->has('notifications')) {
+	if (Site::has('notifications')) {
 		$interactions[] = 'notifications';
 	}
 
@@ -332,7 +332,7 @@
 	window.userFavourites = {};
 	window.userVotes = {};
 	';
-	if (Features::forSite()->has('favourites')) {
+	if (Site::has('favourites')) {
 		wp_enqueue_script('jvb-favourites');
 		$initUserSettings .= '
 		//Fetch user favourites
@@ -432,7 +432,7 @@
 //        ');
 //        }
     }
-    if (is_user_logged_in() && Features::forSite()->has('notifications')) {
+    if (is_user_logged_in() && Site::has('notifications')) {
         wp_enqueue_script('jvb-notifications');
 
         wp_localize_script('jvb-notifications', 'notificationSettings', array(

--
Gitblit v1.10.0