1<!DOCTYPE html><html class=font-sans lang=en-US><head><meta charset=utf-8><meta content="width=device-width,initial-scale=1,viewport-fit=cover" name=viewport><link href=/icons/favicon.svg rel=icon type=image/svg+xml><title>Ankit's Blog - https://iank.it</title><meta content="Retypeset is a static blog theme based on the Astro framework. Inspired by Typography, Retypeset establishes a new visual standard and reimagines the layout of all pages, creating a reading experience reminiscent of paper books, reviving the beauty of typography. Details in every sight, elegance in every space." name=description><meta content="Ankit Mittal" name=author><meta content="Astro v5.8.1" name=generator><meta content="oklch(96% 0.005 298)" name=theme-color><link href=/fonts/EarlySummer-VF-Split/EarlySummer-VF-Subset.woff2 rel=preload type=font/woff2 as=font crossorigin><link href=/fonts/Snell-Black-SF.woff2 rel=preload type=font/woff2 as=font crossorigin><link href=/fonts/Snell-Bold-SF.woff2 rel=preload type=font/woff2 as=font crossorigin><link href=/fonts/STIX-VF.woff2 rel=preload type=font/woff2 as=font crossorigin><link href=/fonts/STIX-Italic-VF.woff2 rel=preload type=font/woff2 as=font crossorigin><link href=/_astro/photoswipe.cPPnkASS.css rel=preload as=style><link href=/_astro/katex.min.COXD5gRV.css rel=preload as=style><link href=/_astro/photoswipe.cPPnkASS.css rel=stylesheet media=print onload="this.media="all""><link href=/_astro/katex.min.COXD5gRV.css rel=stylesheet media=print onload="this.media="all""><link href=/rss.xml rel=alternate type=application/rss+xml title="RSS Feed"><link href=/atom.xml rel=alternate type=application/atom+xml title="Atom Feed"><link href=/sitemap-index.xml rel=sitemap><link href=https://iank.it/tags/ rel=canonical><link href=https://iank.it rel=alternate hreflang=en><meta content=website property=og:type><meta content=https://iank.it/tags/ property=og:url><meta content="Ankit's Blog - https://iank.it" property=og:title><meta content="Retypeset is a static blog theme based on the Astro framework. Inspired by Typography, Retypeset establishes a new visual standard and reimagines the layout of all pages, creating a reading experience reminiscent of paper books, reviving the beauty of typography. Details in every sight, elegance in every space." property=og:description><meta content="https://api.apiflash.com/v1/urltoimage?access_key=02a837b6188f4ba0a7fd9fbeff03a83e&url=https://retypeset.radishzz.cc/&format=png&width=1500&height=788&ttl=172800&wait_until=network_idle&no_tracking=true" property=og:image><meta content=summary_large_image name=twitter:card><meta content=true name=astro-view-transitions-enabled><meta content=none name=astro-view-transitions-fallback>
1<script type=module src=/_astro/ClientRouter.astro_astro_type_script_index_0_lang.CLDwYp7M.js></script>
1<script>!function(){function e(e=document){const t=function(){const e=localStorage.getItem("theme");return!!e&&"dark"===e}();e.documentElement.classList.toggle("dark",t);const n=e.head.querySelector('meta[name="theme-color"]');n&&n.setAttribute("content",t?"oklch(22% 0.005 298)":"oklch(96% 0.005 298)")}e(),document.addEventListener("astro:before-swap",(({newDocument:t})=>{e(t)})),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",(({matches:t})=>{localStorage.setItem("theme",t?"dark":"light"),e(),document.dispatchEvent(new Event("theme-changed"))}))}()</script>
1<link href=/_astro/_about_.CxpbGlCa.css rel=stylesheet>
1<script type=module src=/_astro/page.BNYwb576.js></script>
1<script>!function(t,e,n,r){(window.crossOriginIsolated||navigator.serviceWorker)&&((r=t[e]=Object.assign(t[e]||{},{lib:"/~partytown/",debug:!1}))[n]=(r[n]||[]).concat(["dataLayer.push","gtag"]))}(window,"partytown","forward");const t={preserveBehavior:!1},e=e=>{if("string"==typeof e)return[e,t];const[n,r=t]=e;return[n,{...t,...r}]},n=Object.freeze((()=>{const t=new Set;let e=[];do{Object.getOwnPropertyNames(e).forEach((n=>{"function"==typeof e[n]&&t.add(n)}))}while((e=Object.getPrototypeOf(e))!==Object.prototype);return Array.from(t)})());!function(t,r,o,i,a,s,c,d,l,p,u=t,f){function y(){f||(f=1,"/"==(c=(s.lib||"/~partytown/")+(s.debug?"debug/":""))[0]&&(l=r.querySelectorAll('script[type="text/partytown"]'),i!=t?i.dispatchEvent(new CustomEvent("pt1",{detail:t})):(d=setTimeout(h,(null==s?void 0:s.fallbackTimeout)||1e4),r.addEventListener("pt0",b),a?w(1):o.serviceWorker?o.serviceWorker.register(c+(s.swPath||"partytown-sw.js"),{scope:c}).then((function(t){t.active?w():t.installing&&t.installing.addEventListener("statechange",(function(t){"activated"==t.target.state&&w()}))}),console.error):h())))}function w(e){p=r.createElement(e?"script":"iframe"),t._pttab=Date.now(),e||(p.style.display="block",p.style.width="0",p.style.height="0",p.style.border="0",p.style.visibility="hidden",p.setAttribute("aria-hidden",!0)),p.src=c+"partytown-"+(e?"atomics.js?v=0.11.1":"sandbox-sw.html?"+t._pttab),r.querySelector(s.sandboxParent||"body").appendChild(p)}function h(n,o){for(b(),i==t&&(s.forward||[]).map((function(n){const[r]=e(n);delete t[r.split(".")[0]]})),n=0;n<l.length;n++)(o=r.createElement("script")).innerHTML=l[n].innerHTML,o.nonce=s.nonce,r.head.appendChild(o);p&&p.parentNode.removeChild(p)}function b(){clearTimeout(d)}s=t.partytown||{},i==t&&(s.forward||[]).map((function(r){const[o,{preserveBehavior:i}]=e(r);u=t,o.split(".").map((function(e,r,o){var a;u=u[o[r]]=r+1<o.length?u[o[r]]||(a=o[r+1],n.includes(a)?[]:{}):(()=>{let e=null;if(i){const{methodOrProperty:n,thisObject:r}=((t,e)=>{let n=t;for(let t=0;t<e.length-1;t+=1)n=n[e[t]];return{thisObject:n,methodOrProperty:e.length>0?n[e[e.length-1]]:void 0}})(t,o);"function"==typeof n&&(e=(...t)=>n.apply(r,...t))}return function(){let n;return e&&(n=e(arguments)),(t._ptf=t._ptf||[]).push(o,arguments),n}})()}))})),"complete"==r.readyState?y():(t.addEventListener("DOMContentLoaded",y),t.addEventListener("load",y))}(window,document,navigator,top,window.crossOriginIsolated),document.addEventListener("astro:before-swap",(t=>{let e=document.body.querySelector("iframe[src*='/~partytown/']");e&&t.newDocument.body.append(e)}))</script>
1<style>[data-astro-transition-scope=astro-wif6pdce-1]{view-transition-name:site-title-en}@layer astro{::view-transition-old(site-title-en){animation-duration:180ms;animation-timing-function:cubic-bezier(0.76,0,0.24,1);animation-fill-mode:both;animation-name:astroFadeOut}::view-transition-new(site-title-en){animation-duration:180ms;animation-timing-function:cubic-bezier(0.76,0,0.24,1);animation-fill-mode:both;animation-name:astroFadeIn}[data-astro-transition=back]::view-transition-old(site-title-en){animation-duration:180ms;animation-timing-function:cubic-bezier(0.76,0,0.24,1);animation-fill-mode:both;animation-name:astroFadeOut}[data-astro-transition=back]::view-transition-new(site-title-en){animation-duration:180ms;animation-timing-function:cubic-bezier(0.76,0,0.24,1);animation-fill-mode:both;animation-name:astroFadeIn}}[data-astro-transition-fallback=old] [data-astro-transition-scope=astro-wif6pdce-1],[data-astro-transition-fallback=old][data-astro-transition-scope=astro-wif6pdce-1]{animation-duration:180ms;animation-timing-function:cubic-bezier(0.76,0,0.24,1);animation-fill-mode:both;animation-name:astroFadeOut}[data-astro-transition-fallback=new] [data-astro-transition-scope=astro-wif6pdce-1],[data-astro-transition-fallback=new][data-astro-transition-scope=astro-wif6pdce-1]{animation-duration:180ms;animation-timing-function:cubic-bezier(0.76,0,0.24,1);animation-fill-mode:both;animation-name:astroFadeIn}[data-astro-transition=back][data-astro-transition-fallback=old] [data-astro-transition-scope=astro-wif6pdce-1],[data-astro-transition=back][data-astro-transition-fallback=old][data-astro-transition-scope=astro-wif6pdce-1]{animation-duration:180ms;animation-timing-function:cubic-bezier(0.76,0,0.24,1);animation-fill-mode:both;animation-name:astroFadeOut}[data-astro-transition=back][data-astro-transition-fallback=new] [data-astro-transition-scope=astro-wif6pdce-1],[data-astro-transition=back][data-astro-transition-fallback=new][data-astro-transition-scope=astro-wif6pdce-1]{animation-duration:180ms;animation-timing-function:cubic-bezier(0.76,0,0.24,1);animation-fill-mode:both;animation-name:astroFadeIn}</style></head><body><div class="max-w-205.848 min-h-dvh min-h-vh mx-auto w-full" lg="mx-[max(5rem,calc(50vw-35rem))] my-20 max-w-[min(calc(75vw-16rem),44rem)] min-h-full p-0" p="x-[min(7.25vw,3.731rem)] y-10"><header class="cjk:tracking-0.02em lg:uno-desktop-column mb-10.5 lg:top-20"><h1 class="c-primary font-bold font-title lg:text-9 lg:w-full mb-1.8 text-8 w-75%"><div class="box-content inline-block pr-1" data-astro-transition-scope=astro-wif6pdce-1 data-disable-theme-transition><a href=/ id=site-title-link>Ankit's Blog</a></div></h1><h2 aria-hidden=false class="font-navbar lg:text-4 c-secondary lg:w-full text-3.5 w-75%">https://iank.it</h2></header><nav aria-label="Site Navigation" class="font-navbar lg:text-4 cjk:tracking-0.02em font-semibold leading-2.45em lg:bottom-50 lg:uno-desktop-column mb-10.5 text-3.6"><ul><li><a href=/ class="hover:c-primary highlight-hover transition-colors after:bottom-0.7em hover:font-bold transition-font-weight">Posts</a></li><li><a href=/tags/ class="after:bottom-0.7em c-primary font-bold highlight-static">Tags</a></li><li><a href=/about/ class="hover:c-primary highlight-hover transition-colors after:bottom-0.7em hover:font-bold transition-font-weight">About</a></li></ul></nav><main class=mb-12><div class=uno-decorative-line></div><div class=uno-tags-wrapper></div></main><footer class="font-navbar leading-1.25em lg:text-3.5 text-3" lg="uno-desktop-column bottom-20"><p><a href=/atom.xml class="hover:c-primary highlight-hover transition-colors after:bottom-0.35em py-0.8" rel="noopener noreferrer" target=_blank>RSS</a> / <a href=https://github.com/ankitml class="hover:c-primary highlight-hover transition-colors after:bottom-0.35em py-0.8" rel="noopener noreferrer" target=_blank>GitHub</a> / <a href=mailto:[email protected] class="hover:c-primary highlight-hover transition-colors after:bottom-0.35em py-0.8" rel="noopener noreferrer" target=_blank>Email</a> </p><p>© 2025 Ankit Mittal</p><p>Powered by <a href=https://astro.build/ class="hover:c-primary highlight-hover transition-colors after:bottom-0.35em py-0.8" rel="noopener noreferrer" target=_blank>Astro</a> and <a href=https://github.com/radishzzz/astro-theme-retypeset class="hover:c-primary highlight-hover transition-colors after:bottom-0.35em py-0.8" rel="noopener noreferrer" target=_blank>Retypeset</a></p></footer></div>
1<script type=module src=/_astro/GsapAnimation.astro_astro_type_script_index_0_lang.DkQTLQmS.js></script>
1<div class="absolute flex gap-6 lg:bottom-48 lg:fixed lg:right-[max(5rem,calc(50vw-35rem))] lg:top-auto lg:w-14rem min-[823px]:max-[1024px]:right-[calc(50vw-22rem)] right-7.25vw top-14.6"><button aria-label="Switch light/dark theme" class="hover:c-primary active:scale-90 aspect-square c-secondary w-4" id=theme-toggle-button><svg aria-hidden=true fill=currentColor viewBox="0 0 24 24"><path d=M12,.5C5.6.5.4,5.6.4,12s5.1,11.5,11.6,11.5,11.5-5.1,11.5-11.5S18.4.5,12,.5M12,21.5C5.9,21.5,1,17.3,1,12S5.9,2.6,12,2.6s11,4.2,11,9.5-4.9,9.4-11,9.4 /></svg></button></div>
1<script>!function(){function e(){document.documentElement.classList.toggle("dark");const e=document.documentElement.classList.contains("dark"),t=document.head.querySelector('meta[name="theme-color"]');t&&t.setAttribute("content",e?"oklch(22% 0.005 298)":"oklch(96% 0.005 298)"),localStorage.setItem("theme",e?"dark":"light"),document.dispatchEvent(new Event("theme-changed"))}function t(){const t=document.getElementById("theme-toggle-button");t&&t.addEventListener("click",(()=>{if(document.documentElement.classList.contains("reduce-motion")||!document.startViewTransition)return void e();document.documentElement.style.setProperty("view-transition-name","animation-theme-toggle"),document.documentElement.setAttribute("data-theme-changing","");document.startViewTransition(e).finished.then((()=>{document.documentElement.style.removeProperty("view-transition-name"),document.documentElement.removeAttribute("data-theme-changing")}))}))}t(),document.addEventListener("astro:after-swap",t)}()</script>
1<script type=module>const o={copy:'<svg\n viewBox="0 0 24 24"\n fill="currentColor"\n >\n <path d="M6.9.8v18h14.5V.8zm12.8 16h-11v-14h11z"/>\n <path d="M4.3 21.2V5.6l-1.7.5v17.1h14.3l.6-2z"/>\n </svg>',success:'<svg\n viewBox="0 0 24 24"\n fill="currentColor"\n >\n <path d="m23.1 6.4-1.3-1.3L9.4 16.6l-6.3-5.4-1.2 1.2L9.4 20z"/>\n </svg>'},c=new WeakMap;async function r(e){const t=e.parentElement?.querySelector("pre code")?.textContent||"";try{await navigator.clipboard.writeText(t);const n=c.get(e);n&&clearTimeout(n),e.innerHTML=o.success,e.classList.add("copy-success");const s=setTimeout((()=>{e.innerHTML=o.copy,e.classList.remove("copy-success"),c.delete(e)}),1500);c.set(e,s)}catch{}}function n(){document.querySelectorAll(".code-copy-button:not([data-initialized])").forEach((e=>{e.innerHTML=o.copy,e.setAttribute("data-initialized","true")}))}document.addEventListener("click",(e=>{if(!(e.target instanceof HTMLElement))return;const t=e.target.closest(".code-copy-button");t&&r(t)}),{passive:!0}),n(),document.addEventListener("astro:page-load",n)</script>
1<script type=module src=/_astro/PhotoSwipe.astro_astro_type_script_index_0_lang.CuTTJUzU.js></script>
1<script type=module>function l(){const t=document.getElementsByClassName("gc-container");if(0===t.length)return;const e=new IntersectionObserver((t=>{t.forEach((t=>{t.isIntersecting&&(m(t.target),e.unobserve(t.target))}))}),{rootMargin:"500px"});Array.from(t).forEach((t=>e.observe(t)))}async function m(t){const e=t.dataset.repo;if(!e)return;const n=t.getElementsByClassName("gc-owner-avatar")[0],o=t.getElementsByClassName("gc-repo-description")[0],a=t.getElementsByClassName("gc-stars-count")[0],r=t.getElementsByClassName("gc-forks-count")[0],s=t.getElementsByClassName("gc-license-info")[0];try{const t=await fetch(`https://api.github.com/repos/${e}`);if(t.ok){const e=await t.json();n&&e.owner?.avatar_url&&(n.style.backgroundImage=`url(${e.owner.avatar_url})`),o&&e.description&&(o.textContent=e.description),a&&(a.textContent=new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e.stargazers_count)),r&&(r.textContent=new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e.forks_count)),s&&(s.textContent=e.license?.spdx_id||"No License")}else o&&(o.textContent="Loading failed.")}catch{console.error(`Failed to fetch ${e}`)}}l(),document.addEventListener("astro:page-load",l)</script>
1</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.