Jake Vanderwerf
2026-04-26 3f08cede4c4e71244a5c5f8f6cfe1ce98e5e908b
=Switching to new jvb system
1 files deleted
5 files modified
10 files added
938 ■■■■ changed files
assets/css/icons.css 1 ●●●● patch | view | raw | blame | history
assets/icons/background.svg 49 ●●●●● patch | view | raw | blame | history
assets/icons/flower.svg 1 ●●●● patch | view | raw | blame | history
assets/icons/jakevan-logo.svg 1 ●●●● patch | view | raw | blame | history
assets/icons/outline-flower-only.svg 9 ●●●●● patch | view | raw | blame | history
assets/icons/outline-flower-outline.svg 7 ●●●●● patch | view | raw | blame | history
assets/icons/outline-full-flower.svg 20 ●●●●● patch | view | raw | blame | history
assets/icons/outline-leaves-only.svg 9 ●●●●● patch | view | raw | blame | history
assets/tatty-soap-rose-header.webp patch | view | raw | blame | history
atatty.php 64 ●●●● patch | view | raw | blame | history
blocks/_setup.php 36 ●●●●● patch | view | raw | blame | history
content/_setup.php 14 ●●●● patch | view | raw | blame | history
content/soap.php 226 ●●●● patch | view | raw | blame | history
seo.php 359 ●●●●● patch | view | raw | blame | history
taxonomies/_setup.php 14 ●●●● patch | view | raw | blame | history
taxonomies/flags.php 128 ●●●● patch | view | raw | blame | history
assets/css/icons.css
New file
@@ -0,0 +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-star-half-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzkuMTgsOTcuMjZBMTYuMzgsMTYuMzgsMCwwLDAsMjI0LjkyLDg2bC01OS00Ljc2TDE0My4xNCwyNi4xNWExNi4zNiwxNi4zNiwwLDAsMC0zMC4yNywwTDkwLjExLDgxLjIzLDMxLjA4LDg2YTE2LjQ2LDE2LjQ2LDAsMCwwLTkuMzcsMjguODZsNDUsMzguODNMNTMsMjExLjc1YTE2LjQsMTYuNCwwLDAsMCwyNC41LDE3LjgyTDEyOCwxOTguNDlsNTAuNTMsMzEuMDhBMTYuNCwxNi40LDAsMCwwLDIwMywyMTEuNzVsLTEzLjc2LTU4LjA3LDQ1LTM4LjgzQTE2LjQzLDE2LjQzLDAsMCwwLDIzOS4xOCw5Ny4yNlptLTE1LjM0LDUuNDctNDguNyw0MmE4LDgsMCwwLDAtMi41Niw3LjkxbDE0Ljg4LDYyLjhhLjM3LjM3LDAsMCwxLS4xNy40OGMtLjE4LjE0LS4yMy4xMS0uMzgsMGwtNTQuNzItMzMuNjVBOCw4LDAsMCwwLDEyOCwxODEuMVYzMmMuMjQsMCwuMjcuMDguMzUuMjZMMTUzLDkxLjg2YTgsOCwwLDAsMCw2Ljc1LDQuOTJsNjMuOTEsNS4xNmMuMTYsMCwuMjUsMCwuMzQuMjlTMjI0LDEwMi42MywyMjMuODQsMTAyLjczWiIvPjwvc3ZnPg==');}.icon-star-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzQuMjksMTE0Ljg1bC00NSwzOC44M0wyMDMsMjExLjc1YTE2LjQsMTYuNCwwLDAsMS0yNC41LDE3LjgyTDEyOCwxOTguNDksNzcuNDcsMjI5LjU3QTE2LjQsMTYuNCwwLDAsMSw1MywyMTEuNzVsMTMuNzYtNTguMDctNDUtMzguODNBMTYuNDYsMTYuNDYsMCwwLDEsMzEuMDgsODZsNTktNC43NiwyMi43Ni01NS4wOGExNi4zNiwxNi4zNiwwLDAsMSwzMC4yNywwbDIyLjc1LDU1LjA4LDU5LDQuNzZhMTYuNDYsMTYuNDYsMCwwLDEsOS4zNywyOC44NloiLz48L3N2Zz4=');}
assets/icons/background.svg
New file
@@ -0,0 +1,49 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">
  <path id="a" fill="none" stroke="currentColor"stroke-width=".014" d="M15.822 16.06c-.021 0-.083-.034-.06-.09.004-.01.023-.033.024-.037.004-.01-.009-.052.024-.08.02-.016.065-.014.08-.003-.007-.02.007-.089.066-.084.017.001.038.014.05.01 0 0 .07-.035.098.026a.1.1 0 0 1 .008.032l-.002.016.016-.006c.015-.005.073-.01.085.044.003.012.001.04.003.045.003.01.038.036.027.078-.006.025-.044.05-.063.05.018.011.048.075-.004.107-.014.009-.039.011-.046.02 0 0-.036.07-.094.038a.1.1 0 0 1-.025-.022L16 16.19l-.008.014c-.01.013-.054.05-.096.016-.01-.009-.025-.033-.028-.036-.008-.006-.052-.007-.068-.047-.01-.024.006-.066.022-.077" clip-rule="evenodd"/>
  <use xlink:href="#a" transform="rotate(-39.276 -10.607 80.402)scale(2.98742)"/>
  <use xlink:href="#a" transform="rotate(-44.805 -37.563 118.023)scale(5.389)"/>
  <use xlink:href="#a" transform="rotate(218.887 50.994 84.718)scale(7.37672)"/>
  <use xlink:href="#a" transform="rotate(62.282 117.36 -13.588)scale(5.79528)"/>
  <use xlink:href="#a" transform="rotate(238.34 48.999 120.72)scale(8.92312)"/>
  <use xlink:href="#a" transform="rotate(-31.775 -43.1 147.008)scale(4.302)"/>
  <use xlink:href="#a" transform="rotate(134.177 36.716 20.345)scale(2.78662)"/>
  <use xlink:href="#a" transform="rotate(225.09 44.205 71.743)scale(6.01982)"/>
  <use xlink:href="#a" transform="rotate(121.022 50.094 29.998)scale(3.655)"/>
  <use xlink:href="#a" transform="rotate(-42.154 -.603 72.59)scale(2.49675)"/>
  <use xlink:href="#a" transform="rotate(5.681 862.543 -904.797)scale(6.21292)"/>
  <use xlink:href="#a" transform="rotate(-10.91 -189.46 426.469)scale(4.60314)"/>
  <use xlink:href="#a" transform="rotate(-26.868 -253.855 417.234)scale(10.59674)"/>
  <use xlink:href="#a" transform="rotate(-50.122 14.878 36.655)scale(1.79712)"/>
  <use xlink:href="#a" transform="rotate(-75.299 .522 46.75)scale(2.69331)"/>
  <use xlink:href="#a" transform="rotate(53.285 27.111 17.872)scale(1.1517)"/>
  <use xlink:href="#a" transform="rotate(254.654 31.68 165.897)scale(10.98135)"/>
  <use xlink:href="#a" transform="rotate(212.906 38.692 44.239)scale(3.96058)"/>
  <use xlink:href="#a" transform="rotate(-96.544 17.81 43.099)scale(3.2742)"/>
  <use xlink:href="#a" transform="rotate(-88.844 23.031 68.996)scale(4.3728)"/>
  <use xlink:href="#a" transform="rotate(-70.931 13.948 33.09)scale(2.28257)"/>
  <use xlink:href="#a" transform="rotate(-4.913 -447.208 618.813)scale(3.99985)"/>
  <use xlink:href="#a" transform="rotate(31.604 86.295 -7.457)scale(2.24754)"/>
  <use xlink:href="#a" transform="rotate(47.702 37.284 -2.691)scale(1.83035)"/>
  <use xlink:href="#a" transform="rotate(4.733 789.311 -703.802)scale(5.42008)"/>
  <use xlink:href="#a" transform="rotate(71.06 112.935 -13.855)scale(6.09888)"/>
  <use xlink:href="#a" transform="rotate(88.668 89.128 13.941)scale(5.28266)"/>
  <use xlink:href="#a" transform="rotate(-57.362 10.02 68.658)scale(3.2221)"/>
  <use xlink:href="#a" transform="rotate(226.012 30.028 50.952)scale(4.6482)"/>
  <use xlink:href="#a" transform="rotate(118.857 122.41 39.803)scale(9.78019)"/>
  <use xlink:href="#a" transform="rotate(119.17 60.286 21.488)scale(4.66228)"/>
  <use xlink:href="#a" transform="rotate(200.967 51.27 77.533)scale(6.88209)"/>
  <use xlink:href="#a" transform="rotate(42.92 142.71 -17.984)scale(5.3006)"/>
  <use xlink:href="#a" transform="rotate(-99.572 24.045 17.834)scale(1.30925)"/>
  <use xlink:href="#a" transform="rotate(220.884 71.004 121.013)scale(10.19418)"/>
  <use xlink:href="#a" transform="rotate(-48.299 -31.788 171.312)scale(7.43685)"/>
  <use xlink:href="#a" transform="rotate(-1.027 -1772.216 2374.039)scale(3.1542)"/>
  <use xlink:href="#a" transform="rotate(2.29 44.297 -136.78)scale(1.91142)"/>
  <use xlink:href="#a" transform="rotate(51.988 151.469 -32.38)scale(7.12958)"/>
  <use xlink:href="#a" transform="rotate(-46.275 25.314 5.938)scale(.69533)"/>
  <use xlink:href="#a" transform="rotate(-52.63 -32.143 148.992)scale(7.16946)"/>
  <use xlink:href="#a" transform="rotate(110.103 144.559 34.06)scale(9.79811)"/>
  <use xlink:href="#a" transform="rotate(200.002 41.207 36.631)scale(3.87382)"/>
  <use xlink:href="#a" transform="rotate(65.758 91.222 -2.921)scale(5.44265)"/>
  <use xlink:href="#a" transform="rotate(116.933 115.074 29.597)scale(8.84467)"/>
  <use xlink:href="#a" transform="rotate(242.866 29.314 73.544)scale(5.87325)"/>
