Jake Vanderwerf
2026-05-01 11f29668ba55c9ef92865a1cfab3d76b25aef086
=Basic setup. Still need to define fields and SEO settings for most content and taxonomies
3 files deleted
6 files modified
22 files added
2893 ■■■■ changed files
assets/css/icons.css 2 ●●● patch | view | raw | blame | history
assets/icons/edmonton-ink-circle.svg 1 ●●●● patch | view | raw | blame | history
assets/icons/edmonton-ink-logo.svg 5 ●●●●● patch | view | raw | blame | history
blocks/_setup.php 27 ●●●● patch | view | raw | blame | history
content/_setup.php 6 ●●●● patch | view | raw | blame | history
content/artwork.php 125 ●●●●● patch | view | raw | blame | history
content/events.php 137 ●●●●● patch | view | raw | blame | history
content/offers.php 114 ●●●●● patch | view | raw | blame | history
content/piercings.php 110 ●●●●● patch | view | raw | blame | history
content/soap.php 170 ●●●●● patch | view | raw | blame | history
content/tattoos.php 126 ●●●●● patch | view | raw | blame | history
edmontonink.php 212 ●●●●● patch | view | raw | blame | history
taxonomies/_setup.php 21 ●●●●● patch | view | raw | blame | history
taxonomies/art-forms.php 92 ●●●●● patch | view | raw | blame | history
taxonomies/art-styles.php 92 ●●●●● patch | view | raw | blame | history
taxonomies/art-themes.php 92 ●●●●● patch | view | raw | blame | history
taxonomies/artist-types.php 92 ●●●●● patch | view | raw | blame | history
taxonomies/cities.php 92 ●●●●● patch | view | raw | blame | history
taxonomies/colours.php 92 ●●●●● patch | view | raw | blame | history
taxonomies/event-types.php 92 ●●●●● patch | view | raw | blame | history
taxonomies/flags.php 111 ●●●●● patch | view | raw | blame | history
taxonomies/offer-for.php 92 ●●●●● patch | view | raw | blame | history
taxonomies/piercing-placements.php 91 ●●●●● patch | view | raw | blame | history
taxonomies/piercing-styles.php 91 ●●●●● patch | view | raw | blame | history
taxonomies/placements.php 92 ●●●●● patch | view | raw | blame | history
taxonomies/shops.php 99 ●●●●● patch | view | raw | blame | history
taxonomies/styles.php 92 ●●●●● patch | view | raw | blame | history
taxonomies/themes.php 92 ●●●●● patch | view | raw | blame | history
users/_setup.php 13 ●●●●● patch | view | raw | blame | history
users/artists.php 397 ●●●●● patch | view | raw | blame | history
users/client.php 23 ●●●●● patch | view | raw | blame | history
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-sparkle{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xOTYuODksMTMwLjk0LDE0NC40LDExMS42LDEyNS4wNiw1OS4xMWExMy45MiwxMy45MiwwLDAsMC0yNi4xMiwwTDc5LjYsMTExLjYsMjcuMTEsMTMwLjk0YTEzLjkyLDEzLjkyLDAsMCwwLDAsMjYuMTJMNzkuNiwxNzYuNGwxOS4zNCw1Mi40OWExMy45MiwxMy45MiwwLDAsMCwyNi4xMiwwTDE0NC40LDE3Ni40bDUyLjQ5LTE5LjM0YTEzLjkyLDEzLjkyLDAsMCwwLDAtMjYuMTJabS00LjE1LDE0Ljg2LTU1LjA4LDIwLjNhNiw2LDAsMCwwLTMuNTYsMy41NmwtMjAuMyw1NS4wOGExLjkyLDEuOTIsMCwwLDEtMy42LDBMODkuOSwxNjkuNjZhNiw2LDAsMCwwLTMuNTYtMy41NkwzMS4yNiwxNDUuOGExLjkyLDEuOTIsMCwwLDEsMC0zLjZsNTUuMDgtMjAuM2E2LDYsMCwwLDAsMy41Ni0zLjU2bDIwLjMtNTUuMDhhMS45MiwxLjkyLDAsMCwxLDMuNiwwbDIwLjMsNTUuMDhhNiw2LDAsMCwwLDMuNTYsMy41Nmw1NS4wOCwyMC4zYTEuOTIsMS45MiwwLDAsMSwwLDMuNlpNMTQ2LDQwYTYsNiwwLDAsMSw2LTZoMThWMTZhNiw2LDAsMCwxLDEyLDBWMzRoMThhNiw2LDAsMCwxLDAsMTJIMTgyVjY0YTYsNiwwLDAsMS0xMiwwVjQ2SDE1MkE2LDYsMCwwLDEsMTQ2LDQwWk0yNDYsODhhNiw2LDAsMCwxLTYsNkgyMzB2MTBhNiw2LDAsMCwxLTEyLDBWOTRIMjA4YTYsNiwwLDAsMSwwLTEyaDEwVjcyYTYsNiwwLDAsMSwxMiwwVjgyaDEwQTYsNiwwLDAsMSwyNDYsODhaIi8+PC9zdmc+');}.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-x{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMDQuMjQsMTk1Ljc2YTYsNiwwLDEsMS04LjQ4LDguNDhMMTI4LDEzNi40OSw2MC4yNCwyMDQuMjRhNiw2LDAsMCwxLTguNDgtOC40OEwxMTkuNTEsMTI4LDUxLjc2LDYwLjI0YTYsNiwwLDAsMSw4LjQ4LTguNDhMMTI4LDExOS41MWw2Ny43Ni02Ny43NWE2LDYsMCwwLDEsOC40OCw4LjQ4TDEzNi40OSwxMjhaIi8+PC9zdmc+');}.icon-drop-simple{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNzIuNTMsNDkuMDZhMjUxLjQyLDI1MS40MiwwLDAsMC00MS4wOS0zOCw2LDYsMCwwLDAtNi44OCwwLDI1MS40MiwyNTEuNDIsMCwwLDAtNDEuMDksMzhDNTYuMzQsODAuMjYsNDIsMTEzLjA5LDQyLDE0NGE4Niw4NiwwLDAsMCwxNzIsMEMyMTQsMTEzLjA5LDE5OS42Niw4MC4yNiwxNzIuNTMsNDkuMDZaTTEyOCwyMThhNzQuMDksNzQuMDksMCwwLDEtNzQtNzRjMC01OS42Miw1OS0xMDguOTMsNzQtMTIwLjUxQzE0MywzNS4wNywyMDIsODQuMzgsMjAyLDE0NEE3NC4wOSw3NC4wOSwwLDAsMSwxMjgsMjE4WiIvPjwvc3ZnPg==');}.icon-list{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsMTI4YTYsNiwwLDAsMS02LDZINDBhNiw2LDAsMCwxLDAtMTJIMjE2QTYsNiwwLDAsMSwyMjIsMTI4Wk00MCw3MEgyMTZhNiw2LDAsMCwwLDAtMTJINDBhNiw2LDAsMCwwLDAsMTJaTTIxNiwxODZINDBhNiw2LDAsMCwwLDAsMTJIMjE2YTYsNiwwLDAsMCwwLTEyWiIvPjwvc3ZnPg==');}.icon-facebook-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMjgsMjZBMTAyLDEwMiwwLDEsMCwyMzAsMTI4LDEwMi4xMiwxMDIuMTIsMCwwLDAsMTI4LDI2Wm02LDE5MS44VjE1MGgyNmE2LDYsMCwwLDAsMC0xMkgxMzRWMTEyYTE4LDE4LDAsMCwxLDE4LTE4aDE2YTYsNiwwLDAsMCwwLTEySDE1MmEzMCwzMCwwLDAsMC0zMCwzMHYyNkg5NmE2LDYsMCwwLDAsMCwxMmgyNnY2Ny44YTkwLDkwLDAsMSwxLDEyLDBaIi8+PC9zdmc+');}.icon-instagram-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMjgsODJhNDYsNDYsMCwxLDAsNDYsNDZBNDYuMDYsNDYuMDYsMCwwLDAsMTI4LDgyWm0wLDgwYTM0LDM0LDAsMSwxLDM0LTM0QTM0LDM0LDAsMCwxLDEyOCwxNjJaTTE3NiwyNkg4MEE1NC4wNiw1NC4wNiwwLDAsMCwyNiw4MHY5NmE1NC4wNiw1NC4wNiwwLDAsMCw1NCw1NGg5NmE1NC4wNiw1NC4wNiwwLDAsMCw1NC01NFY4MEE1NC4wNiw1NC4wNiwwLDAsMCwxNzYsMjZabTQyLDE1MGE0Miw0MiwwLDAsMS00Miw0Mkg4MGE0Miw0MiwwLDAsMS00Mi00MlY4MEE0Miw0MiwwLDAsMSw4MCwzOGg5NmE0Miw0MiwwLDAsMSw0Miw0MlpNMTkwLDc2YTEwLDEwLDAsMSwxLTEwLTEwQTEwLDEwLDAsMCwxLDE5MCw3NloiLz48L3N2Zz4=');}.icon-star-half-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzkuMTgsOTcuMjZBMTYuMzgsMTYuMzgsMCwwLDAsMjI0LjkyLDg2bC01OS00Ljc2TDE0My4xNCwyNi4xNWExNi4zNiwxNi4zNiwwLDAsMC0zMC4yNywwTDkwLjExLDgxLjIzLDMxLjA4LDg2YTE2LjQ2LDE2LjQ2LDAsMCwwLTkuMzcsMjguODZsNDUsMzguODNMNTMsMjExLjc1YTE2LjQsMTYuNCwwLDAsMCwyNC41LDE3LjgyTDEyOCwxOTguNDlsNTAuNTMsMzEuMDhBMTYuNCwxNi40LDAsMCwwLDIwMywyMTEuNzVsLTEzLjc2LTU4LjA3LDQ1LTM4LjgzQTE2LjQzLDE2LjQzLDAsMCwwLDIzOS4xOCw5Ny4yNlptLTE1LjM0LDUuNDctNDguNyw0MmE4LDgsMCwwLDAtMi41Niw3LjkxbDE0Ljg4LDYyLjhhLjM3LjM3LDAsMCwxLS4xNy40OGMtLjE4LjE0LS4yMy4xMS0uMzgsMGwtNTQuNzItMzMuNjVBOCw4LDAsMCwwLDEyOCwxODEuMVYzMmMuMjQsMCwuMjcuMDguMzUuMjZMMTUzLDkxLjg2YTgsOCwwLDAsMCw2Ljc1LDQuOTJsNjMuOTEsNS4xNmMuMTYsMCwuMjUsMCwuMzQuMjlTMjI0LDEwMi42MywyMjMuODQsMTAyLjczWiIvPjwvc3ZnPg==');}.icon-star-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzQuMjksMTE0Ljg1bC00NSwzOC44M0wyMDMsMjExLjc1YTE2LjQsMTYuNCwwLDAsMS0yNC41LDE3LjgyTDEyOCwxOTguNDksNzcuNDcsMjI5LjU3QTE2LjQsMTYuNCwwLDAsMSw1MywyMTEuNzVsMTMuNzYtNTguMDctNDUtMzguODNBMTYuNDYsMTYuNDYsMCwwLDEsMzEuMDgsODZsNTktNC43NiwyMi43Ni01NS4wOGExNi4zNiwxNi4zNiwwLDAsMSwzMC4yNywwbDIyLjc1LDU1LjA4LDU5LDQuNzZhMTYuNDYsMTYuNDYsMCwwLDEsOS4zNywyOC44NloiLz48L3N2Zz4=');}
.icon-google-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjQsMTI4YTk2LDk2LDAsMSwxLTIxLjk1LTYxLjA5LDgsOCwwLDEsMS0xMi4zMywxMC4xOEE4MCw4MCwwLDEsMCwyMDcuNiwxMzZIMTI4YTgsOCwwLDAsMSwwLTE2aDg4QTgsOCwwLDAsMSwyMjQsMTI4WiIvPjwvc3ZnPg==');}.icon-apple-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjMuMywxNjkuNTlhOC4wNyw4LjA3LDAsMCwwLTIuOC0zLjRDMjAzLjUzLDE1NC41MywyMDAsMTM0LjY0LDIwMCwxMjBjMC0xNy42NywxMy40Ny0zMy4wNiwyMS41LTQwLjY3YTgsOCwwLDAsMCwwLTExLjYyQzIwOC44Miw1NS43NCwxODcuODIsNDgsMTY4LDQ4YTcyLjIsNzIuMiwwLDAsMC00MCwxMi4xMyw3MS41Niw3MS41NiwwLDAsMC05MC43MSw5LjA5QTc0LjYzLDc0LjYzLDAsMCwwLDE2LDEyMy40YTEyNy4wNiwxMjcuMDYsMCwwLDAsNDAuMTQsODkuNzNBMzkuOCwzOS44LDAsMCwwLDgzLjU5LDIyNGg4Ny42OGEzOS44NCwzOS44NCwwLDAsMCwyOS4xMi0xMi41NywxMjUsMTI1LDAsMCwwLDE3LjgyLTI0LjZDMjI1LjIzLDE3NCwyMjQuMzMsMTcyLDIyMy4zLDE2OS41OVptLTM0LjYzLDMwLjk0YTIzLjc2LDIzLjc2LDAsMCwxLTE3LjQsNy40N0g4My41OWEyMy44MiwyMy44MiwwLDAsMS0xNi40NC02LjUxQTExMS4xNCwxMTEuMTQsMCwwLDEsMzIsMTIzLDU4LjUsNTguNSwwLDAsMSw0OC42NSw4MC40Nyw1NC44MSw1NC44MSwwLDAsMSw4OCw2NGguNzhBNTUuNDUsNTUuNDUsMCwwLDEsMTIzLDc2LjI4YTgsOCwwLDAsMCwxMCwwQTU1LjQ0LDU1LjQ0LDAsMCwxLDE2OCw2NGE3MC42NCw3MC42NCwwLDAsMSwzNiwxMC4zNWMtMTMsMTQuNTItMjAsMzAuNDctMjAsNDUuNjUsMCwyMy43Nyw3LjY0LDQyLjczLDIyLjE4LDU1LjNBMTA1LjgyLDEwNS44MiwwLDAsMSwxODguNjcsMjAwLjUzWk0xMjguMjMsMzBBNDAsNDAsMCwwLDEsMTY3LDBoMWE4LDgsMCwwLDEsMCwxNmgtMWEyNCwyNCwwLDAsMC0yMy4yNCwxOCw4LDgsMCwxLDEtMTUuNS00WiIvPjwvc3ZnPg==');}.icon-check-circle{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNzMuNjYsOTguMzRhOCw4LDAsMCwxLDAsMTEuMzJsLTU2LDU2YTgsOCwwLDAsMS0xMS4zMiwwbC0yNC0yNGE4LDgsMCwwLDEsMTEuMzItMTEuMzJMMTEyLDE0OC42OWw1MC4zNC01MC4zNUE4LDgsMCwwLDEsMTczLjY2LDk4LjM0Wk0yMzIsMTI4QTEwNCwxMDQsMCwxLDEsMTI4LDI0LDEwNC4xMSwxMDQuMTEsMCwwLDEsMjMyLDEyOFptLTE2LDBhODgsODgsMCwxLDAtODgsODhBODguMSw4OC4xLDAsMCwwLDIxNiwxMjhaIi8+PC9zdmc+');}.icon-cloud-slash{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik01My45MiwzNC42MkE4LDgsMCwxLDAsNDIuMDgsNDUuMzhMODEuMzIsODguNTVsLS4wNi4xMkE2NSw2NSwwLDAsMCw3Miw4OGE2NCw2NCwwLDAsMCwwLDEyOGg4OGE4Ny4zNCw4Ny4zNCwwLDAsMCwzMS44LTUuOTNsMTAuMjgsMTEuMzFhOCw4LDAsMSwwLDExLjg0LTEwLjc2Wk0xNjAsMjAwSDcyYTQ4LDQ4LDAsMCwxLDAtOTZjMS4xLDAsMi4yLDAsMy4zLjEyQTg4LjQsODguNCwwLDAsMCw3MiwxMjhhOCw4LDAsMCwwLDE2LDAsNzIuMjUsNzIuMjUsMCwwLDEsNS4wNi0yNi41NGw4Nyw5NS43QTcxLjY2LDcxLjY2LDAsMCwxLDE2MCwyMDBabTg4LTcyYTg3Ljg5LDg3Ljg5LDAsMCwxLTIyLjM1LDU4LjYxQTgsOCwwLDAsMSwyMTMuNzEsMTc2LDcyLDcyLDAsMCwwLDExNy4zNyw3MGE4LDgsMCwwLDEtOS40OC0xMi44OUE4OCw4OCwwLDAsMSwyNDgsMTI4WiIvPjwvc3ZnPg==');}.icon-exclamation-mark{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNDQsMjAwYTE2LDE2LDAsMSwxLTE2LTE2QTE2LDE2LDAsMCwxLDE0NCwyMDBabS0xNi00MGE4LDgsMCwwLDAsOC04VjQ4YTgsOCwwLDAsMC0xNiwwVjE1MkE4LDgsMCwwLDAsMTI4LDE2MFoiLz48L3N2Zz4=');}.icon-cloud-arrow-down{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDgsMTI4YTg3LjM0LDg3LjM0LDAsMCwxLTE3LjYsNTIuODEsOCw4LDAsMSwxLTEyLjgtOS42MkE3MS4zNCw3MS4zNCwwLDAsMCwyMzIsMTI4YTcyLDcyLDAsMCwwLTE0NCwwLDgsOCwwLDAsMS0xNiwwLDg4LDg4LDAsMCwxLDMuMjktMjMuODhDNzQuMiwxMDQsNzMuMSwxMDQsNzIsMTA0YTQ4LDQ4LDAsMCwwLDAsOTZIOTZhOCw4LDAsMCwxLDAsMTZINzJBNjQsNjQsMCwxLDEsODEuMjksODguNjgsODgsODgsMCwwLDEsMjQ4LDEyOFptLTY5LjY2LDQyLjM0TDE2MCwxODguNjlWMTI4YTgsOCwwLDAsMC0xNiwwdjYwLjY5bC0xOC4zNC0xOC4zNWE4LDgsMCwwLDAtMTEuMzIsMTEuMzJsMzIsMzJhOCw4LDAsMCwwLDExLjMyLDBsMzItMzJhOCw4LDAsMCwwLTExLjMyLTExLjMyWiIvPjwvc3ZnPg==');}.icon-caret-down{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTMuNjYsMTAxLjY2bC04MCw4MGE4LDgsMCwwLDEtMTEuMzIsMGwtODAtODBBOCw4LDAsMCwxLDUzLjY2LDkwLjM0TDEyOCwxNjQuNjlsNzQuMzQtNzQuMzVhOCw4LDAsMCwxLDExLjMyLDExLjMyWiIvPjwvc3ZnPg==');}.icon-cloud-arrow-up{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNzguMzQsMTY1LjY2LDE2MCwxNDcuMzFWMjA4YTgsOCwwLDAsMS0xNiwwVjE0Ny4zMWwtMTguMzQsMTguMzVhOCw4LDAsMCwxLTExLjMyLTExLjMybDMyLTMyYTgsOCwwLDAsMSwxMS4zMiwwbDMyLDMyYTgsOCwwLDAsMS0xMS4zMiwxMS4zMlpNMTYwLDQwQTg4LjA4LDg4LjA4LDAsMCwwLDgxLjI5LDg4LjY4LDY0LDY0LDAsMSwwLDcyLDIxNmg0MGE4LDgsMCwwLDAsMC0xNkg3MmE0OCw0OCwwLDAsMSwwLTk2YzEuMSwwLDIuMiwwLDMuMjkuMTJBODgsODgsMCwwLDAsNzIsMTI4YTgsOCwwLDAsMCwxNiwwLDcyLDcyLDAsMSwxLDEwMC44LDY2LDgsOCwwLDAsMCwzLjIsMTUuMzQsNy45LDcuOSwwLDAsMCwzLjItLjY4QTg4LDg4LDAsMCwwLDE2MCw0MFoiLz48L3N2Zz4=');}.icon-cloud-check{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDBBODguMDksODguMDksMCwwLDAsODEuMjksODguNjcsNjQsNjQsMCwxLDAsNzIsMjE2aDg4YTg4LDg4LDAsMCwwLDAtMTc2Wm0wLDE2MEg3MmE0OCw0OCwwLDAsMSwwLTk2YzEuMSwwLDIuMiwwLDMuMjkuMTFBODgsODgsMCwwLDAsNzIsMTI4YTgsOCwwLDAsMCwxNiwwLDcyLDcyLDAsMSwxLDcyLDcyWm0zNy42Ni05My42NmE4LDgsMCwwLDEsMCwxMS4zMmwtNDgsNDhhOCw4LDAsMCwxLTExLjMyLDBsLTI0LTI0YTgsOCwwLDAsMSwxMS4zMi0xMS4zMkwxNDQsMTQ4LjY5bDQyLjM0LTQyLjM1QTgsOCwwLDAsMSwxOTcuNjYsMTA2LjM0WiIvPjwvc3ZnPg==');}.icon-cloud-warning{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDBBODguMDksODguMDksMCwwLDAsODEuMjksODguNjcsNjQsNjQsMCwxLDAsNzIsMjE2aDg4YTg4LDg4LDAsMCwwLDAtMTc2Wm0wLDE2MEg3MmE0OCw0OCwwLDAsMSwwLTk2YzEuMSwwLDIuMiwwLDMuMjkuMTFBODgsODgsMCwwLDAsNzIsMTI4YTgsOCwwLDAsMCwxNiwwLDcyLDcyLDAsMSwxLDcyLDcyWm0tOC03MlY4OGE4LDgsMCwwLDEsMTYsMHY0MGE4LDgsMCwwLDEtMTYsMFptMjAsMzZhMTIsMTIsMCwxLDEtMTItMTJBMTIsMTIsMCwwLDEsMTcyLDE2NFoiLz48L3N2Zz4=');}.icon-syncing{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0iY3VycmVudENvbG9yIiB2aWV3Qm94PSIwIDAgMjU2IDI1NiI+PHBhdGggaWQ9InJlZnJlc2giIGQ9Ik0xNjAuMDQ3IDEyMi44NzVhMzAuNzg0IDMwLjc4NCAwIDAgMC0yMS43NSA4Ljc5N2MtMi44NDIgMy4wMDMtLjQ2NyA0Ljk3MSAxLjMxMiAzLjE1NiAxMS4wNDMtMTAuNzg2IDI4LjcxLTEwLjY4IDM5LjYyNS4yMzRsNy4yMDMgNy4yMDRoLTEyLjg3NWMtMy4zNDcuMDA4LTMuMTY1IDMuODc1IDAgMy44NzVoMTYuMTFjMi4wNjIgMCAyLjU0LTEuNDE4IDIuNTYyLTQuOTdsLjA5NC0xNC45MjFjLjAyLTMuMjktMy40MzctMy4xNjUtMy40MzcgMHYxMi44NmwtNy4yMDMtNy4xODhhMzAuNzY4IDMwLjc2OCAwIDAgMC0yMS42NDEtOS4wNDd6bS0yOS41OTQgMzkuNzk3Yy0yLjA2MiAwLTIuNTI0IDEuNDAyLTIuNTQ3IDQuOTUzbC0uMDk0IDE0LjkyMmMtLjAyIDMuMjkgMy40MjIgMy4xNjQgMy40MjIgMHYtMTIuODZsNy4yMDMgNy4yMDRjMTEuOTU2IDExLjk1NSAzMS4zMTIgMTIuMDY0IDQzLjQwNy4yNSAyLjg0Mi0zLjAwMy40NTEtNC45ODgtMS4zMjgtMy4xNzItMTEuMDQzIDEwLjc4Ni0yOC43MSAxMC42OC0zOS42MjUtLjIzNWwtNy4xODgtNy4yMDNoMTIuODZjMy4zNDctLjAwOCAzLjE2NS0zLjg2IDAtMy44NmgtMTYuMTF6Ii8+PHBhdGggZD0iTTE2MCA0NGE4NC4xMSA4NC4xMSAwIDAgMC03Ni40MSA0OS4xMkE2MC43MSA2MC43MSAwIDAgMCA3MiA5MmE2MCA2MCAwIDAgMCAwIDEyMGg4OGE4NCA4NCAwIDAgMCAwLTE2OFptMCAxNjBINzJhNTIgNTIgMCAxIDEgOC41NS0xMDMuM0E4My42NiA4My42NiAwIDAgMCA3NiAxMjhhNCA0IDAgMCAwIDggMCA3NiA3NiAwIDEgMSA3NiA3NloiLz48L3N2Zz4=');}.icon-cloud-x{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDBBODguMDksODguMDksMCwwLDAsODEuMjksODguNjcsNjQsNjQsMCwxLDAsNzIsMjE2aDg4YTg4LDg4LDAsMCwwLDAtMTc2Wm0wLDE2MEg3MmE0OCw0OCwwLDAsMSwwLTk2YzEuMSwwLDIuMiwwLDMuMjkuMTFBODgsODgsMCwwLDAsNzIsMTI4YTgsOCwwLDAsMCwxNiwwLDcyLDcyLDAsMSwxLDcyLDcyWm0yOS42Ni04Mi4zNEwxNzEuMzEsMTM2bDE4LjM1LDE4LjM0YTgsOCwwLDAsMS0xMS4zMiwxMS4zMkwxNjAsMTQ3LjMxbC0xOC4zNCwxOC4zNWE4LDgsMCwwLDEtMTEuMzItMTEuMzJMMTQ4LjY5LDEzNmwtMTguMzUtMTguMzRhOCw4LDAsMCwxLDExLjMyLTExLjMyTDE2MCwxMjQuNjlsMTguMzQtMTguMzVhOCw4LDAsMCwxLDExLjMyLDExLjMyWiIvPjwvc3ZnPg==');}.icon-arrows-clockwise{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjQsNDhWOTZhOCw4LDAsMCwxLTgsOEgxNjhhOCw4LDAsMCwxLDAtMTZoMjguNjlMMTgyLjA2LDczLjM3YTc5LjU2LDc5LjU2LDAsMCwwLTU2LjEzLTIzLjQzaC0uNDVBNzkuNTIsNzkuNTIsMCwwLDAsNjkuNTksNzIuNzEsOCw4LDAsMCwxLDU4LjQxLDYxLjI3YTk2LDk2LDAsMCwxLDEzNSwuNzlMMjA4LDc2LjY5VjQ4YTgsOCwwLDAsMSwxNiwwWk0xODYuNDEsMTgzLjI5YTgwLDgwLDAsMCwxLTExMi40Ny0uNjZMNTkuMzEsMTY4SDg4YTgsOCwwLDAsMCwwLTE2SDQwYTgsOCwwLDAsMC04LDh2NDhhOCw4LDAsMCwwLDE2LDBWMTc5LjMxbDE0LjYzLDE0LjYzQTk1LjQzLDk1LjQzLDAsMCwwLDEzMCwyMjIuMDZoLjUzYTk1LjM2LDk1LjM2LDAsMCwwLDY3LjA3LTI3LjMzLDgsOCwwLDAsMC0xMS4xOC0xMS40NFoiLz48L3N2Zz4=');}.icon-share-fat{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzcuNjYsMTA2LjM1bC04MC04MEE4LDgsMCwwLDAsMTQ0LDMyVjcyLjM1Yy0yNS45NCwyLjIyLTU0LjU5LDE0LjkyLTc4LjE2LDM0LjkxLTI4LjM4LDI0LjA4LTQ2LjA1LDU1LjExLTQ5Ljc2LDg3LjM3YTEyLDEyLDAsMCwwLDIwLjY4LDkuNThoMGMxMS0xMS43MSw1MC4xNC00OC43NCwxMDcuMjQtNTJWMTkyYTgsOCwwLDAsMCwxMy42Niw1LjY1bDgwLTgwQTgsOCwwLDAsMCwyMzcuNjYsMTA2LjM1Wk0xNjAsMTcyLjY5VjE0NGE4LDgsMCwwLDAtOC04Yy0yOC4wOCwwLTU1LjQzLDcuMzMtODEuMjksMjEuOGExOTYuMTcsMTk2LjE3LDAsMCwwLTM2LjU3LDI2LjUyYzUuOC0yMy44NCwyMC40Mi00Ni41MSw0Mi4wNS02NC44NkM5OS40MSw5OS43NywxMjcuNzUsODgsMTUyLDg4YTgsOCwwLDAsMCw4LThWNTEuMzJMMjIwLjY5LDExMloiLz48L3N2Zz4=');}.icon-trash{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTYsNDhIMTc2VjQwYTI0LDI0LDAsMCwwLTI0LTI0SDEwNEEyNCwyNCwwLDAsMCw4MCw0MHY4SDQwYTgsOCwwLDAsMCwwLDE2aDhWMjA4YTE2LDE2LDAsMCwwLDE2LDE2SDE5MmExNiwxNiwwLDAsMCwxNi0xNlY2NGg4YTgsOCwwLDAsMCwwLTE2Wk05Niw0MGE4LDgsMCwwLDEsOC04aDQ4YTgsOCwwLDAsMSw4LDh2OEg5NlptOTYsMTY4SDY0VjY0SDE5MlpNMTEyLDEwNHY2NGE4LDgsMCwwLDEtMTYsMFYxMDRhOCw4LDAsMCwxLDE2LDBabTQ4LDB2NjRhOCw4LDAsMCwxLTE2LDBWMTA0YTgsOCwwLDAsMSwxNiwwWiIvPjwvc3ZnPg==');}.icon-star{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzkuMTgsOTcuMjZBMTYuMzgsMTYuMzgsMCwwLDAsMjI0LjkyLDg2bC01OS00Ljc2TDE0My4xNCwyNi4xNWExNi4zNiwxNi4zNiwwLDAsMC0zMC4yNywwTDkwLjExLDgxLjIzLDMxLjA4LDg2YTE2LjQ2LDE2LjQ2LDAsMCwwLTkuMzcsMjguODZsNDUsMzguODNMNTMsMjExLjc1YTE2LjM4LDE2LjM4LDAsMCwwLDI0LjUsMTcuODJMMTI4LDE5OC40OWw1MC41MywzMS4wOEExNi40LDE2LjQsMCwwLDAsMjAzLDIxMS43NWwtMTMuNzYtNTguMDcsNDUtMzguODNBMTYuNDMsMTYuNDMsMCwwLDAsMjM5LjE4LDk3LjI2Wm0tMTUuMzQsNS40Ny00OC43LDQyYTgsOCwwLDAsMC0yLjU2LDcuOTFsMTQuODgsNjIuOGEuMzcuMzcsMCwwLDEtLjE3LjQ4Yy0uMTguMTQtLjIzLjExLS4zOCwwbC01NC43Mi0zMy42NWE4LDgsMCwwLDAtOC4zOCwwTDY5LjA5LDIxNS45NGMtLjE1LjA5LS4xOS4xMi0uMzgsMGEuMzcuMzcsMCwwLDEtLjE3LS40OGwxNC44OC02Mi44YTgsOCwwLDAsMC0yLjU2LTcuOTFsLTQ4LjctNDJjLS4xMi0uMS0uMjMtLjE5LS4xMy0uNXMuMTgtLjI3LjMzLS4yOWw2My45Mi01LjE2QTgsOCwwLDAsMCwxMDMsOTEuODZsMjQuNjItNTkuNjFjLjA4LS4xNy4xMS0uMjUuMzUtLjI1cy4yNy4wOC4zNS4yNUwxNTMsOTEuODZhOCw4LDAsMCwwLDYuNzUsNC45Mmw2My45Miw1LjE2Yy4xNSwwLC4yNCwwLC4zMy4yOVMyMjQsMTAyLjYzLDIyMy44NCwxMDIuNzNaIi8+PC9zdmc+');}.icon-alphabetical{--icon:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIGZpbGw9ImN1cnJlbnRDb2xvciIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTgzLjc4IDE4NC4wNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtNTkuNTg2IDY5Ljc0MmMtMC44NTEzIDAtMS40NjEgMC4xOTY1Ni0xLjgzNjYgMC41OTcxOC0wLjM1MDU0IDAuMzc1NTgtMC41Mjk1OCAxLjAyMjktMC41Mjk1OCAxLjk0OTNzMC4xNzkwMyAxLjU5MzcgMC41Mjk1OCAxLjk5NDRjMC4zNzU1OCAwLjM3NTU4IDAuOTg1MjkgMC41NjMzOCAxLjgzNjYgMC41NjMzOGg3LjAxOTdsLTEyLjQyOCAzNC4zNjZoLTIuMTA3Yy0wLjg1MTMgMC0xLjQ2MSAwLjE5NjU2LTEuODM2NiAwLjU5NzE4LTAuMzUwNTQgMC4zNzU1OC0wLjUyOTU3IDEuMDM0MS0wLjUyOTU3IDEuOTYwNiAwIDAuOTI2NDQgMC4xNzkwMyAxLjU4MjUgMC41Mjk1NyAxLjk4MyAwLjM3NTU4IDAuMzc1NTkgMC45ODUyOSAwLjU2MzM4IDEuODM2NiAwLjU2MzM4aDEyLjU1MmMwLjg1MTMgMCAxLjQ1MjItMC4xODc3OSAxLjgwMjgtMC41NjMzOCAwLjM3NTU4LTAuNDAwNjIgMC41NjMzNy0xLjA1NjYgMC41NjMzNy0xLjk4MyAwLTAuOTI2NDUtMC4xODc3OS0xLjU4NS0wLjU2MzM3LTEuOTYwNi0wLjM1MDU0LTAuNDAwNjItMC45NTE0Ny0wLjU5NzE4LTEuODAyOC0wLjU5NzE4aC00LjU1MjFsMy4xMjExLTguOTM0OWgxOC4yMmwzLjA3NiA4LjkzNDloLTUuMDcwNGMtMC44NTEzIDAtMS40NjEgMC4xOTY1Ni0xLjgzNjYgMC41OTcxOC0wLjM1MDU0IDAuMzc1NTgtMC41Mjk1OCAxLjAzNDEtMC41Mjk1OCAxLjk2MDYgMCAwLjkyNjQ0IDAuMTc5MDMgMS41ODI1IDAuNTI5NTggMS45ODMgMC4zNzU1OCAwLjM3NTU5IDAuOTg1MjkgMC41NjMzOCAxLjgzNjYgMC41NjMzOGgxMy4yOTZjMC44NTEzIDAgMS40NTIyLTAuMTg3NzkgMS44MDI4LTAuNTYzMzggMC4zNzU1OC0wLjQwMDYyIDAuNTYzMzctMS4wNTY2IDAuNTYzMzctMS45ODMgMC0wLjkyNjQ1LTAuMTg3NzktMS41ODUtMC41NjMzNy0xLjk2MDYtMC4zNTA1NC0wLjQwMDYyLTAuOTUxNDctMC41OTcxOC0xLjgwMjgtMC41OTcxOGgtMi4yODczbC0xMy4yNjItMzcuMDM2Yy0wLjMwMDQ3LTAuODUxMy0wLjc1OTk0LTEuNDYxLTEuMzg1OS0xLjgzNjYtMC42MDA5My0wLjQwMDYyLTEuNDA5Ny0wLjU5NzE4LTIuNDExMy0wLjU5NzE4em00NC4xNDYgMGMtMC44NTEzIDAtMS40NzIzIDAuMTk2NTYtMS44NDc4IDAuNTk3MTgtMC4zNTA1NSAwLjM3NTU4LTAuNTE4MyAxLjAyMjktMC41MTgzIDEuOTQ5M3YxMS45MWMwIDAuODc2MzMgMC4yMDUzMiAxLjUwNjEgMC42MzA5OCAxLjg4MTcgMC40MjU2NiAwLjM3NTU4IDEuMTU5MyAwLjU2MzM3IDIuMTg1OSAwLjU2MzM3czEuNzQ5LTAuMTg3NzkgMi4xNzQ3LTAuNTYzMzdjMC40MjU2OS0wLjM3NTU4IDAuNjQyMjYtMS4wMDUzIDAuNjQyMjYtMS44ODE3di05LjM1MTdoMTguODUxbC0yNC43NTQgMzUuMzAxYy0wLjM1MDU0IDAuNTI1ODItMC41MTgzMSAxLjA3MTctMC41MTgzMSAxLjYyMjYgMCAwLjkyNjQ1IDAuMTY3NzcgMS41ODI1IDAuNTE4MzEgMS45ODMxIDAuMzc1NTggMC4zNzU1OCAwLjk5NjU0IDAuNTYzMzggMS44NDc4IDAuNTYzMzhoMjguNzY2YzAuODUxMyAwIDEuNDUyMi0wLjE4NzggMS44MDI4LTAuNTYzMzggMC4zNzU1OC0wLjQwMDYyIDAuNTYzMzgtMS4wNTY2IDAuNTYzMzgtMS45ODMxdi0xMi42NjVjMC0wLjg3NjMzLTAuMjE2NTgtMS40OTQ4LTAuNjQyMjUtMS44NzA0LTAuNDI1NjYtMC4zNzU1OC0xLjE0OC0wLjU2MzM4LTIuMTc0Ny0wLjU2MzM4LTEuMDI2NiAwLTEuNzQ5IDAuMTg3NzktMi4xNzQ3IDAuNTYzMzgtMC40MjU2NiAwLjM3NTU4LTAuNjQyMjQgMC45OTQwMi0wLjY0MjI0IDEuODcwNHYxMC4xMDdoLTE5Ljk3OGwyNC45MDEtMzUuNDU5YzAuMjUwMzktMC4zNTA1NCAwLjM3MTgzLTAuODM4ODMgMC4zNzE4My0xLjQ2NDggMC0wLjkyNjQ1LTAuMTg3OC0xLjU3MzctMC41NjMzOC0xLjk0OTMtMC4zNTA1NS0wLjQwMDYyLTAuOTUxNDctMC41OTcxOC0xLjgwMjgtMC41OTcxOHptLTMxLjc1MiA1LjEwNDJoMC43MDk4NWw2Ljk4NTkgMjAuMzE1aC0xNC43MTZ6bS0zNy43MjMtNDkuMTgzYy00LjczNDIgMC04LjYzMTMgMy44OTctOC42MzEzIDguNjMxM3YxMTUuNDdjMCA0LjczNDIgMy44OTcgOC42MzEzIDguNjMxMyA4LjYzMTNoMTE1LjI2YzQuNzM0MiAwIDguNjQyMS0zLjg5NyA4LjY0MjEtOC42MzEzdi0xMTUuNDdjMC00LjczNDItMy45MDgyLTguNjMxMy04LjY0MjEtOC42MzEzem0wIDUuNzI0aDExNS4yNmMxLjY1OCAwIDIuOTA3IDEuMjQ5MSAyLjkwNyAyLjkwNzF2MTE1LjQ3YzAgMS42NTgtMS4yNDkxIDIuOTA3LTIuOTA3IDIuOTA3aC0xMTUuMjZjLTEuNjU4IDAtMi44OTU4LTEuMjQ5MS0yLjg5NTgtMi45MDd2LTExNS40N2MwLTEuNjU4IDEuMjM3OC0yLjkwNzEgMi44OTU4LTIuOTA3MXoiIGZpbGw9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIuNzIxMTQiLz48L3N2Zz4=');}.icon-magic-wand{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik00OCw2NGE4LDgsMCwwLDEsOC04SDcyVjQwYTgsOCwwLDAsMSwxNiwwVjU2aDE2YTgsOCwwLDAsMSwwLDE2SDg4Vjg4YTgsOCwwLDAsMS0xNiwwVjcySDU2QTgsOCwwLDAsMSw0OCw2NFpNMTg0LDE5MmgtOHYtOGE4LDgsMCwwLDAtMTYsMHY4aC04YTgsOCwwLDAsMCwwLDE2aDh2OGE4LDgsMCwwLDAsMTYsMHYtOGg4YTgsOCwwLDAsMCwwLTE2Wm01Ni00OEgyMjRWMTI4YTgsOCwwLDAsMC0xNiwwdjE2SDE5MmE4LDgsMCwwLDAsMCwxNmgxNnYxNmE4LDgsMCwwLDAsMTYsMFYxNjBoMTZhOCw4LDAsMCwwLDAtMTZaTTIxOS4zMSw4MCw4MCwyMTkuMzFhMTYsMTYsMCwwLDEtMjIuNjIsMEwzNi42OCwxOTguNjNhMTYsMTYsMCwwLDEsMC0yMi42M0wxNzYsMzYuNjlhMTYsMTYsMCwwLDEsMjIuNjMsMGwyMC42OCwyMC42OEExNiwxNiwwLDAsMSwyMTkuMzEsODBabS01NC42MywzMkwxNDQsOTEuMzFsLTk2LDk2TDY4LjY4LDIwOFpNMjA4LDY4LjY5LDE4Ny4zMSw0OGwtMzIsMzJMMTc2LDEwMC42OVoiLz48L3N2Zz4=');}.icon-sun-dim{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMjAsNDBWMzJhOCw4LDAsMCwxLDE2LDB2OGE4LDgsMCwwLDEtMTYsMFptNzIsODhhNjQsNjQsMCwxLDEtNjQtNjRBNjQuMDcsNjQuMDcsMCwwLDEsMTkyLDEyOFptLTE2LDBhNDgsNDgsMCwxLDAtNDgsNDhBNDguMDUsNDguMDUsMCwwLDAsMTc2LDEyOFpNNTguMzQsNjkuNjZBOCw4LDAsMCwwLDY5LjY2LDU4LjM0bC04LThBOCw4LDAsMCwwLDUwLjM0LDYxLjY2Wm0wLDExNi42OC04LDhhOCw4LDAsMCwwLDExLjMyLDExLjMybDgtOGE4LDgsMCwwLDAtMTEuMzItMTEuMzJaTTE5Miw3MmE4LDgsMCwwLDAsNS42Ni0yLjM0bDgtOGE4LDgsMCwwLDAtMTEuMzItMTEuMzJsLTgsOEE4LDgsMCwwLDAsMTkyLDcyWm01LjY2LDExNC4zNGE4LDgsMCwwLDAtMTEuMzIsMTEuMzJsOCw4YTgsOCwwLDAsMCwxMS4zMi0xMS4zMlpNNDAsMTIwSDMyYTgsOCwwLDAsMCwwLDE2aDhhOCw4LDAsMCwwLDAtMTZabTg4LDg4YTgsOCwwLDAsMC04LDh2OGE4LDgsMCwwLDAsMTYsMHYtOEE4LDgsMCwwLDAsMTI4LDIwOFptOTYtODhoLThhOCw4LDAsMCwwLDAsMTZoOGE4LDgsMCwwLDAsMC0xNloiLz48L3N2Zz4=');}.icon-moon{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzMuNTQsMTQyLjIzYTgsOCwwLDAsMC04LTIsODguMDgsODguMDgsMCwwLDEtMTA5LjgtMTA5LjgsOCw4LDAsMCwwLTEwLTEwLDEwNC44NCwxMDQuODQsMCwwLDAtNTIuOTEsMzdBMTA0LDEwNCwwLDAsMCwxMzYsMjI0YTEwMy4wOSwxMDMuMDksMCwwLDAsNjIuNTItMjAuODgsMTA0Ljg0LDEwNC44NCwwLDAsMCwzNy01Mi45MUE4LDgsMCwwLDAsMjMzLjU0LDE0Mi4yM1pNMTg4LjksMTkwLjM0QTg4LDg4LDAsMCwxLDY1LjY2LDY3LjExYTg5LDg5LDAsMCwxLDMxLjQtMjZBMTA2LDEwNiwwLDAsMCw5Niw1NiwxMDQuMTEsMTA0LjExLDAsMCwwLDIwMCwxNjBhMTA2LDEwNiwwLDAsMCwxNC45Mi0xLjA2QTg5LDg5LDAsMCwxLDE4OC45LDE5MC4zNFoiLz48L3N2Zz4=');}.icon-house{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTkuMzEsMTA4LjY4bC04MC04MGExNiwxNiwwLDAsMC0yMi42MiwwbC04MCw4MEExNS44NywxNS44NywwLDAsMCwzMiwxMjB2OTZhOCw4LDAsMCwwLDgsOGg2NGE4LDgsMCwwLDAsOC04VjE2MGgzMnY1NmE4LDgsMCwwLDAsOCw4aDY0YTgsOCwwLDAsMCw4LThWMTIwQTE1Ljg3LDE1Ljg3LDAsMCwwLDIxOS4zMSwxMDguNjhaTTIwOCwyMDhIMTYwVjE1MmE4LDgsMCwwLDAtOC04SDEwNGE4LDgsMCwwLDAtOCw4djU2SDQ4VjEyMGw4MC04MCw4MCw4MFoiLz48L3N2Zz4=');}.icon-floppy-disk{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTkuMzEsNzIsMTg0LDM2LjY5QTE1Ljg2LDE1Ljg2LDAsMCwwLDE3Mi42OSwzMkg0OEExNiwxNiwwLDAsMCwzMiw0OFYyMDhhMTYsMTYsMCwwLDAsMTYsMTZIMjA4YTE2LDE2LDAsMCwwLDE2LTE2VjgzLjMxQTE1Ljg2LDE1Ljg2LDAsMCwwLDIxOS4zMSw3MlpNMTY4LDIwOEg4OFYxNTJoODBabTQwLDBIMTg0VjE1MmExNiwxNiwwLDAsMC0xNi0xNkg4OGExNiwxNiwwLDAsMC0xNiwxNnY1Nkg0OFY0OEgxNzIuNjlMMjA4LDgzLjMxWk0xNjAsNzJhOCw4LDAsMCwxLTgsOEg5NmE4LDgsMCwwLDEsMC0xNmg1NkE4LDgsMCwwLDEsMTYwLDcyWiIvPjwvc3ZnPg==');}.icon-clock{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMjgsMjRBMTA0LDEwNCwwLDEsMCwyMzIsMTI4LDEwNC4xMSwxMDQuMTEsMCwwLDAsMTI4LDI0Wm0wLDE5MmE4OCw4OCwwLDEsMSw4OC04OEE4OC4xLDg4LjEsMCwwLDEsMTI4LDIxNlptNjQtODhhOCw4LDAsMCwxLTgsOEgxMjhhOCw4LDAsMCwxLTgtOFY3MmE4LDgsMCwwLDEsMTYsMHY0OGg0OEE4LDgsMCwwLDEsMTkyLDEyOFoiLz48L3N2Zz4=');}.icon-x-square{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMDgsMzJINDhBMTYsMTYsMCwwLDAsMzIsNDhWMjA4YTE2LDE2LDAsMCwwLDE2LDE2SDIwOGExNiwxNiwwLDAsMCwxNi0xNlY0OEExNiwxNiwwLDAsMCwyMDgsMzJabTAsMTc2SDQ4VjQ4SDIwOFYyMDhaTTE2NS42NiwxMDEuNjYsMTM5LjMxLDEyOGwyNi4zNSwyNi4zNGE4LDgsMCwwLDEtMTEuMzIsMTEuMzJMMTI4LDEzOS4zMWwtMjYuMzQsMjYuMzVhOCw4LDAsMCwxLTExLjMyLTExLjMyTDExNi42OSwxMjgsOTAuMzQsMTAxLjY2YTgsOCwwLDAsMSwxMS4zMi0xMS4zMkwxMjgsMTE2LjY5bDI2LjM0LTI2LjM1YTgsOCwwLDAsMSwxMS4zMiwxMS4zMloiLz48L3N2Zz4=');}.icon-eye-closed{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjgsMTc1YTgsOCwwLDAsMS0xMC45Mi0zbC0xOS0zMy4yQTEyMy4yMywxMjMuMjMsMCwwLDEsMTYyLDE1NS40Nmw1Ljg3LDM1LjIyYTgsOCwwLDAsMS02LjU4LDkuMjFBOC40LDguNCwwLDAsMSwxNjAsMjAwYTgsOCwwLDAsMS03Ljg4LTYuNjlsLTUuNzctMzQuNThhMTMzLjA2LDEzMy4wNiwwLDAsMS0zNi42OCwwbC01Ljc3LDM0LjU4QTgsOCwwLDAsMSw5NiwyMDBhOC40LDguNCwwLDAsMS0xLjMyLS4xMSw4LDgsMCwwLDEtNi41OC05LjIxTDk0LDE1NS40NmExMjMuMjMsMTIzLjIzLDAsMCwxLTM2LjA2LTE2LjY5TDM5LDE3MkE4LDgsMCwxLDEsMjUuMDYsMTY0bDIwLTM1YTE1My40NywxNTMuNDcsMCwwLDEtMTkuMy0yMEE4LDgsMCwxLDEsMzguMjIsOTljMTYuNiwyMC41NCw0NS42NCw0NSw4OS43OCw0NXM3My4xOC0yNC40OSw4OS43OC00NUE4LDgsMCwxLDEsMjMwLjIyLDEwOWExNTMuNDcsMTUzLjQ3LDAsMCwxLTE5LjMsMjBsMjAsMzVBOCw4LDAsMCwxLDIyOCwxNzVaIi8+PC9zdmc+');}.icon-x{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMDUuNjYsMTk0LjM0YTgsOCwwLDAsMS0xMS4zMiwxMS4zMkwxMjgsMTM5LjMxLDYxLjY2LDIwNS42NmE4LDgsMCwwLDEtMTEuMzItMTEuMzJMMTE2LjY5LDEyOCw1MC4zNCw2MS42NkE4LDgsMCwwLDEsNjEuNjYsNTAuMzRMMTI4LDExNi42OWw2Ni4zNC02Ni4zNWE4LDgsMCwwLDEsMTEuMzIsMTEuMzJMMTM5LjMxLDEyOFoiLz48L3N2Zz4=');}.icon-drop-simple{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNzQsNDcuNzVhMjU0LjE5LDI1NC4xOSwwLDAsMC00MS40NS0zOC4zLDgsOCwwLDAsMC05LjE4LDBBMjU0LjE5LDI1NC4xOSwwLDAsMCw4Miw0Ny43NUM1NC41MSw3OS4zMiw0MCwxMTIuNiw0MCwxNDRhODgsODgsMCwwLDAsMTc2LDBDMjE2LDExMi42LDIwMS40OSw3OS4zMiwxNzQsNDcuNzVaTTEyOCwyMTZhNzIuMDgsNzIuMDgsMCwwLDEtNzItNzJjMC01Ny4yMyw1NS40Ny0xMDUsNzItMTE4LDE2LjUzLDEzLDcyLDYwLjc1LDcyLDExOEE3Mi4wOCw3Mi4wOCwwLDAsMSwxMjgsMjE2WiIvPjwvc3ZnPg==');}.icon-x-circle{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjUuNjYsMTAxLjY2LDEzOS4zMSwxMjhsMjYuMzUsMjYuMzRhOCw4LDAsMCwxLTExLjMyLDExLjMyTDEyOCwxMzkuMzFsLTI2LjM0LDI2LjM1YTgsOCwwLDAsMS0xMS4zMi0xMS4zMkwxMTYuNjksMTI4LDkwLjM0LDEwMS42NmE4LDgsMCwwLDEsMTEuMzItMTEuMzJMMTI4LDExNi42OWwyNi4zNC0yNi4zNWE4LDgsMCwwLDEsMTEuMzIsMTEuMzJaTTIzMiwxMjhBMTA0LDEwNCwwLDEsMSwxMjgsMjQsMTA0LjExLDEwNC4xMSwwLDAsMSwyMzIsMTI4Wm0tMTYsMGE4OCw4OCwwLDEsMC04OCw4OEE4OC4xLDg4LjEsMCwwLDAsMjE2LDEyOFoiLz48L3N2Zz4=');}.icon-magnifying-glass{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjkuNjYsMjE4LjM0bC01MC4wNy01MC4wNmE4OC4xMSw4OC4xMSwwLDEsMC0xMS4zMSwxMS4zMWw1MC4wNiw1MC4wN2E4LDgsMCwwLDAsMTEuMzItMTEuMzJaTTQwLDExMmE3Miw3MiwwLDEsMSw3Miw3MkE3Mi4wOCw3Mi4wOCwwLDAsMSw0MCwxMTJaIi8+PC9zdmc+');}.icon-plus-square{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMDgsMzJINDhBMTYsMTYsMCwwLDAsMzIsNDhWMjA4YTE2LDE2LDAsMCwwLDE2LDE2SDIwOGExNiwxNiwwLDAsMCwxNi0xNlY0OEExNiwxNiwwLDAsMCwyMDgsMzJabTAsMTc2SDQ4VjQ4SDIwOFYyMDhabS0zMi04MGE4LDgsMCwwLDEtOCw4SDEzNnYzMmE4LDgsMCwwLDEtMTYsMFYxMzZIODhhOCw4LDAsMCwxLDAtMTZoMzJWODhhOCw4LDAsMCwxLDE2LDB2MzJoMzJBOCw4LDAsMCwxLDE3NiwxMjhaIi8+PC9zdmc+');}.icon-infinity{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDgsMTI4YTU2LDU2LDAsMCwxLTk1LjYsMzkuNmwtLjMzLS4zNUw5Mi4xMiw5OS41NWE0MCw0MCwwLDEsMCwwLDU2LjlsOC41Mi05LjYyYTgsOCwwLDEsMSwxMiwxMC42MWwtOC42OSw5LjgxLS4zMy4zNWE1Niw1NiwwLDEsMSwwLTc5LjJsLjMzLjM1LDU5Ljk1LDY3LjdhNDAsNDAsMCwxLDAsMC01Ni45bC04LjUyLDkuNjJhOCw4LDAsMSwxLTEyLTEwLjYxbDguNjktOS44MS4zMy0uMzVBNTYsNTYsMCwwLDEsMjQ4LDEyOFoiLz48L3N2Zz4=');}.icon-arrow-counter-clockwise{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjQsMTI4YTk2LDk2LDAsMCwxLTk0LjcxLDk2SDEyOEE5NS4zOCw5NS4zOCwwLDAsMSw2Mi4xLDE5Ny44YTgsOCwwLDAsMSwxMS0xMS42M0E4MCw4MCwwLDEsMCw3MS40Myw3MS4zOWEzLjA3LDMuMDcsMCwwLDEtLjI2LjI1TDQ0LjU5LDk2SDcyYTgsOCwwLDAsMSwwLDE2SDI0YTgsOCwwLDAsMS04LThWNTZhOCw4LDAsMCwxLDE2LDBWODUuOEw2MC4yNSw2MEE5Niw5NiwwLDAsMSwyMjQsMTI4WiIvPjwvc3ZnPg==');}.icon-facebook-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMjgsMjRBMTA0LDEwNCwwLDEsMCwyMzIsMTI4LDEwNC4xMSwxMDQuMTEsMCwwLDAsMTI4LDI0Wm04LDE5MS42M1YxNTJoMjRhOCw4LDAsMCwwLDAtMTZIMTM2VjExMmExNiwxNiwwLDAsMSwxNi0xNmgxNmE4LDgsMCwwLDAsMC0xNkgxNTJhMzIsMzIsMCwwLDAtMzIsMzJ2MjRIOTZhOCw4LDAsMCwwLDAsMTZoMjR2NjMuNjNhODgsODgsMCwxLDEsMTYsMFoiLz48L3N2Zz4=');}.icon-instagram-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMjgsODBhNDgsNDgsMCwxLDAsNDgsNDhBNDguMDUsNDguMDUsMCwwLDAsMTI4LDgwWm0wLDgwYTMyLDMyLDAsMSwxLDMyLTMyQTMyLDMyLDAsMCwxLDEyOCwxNjBaTTE3NiwyNEg4MEE1Ni4wNiw1Ni4wNiwwLDAsMCwyNCw4MHY5NmE1Ni4wNiw1Ni4wNiwwLDAsMCw1Niw1Nmg5NmE1Ni4wNiw1Ni4wNiwwLDAsMCw1Ni01NlY4MEE1Ni4wNiw1Ni4wNiwwLDAsMCwxNzYsMjRabTQwLDE1MmE0MCw0MCwwLDAsMS00MCw0MEg4MGE0MCw0MCwwLDAsMS00MC00MFY4MEE0MCw0MCwwLDAsMSw4MCw0MGg5NmE0MCw0MCwwLDAsMSw0MCw0MFpNMTkyLDc2YTEyLDEyLDAsMSwxLTEyLTEyQTEyLDEyLDAsMCwxLDE5Miw3NloiLz48L3N2Zz4=');}.icon-list{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjQsMTI4YTgsOCwwLDAsMS04LDhINDBhOCw4LDAsMCwxLDAtMTZIMjE2QTgsOCwwLDAsMSwyMjQsMTI4Wk00MCw3MkgyMTZhOCw4LDAsMCwwLDAtMTZINDBhOCw4LDAsMCwwLDAsMTZaTTIxNiwxODRINDBhOCw4LDAsMCwwLDAsMTZIMjE2YTgsOCwwLDAsMCwwLTE2WiIvPjwvc3ZnPg==');}.icon-door{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzIsMjE2SDIwOFY0MGExNiwxNiwwLDAsMC0xNi0xNkg2NEExNiwxNiwwLDAsMCw0OCw0MFYyMTZIMjRhOCw4LDAsMCwwLDAsMTZIMjMyYTgsOCwwLDAsMCwwLTE2Wk02NCw0MEgxOTJWMjE2SDY0Wm0xMDQsOTJhMTIsMTIsMCwxLDEtMTItMTJBMTIsMTIsMCwwLDEsMTY4LDEzMloiLz48L3N2Zz4=');}.icon-bell{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjEuOCwxNzUuOTRDMjE2LjI1LDE2Ni4zOCwyMDgsMTM5LjMzLDIwOCwxMDRhODAsODAsMCwxLDAtMTYwLDBjMCwzNS4zNC04LjI2LDYyLjM4LTEzLjgxLDcxLjk0QTE2LDE2LDAsMCwwLDQ4LDIwMEg4OC44MWE0MCw0MCwwLDAsMCw3OC4zOCwwSDIwOGExNiwxNiwwLDAsMCwxMy44LTI0LjA2Wk0xMjgsMjE2YTI0LDI0LDAsMCwxLTIyLjYyLTE2aDQ1LjI0QTI0LDI0LDAsMCwxLDEyOCwyMTZaTTQ4LDE4NGM3LjctMTMuMjQsMTYtNDMuOTIsMTYtODBhNjQsNjQsMCwxLDEsMTI4LDBjMCwzNi4wNSw4LjI4LDY2LjczLDE2LDgwWiIvPjwvc3ZnPg==');}.icon-bell-ringing{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjQsNzEuMWE4LDgsMCwwLDEtMTAuNzgtMy40Miw5NC4xMyw5NC4xMywwLDAsMC0zMy40Ni0zNi45MSw4LDgsMCwxLDEsOC41NC0xMy41NCwxMTEuNDYsMTExLjQ2LDAsMCwxLDM5LjEyLDQzLjA5QTgsOCwwLDAsMSwyMjQsNzEuMVpNMzUuNzEsNzJhOCw4LDAsMCwwLDcuMS00LjMyQTk0LjEzLDk0LjEzLDAsMCwxLDc2LjI3LDMwLjc3YTgsOCwwLDEsMC04LjU0LTEzLjU0QTExMS40NiwxMTEuNDYsMCwwLDAsMjguNjEsNjAuMzIsOCw4LDAsMCwwLDM1LjcxLDcyWm0xODYuMSwxMDMuOTRBMTYsMTYsMCwwLDEsMjA4LDIwMEgxNjcuMmE0MCw0MCwwLDAsMS03OC40LDBINDhhMTYsMTYsMCwwLDEtMTMuNzktMjQuMDZDNDMuMjIsMTYwLjM5LDQ4LDEzOC4yOCw0OCwxMTJhODAsODAsMCwwLDEsMTYwLDBDMjA4LDEzOC4yNywyMTIuNzgsMTYwLjM4LDIyMS44MSwxNzUuOTRaTTE1MC42MiwyMDBIMTA1LjM4YTI0LDI0LDAsMCwwLDQ1LjI0LDBaTTIwOCwxODRjLTEwLjY0LTE4LjI3LTE2LTQyLjQ5LTE2LTcyYTY0LDY0LDAsMCwwLTEyOCwwYzAsMjkuNTItNS4zOCw1My43NC0xNiw3MloiLz48L3N2Zz4=');}.icon-check{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjkuNjYsNzcuNjZsLTEyOCwxMjhhOCw4LDAsMCwxLTExLjMyLDBsLTU2LTU2YTgsOCwwLDAsMSwxMS4zMi0xMS4zMkw5NiwxODguNjksMjE4LjM0LDY2LjM0YTgsOCwwLDAsMSwxMS4zMiwxMS4zMloiLz48L3N2Zz4=');}.icon-sign-out{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMjAsMjE2YTgsOCwwLDAsMS04LDhINDhhOCw4LDAsMCwxLTgtOFY0MGE4LDgsMCwwLDEsOC04aDY0YTgsOCwwLDAsMSwwLDE2SDU2VjIwOGg1NkE4LDgsMCwwLDEsMTIwLDIxNlptMTA5LjY2LTkzLjY2LTQwLTQwYTgsOCwwLDAsMC0xMS4zMiwxMS4zMkwyMDQuNjksMTIwSDExMmE4LDgsMCwwLDAsMCwxNmg5Mi42OWwtMjYuMzUsMjYuMzRhOCw4LDAsMCwwLDExLjMyLDExLjMybDQwLTQwQTgsOCwwLDAsMCwyMjkuNjYsMTIyLjM0WiIvPjwvc3ZnPg==');}.icon-question{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNDAsMTgwYTEyLDEyLDAsMSwxLTEyLTEyQTEyLDEyLDAsMCwxLDE0MCwxODBaTTEyOCw3MmMtMjIuMDYsMC00MCwxNi4xNS00MCwzNnY0YTgsOCwwLDAsMCwxNiwwdi00YzAtMTEsMTAuNzctMjAsMjQtMjBzMjQsOSwyNCwyMC0xMC43NywyMC0yNCwyMGE4LDgsMCwwLDAtOCw4djhhOCw4LDAsMCwwLDE2LDB2LS43MmMxOC4yNC0zLjM1LDMyLTE3LjksMzItMzUuMjhDMTY4LDg4LjE1LDE1MC4wNiw3MiwxMjgsNzJabTEwNCw1NkExMDQsMTA0LDAsMSwxLDEyOCwyNCwxMDQuMTEsMTA0LjExLDAsMCwxLDIzMiwxMjhabS0xNiwwYTg4LDg4LDAsMSwwLTg4LDg4QTg4LjEsODguMSwwLDAsMCwyMTYsMTI4WiIvPjwvc3ZnPg==');}.icon-sign-in{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNDEuNjYsMTMzLjY2bC00MCw0MGE4LDgsMCwwLDEtMTEuMzItMTEuMzJMMTE2LjY5LDEzNkgyNGE4LDgsMCwwLDEsMC0xNmg5Mi42OUw5MC4zNCw5My42NmE4LDgsMCwwLDEsMTEuMzItMTEuMzJsNDAsNDBBOCw4LDAsMCwxLDE0MS42NiwxMzMuNjZaTTIwMCwzMkgxMzZhOCw4LDAsMCwwLDAsMTZoNTZWMjA4SDEzNmE4LDgsMCwwLDAsMCwxNmg2NGE4LDgsMCwwLDAsOC04VjQwQTgsOCwwLDAsMCwyMDAsMzJaIi8+PC9zdmc+');}.icon-star-half-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzkuMTgsOTcuMjZBMTYuMzgsMTYuMzgsMCwwLDAsMjI0LjkyLDg2bC01OS00Ljc2TDE0My4xNCwyNi4xNWExNi4zNiwxNi4zNiwwLDAsMC0zMC4yNywwTDkwLjExLDgxLjIzLDMxLjA4LDg2YTE2LjQ2LDE2LjQ2LDAsMCwwLTkuMzcsMjguODZsNDUsMzguODNMNTMsMjExLjc1YTE2LjQsMTYuNCwwLDAsMCwyNC41LDE3LjgyTDEyOCwxOTguNDlsNTAuNTMsMzEuMDhBMTYuNCwxNi40LDAsMCwwLDIwMywyMTEuNzVsLTEzLjc2LTU4LjA3LDQ1LTM4LjgzQTE2LjQzLDE2LjQzLDAsMCwwLDIzOS4xOCw5Ny4yNlptLTE1LjM0LDUuNDctNDguNyw0MmE4LDgsMCwwLDAtMi41Niw3LjkxbDE0Ljg4LDYyLjhhLjM3LjM3LDAsMCwxLS4xNy40OGMtLjE4LjE0LS4yMy4xMS0uMzgsMGwtNTQuNzItMzMuNjVBOCw4LDAsMCwwLDEyOCwxODEuMVYzMmMuMjQsMCwuMjcuMDguMzUuMjZMMTUzLDkxLjg2YTgsOCwwLDAsMCw2Ljc1LDQuOTJsNjMuOTEsNS4xNmMuMTYsMCwuMjUsMCwuMzQuMjlTMjI0LDEwMi42MywyMjMuODQsMTAyLjczWiIvPjwvc3ZnPg==');}.icon-star-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzQuMjksMTE0Ljg1bC00NSwzOC44M0wyMDMsMjExLjc1YTE2LjQsMTYuNCwwLDAsMS0yNC41LDE3LjgyTDEyOCwxOTguNDksNzcuNDcsMjI5LjU3QTE2LjQsMTYuNCwwLDAsMSw1MywyMTEuNzVsMTMuNzYtNTguMDctNDUtMzguODNBMTYuNDYsMTYuNDYsMCwwLDEsMzEuMDgsODZsNTktNC43NiwyMi43Ni01NS4wOGExNi4zNiwxNi4zNiwwLDAsMSwzMC4yNywwbDIyLjc1LDU1LjA4LDU5LDQuNzZhMTYuNDYsMTYuNDYsMCwwLDEsOS4zNywyOC44NloiLz48L3N2Zz4=');}
assets/icons/edmonton-ink-circle.svg
New file
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" clip-rule="evenodd" viewBox="0 0 32 32"><path fill="#f9f9f9" d="M17.172 20.58c-.23 1.104.255 2.338 1.07 2.936-1.107 1.022-2.01 1.487-3.735 1.579a5.2 5.2 0 0 1-2.217-.495c-1.577-.803-2.552-2.137-2.78-3.386-.215-1.174-.088-2.32.25-3.4 1.28 3.554 5.118 4.475 7.412 2.765"/><path fill="#f9f9f9" d="M15.71 18.102c.385.342.921.574 1.622.601.08.316.183.44.455.694a2.4 2.4 0 0 0-.294.378c-2.441 2.07-6.315 1.172-7.484-2.658.3-.745.4-1 .836-1.656.53 2.035 3.134 2.913 4.865 2.641"/><path fill="#f9f9f9" d="M15.542 14.754q-.192.277-.365.613c-.33.643-.311 1.53.11 2.227-1.687.214-3.59-.625-4.15-2.585.491-.738.67-1 1.205-1.586.389 1.455 2.375 2.08 3.2 1.33"/><path fill="#f9f9f9" d="M12.71 13.012a20 20 0 0 1 1.904-1.828c.197.157.394.313.627.524.527.477.778.732 1.274 1.344-.395 2.018-3.257 2.015-3.805-.04"/><path fill="#ff0080" d="M12.152 25.041c-2.1.608-5.686-1.766-6.11-2.623.948.813 2.124 1.386 3.705 1.528-1.851-.703-3.067-1.92-4.001-3.374-1.604-2.494-1.243-4.064-1.325-4.958a1.62 1.62 0 0 0-.424-.986c.08.055.395.034.63.636.478 1.224.237 2.924 2.472 4.493-.83-1.017-1.095-2.723-.932-4.17.6-2.242 1.138-3.876-.036-5.375.594.115.978.619 1.372 1.681.688 1.859-.657 4.097.437 5.848-.429-1.776-.173-3.835 1.325-6.881.396-.804 1.1-1.58 1.771-2.46.868-1.138 1.24-2.235 1.067-2.693.81.78.43 2.161-.465 3.552-.986 1.533-2.482 3.088-1.501 4.966.914-.526 1.407-4.603 5.842-6.055 2.523-.826 3.746 1.045 3.987 2.377.209 1.149-.763 2.303.418 3.044.943.592 2.378-.314 1.902-2.21-.377-1.5.194-2.613 1.367-2.968-1.997 2.328.899 2.594-.394 5.769-1.217 2.987-4.356.177-4.56 2.201-.095.953 2.06 1.325 3.204.72 1.288-.683.856-2.122 1.907-2.109-.845.59-.399 1.376-1.396 2.616-.69.858-3.159 1.692-2.498 3.294 1.218 1.708 2.984.349 4.192-1.698 1.338-2.268-.256-5.213 2.644-6.594-.746.608-.914 1.195-1.144 2.014-.212.755.233 2.613-.111 4.449-.506 2.697-2.266 5.272-5.626 4.734-1.996-.365-3.213-2.98-1.326-4.523-.536-.19-.888-.633-.737-1.026-2.158-.081-2.767-1.413-2.22-2.644.76-1.712 2.867-2.465 2.066-3.984-.462-.874-1.783-1.155-2.37-.444q-.363-.328-.671-.571C12.51 12.21 8.06 16.755 9.047 21.402c.284 1.341 1.44 2.864 3.105 3.64"/><path fill="none" stroke="#f9f9f9" stroke-width=".25" d="M7.272 27.978C3.35 25.358.765 20.89.765 15.823c0-8.062 6.547-14.609 14.61-14.609s14.61 6.547 14.61 14.61c0 5.066-2.586 9.534-6.507 12.154"/><path fill="#f9f9f9" d="M21.473 27.979a.2.2 0 0 0-.06.02l-.167.083q-.052.027-.064.064-.01.036.013.084l.668 1.313q.025.049.059.062.036.01.09-.017l.166-.084q.056-.028.066-.063t-.015-.084l-.196-.384q.015.01.026.011l.572.256a.1.1 0 0 0 .037.008.2.2 0 0 0 .045-.018l.277-.14q.02-.01.024-.026.004-.015-.004-.03a.06.06 0 0 0-.031-.03l-.665-.262.186-.648a.05.05 0 0 0-.002-.043.04.04 0 0 0-.025-.022.04.04 0 0 0-.034.004l-.275.14a.1.1 0 0 0-.041.03.07.07 0 0 0-.016.035l-.138.569-.008.027-.4-.79q-.026-.05-.06-.062a.1.1 0 0 0-.028-.003m-13.104.144a.5.5 0 0 0-.119.022q-.231.066-.377.35a.6.6 0 0 0-.076.347q.022.165.13.299a.9.9 0 0 0 .294.224q.142.075.265.106.125.03.243.017.033-.005.042-.021a.1.1 0 0 0 .006-.031l-.004-.153q0-.03-.015-.039a.1.1 0 0 0-.037-.006.7.7 0 0 1-.16-.011.7.7 0 0 1-.17-.067.48.48 0 0 1-.215-.191.25.25 0 0 1 .008-.23l.75.386q.084.044.13-.049.137-.264.063-.484-.072-.22-.356-.367a.8.8 0 0 0-.402-.102m.117.281q.08-.005.174.043.126.066.156.158.03.095-.027.206l-.508-.262a.25.25 0 0 1 .155-.137.2.2 0 0 1 .05-.008m1.97.086-.019.006q-.032.014-.054.067l-.164.41a.34.34 0 0 0-.104-.114.7.7 0 0 0-.168-.093.64.64 0 0 0-.332-.047.5.5 0 0 0-.275.127.7.7 0 0 0-.188.277q-.237.594.436.863.168.068.338.084a.9.9 0 0 0 .293-.013l.537-1.344q.02-.05.006-.086t-.069-.059l-.166-.066a.14.14 0 0 0-.072-.012m9.224.201a.2.2 0 0 0-.05.01l-.136.043a.15.15 0 0 0-.092.07.13.13 0 0 0-.01.104l.018.055a.13.13 0 0 0 .067.08.15.15 0 0 0 .117.006l.136-.043q.069-.021.094-.07a.14.14 0 0 0 .01-.106l-.018-.055a.13.13 0 0 0-.136-.094m1.326.026a.747.747 0 0 0-.412.18.5.5 0 0 0-.135.185l-.037-.078q-.012-.022-.03-.025a.1.1 0 0 0-.044.005l-.186.075q-.042.015-.05.035t.007.058l.371.944q.02.05.053.066.034.014.092-.01l.172-.066q.058-.022.072-.055.012-.035-.008-.086l-.234-.593a.17.17 0 0 1 .015-.16.28.28 0 0 1 .143-.12q.09-.035.144-.011.055.024.09.115l.242.611q.02.052.053.068.034.015.092-.01l.174-.068q.055-.022.07-.054.015-.036-.006-.086l-.25-.635q-.079-.203-.234-.26a.4.4 0 0 0-.164-.025m-11.207.32a.3.3 0 0 1 .127.025.27.27 0 0 1 .142.114q.043.07.004.164l-.17.422a.4.4 0 0 1-.199-.035q-.152-.06-.2-.165-.044-.106.026-.283a.4.4 0 0 1 .158-.21.23.23 0 0 1 .112-.032m.94.098-.01.004q-.019.01-.03.05l-.265.979q-.016.053.002.086.02.03.08.047l.148.04q.061.017.092-.001.03-.02.045-.072l.166-.614a.2.2 0 0 1 .088-.129.19.19 0 0 1 .15-.017q.067.017.086.066.024.048.002.13l-.176.65q-.015.053.002.085.02.031.08.047l.137.037q.058.016.088-.002.032-.019.047-.072l.168-.619a.2.2 0 0 1 .086-.125.18.18 0 0 1 .144-.018q.07.02.092.069.025.048 0 .138l-.174.641a.12.12 0 0 0 .004.086q.017.03.076.047l.152.041q.058.016.088-.002.034-.02.047-.072l.18-.664q.057-.212-.016-.342a.38.38 0 0 0-.248-.182.47.47 0 0 0-.414.067q-.04-.19-.25-.247a.48.48 0 0 0-.408.069l.014-.09q.005-.024-.006-.037t-.04-.022l-.177-.046a.1.1 0 0 0-.05-.006zm9.1.025a.2.2 0 0 0-.04.008l-.176.055q-.06.019-.074.052-.016.032.002.086l.29.932q.018.052.05.07.03.016.09-.002l.175-.054q.06-.02.075-.051.017-.034.002-.086l-.292-.932q-.015-.052-.05-.07-.02-.012-.051-.008m-4.1.295-.116.002q-.045.001-.06.016a.1.1 0 0 0-.038.045q-.042.08-.064.136a.3.3 0 0 0-.02.108l.002.097-.12.004q-.061.001-.08.028-.021.023-.018.08l.004.082q0 .056.021.078.02.02.08.02l.121-.003.014.475a.48.48 0 0 0 .125.338q.12.121.346.115a.7.7 0 0 0 .4-.117q.03-.02.03-.04-.002-.01-.014-.03l-.096-.155q-.016-.026-.04-.025a.1.1 0 0 0-.028.012.4.4 0 0 1-.077.043.2.2 0 0 1-.082.013q-.081.003-.117-.039-.036-.04-.039-.136l-.012-.465.246-.006q.06-.002.079-.026.018-.023.017-.08l-.002-.082q0-.056-.021-.078-.02-.024-.08-.023l-.246.007-.008-.292q-.001-.056-.028-.08-.023-.024-.08-.022zm2.866.012a.746.746 0 0 0-.348.111.5.5 0 0 0-.163.16l-.026-.084q-.007-.023-.023-.029a.1.1 0 0 0-.045-.002l-.195.041q-.044.01-.055.027-.013.017-.004.059l.207.992q.011.053.041.074t.092.006l.18-.037q.06-.012.08-.04.018-.033.008-.087l-.13-.625a.17.17 0 0 1 .042-.156.27.27 0 0 1 .16-.092q.094-.02.144.014.05.033.07.127l.135.644q.012.054.041.076.032.02.092.006l.182-.039q.059-.012.078-.04.02-.033.01-.087l-.139-.668q-.044-.213-.187-.295a.43.43 0 0 0-.246-.056m-5.644.17a.63.63 0 0 0-.342.103.6.6 0 0 0-.25.43.6.6 0 0 0 .11.486q.155.194.482.244.33.051.533-.088a.6.6 0 0 0 .252-.431.6.6 0 0 0-.111-.485q-.152-.196-.48-.248a1 1 0 0 0-.194-.011m4.066.092-.08.005q-.328.036-.492.227a.6.6 0 0 0-.13.479q.03.29.23.44t.529.114q.33-.036.492-.222a.6.6 0 0 0 .133-.483.6.6 0 0 0-.232-.44.68.68 0 0 0-.45-.12m-3.045.074q-.028 0-.04.011-.016.015-.018.057l-.057 1.012q-.003.054.02.082.025.026.088.03l.183.01q.062.003.088-.02a.12.12 0 0 0 .031-.08l.036-.637a.17.17 0 0 1 .08-.141.27.27 0 0 1 .177-.047q.097.006.137.05t.035.141l-.037.659q-.003.054.02.082.026.026.087.029l.188.012q.06.002.086-.022.03-.025.031-.08l.037-.681q.012-.219-.105-.334a.46.46 0 0 0-.319-.13.7.7 0 0 0-.267.03.5.5 0 0 0-.2.113l-.003-.088q-.001-.024-.016-.035-.014-.01-.043-.012l-.199-.011zm-.939.136q.03-.001.064.004.14.022.202.118.06.095.035.26-.025.166-.112.238-.086.072-.226.05a.27.27 0 0 1-.2-.117q-.06-.097-.035-.262.026-.165.114-.236a.25.25 0 0 1 .158-.055m3.97.09a.26.26 0 0 1 .19.063q.084.075.102.24.018.168-.047.26-.066.092-.207.107-.138.015-.22-.06-.085-.08-.102-.244-.018-.165.046-.256.065-.093.204-.108zm2.481.162q-.012.002-.023.006l-.051.014a.11.11 0 0 0-.074.059.12.12 0 0 0-.008.093l.014.05q.014.05.054.077a.12.12 0 0 0 .094.01l.049-.014a.11.11 0 0 0 .072-.056.12.12 0 0 0 .01-.094l-.012-.049a.12.12 0 0 0-.058-.076.1.1 0 0 0-.067-.02"/></svg>
assets/icons/edmonton-ink-logo.svg
New file
@@ -0,0 +1,5 @@
<svg class="logo" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" clip-rule="evenodd" viewBox="0 0 32 32">
<path fill="#f9f9f9" d="M18.37 22.798c-.305 1.456.336 3.082 1.41 3.87-1.46 1.349-2.65 1.961-4.925 2.083a6.9 6.9 0 0 1-2.921-.653c-2.08-1.06-3.365-2.817-3.667-4.464-.283-1.547-.115-3.058.33-4.482 1.688 4.685 6.748 5.9 9.773 3.646"/>
<path fill="#f9f9f9" d="M16.441 19.532c.508.45 1.216.755 2.139.792.106.416.241.58.6.915q-.223.236-.387.498c-3.219 2.729-8.326 1.545-9.867-3.504.396-.983.527-1.32 1.102-2.184.698 2.683 4.131 3.84 6.413 3.483"/>
<path fill="#f9f9f9" d="M16.22 15.117a7 7 0 0 0-.48.808c-.435.849-.411 2.017.144 2.937-2.224.281-4.732-.825-5.47-3.409.646-.973.883-1.317 1.588-2.09.512 1.918 3.13 2.743 4.218 1.754"/>
<path fill="#f9f9f9" d="M12.487 12.821a27 27 0 0 1 2.51-2.41c.26.207.519.413.826.69.696.629 1.026.966 1.68 1.772-.52 2.66-4.293 2.657-5.016-.052"/><path fill="#ff0080" id="flame" d="M11.75 28.68c-2.767.801-7.495-2.329-8.054-3.459 1.25 1.072 2.8 1.828 4.884 2.014-2.44-.926-4.043-2.532-5.275-4.447C1.19 19.5 1.667 17.43 1.56 16.251c-.05-.55-.255-.973-.559-1.3.106.072.52.046.83.84.63 1.612.313 3.854 3.26 5.922-1.095-1.341-1.444-3.59-1.23-5.498.792-2.955 1.501-5.11-.047-7.086.783.152 1.29.816 1.809 2.217.907 2.45-.867 5.4.576 7.71-.565-2.343-.228-5.057 1.747-9.073.522-1.06 1.45-2.082 2.335-3.243 1.144-1.5 1.635-2.946 1.407-3.55 1.067 1.028.566 2.85-.614 4.683-1.3 2.02-3.271 4.071-1.979 6.547 1.205-.694 1.856-6.068 7.703-7.983 3.325-1.09 4.938 1.378 5.256 3.133.275 1.516-1.006 3.037.551 4.015 1.244.78 3.136-.415 2.507-2.915-.497-1.978.257-3.445 1.803-3.912-2.632 3.068 1.185 3.42-.52 7.605-1.603 3.938-5.743.234-6.01 2.902-.126 1.256 2.715 1.747 4.223.948 1.697-.9 1.128-2.797 2.513-2.779-1.113.778-.525 1.814-1.84 3.449-.91 1.13-4.164 2.23-3.293 4.343 1.605 2.251 3.934.46 5.526-2.24 1.765-2.99-.337-6.872 3.487-8.693-.984.801-1.205 1.575-1.509 2.656-.279.995.308 3.444-.146 5.864-.667 3.557-2.987 6.95-7.417 6.243-2.632-.482-4.236-3.93-1.749-5.964-.706-.25-1.17-.834-.971-1.352-2.845-.107-3.648-1.863-2.927-3.486 1.002-2.257 3.78-3.25 2.723-5.252-.608-1.153-2.35-1.523-3.124-.586-.317-.287-.616-.54-.885-.753-2.772 2.102-8.637 8.093-7.338 14.22.375 1.767 1.9 3.775 4.093 4.797"/></svg>
blocks/_setup.php
@@ -10,27 +10,10 @@
    }
    $cache = (class_exists('JVBase\managers\Cache')) ? JVBase\managers\Cache::for('full-icons') : false;
    if (array_key_exists('className', $block['attrs'])) {
        $logo = false;
        if (str_contains($block['attrs']['className'], 'is-proper')) {
            $logo = '<img class="logo" src="'.AEI_URL.'/assets/tatty-soap-rose-header.webp">';
        }
        if ($logo) {
            return $open.$logo.$close;
        }
    }
    $logo = $cache->remember('logo',
        function() {
            return file_get_contents(AEI_DIR .'/assets/icons/edmonton-ink-logo.svg');
        });
    return JVB()->blocks()->render_core_site_logo($block, $content);
    return $open.$logo.$close;
}
function aei_render_core_template_part(array $block, string $content): string
{
    if (!array_key_exists('attrs', $block) || !array_key_exists('slug', $block['attrs']) || !in_array($block['attrs']['slug'], ['header', 'footer'])){
        return JVB()->blocks()->render_core_template_part($block, $content);
    }
    $content = JVB()->blocks()->render_core_template_part($block, $content);
    $icon = file_get_contents(AEI_DIR .'/assets/icons/background.svg');
    $search = str_contains($content, '<header>') ? '</header>' : '</footer>';
    return str_replace($search, $icon.$search, $content);
}
content/_setup.php
@@ -29,7 +29,11 @@
 */
