diff --git a/dist/_astro/CodeCopy.7zsKD7yR.js b/dist/_astro/CodeCopy.7zsKD7yR.js deleted file mode 100644 index e81b10c..0000000 --- a/dist/_astro/CodeCopy.7zsKD7yR.js +++ /dev/null @@ -1 +0,0 @@ -import{S as T,i as P,s as N,e as m,c as b,a as O,d,b as S,f as p,g as y,l as I,t as k,h as q,j as C,o as v,k as M,m as U,n as g,p as x,q as _}from"./index.qUwluA7I.js";import{f as h,b as E}from"./index.xHHWBQ_y.js";function w(a){let e,s="Copy",t,r;return{c(){e=m("span"),e.textContent=s},l(n){e=b(n,"SPAN",{"data-svelte-h":!0}),g(e)!=="svelte-166m88g"&&(e.textContent=s)},m(n,i){y(n,e,i),r=!0},i(n){r||(n&&x(()=>{r&&(t||(t=_(e,h,{},!0)),t.run(1))}),r=!0)},o(n){n&&(t||(t=_(e,h,{},!1)),t.run(0)),r=!1},d(n){n&&d(e),n&&t&&t.end()}}}function A(a){let e,s="✓Copied",t,r;return{c(){e=m("span"),e.textContent=s},l(n){e=b(n,"SPAN",{"data-svelte-h":!0}),g(e)!=="svelte-1hkyy5"&&(e.textContent=s)},m(n,i){y(n,e,i),r=!0},i(n){r||(n&&x(()=>{r&&(t||(t=_(e,E,{amount:50,opacity:50},!0)),t.run(1))}),r=!0)},o(n){n&&(t||(t=_(e,E,{amount:50,opacity:50},!1)),t.run(0)),r=!1},d(n){n&&d(e),n&&t&&t.end()}}}function B(a){let e,s,t,r,n;const i=[A,w],u=[];function f(l,o){return l[0]?0:1}return s=f(a),t=u[s]=i[s](a),{c(){e=m("button"),t.c(),this.h()},l(l){e=b(l,"BUTTON",{class:!0,style:!0});var o=O(e);t.l(o),o.forEach(d),this.h()},h(){S(e,"class","absolute px-2 text-theme-dark-primary border-1 rounded-lg"),p(e,"top","6px"),p(e,"right","8px"),e.disabled=a[0],p(e,"display",a[2]?"inline-block":"none")},m(l,o){y(l,e,o),u[s].m(e,null),a[5](e),r||(n=I(e,"click",a[3]),r=!0)},p(l,[o]){let c=s;s=f(l),s!==c&&(M(),k(u[c],1,1,()=>{u[c]=null}),q(),t=u[s],t||(t=u[s]=i[s](l),t.c()),C(t,1),t.m(e,null)),o&1&&(e.disabled=l[0]),o&4&&p(e,"display",l[2]?"inline-block":"none")},i(l){C(t)},o(l){k(t)},d(l){l&&d(e),u[s].d(),a[5](null),r=!1,n()}}}function D(a,e,s){let{stayCopied:r=2e3}=e,n=!1,i,u=!0;const f=async()=>{if(i){const o=i.parentElement?.parentElement,c=o?.querySelector("code");o?.tagName==="PRE"&&c&&(await navigator.clipboard.writeText(c.innerText),s(0,n=!0),setTimeout(()=>{s(0,n=!1)},r))}};v(()=>{const o=i.parentElement?.parentElement;o&&o.tagName==="PRE"?s(2,u=!0):s(2,u=!1)});function l(o){U[o?"unshift":"push"](()=>{i=o,s(1,i)})}return a.$$set=o=>{"stayCopied"in o&&s(4,r=o.stayCopied)},[n,i,u,f,r,l]}class z extends T{constructor(e){super(),P(this,e,D,B,N,{stayCopied:4})}}export{z as default}; diff --git a/dist/_astro/PostStats.emwjXv3E.js b/dist/_astro/PostStats.emwjXv3E.js deleted file mode 100644 index 8f4a9a4..0000000 --- a/dist/_astro/PostStats.emwjXv3E.js +++ /dev/null @@ -1 +0,0 @@ -import{S as h,i as d,s as m,e as _,r,c as v,a as w,u as l,d as c,b as g,g as y,v as u,w as S,x as f,o as x}from"./index.qUwluA7I.js";/* empty css */function b(i){let s,n,e;return{c(){s=_("span"),n=r(i[0]),e=r(" views"),this.h()},l(t){s=v(t,"SPAN",{class:!0});var a=w(s);n=l(a,i[0]),e=l(a," views"),a.forEach(c),this.h()},h(){g(s,"class","post-stats__views svelte-rbbars")},m(t,a){y(t,s,a),u(s,n),u(s,e)},p(t,[a]){a&1&&S(n,t[0])},i:f,o:f,d(t){t&&c(s)}}}function P(i,s,n){let{slug:e=""}=s,t=!1,a=0;return x(async()=>{if(e&&e.trim()!=="")try{t=!0;const p=await(await fetch(`/api/all/views/${e}.json`)).json();n(0,a=p.views)}catch(o){console.error("PostStats",o)}finally{t=!1}}),i.$$set=o=>{"slug"in o&&n(1,e=o.slug)},[a,e]}class A extends h{constructor(s){super(),d(this,s,P,b,m,{slug:1})}}export{A as default}; diff --git a/dist/_astro/SearchBtn.ePuINP-b.js b/dist/_astro/SearchBtn.ePuINP-b.js deleted file mode 100644 index 5fd9d2a..0000000 --- a/dist/_astro/SearchBtn.ePuINP-b.js +++ /dev/null @@ -1 +0,0 @@ -import{S as l,i as u,s as m,e as f,C as p,c as _,a as d,D as h,d as c,g as $,E as g,l as S,x as b,j as x,t as v,G as w}from"./index.qUwluA7I.js";import{S as y,i as B}from"./SearchIcon.tcwnHmvQ.js";function C(o){let e,n,a,r,i;return n=new y({}),{c(){e=f("button"),p(n.$$.fragment)},l(t){e=_(t,"BUTTON",{});var s=d(e);h(n.$$.fragment,s),s.forEach(c)},m(t,s){$(t,e,s),g(n,e,null),a=!0,r||(i=S(e,"click",o[0]),r=!0)},p:b,i(t){a||(x(n.$$.fragment,t),a=!0)},o(t){v(n.$$.fragment,t),a=!1},d(t){t&&c(e),w(n),r=!1,i()}}}function D(o){function e(){B.set(!0)}return[e]}class j extends l{constructor(e){super(),u(this,e,D,C,m,{})}}export{j as default}; diff --git a/dist/_astro/SearchIcon.tcwnHmvQ.js b/dist/_astro/SearchIcon.tcwnHmvQ.js deleted file mode 100644 index 74bf092..0000000 --- a/dist/_astro/SearchIcon.tcwnHmvQ.js +++ /dev/null @@ -1 +0,0 @@ -import{x as p,s as _,S as b,i as w,L,M as m,N as $,a as g,d as a,b as o,g as h,O as S,P as x,Q as E,j as v,t as k,C as M,D as j,E as q,G as y,y as Z,A as z}from"./index.qUwluA7I.js";const f=[];function B(i,e=p){let n;const t=new Set;function s(c){if(_(i,c)&&(i=c,n)){const d=!f.length;for(const l of t)l[1](),f.push(l,i);if(d){for(let l=0;l{t.delete(l),t.size===0&&n&&(n(),n=null)}}return{set:s,update:r,subscribe:u}}const Q=B(!1);function I(i){let e,n;const t=i[1].default,s=L(t,i,i[0],null);return{c(){e=m("svg"),s&&s.c(),this.h()},l(r){e=$(r,"svg",{xmlns:!0,width:!0,height:!0,viewBox:!0,fill:!0,stroke:!0,"stroke-width":!0,"stroke-linecap":!0,"stroke-linejoin":!0});var u=g(e);s&&s.l(u),u.forEach(a),this.h()},h(){o(e,"xmlns","http://www.w3.org/2000/svg"),o(e,"width","24"),o(e,"height","24"),o(e,"viewBox","0 0 24 24"),o(e,"fill","none"),o(e,"stroke","currentColor"),o(e,"stroke-width","2"),o(e,"stroke-linecap","round"),o(e,"stroke-linejoin","round")},m(r,u){h(r,e,u),s&&s.m(e,null),n=!0},p(r,[u]){s&&s.p&&(!n||u&1)&&S(s,t,r,r[0],n?E(t,r[0],u,null):x(r[0]),null)},i(r){n||(v(s,r),n=!0)},o(r){k(s,r),n=!1},d(r){r&&a(e),s&&s.d(r)}}}function N(i,e,n){let{$$slots:t={},$$scope:s}=e;return i.$$set=r=>{"$$scope"in r&&n(0,s=r.$$scope)},[s,t]}class A extends b{constructor(e){super(),w(this,e,N,I,_,{})}}function C(i){let e;return{c(){e=m("path"),this.h()},l(n){e=$(n,"path",{d:!0,fill:!0}),g(e).forEach(a),this.h()},h(){o(e,"d","M7.66542 10.2366L9.19751 8.951L10.4831 10.4831L13.5473 7.91194L14.8328 9.44402L10.2366 13.3007L7.66542 10.2366Z"),o(e,"fill","currentColor")},m(n,t){h(n,e,t)},d(n){n&&a(e)}}}function D(i){let e,n,t=i[0]&&C();return{c(){t&&t.c(),e=Z(),n=m("path"),this.h()},l(s){t&&t.l(s),e=z(s),n=$(s,"path",{"fill-rule":!0,"clip-rule":!0,d:!0,fill:!0}),g(n).forEach(a),this.h()},h(){o(n,"fill-rule","evenodd"),o(n,"clip-rule","evenodd"),o(n,"d","M16.2071 4.89344C19.0923 7.77862 19.3131 12.3193 16.8693 15.4578C16.8846 15.4713 16.8996 15.4854 16.9143 15.5L21.1569 19.7427C21.5474 20.1332 21.5474 20.7664 21.1569 21.1569C20.7664 21.5474 20.1332 21.5474 19.7427 21.1569L15.5 16.9143C15.4854 16.8996 15.4713 16.8846 15.4578 16.8693C12.3193 19.3131 7.77862 19.0923 4.89344 16.2071C1.76924 13.083 1.76924 8.01763 4.89344 4.89344C8.01763 1.76924 13.083 1.76924 16.2071 4.89344ZM14.7929 14.7929C17.1361 12.4498 17.1361 8.6508 14.7929 6.30765C12.4498 3.96451 8.6508 3.96451 6.30765 6.30765C3.96451 8.6508 3.96451 12.4498 6.30765 14.7929C8.6508 17.1361 12.4498 17.1361 14.7929 14.7929Z"),o(n,"fill","currentColor")},m(s,r){t&&t.m(s,r),h(s,e,r),h(s,n,r)},p(s,r){s[0]?t||(t=C(),t.c(),t.m(e.parentNode,e)):t&&(t.d(1),t=null)},d(s){s&&(a(e),a(n)),t&&t.d(s)}}}function G(i){let e,n;return e=new A({props:{$$slots:{default:[D]},$$scope:{ctx:i}}}),{c(){M(e.$$.fragment)},l(t){j(e.$$.fragment,t)},m(t,s){q(e,t,s),n=!0},p(t,[s]){const r={};s&3&&(r.$$scope={dirty:s,ctx:t}),e.$set(r)},i(t){n||(v(e.$$.fragment,t),n=!0)},o(t){k(e.$$.fragment,t),n=!1},d(t){y(e,t)}}}function O(i,e,n){let{found:t=!1}=e;return i.$$set=s=>{"found"in s&&n(0,t=s.found)},[t]}class V extends b{constructor(e){super(),w(this,e,O,G,_,{found:0})}}export{V as S,Q as i}; diff --git a/dist/_astro/SearchModal.zlxwcrZu.js b/dist/_astro/SearchModal.zlxwcrZu.js deleted file mode 100644 index 49ff823..0000000 --- a/dist/_astro/SearchModal.zlxwcrZu.js +++ /dev/null @@ -1,7 +0,0 @@ -import{S as F,i as G,s as Q,e as E,r as M,y as R,z as N,c as y,a as w,u as T,d as v,A,b as h,g as S,v as $,w as O,x as B,B as de,C as W,D as J,E as K,F as se,l as z,k as X,t as j,h as Y,j as L,G as Z,o as pe,m as me,n as ve,H as ge,p as le,q,I as be}from"./index.qUwluA7I.js";import{f as re,a as ne}from"./index.xHHWBQ_y.js";import{S as ke,i as ie}from"./SearchIcon.tcwnHmvQ.js";/* empty css */function U(n){return n?.length!==void 0?n:Array.from(n)}const $e="modulepreload",Ee=function(n){return"/"+n},ae={},ye=function(t,r,e){let s=Promise.resolve();if(r&&r.length>0){const a=document.getElementsByTagName("link");s=Promise.all(r.map(l=>{if(l=Ee(l),l in ae)return;ae[l]=!0;const i=l.endsWith(".css"),o=i?'[rel="stylesheet"]':"";if(!!e)for(let c=a.length-1;c>=0;c--){const _=a[c];if(_.href===l&&(!i||_.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${l}"]${o}`))return;const u=document.createElement("link");if(u.rel=i?"stylesheet":$e,i||(u.as="script",u.crossOrigin=""),u.href=l,document.head.appendChild(u),i)return new Promise((c,_)=>{u.addEventListener("load",c),u.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${l}`)))})}))}return s.then(()=>t()).catch(a=>{const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=a,window.dispatchEvent(l),!l.defaultPrevented)throw a})};function oe(n,t,r){const e=n.slice();return e[2]=t[r],e}function ce(n){let t,r=n[2]+"",e,s,a;return{c(){t=E("a"),e=M(r),this.h()},l(l){t=y(l,"A",{class:!0,href:!0,title:!0});var i=w(t);e=T(i,r),i.forEach(v),this.h()},h(){h(t,"class","tag svelte-1744t6p"),h(t,"href",s=`/tags/${n[2]}`),h(t,"title",a=n[2])},m(l,i){S(l,t,i),$(t,e)},p(l,i){i&1&&r!==(r=l[2]+"")&&O(e,r),i&1&&s!==(s=`/tags/${l[2]}`)&&h(t,"href",s),i&1&&a!==(a=l[2])&&h(t,"title",a)},d(l){l&&v(t)}}}function fe(n){let t;return{c(){t=E("hr"),this.h()},l(r){t=y(r,"HR",{class:!0}),this.h()},h(){h(t,"class","my-4 text-theme-dark-secondary")},m(r,e){S(r,t,e)},d(r){r&&v(t)}}}function we(n){let t,r,e,s,a=n[0].title+"",l,i,o,p=n[0].description+"",u,c,_,D,C,I,V,m=U(n[0].tags),d=[];for(let f=0;f{"post"in a&&r(0,e=a.post),"isLast"in a&&r(1,s=a.isLast)},[e,s]}class Se extends F{constructor(t){super(),G(this,t,Ie,we,Q,{post:0,isLast:1})}}function ue(n,t,r){const e=n.slice();return e[7]=t[r],e[9]=r,e}function Le(n){let t,r="No matching items found!";return{c(){t=E("div"),t.textContent=r,this.h()},l(e){t=y(e,"DIV",{class:!0,"data-svelte-h":!0}),ve(t)!=="svelte-1ba0qdy"&&(t.textContent=r),this.h()},h(){h(t,"class","search__results--none svelte-1jx4562")},m(e,s){S(e,t,s)},p:B,i:B,o:B,d(e){e&&v(t)}}}function De(n){let t,r,e=U(n[1]),s=[];for(let l=0;lj(s[l],1,1,()=>{s[l]=null});return{c(){for(let l=0;l0}});const C=[De,Le],I=[];function V(m,d){return m[1].length?0:1}return p=V(n),u=I[p]=C[p](n),{c(){t=E("div"),r=E("div"),e=E("label"),W(s.$$.fragment),a=R(),l=E("input"),i=R(),o=E("div"),u.c(),this.h()},l(m){t=y(m,"DIV",{class:!0});var d=w(t);r=y(d,"DIV",{class:!0});var g=w(r);e=y(g,"LABEL",{for:!0,class:!0});var f=w(e);J(s.$$.fragment,f),f.forEach(v),a=A(g),l=y(g,"INPUT",{type:!0,name:!0,placeholder:!0,class:!0}),g.forEach(v),i=A(d),o=y(d,"DIV",{class:!0});var k=w(o);u.l(k),k.forEach(v),d.forEach(v),this.h()},h(){h(e,"for","search"),h(e,"class","svelte-1jx4562"),h(l,"type","text"),h(l,"name","search"),h(l,"placeholder","Search for tags, content..."),h(l,"class","svelte-1jx4562"),h(r,"class","search__ctrl svelte-1jx4562"),h(o,"class","search__results svelte-1jx4562"),h(t,"class","search svelte-1jx4562")},m(m,d){S(m,t,d),$(t,r),$(r,e),K(s,e,null),$(r,a),$(r,l),n[5](l),se(l,n[0]),$(t,i),$(t,o),I[p].m(o,null),c=!0,_||(D=z(l,"input",n[6]),_=!0)},p(m,[d]){const g={};d&2&&(g.found=m[1].length>0),s.$set(g),d&1&&l.value!==m[0]&&se(l,m[0]);let f=p;p=V(m),p===f?I[p].p(m,d):(X(),j(I[f],1,1,()=>{I[f]=null}),Y(),u=I[p],u?u.p(m,d):(u=I[p]=C[p](m),u.c()),L(u,1),u.m(o,null))},i(m){c||(L(s.$$.fragment,m),L(u),c=!0)},o(m){j(s.$$.fragment,m),j(u),c=!1},d(m){m&&v(t),Z(s),n[5](null),I[p].d(),_=!1,D()}}}function Pe(n,t,r){let e,s,a,l="",i=[];pe(async()=>{const u=(await ye(()=>import("./lunr.8J99-g7N.js").then(_=>_.l),__vite__mapDeps([]))).default,c=await fetch("/search-index.json");r(3,s=await c.json()),r(4,a=u(function(){this.ref("slug"),this.field("title"),this.field("description"),this.field("tags"),this.field("body"),s.forEach(_=>{this.add(_)},this)})),e.focus()});function o(u){me[u?"unshift":"push"](()=>{e=u,r(2,e)})}function p(){l=this.value,r(0,l)}return n.$$.update=()=>{if(n.$$.dirty&27&&l&&l.length>=3){const u=a.search(l);r(1,i=[]),u.map(c=>{s.filter(_=>{c.ref===_.slug&&i.push(_)})})}},[l,i,e,s,a,o,p]}class je extends F{constructor(t){super(),G(this,t,Pe,Ve,Q,{})}}function _e(n){let t,r,e,s,a,l,i,o,p,u;return l=new je({}),{c(){t=E("div"),e=R(),s=E("div"),a=E("div"),W(l.$$.fragment),this.h()},l(c){t=y(c,"DIV",{class:!0,role:!0,tabindex:!0}),w(t).forEach(v),e=A(c),s=y(c,"DIV",{class:!0,role:!0});var _=w(s);a=y(_,"DIV",{class:!0});var D=w(a);J(l.$$.fragment,D),D.forEach(v),_.forEach(v),this.h()},h(){h(t,"class","modal__backdrop svelte-14ylcbp"),h(t,"role","button"),h(t,"tabindex","0"),h(a,"class","modal__cnt svelte-14ylcbp"),h(s,"class","modal svelte-14ylcbp"),h(s,"role","dialog")},m(c,_){S(c,t,_),S(c,e,_),S(c,s,_),$(s,a),K(l,a,null),o=!0,p||(u=[z(t,"click",n[1]),z(t,"keydown",n[2])],p=!0)},p:B,i(c){o||(c&&le(()=>{o&&(r||(r=q(t,re,{},!0)),r.run(1))}),L(l.$$.fragment,c),c&&le(()=>{o&&(i||(i=q(a,ne,{y:200,duration:300},!0)),i.run(1))}),o=!0)},o(c){c&&(r||(r=q(t,re,{},!1)),r.run(0)),j(l.$$.fragment,c),c&&(i||(i=q(a,ne,{y:200,duration:300},!1)),i.run(0)),o=!1},d(c){c&&(v(t),v(e),v(s)),c&&r&&r.end(),Z(l),c&&i&&i.end(),p=!1,be(u)}}}function Ce(n){let t,r,e=n[0]&&_e(n);return{c(){e&&e.c(),t=N()},l(s){e&&e.l(s),t=N()},m(s,a){e&&e.m(s,a),S(s,t,a),r=!0},p(s,[a]){s[0]?e?(e.p(s,a),a&1&&L(e,1)):(e=_e(s),e.c(),L(e,1),e.m(t.parentNode,t)):e&&(X(),j(e,1,1,()=>{e=null}),Y())},i(s){r||(L(e),r=!0)},o(s){j(e),r=!1},d(s){s&&v(t),e&&e.d(s)}}}function Re(n,t,r){let e;ge(n,ie,l=>r(0,e=l));const s=()=>ie.set(!1);return[e,s,l=>{l.key==="Escape"&&s()}]}class Ue extends F{constructor(t){super(),G(this,t,Re,Ce,Q,{})}}export{Ue as default}; -function __vite__mapDeps(indexes) { - if (!__vite__mapDeps.viteFileDeps) { - __vite__mapDeps.viteFileDeps = [] - } - return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) -} \ No newline at end of file diff --git a/dist/_astro/_page_.GfMfDciT.css b/dist/_astro/_page_.GfMfDciT.css deleted file mode 100644 index a9403f4..0000000 --- a/dist/_astro/_page_.GfMfDciT.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:Fira Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/fira-sans-cyrillic-ext-400-normal.1RYie3E0.woff2) format("woff2"),url(/_astro/fira-sans-cyrillic-ext-400-normal.rf3f-Kaw.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Fira Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/fira-sans-cyrillic-400-normal.PYrWRMJ5.woff2) format("woff2"),url(/_astro/fira-sans-cyrillic-400-normal.4ryKXlYU.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Fira Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/fira-sans-greek-ext-400-normal.wxqRhc-I.woff2) format("woff2"),url(/_astro/fira-sans-greek-ext-400-normal.QOf54KGx.woff) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Fira Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/fira-sans-greek-400-normal.Mc4iyeKH.woff2) format("woff2"),url(/_astro/fira-sans-greek-400-normal.eCSWGL47.woff) format("woff");unicode-range:U+0370-03FF}@font-face{font-family:Fira Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/fira-sans-vietnamese-400-normal.-U_MOZBq.woff2) format("woff2"),url(/_astro/fira-sans-vietnamese-400-normal.ois6Ns-t.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fira Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/fira-sans-latin-ext-400-normal.bFWruaeo.woff2) format("woff2"),url(/_astro/fira-sans-latin-ext-400-normal.moeor6ib.woff) format("woff");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fira Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/fira-sans-latin-400-normal.6lFYBE6Z.woff2) format("woff2"),url(/_astro/fira-sans-latin-400-normal.ka9-J3LG.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Fira Code,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}html{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}html header,html footer{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}html strong{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:#fdba74;text-decoration:underline;font-weight:500}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)):hover{color:#c2410c}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:#c2410c;border-left-width:.25rem;border-left-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em;font-size:1.5rem;font-size:[object Object];border-color:#fdba74}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:#f97316;font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:#f97316;font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:#f97316;font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%);font-size:.875em;border-radius:.3125rem;padding:.1875em .375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: 17 24 39;--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: 255 255 255;--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>*:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>*:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>*:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>*:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-left:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(blockquote>p:before,p:after):not(:where([class~=not-prose],[class~=not-prose] *)){color:#fdba74}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0}.left-0{left:0}.top-0{top:0}.-z-10{z-index:-10}.z-10{z-index:10}.m-0{margin:0}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-8{margin-bottom:2rem}.mt-2{margin-top:.5rem}.mt-6{margin-top:1.5rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.aspect-\[16\/9\]{aspect-ratio:16/9}.h-12{height:3rem}.h-16{height:4rem}.h-4{height:1rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-12{width:3rem}.w-16{width:4rem}.w-2\/3{width:66.666667%}.w-32{width:8rem}.w-4{width:1rem}.w-4\/6{width:66.666667%}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.max-w-4xl{max-width:56rem}.max-w-none{max-width:none}.flex-1{flex:1 1 0%}.flex-grow{flex-grow:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.list-none{list-style-type:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-center{justify-content:center}.gap-1{gap:.25rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.overflow-hidden{overflow:hidden}.hyphens-auto{-webkit-hyphens:auto;hyphens:auto}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.border-0{border-width:0px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}.border-green-300{--tw-border-opacity: 1;border-color:rgb(134 239 172 / var(--tw-border-opacity))}.border-orange-300{--tw-border-opacity: 1;border-color:rgb(253 186 116 / var(--tw-border-opacity))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity))}.border-theme-dark-primary{--tw-border-opacity: 1;border-color:rgb(253 186 116 / var(--tw-border-opacity))}.border-theme-primary{--tw-border-opacity: 1;border-color:rgb(194 65 12 / var(--tw-border-opacity))}.border-yellow-300{--tw-border-opacity: 1;border-color:rgb(253 224 71 / var(--tw-border-opacity))}.bg-black\/95{background-color:#000000f2}.bg-gray-200\/75{background-color:#e5e7ebbf}.bg-gray-300{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-green-300{--tw-bg-opacity: 1;background-color:rgb(134 239 172 / var(--tw-bg-opacity))}.bg-orange-300{--tw-bg-opacity: 1;background-color:rgb(253 186 116 / var(--tw-bg-opacity))}.bg-red-300{--tw-bg-opacity: 1;background-color:rgb(252 165 165 / var(--tw-bg-opacity))}.bg-theme-primary{--tw-bg-opacity: 1;background-color:rgb(194 65 12 / var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-yellow-300{--tw-bg-opacity: 1;background-color:rgb(253 224 71 / var(--tw-bg-opacity))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--tw-gradient-stops))}.from-theme-primary{--tw-gradient-from: #c2410c var(--tw-gradient-from-position);--tw-gradient-to: rgb(194 65 12 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.fill-theme-primary{fill:#c2410c}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-1{padding-bottom:.25rem}.pb-4{padding-bottom:1rem}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pt-32{padding-top:8rem}.text-left{text-align:left}.text-center{text-align:center}.font-sans{font-family:Fira Code,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-6xl{font-size:3.75rem;line-height:1}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-normal{font-weight:400}.font-semibold{font-weight:600}.font-thin{font-weight:100}.uppercase{text-transform:uppercase}.leading-6{line-height:1.5rem}.text-current{color:currentColor}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity))}.text-inherit{color:inherit}.text-orange-700{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity))}.text-theme-accent-gray-dark{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-theme-dark-primary{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.no-underline{text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-10{opacity:.1}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-theme-accent-gray-light{--tw-shadow-color: #d1d5db;--tw-shadow: var(--tw-shadow-colored)}.shadow-theme-dark-secondary{--tw-shadow-color: #f97316;--tw-shadow: var(--tw-shadow-colored)}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}a{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity));text-decoration-line:underline}.ink-h{display:inline-block;padding-top:1rem;padding-bottom:1rem;font-size:.875rem;line-height:1.25rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;opacity:.4;--tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / .04)) drop-shadow(0 4px 3px rgb(0 0 0 / .1));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (prefers-color-scheme: dark){.ink-h{opacity:.7}}.prose{--tw-prose-bold: #fff}::-webkit-scrollbar{width:.75rem}::-webkit-scrollbar-track{background-color:rgb(253 186 116 / var(--tw-bg-opacity));--tw-bg-opacity: .2}@media (prefers-color-scheme: dark){::-webkit-scrollbar-track{--tw-bg-opacity: 1;background-color:rgb(194 65 12 / var(--tw-bg-opacity))}}::-webkit-scrollbar-thumb{border-radius:9999px;background-color:rgb(194 65 12 / var(--tw-bg-opacity));--tw-bg-opacity: .2;--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@media (prefers-color-scheme: dark){::-webkit-scrollbar-thumb{background-color:rgb(253 186 116 / var(--tw-bg-opacity));--tw-bg-opacity: 1}}.astro-code{position:relative;margin-top:0;--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-shadow-color: rgb(194 65 12 / .2);--tw-shadow: var(--tw-shadow-colored)}@media (prefers-color-scheme: dark){.astro-code{--tw-shadow-color: rgb(253 186 116 / .2);--tw-shadow: var(--tw-shadow-colored)}}.remark-code-title{position:relative;top:1rem;display:inline-block;border-top-left-radius:.375rem;border-top-right-radius:.375rem;background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: rgb(194 65 12 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(194 65 12 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: rgb(253 186 116 / .3) var(--tw-gradient-to-position);padding:.25rem .5rem 1.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@media (prefers-color-scheme: dark){.remark-code-title{--tw-gradient-from: rgb(253 186 116 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 186 116 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: rgb(194 65 12 / .3) var(--tw-gradient-to-position);--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}}:root{--astro-code-color-text: #24292f;--astro-code-color-background: #ffffff;--astro-code-token-constant: #0550ae;--astro-code-token-string: #24292f;--astro-code-token-comment: #6e7781;--astro-code-token-keyword: #cf222e;--astro-code-token-parameter: #24292f;--astro-code-token-function: #8250df;--astro-code-token-string-expression: #0a3069;--astro-code-token-punctuation: #24292f;--astro-code-token-link: #000012}html.dark{--astro-code-color-text: #c9d1d9;--astro-code-color-background: #0d1117;--astro-code-token-constant: #79c0ff;--astro-code-token-string: #a5d6ff;--astro-code-token-comment: #8b949e;--astro-code-token-keyword: #ff7b72;--astro-code-token-parameter: #c9d1d9;--astro-code-token-function: #d2a8ff;--astro-code-token-string-expression: #a5d6ff;--astro-code-token-punctuation: #c9d1d9;--astro-code-token-link: #000012}.hover\:border-gray-400:hover{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity))}.hover\:bg-theme-dark-primary:hover{--tw-bg-opacity: 1;background-color:rgb(253 186 116 / var(--tw-bg-opacity))}.hover\:text-theme-primary:hover{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-theme-secondary:hover{--tw-shadow-color: #9a3412;--tw-shadow: var(--tw-shadow-colored)}@media (prefers-color-scheme: dark){.dark\:border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}.dark\:bg-gray-600\/75{background-color:#4b5563bf}.dark\:bg-theme-dark-primary{--tw-bg-opacity: 1;background-color:rgb(253 186 116 / var(--tw-bg-opacity))}.dark\:bg-yellow-700{--tw-bg-opacity: 1;background-color:rgb(161 98 7 / var(--tw-bg-opacity))}.dark\:fill-theme-dark-primary{fill:#fdba74}.dark\:text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.dark\:text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.dark\:text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.dark\:text-theme-dark-primary{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:shadow-theme-accent-gray-dark{--tw-shadow-color: #6b7280;--tw-shadow: var(--tw-shadow-colored)}.hover\:dark\:border-gray-700:hover{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}.dark\:hover\:text-theme-dark-primary:hover{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}}@media (min-width: 640px){.sm\:w-20{width:5rem}.sm\:w-72{width:18rem}.sm\:gap-10{gap:2.5rem}.sm\:pl-6{padding-left:1.5rem}}@media (min-width: 768px){.md\:h-56{height:14rem}.md\:w-32{width:8rem}.md\:w-60{width:15rem}.md\:w-96{width:24rem}.md\:flex-none{flex:none}.md\:flex-row{flex-direction:row}.md\:justify-end{justify-content:flex-end}.md\:gap-8{gap:2rem}.md\:rounded-md{border-radius:.375rem}.md\:px-0{padding-left:0;padding-right:0}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:text-left{text-align:left}.md\:text-5xl{font-size:3rem;line-height:1}}@media (min-width: 1024px){.lg\:gap-12{gap:3rem}.lg\:px-0{padding-left:0;padding-right:0}}.header[data-astro-cid-3ef6ksr2]{display:flex;gap:1rem;border-bottom-width:1px;padding-top:.75rem;padding-bottom:.75rem}.header__logo-img[data-astro-cid-3ef6ksr2]{height:4rem;width:4rem;overflow:hidden;border-radius:9999px}.header__title[data-astro-cid-3ef6ksr2]{font-size:2.25rem;line-height:2.5rem;font-weight:800;--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}@media (min-width: 768px){.header__title[data-astro-cid-3ef6ksr2]{font-size:3rem;line-height:1}}.header__desc[data-astro-cid-3ef6ksr2]{flex:1 1 0%;font-size:1.25rem;line-height:1.75rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.header__ref-list[data-astro-cid-3ef6ksr2]{display:flex;gap:.75rem;--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.footer[data-astro-cid-sz7xmlte]{border-top-width:1px;padding-top:1.5rem;padding-bottom:1.5rem}.nav-list[data-astro-cid-dmqpwcec]{margin-bottom:2rem;display:inline-flex;list-style-type:none;flex-wrap:wrap;gap:2rem;padding-top:.5rem;padding-bottom:.5rem;font-size:1.25rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0}}@keyframes astroFadeOut{to{opacity:0}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}.post-preview.svelte-1744t6p{display:flex;gap:1.5rem;padding:.5rem;text-align:left}.post-preview.svelte-1744t6p:hover{background-color:#0006}.post-preview__title.svelte-1744t6p{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600;line-height:1.25;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.post-preview__desc.svelte-1744t6p{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:1rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.tag-list.svelte-1744t6p{display:flex;list-style-type:none;flex-wrap:wrap;gap:.5rem;padding-top:.5rem;padding-bottom:.5rem}.tag.svelte-1744t6p{display:inline-block;border-radius:9999px;--tw-bg-opacity:1;background-color:rgb(253 186 116 / var(--tw-bg-opacity));padding:.25rem 1rem;font-size:.75rem;line-height:1rem;--tw-text-opacity:1;color:rgb(0 0 0 / var(--tw-text-opacity))}.search.svelte-1jx4562.svelte-1jx4562{position:relative;width:100%;padding:2rem}input.svelte-1jx4562.svelte-1jx4562{width:24rem;border-width:0px;--tw-bg-opacity:1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));padding:.5rem 1rem .5rem 2.5rem;font-weight:600;--tw-text-opacity:1;color:rgb(75 85 99 / var(--tw-text-opacity));--tw-shadow:inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.search__ctrl.svelte-1jx4562.svelte-1jx4562{position:relative;padding-bottom:1rem}.search__ctrl.svelte-1jx4562 label.svelte-1jx4562{position:absolute;top:.5rem;left:.5rem;--tw-text-opacity:1;color:rgb(0 0 0 / var(--tw-text-opacity))}.search__results.svelte-1jx4562.svelte-1jx4562{overflow-y:auto;--tw-bg-opacity:1;background-color:rgb(194 65 12 / var(--tw-bg-opacity));padding-top:1rem;padding-bottom:1rem}.search__results--none.svelte-1jx4562.svelte-1jx4562{text-align:center;--tw-text-opacity:1;color:rgb(253 186 116 / var(--tw-text-opacity))}.modal.svelte-14ylcbp{pointer-events:none;position:fixed;top:0;left:0;display:grid;height:100%;width:100%;align-content:center;justify-content:center}.modal__backdrop.svelte-14ylcbp{position:fixed;top:0;left:0;z-index:0;height:100vh;width:100%;--tw-bg-opacity:1;background-color:rgb(0 0 0 / var(--tw-bg-opacity));opacity:.7}.modal__cnt.svelte-14ylcbp{pointer-events:auto;z-index:10;width:100%}.content[data-astro-cid-fhdt7an5]{min-height:580px} diff --git a/dist/_astro/_page_.bawBwIp8.css b/dist/_astro/_page_.bawBwIp8.css deleted file mode 100644 index 54d65a1..0000000 --- a/dist/_astro/_page_.bawBwIp8.css +++ /dev/null @@ -1 +0,0 @@ -.post-preview.svelte-1744t6p{display:flex;gap:1.5rem;padding:.5rem;text-align:left}.post-preview.svelte-1744t6p:hover{background-color:#0006}.post-preview__title.svelte-1744t6p{margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600;line-height:1.25;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.post-preview__desc.svelte-1744t6p{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:1rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.tag-list.svelte-1744t6p{display:flex;list-style-type:none;flex-wrap:wrap;gap:.5rem;padding-top:.5rem;padding-bottom:.5rem}.tag.svelte-1744t6p{display:inline-block;border-radius:9999px;--tw-bg-opacity:1;background-color:rgb(253 186 116 / var(--tw-bg-opacity));padding:.25rem 1rem;font-size:.75rem;line-height:1rem;--tw-text-opacity:1;color:rgb(0 0 0 / var(--tw-text-opacity))}.search.svelte-1jx4562.svelte-1jx4562{position:relative;width:100%;padding:2rem}input.svelte-1jx4562.svelte-1jx4562{width:24rem;border-width:0px;--tw-bg-opacity:1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));padding:.5rem 1rem .5rem 2.5rem;font-weight:600;--tw-text-opacity:1;color:rgb(75 85 99 / var(--tw-text-opacity));--tw-shadow:inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.search__ctrl.svelte-1jx4562.svelte-1jx4562{position:relative;padding-bottom:1rem}.search__ctrl.svelte-1jx4562 label.svelte-1jx4562{position:absolute;top:.5rem;left:.5rem;--tw-text-opacity:1;color:rgb(0 0 0 / var(--tw-text-opacity))}.search__results.svelte-1jx4562.svelte-1jx4562{overflow-y:auto;--tw-bg-opacity:1;background-color:rgb(194 65 12 / var(--tw-bg-opacity));padding-top:1rem;padding-bottom:1rem}.search__results--none.svelte-1jx4562.svelte-1jx4562{text-align:center;--tw-text-opacity:1;color:rgb(253 186 116 / var(--tw-text-opacity))}.modal.svelte-14ylcbp{pointer-events:none;position:fixed;top:0;left:0;display:grid;height:100%;width:100%;align-content:center;justify-content:center}.modal__backdrop.svelte-14ylcbp{position:fixed;top:0;left:0;z-index:0;height:100vh;width:100%;--tw-bg-opacity:1;background-color:rgb(0 0 0 / var(--tw-bg-opacity));opacity:.7}.modal__cnt.svelte-14ylcbp{pointer-events:auto;z-index:10;width:100%} diff --git a/dist/_astro/_slug_.4KIzGJfO.css b/dist/_astro/_slug_.4KIzGJfO.css deleted file mode 100644 index a8f1d3c..0000000 --- a/dist/_astro/_slug_.4KIzGJfO.css +++ /dev/null @@ -1 +0,0 @@ -.post-stats__views.svelte-rbbars{margin-left:.25rem;margin-right:.25rem;padding-left:.25rem;padding-right:.25rem} diff --git a/dist/_astro/_slug_.SD5MofpW.css b/dist/_astro/_slug_.SD5MofpW.css deleted file mode 100644 index d85de5d..0000000 --- a/dist/_astro/_slug_.SD5MofpW.css +++ /dev/null @@ -1 +0,0 @@ -.prose[data-astro-cid-apjhz64k]{max-width:none}.post-stats__views.svelte-rbbars{margin-left:.25rem;margin-right:.25rem;padding-left:.25rem;padding-right:.25rem}.post__header[data-astro-cid-jj6gr7j4]{margin-bottom:.25rem;padding-top:1rem;padding-bottom:1rem;text-align:center}@media (min-width: 768px){.post__header[data-astro-cid-jj6gr7j4]{text-align:left}}.post__title[data-astro-cid-jj6gr7j4]{font-size:3rem;line-height:1;font-weight:800;--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}.post__desc[data-astro-cid-jj6gr7j4]{display:flex;justify-content:center;text-align:left;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}@media (min-width: 768px){.post__desc[data-astro-cid-jj6gr7j4]{flex:none;justify-content:flex-start}}.post__author[data-astro-cid-jj6gr7j4]{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity));text-decoration-line:none}.post__author[data-astro-cid-jj6gr7j4]:hover{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity))}.post__date[data-astro-cid-jj6gr7j4],.post__stats[data-astro-cid-jj6gr7j4]{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.post__tags[data-astro-cid-jj6gr7j4]{display:inline-flex;gap:.5rem}.post__tag[data-astro-cid-jj6gr7j4]{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.post__tag[data-astro-cid-jj6gr7j4]:hover{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity))}.avatar[data-astro-cid-jj6gr7j4]{height:3rem;width:3rem;border-radius:9999px;border-width:2px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(253 186 116 / var(--tw-border-opacity));-o-object-fit:cover;object-fit:cover;padding:.25rem}.avatar--lg[data-astro-cid-jj6gr7j4]{height:8rem;width:8rem}.img__outer[data-astro-cid-jj6gr7j4]{position:relative;overflow:hidden;border-radius:.5rem;--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.img_gradient[data-astro-cid-jj6gr7j4]{position:absolute;bottom:0;left:0;z-index:10;height:100%;width:100%;background-image:linear-gradient(to top right,var(--tw-gradient-stops));--tw-gradient-from: #c2410c var(--tw-gradient-from-position);--tw-gradient-to: rgb(194 65 12 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) }.author-card[data-astro-cid-jj6gr7j4]{display:flex;flex-direction:row;justify-content:flex-start;gap:1rem;text-align:left;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.author-card__meta[data-astro-cid-jj6gr7j4]{border-left-width:1px;padding-left:1rem}.author-card__author[data-astro-cid-jj6gr7j4]{margin-bottom:.25rem;font-size:1.5rem;line-height:2rem}.author-card__bio[data-astro-cid-jj6gr7j4]{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.subscription-form[data-astro-cid-jj6gr7j4]{margin-top:.5rem;display:flex;width:66.666667%;flex-direction:row;overflow:hidden;border-radius:.5rem;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.subscription-form[data-astro-cid-jj6gr7j4] input[data-astro-cid-jj6gr7j4]{flex-grow:1;border-width:0px;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.subscription-form[data-astro-cid-jj6gr7j4] button[data-astro-cid-jj6gr7j4],.button[data-astro-cid-jj6gr7j4]{background-image:linear-gradient(to top right,var(--tw-gradient-stops));--tw-gradient-from: #c2410c var(--tw-gradient-from-position);--tw-gradient-to: rgb(194 65 12 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #f97316 var(--tw-gradient-to-position);padding:.5rem 1rem;font-weight:700;text-transform:uppercase;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.author-card__follow-btn[data-astro-cid-jj6gr7j4]{border-radius:.375rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-shadow-color: #f97316;--tw-shadow: var(--tw-shadow-colored);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.author-card__follow-btn[data-astro-cid-jj6gr7j4]:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-shadow-color: #9a3412;--tw-shadow: var(--tw-shadow-colored) } diff --git a/dist/_astro/client.Ddma2X8C.js b/dist/_astro/client.Ddma2X8C.js deleted file mode 100644 index cee78ad..0000000 --- a/dist/_astro/client.Ddma2X8C.js +++ /dev/null @@ -1 +0,0 @@ -const r=()=>{};const f=t=>(s,e,n,{client:l})=>{if(!t.hasAttribute("ssr"))return;const i={};for(const[o,a]of Object.entries(n))i[o]=c(o,a);try{const o=new s({target:t,props:{...e,$$slots:i,$$scope:{ctx:[]}},hydrate:l!=="only",$$inline:!0});t.addEventListener("astro:unmount",()=>o.$destroy(),{once:!0})}catch{}finally{}};function c(t,s){let e;return[()=>({m(n){e=n,n.insertAdjacentHTML("beforeend",`${s}`)},c:r,l:r,d(){if(!e)return;const n=e.querySelector(`astro-slot${t==="default"?":not([name])":`[name="${t}"]`}`);n&&n.remove()}}),r,r]}export{f as default}; diff --git a/dist/_astro/fira-sans-cyrillic-400-normal.4ryKXlYU.woff b/dist/_astro/fira-sans-cyrillic-400-normal.4ryKXlYU.woff deleted file mode 100644 index 282f70b..0000000 Binary files a/dist/_astro/fira-sans-cyrillic-400-normal.4ryKXlYU.woff and /dev/null differ diff --git a/dist/_astro/fira-sans-cyrillic-400-normal.PYrWRMJ5.woff2 b/dist/_astro/fira-sans-cyrillic-400-normal.PYrWRMJ5.woff2 deleted file mode 100644 index 775493b..0000000 Binary files a/dist/_astro/fira-sans-cyrillic-400-normal.PYrWRMJ5.woff2 and /dev/null differ diff --git a/dist/_astro/fira-sans-cyrillic-ext-400-normal.1RYie3E0.woff2 b/dist/_astro/fira-sans-cyrillic-ext-400-normal.1RYie3E0.woff2 deleted file mode 100644 index bc06ffe..0000000 Binary files a/dist/_astro/fira-sans-cyrillic-ext-400-normal.1RYie3E0.woff2 and /dev/null differ diff --git a/dist/_astro/fira-sans-cyrillic-ext-400-normal.rf3f-Kaw.woff b/dist/_astro/fira-sans-cyrillic-ext-400-normal.rf3f-Kaw.woff deleted file mode 100644 index d94961b..0000000 Binary files a/dist/_astro/fira-sans-cyrillic-ext-400-normal.rf3f-Kaw.woff and /dev/null differ diff --git a/dist/_astro/fira-sans-greek-400-normal.Mc4iyeKH.woff2 b/dist/_astro/fira-sans-greek-400-normal.Mc4iyeKH.woff2 deleted file mode 100644 index b488fa4..0000000 Binary files a/dist/_astro/fira-sans-greek-400-normal.Mc4iyeKH.woff2 and /dev/null differ diff --git a/dist/_astro/fira-sans-greek-400-normal.eCSWGL47.woff b/dist/_astro/fira-sans-greek-400-normal.eCSWGL47.woff deleted file mode 100644 index ab893a6..0000000 Binary files a/dist/_astro/fira-sans-greek-400-normal.eCSWGL47.woff and /dev/null differ diff --git a/dist/_astro/fira-sans-greek-ext-400-normal.QOf54KGx.woff b/dist/_astro/fira-sans-greek-ext-400-normal.QOf54KGx.woff deleted file mode 100644 index d98b6d6..0000000 Binary files a/dist/_astro/fira-sans-greek-ext-400-normal.QOf54KGx.woff and /dev/null differ diff --git a/dist/_astro/fira-sans-greek-ext-400-normal.wxqRhc-I.woff2 b/dist/_astro/fira-sans-greek-ext-400-normal.wxqRhc-I.woff2 deleted file mode 100644 index 5645c7a..0000000 Binary files a/dist/_astro/fira-sans-greek-ext-400-normal.wxqRhc-I.woff2 and /dev/null differ diff --git a/dist/_astro/fira-sans-latin-400-normal.6lFYBE6Z.woff2 b/dist/_astro/fira-sans-latin-400-normal.6lFYBE6Z.woff2 deleted file mode 100644 index d31eba8..0000000 Binary files a/dist/_astro/fira-sans-latin-400-normal.6lFYBE6Z.woff2 and /dev/null differ diff --git a/dist/_astro/fira-sans-latin-400-normal.ka9-J3LG.woff b/dist/_astro/fira-sans-latin-400-normal.ka9-J3LG.woff deleted file mode 100644 index 676e7bc..0000000 Binary files a/dist/_astro/fira-sans-latin-400-normal.ka9-J3LG.woff and /dev/null differ diff --git a/dist/_astro/fira-sans-latin-ext-400-normal.bFWruaeo.woff2 b/dist/_astro/fira-sans-latin-ext-400-normal.bFWruaeo.woff2 deleted file mode 100644 index 9aa139c..0000000 Binary files a/dist/_astro/fira-sans-latin-ext-400-normal.bFWruaeo.woff2 and /dev/null differ diff --git a/dist/_astro/fira-sans-latin-ext-400-normal.moeor6ib.woff b/dist/_astro/fira-sans-latin-ext-400-normal.moeor6ib.woff deleted file mode 100644 index e3a608b..0000000 Binary files a/dist/_astro/fira-sans-latin-ext-400-normal.moeor6ib.woff and /dev/null differ diff --git a/dist/_astro/fira-sans-vietnamese-400-normal.-U_MOZBq.woff2 b/dist/_astro/fira-sans-vietnamese-400-normal.-U_MOZBq.woff2 deleted file mode 100644 index f26b156..0000000 Binary files a/dist/_astro/fira-sans-vietnamese-400-normal.-U_MOZBq.woff2 and /dev/null differ diff --git a/dist/_astro/fira-sans-vietnamese-400-normal.ois6Ns-t.woff b/dist/_astro/fira-sans-vietnamese-400-normal.ois6Ns-t.woff deleted file mode 100644 index 4d67713..0000000 Binary files a/dist/_astro/fira-sans-vietnamese-400-normal.ois6Ns-t.woff and /dev/null differ diff --git a/dist/_astro/hoisted.rfglzoOR.js b/dist/_astro/hoisted.rfglzoOR.js deleted file mode 100644 index 53efb0d..0000000 --- a/dist/_astro/hoisted.rfglzoOR.js +++ /dev/null @@ -1 +0,0 @@ -const z="astro:before-preparation",J="astro:after-preparation",Q="astro:before-swap",Z="astro:after-swap",ee=e=>document.dispatchEvent(new Event(e));class $ extends Event{from;to;direction;navigationType;sourceElement;info;newDocument;constructor(t,n,r,o,a,l,h,s,d){super(t,n),this.from=r,this.to=o,this.direction=a,this.navigationType=l,this.sourceElement=h,this.info=s,this.newDocument=d,Object.defineProperties(this,{from:{enumerable:!0},to:{enumerable:!0,writable:!0},direction:{enumerable:!0,writable:!0},navigationType:{enumerable:!0},sourceElement:{enumerable:!0},info:{enumerable:!0},newDocument:{enumerable:!0,writable:!0}})}}class te extends ${formData;loader;constructor(t,n,r,o,a,l,h,s,d){super(z,{cancelable:!0},t,n,r,o,a,l,h),this.formData=s,this.loader=d.bind(this,this),Object.defineProperties(this,{formData:{enumerable:!0},loader:{enumerable:!0,writable:!0}})}}class ne extends ${direction;viewTransition;swap;constructor(t,n,r){super(Q,void 0,t.from,t.to,t.direction,t.navigationType,t.sourceElement,t.info,t.newDocument),this.direction=t.direction,this.viewTransition=n,this.swap=r.bind(this,this),Object.defineProperties(this,{direction:{enumerable:!0},viewTransition:{enumerable:!0},swap:{enumerable:!0,writable:!0}})}}async function re(e,t,n,r,o,a,l,h){const s=new te(e,t,n,r,o,a,window.document,l,h);return document.dispatchEvent(s)&&(await s.loader(),s.defaultPrevented||(ee(J),s.navigationType!=="traverse"&&D({scrollX,scrollY}))),s}async function oe(e,t,n){const r=new ne(e,t,n);return document.dispatchEvent(r),r.swap(),r}const D=e=>{history.state&&(history.scrollRestoration="manual",history.replaceState({...history.state,...e},""))},R=!!document.startViewTransition,x=()=>!!document.querySelector('[name="astro-view-transitions-enabled"]'),F=(e,t)=>e.pathname===t.pathname&&e.search===t.search;let A,y,T=!1,_;const q=e=>document.dispatchEvent(new Event(e)),C=()=>q("astro:page-load"),ie=()=>{let e=document.createElement("div");e.setAttribute("aria-live","assertive"),e.setAttribute("aria-atomic","true"),e.className="astro-route-announcer",document.body.append(e),setTimeout(()=>{let t=document.title||document.querySelector("h1")?.textContent||location.pathname;e.textContent=t},60)},w="data-astro-transition-persist",U="data-astro-transition",V="data-astro-transition-fallback";let P,g=0;history.state?(g=history.state.index,scrollTo({left:history.state.scrollX,top:history.state.scrollY})):x()&&(history.replaceState({index:g,scrollX,scrollY},""),history.scrollRestoration="manual");const se=(e,t)=>{let n=!1,r=!1;return(...o)=>{if(n){r=!0;return}e(...o),n=!0,setTimeout(()=>{r&&(r=!1,e(...o)),n=!1},t)}};async function ae(e,t){try{const n=await fetch(e,t),r=n.headers.get("content-type")?.replace(/;.*$/,"");return r!=="text/html"&&r!=="application/xhtml+xml"?null:{html:await n.text(),redirected:n.redirected?n.url:void 0,mediaType:r}}catch{return null}}function W(){const e=document.querySelector('[name="astro-view-transitions-fallback"]');return e?e.getAttribute("content"):"animate"}function ce(){let e=Promise.resolve();for(const t of Array.from(document.scripts)){if(t.dataset.astroExec==="")continue;const n=document.createElement("script");n.innerHTML=t.innerHTML;for(const r of t.attributes){if(r.name==="src"){const o=new Promise(a=>{n.onload=a});e=e.then(()=>o)}n.setAttribute(r.name,r.value)}n.dataset.astroExec="",t.replaceWith(n)}return e}const X=(e,t,n,r)=>{const o=F(t,e);let a=!1;if(e.href!==location.href&&!r)if(n.history==="replace"){const l=history.state;history.replaceState({...n.state,index:l.index,scrollX:l.scrollX,scrollY:l.scrollY},"",e.href)}else history.pushState({...n.state,index:++g,scrollX:0,scrollY:0},"",e.href);A=e,o||(scrollTo({left:0,top:0,behavior:"instant"}),a=!0),r?scrollTo(r.scrollX,r.scrollY):(e.hash?(history.scrollRestoration="auto",location.href=e.href):a||scrollTo({left:0,top:0,behavior:"instant"}),history.scrollRestoration="manual")};function le(e){const t=[];for(const n of e.querySelectorAll("head link[rel=stylesheet]"))if(!document.querySelector(`[${w}="${n.getAttribute(w)}"], link[rel=stylesheet][href="${n.getAttribute("href")}"]`)){const r=document.createElement("link");r.setAttribute("rel","preload"),r.setAttribute("as","style"),r.setAttribute("href",n.getAttribute("href")),t.push(new Promise(o=>{["load","error"].forEach(a=>r.addEventListener(a,o)),document.head.append(r)}))}return t}async function I(e,t,n,r){const o=(i,u)=>{const m=i.getAttribute(w),p=m&&u.head.querySelector(`[${w}="${m}"]`);if(p)return p;if(i.matches("link[rel=stylesheet]")){const b=i.getAttribute("href");return u.head.querySelector(`link[rel=stylesheet][href="${b}"]`)}return null},a=()=>{const i=document.activeElement;if(i?.closest(`[${w}]`)){if(i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement){const u=i.selectionStart,m=i.selectionEnd;return{activeElement:i,start:u,end:m}}return{activeElement:i}}else return{activeElement:null}},l=({activeElement:i,start:u,end:m})=>{i&&(i.focus(),(i instanceof HTMLInputElement||i instanceof HTMLTextAreaElement)&&(i.selectionStart=u,i.selectionEnd=m))},h=i=>{const u=document.documentElement,m=[...u.attributes].filter(({name:c})=>(u.removeAttribute(c),c.startsWith("data-astro-")));[...i.newDocument.documentElement.attributes,...m].forEach(({name:c,value:f})=>u.setAttribute(c,f));for(const c of document.scripts)for(const f of i.newDocument.scripts)if(!c.src&&c.textContent===f.textContent||c.src&&c.type===f.type&&c.src===f.src){f.dataset.astroExec="";break}for(const c of Array.from(document.head.children)){const f=o(c,i.newDocument);f?f.remove():c.remove()}document.head.append(...i.newDocument.head.children);const p=document.body,b=a();document.body.replaceWith(i.newDocument.body);for(const c of p.querySelectorAll(`[${w}]`)){const f=c.getAttribute(w),S=document.querySelector(`[${w}="${f}"]`);S&&S.replaceWith(c)}l(b)};async function s(i){function u(c){const f=c.effect;return!f||!(f instanceof KeyframeEffect)||!f.target?!1:window.getComputedStyle(f.target,f.pseudoElement).animationIterationCount==="infinite"}const m=document.getAnimations();document.documentElement.setAttribute(V,i);const b=document.getAnimations().filter(c=>!m.includes(c)&&!u(c));return Promise.all(b.map(c=>c.finished))}if(!T)document.documentElement.setAttribute(U,e.direction),r==="animate"&&await s("old");else throw new DOMException("Transition was skipped");const d=await oe(e,y,h);X(d.to,d.from,t,n),q(Z),r==="animate"&&!T&&s("new").then(()=>_())}async function Y(e,t,n,r,o){if(!x()||location.origin!==n.origin){location.href=n.href;return}const a=o?"traverse":r.history==="replace"?"replace":"push";if(a!=="traverse"&&D({scrollX,scrollY}),F(t,n)&&n.hash){X(n,t,r,o);return}const l=await re(t,n,e,a,r.sourceElement,r.info,r.formData,h);if(l.defaultPrevented){location.href=n.href;return}async function h(s){const d=s.to.href,i={};s.formData&&(i.method="POST",i.body=s.formData);const u=await ae(d,i);if(u===null){s.preventDefault();return}if(u.redirected&&(s.to=new URL(u.redirected)),P??=new DOMParser,s.newDocument=P.parseFromString(u.html,u.mediaType),s.newDocument.querySelectorAll("noscript").forEach(p=>p.remove()),!s.newDocument.querySelector('[name="astro-view-transitions-enabled"]')&&!s.formData){s.preventDefault();return}const m=le(s.newDocument);m.length&&await Promise.all(m)}if(T=!1,R)y=document.startViewTransition(async()=>await I(l,r,o));else{const s=(async()=>{await new Promise(d=>setTimeout(d)),await I(l,r,o,W())})();y={updateCallbackDone:s,ready:s,finished:new Promise(d=>_=d),skipTransition:()=>{T=!0}}}y.ready.then(async()=>{await ce(),C(),ie()}),y.finished.then(()=>{document.documentElement.removeAttribute(U),document.documentElement.removeAttribute(V)}),await y.ready}async function O(e,t){await Y("forward",A,new URL(e,location.href),t??{})}function ue(e){if(!x()&&e.state){location.reload();return}if(e.state===null)return;const t=history.state,n=t.index,r=n>g?"forward":"back";g=n,Y(r,A,new URL(location.href),{},t)}const M=()=>{D({scrollX,scrollY})};{(R||W()!=="none")&&(A=new URL(location.href),addEventListener("popstate",ue),addEventListener("load",C),"onscrollend"in window?addEventListener("scrollend",M):addEventListener("scroll",se(M,350),{passive:!0}));for(const e of document.scripts)e.dataset.astroExec=""}const B=new Set,v=new WeakSet;let L,K,H=!1;function fe(e){H||(H=!0,L??=e?.prefetchAll??!1,K??=e?.defaultStrategy??"hover",de(),me(),he())}function de(){for(const e of["touchstart","mousedown"])document.body.addEventListener(e,t=>{E(t.target,"tap")&&k(t.target.href,{with:"fetch",ignoreSlowConnection:!0})},{passive:!0})}function me(){let e;document.body.addEventListener("focusin",r=>{E(r.target,"hover")&&t(r)},{passive:!0}),document.body.addEventListener("focusout",n,{passive:!0}),G(()=>{for(const r of document.getElementsByTagName("a"))v.has(r)||E(r,"hover")&&(v.add(r),r.addEventListener("mouseenter",t,{passive:!0}),r.addEventListener("mouseleave",n,{passive:!0}))});function t(r){const o=r.target.href;e&&clearTimeout(e),e=setTimeout(()=>{k(o,{with:"fetch"})},80)}function n(){e&&(clearTimeout(e),e=0)}}function he(){let e;G(()=>{for(const t of document.getElementsByTagName("a"))v.has(t)||E(t,"viewport")&&(v.add(t),e??=we(),e.observe(t))})}function we(){const e=new WeakMap;return new IntersectionObserver((t,n)=>{for(const r of t){const o=r.target,a=e.get(o);r.isIntersecting?(a&&clearTimeout(a),e.set(o,setTimeout(()=>{n.unobserve(o),e.delete(o),k(o.href,{with:"link"})},300))):a&&(clearTimeout(a),e.delete(o))}})}function k(e,t){const n=t?.ignoreSlowConnection??!1;if(!pe(e,n))return;if(B.add(e),(t?.with??"link")==="link"){const o=document.createElement("link");o.rel="prefetch",o.setAttribute("href",e),document.head.append(o)}else fetch(e).catch(o=>{console.log(`[astro] Failed to prefetch ${e}`),console.error(o)})}function pe(e,t){if(!navigator.onLine||!t&&j())return!1;try{const n=new URL(e,location.href);return location.origin===n.origin&&(location.pathname!==n.pathname||location.search!==n.search)&&!B.has(e)}catch{}return!1}function E(e,t){if(e?.tagName!=="A")return!1;const n=e.dataset.astroPrefetch;return n==="false"?!1:t==="tap"&&(n!=null||L)&&j()?!0:n==null&&L||n===""?t===K:n===t}function j(){if("connection"in navigator){const e=navigator.connection;return e.saveData||/(2|3)g/.test(e.effectiveType)}return!1}function G(e){e();let t=!1;document.addEventListener("astro:page-load",()=>{if(!t){t=!0;return}e()})}function ye(){const e=document.querySelector('[name="astro-view-transitions-fallback"]');return e?e.getAttribute("content"):"animate"}function N(e){return e.dataset.astroReload!==void 0}(R||ye()!=="none")&&(document.addEventListener("click",e=>{let t=e.target;if(t instanceof Element&&(t=t.closest("a, area")),!(t instanceof HTMLAnchorElement)&&!(t instanceof SVGAElement)&&!(t instanceof HTMLAreaElement))return;const n=t instanceof HTMLElement?t.target:t.target.baseVal,r=t instanceof HTMLElement?t.href:t.href.baseVal,o=new URL(r,location.href).origin;N(t)||t.hasAttribute("download")||!t.href||n&&n!=="_self"||o!==location.origin||e.button!==0||e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||e.defaultPrevented||(e.preventDefault(),O(r,{history:t.dataset.astroHistory==="replace"?"replace":"auto",sourceElement:t}))}),document.addEventListener("submit",e=>{let t=e.target;if(t.tagName!=="FORM"||N(t))return;const n=t,r=e.submitter,o=new FormData(n,r);let a=r?.getAttribute("formaction")??n.action??location.pathname;const l=r?.getAttribute("formmethod")??n.method;if(l==="dialog")return;const h={sourceElement:r??n};if(l==="get"){const s=new URLSearchParams(o),d=new URL(a);d.search=s.toString(),a=d.toString()}else h.formData=o;e.preventDefault(),O(a,h)}),fe({prefetchAll:!0})); diff --git a/dist/_astro/index.qUwluA7I.js b/dist/_astro/index.qUwluA7I.js deleted file mode 100644 index a053c2c..0000000 --- a/dist/_astro/index.qUwluA7I.js +++ /dev/null @@ -1,4 +0,0 @@ -function v(){}const rt=t=>t;function st(t,e){for(const n in e)t[n]=e[n];return t}function Q(t){return t()}function T(){return Object.create(null)}function E(t){t.forEach(Q)}function L(t){return typeof t=="function"}function Ft(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}function ot(t){return Object.keys(t).length===0}function lt(t,...e){if(t==null){for(const i of e)i(void 0);return v}const n=t.subscribe(...e);return n.unsubscribe?()=>n.unsubscribe():n}function Lt(t,e,n){t.$$.on_destroy.push(lt(e,n))}function qt(t,e,n,i){if(t){const o=U(t,e,n,i);return t[0](o)}}function U(t,e,n,i){return t[1]&&i?st(n.ctx.slice(),t[1](i(e))):n.ctx}function Ht(t,e,n,i){if(t[2]&&i){const o=t[2](i(n));if(e.dirty===void 0)return o;if(typeof o=="object"){const u=[],s=Math.max(e.dirty.length,o.length);for(let r=0;r32){const e=[],n=t.ctx.length/32;for(let i=0;iwindow.performance.now():()=>Date.now(),q=V?t=>requestAnimationFrame(t):v;const b=new Set;function W(t){b.forEach(e=>{e.c(t)||(b.delete(e),e.f())}),b.size!==0&&q(W)}function ut(t){let e;return b.size===0&&q(W),{promise:new Promise(n=>{b.add(e={c:t,f:n})}),abort(){b.delete(e)}}}let P=!1;function at(){P=!0}function ft(){P=!1}function _t(t,e,n,i){for(;t>1);n(o)<=i?t=o+1:e=o}return t}function dt(t){if(t.hydrate_init)return;t.hydrate_init=!0;let e=t.childNodes;if(t.nodeName==="HEAD"){const l=[];for(let c=0;c0&&e[n[o]].claim_order<=c?o+1:_t(1,o,h=>e[n[h]].claim_order,c))-1;i[l]=n[_]+1;const a=_+1;n[a]=l,o=Math.max(a,o)}const u=[],s=[];let r=e.length-1;for(let l=n[o]+1;l!=0;l=i[l-1]){for(u.push(e[l-1]);r>=l;r--)s.push(e[r]);r--}for(;r>=0;r--)s.push(e[r]);u.reverse(),s.sort((l,c)=>l.claim_order-c.claim_order);for(let l=0,c=0;l=u[c].claim_order;)c++;const _=ct.removeEventListener(e,n,i)}function Xt(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function Yt(t){return t.dataset.svelteH}function xt(t){return Array.from(t.childNodes)}function $t(t){t.claim_info===void 0&&(t.claim_info={last_index:0,total_claimed:0})}function tt(t,e,n,i,o=!1){$t(t);const u=(()=>{for(let s=t.claim_info.last_index;s=0;s--){const r=t[s];if(e(r)){const l=n(r);return l===void 0?t.splice(s,1):t[s]=l,o?l===void 0&&t.claim_info.last_index--:t.claim_info.last_index=s,r}}return i()})();return u.claim_order=t.claim_info.total_claimed,t.claim_info.total_claimed+=1,u}function et(t,e,n,i){return tt(t,o=>o.nodeName===e,o=>{const u=[];for(let s=0;so.removeAttribute(s))},()=>i(e))}function Zt(t,e,n){return et(t,e,n,Z)}function te(t,e,n){return et(t,e,n,gt)}function bt(t,e){return tt(t,n=>n.nodeType===3,n=>{const i=""+e;if(n.data.startsWith(i)){if(n.data.length!==i.length)return n.splitText(i.length)}else n.data=i},()=>H(e),!0)}function ee(t){return bt(t," ")}function ne(t,e){e=""+e,t.data!==e&&(t.data=e)}function ie(t,e){t.value=e??""}function re(t,e,n,i){n==null?t.style.removeProperty(e):t.style.setProperty(e,n,i?"important":"")}function wt(t,e,{bubbles:n=!1,cancelable:i=!1}={}){return new CustomEvent(t,{detail:e,bubbles:n,cancelable:i})}const k=new Map;let O=0;function vt(t){let e=5381,n=t.length;for(;n--;)e=(e<<5)-e^t.charCodeAt(n);return e>>>0}function Et(t,e){const n={stylesheet:mt(e),rules:{}};return k.set(t,n),n}function G(t,e,n,i,o,u,s,r=0){const l=16.666/i;let c=`{ -`;for(let d=0;d<=1;d+=l){const g=e+(n-e)*u(d);c+=d*100+`%{${s(g,1-g)}} -`}const _=c+`100% {${s(n,1-n)}} -}`,a=`__svelte_${vt(_)}_${r}`,h=X(t),{stylesheet:y,rules:f}=k.get(h)||Et(h,t);f[a]||(f[a]=!0,y.insertRule(`@keyframes ${a} ${_}`,y.cssRules.length));const m=t.style.animation||"";return t.style.animation=`${m?`${m}, `:""}${a} ${i}ms linear ${o}ms 1 both`,O+=1,a}function Nt(t,e){const n=(t.style.animation||"").split(", "),i=n.filter(e?u=>u.indexOf(e)<0:u=>u.indexOf("__svelte")===-1),o=n.length-i.length;o&&(t.style.animation=i.join(", "),O-=o,O||St())}function St(){q(()=>{O||(k.forEach(t=>{const{ownerNode:e}=t.stylesheet;e&&Y(e)}),k.clear())})}let A;function S(t){A=t}function At(){if(!A)throw new Error("Function called outside component initialization");return A}function se(t){At().$$.on_mount.push(t)}const $=[],J=[];let w=[];const K=[],Ct=Promise.resolve();let F=!1;function jt(){F||(F=!0,Ct.then(nt))}function M(t){w.push(t)}const R=new Set;let x=0;function nt(){if(x!==0)return;const t=A;do{try{for(;x<$.length;){const e=$[x];x++,S(e),kt(e.$$)}}catch(e){throw $.length=0,x=0,e}for(S(null),$.length=0,x=0;J.length;)J.pop()();for(let e=0;et.indexOf(i)===-1?e.push(i):n.push(i)),n.forEach(i=>i()),w=e}let N;function Mt(){return N||(N=Promise.resolve(),N.then(()=>{N=null})),N}function z(t,e,n){t.dispatchEvent(wt(`${e?"intro":"outro"}${n}`))}const j=new Set;let p;function oe(){p={r:0,c:[],p}}function le(){p.r||E(p.c),p=p.p}function Pt(t,e){t&&t.i&&(j.delete(t),t.i(e))}function ce(t,e,n,i){if(t&&t.o){if(j.has(t))return;j.add(t),p.c.push(()=>{j.delete(t),i&&(n&&t.d(1),i())}),t.o(e)}else i&&i()}const Bt={duration:0};function ue(t,e,n,i){let u=e(t,n,{direction:"both"}),s=i?0:1,r=null,l=null,c=null,_;function a(){c&&Nt(t,c)}function h(f,m){const d=f.b-s;return m*=Math.abs(d),{a:s,b:f.b,d,duration:m,start:f.start,end:f.start+m,group:f.group}}function y(f){const{delay:m=0,duration:d=300,easing:g=rt,tick:B=v,css:D}=u||Bt,I={start:ct()+m,b:f};f||(I.group=p,p.r+=1),"inert"in t&&(f?_!==void 0&&(t.inert=_):(_=t.inert,t.inert=!0)),r||l?l=I:(D&&(a(),c=G(t,s,f,d,m,g,D)),f&&B(0,1),r=h(I,d),M(()=>z(t,f,"start")),ut(C=>{if(l&&C>l.start&&(r=h(l,d),l=null,z(t,r.b,"start"),D&&(a(),c=G(t,s,r.b,r.duration,0,g,u.css))),r){if(C>=r.end)B(s=r.b,1-s),z(t,r.b,"end"),l||(r.b?a():--r.group.r||E(r.group.c)),r=null;else if(C>=r.start){const it=C-r.start;s=r.a+r.d*g(it/r.duration),B(s,1-s)}}return!!(r||l)}))}return{run(f){L(u)?Mt().then(()=>{u=u({direction:f?"in":"out"}),y(f)}):y(f)},end(){a(),r=l=null}}}function ae(t){t&&t.c()}function fe(t,e){t&&t.l(e)}function Dt(t,e,n){const{fragment:i,after_update:o}=t.$$;i&&i.m(e,n),M(()=>{const u=t.$$.on_mount.map(Q).filter(L);t.$$.on_destroy?t.$$.on_destroy.push(...u):E(u),t.$$.on_mount=[]}),o.forEach(M)}function It(t,e){const n=t.$$;n.fragment!==null&&(Ot(n.after_update),E(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function Rt(t,e){t.$$.dirty[0]===-1&&($.push(t),jt(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{const f=y.length?y[0]:h;return c.ctx&&o(c.ctx[a],c.ctx[a]=f)&&(!c.skip_bound&&c.bound[a]&&c.bound[a](f),_&&Rt(t,a)),h}):[],c.update(),_=!0,E(c.before_update),c.fragment=i?i(c.ctx):!1,e.target){if(e.hydrate){at();const a=xt(e.target);c.fragment&&c.fragment.l(a),a.forEach(Y)}else c.fragment&&c.fragment.c();e.intro&&Pt(t.$$.fragment),Dt(t,e.target,e.anchor),ft(),nt()}S(l)}class de{$$=void 0;$$set=void 0;$destroy(){It(this,1),this.$destroy=v}$on(e,n){if(!L(n))return v;const i=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return i.push(n),()=>{const o=i.indexOf(n);o!==-1&&i.splice(o,1)}}$set(e){this.$$set&&!ot(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const zt="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(zt);export{ee as A,Qt as B,ae as C,fe as D,Dt as E,ie as F,It as G,Lt as H,E as I,Jt as J,rt as K,qt as L,gt as M,te as N,Tt as O,Gt as P,Ht as Q,de as S,xt as a,Xt as b,Zt as c,Y as d,Z as e,re as f,Kt as g,le as h,_e as i,Pt as j,oe as k,Wt as l,J as m,Yt as n,se as o,M as p,ue as q,H as r,Ft as s,ce as t,bt as u,yt as v,ne as w,v as x,Ut as y,Vt as z}; diff --git a/dist/_astro/index.xHHWBQ_y.js b/dist/_astro/index.xHHWBQ_y.js deleted file mode 100644 index b1d2a57..0000000 --- a/dist/_astro/index.xHHWBQ_y.js +++ /dev/null @@ -1,3 +0,0 @@ -import{J as p,K as g}from"./index.qUwluA7I.js";function _(t){return t<.5?4*t*t*t:.5*Math.pow(2*t-2,3)+1}function x(t){const n=t-1;return n*n*n+1}function S(t,{delay:n=0,duration:c=400,easing:s=_,amount:e=5,opacity:r=0}={}){const a=getComputedStyle(t),o=+a.opacity,i=a.filter==="none"?"":a.filter,f=o*(1-r),[y,l]=p(e);return{delay:n,duration:c,easing:s,css:($,u)=>`opacity: ${o-f*u}; filter: ${i} blur(${u*y}${l});`}}function O(t,{delay:n=0,duration:c=400,easing:s=g}={}){const e=+getComputedStyle(t).opacity;return{delay:n,duration:c,easing:s,css:r=>`opacity: ${r*e}`}}function U(t,{delay:n=0,duration:c=400,easing:s=x,x:e=0,y:r=0,opacity:a=0}={}){const o=getComputedStyle(t),i=+o.opacity,f=o.transform==="none"?"":o.transform,y=i*(1-a),[l,$]=p(e),[u,d]=p(r);return{delay:n,duration:c,easing:s,css:(m,b)=>` - transform: ${f} translate(${(1-m)*l}${$}, ${(1-m)*u}${d}); - opacity: ${i-y*b}`}}export{U as a,S as b,O as f}; diff --git a/dist/_astro/lunr.8J99-g7N.js b/dist/_astro/lunr.8J99-g7N.js deleted file mode 100644 index a2f2573..0000000 --- a/dist/_astro/lunr.8J99-g7N.js +++ /dev/null @@ -1,40 +0,0 @@ -function X(k,$){for(var t=0;t<$.length;t++){const e=$[t];if(typeof e!="string"&&!Array.isArray(e)){for(const r in e)if(r!=="default"&&!(r in k)){const i=Object.getOwnPropertyDescriptor(e,r);i&&Object.defineProperty(k,r,i.get?i:{enumerable:!0,get:()=>e[r]})}}}return Object.freeze(Object.defineProperty(k,Symbol.toStringTag,{value:"Module"}))}function Y(k){return k&&k.__esModule&&Object.prototype.hasOwnProperty.call(k,"default")?k.default:k}var q={exports:{}};/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - */(function(k,$){(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version="2.3.9";/*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - */t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),i=Object.keys(e),n=0;n0){var f=t.utils.clone(r)||{};f.position=[u,a],f.index=s.length,s.push(new t.Token(i.slice(u,o),f))}u=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;/*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - */t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(i){var n=t.Pipeline.registeredFunctions[i];if(n)r.add(n);else throw new Error("Cannot load unregistered function: "+i)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(e);if(i==-1)throw new Error("Cannot find existingFn");i=i+1,this._stack.splice(i,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(e);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,i=0;i1&&(oe&&(i=s),o!=e);)n=i-r,s=r+Math.floor(n/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(oc?f+=2:u==c&&(r+=i[a+1]*n[f+1],a+=2,f+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,i=0;r0){var o=s.str.charAt(0),u;o in s.node.edges?u=s.node.edges[o]:(u=new t.TokenSet,s.node.edges[o]=u),s.str.length==1&&(u.final=!0),n.push({node:u,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}if(s.str.length==0&&(c.final=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var a=s.node.edges["*"];else{var a=new t.TokenSet;s.node.edges["*"]=a}s.str.length==1&&(a.final=!0),n.push({node:a,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var f=s.str.charAt(0),v=s.str.charAt(1),y;v in s.node.edges?y=s.node.edges[v]:(y=new t.TokenSet,s.node.edges[v]=y),s.str.length==1&&(y.final=!0),n.push({node:y,editsRemaining:s.editsRemaining-1,str:f+s.str.slice(2)})}}}return i},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,i=r,n=0,s=e.length;n=e;r--){var i=this.uncheckedNodes[r],n=i.child.toString();n in this.minimizedNodes?i.parent.edges[i.char]=this.minimizedNodes[n]:(i.child._str=n,this.minimizedNodes[n]=i.child),this.uncheckedNodes.pop()}};/*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - */t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var i=new t.QueryParser(e,r);i.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),u=Object.create(null),c=0;c1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var i=e[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==":")return t.QueryLexer.lexField;if(r=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r=="+"&&e.width()===1||r=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new t.QueryParseError(i,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new t.QueryParseError(i,r.start,r.end)}var n=e.peekLexeme();if(n==null){var i="expecting term or field, found nothing";throw new t.QueryParseError(i,r.start,r.end)}switch(n.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var i=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new t.QueryParseError(n,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var n="expecting term, found nothing";throw new t.QueryParseError(n,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new t.QueryParseError(n,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var i=e.peekLexeme();if(i==null){e.nextClause();return}switch(i.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new t.QueryParseError(n,r.start,r.end)}e.currentClause.editDistance=i;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(n,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new t.QueryParseError(n,r.start,r.end)}e.currentClause.boost=i;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(n,s.start,s.end)}}},function(e,r){k.exports=r()}(this,function(){return t})})()})(q);var W=q.exports;const Z=Y(W),K=X({__proto__:null,default:Z},[W]);export{K as l}; diff --git a/dist/admin/config.yml b/dist/admin/config.yml deleted file mode 100644 index ccd10e7..0000000 --- a/dist/admin/config.yml +++ /dev/null @@ -1,35 +0,0 @@ -backend: - name: github - branch: main - publish_mode: editorial_workflow - repo: one-aalam/astro-ink # change this to your repo - site_domain: astro-ink.vercel.app # change this to your domain - base_url: https://astro-ink.vercel.app # change this to your prod URL - auth_scope: repo - auth_endpoint: oauth - display_url: https://astro-ink.vercel.app - logo_url: https://astro-ink.vercel.app/assets/logo.svg - commit_messages: - create: 'Create {{collection}} “{{slug}}”' - update: 'Update {{collection}} “{{slug}}”' - delete: 'Delete {{collection}} “{{slug}}”' - uploadMedia: '[skip ci] Upload “{{path}}”' - deleteMedia: '[skip ci] Delete “{{path}}”' - -media_folder: 'public/images/uploads' # Folder where user uploaded files should go -public_folder: '/images/uploads' - -collections: # A list of collections the CMS should be able to edit - - name: 'post' # Used in routes, ie.: /admin/collections/:slug/edit - label: 'Post' # Used in the UI, ie.: "New Post" - folder: 'src/content/all' # The path to the folder where the documents are stored - create: true # Allow users to create new documents in this collection - fields: # The fields each document in this collection have - - {label: "Layout", name: "layout", widget: "hidden", default: "$/layouts/post.astro"} - - { label: 'Title', name: 'title', widget: 'string' } - - { label: 'Description', name: 'description', widget: 'text' } - - { label: 'Body', name: 'body', widget: 'markdown' } - - { label: 'Tags', name: 'tags', widget: 'list' } - - { label: 'Author', name: 'author', widget: 'string' } - - { label: 'Author Twitter Handle', name: 'authorTwitter', widget: 'string' } - - { label: 'Publish Date', name: 'date', widget: 'datetime' } diff --git a/dist/all/2/index.html b/dist/all/2/index.html deleted file mode 100644 index f1b8f50..0000000 --- a/dist/all/2/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | All Posts -

ServerlessHorrors

Stories you never want to feel on your own skin

14 Jan 2023

$620.123

My sitemap.txt used hundreds of GB/hours apparently...

27 Mar 2020

$72,000.999

We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...


\ No newline at end of file diff --git a/dist/all/aws-103/index.html b/dist/all/aws-103/index.html deleted file mode 100644 index 4c11ff1..0000000 --- a/dist/all/aws-103/index.html +++ /dev/null @@ -1,68 +0,0 @@ - ServerlessHorrors | $103.26 -

ServerlessHorrors

Stories you never want to feel on your own skin

$103.26

Andras Bacsai's avatar
$103.26

-

Original post

-

Conclusion: Refunded, partially. Always check what is included in the free tier and what is not.

-
-

tldr: A user is billed on AWS free tier because he used Amazon Postgresql (not included in free tier) and not Postgresql (included in free tier) and charged without any notification that this service is paid! This is bad.


\ No newline at end of file diff --git a/dist/all/aws-13k/index.html b/dist/all/aws-13k/index.html deleted file mode 100644 index 9b494ac..0000000 --- a/dist/all/aws-13k/index.html +++ /dev/null @@ -1,68 +0,0 @@ - ServerlessHorrors | $1,300.69 -

ServerlessHorrors

Stories you never want to feel on your own skin

$1,300.69

Andras Bacsai's avatar
$1,300.69

-

Original post

-

Conclusion: Never let your empty, private S3 bucket alone.

-
-

tldr: AWS S3 charges for unauthorized incoming requests, so anyone who knows your bucket name, could ddos you and make your bill go brrrr (huge)!


\ No newline at end of file diff --git a/dist/all/cloudflare-120k/index.html b/dist/all/cloudflare-120k/index.html deleted file mode 100644 index 9bfa560..0000000 --- a/dist/all/cloudflare-120k/index.html +++ /dev/null @@ -1,68 +0,0 @@ - ServerlessHorrors | $120,000.420 -

ServerlessHorrors

Stories you never want to feel on your own skin

$120,000.420

Andras Bacsai's avatar
$120,000.420

-

Original post

-

Conclusion: They migrated to Fastly, bye-bye Cloudflare.

-
-

tldr: Cloudflare contacted them and had several sales calls. They want them to pay 120k/year for no reason. When they switched to Fastly, Cloudflare deactivated their account / DNS records causing huge downtime in their core business, sleepless nights migrating away from CF, irreparable loss in customer trust and weeks of ongoing downtime in their internal systems.


\ No newline at end of file diff --git a/dist/all/firebase-cloudrun-72k/index.html b/dist/all/firebase-cloudrun-72k/index.html deleted file mode 100644 index 838b716..0000000 --- a/dist/all/firebase-cloudrun-72k/index.html +++ /dev/null @@ -1,70 +0,0 @@ - ServerlessHorrors | $72,000.999 -

ServerlessHorrors

Stories you never want to feel on your own skin

$72,000.999

Andras Bacsai's avatar
$72,000.999

-

Original posts:

-

1, -2

-

Conclusion: Google let go of their bill as a one-time gesture.

-
-

tldr: Infinite, exponential recursion without a break in their code. They used Google Cloud Run (with a budget of $100 per month) and Firebase (free plan). Google automatically upgraded the Firebase free plan to pay-as-you-go because Cloud Run decided to do so (haha). Google Billing, which cuts off the project if the budget/limit is reached, had a one-day delay (Firebase Dashboard as well)!


\ No newline at end of file diff --git a/dist/all/index.html b/dist/all/index.html deleted file mode 100644 index b816a7f..0000000 --- a/dist/all/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | All Posts -

ServerlessHorrors

Stories you never want to feel on your own skin

1 Sep 2024

$383.69

Woke up to an almost $400 bill for my documentation site...

25 Jun 2024

$103.26

Why $103 is a horror story? Well, imagine that you are on a free tier...

26 May 2024

$120,000.420

Cloudflare took down our website after trying to force us to pay 120k$ within 24h...

29 Apr 2024

$1,300.69

Imagine you create an empty, private AWS S3 bucket in a region of your preference...

10 Mar 2024

$11,000.69

Sent $11k worth of emails during DoS attack, then lost my database...

27 Feb 2024

$104,500.123

So I received an email from Netlify last weekend saying that I have a $104,500.00 bill overdue...

13 Feb 2024

$23,000.420

What is happening?! Someone spammed EchoFox and spiked my Vercel bill to $23k and caused 56k+ accounts and trials...

5 Apr 2023

$3,000.69

Attention Vercel users. Be careful what you test or deploy to Vercel. I decided to try out...


\ No newline at end of file diff --git a/dist/all/mailgun-11k/index.html b/dist/all/mailgun-11k/index.html deleted file mode 100644 index fbc9a33..0000000 --- a/dist/all/mailgun-11k/index.html +++ /dev/null @@ -1,68 +0,0 @@ - ServerlessHorrors | $11,000.69 -

ServerlessHorrors

Stories you never want to feel on your own skin

$11,000.69

Andras Bacsai's avatar
$11,000.69

-

Original post

-

Conclusion: Mailgun payed the final $1500 bill.

-
-

tldr: Forgot to set custom sending limits on Mailgun’s flexible plan, and luckily Gmail rejected 87% of the emails. You do not need to pay for rejected emails at Mailgun!


\ No newline at end of file diff --git a/dist/all/mintlify-400/index.html b/dist/all/mintlify-400/index.html deleted file mode 100644 index 6bc66b7..0000000 --- a/dist/all/mintlify-400/index.html +++ /dev/null @@ -1,84 +0,0 @@ - ServerlessHorrors | $383.69 -

ServerlessHorrors

Stories you never want to feel on your own skin

$383.69

Andras Bacsai's avatar
$383.69

-

Conclusion: Mintlify refunded the payment. I moved the docs to a self-hosted solution.

-
-

tldr: Mintlify has a feature what you can use to ask anything about the docs from an AI companion. This feature costs you money, and you cannot turn it off.

-

Always check parts of a service that you cannot turn off and it involves features that are based on usage.

-

This story is about me. Yes, me, who owns this site. haha

-

Mintlify is great. This post is not against them or their product. I just would like to share this story so others could learn from it.

-

Mintlify sponsored Coolify a few months ago (because of this) to be on their Startup/Pro tier for a year. I said yes, because it was great for the community / users. The docs got improvements from a UI/UX point of view.

-

After a while, we realized that people REALLY use Coolify’s docs and it costs a lot _(1M views / month)

-

Why?

-

They have an AI feature that you could use to ask anything about the documentation. Sounds nice right? Yes it is, but from a cost point of view, it is risky.

-

What if your users asks a lot of questions? What if someone just wants to talk to the AI companion? What if someone would like to scam you?

-

After this realization, we agreed to disable this feature for now - they disabled it on their side, or not?!

-

Months went by, and one day, I woke up to a $400 bill. Woah. -(btw, this is plus to your monthly plan, which is $150/month)

-

Okay, it was billed by mistake, but still.

-

Who wants to woke up to a huge bill for their documentation site? Well, not me.

-

I reached out to Mintlify support, and they said they will refund me. (Thank you!)

-

But in the meantime, I migrated Coolify to a self-hosted solution from Astro on live-stream.

-

Conclusion

-

Always check parts of a service that you cannot turn off and it involves features that are based on usage.


\ No newline at end of file diff --git a/dist/all/netlify-104k/index.html b/dist/all/netlify-104k/index.html deleted file mode 100644 index 665637e..0000000 --- a/dist/all/netlify-104k/index.html +++ /dev/null @@ -1,90 +0,0 @@ - ServerlessHorrors | $104,500.123 -

ServerlessHorrors

Stories you never want to feel on your own skin

$104,500.123

Andras Bacsai's avatar
$104,500.123

-

Original post

-

Conclusion: Netlify CEO confirmed -> won’t be charge.

-
-

tldr: DDOS attack caused a spike in bandwidth usage ($104,500 / 4 days).

-

Quote from the victim:

-
-

So I received an email from Netlify last weekend saying that I have a $104,500.00 bill overdue. At first I thought this is a joke or some scam email but after checking my dashboard it seems like I am truly owing them 104K dollars:

-
-
-

That’s 190TB bandwidth in 4 days

-
-
-

So I was like 😅😅😅 and think okay maybe I got ddos attacked. Since Netlify charges 55$/100GB for the exceeding bandwidth, the peak day Feb 16 has 33385/55 * 100GB = 60.7TB bandwidth in a day. I mean, it’s not impossible but why attack a simple static site like mine? This site has been on Netlify for 4 years and is always okay with the free tier. The monthly bandwidth never exceeded even 10GB, and has only ~200 daily visitors.

-
-
-

I contacted their billing support and they responded me that they looked into it and the bandwidth came from some user agents, meaning it is a ddos attack. Then they say such cases happen and they usually charge their customer 20% on this. And since my amount is too large, they offer to discount to 5%, which means I still need to pay 5 thousand dollars.

-
-
-

This feels more like a scam to me. Why do serverless platforms like Netlify and Vercel not have ddos protection, or at least a spend limit? They should have alerted me if the spending skyrocketed. I checked my inbox and spam folder and found nothing. The only email is “Extra usage package purchased for bandwidth”. It feels like they deliberately not support these features so that they can cash grab in situations like this.

-
-
-

The ddos attack was focused on a file on my site. Yes it’s partly my fault to put a 3.44MB size sound file on my site rather than using a third-party platform like SoundCloud. But still this doesn’t invalidate the point of having protection against such attacks, and limit the spending.

-
-
-

I haven’t paid that $5k yet and decided to post here to hear what others think first. And yes I have migrated my site to Cloudflare. Learned my lesson and will never use Netlify (or even Vercel) again.

-

\ No newline at end of file diff --git a/dist/all/vercel-23k/index.html b/dist/all/vercel-23k/index.html deleted file mode 100644 index 8de63cb..0000000 --- a/dist/all/vercel-23k/index.html +++ /dev/null @@ -1,68 +0,0 @@ - ServerlessHorrors | $23,000.420 -

ServerlessHorrors

Stories you never want to feel on your own skin

$23,000.420

Andras Bacsai's avatar
$23,000.420

-

Original post

-

Conclusion: Vercel CEO confirmed -> won’t be charge.

-
-

tldr: hacker created 500k accounts on next-auth, created 500k stripe trials, which triggered 500k webhooks to the Vercel site.


\ No newline at end of file diff --git a/dist/all/vercel-3k/index.html b/dist/all/vercel-3k/index.html deleted file mode 100644 index a8d2deb..0000000 --- a/dist/all/vercel-3k/index.html +++ /dev/null @@ -1,68 +0,0 @@ - ServerlessHorrors | $3,000.69 -

ServerlessHorrors

Stories you never want to feel on your own skin

$3,000.69

Andras Bacsai's avatar
$3,000.69

-

Original post

-

Conclusion: Vercel CEO confirmed -> won’t be charge.

-
-

tldr: Error in the code caused uncaught exception which caused subsequent requests to fail and retry, which caused a spike in bandwidth usage ($500 / hour).


\ No newline at end of file diff --git a/dist/all/vercel-620/index.html b/dist/all/vercel-620/index.html deleted file mode 100644 index 31bc480..0000000 --- a/dist/all/vercel-620/index.html +++ /dev/null @@ -1,69 +0,0 @@ - ServerlessHorrors | $620.123 -

ServerlessHorrors

Stories you never want to feel on your own skin

$620.123

Andras Bacsai's avatar
$620.123

-

Original post

-

Conclusion: Vercel Support Team confirmed -> won’t be charge.

-
-

tldr: Sitemap.txt (1.5Kb!) requested more than 378.000 times, caused thousands of GB/hours of bandwidth usage.

-

$620 does not sounds a lot, but for a free & open source project, built by a single person, it’s a lot.


\ No newline at end of file diff --git a/dist/android-chrome-192x192.png b/dist/android-chrome-192x192.png deleted file mode 100644 index 9a92e68..0000000 Binary files a/dist/android-chrome-192x192.png and /dev/null differ diff --git a/dist/android-chrome-512x512.png b/dist/android-chrome-512x512.png deleted file mode 100644 index 894f22f..0000000 Binary files a/dist/android-chrome-512x512.png and /dev/null differ diff --git a/dist/apple-touch-icon.png b/dist/apple-touch-icon.png deleted file mode 100644 index 9a92e68..0000000 Binary files a/dist/apple-touch-icon.png and /dev/null differ diff --git a/dist/assets/aws-103.jpg b/dist/assets/aws-103.jpg deleted file mode 100644 index 3ab9183..0000000 Binary files a/dist/assets/aws-103.jpg and /dev/null differ diff --git a/dist/assets/logo.png b/dist/assets/logo.png deleted file mode 100644 index 9a92e68..0000000 Binary files a/dist/assets/logo.png and /dev/null differ diff --git a/dist/assets/yay.svg b/dist/assets/yay.svg deleted file mode 100644 index c12651b..0000000 --- a/dist/assets/yay.svg +++ /dev/null @@ -1,925 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/dist/browserconfig.xml b/dist/browserconfig.xml deleted file mode 100644 index b3930d0..0000000 --- a/dist/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #da532c - - - diff --git a/dist/drafts/index.html b/dist/drafts/index.html deleted file mode 100644 index 37b995e..0000000 --- a/dist/drafts/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Drafts -

ServerlessHorrors

Stories you never want to feel on your own skin

Looks like you have landed on a unpublished posts page. Please find all the published posts here!


\ No newline at end of file diff --git a/dist/favicon-16x16.png b/dist/favicon-16x16.png deleted file mode 100644 index 9a92e68..0000000 Binary files a/dist/favicon-16x16.png and /dev/null differ diff --git a/dist/favicon-32x32.png b/dist/favicon-32x32.png deleted file mode 100644 index 9a92e68..0000000 Binary files a/dist/favicon-32x32.png and /dev/null differ diff --git a/dist/favicon.png b/dist/favicon.png deleted file mode 100644 index 9a92e68..0000000 Binary files a/dist/favicon.png and /dev/null differ diff --git a/dist/icon-192x192.png b/dist/icon-192x192.png deleted file mode 100644 index 9a92e68..0000000 Binary files a/dist/icon-192x192.png and /dev/null differ diff --git a/dist/icon-256x256.png b/dist/icon-256x256.png deleted file mode 100644 index f714362..0000000 Binary files a/dist/icon-256x256.png and /dev/null differ diff --git a/dist/icon-384x384.png b/dist/icon-384x384.png deleted file mode 100644 index 8d432d0..0000000 Binary files a/dist/icon-384x384.png and /dev/null differ diff --git a/dist/icon-512x512.png b/dist/icon-512x512.png deleted file mode 100644 index 894f22f..0000000 Binary files a/dist/icon-512x512.png and /dev/null differ diff --git a/dist/index.html b/dist/index.html deleted file mode 100644 index dcc5425..0000000 --- a/dist/index.html +++ /dev/null @@ -1,77 +0,0 @@ - ServerlessHorrors | Home -

ServerlessHorrors

Stories you never want to feel on your own skin

ServerlessHorrors is a simple blog where you can read all the horror stories of serverless. Yikes!

-
-

Made by Andras who is working on an open-source & self-hostable Heroku / Netlify / Vercel alternative called Coolify.

-
-

Have a story?

-

Posts
1 Sep 2024

$383.69

Woke up to an almost $400 bill for my documentation site...

25 Jun 2024

$103.26

Why $103 is a horror story? Well, imagine that you are on a free tier...

26 May 2024

$120,000.420

Cloudflare took down our website after trying to force us to pay 120k$ within 24h...

29 Apr 2024

$1,300.69

Imagine you create an empty, private AWS S3 bucket in a region of your preference...

10 Mar 2024

$11,000.69

Sent $11k worth of emails during DoS attack, then lost my database...

27 Feb 2024

$104,500.123

So I received an email from Netlify last weekend saying that I have a $104,500.00 bill overdue...

13 Feb 2024

$23,000.420

What is happening?! Someone spammed EchoFox and spiked my Vercel bill to $23k and caused 56k+ accounts and trials...

5 Apr 2023

$3,000.69

Attention Vercel users. Be careful what you test or deploy to Vercel. I decided to try out...

14 Jan 2023

$620.123

My sitemap.txt used hundreds of GB/hours apparently...

27 Mar 2020

$72,000.999

We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...


\ No newline at end of file diff --git a/dist/mstile-150x150.png b/dist/mstile-150x150.png deleted file mode 100644 index 9a92e68..0000000 Binary files a/dist/mstile-150x150.png and /dev/null differ diff --git a/dist/robots.txt b/dist/robots.txt deleted file mode 100644 index 0f27689..0000000 --- a/dist/robots.txt +++ /dev/null @@ -1,4 +0,0 @@ -User-agent: * -Allow: / - -Sitemap: https://serverlesshorrors.com/sitemap-index.xml \ No newline at end of file diff --git a/dist/rss.xml b/dist/rss.xml deleted file mode 100644 index eb552ab..0000000 --- a/dist/rss.xml +++ /dev/null @@ -1 +0,0 @@ -ServerlessHorrors | BlogStories you never want to feel on your own skinhttps://serverlesshorrors.com/en-us$383.69https://serverlesshorrors.com/all/mintlify-400/https://serverlesshorrors.com/all/mintlify-400/Woke up to an almost $400 bill for my documentation site...Sun, 01 Sep 2024 12:34:56 GMT$103.26https://serverlesshorrors.com/all/aws-103/https://serverlesshorrors.com/all/aws-103/Why $103 is a horror story? Well, imagine that you are on a free tier...Tue, 25 Jun 2024 12:34:56 GMT$120,000.420https://serverlesshorrors.com/all/cloudflare-120k/https://serverlesshorrors.com/all/cloudflare-120k/Cloudflare took down our website after trying to force us to pay 120k$ within 24h...Sun, 26 May 2024 12:34:56 GMT$1,300.69https://serverlesshorrors.com/all/aws-13k/https://serverlesshorrors.com/all/aws-13k/Imagine you create an empty, private AWS S3 bucket in a region of your preference...Mon, 29 Apr 2024 12:34:56 GMT$11,000.69https://serverlesshorrors.com/all/mailgun-11k/https://serverlesshorrors.com/all/mailgun-11k/Sent $11k worth of emails during DoS attack, then lost my database...Sun, 10 Mar 2024 12:34:56 GMT$104,500.123https://serverlesshorrors.com/all/netlify-104k/https://serverlesshorrors.com/all/netlify-104k/So I received an email from Netlify last weekend saying that I have a $104,500.00 bill overdue...Tue, 27 Feb 2024 12:34:56 GMT$23,000.420https://serverlesshorrors.com/all/vercel-23k/https://serverlesshorrors.com/all/vercel-23k/What is happening?! Someone spammed EchoFox and spiked my Vercel bill to $23k and caused 56k+ accounts and trials...Tue, 13 Feb 2024 12:34:56 GMT$3,000.69https://serverlesshorrors.com/all/vercel-3k/https://serverlesshorrors.com/all/vercel-3k/Attention Vercel users. Be careful what you test or deploy to Vercel. I decided to try out...Wed, 05 Apr 2023 12:34:56 GMT$620.123https://serverlesshorrors.com/all/vercel-620/https://serverlesshorrors.com/all/vercel-620/My sitemap.txt used hundreds of GB/hours apparently...Sat, 14 Jan 2023 12:34:56 GMT$72,000.999https://serverlesshorrors.com/all/firebase-cloudrun-72k/https://serverlesshorrors.com/all/firebase-cloudrun-72k/We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...Fri, 27 Mar 2020 12:34:56 GMT \ No newline at end of file diff --git a/dist/search-index.json b/dist/search-index.json deleted file mode 100644 index f1187e0..0000000 --- a/dist/search-index.json +++ /dev/null @@ -1 +0,0 @@ -[{"slug":"aws-1.3k","category":"all","title":"$1,300.69","description":"Imagine you create an empty, private AWS S3 bucket in a region of your preference...","tags":["aws","s3","security","ddos"],"body":"\n--- \n\n[Original post](https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1)\n\nConclusion: Never let your empty, private S3 bucket alone.\n\n--- \n\n__tldr: AWS S3 charges for unauthorized incoming requests, so anyone who knows your bucket name, could ddos you and make your bill go brrrr (huge)!__\n"},{"slug":"aws-103","category":"all","title":"$103.26","description":"Why $103 is a horror story? Well, imagine that you are on a free tier...","tags":["aws","dark-pattern","free-tier"],"body":"\n--- \n\n[Original post](https://lapcatsoftware.com/articles/2024/6/7.html)\n\nConclusion: Refunded, partially. Always check what is included in the free tier and what is not.\n\n--- \n\n__tldr: A user is billed on AWS free tier because he used Amazon Postgresql (not included in free tier) and not Postgresql (included in free tier) and charged without any notification that this service is paid! This is bad.__\n"},{"slug":"cloudflare-120k","category":"all","title":"$120,000.420","description":"Cloudflare took down our website after trying to force us to pay 120k$ within 24h...","tags":["cloudflare","bandwidth"],"body":"\n--- \n\n[Original post](https://robindev.substack.com/p/cloudflare-took-down-our-website)\n\nConclusion: They migrated to Fastly, bye-bye Cloudflare.\n\n--- \n\n__tldr: Cloudflare contacted them and had several sales calls. They want them to pay 120k/year for no reason. When they switched to Fastly, Cloudflare deactivated their account / DNS records causing huge downtime in their core business, sleepless nights migrating away from CF, irreparable loss in customer trust and weeks of ongoing downtime in their internal systems.__\n"},{"slug":"firebase-cloudrun-72k","category":"all","title":"$72,000.999","description":"We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...","tags":["google","firebase","cloudrun","wrong-implementation","recursion"],"body":"\n--- \n\nOriginal posts: \n\n[1](https://dev-blog.tomilkieway.com/72k-1/), \n[2](https://dev-blog.tomilkieway.com/72k-2/)\n\nConclusion: Google let go of their bill as a one-time gesture.\n\n--- \n\n__tldr: Infinite, exponential recursion without a break in their code. They used Google Cloud Run (with a budget of $100 per month) and Firebase (free plan). Google automatically upgraded the Firebase free plan to pay-as-you-go because Cloud Run decided to do so (haha). Google Billing, which cuts off the project if the budget/limit is reached, had a one-day delay (Firebase Dashboard as well)!__\n"},{"slug":"mailgun-11k","category":"all","title":"$11,000.69","description":"Sent $11k worth of emails during DoS attack, then lost my database...","tags":["ddos","mailgun"],"body":"\n--- \n\n[Original post](https://medium.com/@willteam35/sent-11k-worth-of-emails-during-dos-attack-then-lost-my-database-1aa225301a77)\n\nConclusion: Mailgun payed the final $1500 bill.\n\n--- \n\n__tldr: Forgot to set custom sending limits on Mailgun's flexible plan, and luckily Gmail rejected 87% of the emails. You do not need to pay for rejected emails at Mailgun!__\n"},{"slug":"mintlify-400","category":"all","title":"$383.69","description":"Woke up to an almost $400 bill for my documentation site...","tags":["mintlify","ai","documentation"],"body":"\n---\n\n\nConclusion: Mintlify refunded the payment. I moved the docs to a self-hosted solution.\n\n---\n\n__tldr: Mintlify has a feature what you can use to ask anything about the docs from an AI companion. This feature costs you money, and you cannot turn it off.__\n\n__Always check parts of a service that you cannot turn off and it involves features that are based on usage.__\n\n\n## This story is about me. Yes, [me](https://x.com/heyandras), who owns this site. haha\n\nMintlify is great. This post is not against them or their product. I just would like to share this story so others could learn from it.\n\nMintlify sponsored [Coolify](https://coolify.io/ref=serverlesshorrors.com) a few months ago (because of [this](https://x.com/dobroslav_dev/status/1765825569281757289?s=46)) to be on their Startup/Pro tier for a year. I said yes, because it was great for the community / users. The docs got improvements from a UI/UX point of view.\n\nAfter a while, we realized that people REALLY use Coolify's docs and it costs a lot __(1M views / month)_\n\n## Why?\n\nThey have an AI feature that you could use to ask anything about the documentation. Sounds nice right? Yes it is, but from a cost point of view, it is risky.\n\n\nWhat if your users asks a lot of questions? What if someone just wants to talk to the AI companion? What if someone would like to scam you?\n\n\nAfter this realization, we agreed to disable this feature for now - they disabled it on their side, or not?!\n\nMonths went by, and one day, I woke up to a $400 bill. Woah.\n(btw, this is plus to your monthly plan, which is $150/month)\n\n## Okay, it was billed by mistake, but still.\n\nWho wants to woke up to a huge bill for their documentation site? Well, not me.\n\n\nI reached out to Mintlify support, and they said they will refund me. (Thank you!)\n\nBut in the meantime, I migrated Coolify to a self-hosted solution from [Astro](https://starlight.astro.build/) on [live-stream](https://heyandras.dev/live).\n\n## Conclusion\n\nAlways check parts of a service that you cannot turn off and it involves features that are based on usage.\n\n\n"},{"slug":"netlify-104k","category":"all","title":"$104,500.123","description":"So I received an email from Netlify last weekend saying that I have a $104,500.00 bill overdue...","tags":["netlify","bandwidth","ddos"],"body":"\n--- \n\n[Original post](https://old.reddit.com/r/webdev/comments/1b14bty/netlify_just_sent_me_a_104k_bill_for_a_simple/) \n\nConclusion: Netlify CEO confirmed -> won't be charge.\n\n--- \n\n__tldr: DDOS attack caused a spike in bandwidth usage ($104,500 / 4 days).__\n\nQuote from the victim:\n\n> So I received an email from Netlify last weekend saying that I have a $104,500.00 bill overdue. At first I thought this is a joke or some scam email but after checking my dashboard it seems like I am truly owing them 104K dollars:\n\n> That's 190TB bandwidth in 4 days\n\n> So I was like 😅😅😅 and think okay maybe I got ddos attacked. Since Netlify charges 55$/100GB for the exceeding bandwidth, the peak day Feb 16 has 33385/55 * 100GB = 60.7TB bandwidth in a day. I mean, it's not impossible but why attack a simple static site like mine? This site has been on Netlify for 4 years and is always okay with the free tier. The monthly bandwidth never exceeded even 10GB, and has only ~200 daily visitors.\n\n> I contacted their billing support and they responded me that they looked into it and the bandwidth came from some user agents, meaning it is a ddos attack. Then they say such cases happen and they usually charge their customer 20% on this. And since my amount is too large, they offer to discount to 5%, which means I still need to pay 5 thousand dollars.\n\n> This feels more like a scam to me. Why do serverless platforms like Netlify and Vercel not have ddos protection, or at least a spend limit? They should have alerted me if the spending skyrocketed. I checked my inbox and spam folder and found nothing. The only email is \"Extra usage package purchased for bandwidth\". It feels like they deliberately not support these features so that they can cash grab in situations like this.\n\n> The ddos attack was focused on a file on my site. Yes it's partly my fault to put a 3.44MB size sound file on my site rather than using a third-party platform like SoundCloud. But still this doesn't invalidate the point of having protection against such attacks, and limit the spending.\n\n> I haven't paid that $5k yet and decided to post here to hear what others think first. And yes I have migrated my site to Cloudflare. Learned my lesson and will never use Netlify (or even Vercel) again."},{"slug":"vercel-23k","category":"all","title":"$23,000.420","description":"What is happening?! Someone spammed EchoFox and spiked my Vercel bill to $23k and caused 56k+ accounts and trials...","tags":["vercel","bandwidth","ddos"],"body":"\n--- \n\n[Original post](https://twitter.com/michaelaubry/status/1757539928534315322)\n\nConclusion: Vercel CEO confirmed -> won't be charge.\n\n--- \n\ntldr: hacker created 500k accounts on next-auth, created 500k stripe trials, which triggered 500k webhooks to the Vercel site."},{"slug":"vercel-3k","category":"all","title":"$3,000.69","description":"Attention Vercel users. Be careful what you test or deploy to Vercel. I decided to try out...","tags":["vercel","bandwidth","wrong-implementation"],"body":"\n--- \n\n[Original post](https://twitter.com/shoeboxdnb/status/1643639119824801793)\n\nConclusion: Vercel CEO confirmed -> won't be charge.\n\n--- \n\ntldr: Error in the code caused uncaught exception which caused subsequent requests to fail and retry, which caused a spike in bandwidth usage ($500 / hour).\n"},{"slug":"vercel-620","category":"all","title":"$620.123","description":"My sitemap.txt used hundreds of GB/hours apparently...","tags":["vercel","bandwidth"],"body":"\n--- \n\n[Original post](https://twitter.com/bartveneman/status/1614224883948609537)\n\nConclusion: Vercel Support Team confirmed -> won't be charge.\n\n--- \n\n__tldr: Sitemap.txt (1.5Kb!) requested more than 378.000 times, caused thousands of GB/hours of bandwidth usage.__\n\n$620 does not sounds a lot, but for a free & open source project, built by a single person, it's a lot.\n"}] \ No newline at end of file diff --git a/dist/site.webmanifest b/dist/site.webmanifest deleted file mode 100644 index 94b0075..0000000 --- a/dist/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "ServerlessHorrors", - "short_name": "ServerlessHorrors", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/dist/sitemap-0.xml b/dist/sitemap-0.xml deleted file mode 100644 index 4d4e2d0..0000000 --- a/dist/sitemap-0.xml +++ /dev/null @@ -1 +0,0 @@ -https://serverlesshorrors.com/https://serverlesshorrors.com/all/https://serverlesshorrors.com/all/2/https://serverlesshorrors.com/all/aws-13k/https://serverlesshorrors.com/all/aws-103/https://serverlesshorrors.com/all/cloudflare-120k/https://serverlesshorrors.com/all/firebase-cloudrun-72k/https://serverlesshorrors.com/all/mailgun-11k/https://serverlesshorrors.com/all/mintlify-400/https://serverlesshorrors.com/all/netlify-104k/https://serverlesshorrors.com/all/vercel-3k/https://serverlesshorrors.com/all/vercel-23k/https://serverlesshorrors.com/all/vercel-620/https://serverlesshorrors.com/drafts/https://serverlesshorrors.com/tags/https://serverlesshorrors.com/tags/ai/https://serverlesshorrors.com/tags/ai/1/https://serverlesshorrors.com/tags/aws/https://serverlesshorrors.com/tags/aws/1/https://serverlesshorrors.com/tags/bandwidth/https://serverlesshorrors.com/tags/bandwidth/1/https://serverlesshorrors.com/tags/cloudflare/https://serverlesshorrors.com/tags/cloudflare/1/https://serverlesshorrors.com/tags/cloudrun/https://serverlesshorrors.com/tags/cloudrun/1/https://serverlesshorrors.com/tags/dark-pattern/https://serverlesshorrors.com/tags/dark-pattern/1/https://serverlesshorrors.com/tags/ddos/https://serverlesshorrors.com/tags/ddos/1/https://serverlesshorrors.com/tags/documentation/https://serverlesshorrors.com/tags/documentation/1/https://serverlesshorrors.com/tags/firebase/https://serverlesshorrors.com/tags/firebase/1/https://serverlesshorrors.com/tags/free-tier/https://serverlesshorrors.com/tags/free-tier/1/https://serverlesshorrors.com/tags/google/https://serverlesshorrors.com/tags/google/1/https://serverlesshorrors.com/tags/mailgun/https://serverlesshorrors.com/tags/mailgun/1/https://serverlesshorrors.com/tags/mintlify/https://serverlesshorrors.com/tags/mintlify/1/https://serverlesshorrors.com/tags/netlify/https://serverlesshorrors.com/tags/netlify/1/https://serverlesshorrors.com/tags/recursion/https://serverlesshorrors.com/tags/recursion/1/https://serverlesshorrors.com/tags/s3/https://serverlesshorrors.com/tags/s3/1/https://serverlesshorrors.com/tags/security/https://serverlesshorrors.com/tags/security/1/https://serverlesshorrors.com/tags/vercel/https://serverlesshorrors.com/tags/vercel/1/https://serverlesshorrors.com/tags/wrong-implementation/https://serverlesshorrors.com/tags/wrong-implementation/1/ \ No newline at end of file diff --git a/dist/sitemap-index.xml b/dist/sitemap-index.xml deleted file mode 100644 index 88e1b2b..0000000 --- a/dist/sitemap-index.xml +++ /dev/null @@ -1 +0,0 @@ -https://serverlesshorrors.com/sitemap-0.xml \ No newline at end of file diff --git a/dist/tags/ai/1/index.html b/dist/tags/ai/1/index.html deleted file mode 100644 index 44d21ff..0000000 --- a/dist/tags/ai/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: ai -

ServerlessHorrors

Stories you never want to feel on your own skin

1 Sep 2024

$383.69

Woke up to an almost $400 bill for my documentation site...


\ No newline at end of file diff --git a/dist/tags/ai/index.html b/dist/tags/ai/index.html deleted file mode 100644 index 68ab223..0000000 --- a/dist/tags/ai/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: ai -

ServerlessHorrors

Stories you never want to feel on your own skin

1 Sep 2024

$383.69

Woke up to an almost $400 bill for my documentation site...


\ No newline at end of file diff --git a/dist/tags/aws/1/index.html b/dist/tags/aws/1/index.html deleted file mode 100644 index 9c5acf2..0000000 --- a/dist/tags/aws/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: aws -

ServerlessHorrors

Stories you never want to feel on your own skin

25 Jun 2024

$103.26

Why $103 is a horror story? Well, imagine that you are on a free tier...

29 Apr 2024

$1,300.69

Imagine you create an empty, private AWS S3 bucket in a region of your preference...


\ No newline at end of file diff --git a/dist/tags/aws/index.html b/dist/tags/aws/index.html deleted file mode 100644 index 37528f2..0000000 --- a/dist/tags/aws/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: aws -

ServerlessHorrors

Stories you never want to feel on your own skin

25 Jun 2024

$103.26

Why $103 is a horror story? Well, imagine that you are on a free tier...

29 Apr 2024

$1,300.69

Imagine you create an empty, private AWS S3 bucket in a region of your preference...


\ No newline at end of file diff --git a/dist/tags/bandwidth/1/index.html b/dist/tags/bandwidth/1/index.html deleted file mode 100644 index d7065bb..0000000 --- a/dist/tags/bandwidth/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: bandwidth -

ServerlessHorrors

Stories you never want to feel on your own skin

26 May 2024

$120,000.420

Cloudflare took down our website after trying to force us to pay 120k$ within 24h...

27 Feb 2024

$104,500.123

So I received an email from Netlify last weekend saying that I have a $104,500.00 bill overdue...

13 Feb 2024

$23,000.420

What is happening?! Someone spammed EchoFox and spiked my Vercel bill to $23k and caused 56k+ accounts and trials...

5 Apr 2023

$3,000.69

Attention Vercel users. Be careful what you test or deploy to Vercel. I decided to try out...

14 Jan 2023

$620.123

My sitemap.txt used hundreds of GB/hours apparently...


\ No newline at end of file diff --git a/dist/tags/bandwidth/index.html b/dist/tags/bandwidth/index.html deleted file mode 100644 index 2c765ab..0000000 --- a/dist/tags/bandwidth/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: bandwidth -

ServerlessHorrors

Stories you never want to feel on your own skin

26 May 2024

$120,000.420

Cloudflare took down our website after trying to force us to pay 120k$ within 24h...

27 Feb 2024

$104,500.123

So I received an email from Netlify last weekend saying that I have a $104,500.00 bill overdue...

13 Feb 2024

$23,000.420

What is happening?! Someone spammed EchoFox and spiked my Vercel bill to $23k and caused 56k+ accounts and trials...

5 Apr 2023

$3,000.69

Attention Vercel users. Be careful what you test or deploy to Vercel. I decided to try out...

14 Jan 2023

$620.123

My sitemap.txt used hundreds of GB/hours apparently...


\ No newline at end of file diff --git a/dist/tags/cloudflare/1/index.html b/dist/tags/cloudflare/1/index.html deleted file mode 100644 index 8c45ab1..0000000 --- a/dist/tags/cloudflare/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: cloudflare -

ServerlessHorrors

Stories you never want to feel on your own skin

26 May 2024

$120,000.420

Cloudflare took down our website after trying to force us to pay 120k$ within 24h...


\ No newline at end of file diff --git a/dist/tags/cloudflare/index.html b/dist/tags/cloudflare/index.html deleted file mode 100644 index ef24043..0000000 --- a/dist/tags/cloudflare/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: cloudflare -

ServerlessHorrors

Stories you never want to feel on your own skin

26 May 2024

$120,000.420

Cloudflare took down our website after trying to force us to pay 120k$ within 24h...


\ No newline at end of file diff --git a/dist/tags/cloudrun/1/index.html b/dist/tags/cloudrun/1/index.html deleted file mode 100644 index debc156..0000000 --- a/dist/tags/cloudrun/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: cloudrun -

ServerlessHorrors

Stories you never want to feel on your own skin

27 Mar 2020

$72,000.999

We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...


\ No newline at end of file diff --git a/dist/tags/cloudrun/index.html b/dist/tags/cloudrun/index.html deleted file mode 100644 index dc9496d..0000000 --- a/dist/tags/cloudrun/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: cloudrun -

ServerlessHorrors

Stories you never want to feel on your own skin

27 Mar 2020

$72,000.999

We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...


\ No newline at end of file diff --git a/dist/tags/dark-pattern/1/index.html b/dist/tags/dark-pattern/1/index.html deleted file mode 100644 index 14cf463..0000000 --- a/dist/tags/dark-pattern/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: dark-pattern -

ServerlessHorrors

Stories you never want to feel on your own skin

25 Jun 2024

$103.26

Why $103 is a horror story? Well, imagine that you are on a free tier...


\ No newline at end of file diff --git a/dist/tags/dark-pattern/index.html b/dist/tags/dark-pattern/index.html deleted file mode 100644 index 6847d2f..0000000 --- a/dist/tags/dark-pattern/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: dark-pattern -

ServerlessHorrors

Stories you never want to feel on your own skin

25 Jun 2024

$103.26

Why $103 is a horror story? Well, imagine that you are on a free tier...


\ No newline at end of file diff --git a/dist/tags/ddos/1/index.html b/dist/tags/ddos/1/index.html deleted file mode 100644 index fa4315a..0000000 --- a/dist/tags/ddos/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: ddos -

ServerlessHorrors

Stories you never want to feel on your own skin

29 Apr 2024

$1,300.69

Imagine you create an empty, private AWS S3 bucket in a region of your preference...

10 Mar 2024

$11,000.69

Sent $11k worth of emails during DoS attack, then lost my database...

27 Feb 2024

$104,500.123

So I received an email from Netlify last weekend saying that I have a $104,500.00 bill overdue...

13 Feb 2024

$23,000.420

What is happening?! Someone spammed EchoFox and spiked my Vercel bill to $23k and caused 56k+ accounts and trials...


\ No newline at end of file diff --git a/dist/tags/ddos/index.html b/dist/tags/ddos/index.html deleted file mode 100644 index bf74774..0000000 --- a/dist/tags/ddos/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: ddos -

ServerlessHorrors

Stories you never want to feel on your own skin

29 Apr 2024

$1,300.69

Imagine you create an empty, private AWS S3 bucket in a region of your preference...

10 Mar 2024

$11,000.69

Sent $11k worth of emails during DoS attack, then lost my database...

27 Feb 2024

$104,500.123

So I received an email from Netlify last weekend saying that I have a $104,500.00 bill overdue...

13 Feb 2024

$23,000.420

What is happening?! Someone spammed EchoFox and spiked my Vercel bill to $23k and caused 56k+ accounts and trials...


\ No newline at end of file diff --git a/dist/tags/documentation/1/index.html b/dist/tags/documentation/1/index.html deleted file mode 100644 index 4267f6d..0000000 --- a/dist/tags/documentation/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: documentation -

ServerlessHorrors

Stories you never want to feel on your own skin

1 Sep 2024

$383.69

Woke up to an almost $400 bill for my documentation site...


\ No newline at end of file diff --git a/dist/tags/documentation/index.html b/dist/tags/documentation/index.html deleted file mode 100644 index 5e4c921..0000000 --- a/dist/tags/documentation/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: documentation -

ServerlessHorrors

Stories you never want to feel on your own skin

1 Sep 2024

$383.69

Woke up to an almost $400 bill for my documentation site...


\ No newline at end of file diff --git a/dist/tags/firebase/1/index.html b/dist/tags/firebase/1/index.html deleted file mode 100644 index ecd763b..0000000 --- a/dist/tags/firebase/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: firebase -

ServerlessHorrors

Stories you never want to feel on your own skin

27 Mar 2020

$72,000.999

We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...


\ No newline at end of file diff --git a/dist/tags/firebase/index.html b/dist/tags/firebase/index.html deleted file mode 100644 index 2819009..0000000 --- a/dist/tags/firebase/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: firebase -

ServerlessHorrors

Stories you never want to feel on your own skin

27 Mar 2020

$72,000.999

We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...


\ No newline at end of file diff --git a/dist/tags/free-tier/1/index.html b/dist/tags/free-tier/1/index.html deleted file mode 100644 index 42d4993..0000000 --- a/dist/tags/free-tier/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: free-tier -

ServerlessHorrors

Stories you never want to feel on your own skin

25 Jun 2024

$103.26

Why $103 is a horror story? Well, imagine that you are on a free tier...


\ No newline at end of file diff --git a/dist/tags/free-tier/index.html b/dist/tags/free-tier/index.html deleted file mode 100644 index 922e95a..0000000 --- a/dist/tags/free-tier/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: free-tier -

ServerlessHorrors

Stories you never want to feel on your own skin

25 Jun 2024

$103.26

Why $103 is a horror story? Well, imagine that you are on a free tier...


\ No newline at end of file diff --git a/dist/tags/google/1/index.html b/dist/tags/google/1/index.html deleted file mode 100644 index 45b9c64..0000000 --- a/dist/tags/google/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: google -

ServerlessHorrors

Stories you never want to feel on your own skin

27 Mar 2020

$72,000.999

We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...


\ No newline at end of file diff --git a/dist/tags/google/index.html b/dist/tags/google/index.html deleted file mode 100644 index 566ca08..0000000 --- a/dist/tags/google/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: google -

ServerlessHorrors

Stories you never want to feel on your own skin

27 Mar 2020

$72,000.999

We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...


\ No newline at end of file diff --git a/dist/tags/index.html b/dist/tags/index.html deleted file mode 100644 index 955cdd0..0000000 --- a/dist/tags/index.html +++ /dev/null @@ -1,559 +0,0 @@ - ServerlessHorrors | All Tags - -

ServerlessHorrors

Stories you never want to feel on your own skin


\ No newline at end of file diff --git a/dist/tags/mailgun/1/index.html b/dist/tags/mailgun/1/index.html deleted file mode 100644 index 10fd639..0000000 --- a/dist/tags/mailgun/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: mailgun -

ServerlessHorrors

Stories you never want to feel on your own skin

10 Mar 2024

$11,000.69

Sent $11k worth of emails during DoS attack, then lost my database...


\ No newline at end of file diff --git a/dist/tags/mailgun/index.html b/dist/tags/mailgun/index.html deleted file mode 100644 index ded50dd..0000000 --- a/dist/tags/mailgun/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: mailgun -

ServerlessHorrors

Stories you never want to feel on your own skin

10 Mar 2024

$11,000.69

Sent $11k worth of emails during DoS attack, then lost my database...


\ No newline at end of file diff --git a/dist/tags/mintlify/1/index.html b/dist/tags/mintlify/1/index.html deleted file mode 100644 index 6a0136d..0000000 --- a/dist/tags/mintlify/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: mintlify -

ServerlessHorrors

Stories you never want to feel on your own skin

1 Sep 2024

$383.69

Woke up to an almost $400 bill for my documentation site...


\ No newline at end of file diff --git a/dist/tags/mintlify/index.html b/dist/tags/mintlify/index.html deleted file mode 100644 index 08a6316..0000000 --- a/dist/tags/mintlify/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: mintlify -

ServerlessHorrors

Stories you never want to feel on your own skin

1 Sep 2024

$383.69

Woke up to an almost $400 bill for my documentation site...


\ No newline at end of file diff --git a/dist/tags/recursion/1/index.html b/dist/tags/recursion/1/index.html deleted file mode 100644 index 2c5cf5b..0000000 --- a/dist/tags/recursion/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: recursion -

ServerlessHorrors

Stories you never want to feel on your own skin

27 Mar 2020

$72,000.999

We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...


\ No newline at end of file diff --git a/dist/tags/recursion/index.html b/dist/tags/recursion/index.html deleted file mode 100644 index 7b214f6..0000000 --- a/dist/tags/recursion/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: recursion -

ServerlessHorrors

Stories you never want to feel on your own skin

27 Mar 2020

$72,000.999

We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...


\ No newline at end of file diff --git a/dist/tags/s3/1/index.html b/dist/tags/s3/1/index.html deleted file mode 100644 index 62fd134..0000000 --- a/dist/tags/s3/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: s3 -

ServerlessHorrors

Stories you never want to feel on your own skin

29 Apr 2024

$1,300.69

Imagine you create an empty, private AWS S3 bucket in a region of your preference...


\ No newline at end of file diff --git a/dist/tags/s3/index.html b/dist/tags/s3/index.html deleted file mode 100644 index 7710a36..0000000 --- a/dist/tags/s3/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: s3 -

ServerlessHorrors

Stories you never want to feel on your own skin

29 Apr 2024

$1,300.69

Imagine you create an empty, private AWS S3 bucket in a region of your preference...


\ No newline at end of file diff --git a/dist/tags/security/1/index.html b/dist/tags/security/1/index.html deleted file mode 100644 index d55cf49..0000000 --- a/dist/tags/security/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: security -

ServerlessHorrors

Stories you never want to feel on your own skin

29 Apr 2024

$1,300.69

Imagine you create an empty, private AWS S3 bucket in a region of your preference...


\ No newline at end of file diff --git a/dist/tags/security/index.html b/dist/tags/security/index.html deleted file mode 100644 index bbd1026..0000000 --- a/dist/tags/security/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: security -

ServerlessHorrors

Stories you never want to feel on your own skin

29 Apr 2024

$1,300.69

Imagine you create an empty, private AWS S3 bucket in a region of your preference...


\ No newline at end of file diff --git a/dist/tags/vercel/1/index.html b/dist/tags/vercel/1/index.html deleted file mode 100644 index 644e603..0000000 --- a/dist/tags/vercel/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: vercel -

ServerlessHorrors

Stories you never want to feel on your own skin

13 Feb 2024

$23,000.420

What is happening?! Someone spammed EchoFox and spiked my Vercel bill to $23k and caused 56k+ accounts and trials...

5 Apr 2023

$3,000.69

Attention Vercel users. Be careful what you test or deploy to Vercel. I decided to try out...

14 Jan 2023

$620.123

My sitemap.txt used hundreds of GB/hours apparently...


\ No newline at end of file diff --git a/dist/tags/vercel/index.html b/dist/tags/vercel/index.html deleted file mode 100644 index d85a9c9..0000000 --- a/dist/tags/vercel/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: vercel -

ServerlessHorrors

Stories you never want to feel on your own skin

13 Feb 2024

$23,000.420

What is happening?! Someone spammed EchoFox and spiked my Vercel bill to $23k and caused 56k+ accounts and trials...

5 Apr 2023

$3,000.69

Attention Vercel users. Be careful what you test or deploy to Vercel. I decided to try out...

14 Jan 2023

$620.123

My sitemap.txt used hundreds of GB/hours apparently...


\ No newline at end of file diff --git a/dist/tags/wrong-implementation/1/index.html b/dist/tags/wrong-implementation/1/index.html deleted file mode 100644 index 4724274..0000000 --- a/dist/tags/wrong-implementation/1/index.html +++ /dev/null @@ -1,65 +0,0 @@ - ServerlessHorrors | Posts by Tag: wrong-implementation -

ServerlessHorrors

Stories you never want to feel on your own skin

5 Apr 2023

$3,000.69

Attention Vercel users. Be careful what you test or deploy to Vercel. I decided to try out...

27 Mar 2020

$72,000.999

We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...


\ No newline at end of file diff --git a/dist/tags/wrong-implementation/index.html b/dist/tags/wrong-implementation/index.html deleted file mode 100644 index 77c410a..0000000 --- a/dist/tags/wrong-implementation/index.html +++ /dev/null @@ -1,64 +0,0 @@ - ServerlessHorrors | Posts by Tag: wrong-implementation -

ServerlessHorrors

Stories you never want to feel on your own skin

5 Apr 2023

$3,000.69

Attention Vercel users. Be careful what you test or deploy to Vercel. I decided to try out...

27 Mar 2020

$72,000.999

We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt...


\ No newline at end of file