</svg>
assets/icons/flower.svg
New file
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5" clip-rule="evenodd" viewBox="0 0 64 32"><g stroke="#151515" stroke-width=".78"><path fill="url(#a)" d="M11.22 29.22c1.15-8.26 6.5-13.06 13.03-13.44-.32 8.1-6.39 13.74-13.03 13.44"/><path fill="url(#b)" d="M7.6 2.99c2.61 9 9.33 13.47 16.65 12.84C22.6 6.88 14.94 1.6 7.6 3"/><path fill="url(#c)" d="M2.39 15.95c7.82-5.8 16.2-5.28 21.86-.17-7 6.37-16.66 5.94-21.86.17"/><path fill="url(#d)" d="M52.78 29.22c-1.15-8.26-6.5-13.06-13.03-13.44.32 8.1 6.39 13.74 13.03 13.44"/><path fill="url(#e)" d="M56.4 2.99c-2.61 9-9.33 13.47-16.65 12.84C41.4 6.88 49.06 1.6 56.4 3"/><path fill="url(#f)" d="M61.61 15.95c-7.82-5.8-16.2-5.28-21.86-.17 7 6.37 16.66 5.94 21.86.17"/></g><g stroke="#151515" stroke-width=".78"><path fill="url(#g)" d="M34.77 12.56c-1.9 1.72-2.88.69-5.54 0 0 0-2.87-3.87-3.47-4.7-.52-.73-.01-3.56 1.46-4.51 2.14-1.38 4.06.11 4.78.11s2.64-1.49 4.78-.11c1.47.95 1.98 3.78 1.46 4.5-.6.84-3.47 4.7-3.47 4.7"/><path fill="url(#h)" d="M29.48 12.38c1.14 1.5-1.06 3.5-1.7 5.26 0 0-4.57 1.53-5.55 1.84-.85.27-3.39-1.08-3.83-2.78-.65-2.46 1.36-3.82 1.58-4.5s-.6-2.97 1.37-4.58c1.36-1.11 4.2-.71 4.73 0 .61.83 3.4 4.76 3.4 4.76"/><path fill="url(#i)" d="m27.68 17.34 4.47 3.26.05 5.84c0 .9-2.08 2.89-3.83 2.79-2.54-.15-3.22-2.48-3.8-2.9s-3-.35-3.93-2.72c-.64-1.64.62-4.22 1.47-4.5.97-.32 5.57-1.77 5.57-1.77"/><path fill="url(#j)" d="m31.85 20.6 4.47-3.26s4.6 1.45 5.57 1.77c.85.28 2.1 2.86 1.47 4.5-.92 2.37-3.35 2.3-3.93 2.72s-1.26 2.75-3.8 2.9c-1.75.1-3.82-1.9-3.83-2.79z"/><path fill="url(#k)" d="M36.23 17.64c-.57-1.76-3.49-2.3-1.71-5.26 0 0 2.79-3.93 3.4-4.76.53-.71 3.37-1.11 4.73 0 1.97 1.6 1.15 3.9 1.37 4.58s2.23 2.04 1.58 4.5c-.44 1.7-2.98 3.05-3.83 2.78-.98-.3-5.54-1.84-5.54-1.84"/></g><path fill="none" stroke="#151515" stroke-width=".78" d="M32 9.51v2.73zm-6.82 4.96 2.59.84zm13.64 0-2.59.84zm-9.43 5.81-1.6 2.2zm5.23 0 1.6 2.2z"/><path fill="#c08e47" stroke="#151515" stroke-width=".78" d="M36.32 16.65a4.4 4.4 0 0 1-4.41 4.42 4.4 4.4 0 0 1-4.42-4.42 4.4 4.4 0 0 1 4.42-4.41 4.4 4.4 0 0 1 4.41 4.41"/><path fill="#151515" d="M33.76 16.69a1.83 1.83 0 0 1-1.83 1.82 1.83 1.83 0 0 1-1.82-1.82 1.83 1.83 0 0 1 1.82-1.83 1.83 1.83 0 0 1 1.83 1.83"/><defs><linearGradient id="a" x1="0" x2="1" y1="0" y2="0" gradientTransform="rotate(-45.71 40.17 1.23)scale(18.63563)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#9fac9d"/><stop offset=".19" stop-color="#738670"/><stop offset=".4" stop-color="#496144"/><stop offset="1" stop-color="#365131"/></linearGradient><linearGradient id="b" x1="0" x2="1" y1="0" y2="0" gradientTransform="rotate(37.48 -.74 12.8)scale(20.93287 -20.93287)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#9fac9d"/><stop offset=".19" stop-color="#738670"/><stop offset=".4" stop-color="#496144"/><stop offset="1" stop-color="#365131"/></linearGradient><linearGradient id="c" x1="0" x2="1" y1="0" y2="0" gradientTransform="rotate(-.28 3259.96 -502.7)scale(21.76222)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#9fac9d"/><stop offset=".19" stop-color="#738670"/><stop offset=".4" stop-color="#496144"/><stop offset="1" stop-color="#365131"/></linearGradient><linearGradient id="d" x1="0" x2="1" y1="0" y2="0" gradientTransform="rotate(45.71 -8.17 77.14)scale(-18.63563 18.63563)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#9fac9d"/><stop offset=".19" stop-color="#738670"/><stop offset=".4" stop-color="#496144"/><stop offset="1" stop-color="#365131"/></linearGradient><linearGradient id="e" x1="0" x2="1" y1="0" y2="0" gradientTransform="rotate(142.52 27.65 11.1)scale(20.93287)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#9fac9d"/><stop offset=".19" stop-color="#738670"/><stop offset=".4" stop-color="#496144"/><stop offset="1" stop-color="#365131"/></linearGradient><linearGradient id="f" x1="0" x2="1" y1="0" y2="0" gradientTransform="rotate(-179.72 30.77 7.87)scale(21.76222 -21.76222)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#9fac9d"/><stop offset=".19" stop-color="#738670"/><stop offset=".4" stop-color="#496144"/><stop offset="1" stop-color="#365131"/></linearGradient><linearGradient id="g" x1="0" x2="1" y1="0" y2="0" gradientTransform="rotate(90 14.35 17.57)scale(9.33844)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c8705a"/><stop offset=".6" stop-color="#d18876"/><stop offset=".81" stop-color="#e6c0b6"/><stop offset="1" stop-color="#fbf9f7"/></linearGradient><linearGradient id="h" x1="0" x2="1" y1="0" y2="0" gradientTransform="rotate(18 -28.66 68.36)scale(9.33843)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c8705a"/><stop offset=".6" stop-color="#d18876"/><stop offset=".81" stop-color="#e6c0b6"/><stop offset="1" stop-color="#fbf9f7"/></linearGradient><linearGradient id="i" x1="0" x2="1" y1="0" y2="0" gradientTransform="rotate(-54 38.33 -10.75)scale(9.33844)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c8705a"/><stop offset=".6" stop-color="#d18876"/><stop offset=".81" stop-color="#e6c0b6"/><stop offset="1" stop-color="#fbf9f7"/></linearGradient><linearGradient id="j" x1="0" x2="1" y1="0" y2="0" gradientTransform="rotate(234 26.57 3.14)scale(9.33844)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c8705a"/><stop offset=".6" stop-color="#d18876"/><stop offset=".81" stop-color="#e6c0b6"/><stop offset="1" stop-color="#fbf9f7"/></linearGradient><linearGradient id="k" x1="0" x2="1" y1="0" y2="0" gradientTransform="rotate(162 21.16 9.52)scale(9.33843)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c8705a"/><stop offset=".6" stop-color="#d18876"/><stop offset=".81" stop-color="#e6c0b6"/><stop offset="1" stop-color="#fbf9f7"/></linearGradient></defs></svg>
assets/icons/jakevan-logo.svg
File was deleted
assets/icons/outline-flower-only.svg
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 678 654" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
    <g transform="matrix(1,0,0,1,-621.261,-244.389)">
        <g id="Just-Flower" serif:id="Just Flower" transform="matrix(1,0,0,1,-64.0505,-453.697)">
            <path d="M863.37,806.673C863.26,800.731 863.72,794.227 864.829,787.442C869.317,760.01 883.615,728.099 906.516,713.348C939.7,691.973 970.817,697.023 994.431,704.695C1003.08,707.504 1010.62,710.656 1016.75,712.731C1019.65,713.715 1022.07,714.52 1024,714.52C1025.93,714.52 1028.35,713.715 1031.26,712.731C1037.38,710.656 1044.92,707.504 1053.57,704.695C1077.18,697.023 1108.3,691.973 1141.48,713.348C1164.38,728.099 1178.68,760.01 1183.17,787.442C1184.28,794.24 1184.74,800.757 1184.63,806.708C1190.27,804.751 1196.63,803.166 1203.47,802.119C1230.95,797.909 1265.71,801.647 1286.82,818.869C1317.4,843.824 1322.22,874.977 1322.22,899.807C1322.22,908.899 1321.55,917.05 1321.47,923.512C1321.43,926.578 1321.41,929.124 1322.01,930.965C1322.61,932.805 1324.12,934.854 1325.95,937.312C1329.82,942.492 1335.15,948.694 1340.49,956.051C1355.09,976.138 1369.5,1004.17 1359.43,1042.34C1352.48,1068.67 1326.55,1092.13 1301.84,1104.88C1295.64,1108.08 1289.5,1110.55 1283.74,1112.29C1287.38,1117.07 1290.88,1122.67 1294.01,1128.89C1306.5,1153.72 1313.69,1187.94 1303.83,1213.34C1289.55,1250.14 1261.41,1264.34 1237.79,1272.01C1229.15,1274.82 1221.19,1276.71 1215.02,1278.63C1212.09,1279.54 1209.66,1280.31 1208.1,1281.45C1206.53,1282.58 1205.05,1284.65 1203.28,1287.16C1199.55,1292.43 1195.3,1299.42 1189.95,1306.78C1175.36,1326.86 1153.15,1349.24 1113.74,1351.45C1086.54,1352.98 1056.22,1335.56 1036.46,1316.01C1031.56,1311.16 1027.36,1306.15 1023.95,1301.27C1020.54,1306.15 1016.34,1311.16 1011.44,1316.01C991.684,1335.56 961.36,1352.98 934.162,1351.45C894.751,1349.24 872.546,1326.86 857.951,1306.78C852.606,1299.42 848.354,1292.43 844.622,1287.16C842.851,1284.65 841.37,1282.58 839.804,1281.45C838.238,1280.31 835.811,1279.54 832.883,1278.63C826.712,1276.71 818.754,1274.82 810.107,1272.01C786.493,1264.34 758.352,1250.14 744.069,1213.34C734.212,1187.94 741.401,1153.72 753.895,1128.89C757.036,1122.65 760.551,1117.04 764.196,1112.24C758.482,1110.51 752.403,1108.05 746.257,1104.88C721.555,1092.13 695.624,1068.67 688.671,1042.34C678.597,1004.17 693.015,976.138 707.609,956.051C712.953,948.694 718.283,942.492 722.147,937.312C723.981,934.854 725.493,932.805 726.091,930.965C726.689,929.124 726.67,926.578 726.631,923.512C726.55,917.05 725.884,908.899 725.884,899.807C725.884,874.977 730.698,843.824 761.281,818.869C782.387,801.647 817.154,797.909 844.63,802.119C851.426,803.16 857.753,804.732 863.37,806.673ZM953.027,945.179C952.38,944.658 951.8,944.046 951.307,943.353L949.633,940.999C938.724,926.293 882.354,850.275 869.652,832.555C868.758,831.308 867.949,829.841 867.231,828.179C866.466,827.727 865.638,827.286 864.759,826.847C858.832,823.887 850.816,821.614 841.853,820.24C819.177,816.766 790.291,818.859 772.871,833.073C747.728,853.589 744.218,879.395 744.217,899.807C744.217,916.146 745.792,929.659 743.527,936.63C741.262,943.601 732.045,953.607 722.441,966.826C710.443,983.341 698.116,1006.28 706.398,1037.66C712.136,1059.4 734.275,1078.07 754.663,1088.59C762.721,1092.74 770.542,1095.62 777.076,1096.7C778.167,1096.89 779.209,1097.03 780.19,1097.11C781.605,1096.3 782.985,1095.67 784.313,1095.23C802.123,1089.32 871.495,1067.48 901.611,1058.01C906.552,1056.35 910.427,1055.05 912.829,1054.24C911.552,1047.44 910.884,1040.43 910.884,1033.26C910.884,1024.53 911.875,1016.03 913.751,1007.86L860.489,990.555C855.678,988.992 853.04,983.816 854.604,979.004C856.167,974.193 861.343,971.556 866.155,973.119L919.3,990.387C926.595,972.603 938.29,957.081 953.027,945.179ZM917.756,1072.16C915.343,1072.91 911.749,1074.04 907.276,1075.45C877.269,1085.52 808.507,1108.56 790.652,1114.23C789.261,1114.68 787.703,1114.98 786.001,1115.16C785.226,1115.82 784.439,1116.57 783.633,1117.39C778.987,1122.11 774.347,1129.03 770.272,1137.13C759.96,1157.63 753.024,1185.75 761.16,1206.7C772.902,1236.96 796.359,1248.27 815.773,1254.58C831.312,1259.63 844.65,1262.31 850.58,1266.61C856.51,1270.92 863.178,1282.78 872.783,1296C884.781,1312.51 902.79,1331.33 935.19,1333.14C957.637,1334.4 982.237,1319.12 998.54,1302.98C1004.98,1296.6 1010.13,1290.05 1013.19,1284.17C1013.66,1283.27 1014.08,1282.4 1014.44,1281.56C1014.06,1279.82 1013.86,1278.19 1013.85,1276.68C1013.72,1256.19 1014.52,1171.41 1014.77,1146.05C996.874,1144.6 980.149,1138.97 965.571,1130.15L932.131,1176.17C929.157,1180.27 923.42,1181.17 919.327,1178.2C915.234,1175.23 914.325,1169.49 917.299,1165.4L950.705,1119.42C935.995,1106.88 924.531,1090.64 917.756,1072.16ZM1022.32,1146.41L1023.89,1148L1023.9,1146.43C1023.37,1146.43 1022.85,1146.42 1022.32,1146.41ZM1024.01,1146.43L1024.01,1148L1025.58,1146.42C1025.07,1146.42 1024.56,1146.43 1024.05,1146.43C1024.04,1146.43 1024.02,1146.43 1024.01,1146.43ZM1033.13,1146.07C1033.38,1171.44 1034.18,1256.2 1034.05,1276.68C1034.04,1278.19 1033.84,1279.82 1033.46,1281.56C1033.82,1282.4 1034.24,1283.27 1034.71,1284.17C1037.77,1290.05 1042.92,1296.6 1049.36,1302.98C1065.66,1319.12 1090.27,1334.4 1112.71,1333.14C1145.11,1331.33 1163.12,1312.51 1175.12,1296C1184.72,1282.78 1191.39,1270.92 1197.32,1266.61C1203.25,1262.31 1216.59,1259.63 1232.13,1254.58C1251.54,1248.27 1275,1236.96 1286.74,1206.7C1294.88,1185.75 1287.94,1157.63 1277.63,1137.13C1273.55,1129.03 1268.91,1122.11 1264.27,1117.39C1263.45,1116.56 1262.66,1115.8 1261.87,1115.13C1260.26,1114.96 1258.78,1114.66 1257.45,1114.23C1240.16,1108.74 1175.13,1086.96 1143.79,1076.44C1137.95,1074.61 1133.29,1073.14 1130.33,1072.21C1123.55,1090.68 1112.09,1106.89 1097.4,1119.42L1130.8,1165.4C1133.78,1169.49 1132.87,1175.23 1128.77,1178.2C1124.68,1181.17 1118.94,1180.27 1115.97,1176.17L1082.53,1130.15C1067.9,1139 1051.1,1144.64 1033.13,1146.07ZM1135.27,1054.24C1138.13,1055.21 1143.09,1056.87 1149.45,1059.01C1181,1068.92 1246.38,1089.52 1263.59,1095.23C1264.92,1095.67 1266.31,1096.31 1267.74,1097.12C1268.77,1097.05 1269.87,1096.9 1271.03,1096.7C1277.56,1095.62 1285.38,1092.74 1293.44,1088.59C1313.83,1078.07 1335.96,1059.4 1341.7,1037.66C1349.99,1006.28 1337.66,983.341 1325.66,966.826C1316.06,953.607 1306.84,943.601 1304.57,936.63C1302.31,929.659 1303.88,916.146 1303.88,899.807C1303.88,879.395 1300.37,853.589 1275.23,833.073C1257.81,818.859 1228.92,816.766 1206.25,820.24C1197.29,821.614 1189.27,823.887 1183.34,826.847C1182.41,827.312 1181.54,827.78 1180.73,828.26C1180.03,829.889 1179.23,831.329 1178.35,832.555C1166.42,849.193 1116,917.227 1100.85,937.647L1096.79,943.353C1096.3,944.046 1095.72,944.658 1095.07,945.179C1109.81,957.081 1121.51,972.603 1128.8,990.387L1181.95,973.119C1186.76,971.556 1191.93,974.193 1193.5,979.004C1195.06,983.816 1192.42,988.992 1187.61,990.555L1134.35,1007.86C1136.23,1016.03 1137.22,1024.53 1137.22,1033.26C1137.22,1040.43 1136.55,1047.44 1135.27,1054.24ZM1080.46,935.155C1080.76,934.231 1081.22,933.348 1081.81,932.542L1086.02,926.87C1100.72,906.217 1149.91,837.142 1162.06,820.645C1162.94,819.449 1164.04,818.263 1165.35,817.102C1165.55,816.203 1165.72,815.241 1165.87,814.227C1166.86,807.676 1166.54,799.35 1165.08,790.401C1161.37,767.761 1150.46,740.935 1131.56,728.761C1104.28,711.188 1078.65,715.824 1059.23,722.131C1043.69,727.18 1031.33,732.854 1024,732.854C1016.67,732.854 1004.31,727.18 988.766,722.131C969.352,715.824 943.725,711.188 916.444,728.761C897.543,740.935 886.626,767.761 882.922,790.401C881.459,799.35 881.144,807.676 882.127,814.227C882.273,815.199 882.437,816.124 882.63,816.99C883.99,818.187 885.135,819.41 886.045,820.645C898.972,838.201 953.849,915.302 964.465,930.222L966.186,932.542C966.795,933.362 967.252,934.262 967.554,935.204C981.689,927.036 997.751,921.837 1014.88,920.461L1014.88,865.061C1014.88,860.002 1018.99,855.894 1024.05,855.894C1029.11,855.894 1033.22,860.002 1033.22,865.061L1033.22,920.461C1050.32,921.834 1066.35,927.016 1080.46,935.155ZM1023.44,938.43C971.383,938.757 929.217,981.124 929.217,1033.26C929.217,1085.6 971.711,1128.1 1024.05,1128.1C1076.39,1128.1 1118.88,1085.6 1118.88,1033.26C1118.88,981.124 1076.72,938.757 1024.66,938.43C1024.46,938.443 1024.25,938.45 1024.05,938.45C1023.85,938.45 1023.64,938.443 1023.44,938.43ZM1024.05,990.261C1047.78,990.261 1067.05,1009.53 1067.05,1033.26C1067.05,1056.99 1047.78,1076.26 1024.05,1076.26C1000.32,1076.26 981.051,1056.99 981.051,1033.26C981.051,1009.53 1000.32,990.261 1024.05,990.261Z" style="fill:rgb(21,21,21);"/>
        </g>
    </g>