require(AEI_DIR . '/content/soap.php');
require(AEI_DIR . '/content/tattoos.php');
require(AEI_DIR . '/content/piercings.php');
require(AEI_DIR . '/content/artwork.php');
require(AEI_DIR . '/content/offers.php');
require(AEI_DIR . '/content/events.php');
//add_filter('jvb_content', 'aei_content');
//function aei_content($content):array
content/artwork.php
New file
@@ -0,0 +1,125 @@
<?php
// /content/artwork.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_artwork');
add_action('jvbDefineRegistrarFields', 'aei_artwork_fields');
add_action('plugins_loaded', 'aei_artwork',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_artwork_fields', 4);
add_filter('aei_ArtworkSchemaDefault', 'aei_artwork_schema');
add_filter('aei_ArtworkMetaDefault', 'aei_artwork_meta');
add_filter('aei_ArtworkArchiveDefault', 'aei_artwork_archive');
function aei_artwork(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $artwork = Registrar::forPost('artwork', 'Artwork', 'Artwork')
        ->setIcon('artwork')
        ->make([
            'rewrite'   => [
                'slug'          => 'artworks',
                'with_front'    => false,
            ],
            'taxonomies'    => [
                'city',
                'art_form',
                'art_style',
                'art_theme',
            ],
        ])
        ->setAll([
            'show_directory',
            'hide_single',
            'redirect_to_author',
            'favouritable',
            'karma',
            'show_feed'
        ])
        ->setIntegration('facebook')
        ->setIntegration('instagram');
//$directory = $artwork->getConfig('directory');
}
function aei_artwork_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $artwork = Registrar::getInstance('artwork');
//    $breadcrumbs = $artwork->config('breadcrumbs');
//    $breadcrumbs->setCrumb('section');
    $fields = $artwork->fields();
    $fields->modifyField('post_thumbnail', 'label', 'Main Image');
    $fields->modifyField('post_content', 'label', 'Notes (optional)');
    $fields->addField('gallery', [
        'type'      => 'upload',
        'label'     => 'Additional Images',
    ]);
    $fields->addField('art_form', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'art_form',
        'label'     => 'Art Form',
    ]);
    $fields->addField('art_style', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'art_style',
        'label'     => 'Art Style',
    ]);
    $fields->addField('art_theme', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'art_theme',
        'label'     => 'Theme(s)',
        'hint'      => 'The subject matter, concept, or idea(s) behind the artwork.',
    ]);
    $fields->addField('city', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'city',
        'label'     => 'City',
    ]);
}
function aei_artwork_schema():array
{
    return [
        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\VisualArtwork',
        'name'              => '{{post_title}} | by {{post_author.name}} {{post_author.city}} Artwork Artist',
    ];
}
function aei_artwork_meta():array
{
    return[
        'name' => '{{post_title}} | by {{post_author.name}} {{post_author.city}} Artwork Artist',
        'description' => '{{style}} {{colour}} {{theme}} artwork in {{post_author.city}}.',
    ];
}
function aei_artwork_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => 'Edmonton\'s Best Artwork',
        'description' => 'Artwork in Edmonton, Alberta.'
    ]);
}
function aei_artwork_reference_schema(array $defaults):array
{
    return $defaults;
}
content/events.php
New file
@@ -0,0 +1,137 @@
<?php
// /content/event.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_event');
add_action('jvbDefineRegistrarFields', 'aei_event_fields');
add_action('plugins_loaded', 'aei_event',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_event_fields', 4);
add_filter('aei_EventSchemaDefault', 'aei_event_schema');
add_filter('aei_EventMetaDefault', 'aei_event_meta');
add_filter('aei_EventArchiveDefault', 'aei_event_archive');
function aei_event(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $event = Registrar::forPost('event', 'Event', 'Events')
        ->setIcon('event')
        ->make([
            'rewrite'   => [
                'slug'          => 'events',
                'with_front'    => false,
            ],
            'taxonomies'    => [
                'shop',
                'city',
                'event_type'
            ],
        ])
        ->setAll([
            'show_directory',
            'favouritable',
            'karma',
            'show_feed',
            'is_calendar'
        ])
        ->setIntegration('facebook')
        ->setIntegration('instagram');
//$directory = $event->getConfig('directory');
}
function aei_event_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $event = Registrar::getInstance('event');
//    $breadcrumbs = $event->config('breadcrumbs');
//    $breadcrumbs->setCrumb('section');
    $fields = $event->fields();
    $fields->modifyField('post_thumbnail', 'label', 'Event Poster');
    $fields->modifyField('post_content', 'label', 'About the Event');
    $fields->addField('gallery', [
        'type'      => 'upload',
        'label'     => 'Additional Images',
    ]);
    $fields->addField('city', [
        'type'      => 'selector',
        'subtype'      => 'taxonomy',
        'taxonomy'      => 'city',
        'label'     => 'City',
    ]);
    $fields->addField('shop', [
        'type'      => 'selector',
        'subtype'      => 'taxonomy',
        'taxonomy'      => 'shop',
        'label'     => 'Tattoo Shop',
    ]);
    $fields->addField('event_type', [
        'type'      => 'selector',
        'subtype'      => 'taxonomy',
        'taxonomy'      => 'event_type',
        'label'     => 'Type of Event',
    ]);
    $fields->addField('url', [
        'type'      => 'text',
        'subtype'      => 'url',
        'label'     => 'URL for More Information',
    ]);
    $fields->addField('purchase_url', [
        'type'      => 'text',
        'subtype'      => 'url',
        'label'     => 'Purchase link',
    ]);
    $fields->addField('cost', [
       'type'   => 'text',
       'subtype'      => 'number',
       'label'  => 'Cost (leave blank for free)'
    ]);
    $fields->addField('max_attendees', [
       'type'   => 'text',
       'subtype'      => 'number',
       'label'  => 'Maximum Attendees'
    ]);
}
function aei_event_schema():array
{
    return [
        'type'              => 'JVBase\managers\SEO\render\Thing\Event',
        'name'              => '{{post_title}} | by {{post_author.name}} {{post_author.city}} Event Artist',
    ];
}
function aei_event_meta():array
{
    return[
        'name' => '{{post_title}} | by {{post_author.name}} {{post_author.city}} Event Artist',
        'description' => '{{style}} {{colour}} {{theme}} event in {{post_author.city}}.',
    ];
}
function aei_event_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => 'Edmonton\'s Best Events',
        'description' => 'Events in Edmonton, Alberta.'
    ]);
}
function aei_event_reference_schema(array $defaults):array
{
    return $defaults;
}
content/offers.php
New file
@@ -0,0 +1,114 @@
<?php
// /content/offer.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_offer');
add_action('jvbDefineRegistrarFields', 'aei_offer_fields');
add_action('plugins_loaded', 'aei_offer',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_offer_fields', 4);
add_filter('aei_OfferSchemaDefault', 'aei_offer_schema');
add_filter('aei_OfferMetaDefault', 'aei_offer_meta');
add_filter('aei_OfferArchiveDefault', 'aei_offer_archive');
function aei_offer(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $offer = Registrar::forPost('offer', 'Offer', 'Offers')
        ->setIcon('offer')
        ->make([
            'rewrite'   => [
                'slug'          => 'offers',
                'with_front'    => false,
            ],
            'taxonomies'    => [
                'city',
                'offer_for',
            ],
        ])
        ->setAll([
            'show_directory',
            'hide_single',
            'redirect_to_author',
            'favouritable',
            'karma',
            'show_feed'
        ])
        ->setIntegration('facebook')
        ->setIntegration('instagram');
//$directory = $offer->getConfig('directory');
}
function aei_offer_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $offer = Registrar::getInstance('offer');
//    $breadcrumbs = $offer->config('breadcrumbs');
//    $breadcrumbs->setCrumb('section');
    $fields = $offer->fields();
    $fields->modifyField('post_thumbnail', 'label', 'Main Image');
    $fields->modifyField('post_content', 'label', 'Notes (optional)');
    $fields->addField('gallery', [
        'type'      => 'upload',
        'label'     => 'Additional Images',
    ]);
    $fields->addField('referral_code', [
        'type'      => 'text',
        'label'     => 'Referral Code',
        'hint'      => 'Some sort of tracking code to gauge how well it\'s working'
    ]);
    $fields->addField('url', [
        'type'      => 'url',
        'label'     => 'Target URL',
        'hint'      => 'Where you want folks to be directed to.'
    ]);
    $fields->addField('offer_for', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'offer_for',
        'label'     => 'Offer for',
    ]);
}
function aei_offer_schema():array
{
    return [
        'type'              => 'JVBase\managers\SEO\render\Thing\Intangible\Offer',
        'name'              => '{{post_title}} | by our supporter {{post_author.name}}',
    ];
}
function aei_offer_meta():array
{
    return[
        'name' => '{{post_title}} | by {{post_author.name}} {{post_author.city}} Offer Artist',
        'description' => '{{style}} {{colour}} {{theme}} offer in {{post_author.city}}.',
    ];
}
function aei_offer_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => 'Edmonton\'s Best Offers',
        'description' => 'Offers in Edmonton, Alberta.'
    ]);
}
function aei_offer_reference_schema(array $defaults):array
{
    return $defaults;
}
content/piercings.php
New file
@@ -0,0 +1,110 @@
<?php
// /content/piercing.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_piercing');
add_action('jvbDefineRegistrarFields', 'aei_piercing_fields');
add_action('plugins_loaded', 'aei_piercing',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_piercing_fields', 4);
add_filter('aei_PiercingSchemaDefault', 'aei_piercing_schema');
add_filter('aei_PiercingMetaDefault', 'aei_piercing_meta');
add_filter('aei_PiercingArchiveDefault', 'aei_piercing_archive');
function aei_piercing(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $piercing = Registrar::forPost('piercing', 'Piercing', 'Piercings')
        ->setIcon('piercing')
        ->make([
            'rewrite'   => [
                'slug'          => 'piercings',
                'with_front'    => false,
            ],
            'taxonomies'    => [
                'city',
                'piercing_placement',
                'piercing_style',
            ],
        ])
        ->setAll([
            'show_directory',
            'hide_single',
            'redirect_to_author',
            'favouritable',
            'karma',
            'show_feed'
        ])
        ->setIntegration('facebook')
        ->setIntegration('instagram');
//$directory = $piercing->getConfig('directory');
}
function aei_piercing_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $piercing = Registrar::getInstance('piercing');
//    $breadcrumbs = $piercing->config('breadcrumbs');
//    $breadcrumbs->setCrumb('section');
    $fields = $piercing->fields();
    $fields->modifyField('post_thumbnail', 'label', 'Main Image');
    $fields->modifyField('post_content', 'label', 'Notes (optional)');
    $fields->addField('gallery', [
        'type'      => 'upload',
        'label'     => 'Additional Images',
    ]);
    $fields->addField('piercing_placement', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'piercing_placement',
        'label'     => 'Placement',
    ]);
    $fields->addField('piercing_style', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'piercing_style',
        'label'     => 'Piercing Style',
    ]);
}
function aei_piercing_schema():array
{
    return [
        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\VisualArtwork',
        'name'              => '{{post_title}} | by {{post_author.name}} {{post_author.city}} Piercer',
    ];
}
function aei_piercing_meta():array
{
    return[
        'name' => '{{post_title}} | by {{post_author.name}} {{post_author.city}} Piercer',
        'description' => '{{style}} {{colour}} {{theme}} piercing in {{post_author.city}}.',
    ];
}
function aei_piercing_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => 'Edmonton\'s Best Piercings',
        'description' => 'Piercings in Edmonton, Alberta.'
    ]);
}
function aei_piercing_reference_schema(array $defaults):array
{
    return $defaults;
}
content/soap.php
File was deleted
content/tattoos.php
New file
@@ -0,0 +1,126 @@
<?php
// /content/tattoo.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_tattoo');
add_action('jvbDefineRegistrarFields', 'aei_tattoo_fields');
add_action('plugins_loaded', 'aei_tattoo',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_tattoo_fields', 4);
add_filter('aei_TattooSchemaDefault', 'aei_tattoo_schema');
add_filter('aei_TattooMetaDefault', 'aei_tattoo_meta');
add_filter('aei_TattooArchiveDefault', 'aei_tattoo_archive');
function aei_tattoo(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $tattoo = Registrar::forPost('tattoo', 'Tattoo', 'Tattoos')
        ->setIcon('tattoo')
        ->make([
            'rewrite'   => [
                'slug'          => 'tattoos',
                'with_front'    => false,
            ],
            'taxonomies'    => [
                'city',
                'colour',
                'placement',
                'style',
                'theme'
            ],
        ])
        ->setAll([
            'show_directory',
            'hide_single',
            'redirect_to_author',
            'favouritable',
            'karma',
            'show_feed'
        ])
        ->setIntegration('facebook')
        ->setIntegration('instagram');
//$directory = $tattoo->getConfig('directory');
}
function aei_tattoo_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $tattoo = Registrar::getInstance('tattoo');
//    $breadcrumbs = $tattoo->config('breadcrumbs');
//    $breadcrumbs->setCrumb('section');
    $fields = $tattoo->fields();
    $fields->modifyField('post_thumbnail', 'label', 'Main Image');
    $fields->modifyField('post_content', 'label', 'Notes (optional)');
    $fields->addField('gallery', [
        'type'      => 'upload',
        'label'     => 'Additional Images',
    ]);
    $fields->addField('colour', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'colour',
        'label'     => 'Colour(s)',
    ]);
    $fields->addField('placement', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'placement',
        'label'     => 'Placement',
    ]);
    $fields->addField('style', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'style',
        'label'     => 'Tattoo Style',
    ]);
    $fields->addField('theme', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'theme',
        'label'     => 'Tattoo Theme(s)',
        'hint'      => 'The subject matter, concept, or idea(s) behind the tattoo.',
    ]);
}
function aei_tattoo_schema():array
{
    return [
        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\VisualArtwork',
        'name'              => '{{post_title}} | by {{post_author.name}} {{post_author.city}} Tattoo Artist',
    ];
}
function aei_tattoo_meta():array
{
    return[
        'name' => '{{post_title}} | by {{post_author.name}} {{post_author.city}} Tattoo Artist',
        'description' => '{{style}} {{colour}} {{theme}} tattoo in {{post_author.city}}.',
    ];
}
function aei_tattoo_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => 'Edmonton\'s Best Tattoos',
        'description' => 'Tattoos in Edmonton, Alberta.'
    ]);
}
function aei_tattoo_reference_schema(array $defaults):array
{
    return $defaults;
}
edmontonink.php
@@ -47,8 +47,15 @@
        return;
    }
    $site = Site::getInstance();
    $site->set('icons', 'light');
    $site->set('icons', 'regular');
    $site->setAll([
        'is_directory',
        'membership',
        'dashboard',
        'magic_link',
        'feed_block',
        'favourites',
        'help_menu'
//        'has_map',
//        'referrals',
    ]);
