diff --git a/lib/plausible_web/plugs/tracker.ex b/lib/plausible_web/plugs/tracker.ex
index 8bd4a1b2935ea439aeae9f918fa65d42c9c7930c..31780c53d381da7b5850ec1c9941c4ed210fd6a4 100644
--- a/lib/plausible_web/plugs/tracker.ex
+++ b/lib/plausible_web/plugs/tracker.ex
@@ -2,7 +2,7 @@ defmodule PlausibleWeb.Tracker do
   import Plug.Conn
   use Agent
 
-  base_variants = ["hash", "outbound-links", "exclusions", "compat", "local"]
+  base_variants = ["hash", "outbound-links", "exclusions", "compat", "local", "manual"]
   base_filenames = ["plausible", "script"]
 
   # Generates Power Set of all variants
diff --git a/priv/tracker/js/analytics.js b/priv/tracker/js/analytics.js
index 8b024ba0a96b174d1c884209d3c46819027be15d..c9f974dba4e430056d5f51f16d101d832f1ab6cf 100644
--- a/priv/tracker/js/analytics.js
+++ b/priv/tracker/js/analytics.js
@@ -1 +1 @@
-!function(){"use strict";var t,a=window.location,o=window.document,e=window.localStorage,r=o.currentScript,s=r.getAttribute("data-api")||new URL(r.src).origin+"/api/event",l=e&&e.plausible_ignore;function w(t){console.warn("Ignoring Event: "+t)}function i(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return w("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==l)return w("localStorage flag");var i={};i.n=t,i.u=a.href,i.d=r.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}}}function n(){t!==a.pathname&&(t=a.pathname,i("pageview"))}var p,d=window.history;d.pushState&&(p=d.pushState,d.pushState=function(){p.apply(this,arguments),n()},window.addEventListener("popstate",n));var u=window.plausible&&window.plausible.q||[];window.plausible=i;for(var c=0;c<u.length;c++)i.apply(this,u[c]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){t||"visible"!==o.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var a=window.location,o=window.document,t=window.localStorage,r=o.currentScript,s=r.getAttribute("data-api")||new URL(r.src).origin+"/api/event",l=t&&t.plausible_ignore;function w(t){console.warn("Ignoring Event: "+t)}function e(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return w("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==l)return w("localStorage flag");var i={};i.n=t,i.u=a.href,i.d=r.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}}}var i=window.plausible&&window.plausible.q||[];window.plausible=e;for(var n,p=0;p<i.length;p++)e.apply(this,i[p]);function d(){n!==a.pathname&&(n=a.pathname,e("pageview"))}var u,c=window.history;c.pushState&&(u=c.pushState,c.pushState=function(){u.apply(this,arguments),d()},window.addEventListener("popstate",d)),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||d()}):d()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.hash.js b/priv/tracker/js/plausible.compat.exclusions.hash.js
index 997d40009963349e8bb7ba7df76e1651ac497410..367c5f153cd8cfd3ec30f11e6b865ba71a73ea08 100644
--- a/priv/tracker/js/plausible.compat.exclusions.hash.js
+++ b/priv/tracker/js/plausible.compat.exclusions.hash.js
@@ -1 +1 @@
-!function(){"use strict";var e,t,i,n,r=window.location,o=window.document,a=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),w=a&&a.plausible_ignore,d=l&&l.getAttribute("data-exclude").split(",");function p(e){console.warn("Ignoring Event: "+e)}function c(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return p("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==w)return p("localStorage flag");if(d)for(var i=0;i<d.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+d[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return p("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function u(){n=r.pathname,c("pageview")}window.addEventListener("hashchange",u);var g=window.plausible&&window.plausible.q||[];window.plausible=c;for(var f=0;f<g.length;f++)c.apply(this,g[f]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||u()}):u()}();
\ No newline at end of file
+!function(){"use strict";var e,t,i,r=window.location,o=window.document,n=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),w=n&&n.plausible_ignore,d=l&&l.getAttribute("data-exclude").split(",");function p(e){console.warn("Ignoring Event: "+e)}function a(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return p("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==w)return p("localStorage flag");if(d)for(var i=0;i<d.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+d[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return p("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}var c=window.plausible&&window.plausible.q||[];window.plausible=a;for(var u,g=0;g<c.length;g++)a.apply(this,c[g]);function f(){u=r.pathname,a("pageview")}window.addEventListener("hashchange",f),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){u||"visible"!==o.visibilityState||f()}):f()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.hash.local.js b/priv/tracker/js/plausible.compat.exclusions.hash.local.js
index ba473cfc5cebf563a1f34ea685c2551271e333d2..93530d27a57749f4001627a44cb38bdf7e39bb9e 100644
--- a/priv/tracker/js/plausible.compat.exclusions.hash.local.js
+++ b/priv/tracker/js/plausible.compat.exclusions.hash.local.js
@@ -1 +1 @@
-!function(){"use strict";var e,t,i,n,r=window.location,o=window.document,a=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),w=a&&a.plausible_ignore,d=l&&l.getAttribute("data-exclude").split(",");function p(e){console.warn("Ignoring Event: "+e)}function u(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==w)return p("localStorage flag");if(d)for(var i=0;i<d.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+d[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return p("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function c(){n=r.pathname,u("pageview")}window.addEventListener("hashchange",c);var g=window.plausible&&window.plausible.q||[];window.plausible=u;for(var f=0;f<g.length;f++)u.apply(this,g[f]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||c()}):c()}();
\ No newline at end of file
+!function(){"use strict";var e,t,i,r=window.location,o=window.document,n=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),w=n&&n.plausible_ignore,d=l&&l.getAttribute("data-exclude").split(",");function p(e){console.warn("Ignoring Event: "+e)}function a(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==w)return p("localStorage flag");if(d)for(var i=0;i<d.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+d[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return p("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}var u=window.plausible&&window.plausible.q||[];window.plausible=a;for(var c,g=0;g<u.length;g++)a.apply(this,u[g]);function f(){c=r.pathname,a("pageview")}window.addEventListener("hashchange",f),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){c||"visible"!==o.visibilityState||f()}):f()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.hash.local.manual.js b/priv/tracker/js/plausible.compat.exclusions.hash.local.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..2c869f50413c7abfa4b733b5d2d5f78b622d9104
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.exclusions.hash.local.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,n,r=window.location,o=window.document,i=window.localStorage,l=o.getElementById("plausible"),w=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],n=e[2],t+"//"+n+"/api/event"),p=i&&i.plausible_ignore,d=l&&l.getAttribute("data-exclude").split(",");function s(e){console.warn("Ignoring Event: "+e)}function a(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return s("localStorage flag");if(d)for(var n=0;n<d.length;n++)if("pageview"==e&&r.pathname.match(new RegExp("^"+d[n].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return s("exclusion rule");var i={};i.n=e,i.u=r.href,i.d=l.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1;var a=new XMLHttpRequest;a.open("POST",w,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(i)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}var u=window.plausible&&window.plausible.q||[];window.plausible=a;for(var g=0;g<u.length;g++)a.apply(this,u[g])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.hash.local.manual.outbound-links.js b/priv/tracker/js/plausible.compat.exclusions.hash.local.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..7266fee026fcda2fbb594dc7d9f7d24a6cbf023b
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.exclusions.hash.local.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,a,r=window.location,o=window.document,n=window.localStorage,l=o.getElementById("plausible"),p=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],a=e[2],t+"//"+a+"/api/event"),s=n&&n.plausible_ignore,c=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return u("localStorage flag");if(c)for(var a=0;a<c.length;a++)if("pageview"==e&&r.pathname.match(new RegExp("^"+c[a].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var i=new XMLHttpRequest;i.open("POST",p,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(n)),i.onreadystatechange=function(){4==i.readyState&&t&&t.callback&&t.callback()}}}function d(e){for(var t=e.target,a="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((a||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",d),o.addEventListener("auxclick",d);var w=window.plausible&&window.plausible.q||[];window.plausible=i;for(var f=0;f<w.length;f++)i.apply(this,w[f])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.hash.local.outbound-links.js b/priv/tracker/js/plausible.compat.exclusions.hash.local.outbound-links.js
index 20ba378b021f7a5556ed31c077ef61ec2596e964..1cf4e847064796840ec12d54adcb790505528937 100644
--- a/priv/tracker/js/plausible.compat.exclusions.hash.local.outbound-links.js
+++ b/priv/tracker/js/plausible.compat.exclusions.hash.local.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var e,t,i,n,r=window.location,o=window.document,a=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),p=a&&a.plausible_ignore,c=l&&l.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function u(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return d("localStorage flag");if(c)for(var i=0;i<c.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+c[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function w(){n=r.pathname,u("pageview")}function g(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}window.addEventListener("hashchange",w),o.addEventListener("click",g),o.addEventListener("auxclick",g);var f=window.plausible&&window.plausible.q||[];window.plausible=u;for(var h=0;h<f.length;h++)u.apply(this,f[h]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||w()}):w()}();
\ No newline at end of file
+!function(){"use strict";var e,t,i,r=window.location,o=window.document,n=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),p=n&&n.plausible_ignore,c=l&&l.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function a(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return d("localStorage flag");if(c)for(var i=0;i<c.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+c[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function u(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",u),o.addEventListener("auxclick",u);var w=window.plausible&&window.plausible.q||[];window.plausible=a;for(var g,f=0;f<w.length;f++)a.apply(this,w[f]);function h(){g=r.pathname,a("pageview")}window.addEventListener("hashchange",h),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){g||"visible"!==o.visibilityState||h()}):h()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.hash.manual.js b/priv/tracker/js/plausible.compat.exclusions.hash.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..28da4460bab7c9a654bb25adee4007ad956d76c0
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.exclusions.hash.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,n,r=window.location,o=window.document,a=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],n=e[2],t+"//"+n+"/api/event"),w=a&&a.plausible_ignore,p=l&&l.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return d("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==w)return d("localStorage flag");if(p)for(var n=0;n<p.length;n++)if("pageview"==e&&r.pathname.match(new RegExp("^"+p[n].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var a={};a.n=e,a.u=r.href,a.d=l.getAttribute("data-domain"),a.r=o.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props)),a.h=1;var i=new XMLHttpRequest;i.open("POST",s,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(a)),i.onreadystatechange=function(){4==i.readyState&&t&&t.callback&&t.callback()}}}var u=window.plausible&&window.plausible.q||[];window.plausible=i;for(var c=0;c<u.length;c++)i.apply(this,u[c])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.hash.manual.outbound-links.js b/priv/tracker/js/plausible.compat.exclusions.hash.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..cfd21b0d75860a3d512d6dc888612640fe18c62e
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.exclusions.hash.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,a,r=window.location,o=window.document,n=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],a=e[2],t+"//"+a+"/api/event"),c=n&&n.plausible_ignore,p=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return u("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==c)return u("localStorage flag");if(p)for(var a=0;a<p.length;a++)if("pageview"==e&&r.pathname.match(new RegExp("^"+p[a].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var i=new XMLHttpRequest;i.open("POST",s,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(n)),i.onreadystatechange=function(){4==i.readyState&&t&&t.callback&&t.callback()}}}function d(e){for(var t=e.target,a="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((a||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",d),o.addEventListener("auxclick",d);var w=window.plausible&&window.plausible.q||[];window.plausible=i;for(var f=0;f<w.length;f++)i.apply(this,w[f])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.hash.outbound-links.js b/priv/tracker/js/plausible.compat.exclusions.hash.outbound-links.js
index ca600354f7ee0f89d5a860efced715775b86121c..fabf0ff47982a69c49189b2a0dafdcad642e52cf 100644
--- a/priv/tracker/js/plausible.compat.exclusions.hash.outbound-links.js
+++ b/priv/tracker/js/plausible.compat.exclusions.hash.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var e,t,i,a,r=window.location,o=window.document,n=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),c=n&&n.plausible_ignore,p=l&&l.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function u(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return d("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==c)return d("localStorage flag");if(p)for(var i=0;i<p.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+p[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var a={};a.n=e,a.u=r.href,a.d=l.getAttribute("data-domain"),a.r=o.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props)),a.h=1;var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(a)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function w(){a=r.pathname,u("pageview")}function h(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}window.addEventListener("hashchange",w),o.addEventListener("click",h),o.addEventListener("auxclick",h);var f=window.plausible&&window.plausible.q||[];window.plausible=u;for(var g=0;g<f.length;g++)u.apply(this,f[g]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){a||"visible"!==o.visibilityState||w()}):w()}();
\ No newline at end of file
+!function(){"use strict";var e,t,i,r=window.location,o=window.document,a=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),c=a&&a.plausible_ignore,p=l&&l.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function n(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return d("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==c)return d("localStorage flag");if(p)for(var i=0;i<p.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+p[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var a={};a.n=e,a.u=r.href,a.d=l.getAttribute("data-domain"),a.r=o.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props)),a.h=1;var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(a)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function u(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",u),o.addEventListener("auxclick",u);var w=window.plausible&&window.plausible.q||[];window.plausible=n;for(var h,f=0;f<w.length;f++)n.apply(this,w[f]);function g(){h=r.pathname,n("pageview")}window.addEventListener("hashchange",g),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){h||"visible"!==o.visibilityState||g()}):g()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.js b/priv/tracker/js/plausible.compat.exclusions.js
index 2107996600fe4a51213dc4c3a0aa793c519bc5a9..01787c4a3e20b825a11e73444707ff11e17dcd12 100644
--- a/priv/tracker/js/plausible.compat.exclusions.js
+++ b/priv/tracker/js/plausible.compat.exclusions.js
@@ -1 +1 @@
-!function(){"use strict";var t,e,i,n,r=window.location,o=window.document,a=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(t=l.src.split("/"),e=t[0],i=t[2],e+"//"+i+"/api/event"),p=a&&a.plausible_ignore,w=l&&l.getAttribute("data-exclude").split(",");function d(t){console.warn("Ignoring Event: "+t)}function u(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return d("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return d("localStorage flag");if(w)for(var i=0;i<w.length;i++)if("pageview"==t&&r.pathname.match(new RegExp("^"+w[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=t,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,e&&e.meta&&(n.m=JSON.stringify(e.meta)),e&&e.props&&(n.p=JSON.stringify(e.props));var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&e&&e.callback&&e.callback()}}}function c(){n!==r.pathname&&(n=r.pathname,u("pageview"))}var g,h=window.history;h.pushState&&(g=h.pushState,h.pushState=function(){g.apply(this,arguments),c()},window.addEventListener("popstate",c));var f=window.plausible&&window.plausible.q||[];window.plausible=u;for(var v=0;v<f.length;v++)u.apply(this,f[v]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||c()}):c()}();
\ No newline at end of file
+!function(){"use strict";var t,e,i,r=window.location,o=window.document,n=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(t=l.src.split("/"),e=t[0],i=t[2],e+"//"+i+"/api/event"),p=n&&n.plausible_ignore,w=l&&l.getAttribute("data-exclude").split(",");function d(t){console.warn("Ignoring Event: "+t)}function a(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return d("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return d("localStorage flag");if(w)for(var i=0;i<w.length;i++)if("pageview"==t&&r.pathname.match(new RegExp("^"+w[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=t,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,e&&e.meta&&(n.m=JSON.stringify(e.meta)),e&&e.props&&(n.p=JSON.stringify(e.props));var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&e&&e.callback&&e.callback()}}}var u=window.plausible&&window.plausible.q||[];window.plausible=a;for(var c,g=0;g<u.length;g++)a.apply(this,u[g]);function h(){c!==r.pathname&&(c=r.pathname,a("pageview"))}var f,v=window.history;v.pushState&&(f=v.pushState,v.pushState=function(){f.apply(this,arguments),h()},window.addEventListener("popstate",h)),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){c||"visible"!==o.visibilityState||h()}):h()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.local.js b/priv/tracker/js/plausible.compat.exclusions.local.js
index 765f18dab4c93eaa6361f1a609bdae221f9a688d..994964023468d5f774badddc32dd027a89ba2893 100644
--- a/priv/tracker/js/plausible.compat.exclusions.local.js
+++ b/priv/tracker/js/plausible.compat.exclusions.local.js
@@ -1 +1 @@
-!function(){"use strict";var e,t,i,n,r=window.location,o=window.document,a=window.localStorage,l=o.getElementById("plausible"),p=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),s=a&&a.plausible_ignore,w=l&&l.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function u(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return d("localStorage flag");if(w)for(var i=0;i<w.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+w[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props));var a=new XMLHttpRequest;a.open("POST",p,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function c(){n!==r.pathname&&(n=r.pathname,u("pageview"))}var g,f=window.history;f.pushState&&(g=f.pushState,f.pushState=function(){g.apply(this,arguments),c()},window.addEventListener("popstate",c));var h=window.plausible&&window.plausible.q||[];window.plausible=u;for(var v=0;v<h.length;v++)u.apply(this,h[v]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||c()}):c()}();
\ No newline at end of file
+!function(){"use strict";var e,t,i,r=window.location,o=window.document,n=window.localStorage,l=o.getElementById("plausible"),p=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),s=n&&n.plausible_ignore,w=l&&l.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function a(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return d("localStorage flag");if(w)for(var i=0;i<w.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+w[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props));var a=new XMLHttpRequest;a.open("POST",p,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}var u=window.plausible&&window.plausible.q||[];window.plausible=a;for(var c,g=0;g<u.length;g++)a.apply(this,u[g]);function f(){c!==r.pathname&&(c=r.pathname,a("pageview"))}var h,v=window.history;v.pushState&&(h=v.pushState,v.pushState=function(){h.apply(this,arguments),f()},window.addEventListener("popstate",f)),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){c||"visible"!==o.visibilityState||f()}):f()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.local.manual.js b/priv/tracker/js/plausible.compat.exclusions.local.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..b5b232856493e2c7e23fd35cac0facec6e83fe1f
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.exclusions.local.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,n,r=window.location,o=window.document,i=window.localStorage,l=o.getElementById("plausible"),w=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],n=e[2],t+"//"+n+"/api/event"),p=i&&i.plausible_ignore,d=l&&l.getAttribute("data-exclude").split(",");function s(e){console.warn("Ignoring Event: "+e)}function a(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return s("localStorage flag");if(d)for(var n=0;n<d.length;n++)if("pageview"==e&&r.pathname.match(new RegExp("^"+d[n].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return s("exclusion rule");var i={};i.n=e,i.u=r.href,i.d=l.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props));var a=new XMLHttpRequest;a.open("POST",w,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(i)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}var u=window.plausible&&window.plausible.q||[];window.plausible=a;for(var g=0;g<u.length;g++)a.apply(this,u[g])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.local.manual.outbound-links.js b/priv/tracker/js/plausible.compat.exclusions.local.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..789e57c10462ca242aaa82c5d6e345bf1bbcb669
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.exclusions.local.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,a,r=window.location,o=window.document,n=window.localStorage,l=o.getElementById("plausible"),p=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],a=e[2],t+"//"+a+"/api/event"),s=n&&n.plausible_ignore,c=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return u("localStorage flag");if(c)for(var a=0;a<c.length;a++)if("pageview"==e&&r.pathname.match(new RegExp("^"+c[a].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props));var i=new XMLHttpRequest;i.open("POST",p,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(n)),i.onreadystatechange=function(){4==i.readyState&&t&&t.callback&&t.callback()}}}function d(e){for(var t=e.target,a="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((a||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",d),o.addEventListener("auxclick",d);var w=window.plausible&&window.plausible.q||[];window.plausible=i;for(var f=0;f<w.length;f++)i.apply(this,w[f])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.local.outbound-links.js b/priv/tracker/js/plausible.compat.exclusions.local.outbound-links.js
index 7b7c105b497dd187e61e66b6ce5bb0e08af95168..2fdb6bf9ff841bb0ac7eb2400b8a8bf6bbc1f334 100644
--- a/priv/tracker/js/plausible.compat.exclusions.local.outbound-links.js
+++ b/priv/tracker/js/plausible.compat.exclusions.local.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var e,t,i,a,r=window.location,o=window.document,n=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),p=n&&n.plausible_ignore,d=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function c(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return u("localStorage flag");if(d)for(var i=0;i<d.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+d[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var a={};a.n=e,a.u=r.href,a.d=l.getAttribute("data-domain"),a.r=o.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(a)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function w(){a!==r.pathname&&(a=r.pathname,c("pageview"))}function h(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}var f,g=window.history;g.pushState&&(f=g.pushState,g.pushState=function(){f.apply(this,arguments),w()},window.addEventListener("popstate",w)),o.addEventListener("click",h),o.addEventListener("auxclick",h);var v=window.plausible&&window.plausible.q||[];window.plausible=c;for(var m=0;m<v.length;m++)c.apply(this,v[m]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){a||"visible"!==o.visibilityState||w()}):w()}();
\ No newline at end of file
+!function(){"use strict";var e,t,i,r=window.location,o=window.document,a=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),p=a&&a.plausible_ignore,d=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function n(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return u("localStorage flag");if(d)for(var i=0;i<d.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+d[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var a={};a.n=e,a.u=r.href,a.d=l.getAttribute("data-domain"),a.r=o.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(a)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function c(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",c),o.addEventListener("auxclick",c);var w=window.plausible&&window.plausible.q||[];window.plausible=n;for(var h,f=0;f<w.length;f++)n.apply(this,w[f]);function g(){h!==r.pathname&&(h=r.pathname,n("pageview"))}var v,m=window.history;m.pushState&&(v=m.pushState,m.pushState=function(){v.apply(this,arguments),g()},window.addEventListener("popstate",g)),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){h||"visible"!==o.visibilityState||g()}):g()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.manual.js b/priv/tracker/js/plausible.compat.exclusions.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..68e880e7aa34d30c783c82cf721d78a743729729
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.exclusions.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,n,r=window.location,o=window.document,a=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],n=e[2],t+"//"+n+"/api/event"),w=a&&a.plausible_ignore,p=l&&l.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return d("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==w)return d("localStorage flag");if(p)for(var n=0;n<p.length;n++)if("pageview"==e&&r.pathname.match(new RegExp("^"+p[n].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var a={};a.n=e,a.u=r.href,a.d=l.getAttribute("data-domain"),a.r=o.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props));var i=new XMLHttpRequest;i.open("POST",s,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(a)),i.onreadystatechange=function(){4==i.readyState&&t&&t.callback&&t.callback()}}}var u=window.plausible&&window.plausible.q||[];window.plausible=i;for(var c=0;c<u.length;c++)i.apply(this,u[c])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.manual.outbound-links.js b/priv/tracker/js/plausible.compat.exclusions.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..1ec21d09a0fac6a93960053474a250c4f489d1ee
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.exclusions.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,a,r=window.location,o=window.document,n=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],a=e[2],t+"//"+a+"/api/event"),c=n&&n.plausible_ignore,p=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return u("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==c)return u("localStorage flag");if(p)for(var a=0;a<p.length;a++)if("pageview"==e&&r.pathname.match(new RegExp("^"+p[a].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props));var i=new XMLHttpRequest;i.open("POST",s,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(n)),i.onreadystatechange=function(){4==i.readyState&&t&&t.callback&&t.callback()}}}function d(e){for(var t=e.target,a="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((a||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",d),o.addEventListener("auxclick",d);var w=window.plausible&&window.plausible.q||[];window.plausible=i;for(var f=0;f<w.length;f++)i.apply(this,w[f])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.exclusions.outbound-links.js b/priv/tracker/js/plausible.compat.exclusions.outbound-links.js
index bf07d4797a7526d693dfeee59fbadc4b97142381..0e812a687fef709aaebef91953820897b9ba6a4e 100644
--- a/priv/tracker/js/plausible.compat.exclusions.outbound-links.js
+++ b/priv/tracker/js/plausible.compat.exclusions.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var e,t,i,a,r=window.location,o=window.document,n=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),p=n&&n.plausible_ignore,c=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function d(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return u("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return u("localStorage flag");if(c)for(var i=0;i<c.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+c[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var a={};a.n=e,a.u=r.href,a.d=l.getAttribute("data-domain"),a.r=o.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(a)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function w(){a!==r.pathname&&(a=r.pathname,d("pageview"))}function h(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}var f,g=window.history;g.pushState&&(f=g.pushState,g.pushState=function(){f.apply(this,arguments),w()},window.addEventListener("popstate",w)),o.addEventListener("click",h),o.addEventListener("auxclick",h);var v=window.plausible&&window.plausible.q||[];window.plausible=d;for(var m=0;m<v.length;m++)d.apply(this,v[m]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){a||"visible"!==o.visibilityState||w()}):w()}();
\ No newline at end of file
+!function(){"use strict";var e,t,i,r=window.location,o=window.document,a=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),p=a&&a.plausible_ignore,c=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function n(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return u("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return u("localStorage flag");if(c)for(var i=0;i<c.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+c[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var a={};a.n=e,a.u=r.href,a.d=l.getAttribute("data-domain"),a.r=o.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(a)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function d(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",d),o.addEventListener("auxclick",d);var w=window.plausible&&window.plausible.q||[];window.plausible=n;for(var h,f=0;f<w.length;f++)n.apply(this,w[f]);function g(){h!==r.pathname&&(h=r.pathname,n("pageview"))}var v,m=window.history;m.pushState&&(v=m.pushState,m.pushState=function(){v.apply(this,arguments),g()},window.addEventListener("popstate",g)),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){h||"visible"!==o.visibilityState||g()}):g()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.hash.js b/priv/tracker/js/plausible.compat.hash.js
index c4eb529b504ac65b1159b436ea28c45a89447b44..783aeb19d6fa6e68b1531229e8d90cedb79c5b48 100644
--- a/priv/tracker/js/plausible.compat.hash.js
+++ b/priv/tracker/js/plausible.compat.hash.js
@@ -1 +1 @@
-!function(){"use strict";var e,t,i,n,a=window.location,o=window.document,r=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),w=r&&r.plausible_ignore;function d(e){console.warn("Ignoring Event: "+e)}function p(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return d("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==w)return d("localStorage flag");var i={};i.n=e,i.u=a.href,i.d=l.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1;var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function c(){n=a.pathname,p("pageview")}window.addEventListener("hashchange",c);var u=window.plausible&&window.plausible.q||[];window.plausible=p;for(var g=0;g<u.length;g++)p.apply(this,u[g]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||c()}):c()}();
\ No newline at end of file
+!function(){"use strict";var e,t,i,a=window.location,o=window.document,n=window.localStorage,r=o.getElementById("plausible"),l=r.getAttribute("data-api")||(e=r.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),s=n&&n.plausible_ignore;function w(e){console.warn("Ignoring Event: "+e)}function d(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return w("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return w("localStorage flag");var i={};i.n=e,i.u=a.href,i.d=r.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1;var n=new XMLHttpRequest;n.open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}var p=window.plausible&&window.plausible.q||[];window.plausible=d;for(var c,u=0;u<p.length;u++)d.apply(this,p[u]);function g(){c=a.pathname,d("pageview")}window.addEventListener("hashchange",g),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){c||"visible"!==o.visibilityState||g()}):g()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.hash.local.js b/priv/tracker/js/plausible.compat.hash.local.js
index c5d0a2fcc99e1a75031cef6ae713d1e5927bdd8f..cb3bec7a7f51adb76463148f831fd0175c637e59 100644
--- a/priv/tracker/js/plausible.compat.hash.local.js
+++ b/priv/tracker/js/plausible.compat.hash.local.js
@@ -1 +1 @@
-!function(){"use strict";var e,t,i,n,a=window.location,r=window.document,o=window.localStorage,l=r.getElementById("plausible"),w=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),d=o&&o.plausible_ignore;function s(e,t){var i,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=d?((i={}).n=e,i.u=a.href,i.d=l.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1,(n=new XMLHttpRequest).open("POST",w,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}):console.warn("Ignoring Event: localStorage flag"))}function p(){n=a.pathname,s("pageview")}window.addEventListener("hashchange",p);var c=window.plausible&&window.plausible.q||[];window.plausible=s;for(var g=0;g<c.length;g++)s.apply(this,c[g]);"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){n||"visible"!==r.visibilityState||p()}):p()}();
\ No newline at end of file
+!function(){"use strict";var e,t,i,a=window.location,r=window.document,n=window.localStorage,o=r.getElementById("plausible"),l=o.getAttribute("data-api")||(e=o.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),w=n&&n.plausible_ignore;function d(e,t){var i,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=w?((i={}).n=e,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1,(n=new XMLHttpRequest).open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}):console.warn("Ignoring Event: localStorage flag"))}var s=window.plausible&&window.plausible.q||[];window.plausible=d;for(var p,c=0;c<s.length;c++)d.apply(this,s[c]);function g(){p=a.pathname,d("pageview")}window.addEventListener("hashchange",g),"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){p||"visible"!==r.visibilityState||g()}):g()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.hash.local.manual.js b/priv/tracker/js/plausible.compat.hash.local.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..691a6b374dda5a69a62b52a7ad0e658040a268fe
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.hash.local.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,n,a=window.location,o=window.document,i=window.localStorage,r=o.getElementById("plausible"),l=r.getAttribute("data-api")||(e=r.src.split("/"),t=e[0],n=e[2],t+"//"+n+"/api/event"),w=i&&i.plausible_ignore;function d(e,t){var n,i;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=w?((n={}).n=e,n.u=a.href,n.d=r.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1,(i=new XMLHttpRequest).open("POST",l,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(n)),i.onreadystatechange=function(){4==i.readyState&&t&&t.callback&&t.callback()}):console.warn("Ignoring Event: localStorage flag"))}var s=window.plausible&&window.plausible.q||[];window.plausible=d;for(var p=0;p<s.length;p++)d.apply(this,s[p])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.hash.local.manual.outbound-links.js b/priv/tracker/js/plausible.compat.hash.local.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..f0085aeb15e049be0d62536bf65b4e752d271f65
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.hash.local.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,a,i=window.location,r=window.document,n=window.localStorage,o=r.getElementById("plausible"),l=o.getAttribute("data-api")||(e=o.src.split("/"),t=e[0],a=e[2],t+"//"+a+"/api/event"),s=n&&n.plausible_ignore;function d(e,t){var a,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=s?((a={}).n=e,a.u=i.href,a.d=o.getAttribute("data-domain"),a.r=r.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props)),a.h=1,(n=new XMLHttpRequest).open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(a)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}):console.warn("Ignoring Event: localStorage flag"))}function p(e){for(var t=e.target,a="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==i.host&&((a||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){i.href=t.href},150),e.preventDefault()))}r.addEventListener("click",p),r.addEventListener("auxclick",p);var w=window.plausible&&window.plausible.q||[];window.plausible=d;for(var c=0;c<w.length;c++)d.apply(this,w[c])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.hash.local.outbound-links.js b/priv/tracker/js/plausible.compat.hash.local.outbound-links.js
index 41c080170f46be14d58cf4a442c41710506a5a0a..0683ae63001057ec3f38f9330d2d18ed9bca8011 100644
--- a/priv/tracker/js/plausible.compat.hash.local.outbound-links.js
+++ b/priv/tracker/js/plausible.compat.hash.local.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var e,t,i,n,a=window.location,r=window.document,o=window.localStorage,l=r.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),d=o&&o.plausible_ignore;function p(e,t){var i,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=d?((i={}).n=e,i.u=a.href,i.d=l.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1,(n=new XMLHttpRequest).open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}):console.warn("Ignoring Event: localStorage flag"))}function c(){n=a.pathname,p("pageview")}function w(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){a.href=t.href},150),e.preventDefault()))}window.addEventListener("hashchange",c),r.addEventListener("click",w),r.addEventListener("auxclick",w);var u=window.plausible&&window.plausible.q||[];window.plausible=p;for(var h=0;h<u.length;h++)p.apply(this,u[h]);"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){n||"visible"!==r.visibilityState||c()}):c()}();
\ No newline at end of file
+!function(){"use strict";var e,t,i,a=window.location,r=window.document,n=window.localStorage,o=r.getElementById("plausible"),l=o.getAttribute("data-api")||(e=o.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),s=n&&n.plausible_ignore;function d(e,t){var i,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=s?((i={}).n=e,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1,(n=new XMLHttpRequest).open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}):console.warn("Ignoring Event: localStorage flag"))}function p(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){a.href=t.href},150),e.preventDefault()))}r.addEventListener("click",p),r.addEventListener("auxclick",p);var c=window.plausible&&window.plausible.q||[];window.plausible=d;for(var w,u=0;u<c.length;u++)d.apply(this,c[u]);function h(){w=a.pathname,d("pageview")}window.addEventListener("hashchange",h),"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){w||"visible"!==r.visibilityState||h()}):h()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.hash.manual.js b/priv/tracker/js/plausible.compat.hash.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e4e9e35e04dc5a3bce01f8198f13d32f3b16b3a
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.hash.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var t,e,n,a=window.location,o=window.document,i=window.localStorage,r=o.getElementById("plausible"),l=r.getAttribute("data-api")||(t=r.src.split("/"),e=t[0],n=t[2],e+"//"+n+"/api/event"),w=i&&i.plausible_ignore;function s(t){console.warn("Ignoring Event: "+t)}function d(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return s("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==w)return s("localStorage flag");var n={};n.n=t,n.u=a.href,n.d=r.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,e&&e.meta&&(n.m=JSON.stringify(e.meta)),e&&e.props&&(n.p=JSON.stringify(e.props)),n.h=1;var i=new XMLHttpRequest;i.open("POST",l,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(n)),i.onreadystatechange=function(){4==i.readyState&&e&&e.callback&&e.callback()}}}var p=window.plausible&&window.plausible.q||[];window.plausible=d;for(var u=0;u<p.length;u++)d.apply(this,p[u])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.hash.manual.outbound-links.js b/priv/tracker/js/plausible.compat.hash.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..441c2c182bfc2e3a91e604d5f4f7ac64f52ac941
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.hash.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,n,i=window.location,r=window.document,a=window.localStorage,o=r.getElementById("plausible"),l=o.getAttribute("data-api")||(e=o.src.split("/"),t=e[0],n=e[2],t+"//"+n+"/api/event"),s=a&&a.plausible_ignore;function c(e){console.warn("Ignoring Event: "+e)}function p(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(i.hostname)||"file:"===i.protocol)return c("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return c("localStorage flag");var n={};n.n=e,n.u=i.href,n.d=o.getAttribute("data-domain"),n.r=r.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",l,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function d(e){for(var t=e.target,n="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==i.host&&((n||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){i.href=t.href},150),e.preventDefault()))}r.addEventListener("click",d),r.addEventListener("auxclick",d);var u=window.plausible&&window.plausible.q||[];window.plausible=p;for(var w=0;w<u.length;w++)p.apply(this,u[w])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.hash.outbound-links.js b/priv/tracker/js/plausible.compat.hash.outbound-links.js
index 308363ce76bd6ea56ec24748c0355deddca6abe4..22756ca744d6677c2d69817fa5dedc8530701281 100644
--- a/priv/tracker/js/plausible.compat.hash.outbound-links.js
+++ b/priv/tracker/js/plausible.compat.hash.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var e,t,i,n,a=window.location,r=window.document,o=window.localStorage,l=r.getElementById("plausible"),s=l.getAttribute("data-api")||(e=l.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),c=o&&o.plausible_ignore;function d(e){console.warn("Ignoring Event: "+e)}function p(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return d("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==c)return d("localStorage flag");var i={};i.n=e,i.u=a.href,i.d=l.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1;var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function w(){n=a.pathname,p("pageview")}function u(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){a.href=t.href},150),e.preventDefault()))}window.addEventListener("hashchange",w),r.addEventListener("click",u),r.addEventListener("auxclick",u);var h=window.plausible&&window.plausible.q||[];window.plausible=p;for(var f=0;f<h.length;f++)p.apply(this,h[f]);"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){n||"visible"!==r.visibilityState||w()}):w()}();
\ No newline at end of file
+!function(){"use strict";var e,t,i,a=window.location,r=window.document,n=window.localStorage,o=r.getElementById("plausible"),l=o.getAttribute("data-api")||(e=o.src.split("/"),t=e[0],i=e[2],t+"//"+i+"/api/event"),s=n&&n.plausible_ignore;function c(e){console.warn("Ignoring Event: "+e)}function d(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return c("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return c("localStorage flag");var i={};i.n=e,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1;var n=new XMLHttpRequest;n.open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function p(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){a.href=t.href},150),e.preventDefault()))}r.addEventListener("click",p),r.addEventListener("auxclick",p);var w=window.plausible&&window.plausible.q||[];window.plausible=d;for(var u,h=0;h<w.length;h++)d.apply(this,w[h]);function f(){u=a.pathname,d("pageview")}window.addEventListener("hashchange",f),"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){u||"visible"!==r.visibilityState||f()}):f()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.js b/priv/tracker/js/plausible.compat.js
index 5706dcb2fcb6dd481f7a437bd57709bdee77f6fc..10ca7b98b3b6f4875d3d8d7d995218dea9fa71ab 100644
--- a/priv/tracker/js/plausible.compat.js
+++ b/priv/tracker/js/plausible.compat.js
@@ -1 +1 @@
-!function(){"use strict";var t,e,i,n,a=window.location,o=window.document,r=window.localStorage,l=o.getElementById("plausible"),s=l.getAttribute("data-api")||(t=l.src.split("/"),e=t[0],i=t[2],e+"//"+i+"/api/event"),p=r&&r.plausible_ignore;function w(t){console.warn("Ignoring Event: "+t)}function d(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return w("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return w("localStorage flag");var i={};i.n=t,i.u=a.href,i.d=l.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}}}function u(){n!==a.pathname&&(n=a.pathname,d("pageview"))}var c,h=window.history;h.pushState&&(c=h.pushState,h.pushState=function(){c.apply(this,arguments),u()},window.addEventListener("popstate",u));var f=window.plausible&&window.plausible.q||[];window.plausible=d;for(var g=0;g<f.length;g++)d.apply(this,f[g]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||u()}):u()}();
\ No newline at end of file
+!function(){"use strict";var t,e,i,a=window.location,o=window.document,n=window.localStorage,r=o.getElementById("plausible"),l=r.getAttribute("data-api")||(t=r.src.split("/"),e=t[0],i=t[2],e+"//"+i+"/api/event"),s=n&&n.plausible_ignore;function p(t){console.warn("Ignoring Event: "+t)}function w(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return p("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return p("localStorage flag");var i={};i.n=t,i.u=a.href,i.d=r.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props));var n=new XMLHttpRequest;n.open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}}}var d=window.plausible&&window.plausible.q||[];window.plausible=w;for(var u,c=0;c<d.length;c++)w.apply(this,d[c]);function h(){u!==a.pathname&&(u=a.pathname,w("pageview"))}var f,g=window.history;g.pushState&&(f=g.pushState,g.pushState=function(){f.apply(this,arguments),h()},window.addEventListener("popstate",h)),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){u||"visible"!==o.visibilityState||h()}):h()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.local.js b/priv/tracker/js/plausible.compat.local.js
index 762bdcf05b6f88b7e7ad8197b7c51533f9b37549..fb55e7bb879ca69a765e6d411976e5cf52716377 100644
--- a/priv/tracker/js/plausible.compat.local.js
+++ b/priv/tracker/js/plausible.compat.local.js
@@ -1 +1 @@
-!function(){"use strict";var t,e,i,n,a=window.location,o=window.document,r=window.localStorage,s=o.getElementById("plausible"),l=s.getAttribute("data-api")||(t=s.src.split("/"),e=t[0],i=t[2],e+"//"+i+"/api/event"),p=r&&r.plausible_ignore;function w(t,e){var i,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=p?((i={}).n=t,i.u=a.href,i.d=s.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props)),(n=new XMLHttpRequest).open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}):console.warn("Ignoring Event: localStorage flag"))}function d(){n!==a.pathname&&(n=a.pathname,w("pageview"))}var u,c=window.history;c.pushState&&(u=c.pushState,c.pushState=function(){u.apply(this,arguments),d()},window.addEventListener("popstate",d));var g=window.plausible&&window.plausible.q||[];window.plausible=w;for(var h=0;h<g.length;h++)w.apply(this,g[h]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||d()}):d()}();
\ No newline at end of file
+!function(){"use strict";var t,e,i,a=window.location,o=window.document,n=window.localStorage,r=o.getElementById("plausible"),s=r.getAttribute("data-api")||(t=r.src.split("/"),e=t[0],i=t[2],e+"//"+i+"/api/event"),l=n&&n.plausible_ignore;function p(t,e){var i,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=l?((i={}).n=t,i.u=a.href,i.d=r.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props)),(n=new XMLHttpRequest).open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}):console.warn("Ignoring Event: localStorage flag"))}var w=window.plausible&&window.plausible.q||[];window.plausible=p;for(var d,u=0;u<w.length;u++)p.apply(this,w[u]);function c(){d!==a.pathname&&(d=a.pathname,p("pageview"))}var g,h=window.history;h.pushState&&(g=h.pushState,h.pushState=function(){g.apply(this,arguments),c()},window.addEventListener("popstate",c)),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){d||"visible"!==o.visibilityState||c()}):c()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.local.manual.js b/priv/tracker/js/plausible.compat.local.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..c05bae84b2d01ce5fe40b663a89ec36dcf51d800
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.local.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,n,a=window.location,o=window.document,i=window.localStorage,r=o.getElementById("plausible"),l=r.getAttribute("data-api")||(e=r.src.split("/"),t=e[0],n=e[2],t+"//"+n+"/api/event"),w=i&&i.plausible_ignore;function d(e,t){var n,i;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=w?((n={}).n=e,n.u=a.href,n.d=r.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),(i=new XMLHttpRequest).open("POST",l,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(n)),i.onreadystatechange=function(){4==i.readyState&&t&&t.callback&&t.callback()}):console.warn("Ignoring Event: localStorage flag"))}var s=window.plausible&&window.plausible.q||[];window.plausible=d;for(var p=0;p<s.length;p++)d.apply(this,s[p])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.local.manual.outbound-links.js b/priv/tracker/js/plausible.compat.local.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..e7783f344ccea235551b8f4660d0a0433576bac9
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.local.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,a,i=window.location,r=window.document,n=window.localStorage,o=r.getElementById("plausible"),l=o.getAttribute("data-api")||(e=o.src.split("/"),t=e[0],a=e[2],t+"//"+a+"/api/event"),s=n&&n.plausible_ignore;function d(e,t){var a,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=s?((a={}).n=e,a.u=i.href,a.d=o.getAttribute("data-domain"),a.r=r.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props)),(n=new XMLHttpRequest).open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(a)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}):console.warn("Ignoring Event: localStorage flag"))}function p(e){for(var t=e.target,a="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==i.host&&((a||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){i.href=t.href},150),e.preventDefault()))}r.addEventListener("click",p),r.addEventListener("auxclick",p);var w=window.plausible&&window.plausible.q||[];window.plausible=d;for(var c=0;c<w.length;c++)d.apply(this,w[c])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.local.outbound-links.js b/priv/tracker/js/plausible.compat.local.outbound-links.js
index 3dd440f9fe0a47f207b35bfe9946323c67d1afc4..c1f44dd3bbff16e4c2bd70db6ccfb6726a6987b5 100644
--- a/priv/tracker/js/plausible.compat.local.outbound-links.js
+++ b/priv/tracker/js/plausible.compat.local.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var t,e,i,a,n=window.location,r=window.document,o=window.localStorage,s=r.getElementById("plausible"),l=s.getAttribute("data-api")||(t=s.src.split("/"),e=t[0],i=t[2],e+"//"+i+"/api/event"),p=o&&o.plausible_ignore;function d(t,e){var i,a;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=p?((i={}).n=t,i.u=n.href,i.d=s.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props)),(a=new XMLHttpRequest).open("POST",l,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(i)),a.onreadystatechange=function(){4==a.readyState&&e&&e.callback&&e.callback()}):console.warn("Ignoring Event: localStorage flag"))}function w(){a!==n.pathname&&(a=n.pathname,d("pageview"))}function c(t){for(var e=t.target,i="auxclick"==t.type&&2==t.which,a="click"==t.type;e&&(void 0===e.tagName||"a"!=e.tagName.toLowerCase()||!e.href);)e=e.parentNode;e&&e.href&&e.host&&e.host!==n.host&&((i||a)&&plausible("Outbound Link: Click",{props:{url:e.href}}),e.target&&!e.target.match(/^_(self|parent|top)$/i)||t.ctrlKey||t.metaKey||t.shiftKey||!a||(setTimeout(function(){n.href=e.href},150),t.preventDefault()))}var u,h=window.history;h.pushState&&(u=h.pushState,h.pushState=function(){u.apply(this,arguments),w()},window.addEventListener("popstate",w)),r.addEventListener("click",c),r.addEventListener("auxclick",c);var f=window.plausible&&window.plausible.q||[];window.plausible=d;for(var g=0;g<f.length;g++)d.apply(this,f[g]);"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){a||"visible"!==r.visibilityState||w()}):w()}();
\ No newline at end of file
+!function(){"use strict";var t,e,i,n=window.location,r=window.document,a=window.localStorage,o=r.getElementById("plausible"),s=o.getAttribute("data-api")||(t=o.src.split("/"),e=t[0],i=t[2],e+"//"+i+"/api/event"),l=a&&a.plausible_ignore;function p(t,e){var i,a;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=l?((i={}).n=t,i.u=n.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props)),(a=new XMLHttpRequest).open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(i)),a.onreadystatechange=function(){4==a.readyState&&e&&e.callback&&e.callback()}):console.warn("Ignoring Event: localStorage flag"))}function d(t){for(var e=t.target,i="auxclick"==t.type&&2==t.which,a="click"==t.type;e&&(void 0===e.tagName||"a"!=e.tagName.toLowerCase()||!e.href);)e=e.parentNode;e&&e.href&&e.host&&e.host!==n.host&&((i||a)&&plausible("Outbound Link: Click",{props:{url:e.href}}),e.target&&!e.target.match(/^_(self|parent|top)$/i)||t.ctrlKey||t.metaKey||t.shiftKey||!a||(setTimeout(function(){n.href=e.href},150),t.preventDefault()))}r.addEventListener("click",d),r.addEventListener("auxclick",d);var w=window.plausible&&window.plausible.q||[];window.plausible=p;for(var c,u=0;u<w.length;u++)p.apply(this,w[u]);function h(){c!==n.pathname&&(c=n.pathname,p("pageview"))}var f,g=window.history;g.pushState&&(f=g.pushState,g.pushState=function(){f.apply(this,arguments),h()},window.addEventListener("popstate",h)),"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){c||"visible"!==r.visibilityState||h()}):h()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.manual.js b/priv/tracker/js/plausible.compat.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..3db4700dbe63bbe609320116b5e2530d5ea0a228
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var t,e,n,a=window.location,o=window.document,i=window.localStorage,r=o.getElementById("plausible"),l=r.getAttribute("data-api")||(t=r.src.split("/"),e=t[0],n=t[2],e+"//"+n+"/api/event"),w=i&&i.plausible_ignore;function s(t){console.warn("Ignoring Event: "+t)}function d(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return s("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==w)return s("localStorage flag");var n={};n.n=t,n.u=a.href,n.d=r.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,e&&e.meta&&(n.m=JSON.stringify(e.meta)),e&&e.props&&(n.p=JSON.stringify(e.props));var i=new XMLHttpRequest;i.open("POST",l,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(n)),i.onreadystatechange=function(){4==i.readyState&&e&&e.callback&&e.callback()}}}var p=window.plausible&&window.plausible.q||[];window.plausible=d;for(var u=0;u<p.length;u++)d.apply(this,p[u])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.manual.outbound-links.js b/priv/tracker/js/plausible.compat.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..85202a66e718df2c688906f78d05038f5b8fc2e2
--- /dev/null
+++ b/priv/tracker/js/plausible.compat.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,t,n,i=window.location,r=window.document,a=window.localStorage,o=r.getElementById("plausible"),l=o.getAttribute("data-api")||(e=o.src.split("/"),t=e[0],n=e[2],t+"//"+n+"/api/event"),s=a&&a.plausible_ignore;function c(e){console.warn("Ignoring Event: "+e)}function p(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(i.hostname)||"file:"===i.protocol)return c("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return c("localStorage flag");var n={};n.n=e,n.u=i.href,n.d=o.getAttribute("data-domain"),n.r=r.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props));var a=new XMLHttpRequest;a.open("POST",l,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function d(e){for(var t=e.target,n="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==i.host&&((n||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){i.href=t.href},150),e.preventDefault()))}r.addEventListener("click",d),r.addEventListener("auxclick",d);var u=window.plausible&&window.plausible.q||[];window.plausible=p;for(var w=0;w<u.length;w++)p.apply(this,u[w])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.compat.outbound-links.js b/priv/tracker/js/plausible.compat.outbound-links.js
index dfb47a107c048096b227ddbbfa76e7cfc2074089..f2cc00f989aeed504cad5a9f034763fd4d559c5b 100644
--- a/priv/tracker/js/plausible.compat.outbound-links.js
+++ b/priv/tracker/js/plausible.compat.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var t,e,i,n,a=window.location,r=window.document,o=window.localStorage,l=r.getElementById("plausible"),s=l.getAttribute("data-api")||(t=l.src.split("/"),e=t[0],i=t[2],e+"//"+i+"/api/event"),p=o&&o.plausible_ignore;function d(t){console.warn("Ignoring Event: "+t)}function c(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return d("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return d("localStorage flag");var i={};i.n=t,i.u=a.href,i.d=l.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}}}function u(){n!==a.pathname&&(n=a.pathname,c("pageview"))}function w(t){for(var e=t.target,i="auxclick"==t.type&&2==t.which,n="click"==t.type;e&&(void 0===e.tagName||"a"!=e.tagName.toLowerCase()||!e.href);)e=e.parentNode;e&&e.href&&e.host&&e.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:e.href}}),e.target&&!e.target.match(/^_(self|parent|top)$/i)||t.ctrlKey||t.metaKey||t.shiftKey||!n||(setTimeout(function(){a.href=e.href},150),t.preventDefault()))}var h,f=window.history;f.pushState&&(h=f.pushState,f.pushState=function(){h.apply(this,arguments),u()},window.addEventListener("popstate",u)),r.addEventListener("click",w),r.addEventListener("auxclick",w);var g=window.plausible&&window.plausible.q||[];window.plausible=c;for(var v=0;v<g.length;v++)c.apply(this,g[v]);"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){n||"visible"!==r.visibilityState||u()}):u()}();
\ No newline at end of file
+!function(){"use strict";var t,e,i,a=window.location,r=window.document,n=window.localStorage,o=r.getElementById("plausible"),l=o.getAttribute("data-api")||(t=o.src.split("/"),e=t[0],i=t[2],e+"//"+i+"/api/event"),s=n&&n.plausible_ignore;function p(t){console.warn("Ignoring Event: "+t)}function d(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return p("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return p("localStorage flag");var i={};i.n=t,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props));var n=new XMLHttpRequest;n.open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}}}function c(t){for(var e=t.target,i="auxclick"==t.type&&2==t.which,n="click"==t.type;e&&(void 0===e.tagName||"a"!=e.tagName.toLowerCase()||!e.href);)e=e.parentNode;e&&e.href&&e.host&&e.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:e.href}}),e.target&&!e.target.match(/^_(self|parent|top)$/i)||t.ctrlKey||t.metaKey||t.shiftKey||!n||(setTimeout(function(){a.href=e.href},150),t.preventDefault()))}r.addEventListener("click",c),r.addEventListener("auxclick",c);var u=window.plausible&&window.plausible.q||[];window.plausible=d;for(var w,h=0;h<u.length;h++)d.apply(this,u[h]);function f(){w!==a.pathname&&(w=a.pathname,d("pageview"))}var g,v=window.history;v.pushState&&(g=v.pushState,v.pushState=function(){g.apply(this,arguments),f()},window.addEventListener("popstate",f)),"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){w||"visible"!==r.visibilityState||f()}):f()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.hash.js b/priv/tracker/js/plausible.exclusions.hash.js
index 06f431ab1429df6b3ea9305d32eb67042dd6c878..87ed0b285ae80a0cd213ef6a6da4092a014a7680 100644
--- a/priv/tracker/js/plausible.exclusions.hash.js
+++ b/priv/tracker/js/plausible.exclusions.hash.js
@@ -1 +1 @@
-!function(){"use strict";var e,r=window.location,o=window.document,t=window.localStorage,l=o.currentScript,s=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",w=t&&t.plausible_ignore,d=l&&l.getAttribute("data-exclude").split(",");function p(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return p("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==w)return p("localStorage flag");if(d)for(var i=0;i<d.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+d[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return p("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function n(){e=r.pathname,i("pageview")}window.addEventListener("hashchange",n);var a=window.plausible&&window.plausible.q||[];window.plausible=i;for(var c=0;c<a.length;c++)i.apply(this,a[c]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){e||"visible"!==o.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var r=window.location,o=window.document,e=window.localStorage,l=o.currentScript,s=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",w=e&&e.plausible_ignore,d=l&&l.getAttribute("data-exclude").split(",");function p(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return p("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==w)return p("localStorage flag");if(d)for(var i=0;i<d.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+d[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return p("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}var i=window.plausible&&window.plausible.q||[];window.plausible=t;for(var n,a=0;a<i.length;a++)t.apply(this,i[a]);function c(){n=r.pathname,t("pageview")}window.addEventListener("hashchange",c),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||c()}):c()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.hash.local.js b/priv/tracker/js/plausible.exclusions.hash.local.js
index 3262957b3d29c6b9121ebadade2a7486c4566664..dff9c06e63106f2945ec9dfdb0b40b5c1e72ea7c 100644
--- a/priv/tracker/js/plausible.exclusions.hash.local.js
+++ b/priv/tracker/js/plausible.exclusions.hash.local.js
@@ -1 +1 @@
-!function(){"use strict";var e,r=window.location,o=window.document,t=window.localStorage,l=o.currentScript,w=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",d=t&&t.plausible_ignore,s=l&&l.getAttribute("data-exclude").split(",");function p(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==d)return p("localStorage flag");if(s)for(var i=0;i<s.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+s[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return p("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",w,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function n(){e=r.pathname,i("pageview")}window.addEventListener("hashchange",n);var a=window.plausible&&window.plausible.q||[];window.plausible=i;for(var c=0;c<a.length;c++)i.apply(this,a[c]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){e||"visible"!==o.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var r=window.location,o=window.document,e=window.localStorage,l=o.currentScript,w=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",d=e&&e.plausible_ignore,s=l&&l.getAttribute("data-exclude").split(",");function p(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==d)return p("localStorage flag");if(s)for(var i=0;i<s.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+s[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return p("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",w,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}var i=window.plausible&&window.plausible.q||[];window.plausible=t;for(var n,a=0;a<i.length;a++)t.apply(this,i[a]);function c(){n=r.pathname,t("pageview")}window.addEventListener("hashchange",c),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||c()}):c()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.hash.local.manual.js b/priv/tracker/js/plausible.exclusions.hash.local.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..24551d89bb2ba5fa95cb587318a3dcec32599d48
--- /dev/null
+++ b/priv/tracker/js/plausible.exclusions.hash.local.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var r=window.location,o=window.document,e=window.localStorage,l=o.currentScript,w=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",p=e&&e.plausible_ignore,d=l&&l.getAttribute("data-exclude").split(",");function s(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return s("localStorage flag");if(d)for(var n=0;n<d.length;n++)if("pageview"==e&&r.pathname.match(new RegExp("^"+d[n].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return s("exclusion rule");var i={};i.n=e,i.u=r.href,i.d=l.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1;var a=new XMLHttpRequest;a.open("POST",w,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(i)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}var n=window.plausible&&window.plausible.q||[];window.plausible=t;for(var i=0;i<n.length;i++)t.apply(this,n[i])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.hash.local.manual.outbound-links.js b/priv/tracker/js/plausible.exclusions.hash.local.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..6db5b9e98459357a5fc87ef7222581d711f2ce33
--- /dev/null
+++ b/priv/tracker/js/plausible.exclusions.hash.local.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var r=window.location,o=window.document,e=window.localStorage,l=o.currentScript,c=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",p=e&&e.plausible_ignore,s=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return u("localStorage flag");if(s)for(var n=0;n<s.length;n++)if("pageview"==e&&r.pathname.match(new RegExp("^"+s[n].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var a={};a.n=e,a.u=r.href,a.d=l.getAttribute("data-domain"),a.r=o.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props)),a.h=1;var i=new XMLHttpRequest;i.open("POST",c,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(a)),i.onreadystatechange=function(){4==i.readyState&&t&&t.callback&&t.callback()}}}function n(e){for(var t=e.target,n="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((n||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",n),o.addEventListener("auxclick",n);var a=window.plausible&&window.plausible.q||[];window.plausible=t;for(var i=0;i<a.length;i++)t.apply(this,a[i])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.hash.local.outbound-links.js b/priv/tracker/js/plausible.exclusions.hash.local.outbound-links.js
index 74e3a33989c7b3bacf29bb99d6cd9f3865f20845..59fbfdb18ab29b8da357ec2a3312d52044f007d9 100644
--- a/priv/tracker/js/plausible.exclusions.hash.local.outbound-links.js
+++ b/priv/tracker/js/plausible.exclusions.hash.local.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var e,r=window.location,o=window.document,t=window.localStorage,l=o.currentScript,s=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",c=t&&t.plausible_ignore,p=l&&l.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==c)return d("localStorage flag");if(p)for(var i=0;i<p.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+p[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function n(){e=r.pathname,i("pageview")}function a(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}window.addEventListener("hashchange",n),o.addEventListener("click",a),o.addEventListener("auxclick",a);var u=window.plausible&&window.plausible.q||[];window.plausible=i;for(var w=0;w<u.length;w++)i.apply(this,u[w]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){e||"visible"!==o.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var r=window.location,o=window.document,e=window.localStorage,l=o.currentScript,s=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",c=e&&e.plausible_ignore,p=l&&l.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==c)return d("localStorage flag");if(p)for(var i=0;i<p.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+p[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function i(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",i),o.addEventListener("auxclick",i);var n=window.plausible&&window.plausible.q||[];window.plausible=t;for(var a,u=0;u<n.length;u++)t.apply(this,n[u]);function w(){a=r.pathname,t("pageview")}window.addEventListener("hashchange",w),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){a||"visible"!==o.visibilityState||w()}):w()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.hash.manual.js b/priv/tracker/js/plausible.exclusions.hash.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..41d490992146ddb98bc0d6e79d860ccfa2a29718
--- /dev/null
+++ b/priv/tracker/js/plausible.exclusions.hash.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var r=window.location,o=window.document,e=window.localStorage,l=o.currentScript,w=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",p=e&&e.plausible_ignore,s=l&&l.getAttribute("data-exclude").split(",");function c(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return c("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return c("localStorage flag");if(s)for(var n=0;n<s.length;n++)if("pageview"==e&&r.pathname.match(new RegExp("^"+s[n].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return c("exclusion rule");var i={};i.n=e,i.u=r.href,i.d=l.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1;var a=new XMLHttpRequest;a.open("POST",w,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(i)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}var n=window.plausible&&window.plausible.q||[];window.plausible=t;for(var i=0;i<n.length;i++)t.apply(this,n[i])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.hash.manual.outbound-links.js b/priv/tracker/js/plausible.exclusions.hash.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..fdaf62a90c87b4e17c510184318ddb1dd665bfb2
--- /dev/null
+++ b/priv/tracker/js/plausible.exclusions.hash.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var i=window.location,o=window.document,e=window.localStorage,l=o.currentScript,c=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",s=e&&e.plausible_ignore,p=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(i.hostname)||"file:"===i.protocol)return u("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return u("localStorage flag");if(p)for(var a=0;a<p.length;a++)if("pageview"==e&&i.pathname.match(new RegExp("^"+p[a].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var n={};n.n=e,n.u=i.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var r=new XMLHttpRequest;r.open("POST",c,!0),r.setRequestHeader("Content-Type","text/plain"),r.send(JSON.stringify(n)),r.onreadystatechange=function(){4==r.readyState&&t&&t.callback&&t.callback()}}}function a(e){for(var t=e.target,a="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==i.host&&((a||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){i.href=t.href},150),e.preventDefault()))}o.addEventListener("click",a),o.addEventListener("auxclick",a);var n=window.plausible&&window.plausible.q||[];window.plausible=t;for(var r=0;r<n.length;r++)t.apply(this,n[r])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.hash.outbound-links.js b/priv/tracker/js/plausible.exclusions.hash.outbound-links.js
index 52516ca509f54ac8c4c2560aeecc8ea203a54e6f..83aef1f207eef89a9c0c9445c4d946fb89d3ce35 100644
--- a/priv/tracker/js/plausible.exclusions.hash.outbound-links.js
+++ b/priv/tracker/js/plausible.exclusions.hash.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var e,r=window.location,o=window.document,t=window.localStorage,l=o.currentScript,s=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",c=t&&t.plausible_ignore,p=l&&l.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return d("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==c)return d("localStorage flag");if(p)for(var i=0;i<p.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+p[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function n(){e=r.pathname,i("pageview")}function a(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}window.addEventListener("hashchange",n),o.addEventListener("click",a),o.addEventListener("auxclick",a);var u=window.plausible&&window.plausible.q||[];window.plausible=i;for(var w=0;w<u.length;w++)i.apply(this,u[w]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){e||"visible"!==o.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var r=window.location,o=window.document,e=window.localStorage,l=o.currentScript,s=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",c=e&&e.plausible_ignore,p=l&&l.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return d("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==c)return d("localStorage flag");if(p)for(var i=0;i<p.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+p[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function i(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",i),o.addEventListener("auxclick",i);var n=window.plausible&&window.plausible.q||[];window.plausible=t;for(var a,u=0;u<n.length;u++)t.apply(this,n[u]);function w(){a=r.pathname,t("pageview")}window.addEventListener("hashchange",w),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){a||"visible"!==o.visibilityState||w()}):w()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.js b/priv/tracker/js/plausible.exclusions.js
index 07af4ad095b5efc70ed8daa1f3f34679af8505b1..4d0d61214ac541966533fe08d0ec3a21b038acb1 100644
--- a/priv/tracker/js/plausible.exclusions.js
+++ b/priv/tracker/js/plausible.exclusions.js
@@ -1 +1 @@
-!function(){"use strict";var t,r=window.location,o=window.document,e=window.localStorage,l=o.currentScript,s=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",p=e&&e.plausible_ignore,w=l&&l.getAttribute("data-exclude").split(",");function d(t){console.warn("Ignoring Event: "+t)}function i(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return d("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return d("localStorage flag");if(w)for(var i=0;i<w.length;i++)if("pageview"==t&&r.pathname.match(new RegExp("^"+w[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=t,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,e&&e.meta&&(n.m=JSON.stringify(e.meta)),e&&e.props&&(n.p=JSON.stringify(e.props));var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&e&&e.callback&&e.callback()}}}function n(){t!==r.pathname&&(t=r.pathname,i("pageview"))}var a,u=window.history;u.pushState&&(a=u.pushState,u.pushState=function(){a.apply(this,arguments),n()},window.addEventListener("popstate",n));var c=window.plausible&&window.plausible.q||[];window.plausible=i;for(var g=0;g<c.length;g++)i.apply(this,c[g]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){t||"visible"!==o.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var r=window.location,o=window.document,t=window.localStorage,l=o.currentScript,s=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",p=t&&t.plausible_ignore,w=l&&l.getAttribute("data-exclude").split(",");function d(t){console.warn("Ignoring Event: "+t)}function e(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return d("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return d("localStorage flag");if(w)for(var i=0;i<w.length;i++)if("pageview"==t&&r.pathname.match(new RegExp("^"+w[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=t,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,e&&e.meta&&(n.m=JSON.stringify(e.meta)),e&&e.props&&(n.p=JSON.stringify(e.props));var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&e&&e.callback&&e.callback()}}}var i=window.plausible&&window.plausible.q||[];window.plausible=e;for(var n,a=0;a<i.length;a++)e.apply(this,i[a]);function u(){n!==r.pathname&&(n=r.pathname,e("pageview"))}var c,g=window.history;g.pushState&&(c=g.pushState,g.pushState=function(){c.apply(this,arguments),u()},window.addEventListener("popstate",u)),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||u()}):u()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.local.js b/priv/tracker/js/plausible.exclusions.local.js
index 61200c6ec260e8e51b74e8818cc33db13b18048b..60a372fbd4293fdb6cd2e2b96d611567e82539f4 100644
--- a/priv/tracker/js/plausible.exclusions.local.js
+++ b/priv/tracker/js/plausible.exclusions.local.js
@@ -1 +1 @@
-!function(){"use strict";var e,r=window.location,o=window.document,t=window.localStorage,p=o.currentScript,l=p.getAttribute("data-api")||new URL(p.src).origin+"/api/event",s=t&&t.plausible_ignore,w=p&&p.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return d("localStorage flag");if(w)for(var i=0;i<w.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+w[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=p.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props));var a=new XMLHttpRequest;a.open("POST",l,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function n(){e!==r.pathname&&(e=r.pathname,i("pageview"))}var a,u=window.history;u.pushState&&(a=u.pushState,u.pushState=function(){a.apply(this,arguments),n()},window.addEventListener("popstate",n));var c=window.plausible&&window.plausible.q||[];window.plausible=i;for(var g=0;g<c.length;g++)i.apply(this,c[g]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){e||"visible"!==o.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var r=window.location,o=window.document,e=window.localStorage,p=o.currentScript,l=p.getAttribute("data-api")||new URL(p.src).origin+"/api/event",s=e&&e.plausible_ignore,w=p&&p.getAttribute("data-exclude").split(",");function d(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return d("localStorage flag");if(w)for(var i=0;i<w.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+w[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return d("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=p.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props));var a=new XMLHttpRequest;a.open("POST",l,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}var i=window.plausible&&window.plausible.q||[];window.plausible=t;for(var n,a=0;a<i.length;a++)t.apply(this,i[a]);function u(){n!==r.pathname&&(n=r.pathname,t("pageview"))}var c,g=window.history;g.pushState&&(c=g.pushState,g.pushState=function(){c.apply(this,arguments),u()},window.addEventListener("popstate",u)),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||u()}):u()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.local.manual.js b/priv/tracker/js/plausible.exclusions.local.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..832470ae5e4361c225353a4a8014d1b59a1f74dc
--- /dev/null
+++ b/priv/tracker/js/plausible.exclusions.local.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var r=window.location,o=window.document,e=window.localStorage,l=o.currentScript,w=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",p=e&&e.plausible_ignore,d=l&&l.getAttribute("data-exclude").split(",");function s(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return s("localStorage flag");if(d)for(var n=0;n<d.length;n++)if("pageview"==e&&r.pathname.match(new RegExp("^"+d[n].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return s("exclusion rule");var i={};i.n=e,i.u=r.href,i.d=l.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props));var a=new XMLHttpRequest;a.open("POST",w,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(i)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}var n=window.plausible&&window.plausible.q||[];window.plausible=t;for(var i=0;i<n.length;i++)t.apply(this,n[i])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.local.manual.outbound-links.js b/priv/tracker/js/plausible.exclusions.local.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..09d4fa6ab81209d21b2763ce2e8ef94c59188560
--- /dev/null
+++ b/priv/tracker/js/plausible.exclusions.local.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var r=window.location,o=window.document,e=window.localStorage,l=o.currentScript,c=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",p=e&&e.plausible_ignore,s=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return u("localStorage flag");if(s)for(var n=0;n<s.length;n++)if("pageview"==e&&r.pathname.match(new RegExp("^"+s[n].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var a={};a.n=e,a.u=r.href,a.d=l.getAttribute("data-domain"),a.r=o.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props));var i=new XMLHttpRequest;i.open("POST",c,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(a)),i.onreadystatechange=function(){4==i.readyState&&t&&t.callback&&t.callback()}}}function n(e){for(var t=e.target,n="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((n||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",n),o.addEventListener("auxclick",n);var a=window.plausible&&window.plausible.q||[];window.plausible=t;for(var i=0;i<a.length;i++)t.apply(this,a[i])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.local.outbound-links.js b/priv/tracker/js/plausible.exclusions.local.outbound-links.js
index baef6674a92b722bbf5c774cd743296573919f1d..04a3a60eff00b2e0c0428764150ff81673c53c61 100644
--- a/priv/tracker/js/plausible.exclusions.local.outbound-links.js
+++ b/priv/tracker/js/plausible.exclusions.local.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var e,r=window.location,o=window.document,t=window.localStorage,l=o.currentScript,p=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",s=t&&t.plausible_ignore,c=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return u("localStorage flag");if(c)for(var i=0;i<c.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+c[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props));var a=new XMLHttpRequest;a.open("POST",p,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function n(){e!==r.pathname&&(e=r.pathname,i("pageview"))}function a(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}var d,w=window.history;w.pushState&&(d=w.pushState,w.pushState=function(){d.apply(this,arguments),n()},window.addEventListener("popstate",n)),o.addEventListener("click",a),o.addEventListener("auxclick",a);var h=window.plausible&&window.plausible.q||[];window.plausible=i;for(var f=0;f<h.length;f++)i.apply(this,h[f]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){e||"visible"!==o.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var r=window.location,o=window.document,e=window.localStorage,l=o.currentScript,p=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",s=e&&e.plausible_ignore,c=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return u("localStorage flag");if(c)for(var i=0;i<c.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+c[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var n={};n.n=e,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props));var a=new XMLHttpRequest;a.open("POST",p,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}function i(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",i),o.addEventListener("auxclick",i);var n=window.plausible&&window.plausible.q||[];window.plausible=t;for(var a,d=0;d<n.length;d++)t.apply(this,n[d]);function w(){a!==r.pathname&&(a=r.pathname,t("pageview"))}var h,f=window.history;f.pushState&&(h=f.pushState,f.pushState=function(){h.apply(this,arguments),w()},window.addEventListener("popstate",w)),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){a||"visible"!==o.visibilityState||w()}):w()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.manual.js b/priv/tracker/js/plausible.exclusions.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..53e69163fab34da635e1e5b6cc6caba5dea72a52
--- /dev/null
+++ b/priv/tracker/js/plausible.exclusions.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var r=window.location,o=window.document,e=window.localStorage,l=o.currentScript,w=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",p=e&&e.plausible_ignore,s=l&&l.getAttribute("data-exclude").split(",");function c(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return c("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return c("localStorage flag");if(s)for(var n=0;n<s.length;n++)if("pageview"==e&&r.pathname.match(new RegExp("^"+s[n].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return c("exclusion rule");var i={};i.n=e,i.u=r.href,i.d=l.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props));var a=new XMLHttpRequest;a.open("POST",w,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(i)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}}}var n=window.plausible&&window.plausible.q||[];window.plausible=t;for(var i=0;i<n.length;i++)t.apply(this,n[i])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.manual.outbound-links.js b/priv/tracker/js/plausible.exclusions.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..a9919d79c07b2e7b3ca664c46133aa0c284e42ef
--- /dev/null
+++ b/priv/tracker/js/plausible.exclusions.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var i=window.location,o=window.document,e=window.localStorage,l=o.currentScript,c=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",s=e&&e.plausible_ignore,p=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(i.hostname)||"file:"===i.protocol)return u("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return u("localStorage flag");if(p)for(var a=0;a<p.length;a++)if("pageview"==e&&i.pathname.match(new RegExp("^"+p[a].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var n={};n.n=e,n.u=i.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props));var r=new XMLHttpRequest;r.open("POST",c,!0),r.setRequestHeader("Content-Type","text/plain"),r.send(JSON.stringify(n)),r.onreadystatechange=function(){4==r.readyState&&t&&t.callback&&t.callback()}}}function a(e){for(var t=e.target,a="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==i.host&&((a||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){i.href=t.href},150),e.preventDefault()))}o.addEventListener("click",a),o.addEventListener("auxclick",a);var n=window.plausible&&window.plausible.q||[];window.plausible=t;for(var r=0;r<n.length;r++)t.apply(this,n[r])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.exclusions.outbound-links.js b/priv/tracker/js/plausible.exclusions.outbound-links.js
index ececeec48e8cade04e95ed6a2ebe341b7c0c98b1..15501e6f8b16c2fb3c031e7990545c22479e3f58 100644
--- a/priv/tracker/js/plausible.exclusions.outbound-links.js
+++ b/priv/tracker/js/plausible.exclusions.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var e,r=window.location,o=window.document,t=window.localStorage,l=o.currentScript,s=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",p=t&&t.plausible_ignore,c=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return u("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return u("localStorage flag");if(c)for(var i=0;i<c.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+c[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var a={};a.n=e,a.u=r.href,a.d=l.getAttribute("data-domain"),a.r=o.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(a)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function a(){e!==r.pathname&&(e=r.pathname,i("pageview"))}function n(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}var d,w=window.history;w.pushState&&(d=w.pushState,w.pushState=function(){d.apply(this,arguments),a()},window.addEventListener("popstate",a)),o.addEventListener("click",n),o.addEventListener("auxclick",n);var h=window.plausible&&window.plausible.q||[];window.plausible=i;for(var f=0;f<h.length;f++)i.apply(this,h[f]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){e||"visible"!==o.visibilityState||a()}):a()}();
\ No newline at end of file
+!function(){"use strict";var r=window.location,o=window.document,e=window.localStorage,l=o.currentScript,s=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event",p=e&&e.plausible_ignore,c=l&&l.getAttribute("data-exclude").split(",");function u(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return u("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==p)return u("localStorage flag");if(c)for(var i=0;i<c.length;i++)if("pageview"==e&&r.pathname.match(new RegExp("^"+c[i].trim().replace(/\*\*/g,".*").replace(/([^\.])\*/g,"$1[^\\s/]*")+"/?$")))return u("exclusion rule");var a={};a.n=e,a.u=r.href,a.d=l.getAttribute("data-domain"),a.r=o.referrer||null,a.w=window.innerWidth,t&&t.meta&&(a.m=JSON.stringify(t.meta)),t&&t.props&&(a.p=JSON.stringify(t.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(a)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function i(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==r.host&&((i||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){r.href=t.href},150),e.preventDefault()))}o.addEventListener("click",i),o.addEventListener("auxclick",i);var a=window.plausible&&window.plausible.q||[];window.plausible=t;for(var n,d=0;d<a.length;d++)t.apply(this,a[d]);function w(){n!==r.pathname&&(n=r.pathname,t("pageview"))}var h,f=window.history;f.pushState&&(h=f.pushState,f.pushState=function(){h.apply(this,arguments),w()},window.addEventListener("popstate",w)),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||w()}):w()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.hash.js b/priv/tracker/js/plausible.hash.js
index 307a37ec2b9d73fc4f59f220cbb6de8e9f3a8700..8de08d8888ae3ed0d6aeed89350a0410ad41ab89 100644
--- a/priv/tracker/js/plausible.hash.js
+++ b/priv/tracker/js/plausible.hash.js
@@ -1 +1 @@
-!function(){"use strict";var e,a=window.location,r=window.document,t=window.localStorage,o=r.currentScript,l=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",s=t&&t.plausible_ignore;function w(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return w("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return w("localStorage flag");var i={};i.n=e,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1;var n=new XMLHttpRequest;n.open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function n(){e=a.pathname,i("pageview")}window.addEventListener("hashchange",n);var d=window.plausible&&window.plausible.q||[];window.plausible=i;for(var c=0;c<d.length;c++)i.apply(this,d[c]);"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){e||"visible"!==r.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var a=window.location,r=window.document,e=window.localStorage,o=r.currentScript,l=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",s=e&&e.plausible_ignore;function w(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return w("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return w("localStorage flag");var i={};i.n=e,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1;var n=new XMLHttpRequest;n.open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}var i=window.plausible&&window.plausible.q||[];window.plausible=t;for(var n,d=0;d<i.length;d++)t.apply(this,i[d]);function c(){n=a.pathname,t("pageview")}window.addEventListener("hashchange",c),"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){n||"visible"!==r.visibilityState||c()}):c()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.hash.local.js b/priv/tracker/js/plausible.hash.local.js
index 445d8eb628d381611d684e839cfaa41d3664a65d..f1a1ed82c2b58cf3dac27210c7281c8d374a3e2b 100644
--- a/priv/tracker/js/plausible.hash.local.js
+++ b/priv/tracker/js/plausible.hash.local.js
@@ -1 +1 @@
-!function(){"use strict";var e,a=window.location,r=window.document,i=window.localStorage,o=r.currentScript,w=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",d=i&&i.plausible_ignore;function n(e,i){var n,t;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=d?((n={}).n=e,n.u=a.href,n.d=o.getAttribute("data-domain"),n.r=r.referrer||null,n.w=window.innerWidth,i&&i.meta&&(n.m=JSON.stringify(i.meta)),i&&i.props&&(n.p=JSON.stringify(i.props)),n.h=1,(t=new XMLHttpRequest).open("POST",w,!0),t.setRequestHeader("Content-Type","text/plain"),t.send(JSON.stringify(n)),t.onreadystatechange=function(){4==t.readyState&&i&&i.callback&&i.callback()}):console.warn("Ignoring Event: localStorage flag"))}function t(){e=a.pathname,n("pageview")}window.addEventListener("hashchange",t);var l=window.plausible&&window.plausible.q||[];window.plausible=n;for(var s=0;s<l.length;s++)n.apply(this,l[s]);"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){e||"visible"!==r.visibilityState||t()}):t()}();
\ No newline at end of file
+!function(){"use strict";var a=window.location,r=window.document,e=window.localStorage,o=r.currentScript,w=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",d=e&&e.plausible_ignore;function i(e,i){var n,t;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=d?((n={}).n=e,n.u=a.href,n.d=o.getAttribute("data-domain"),n.r=r.referrer||null,n.w=window.innerWidth,i&&i.meta&&(n.m=JSON.stringify(i.meta)),i&&i.props&&(n.p=JSON.stringify(i.props)),n.h=1,(t=new XMLHttpRequest).open("POST",w,!0),t.setRequestHeader("Content-Type","text/plain"),t.send(JSON.stringify(n)),t.onreadystatechange=function(){4==t.readyState&&i&&i.callback&&i.callback()}):console.warn("Ignoring Event: localStorage flag"))}var n=window.plausible&&window.plausible.q||[];window.plausible=i;for(var t,l=0;l<n.length;l++)i.apply(this,n[l]);function s(){t=a.pathname,i("pageview")}window.addEventListener("hashchange",s),"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){t||"visible"!==r.visibilityState||s()}):s()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.hash.local.manual.js b/priv/tracker/js/plausible.hash.local.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..fafd0e569b0e5f5db29234fe315d4fdf9e5a9eac
--- /dev/null
+++ b/priv/tracker/js/plausible.hash.local.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var a=window.location,r=window.document,n=window.localStorage,o=r.currentScript,w=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",l=n&&n.plausible_ignore;function e(n,e){var t,i;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=l?((t={}).n=n,t.u=a.href,t.d=o.getAttribute("data-domain"),t.r=r.referrer||null,t.w=window.innerWidth,e&&e.meta&&(t.m=JSON.stringify(e.meta)),e&&e.props&&(t.p=JSON.stringify(e.props)),t.h=1,(i=new XMLHttpRequest).open("POST",w,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(t)),i.onreadystatechange=function(){4==i.readyState&&e&&e.callback&&e.callback()}):console.warn("Ignoring Event: localStorage flag"))}var t=window.plausible&&window.plausible.q||[];window.plausible=e;for(var i=0;i<t.length;i++)e.apply(this,t[i])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.hash.local.manual.outbound-links.js b/priv/tracker/js/plausible.hash.local.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..890bddf967227484ebd22c67c596aa2b4510e21a
--- /dev/null
+++ b/priv/tracker/js/plausible.hash.local.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var i=window.location,r=window.document,e=window.localStorage,o=r.currentScript,l=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",s=e&&e.plausible_ignore;function t(e,t){var n,a;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=s?((n={}).n=e,n.u=i.href,n.d=o.getAttribute("data-domain"),n.r=r.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),n.h=1,(a=new XMLHttpRequest).open("POST",l,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}):console.warn("Ignoring Event: localStorage flag"))}function n(e){for(var t=e.target,n="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==i.host&&((n||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){i.href=t.href},150),e.preventDefault()))}r.addEventListener("click",n),r.addEventListener("auxclick",n);var a=window.plausible&&window.plausible.q||[];window.plausible=t;for(var c=0;c<a.length;c++)t.apply(this,a[c])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.hash.local.outbound-links.js b/priv/tracker/js/plausible.hash.local.outbound-links.js
index c28362d2b3616efdc68d5ed1cae9213c9eef701d..2fda742fde5200a047c911a5155c19bdb8e2e282 100644
--- a/priv/tracker/js/plausible.hash.local.outbound-links.js
+++ b/priv/tracker/js/plausible.hash.local.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var e,a=window.location,r=window.document,t=window.localStorage,o=r.currentScript,l=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",s=t&&t.plausible_ignore;function i(e,t){var i,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=s?((i={}).n=e,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1,(n=new XMLHttpRequest).open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}):console.warn("Ignoring Event: localStorage flag"))}function n(){e=a.pathname,i("pageview")}function d(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){a.href=t.href},150),e.preventDefault()))}window.addEventListener("hashchange",n),r.addEventListener("click",d),r.addEventListener("auxclick",d);var c=window.plausible&&window.plausible.q||[];window.plausible=i;for(var w=0;w<c.length;w++)i.apply(this,c[w]);"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){e||"visible"!==r.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var a=window.location,r=window.document,e=window.localStorage,o=r.currentScript,l=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",s=e&&e.plausible_ignore;function t(e,t){var i,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=s?((i={}).n=e,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1,(n=new XMLHttpRequest).open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}):console.warn("Ignoring Event: localStorage flag"))}function i(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){a.href=t.href},150),e.preventDefault()))}r.addEventListener("click",i),r.addEventListener("auxclick",i);var n=window.plausible&&window.plausible.q||[];window.plausible=t;for(var d,c=0;c<n.length;c++)t.apply(this,n[c]);function w(){d=a.pathname,t("pageview")}window.addEventListener("hashchange",w),"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){d||"visible"!==r.visibilityState||w()}):w()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.hash.manual.js b/priv/tracker/js/plausible.hash.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..03c17a7214321536204fe27c0fc375a535294d6d
--- /dev/null
+++ b/priv/tracker/js/plausible.hash.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var o=window.location,a=window.document,t=window.localStorage,r=a.currentScript,l=r.getAttribute("data-api")||new URL(r.src).origin+"/api/event",w=t&&t.plausible_ignore;function s(t){console.warn("Ignoring Event: "+t)}function n(t,n){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(o.hostname)||"file:"===o.protocol)return s("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==w)return s("localStorage flag");var e={};e.n=t,e.u=o.href,e.d=r.getAttribute("data-domain"),e.r=a.referrer||null,e.w=window.innerWidth,n&&n.meta&&(e.m=JSON.stringify(n.meta)),n&&n.props&&(e.p=JSON.stringify(n.props)),e.h=1;var i=new XMLHttpRequest;i.open("POST",l,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(e)),i.onreadystatechange=function(){4==i.readyState&&n&&n.callback&&n.callback()}}}var e=window.plausible&&window.plausible.q||[];window.plausible=n;for(var i=0;i<e.length;i++)n.apply(this,e[i])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.hash.manual.outbound-links.js b/priv/tracker/js/plausible.hash.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..a12c2137da96c4dc5c1a4c3c8182f8886cb8566e
--- /dev/null
+++ b/priv/tracker/js/plausible.hash.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var i=window.location,r=window.document,t=window.localStorage,o=r.currentScript,l=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",s=t&&t.plausible_ignore;function c(t){console.warn("Ignoring Event: "+t)}function e(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(i.hostname)||"file:"===i.protocol)return c("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return c("localStorage flag");var n={};n.n=t,n.u=i.href,n.d=o.getAttribute("data-domain"),n.r=r.referrer||null,n.w=window.innerWidth,e&&e.meta&&(n.m=JSON.stringify(e.meta)),e&&e.props&&(n.p=JSON.stringify(e.props)),n.h=1;var a=new XMLHttpRequest;a.open("POST",l,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&e&&e.callback&&e.callback()}}}function n(t){for(var e=t.target,n="auxclick"==t.type&&2==t.which,a="click"==t.type;e&&(void 0===e.tagName||"a"!=e.tagName.toLowerCase()||!e.href);)e=e.parentNode;e&&e.href&&e.host&&e.host!==i.host&&((n||a)&&plausible("Outbound Link: Click",{props:{url:e.href}}),e.target&&!e.target.match(/^_(self|parent|top)$/i)||t.ctrlKey||t.metaKey||t.shiftKey||!a||(setTimeout(function(){i.href=e.href},150),t.preventDefault()))}r.addEventListener("click",n),r.addEventListener("auxclick",n);var a=window.plausible&&window.plausible.q||[];window.plausible=e;for(var p=0;p<a.length;p++)e.apply(this,a[p])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.hash.outbound-links.js b/priv/tracker/js/plausible.hash.outbound-links.js
index e0c4fc603c786a65b9c6296427a0e8b2c7373850..a7999c8320d6a77e436ec960204301b448642262 100644
--- a/priv/tracker/js/plausible.hash.outbound-links.js
+++ b/priv/tracker/js/plausible.hash.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var e,a=window.location,r=window.document,t=window.localStorage,o=r.currentScript,l=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",s=t&&t.plausible_ignore;function c(e){console.warn("Ignoring Event: "+e)}function i(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return c("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return c("localStorage flag");var i={};i.n=e,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1;var n=new XMLHttpRequest;n.open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function n(){e=a.pathname,i("pageview")}function d(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){a.href=t.href},150),e.preventDefault()))}window.addEventListener("hashchange",n),r.addEventListener("click",d),r.addEventListener("auxclick",d);var p=window.plausible&&window.plausible.q||[];window.plausible=i;for(var w=0;w<p.length;w++)i.apply(this,p[w]);"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){e||"visible"!==r.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var a=window.location,r=window.document,e=window.localStorage,o=r.currentScript,l=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",s=e&&e.plausible_ignore;function c(e){console.warn("Ignoring Event: "+e)}function t(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return c("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return c("localStorage flag");var i={};i.n=e,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=JSON.stringify(t.props)),i.h=1;var n=new XMLHttpRequest;n.open("POST",l,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&t&&t.callback&&t.callback()}}}function i(e){for(var t=e.target,i="auxclick"==e.type&&2==e.which,n="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!n||(setTimeout(function(){a.href=t.href},150),e.preventDefault()))}r.addEventListener("click",i),r.addEventListener("auxclick",i);var n=window.plausible&&window.plausible.q||[];window.plausible=t;for(var d,p=0;p<n.length;p++)t.apply(this,n[p]);function w(){d=a.pathname,t("pageview")}window.addEventListener("hashchange",w),"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){d||"visible"!==r.visibilityState||w()}):w()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.js b/priv/tracker/js/plausible.js
index 8b024ba0a96b174d1c884209d3c46819027be15d..c9f974dba4e430056d5f51f16d101d832f1ab6cf 100644
--- a/priv/tracker/js/plausible.js
+++ b/priv/tracker/js/plausible.js
@@ -1 +1 @@
-!function(){"use strict";var t,a=window.location,o=window.document,e=window.localStorage,r=o.currentScript,s=r.getAttribute("data-api")||new URL(r.src).origin+"/api/event",l=e&&e.plausible_ignore;function w(t){console.warn("Ignoring Event: "+t)}function i(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return w("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==l)return w("localStorage flag");var i={};i.n=t,i.u=a.href,i.d=r.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}}}function n(){t!==a.pathname&&(t=a.pathname,i("pageview"))}var p,d=window.history;d.pushState&&(p=d.pushState,d.pushState=function(){p.apply(this,arguments),n()},window.addEventListener("popstate",n));var u=window.plausible&&window.plausible.q||[];window.plausible=i;for(var c=0;c<u.length;c++)i.apply(this,u[c]);"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){t||"visible"!==o.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var a=window.location,o=window.document,t=window.localStorage,r=o.currentScript,s=r.getAttribute("data-api")||new URL(r.src).origin+"/api/event",l=t&&t.plausible_ignore;function w(t){console.warn("Ignoring Event: "+t)}function e(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return w("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==l)return w("localStorage flag");var i={};i.n=t,i.u=a.href,i.d=r.getAttribute("data-domain"),i.r=o.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}}}var i=window.plausible&&window.plausible.q||[];window.plausible=e;for(var n,p=0;p<i.length;p++)e.apply(this,i[p]);function d(){n!==a.pathname&&(n=a.pathname,e("pageview"))}var u,c=window.history;c.pushState&&(u=c.pushState,c.pushState=function(){u.apply(this,arguments),d()},window.addEventListener("popstate",d)),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||d()}):d()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.local.js b/priv/tracker/js/plausible.local.js
index b2c0c68cb2d99ff89280e6a9948bb94adbcfd27a..197f65fade363412033607b13b528b35e5b23814 100644
--- a/priv/tracker/js/plausible.local.js
+++ b/priv/tracker/js/plausible.local.js
@@ -1 +1 @@
-!function(){"use strict";var t,a=window.location,r=window.document,e=window.localStorage,o=r.currentScript,w=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",s=e&&e.plausible_ignore;function i(t,e){var i,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=s?((i={}).n=t,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props)),(n=new XMLHttpRequest).open("POST",w,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}):console.warn("Ignoring Event: localStorage flag"))}function n(){t!==a.pathname&&(t=a.pathname,i("pageview"))}var p,d=window.history;d.pushState&&(p=d.pushState,d.pushState=function(){p.apply(this,arguments),n()},window.addEventListener("popstate",n));var l=window.plausible&&window.plausible.q||[];window.plausible=i;for(var u=0;u<l.length;u++)i.apply(this,l[u]);"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){t||"visible"!==r.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var a=window.location,r=window.document,t=window.localStorage,o=r.currentScript,w=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",s=t&&t.plausible_ignore;function e(t,e){var i,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=s?((i={}).n=t,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props)),(n=new XMLHttpRequest).open("POST",w,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}):console.warn("Ignoring Event: localStorage flag"))}var i=window.plausible&&window.plausible.q||[];window.plausible=e;for(var n,p=0;p<i.length;p++)e.apply(this,i[p]);function d(){n!==a.pathname&&(n=a.pathname,e("pageview"))}var l,u=window.history;u.pushState&&(l=u.pushState,u.pushState=function(){l.apply(this,arguments),d()},window.addEventListener("popstate",d)),"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){n||"visible"!==r.visibilityState||d()}):d()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.local.manual.js b/priv/tracker/js/plausible.local.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ff644db3d970dabdd7aacf8a89e762c97d82fef
--- /dev/null
+++ b/priv/tracker/js/plausible.local.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var a=window.location,r=window.document,n=window.localStorage,o=r.currentScript,w=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",l=n&&n.plausible_ignore;function e(n,e){var t,i;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=l?((t={}).n=n,t.u=a.href,t.d=o.getAttribute("data-domain"),t.r=r.referrer||null,t.w=window.innerWidth,e&&e.meta&&(t.m=JSON.stringify(e.meta)),e&&e.props&&(t.p=JSON.stringify(e.props)),(i=new XMLHttpRequest).open("POST",w,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(t)),i.onreadystatechange=function(){4==i.readyState&&e&&e.callback&&e.callback()}):console.warn("Ignoring Event: localStorage flag"))}var t=window.plausible&&window.plausible.q||[];window.plausible=e;for(var i=0;i<t.length;i++)e.apply(this,t[i])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.local.manual.outbound-links.js b/priv/tracker/js/plausible.local.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a46743a866aca1ed3ca309f77eb4d431bdeb874
--- /dev/null
+++ b/priv/tracker/js/plausible.local.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var i=window.location,r=window.document,e=window.localStorage,o=r.currentScript,l=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",s=e&&e.plausible_ignore;function t(e,t){var n,a;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=s?((n={}).n=e,n.u=i.href,n.d=o.getAttribute("data-domain"),n.r=r.referrer||null,n.w=window.innerWidth,t&&t.meta&&(n.m=JSON.stringify(t.meta)),t&&t.props&&(n.p=JSON.stringify(t.props)),(a=new XMLHttpRequest).open("POST",l,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&t&&t.callback&&t.callback()}):console.warn("Ignoring Event: localStorage flag"))}function n(e){for(var t=e.target,n="auxclick"==e.type&&2==e.which,a="click"==e.type;t&&(void 0===t.tagName||"a"!=t.tagName.toLowerCase()||!t.href);)t=t.parentNode;t&&t.href&&t.host&&t.host!==i.host&&((n||a)&&plausible("Outbound Link: Click",{props:{url:t.href}}),t.target&&!t.target.match(/^_(self|parent|top)$/i)||e.ctrlKey||e.metaKey||e.shiftKey||!a||(setTimeout(function(){i.href=t.href},150),e.preventDefault()))}r.addEventListener("click",n),r.addEventListener("auxclick",n);var a=window.plausible&&window.plausible.q||[];window.plausible=t;for(var c=0;c<a.length;c++)t.apply(this,a[c])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.local.outbound-links.js b/priv/tracker/js/plausible.local.outbound-links.js
index 120168c42f18e788ad930d369b6757c3abf12677..2fe28e97781d3d954732c42f2302dde45f9be3be 100644
--- a/priv/tracker/js/plausible.local.outbound-links.js
+++ b/priv/tracker/js/plausible.local.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var t,a=window.location,r=window.document,e=window.localStorage,o=r.currentScript,s=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",p=e&&e.plausible_ignore;function i(t,e){var i,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=p?((i={}).n=t,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props)),(n=new XMLHttpRequest).open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}):console.warn("Ignoring Event: localStorage flag"))}function n(){t!==a.pathname&&(t=a.pathname,i("pageview"))}function l(t){for(var e=t.target,i="auxclick"==t.type&&2==t.which,n="click"==t.type;e&&(void 0===e.tagName||"a"!=e.tagName.toLowerCase()||!e.href);)e=e.parentNode;e&&e.href&&e.host&&e.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:e.href}}),e.target&&!e.target.match(/^_(self|parent|top)$/i)||t.ctrlKey||t.metaKey||t.shiftKey||!n||(setTimeout(function(){a.href=e.href},150),t.preventDefault()))}var d,w=window.history;w.pushState&&(d=w.pushState,w.pushState=function(){d.apply(this,arguments),n()},window.addEventListener("popstate",n)),r.addEventListener("click",l),r.addEventListener("auxclick",l);var c=window.plausible&&window.plausible.q||[];window.plausible=i;for(var u=0;u<c.length;u++)i.apply(this,c[u]);"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){t||"visible"!==r.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var a=window.location,r=window.document,t=window.localStorage,o=r.currentScript,s=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",p=t&&t.plausible_ignore;function e(t,e){var i,n;window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress||("true"!=p?((i={}).n=t,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props)),(n=new XMLHttpRequest).open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}):console.warn("Ignoring Event: localStorage flag"))}function i(t){for(var e=t.target,i="auxclick"==t.type&&2==t.which,n="click"==t.type;e&&(void 0===e.tagName||"a"!=e.tagName.toLowerCase()||!e.href);)e=e.parentNode;e&&e.href&&e.host&&e.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:e.href}}),e.target&&!e.target.match(/^_(self|parent|top)$/i)||t.ctrlKey||t.metaKey||t.shiftKey||!n||(setTimeout(function(){a.href=e.href},150),t.preventDefault()))}r.addEventListener("click",i),r.addEventListener("auxclick",i);var n=window.plausible&&window.plausible.q||[];window.plausible=e;for(var l,d=0;d<n.length;d++)e.apply(this,n[d]);function w(){l!==a.pathname&&(l=a.pathname,e("pageview"))}var c,u=window.history;u.pushState&&(c=u.pushState,u.pushState=function(){c.apply(this,arguments),w()},window.addEventListener("popstate",w)),"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){l||"visible"!==r.visibilityState||w()}):w()}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.manual.js b/priv/tracker/js/plausible.manual.js
new file mode 100644
index 0000000000000000000000000000000000000000..ca6d06f611c1b8681c6f5928791238c13985da18
--- /dev/null
+++ b/priv/tracker/js/plausible.manual.js
@@ -0,0 +1 @@
+!function(){"use strict";var o=window.location,a=window.document,t=window.localStorage,r=a.currentScript,l=r.getAttribute("data-api")||new URL(r.src).origin+"/api/event",w=t&&t.plausible_ignore;function s(t){console.warn("Ignoring Event: "+t)}function n(t,n){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(o.hostname)||"file:"===o.protocol)return s("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==w)return s("localStorage flag");var e={};e.n=t,e.u=o.href,e.d=r.getAttribute("data-domain"),e.r=a.referrer||null,e.w=window.innerWidth,n&&n.meta&&(e.m=JSON.stringify(n.meta)),n&&n.props&&(e.p=JSON.stringify(n.props));var i=new XMLHttpRequest;i.open("POST",l,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(e)),i.onreadystatechange=function(){4==i.readyState&&n&&n.callback&&n.callback()}}}var e=window.plausible&&window.plausible.q||[];window.plausible=n;for(var i=0;i<e.length;i++)n.apply(this,e[i])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.manual.outbound-links.js b/priv/tracker/js/plausible.manual.outbound-links.js
new file mode 100644
index 0000000000000000000000000000000000000000..2c027f0fe38f1cc37ee28fe622f88c68b8a921cb
--- /dev/null
+++ b/priv/tracker/js/plausible.manual.outbound-links.js
@@ -0,0 +1 @@
+!function(){"use strict";var i=window.location,r=window.document,t=window.localStorage,o=r.currentScript,l=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",s=t&&t.plausible_ignore;function c(t){console.warn("Ignoring Event: "+t)}function e(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(i.hostname)||"file:"===i.protocol)return c("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==s)return c("localStorage flag");var n={};n.n=t,n.u=i.href,n.d=o.getAttribute("data-domain"),n.r=r.referrer||null,n.w=window.innerWidth,e&&e.meta&&(n.m=JSON.stringify(e.meta)),e&&e.props&&(n.p=JSON.stringify(e.props));var a=new XMLHttpRequest;a.open("POST",l,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4==a.readyState&&e&&e.callback&&e.callback()}}}function n(t){for(var e=t.target,n="auxclick"==t.type&&2==t.which,a="click"==t.type;e&&(void 0===e.tagName||"a"!=e.tagName.toLowerCase()||!e.href);)e=e.parentNode;e&&e.href&&e.host&&e.host!==i.host&&((n||a)&&plausible("Outbound Link: Click",{props:{url:e.href}}),e.target&&!e.target.match(/^_(self|parent|top)$/i)||t.ctrlKey||t.metaKey||t.shiftKey||!a||(setTimeout(function(){i.href=e.href},150),t.preventDefault()))}r.addEventListener("click",n),r.addEventListener("auxclick",n);var a=window.plausible&&window.plausible.q||[];window.plausible=e;for(var p=0;p<a.length;p++)e.apply(this,a[p])}();
\ No newline at end of file
diff --git a/priv/tracker/js/plausible.outbound-links.js b/priv/tracker/js/plausible.outbound-links.js
index c501f4875ea7cb67b7ec9b13d537db6378876b26..6e219ed5ce27f8fbb3c5179be6487606e3da0a1b 100644
--- a/priv/tracker/js/plausible.outbound-links.js
+++ b/priv/tracker/js/plausible.outbound-links.js
@@ -1 +1 @@
-!function(){"use strict";var t,a=window.location,r=window.document,e=window.localStorage,o=r.currentScript,s=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",l=e&&e.plausible_ignore;function p(t){console.warn("Ignoring Event: "+t)}function i(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return p("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==l)return p("localStorage flag");var i={};i.n=t,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}}}function n(){t!==a.pathname&&(t=a.pathname,i("pageview"))}function c(t){for(var e=t.target,i="auxclick"==t.type&&2==t.which,n="click"==t.type;e&&(void 0===e.tagName||"a"!=e.tagName.toLowerCase()||!e.href);)e=e.parentNode;e&&e.href&&e.host&&e.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:e.href}}),e.target&&!e.target.match(/^_(self|parent|top)$/i)||t.ctrlKey||t.metaKey||t.shiftKey||!n||(setTimeout(function(){a.href=e.href},150),t.preventDefault()))}var d,u=window.history;u.pushState&&(d=u.pushState,u.pushState=function(){d.apply(this,arguments),n()},window.addEventListener("popstate",n)),r.addEventListener("click",c),r.addEventListener("auxclick",c);var w=window.plausible&&window.plausible.q||[];window.plausible=i;for(var h=0;h<w.length;h++)i.apply(this,w[h]);"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){t||"visible"!==r.visibilityState||n()}):n()}();
\ No newline at end of file
+!function(){"use strict";var a=window.location,r=window.document,t=window.localStorage,o=r.currentScript,s=o.getAttribute("data-api")||new URL(o.src).origin+"/api/event",l=t&&t.plausible_ignore;function p(t){console.warn("Ignoring Event: "+t)}function e(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return p("localhost");if(!(window.phantom||window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)){if("true"==l)return p("localStorage flag");var i={};i.n=t,i.u=a.href,i.d=o.getAttribute("data-domain"),i.r=r.referrer||null,i.w=window.innerWidth,e&&e.meta&&(i.m=JSON.stringify(e.meta)),e&&e.props&&(i.p=JSON.stringify(e.props));var n=new XMLHttpRequest;n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4==n.readyState&&e&&e.callback&&e.callback()}}}function i(t){for(var e=t.target,i="auxclick"==t.type&&2==t.which,n="click"==t.type;e&&(void 0===e.tagName||"a"!=e.tagName.toLowerCase()||!e.href);)e=e.parentNode;e&&e.href&&e.host&&e.host!==a.host&&((i||n)&&plausible("Outbound Link: Click",{props:{url:e.href}}),e.target&&!e.target.match(/^_(self|parent|top)$/i)||t.ctrlKey||t.metaKey||t.shiftKey||!n||(setTimeout(function(){a.href=e.href},150),t.preventDefault()))}r.addEventListener("click",i),r.addEventListener("auxclick",i);var n=window.plausible&&window.plausible.q||[];window.plausible=e;for(var c,d=0;d<n.length;d++)e.apply(this,n[d]);function u(){c!==a.pathname&&(c=a.pathname,e("pageview"))}var w,h=window.history;h.pushState&&(w=h.pushState,h.pushState=function(){w.apply(this,arguments),u()},window.addEventListener("popstate",u)),"prerender"===r.visibilityState?r.addEventListener("visibilitychange",function(){c||"visible"!==r.visibilityState||u()}):u()}();
\ No newline at end of file
diff --git a/tracker/compile.js b/tracker/compile.js
index fbffbe9b78c9938cc20e77bfeb6d9658f2d75baf..b0aa42e7517863dac14ad9700f2815f95dae882e 100644
--- a/tracker/compile.js
+++ b/tracker/compile.js
@@ -16,7 +16,7 @@ function compilefile(input, output, templateVars = {}) {
   fs.writeFileSync(output, result.code)
 }
 
-const base_variants = ["hash", "outbound-links", "exclusions", "compat", "local"]
+const base_variants = ["hash", "outbound-links", "exclusions", "compat", "local", "manual"]
 const variants = [...g.clone.powerSet(base_variants)].filter(a => a.length > 0).map(a => a.sort());
 
 compilefile(relPath('src/plausible.js'), relPath('../priv/tracker/js/plausible.js'))
diff --git a/tracker/src/plausible.js b/tracker/src/plausible.js
index f48a6333b3ebc29217802730524b0d4a83912b3d..7aa07b09d195f81bbb1851d9f3c7b5bfd8718b03 100644
--- a/tracker/src/plausible.js
+++ b/tracker/src/plausible.js
@@ -15,7 +15,6 @@
   {{#if exclusions}}
   var excludedPaths = scriptEl && scriptEl.getAttribute('data-exclude').split(',');
   {{/if}}
-  var lastPage;
 
   function warn(reason) {
     console.warn('Ignoring Event: ' + reason);
@@ -75,20 +74,6 @@
     }
   }
 
-  function page() {
-    {{#unless hash}}
-    if (lastPage === location.pathname) return;
-    {{/unless}}
-    lastPage = location.pathname
-    trigger('pageview')
-  }
-
-  function handleVisibilityChange() {
-    if (!lastPage && document.visibilityState === 'visible') {
-      page()
-    }
-  }
-
   {{#if outbound_links}}
   function handleOutbound(event) {
     var link = event.target;
@@ -120,20 +105,6 @@
   }
   {{/if}}
 
-  {{#if hash}}
-  window.addEventListener('hashchange', page)
-  {{else}}
-  var his = window.history
-  if (his.pushState) {
-    var originalPushState = his['pushState']
-    his.pushState = function() {
-      originalPushState.apply(this, arguments)
-      page();
-    }
-    window.addEventListener('popstate', page)
-  }
-  {{/if}}
-
   {{#if outbound_links}}
   registerOutboundLinkEvents()
   {{/if}}
@@ -144,9 +115,42 @@
     trigger.apply(this, queue[i])
   }
 
-  if (document.visibilityState === 'prerender') {
-    document.addEventListener("visibilitychange", handleVisibilityChange);
-  } else {
-    page()
-  }
+  {{#unless manual}}
+    var lastPage;
+
+    function page() {
+      {{#unless hash}}
+      if (lastPage === location.pathname) return;
+      {{/unless}}
+      lastPage = location.pathname
+      trigger('pageview')
+    }
+
+    {{#if hash}}
+    window.addEventListener('hashchange', page)
+    {{else}}
+    var his = window.history
+    if (his.pushState) {
+      var originalPushState = his['pushState']
+      his.pushState = function() {
+        originalPushState.apply(this, arguments)
+        page();
+      }
+      window.addEventListener('popstate', page)
+    }
+    {{/if}}
+
+    function handleVisibilityChange() {
+      if (!lastPage && document.visibilityState === 'visible') {
+        page()
+      }
+    }
+
+
+    if (document.visibilityState === 'prerender') {
+      document.addEventListener("visibilitychange", handleVisibilityChange);
+    } else {
+      page()
+    }
+  {{/unless}}
 })();