</svg>
assets/icons/outline-flower-outline.svg
New file
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 678 654" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
    <g transform="matrix(1,0,0,1,-621.295,-244.479)">
        <path id="flower-outline" serif:id="flower outline" d="M718.517,652.607C690.24,653.335 606.315,606.764 637.178,531.472C643.603,515.798 668.966,485.617 670.758,480.1C675.081,466.796 658.137,409.967 703.025,372.274C729.434,350.099 790.219,353.213 810.54,368.419C801.346,341.424 819.838,247.862 900.715,253.927C923.119,255.608 952.139,272.901 967.573,268.545C968.394,268.314 1063.01,220.677 1100.24,302.484C1107.31,318.002 1111.36,341.195 1111.34,346.081C1111.31,353.58 1109.39,360.992 1109.37,368.491C1116.48,366.137 1122.91,362.006 1130.02,359.653C1150.37,352.916 1228.8,347.408 1246.21,418.801C1250.23,435.259 1247.45,474.583 1249.24,480.1C1253.54,493.316 1300.7,529.529 1286.52,586.3C1278.06,620.163 1226.27,653.441 1201.27,652.601C1224.58,668.409 1265.37,755.66 1196.02,798.51C1176.91,810.319 1143.27,813.386 1133.34,825.982C1132.81,826.653 1084.26,920.821 1006.03,876.493C991.175,868.073 974.26,851.662 971.427,847.72C967.056,841.638 964.271,834.513 959.9,828.43C955.529,834.513 952.745,841.638 948.373,847.72C935.859,865.135 875.666,915.654 819.622,868.144C806.7,857.19 785.835,823.742 781.142,820.332C769.893,812.16 710.466,810.595 688.564,756.324C675.514,723.991 697.797,666.675 718.517,652.607C718.517,652.607 718.517,652.607 718.517,652.607Z" style="fill:none;stroke:rgb(21,21,21);stroke-width:18.33px;"/>
    </g>