@@ -56,100 +63,46 @@
        'cloudflare',
        'facebook',
        'gmb',
        'maps',
        'helcim',
        'postmark',
        'instagram',
        'umami'
    ]);
    $login = $site->login();
}
/**
 * Defines base options like:
 *         - directory & Membership
 *         - dashboard
 *         - membership settings (JVB_MEMBERSHIP)
 *         - post types (JVB_CONTENT)
 *         - taxonomies (JVB_TAXONOMY)
 *         - User Roles (JVB_USER)
 *         - enthusiast     = (bool) short form for a subscriber-like user that can collect content for reference
 *         - forum            = (bool) create a forum
 *         - member_only    = (bool) if forum and this is true, creates a member-only forum in the custom dashboard
 *
 * as well as central filters for
 *         - rewrite rules
 *         - archive title
 */
add_filter('jvb_site', 'aei_setup_site');
function aei_setup_site():array
add_action('plugins_loaded', 'aei_membership_settings', 10);
function aei_membership_settings():void
{
    return [
        'icons'               => 'light',
        'is_directory'        => false,        //as in, a membership directory
        'has_membership'      => false,
        'has_map'             => true,
        'dashboard'           => true,
        'referrals'           => true,
        'magicLink'           => true,
        'support'         => false,
        'feed_block'      => false,
        'email_notifications' => false,
        'integrations'  => [
            'bluesky'     => false,
            'cloudflare'  => true,
            'facebook'    => true,
            'maps'        => true,
            'gmb'         => true,
            'helcim'      => true,
            'postmark'    => true,
            'instagram'   => true,
            'square'      => false,
            'umami'       => true,
        ],
        'is_restaurant'       => false,
        'limit_hours'         => false,
        'enthusiast'          => false,
        'favourites'          => false,    //optional flag to allow enthusiasts, but not favourites
    ];
    if (!class_exists('JVBase\base\Site')) {
        return;
    }
    $site = Site::getInstance();
    $membership = $site->membership();
    $membership->setAll([
        'invitable',
        'term_approval',
        'member_verified'
    ]);
    $membership->setInvitable([
        'artist'    => ['artist', 'enthusiast'],
        'enthusiast' => ['enthusiast']
    ]);
    $membership->setApprovers(['artist']);
    $membership->setCanSeeForum(['artist']);
}
/**
 * JVB_MEMBERSHIP defines the structure of the directory
 *         Options include:
 *         - membership_expires        = useful if members pay a yearly membership fee
 *         - hide_expired                = removes users once membership expired; only used if membership_expires is true
 *         - clip_expired                = keeps users once membership expires, but limits the information shown; only used if membership_expires is true
 *         - membership_approval        = verified users can approve other users
 *         - term_approval              = (bool) verified users can create new terms, but needs approval
 *          - member_only              = (array) if empty, open to any registered user. otherwise an array of registered user roles
 */
//add_filter('jvb_membership', 'aei_setup_membership');
//function aei_setup_membership():array
//{
//    return [
//        'member_content'  => true,
//        'can_invite'      => ['artist' => ['artist']],
//        'member_verified' => true,
//        'notifications'   => true,
//        'forum'           => true,
//        'member_only'     => [ 'artist' ],
//        'member_expires'  => false,
//        'hide_expired'    => false,
//        'clip_expired'    => false,
//        'term_approval'   => true,
//        'can_approve'     => [ 'artist' ]
//    ];
//}
//
//add_filter('jvbLoadingQuips', 'aei_loading_quips');
//function aei_loading_quips(array $quips):array
//{
//    return [];
//}
add_filter('jvbBelowHeader', 'aei_header');
function aei_header(string $header):string
{
    return '<p>FREE LOCAL PICKUP at <a href="https://legacytattooremoval.ca/">Legacy Tattoo Removal</a>.</p>';
}
//add_filter('jvbBelowHeader', 'aei_header');
//function aei_header(string $header):string
//{
//    return '<p>FREE LOCAL PICKUP at <a href="https://legacytattooremoval.ca/">Legacy Tattoo Removal</a>.</p>';
//}
@@ -200,7 +153,7 @@
function alyns_acknowledgement():string
{
    return '<p>amiskwacîwâskahikan ᐊᒥᐢᑲᐧᒋᐋᐧᐢᑲᐦᐃᑲᐣ</p><p><a href="https://www.treatysix.org/#comp-lkljqlw1" title="Learn More">Treaty 6 territory</a></p><p>Edmonton, Alberta, Canada</p>';
    return '<p class="text-center">Respectfully, this land was <a href="https://edmonton.ink/amiskwaciwaskahikan/" data-type="page" data-id="4659">Amiskwaciwâskahikan</a> before it was ever Edmonton.</p>';
}
@@ -227,19 +180,88 @@
add_filter('jvbRandomFooterText', 'aei_footer_text');
function aei_footer_text(string $text):string
{
    $privacy = get_privacy_policy_url();
    $privacy = ($privacy === '') ? '' : ' | <a href="'.$privacy.'">Privacy Policy</a>';
    return '<p class="font-small">©'.date('Y').' <a href="https://madimori.ca/">Madi Mori</a>'.$privacy.'</p><p class="font-small">Built with ♡ by <a href="https://jakevan.ca">Jake Van</a></p>';
    $aOpen = '<a href="https://legacytattooremoval.ca" title="Learn more about Legacy Tattoo Removal">';
    $options = array(
        [
            'text'      => 'Built with ♡ by '.$aOpen.'your friendly neighbourhood laser nerds</a>.',
            'weight'    => 25
        ],
        [
            'text'      => 'Built with ♡ by your friends at '.$aOpen.'Legacy Tattoo Removal</a>.',
            'weight'    => 15
        ],
        [
            'text'      => 'Your friendly '.$aOpen.'Edmonton tattoo removal</a> crew.',
            'weight'    => 15
        ],
        [
            'text'      => $aOpen.'tattoo removal with ♡</a>',
            'weight'    => 15
        ],
        [
            'text'      => 'From '.$aOpen.'cover ups to fresh starts</a> - we\'re the laser nerds with ♡.',
            'weight'    => 10
        ],
        [
            'text'      => $aOpen.'See the difference at Legacy Tattoo Removal</a>',
            'weight'    => 10
        ],
        [
            'text'      => 'Make space for your next tattoo at '.$aOpen.'Legacy Tattoo Removal</a>.',
            'weight'    => 10
        ],
        [
            'text'      => $aOpen.'We\'re your artist\'s secret weapon</a>.',
            'weight'    => 15
        ]
    );
        $totalWeight = 0;
        foreach ($options as $option) {
            $totalWeight += (int)$option['weight'];
        }
        $randomNumber = mt_rand(1, $totalWeight);
        $weightSum = 0;
        foreach ($options as $option) {
            $weightSum += (int)$option['weight'];
            if ($randomNumber <= $weightSum) {
                return '<p>'.$option['text'].'</p>';
            }
        }
    return '<p>'.$options[0]['text'].'</p>';
}
add_filter('jvbRegisterCustomIcons', 'aei_custom_icons');
function aei_custom_icons(array $icons):array
{
    $icons['background'] = AEI_DIR . '/assets/icons/background.svg';
//    $icons['logo-jakevan'] = AEI_DIR . '/assets/icons/logo-concentric-jakevan.svg';
//    $icons['logo-right'] = AEI_DIR . '/assets/icons/logo-right-aligned.svg';
//    $icons['logo-right-jakevan'] = AEI_DIR . '/assets/icons/logo-right-aligned-jakevan.svg';
//    $icons['jakevan'] = AEI_DIR . '/assets/icons/jakevan.svg';
//    $icons['loading'] = AEI_DIR . '/assets/icons/loading.svg';
    $icons['logo'] = AEI_DIR . '/assets/icons/edmonton-ink-logo.svg';
    $icons['logo-text'] = AEI_DIR . '/assets/icons/edmonton-ink-circle.svg';
    return $icons;
}
add_filter('jvbMapIcons', 'aei_icons_map');
function aei_icons_map(array $icons):array
{
    return array_merge($icons, [
       'tattoo'     => 'drop-simple',
       'event'      => 'calendar',
       'piercing'   => 'needle',
       'artwork'    => 'palette',
       'artform'    => 'shapes',
       'city'       => 'map-pin',
        'piercing-type' => 'nut',
        'theme'     => 'folder-open',
        'style'     => 'hash',
        'colour'    => 'drop',
        'placement' => 'person-arms-spread',
        'media'     => 'squares-four',
        'artist'    => 'user',
        'artists'   => 'users-three',
        'partner'   => 'currency-circle-dollar',
        'shop'      => 'storefront',
        'past'      => 'clock-counter-clockwise',
        'future'    => 'clock-clockwise',
        'offer'     => 'hand-heart',
    ]);
}
taxonomies/_setup.php
@@ -20,7 +20,26 @@
 *             -> add use_in_stats (bool) to use the field in user statistics
 */