</svg>
assets/icons/outline-full-flower.svg
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 1414 655" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
    <g transform="matrix(1,0,0,1,-253.224,-243.245)">
        <g id="full-lined" transform="matrix(1,0,0,1,-64,-440.157)">
            <g id="leaf" transform="matrix(0.600914,-0.610084,0.610084,0.600914,-290.624,902.117)">
                <path d="M601.336,1140.64C495.24,1147.67 393.133,1109.62 323.828,1032.66C321.81,1030.42 320.831,1027.44 321.13,1024.44C321.43,1021.44 322.98,1018.7 325.401,1016.9C401.269,960.575 479.305,928.984 554.404,919.343C457.854,836.896 403.384,718.667 410.757,595.613C410.937,592.604 412.378,589.81 414.725,587.919C417.072,586.027 420.109,585.213 423.087,585.676C532.042,602.622 622.163,641.679 691.568,696.292C694.168,615.752 718.204,529.8 766.864,442.836C768.337,440.205 770.85,438.317 773.786,437.635C776.723,436.954 779.811,437.542 782.291,439.256C897.309,518.723 956.331,659.247 940.167,806.319C931.228,805.435 922.967,805.675 915.319,806.78C938.732,662.181 885.049,551.609 779.787,463.803C733.512,550.064 712.32,635.113 712.965,714.199C762.235,758.052 799.482,810.446 823.886,868.527C818.506,870.667 809.729,871.355 799.109,872.496C742.15,738.107 625.479,646.067 431.618,608.772C427.509,767.418 531.69,915.052 695.793,978.681C696.328,986.918 697.566,995.109 699.332,1002.89C653.621,986.464 612.146,963.872 575.789,936.496C503.722,942.466 427.867,971.944 347.883,1027.03C414.012,1094.81 508.485,1127.03 606.127,1118.81C603.552,1126.36 602.029,1133.64 601.336,1140.64Z" style="fill:rgb(21,21,21);"/>
            </g>
            <g id="leaf1" serif:id="leaf" transform="matrix(-0.600914,-0.610084,-0.610084,0.600914,2339,902.117)">
                <path d="M601.857,1140.61C495.574,1147.8 393.247,1109.75 323.828,1032.66C321.81,1030.42 320.831,1027.44 321.13,1024.44C321.43,1021.44 322.98,1018.7 325.401,1016.9C401.269,960.575 479.305,928.984 554.404,919.343C457.854,836.896 403.384,718.667 410.757,595.613C410.937,592.604 412.378,589.81 414.725,587.919C417.072,586.027 420.109,585.213 423.087,585.676C532.042,602.622 622.163,641.679 691.568,696.292C694.168,615.752 718.204,529.8 766.864,442.836C768.337,440.205 770.85,438.317 773.786,437.635C776.723,436.954 779.811,437.542 782.291,439.256C897.382,518.773 956.405,659.424 940.137,806.596C931.185,805.738 922.914,806.007 915.26,807.144C938.822,662.366 885.138,551.683 779.787,463.803C733.512,550.064 712.32,635.113 712.965,714.199C762.339,758.145 799.64,810.669 824.041,868.897C818.621,871.001 809.844,871.684 799.248,872.824C742.339,738.257 625.637,646.097 431.618,608.772C427.506,767.512 531.814,915.228 696.086,978.795C696.609,987.021 697.835,995.204 699.588,1002.98C653.776,986.549 612.214,963.923 575.789,936.496C503.722,942.466 427.867,971.944 347.883,1027.03C414.159,1094.96 508.906,1127.17 606.779,1118.75C604.157,1126.31 602.59,1133.6 601.857,1140.61Z" style="fill:rgb(21,21,21);"/>
            </g>
            <g id="petals" transform="matrix(1,0,0,1,-0.0505496,-13.54)">
                <path d="M1089.32,938.04C1089.32,938.04 1155.12,845.519 1169.44,826.081C1181.91,809.141 1248.92,799.775 1281.03,825.971C1327.46,863.863 1308.07,917.712 1313.29,933.797C1318.52,949.882 1365.86,982.046 1350.57,1040C1339.99,1080.06 1280.28,1111.87 1260.23,1105.5C1237.22,1098.18 1129.6,1062.01 1129.6,1062.01L1129.46,1062.33C1129.46,1062.33 1237.79,1096.32 1260.7,1103.93C1280.67,1110.56 1310.28,1171.39 1295.29,1210.02C1273.6,1265.9 1216.39,1264.09 1202.71,1274.03C1189.03,1283.97 1173.07,1338.94 1113.23,1342.3C1071.86,1344.62 1023.15,1297.66 1023.01,1276.62C1022.86,1252.48 1024.01,1138.95 1024.01,1138.95L1023.89,1138.95C1023.89,1138.95 1025.04,1252.48 1024.89,1276.62C1024.75,1297.66 976.046,1344.62 934.676,1342.3C874.834,1338.94 858.875,1283.97 845.192,1274.03C831.51,1264.09 774.302,1265.9 752.614,1210.02C737.621,1171.39 767.235,1110.56 787.201,1103.93C810.111,1096.32 918.437,1062.33 918.437,1062.33L918.497,1062.01C918.497,1062.01 810.881,1098.18 787.875,1105.5C767.826,1111.87 708.11,1080.06 697.535,1040C682.238,982.046 729.582,949.882 734.809,933.797C740.035,917.712 720.638,863.863 767.076,825.971C799.18,799.775 866.189,809.141 878.663,826.081C892.977,845.519 958.777,938.04 958.777,938.04L958.825,938.005C958.825,938.005 891.166,846.834 877.102,827.214C864.846,810.116 876.645,743.492 911.48,721.054C961.868,688.599 1007.09,723.687 1024,723.687C1040.91,723.687 1086.13,688.599 1136.52,721.054C1171.36,743.492 1183.15,810.116 1170.9,827.214C1156.83,846.834 1089.17,938.005 1089.17,938.005L1089.32,938.04Z" style="fill:none;stroke:rgb(21,21,21);stroke-width:18.33px;"/>
            </g>
            <g id="mid" transform="matrix(1.23473,0,0,1.16557,-254.633,-172.689)">
                <path d="M946.224,1001.24L903.088,986.39C899.191,985.049 897.055,980.608 898.321,976.48C899.587,972.352 903.779,970.09 907.676,971.431L950.718,986.246C963.52,953.184 993.052,929.237 1028.13,926.253L1028.13,878.722C1028.13,874.382 1031.46,870.858 1035.56,870.858C1039.65,870.858 1042.98,874.382 1042.98,878.722L1042.98,926.253C1078.06,929.237 1107.59,953.184 1120.39,986.246L1163.43,971.431C1167.33,970.09 1171.52,972.352 1172.79,976.48C1174.05,980.608 1171.92,985.049 1168.02,986.39L1124.89,1001.24C1126.4,1008.24 1127.21,1015.54 1127.21,1023.03C1127.21,1052.62 1114.69,1079.13 1094.96,1096.95L1122.01,1136.4C1124.42,1139.91 1123.68,1144.83 1120.37,1147.38C1117.06,1149.93 1112.41,1149.15 1110,1145.64L1082.92,1106.15C1069.09,1115.02 1052.88,1120.12 1035.56,1120.12C1018.23,1120.12 1002.02,1115.02 988.193,1106.15L961.11,1145.64C958.701,1149.15 954.055,1149.93 950.74,1147.38C947.425,1144.83 946.689,1139.91 949.097,1136.4L976.153,1096.95C956.423,1079.13 943.902,1052.62 943.902,1023.03C943.902,1015.54 944.705,1008.24 946.224,1001.24ZM1035.06,941.669C992.899,941.949 958.75,978.298 958.75,1023.03C958.75,1067.93 993.165,1104.39 1035.56,1104.39C1077.94,1104.39 1112.36,1067.93 1112.36,1023.03C1112.36,978.298 1078.21,941.949 1036.05,941.669C1035.88,941.68 1035.72,941.686 1035.56,941.686C1035.39,941.686 1035.23,941.68 1035.06,941.669ZM1035.56,986.138C1054.78,986.138 1070.38,1002.67 1070.38,1023.03C1070.38,1043.39 1054.78,1059.92 1035.56,1059.92C1016.33,1059.92 1000.73,1043.39 1000.73,1023.03C1000.73,1002.67 1016.33,986.138 1035.56,986.138Z" style="fill:rgb(21,21,21);"/>
            </g>
        </g>
    </g>