require(AEI_DIR . '/taxonomies/flags.php');
require(AEI_DIR . '/taxonomies/cities.php');
require(AEI_DIR . '/taxonomies/shops.php');
require(AEI_DIR . '/taxonomies/placements.php');
require(AEI_DIR . '/taxonomies/styles.php');
require(AEI_DIR . '/taxonomies/themes.php');
require(AEI_DIR . '/taxonomies/colours.php');
require(AEI_DIR . '/taxonomies/art-forms.php');
require(AEI_DIR . '/taxonomies/artist-types.php');
require(AEI_DIR . '/taxonomies/art-styles.php');
require(AEI_DIR . '/taxonomies/art-themes.php');
//require(AEI_DIR . '/taxonomies/news-types.php');
require(AEI_DIR . '/taxonomies/offer-for.php');
require(AEI_DIR . '/taxonomies/piercing-styles.php');
require(AEI_DIR . '/taxonomies/piercing-placements.php');
require(AEI_DIR . '/taxonomies/event-types.php');
//add_filter('jvb_taxonomy', 'aei_taxonomy');
//function aei_taxonomy():array
taxonomies/art-forms.php
New file
@@ -0,0 +1,92 @@
<?php
// /taxonomies/art_form.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_art_form');
add_action('jvbDefineRegistrarFields', 'aei_art_form_fields');
add_action('plugins_loaded', 'aei_art_form',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_art_form_fields', 4);
add_filter('aei_Art_formSchemaDefault', 'aei_art_form_schema');
add_filter('aei_Art_formMetaDefault', 'aei_art_form_meta');
add_filter('aei_Art_formArchiveDefault', 'aei_art_form_archive');
function aei_art_form(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $art_form = Registrar::forTerm('art_form', 'Art Form', 'Art Forms')
        ->setIcon('artform')
        ->make([
            'rewrite'   => [
                'slug'          => 'in/art-form',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'artist',
                'event',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
        ]);
//$directory = $art_form->getConfig('directory');
}
function aei_art_form_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $art_form = Registrar::getInstance('art_form');
    $fields = $art_form->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_art_form_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian Art Form',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Art Form',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_art_form_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo art_forms in {{name}}.'
    ];
}
function aei_art_form_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_art_form_reference_schema(array $defaults):array
{
    return $defaults;
}
taxonomies/art-styles.php
New file
@@ -0,0 +1,92 @@
<?php
// /taxonomies/art_style.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_art_style');
add_action('jvbDefineRegistrarFields', 'aei_art_style_fields');
add_action('plugins_loaded', 'aei_art_style',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_art_style_fields', 4);
add_filter('aei_Art_art_styleSchemaDefault', 'aei_art_style_schema');
add_filter('aei_Art_art_styleMetaDefault', 'aei_art_style_meta');
add_filter('aei_Art_art_styleArchiveDefault', 'aei_art_style_archive');
function aei_art_style(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $art_style = Registrar::forTerm('art_style', 'Art Style', 'Art Styles')
        ->setIcon('style')
        ->make([
            'rewrite'   => [
                'slug'          => 'in/art-style',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'artist',
                'event',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
        ]);
//$directory = $art_style->getConfig('directory');
}
function aei_art_style_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $art_style = Registrar::getInstance('art_style');
    $fields = $art_style->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_art_style_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian Art Style',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Art Style',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_art_style_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo art_styles in {{name}}.'
    ];
}
function aei_art_style_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_art_style_reference_schema(array $defaults):array
{
    return $defaults;
}
taxonomies/art-themes.php
New file
@@ -0,0 +1,92 @@
<?php
// /taxonomies/art_theme.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_art_theme');
add_action('jvbDefineRegistrarFields', 'aei_art_theme_fields');
add_action('plugins_loaded', 'aei_art_theme',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_art_theme_fields', 4);
add_filter('aei_Art_themeSchemaDefault', 'aei_art_theme_schema');
add_filter('aei_Art_themeMetaDefault', 'aei_art_theme_meta');
add_filter('aei_Art_themeArchiveDefault', 'aei_art_theme_archive');
function aei_art_theme(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $art_theme = Registrar::forTerm('art_theme', 'Theme', 'Themes')
        ->setIcon('theme')
        ->make([
            'rewrite'   => [
                'slug'          => 'in/art-theme',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'artist',
                'event',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
        ]);
//$directory = $art_theme->getConfig('directory');
}
function aei_art_theme_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $art_theme = Registrar::getInstance('art_theme');
    $fields = $art_theme->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_art_theme_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian Art_theme',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Art_theme',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_art_theme_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo art_themes in {{name}}.'
    ];
}
function aei_art_theme_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_art_theme_reference_schema(array $defaults):array
{
    return $defaults;
}
taxonomies/artist-types.php
New file
@@ -0,0 +1,92 @@
<?php
// /taxonomies/artist_type.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_artist_type');
add_action('jvbDefineRegistrarFields', 'aei_artist_type_fields');
add_action('plugins_loaded', 'aei_artist_type',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_artist_type_fields', 4);
add_filter('aei_Artist_typeSchemaDefault', 'aei_artist_type_schema');
add_filter('aei_Artist_typeMetaDefault', 'aei_artist_type_meta');
add_filter('aei_Artist_typeArchiveDefault', 'aei_artist_type_archive');
function aei_artist_type(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $artist_type = Registrar::forTerm('artist_type', 'Artist Type', 'Artist Types')
        ->setIcon('artists')
        ->make([
            'rewrite'   => [
                'slug'          => 'in/artist-type',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'artist',
                'event',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
        ]);
//$directory = $artist_type->getConfig('directory');
}
function aei_artist_type_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $artist_type = Registrar::getInstance('artist_type');
    $fields = $artist_type->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_artist_type_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian Artist Type',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Artist Type',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_artist_type_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo artist_types in {{name}}.'
    ];
}
function aei_artist_type_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_artist_type_reference_schema(array $defaults):array
{
    return $defaults;
}
taxonomies/cities.php
New file
@@ -0,0 +1,92 @@
<?php
// /taxonomies/city.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_city');
add_action('jvbDefineRegistrarFields', 'aei_city_fields');
add_action('plugins_loaded', 'aei_city',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_city_fields', 4);
add_filter('aei_CitySchemaDefault', 'aei_city_schema');
add_filter('aei_CityMetaDefault', 'aei_city_meta');
add_filter('aei_CityArchiveDefault', 'aei_city_archive');
function aei_city(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $city = Registrar::forTerm('city', 'City', 'Cities')
        ->setIcon('city')
        ->make([
            'rewrite'   => [
                'slug'          => 'in/city',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'artist',
                'event',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
        ]);
//$directory = $city->getConfig('directory');
}
function aei_city_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $city = Registrar::getInstance('city');
    $fields = $city->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_city_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian City',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_city_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo shops in {{name}}.'
    ];
}
function aei_city_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_city_reference_schema(array $defaults):array
{
    return $defaults;
}
taxonomies/colours.php
New file
@@ -0,0 +1,92 @@
<?php
// /taxonomies/colour.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_colour');
add_action('jvbDefineRegistrarFields', 'aei_colour_fields');
add_action('plugins_loaded', 'aei_colour',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_colour_fields', 4);
add_filter('aei_ColourSchemaDefault', 'aei_colour_schema');
add_filter('aei_ColourMetaDefault', 'aei_colour_meta');
add_filter('aei_ColourArchiveDefault', 'aei_colour_archive');
function aei_colour(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $colour = Registrar::forTerm('colour', 'Colour', 'Colours')
        ->setIcon('colour')
        ->make([
            'rewrite'   => [
                'slug'          => 'in/colour',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'artist',
                'event',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
        ]);
//$directory = $colour->getConfig('directory');
}
function aei_colour_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $colour = Registrar::getInstance('colour');
    $fields = $colour->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_colour_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian Colour',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Colour',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_colour_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo colours in {{name}}.'
    ];
}
function aei_colour_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_colour_reference_schema(array $defaults):array
{
    return $defaults;
}
taxonomies/event-types.php
New file
@@ -0,0 +1,92 @@
<?php
// /taxonomies/event_type.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_event_type');
add_action('jvbDefineRegistrarFields', 'aei_event_type_fields');
add_action('plugins_loaded', 'aei_event_type',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_event_type_fields', 4);
add_filter('aei_Event_typeSchemaDefault', 'aei_event_type_schema');
add_filter('aei_Event_typeMetaDefault', 'aei_event_type_meta');
add_filter('aei_Event_typeArchiveDefault', 'aei_event_type_archive');
function aei_event_type(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $event_type = Registrar::forTerm('event_type', 'Event Type', 'Event Types')
        ->setIcon('folder')
        ->make([
            'rewrite'   => [
                'slug'          => 'in/type',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'event',
                'event',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
        ]);
//$directory = $event_type->getConfig('directory');
}
function aei_event_type_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $event_type = Registrar::getInstance('event_type');
    $fields = $event_type->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_event_type_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian Event Type',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Event Type',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_event_type_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo events, and tattoo event_types in {{name}}.'
    ];
}
function aei_event_type_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Events',
    ]);
}
function aei_event_type_reference_schema(array $defaults):array
{
    return $defaults;
}
taxonomies/flags.php
File was deleted
taxonomies/offer-for.php
New file
@@ -0,0 +1,92 @@
<?php
// /taxonomies/offer_for.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_offer_for');
add_action('jvbDefineRegistrarFields', 'aei_offer_for_fields');
add_action('plugins_loaded', 'aei_offer_for',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_offer_for_fields', 4);
add_filter('aei_Offer_forSchemaDefault', 'aei_offer_for_schema');
add_filter('aei_Offer_forMetaDefault', 'aei_offer_for_meta');
add_filter('aei_Offer_forArchiveDefault', 'aei_offer_for_archive');
function aei_offer_for(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $offer_for = Registrar::forTerm('offer_for', 'Offer For', 'Offer For')
        ->setIcon('target')
        ->make([
            'rewrite'   => [
                'slug'          => 'offers/for',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'artist',
                'event',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
        ]);
//$directory = $offer_for->getConfig('directory');
}
function aei_offer_for_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $offer_for = Registrar::getInstance('offer_for');
    $fields = $offer_for->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_offer_for_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian Offer For',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Offer For',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_offer_for_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo offer_fors in {{name}}.'
    ];
}
function aei_offer_for_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_offer_for_reference_schema(array $defaults):array
{
    return $defaults;
}
taxonomies/piercing-placements.php
New file
@@ -0,0 +1,91 @@
<?php
// /taxonomies/piercing_placement.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_piercing_placement');
add_action('jvbDefineRegistrarFields', 'aei_piercing_placement_fields');
add_action('plugins_loaded', 'aei_piercing_placement',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_piercing_placement_fields', 4);
add_filter('aei_Piercing_placementSchemaDefault', 'aei_piercing_placement_schema');
add_filter('aei_Piercing_placementMetaDefault', 'aei_piercing_placement_meta');
add_filter('aei_Piercing_placementArchiveDefault', 'aei_piercing_placement_archive');
function aei_piercing_placement(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $piercing_placement = Registrar::forTerm('piercing_placement', 'Placement', 'Placements')
        ->setIcon('placement')
        ->make([
            'rewrite'   => [
                'slug'          => 'piercings/in/body-part',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'piercing',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
        ]);
//$directory = $piercing_placement->getConfig('directory');
}
function aei_piercing_placement_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $piercing_placement = Registrar::getInstance('piercing_placement');
    $fields = $piercing_placement->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_piercing_placement_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian Placement',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Placement',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_piercing_placement_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo piercing_placements in {{name}}.'
    ];
}
function aei_piercing_placement_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_piercing_placement_reference_schema(array $defaults):array
{
    return $defaults;
}
taxonomies/piercing-styles.php
New file
@@ -0,0 +1,91 @@
<?php
// /taxonomies/piercing_style.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_piercing_style');
add_action('jvbDefineRegistrarFields', 'aei_piercing_style_fields');
add_action('plugins_loaded', 'aei_piercing_style',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_piercing_style_fields', 4);
add_filter('aei_Piercing_styleSchemaDefault', 'aei_piercing_style_schema');
add_filter('aei_Piercing_styleMetaDefault', 'aei_piercing_style_meta');
add_filter('aei_Piercing_styleArchiveDefault', 'aei_piercing_style_archive');
function aei_piercing_style(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $piercing_style = Registrar::forTerm('piercing_style', 'Placement', 'Placements')
        ->setIcon('style')
        ->make([
            'rewrite'   => [
                'slug'          => 'piercings/in/style',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'piercing',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
        ]);
//$directory = $piercing_style->getConfig('directory');
}
function aei_piercing_style_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $piercing_style = Registrar::getInstance('piercing_style');
    $fields = $piercing_style->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_piercing_style_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian Placement',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Placement',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_piercing_style_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo piercing_styles in {{name}}.'
    ];
}
function aei_piercing_style_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_piercing_style_reference_schema(array $defaults):array
{
    return $defaults;
}
taxonomies/placements.php
New file
@@ -0,0 +1,92 @@
<?php
// /taxonomies/placement.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_placement');
add_action('jvbDefineRegistrarFields', 'aei_placement_fields');
add_action('plugins_loaded', 'aei_placement',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_placement_fields', 4);
add_filter('aei_PlacementSchemaDefault', 'aei_placement_schema');
add_filter('aei_PlacementMetaDefault', 'aei_placement_meta');
add_filter('aei_PlacementArchiveDefault', 'aei_placement_archive');
function aei_placement(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $placement = Registrar::forTerm('placement', 'Placement', 'Placements')
        ->setIcon('placement')
        ->make([
            'rewrite'   => [
                'slug'          => 'in/body-part',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'artist',
                'event',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
        ]);
//$directory = $placement->getConfig('directory');
}
function aei_placement_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $placement = Registrar::getInstance('placement');
    $fields = $placement->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_placement_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian Placement',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Placement',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_placement_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo placements in {{name}}.'
    ];
}
function aei_placement_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_placement_reference_schema(array $defaults):array
{
    return $defaults;
}
taxonomies/shops.php
New file
@@ -0,0 +1,99 @@
<?php
// /taxonomies/shop.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_shop');
add_action('jvbDefineRegistrarFields', 'aei_shop_fields');
add_action('plugins_loaded', 'aei_shop',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_shop_fields', 4);
add_filter('aei_ShopSchemaDefault', 'aei_shop_schema');
add_filter('aei_ShopMetaDefault', 'aei_shop_meta');
add_filter('aei_ShopArchiveDefault', 'aei_shop_archive');
function aei_shop(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $shop = Registrar::forTerm('shop', 'Shop', 'Shops')
        ->setIcon('shop')
        ->make([
            'rewrite'   => [
                'slug'          => 'tattoo-shops',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'artist',
                'event',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
            'favouritable',
            'karma',
            'invitable',
            'is_content',
            'is_ownable',
            'verify_entry',
            'associate_user_content',
        ]);
//$directory = $shop->getConfig('directory');
}
function aei_shop_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $shop = Registrar::getInstance('shop');
    $fields = $shop->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_shop_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian Shop',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Shop',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_shop_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo shops in {{name}}.'
    ];
}
function aei_shop_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_shop_reference_schema(array $defaults):array
{
    return $defaults;
}
taxonomies/styles.php
New file
@@ -0,0 +1,92 @@
<?php
// /taxonomies/style.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_style');
add_action('jvbDefineRegistrarFields', 'aei_style_fields');
add_action('plugins_loaded', 'aei_style',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_style_fields', 4);
add_filter('aei_StyleSchemaDefault', 'aei_style_schema');
add_filter('aei_StyleMetaDefault', 'aei_style_meta');
add_filter('aei_StyleArchiveDefault', 'aei_style_archive');
function aei_style(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $style = Registrar::forTerm('style', 'Style', 'Styles')
        ->setIcon('style')
        ->make([
            'rewrite'   => [
                'slug'          => 'in/style',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'artist',
                'event',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
        ]);
//$directory = $style->getConfig('directory');
}
function aei_style_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $style = Registrar::getInstance('style');
    $fields = $style->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_style_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian Style',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Style',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_style_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo styles in {{name}}.'
    ];
}
function aei_style_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_style_reference_schema(array $defaults):array
{
    return $defaults;
}
taxonomies/themes.php
New file
@@ -0,0 +1,92 @@
<?php
// /taxonomies/theme.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_theme');
add_action('jvbDefineRegistrarFields', 'aei_theme_fields');
add_action('plugins_loaded', 'aei_theme',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_theme_fields', 4);
add_filter('aei_ThemeSchemaDefault', 'aei_theme_schema');
add_filter('aei_ThemeMetaDefault', 'aei_theme_meta');
add_filter('aei_ThemeArchiveDefault', 'aei_theme_archive');
function aei_theme(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $theme = Registrar::forTerm('theme', 'Theme', 'Themes')
        ->setIcon('theme')
        ->make([
            'rewrite'   => [
                'slug'          => 'in/theme',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'artist',
                'event',
            ],
            'hierarchical'  => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'track_changes',
        ]);
//$directory = $theme->getConfig('directory');
}
function aei_theme_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $theme = Registrar::getInstance('theme');
    $fields = $theme->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function aei_theme_schema():array
{
    return [
//        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{name}} | Canadian Theme',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Theme',
            'name'  => '{{name}}',
        ],
        'description'       => '{{description}}',
    ];
}
function aei_theme_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo themes in {{name}}.'
    ];
}
function aei_theme_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_theme_reference_schema(array $defaults):array
{
    return $defaults;
}
users/_setup.php
@@ -25,15 +25,4 @@
 *                             -> description of the user role. Used in the registration page
 */