</svg>
assets/icons/outline-leaves-only.svg
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 534 642" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
    <g transform="matrix(1,0,0,1,-1133.74,-243.245)">
        <g id="Leaf" transform="matrix(-0.600914,-0.610084,-0.610084,0.600914,2275,461.959)">
            <path d="M554.404,919.343C457.854,836.896 403.384,718.667 410.757,595.613C410.937,592.604 412.378,589.81 414.725,587.919C417.072,586.027 420.109,585.213 423.087,585.676C532.042,602.622 622.163,641.679 691.568,696.292C694.168,615.752 718.204,529.8 766.864,442.836C768.337,440.205 770.85,438.317 773.786,437.635C776.723,436.954 779.811,437.542 782.291,439.256C954.973,558.562 1001.44,815.494 856.748,1025.59C856.208,1026.89 855.408,1028.1 854.379,1029.11C854.274,1029.22 854.168,1029.32 854.059,1029.42C684.349,1183.89 449.856,1172.61 323.828,1032.66C321.81,1030.42 320.831,1027.44 321.13,1024.44C321.43,1021.44 322.98,1018.7 325.401,1016.9C401.269,960.575 479.305,928.984 554.404,919.343ZM712.965,714.199C793.533,785.909 841.953,880.461 854.635,985.366C971.868,748.756 924.719,584.7 779.787,463.803C733.512,550.064 712.32,635.113 712.965,714.199ZM820.365,1030.16C725.39,1020.43 642.081,986.412 575.789,936.496C503.722,942.466 427.867,971.944 347.883,1027.03C463.563,1145.6 665.983,1155.34 820.365,1030.16ZM835.483,1010.02C807.34,800.755 685.862,657.683 431.618,608.772C426.438,808.772 593.362,991.273 835.483,1010.02Z" style="fill:rgb(21,21,21);"/>
        </g>
    </g>