require(AEI_DIR . '/users/client.php');
//require(AEI_DIR . '/users/enthusiast.php');
add_filter('jvb_user', 'aei_user');
function aei_user():array
{
    return [
//        'enthusiast'    => aei_user_enthusiast(),
        'client'        => aei_user_client(),
    ];
}
require(AEI_DIR . '/users/artists.php');
users/artists.php
New file
@@ -0,0 +1,397 @@
<?php
// /content/artist.php
use JVBase\managers\SEO\render\Thing\CreativeWork\WebPage\ProfilePage;
use JVBase\meta\Meta;
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'aei_artist');
add_action('jvbDefineRegistrarFields', 'aei_artist_fields');
add_action('plugins_loaded', 'aei_artist',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'aei_artist_fields', 4);
add_filter('aei_ArtistSchemaDefault', 'aei_artist_schema');
add_filter('aei_ArtistMetaDefault', 'aei_artist_meta');
add_filter('aei_ArtistArchiveDefault', 'aei_artist_archive');
function aei_artist(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $artist = Registrar::forUser('artist', 'Artist', 'Artists')
        ->setAll([
            'has_dashboard',
            'can_register',
            'keep_stats',
            'can_favourite',
            'member_verified',
        ])
        ->setCreatable([
            'piercer'   => ['piercings','artwork','events'],
            'tattoo_artist'   => ['tattoos','artwork','events'],
            'artist'    => ['artwork']
        ])
        ->setUserSubtype('artist_type');
    $artist->profile()
        ->setIcon('artist')
        ->make([
            'rewrite'   => [
                'slug'          => 'artist',
                'with_front'    => false,
            ],
            'taxonomies'    => [
                'art_form',
                'art_style',
                'art_theme',
                'artist_type',
                'city',
                'colours',
                'shop',
                'style',
                'theme',
            ],
            'hierarchical'  => false,
        ])
        ->setAll([
            'favouritable',
            'karma',
            'show_feed',
            'show_directory',
            'approve_new',
            'invitable',
            'track_changes',
        ]);
//$directory = $artist->getConfig('directory');
}
function aei_artist_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $artist = Registrar::getInstance('artist');
    $profile = $artist->getProfile();
    $fields = $profile->fields();
    $fields->addField('display_name', [
        'type'      => 'text',
        'label'     => 'display_name',
        'required'  => true,
    ]);
    $fields->addField('first_name', [
       'type'       => 'text',
       'label'      => 'First Name',
       'required'   => true,
    ]);
    $fields->addField('phone', [
       'type'   => 'phone',
       'label'  => 'Phone'
    ]);
    $fields->addField('email', [
       'type'   => 'email',
       'label'  => 'Email'
    ]);
    $fields->addCommon('links');
    $fields->addCommon('contact');
    $fields->addField('followers', [
       'type'   => 'repeater',
       'label'  => 'Social Followers',
       'hidden' => true,
       'fields' => [
           'count'  => [
               'type'   => 'text',
               'subtype'=> 'number',
               'label'  => 'Count'
           ],
           'source' => [
               'type'   => 'select',
               'label'  => 'Source',
               'options'    => [
                   'instagram'  => 'Instagram',
                   'facebook'   => 'Facebook',
                   'tiktok'     => 'TikTok',
                   'general'    => 'General',
               ]
           ],
           'checked'    => [
               'type'   => 'date',
               'label'  => 'Lst Checked'
           ]
       ]
    ]);
    $fields->addField('insta_handle', [
        'type'  => 'text',
        'hidden'    => true,
        'label'     => 'Instagram Handle'
    ]);
    $fields->addField('show_online', [
       'type'   => 'true_false',
       'label'  => 'Show Online',
    ]);
    $fields->addField('featured_artist', [
        'type'  => 'true_false',
        'label' => 'Featured Artist',
        'hint'  => 'Would you like a chance to be a featured artist?',
    ]);
    $fields->addField('has_discounts', [
       'type'   => 'true_false',
       'label'  => 'Discounts',
       'description' =>  'Do you offer discounted or free services to those leaving domestic violence, gangs, covering hateful imagery, or trafficking?
This will NOT be posted anywhere publicly. We work with local non-profits for our New Legacy Program, and we want to know who we can refer to.
Some non-profits may have discretionary funds to put towards these services.',
    ]);
    $fields->addField('discounts', [
       'type'   => 'repeater',
       'label'  => 'What do you offer?',
       'fields' => [
           'for'    => [
               'type'   => 'text',
               'label'  => 'For: ',
               'hint'   => 'Who is this for? Example: hateful symbolism, domestic violence, prison tattoos, gang tattoos, scars, human trafficking, etc'
           ],
           'description' => [
               'type'   => 'textarea',
               'quill'  => true,
               'label'  => 'What do you offer?',
               'hint'   => 'What do you offer? Discount/pro bono/sliding scale? What are the conditions?'
           ]
       ]
    ]);
    $fields->addField('top_style', [
        'type'  => 'selector',
        'subtype'=> 'taxonomy',
        'isReference' => true,
        'taxonomy' => 'style',
        'max'     => 3,
        'label'     => 'Top Styles (Max 3)',
        'hint'      => 'If you want to control which 3 styles show at the top of your profile, select your top favourite styles to work in. If you do not select any, it will be determined by the tattoo styles you post most often.'
    ]);
    $fields->addField('top_theme', [
        'type'  => 'selector',
        'subtype'=> 'taxonomy',
        'isReference' => true,
        'taxonomy' => 'theme',
        'max'     => 3,
        'label'     => 'Top Themes (Max 3)',
        'hint'      => 'If you want to control which 3 themes show at the top of your profile, select your top favourite styles to work in. If you do not select any, it will be determined by the tattoo themes you post most often.'
    ]);
    $fields->addField('city', [
        'type'  => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'city',
        'label'     => 'City',
    ]);
    $fields->addField('shop', [
        'type'  => 'selector',
        'subtype' => 'taxonomy',
        'taxonomy'  => 'shop',
        'label' => 'Shop',
    ]);
    $fields->addField('requested_shop', [
        'type'  => 'selector',
        'subtype' => 'taxonomy',
        'isReference' => true,
        'taxonomy'  => 'shop',
        'label' => 'Requested Shop',
        'hidden'    => true,
    ]);
    //TODO These two should probably be auto-added via management settings
    $fields->addField('shop_owner',[
        'hidden'    => true,
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'shop',
        'isReference' => 'true',
        'label'     => 'Shop Owner',
    ]);
    $fields->addField('shop_manager',[
        'hidden'    => true,
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'shop',
        'isReference' => 'true',
        'label'     => 'Shop Manager',
    ]);
    $fields->modifyField('post_excerpt', 'label', 'Short Bio');
        $fields->modifyField('post_excerpt', 'maxLength', 133);
        $fields->modifyField('post_excerpt', 'description', 'A short description of yourself. 1-3 sentences.');
    $fields->modifyField('post_content', 'label', 'Bio');
        $fields->modifyField('post_content', 'quill', true);
        $fields->modifyField('post_content', 'description', 'A longer bio for your main profile.');
    $fields->addField('image_portrait', [
        'type'  => 'upload',
        'label' => 'Profile Image'
    ]);
    $fields->addField('artist_type', [
        'type'  => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'artist_type',
        'max'     => 1,
        'label'     => 'You are a:'
    ]);
//    $fields->addCommon('wiki');
//    $fields->addCommon('alternate_name');
//    $fields->addCommon('specialties');
//    $fields->addCommon('rate');
//    $fields->addCommon('awards');
//    $fields->addCommon('ratings');
//    $fields->addCommon('reviews');
//    $fields->addCommon('services');
//    $fields->addCommon('languages');
//    $fields->addCommon('credentials');
//    $fields->addCommon('keywords');
    $contact = $profile->addSection('contact')
        ->setIcon('chat')
        ->setFields([
            'display_name',
            'first_name',
            'phone',
            'email',
            'public_contact',
            'admin_contact',
            'show_online',
            'featured_artist',
        ]);
    $profileSection = $profile->addSection('profile')
        ->setIcon('user')
        ->setFields([
            'image_portrait',
            'artist_type',
            'city',
            'shop',
            'post_excerpt',
            'post_content'
        ]);
    $seo = $profile->getSEO();
//    $seo = $profile->addSection('seo')
//        ->setIcon('robot')
//        ->setFields([
//            'alternate_name',
//            'specialties',
//            'rate',
//            'awards',
//            'ratings',
//            'reviews',
//            'services',
//            'languages',
//            'credentials',
//            'keywords'
//        ]);
}
function aei_artist_schema():array
{
    return [
        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\WebPage\ProfilePage',
        'name'              => '{{post_title}} | Edmonton\'s Best {{artist_type.name}}',
        'about'             => [
            'type'  => 'JVBase\managers\SEO\render\Thing\Person',
            'name'  => '{{post_title}}',
            'givenName' => '{{first_name',
            'description' => '{{post_excerpt}}',
            'memberOf'  => ['@id' => get_home_url().'/#organization'],
            'alternateName' => '{{alternate_name}}',
            'workLocation'  => '{{city}}'
        ],
        'description'       => '{{post_excerpt}}',
    ];
}
add_filter('jvb_single_artit_profile_schema_output', 10, 2);
function aei_artist_schema_output(ProfilePage $profile, int $ID):ProfilePage
{
    $person = $profile->getAbout();
    $meta = Meta::forPost($ID);
    $public_contact = $meta->get('public_contact');
    foreach ($public_contact as $c) {
        switch ($c) {
            case 'text':
            case 'call':
                $phone = $meta->get('phone');
                if (!empty($phone)) {
                    $person->setTelephone($phone);
                }
                break;
            case 'email':
                $email = $meta->get('email');
                if(!empty($email)) {
                    $person->setEmail($email);
                }
        }
    }
    $links = $meta->get('links');
    $sameAs = [];
    foreach($links as $link) {
        $sameAs[] = $link['url'];
    }
    if (!empty($links)) {
        $person->setSameAs($sameAs);
    }
    //TODO: Rating is not a property of Person
//    $rating = $meta->get('average_rating');
//    if (!empty($rating) || $rating === 'none') {
//        $total = $meta->get('total_ratings');
//        $person->setAggregateRating([
//            'ratingValue'   => $rating,
//            'ratingCount'   => $total === '' ? 1 : $total,
//            'bestRating'    => 5,
//            'worstRating'   => 1,
//        ])
//    }
    return $profile;
}
function aei_artist_meta():array
{
    return[
        'name' => 'Best Tattoos in {{name}}',
        'description'   => 'Tattoos, piercings, tattoo artists, and tattoo artists in {{name}}.'
    ];
}
function aei_artist_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => '{{name}}\'s Best Tattoo Artists',
    ]);
}
function aei_artist_reference_schema(array $defaults):array
{
    return $defaults;
}
users/client.php
File was deleted