</svg>
assets/tatty-soap-rose-header.webp
Binary files differ
atatty.php
@@ -13,6 +13,7 @@
    exit;
}
use JVBase\base\Site;
use JVBase\managers\CacheManager;
add_filter('jvb_base', function () {
@@ -23,6 +24,10 @@
const ATAT_DIR = WP_PLUGIN_DIR . '/atatty';
define('ATAT_URL', plugin_dir_url(__FILE__));
add_filter('jvbChildDir', function() { return ATAT_DIR; });
add_filter('jvbChildUrl', function() { return ATAT_URL; });
require(ATAT_DIR . '/content/_setup.php');
require(ATAT_DIR . '/dashboard/_setup.php');
require(ATAT_DIR . '/email/_setup.php');
@@ -30,9 +35,33 @@
require(ATAT_DIR . '/login/_setup.php');
require(ATAT_DIR . '/taxonomies/_setup.php');
require(ATAT_DIR . '/users/_setup.php');
require(ATAT_DIR . '/blocks/_setup.php');
require(ATAT_DIR . '/seo.php');
//require(ATAT_DIR . '/files/fileManagement.php');
add_action('plugins_loaded', 'atat_siteDefinition', 2);
add_action('jvbLoadDefinitions', 'atat_siteDefinition');
function atat_siteDefinition():void
{
    if (!class_exists('JVBase\base\Site')) {
        return;
    }
    $site = Site::getInstance();
    $site->set('icons', 'light');
    $site->setAll([
//        'has_map',
//        'referrals',
    ]);
    $site->setIntegrations([
        'cloudflare',
        'facebook',
        'gmb',
        'helcim',
        'postmark',
        'instagram',
        'umami'
    ]);
}
/**
 * Defines base options like:
 *         - directory & Membership
@@ -69,7 +98,7 @@
            'facebook'    => true,
            'maps'        => true,
            'gmb'         => true,
            'helcim'      => false,
            'helcim'      => true,
            'postmark'    => true,
            'instagram'   => true,
            'square'      => false,
@@ -116,10 +145,10 @@
//}
//add_filter('jvbAboveHeader', 'atat_header');
function atat_legacy_header(string $header):string
add_filter('jvbBelowHeader', 'atat_header');
function atat_header(string $header):string
{
    return '<p><b>WED - SUN</b> <span class="hide-small">&emsp;</span>10<span class="hide-small">:00</span>AM - 6<span class="hide-small">:00</span>PM</p><p>By Appointment<span class="hide-small"> Only</span></p>';
    return '<p>FREE LOCAL PICKUP at <a href="https://legacytattooremoval.ca/">Legacy Tattoo Removal</a>.</p>';
}
@@ -146,7 +175,7 @@
    ) {
        return $nav.'<li><ul class="socials">
            <li>
                <a href="https://www.facebook.com/tatty.soap/" target="_blank" rel="nofollow" title="Find us on Facebook">
                <a href="https://www.facebook.com/madebymadimori/" target="_blank" rel="nofollow" title="Find us on Facebook">
                    '.jvbIcon('facebook-logo').'
                    <span class="screen-reader-text">
                        Find us on Facebook
@@ -154,7 +183,7 @@
                </a>
            </li>
            <li>
                <a href="https://www.instagram.com/tatty.soap" target="_blank" rel="nofollow" title="Find us on Instagram">
                <a href="https://www.instagram.com/madebymadimori" target="_blank" rel="nofollow" title="Find us on Instagram">
                    '.jvbIcon('instagram-logo').'
                    <span class="screen-reader-text">
                        Find us on Instagram
@@ -193,3 +222,24 @@
        ]
    );
}
add_filter('jvbRandomFooterText', 'atat_footer_text');
function atat_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>';
}
add_filter('jvbRegisterCustomIcons', 'atat_custom_icons');
function atat_custom_icons(array $icons):array
{
    $icons['background'] = ATAT_DIR . '/assets/icons/background.svg';
//    $icons['logo-jakevan'] = ATAT_DIR . '/assets/icons/logo-concentric-jakevan.svg';
//    $icons['logo-right'] = ATAT_DIR . '/assets/icons/logo-right-aligned.svg';
//    $icons['logo-right-jakevan'] = ATAT_DIR . '/assets/icons/logo-right-aligned-jakevan.svg';
//    $icons['jakevan'] = ATAT_DIR . '/assets/icons/jakevan.svg';
//    $icons['loading'] = ATAT_DIR . '/assets/icons/loading.svg';
    return $icons;
}
blocks/_setup.php
New file
@@ -0,0 +1,36 @@
<?php
function atat_render_core_site_logo(array $block, string $content):string
{
    $open = $close = '';
    if (!is_home() && !is_front_page()) {
        $open = '<a href="'.get_home_url().'" rel="home">';
        $close = '</a>';
    }
    $cache = (class_exists('JVBase\managers\Cache')) ? JVBase\managers\Cache::for('full-icons') : false;
    if (array_key_exists('className', $block['attrs'])) {
        $logo = false;
        if (str_contains($block['attrs']['className'], 'is-proper')) {
            $logo = '<img class="logo" src="'.ATAT_URL.'/assets/tatty-soap-rose-header.webp">';
        }
        if ($logo) {
            return $open.$logo.$close;
        }
    }
    return JVB()->blocks()->render_core_site_logo($block, $content);
}
function atat_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(ATAT_DIR .'/assets/icons/background.svg');
    $search = str_contains($content, '<header>') ? '</header>' : '</footer>';
    return str_replace($search, $icon.$search, $content);
}
content/_setup.php
@@ -31,10 +31,10 @@
require(ATAT_DIR . '/content/soap.php');
add_filter('jvb_content', 'atat_content');
function atat_content($content):array
{
    return [
        'soap'       => atat_soap(),
    ];
}
//add_filter('jvb_content', 'atat_content');
//function atat_content($content):array
//{
//    return [
//        'soap'       => atat_soap(),
//    ];
//}
content/soap.php
@@ -1,69 +1,171 @@
<?php
// /content/soap.php
function atat_soap():array
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'atat_soap');
add_action('jvbDefineRegistrarFields', 'atat_soap_fields');
add_action('plugins_loaded', 'atat_soap',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'atat_soap_fields', 4);
add_filter('atat_FaqSchemaDefault', 'atat_soap_schema');
add_filter('atat_FaqMetaDefault', 'atat_soap_meta');
add_filter('atat_FaqArchiveDefault', 'atat_soap_archive');
function atat_soap(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $soap = Registrar::forPost('soap', 'Soap', 'Soaps')
        ->setIcon('sparkle')
        ->make([
            'rewrite'   => [
                'slug'          => 'soap',
                'with_front'    => false,
            ],
            'taxonomies'    => [
                'flag',
            ],
            'public'    => false,
        ])
        ->setAll([
            'show_directory',
        ])
        ->setIntegration('helcim')
        ->setIntegration('facebook')
        ->setIntegration('instagram');
//$directory = $soap->getConfig('directory');
}
function atat_soap_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $soap = Registrar::getInstance('soap');
//    $breadcrumbs = $soap->config('breadcrumbs');
//    $breadcrumbs->setCrumb('section');
    $fields = $soap->fields();
    $fields->addField('ingredients', [
        'type'      => 'textarea',
        'quill'     => true,
        'label'     => 'Ingredients',
    ]);
    $fields->addField('extra_info', [
        'type'      => 'textarea',
        'quill'     => true,
        'label'     => 'Extra Info',
    ]);
    $fields->addField('flag', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'flag',
        'label'     => 'Flags',
    ]);
}
function atat_soap_schema():array
{
    return [
        'singular'       => 'Soap',
        'plural'       => 'Soaps',
        'dash_title'    => 'Soap',
        'dash_description' => 'Manage your soap',
        'breadcrumb'    => 'Soap',
        'icon'         => 'sparkle',
        'integrations'  => [
            'helcim'    => [
                'initial'   => true,
                'update'    => true,
            ],
        ],
        'rewrite'      => [
            'slug'       => 'soap',
            'with_front' => false,
        ],
        'fields'       => [
            'post_title'     => [
                'type'  => 'text',
                'label' => 'Name',
            ],
            'post_status'         => [
                'type'      => 'radio',
                'label'     => 'Status',
                'hidden'    => true,
                'options'   => [
                    'publish'   => 'Show',
                    'draft'     => 'Hide',
                    'trash'     => 'Scrap',
                    'delete'    => 'Permanently Delete'
                ]
            ],
            'post_slug' => [
                'type'  => 'text',
                'label' => 'Slug',
                'hidden'    => true,
            ],
            'post_content'        => [
                'type'  => 'textarea',
                'label' => 'Description',
                'quill' => true,
            ],
            'ingredients' => [
                'type'  => 'textarea',
                'label' => 'Ingredients',
                'quill' => true,
            ],
            'extra_info' => [
                'type'  => 'textarea',
                'label' => 'Extra Info',
                'quill' => true,
            ],
            'flags'  => [
                'type'  => 'taxonomy',
                'taxonomy'  => 'flags',
                'term'  => 'flags',
                'label' => 'Flags',
            ]
        ],
        'single_image' => true,
        'upload_title' => 'Upload Soaps',
        'type'              => 'JVBase\managers\SEO\render\Thing\Product\Product',
        'name'              => '{{post_title}} | Handmade in Edmonton',
    ];
}
function atat_soap_meta():array
{
    return[
        'name' => '{{post_title}} | Handmade in Edmonton',
    ];
}
function atat_soap_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => 'Handmade Soaps',
        'description' => 'Handmade Soaps in Edmonton, Alberta.'
    ]);
}
function atat_soap_reference_schema(array $defaults):array
{
    return $defaults;
}
// /content/soap.php
//function atat_soap():array
//{
//    return [
//        'singular'       => 'Soap',
//        'plural'       => 'Soaps',
//        'dash_title'    => 'Soap',
//        'dash_description' => 'Manage your soap',
//        'breadcrumb'    => 'Soap',
//        'icon'         => 'sparkle',
//      'integrations'  => [
//          'helcim'    => [
//              'initial'   => true,
//              'update'    => true,
//          ],
//      ],
//        'rewrite'      => [
//            'slug'       => 'soap',
//            'with_front' => false,
//        ],
//        'fields'       => [
//            'post_title'     => [
//                'type'  => 'text',
//                'label' => 'Name',
//            ],
//            'post_status'         => [
//                'type'      => 'radio',
//                'label'     => 'Status',
//                'hidden'    => true,
//                'options'   => [
//                    'publish'   => 'Show',
//                    'draft'     => 'Hide',
//                    'trash'     => 'Scrap',
//                    'delete'    => 'Permanently Delete'
//                ]
//            ],
//            'post_slug' => [
//                'type'  => 'text',
//                'label' => 'Slug',
//              'hidden'    => true,
//            ],
//            'post_content'        => [
//                'type'  => 'textarea',
//                'label' => 'Description',
//                'quill' => true,
//            ],
//            'ingredients' => [
//                'type'  => 'textarea',
//                'label' => 'Ingredients',
//              'quill' => true,
//            ],
//            'extra_info' => [
//                'type'  => 'textarea',
//                'label' => 'Extra Info',
//              'quill' => true,
//            ],
//            'flags'  => [
//                'type'  => 'taxonomy',
//              'taxonomy'  => 'flags',
//                'term'    => 'flags',
//                'label'   => 'Flags',
//            ]
//        ],
//        'single_image' => true,
//        'upload_title' => 'Upload Soaps',
//    ];
//}
seo.php
New file
@@ -0,0 +1,359 @@
<?php
add_filter('atat_OrganizationSchemaDefault', 'atat_organization_schema');
function atat_organization_schema(array $schema): array
{
    return array_merge($schema, [
        'id' => '#legacy-tattoo-removal',
        'type' => 'JVBase\managers\SEO\render\Thing\Organization\LocalBusiness\LocalBusiness',
        'name' => 'Madi Mori',
        'url' => get_home_url(),
        'description' => 'Unscented, all natural soap made in Edmonton, Alberta.',
        'slogan' => 'Making aftercare simple.',
        'logo' => get_theme_mod('custom_logo'),
        'foundingDate' => '2026-04-05',
        'founder' => [
            [
                'id' => 'madi-rawson',
                'type' => 'JVBase\managers\SEO\render\Thing\Person\Person',
                'name' => 'Madi Rawson',
                'url' => 'https://madimori.ca']
        ],
        'sameAs' => [
            'https://www.instagram.com/madebymadimori',
            'https://www.facebook.com/madebymadimori',
        ],
        // Contact
//        'telephone' => '+1-825-925-7398',
        'email' => 'info@madimori.ca',
        // Address
        'address' => [
            'addressLocality' => 'Edmonton',
            'addressRegion' => 'AB',
            'postalCode' => 'T6H 4R5',
            'addressCountry' => 'CA',
        ],
        // Geo - note the key names
        'geo' => [
            'latitude' => '53.5035125',
            'longitude' => '-113.5188023',
        ],
        // Business details
        'priceRange' => '$$',
        'paymentAccepted' => ['Cash', 'Credit Card', 'Debit Card', 'E-Transfer'],
        'currenciesAccepted' => ['CAD'],
        'areaServed' => [
            [
                'id' => '#edmonton',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Edmonton',
                'sameAs' => 'https://en.wikipedia.org/wiki/Edmonton'
            ],
            [
                'id' => '#stalbert',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'St. Albert',
                'sameAs' => 'https://en.wikipedia.org/wiki/St._Albert,_Alberta'],
            [
                'id' => '#sherwoodpark',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Sherwood Park',
                'sameAs' => 'https://en.wikipedia.org/wiki/Sherwood_Park'],
            [
                'id' => '#leduc',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Leduc',
                'sameAs' => 'https://en.wikipedia.org/wiki/Leduc,_Alberta'],
            [
                'id' => '#sprucegrove',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Spruce Grove',
                'sameAs' => 'https://en.wikipedia.org/wiki/Spruce_Grove'],
            [
                'id' => '#calgary',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Calgary',
                'sameAs' => 'https://en.wikipedia.org/wiki/Calgary'],
            [
                'id' => '#reddeer',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Red Deer',
                'sameAs' => 'https://en.wikipedia.org/wiki/Red_Deer,_Alberta'],
            [
                'id' => '#strathconacounty',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Strathcona County',
                'sameAs' => 'https://en.wikipedia.org/wiki/Strathcona_County'],
            [
                'id' => '#grandprairie',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Grande Prairie',
                'sameAs' => 'https://en.wikipedia.org/wiki/Grande_Prairie'],
            [
                'id' => '#lloydminster',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Lloydminster',
                'sameAs' => 'https://en.wikipedia.org/wiki/Lloydminster'],
            [
                'id' => '#fortsaskatchewan',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Fort Saskatchewan',
                'sameAs' => 'https://en.wikipedia.org/wiki/Fort_Saskatchewan'],
            [
                'id' => '#camrose',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Camrose',
                'sameAs' => 'https://en.wikipedia.org/wiki/Camrose,_Alberta'],
            [
                'id' => '#stonyplain',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Stony Plain',
                'sameAs' => 'https://en.wikipedia.org/wiki/Stony_Plain,_Alberta'],
            [
                'id' => '#coldlake',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Cold Lake',
                'sameAs' => 'https://en.wikipedia.org/wiki/Cold_Lake,_Alberta'],
            [
                'id' => '#draytonvalley',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Drayton Valley',
                'sameAs' => 'https://en.wikipedia.org/wiki/Drayton_Valley'],
            [
                'id' => '#ponoka',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Ponoka',
                'sameAs' => 'https://en.wikipedia.org/wiki/Ponoka,_Alberta'],
            [
                'id' => '#vegreville',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Vegreville',
                'sameAs' => 'https://en.wikipedia.org/wiki/Vegreville'],
            [
                'id' => '#fortmcmurray',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Fort McMurray',
                'sameAs' => 'https://en.wikipedia.org/wiki/Fort_McMurray'],
            [
                'id' => '#lethbridge',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Lethbridge',
                'sameAs' => 'https://en.wikipedia.org/wiki/Lethbridge'],
            [
                'id' => '#airdrie',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Airdrie',
                'sameAs' => 'https://en.wikipedia.org/wiki/Airdrie,_Alberta'],
            [
                'id' => '#medicinehat',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Medicine Hat',
                'sameAs' => 'https://en.wikipedia.org/wiki/Medicine_Hat'],
            [
                'id' => '#cochrane',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Cochrane',
                'sameAs' => 'https://en.wikipedia.org/wiki/Cochrane,_Alberta'],
            [
                'id' => '#okotoks',
                'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City',
                'name' => 'Okotoks',
                'sameAs' => 'https://en.wikipedia.org/wiki/Okotoks'],
        ],
        // Hours - note the key names
        'openingHoursSpecification' => [
            [
                'type' => 'JVBase\managers\SEO\render\Thing\Intangible\StructuredValue\OpeningHoursSpecification',
                'dayOfWeek' => ['Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
                'opens' => '13:00',
                'closes' => '18:00'
            ]
        ],
        // Services as offer catalog
        'hasOfferCatalog' => [
            'name' => 'Our Services',
            'items' => [
                [
                    'type' => 'JVBase\managers\SEO\render\Thing\Intangible\AggregateOffer',
                    'id' => '#tatty-soap',
                    'price' => '12',
                    'priceCurrency' => 'CAD',
                    'itemOffered' => [
                        'id' => 'tatty-soap-item',
                        'type' => 'JVBase\managers\SEO\render\Thing\Product\Product',
                        'name' => 'Tatty Soap',
                        'description' => 'Handmade unscented soaps designed for tattoo aftercare',
                    ]
                ],
            ]
        ],
//        'aggregateRating' => [
//            'ratingValue' => 5,
//            'reviewCount' => 109,
//            'bestRating' => 5,
//            'worstRating' => 1,
//        ],
    ]);
}
add_filter('atat_WebsiteSchemaDefault', 'atat_website_schema');
function atat_website_schema(array $schema): array
{
    return array_merge(
        $schema,
        [
            'type' => 'JVBase\managers\SEO\render\Thing\CreativeWork\WebSite',
            'name' => 'Madi Mori',
            'description' => 'Handmade soaps in Edmonton, Alberta. Unscented, all natural ingredients.',
            'inLanguage' => 'en-CA',
            'potentialAction' => [
                [
                    'id' => 'contact',
                    'type' => 'JVBase\inc\managers\SEO\render\Thing\Action\CommunicateAction',
                    'name' => 'Contact Us',
                    'target' => '/contact/',
                    'description' => 'Get in touch with Madi.',
                ],
            ],
        ],
    );
}
//add_filter('jvb_schema', function($schema) {
//    return array_merge($schema, [
//        'organization' => [
//            'type' => 'LocalBusiness',
//            'name' => 'Tatty Soap',
//            'url' => get_home_url(),
//            'description' => 'Unscented, all natural soap made in Edmonton, Alberta.',
//            'slogan' => 'Making aftercare simple.',
//            'logo' => get_theme_mod('custom_logo'),
//            'foundingDate' => '2026-02-15',
//
//            'founders' => [
//                ['name' => 'Madi Rawson', 'url' => 'https://madebymadimori.ca'],
//            ],
//
//            'sameAs' => [
//                [ 'url' => 'https://madebymadimori.ca'],
//                [ 'url' => 'https://www.instagram.com/tatty.soap'],
//                [ 'url' => 'https://www.facebook.com/tatty.soap']
//            ],
//
//            // Contact
//            'telephone' => '+1-780-289-9915',
//            'email' => 'get@tattysoap.ca',
//
//            // Address - note the key names
//            'address' => [
//                'street' => '6551 111 St NW',
//                'city' => 'Edmonton',
//                'province' => 'AB',
//                'postal_code' => 'T6H 4R5',
//                'country' => 'CA',
//            ],
//
//            // Geo - note the key names
//            'geo' => [
//                'lat' => '53.5035125',                      // was 'latitude'
//                'lng' => '-113.5188023',                    // was 'longitude'
//            ],
//
//            // Business details
//            'priceRange' => '$$',
//            'paymentAccepted' => ['Cash', 'Credit Card', 'Debit Card', 'E-Transfer'],
//            'currenciesAccepted' => ['CAD'],
//            'areaServed' => [
//                ['name' => 'Edmonton'],
//                ['name' => 'St. Albert'],
//                ['name' => 'Sherwood Park'],
//                ['name' => 'Leduc'],
//                ['name' => 'Spruce Grove'],
//                ['name' => 'Calgary'],
//                ['name' => 'Red Deer'],
//                ['name' => 'Strathcona County'],
//                ['name' => 'Grande Prairie'],
//                ['name' => 'Lloydminster'],
//                ['name' => 'Fort Saskatchewan'],
//                ['name' => 'Camrose'],
//                ['name' => 'Stoney Plain'],
//                ['name' => 'Cold Lake'],
//                ['name' => 'Drayton Valley'],
//                ['name' => 'Ponoka'],
//                ['name' => 'Vegreville'],
//                ['name' => 'Fort McMurry'],
//                ['name' => 'Lethbridge'],
//                ['name' => 'Airdrie'],
//                ['name' => 'Medicine Hat'],
//                ['name' => 'Cochrane'],
//                ['name' => 'Okotoks'],
//            ],
//
//            // Hours - note the key names
//            'openingHours' => [
//                'monday' => ['opens' => '9:00', 'closes' => '17:00'],
//                'tuesday' => ['opens' => '9:00', 'closes' => '17:00'],
//                'wednesday' => ['opens' => '9:00', 'closes' => '17:00'],
//                'thursday' => ['opens' => '9:00', 'closes' => '17:00'],
//                'friday' => ['opens' => '9:00', 'closes' => '17:00'],
//                'saturday' => ['opens' => '9:00', 'closes' => '17:00'],
//                'sunday' => ['opens' => '9:00', 'closes' => '17:00'],
//            ],
//
//            // Services as offer catalog
//            'hasOfferCatalog' => [
//                'source'    => 'manual',
//                'manual_items' => [
//                    [
//                        'type'  => 'Product',
//                        'name' => 'Tatty Soap',
//                        'description' => 'Handmade, unscented, all natural soap designed for tattoo and laser tattoo removal aftercare.',
//                    ],
//                ]
//            ],
//
//            // Rating - note the structure
////            'aggregateRating' => [
////                'value' => 5,
////                'count' => 103,
////                'best' => 5,
////                'worst' => 1,
////            ],
//        ],
//
//        // Website settings (optional overrides)
//        'website' => [
//            'name' => 'Tatty Soap',
//            'description' => 'Making aftercare simple.',
//            'inLanguage' => 'en-CA',
//            'potentialAction' => [
//                [
//                    'name'  => 'Search',
//                    'type' => 'searchAction',
//                    'target' => '/?s={query}',
//                ],
//                [
//                    'type' => 'communicateAction',
//                    'name' => 'Contact Us',
//                    'target' => '/contact/',
//                    'description' => 'Get in touch with Madi.',
//                ],
//            ],
//        ],
//    ]);
//});
taxonomies/_setup.php
@@ -22,10 +22,10 @@
require(ATAT_DIR . '/taxonomies/flags.php');
add_filter('jvb_taxonomy', 'atat_taxonomy');
function atat_taxonomy():array
{
    return [
        'flags'     => atat_flags(),
    ];
}
//add_filter('jvb_taxonomy', 'atat_taxonomy');
//function atat_taxonomy():array
//{
//    return [
//        'flags'     => atat_flags(),
//    ];
//}
taxonomies/flags.php
@@ -1,27 +1,111 @@
<?php
// /taxonomies/flags.php
function atat_flags():array
// /taxonomies/flag.php
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('jvbDefineRegistrar', 'atat_flag');
add_action('jvbDefineRegistrarFields', 'atat_flag_fields');
add_action('plugins_loaded', 'atat_flag',3);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'atat_flag_fields', 4);
add_filter('atat_AgeSchemaDefault', 'atat_flag_schema');
add_filter('atat_AgeMetaDefault', 'atat_flag_meta');
add_filter('atat_AgeArchiveDefault', 'atat_flag_archive');
function atat_flag(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $flag = Registrar::forTerm('flag', 'Flag', 'Flags')
        ->setIcon('flag')
        ->make([
            'rewrite'   => [
                'slug'          => 'flagged',
                'with_front'    => false,
                'hierarchical'  => true,
            ],
            'for'    => [
                'soap',
            ],
            'hierarchical' => true,
        ])
        ->setAll([
            'show_directory',
            'show_feed',
        ]);
//$directory = $flag->getConfig('directory');
}
function atat_flag_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $flag = Registrar::getInstance('flag');
    $fields = $flag->fields();
    $fields->addCommon('wiki');
    $fields->addCommon('alternate_name');
    $fields->addCommon('keywords');
}
function atat_flag_schema():array
{
    return [
        'singular'     => 'Flag',
        'plural'       => 'Flags',
        'icon'         => 'warning-diamond',
        'rewrite'      => [
            'slug'         => 'flagged',
            'with_front'   => false,
            'hierarchical' => true,
        ],
        'hierarchical' => true,
        'for_content'  => [
            'soap',
        ],
        'fields'       => [
            'term_name'       => [
                'label'     => 'Name',
                'type'      => 'text',
                'quickEdit' => true,
            ],
            'common'          => [ 'wiki', 'alternate_name', 'keywords' ]
        ]
        'name'              => 'How to Remove a {{name}} Old Tattoo - Before & After',
    ];
}
function atat_flag_meta():array
{
    return[
        'name'              => 'How to Remove a {{name}} Old Tattoo - Before & After',
        'description'       => 'See laser removal results on tattoos that are {{name}} old. Older ink often responds differently to treatment.'
    ];
}
function atat_flag_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => 'Removing {{term_name}} Old Tattoos – Before & After',
    ]);
}
function atat_flag_reference_schema(array $defaults):array
{
    return $defaults;
}
//
//function atat_flags():array
//{
//    return [
//        'singular'     => 'Flag',
//        'plural'       => 'Flags',
//        'icon'         => 'warning-diamond',
//        'rewrite'      => [
//            'slug'         => 'flagged',
//            'with_front'   => false,
//            'hierarchical' => true,
//        ],
//        'hierarchical' => true,
//        'for_content'  => [
//            'soap',
//        ],
//        'fields'       => [
//            'term_name'       => [
//                'label'     => 'Name',
//                'type'      => 'text',
//                'quickEdit' => true,
//            ],
//            'common'          => [ 'wiki', 'alternate_name', 'keywords' ]
//        ]
//    ];
//}