PageSourceSearch

https://lucasds.dev/blog/

html lucasds.dev collected 2026-10-10 00:07:38 UTC 22,031 bytes, 1 lines download raw bytes

1<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><title>Blog | Lucas da Silva</title><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Astro v7.2.0"><link rel="preload" href="/fonts/InterVariable.woff2" as="font" type="font/woff2" crossorigin><meta name="description" content="Mostly long-form essays on coding and other shenanigans."><meta name="robots" content="noai,noimageai"><meta name="referrer" content="no-referrer-when-downgrade"><link rel="canonical" href="https://lucasds.dev/blog/"><link rel="icon" href="https://lucasds.dev/content/images/2025/02/android-chrome-512x512.png" type="image/png"><link rel="apple-touch-icon" href="https://lucasds.dev/content/images/2025/02/android-chrome-512x512.png"><meta property="og:site_name" content="Lucas da Silva"><meta property="og:type" content="website"><meta property="og:title" content="Blog | Lucas da Silva"><meta property="og:description" content="Mostly long-form essays on coding and other shenanigans."><meta property="og:url" content="https://lucasds.dev/blog/"><meta property="og:image" content="https://lucasds.dev/content/images/2025/02/cover.png"><meta property="og:image:width" content="775"><meta property="og:image:height" content="440"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Blog | Lucas da Silva"><meta name="twitter:description" content="Mostly long-form essays on coding and other shenanigans."><meta name="twitter:url" content="https://lucasds.dev/blog/"><meta name="twitter:image" content="https://lucasds.dev/content/images/2025/02/cover.png"><meta name="theme-color" media="(prefers-color-scheme: dark)" content="#14161e"><meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff"><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate">
1<script type="module" src="/_astro/ClientRouter.astro_astro_type_script_index_0_lang.DW-LBy1z.js"></script>
1<script defer src="https://cloud.umami.is/script.js" data-website-id="4d06d784-b0d5-4ddb-8ffa-2dccf1db5fd0"></script>
1<link rel="stylesheet" href="/_astro/BaseLayout.CZ7TAibH.css"></head><body class="min-h-dvh bg-(--app-bg) text-(--app-text) antialiased transition-colors flex flex-col"><a href="#main" class="sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-50 bg-(--app-text) text-(--app-bg) px-4 py-2 text-xs font-mono-ui">Skip to content</a><nav class="wrapper py-6 md:py-8" aria-label="Primary navigation" data-astro-cid-rutobish><div class="flex items-center justify-between" data-astro-cid-rutobish><a href="/" class="text-base md:text-lg font-semibold tracking-tight hover:text-(--app-accent)" data-astro-cid-rutobish>Lucas da Silva</a><div class="hidden md:flex items-center gap-8" data-astro-cid-rutobish><ul class="flex gap-7 text-sm font-medium text-(--app-muted)" data-astro-cid-rutobish><li data-astro-cid-rutobish><a href="/about/" class="hover:text-(--app-text)" data-astro-cid-rutobish>About</a></li><li data-astro-cid-rutobish><a href="/projects/" class="hover:text-(--app-text)" data-astro-cid-rutobish>Projects</a></li></ul><button id="themeToggle" type="button" aria-label="Switch to dark theme" aria-pressed="false" class="theme-toggle flex h-9 w-9 items-center justify-center rounded-full border border-(--app-border)/60 bg-(--app-surface)/60 text-(--app-muted) hover:border-(--app-border) hover:bg-(--app-surface) hover:text-(--app-text)" data-astro-cid-rutobish><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-rutobish="true" class="lucide lucide-sun theme-icon-light"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-rutobish="true" class="lucide lucide-moon theme-icon-dark hidden"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg><span class="theme-label sr-only" data-astro-cid-rutobish>Light theme enabled</span></button></div><div class="flex items-center gap-2 md:hidden" data-astro-cid-rutobish><button id="themeToggleMobile" type="button" aria-label="Switch to dark theme" aria-pressed="false" class="theme-toggle flex h-9 w-9 items-center justify-center rounded-full border border-(--app-border)/60 bg-(--app-surface)/60 text-(--app-muted) hover:border-(--app-border) hover:bg-(--app-surface) hover:text-(--app-text)" data-astro-cid-rutobish><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-rutobish="true" class="lucide lucide-sun theme-icon-light"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-rutobish="true" class="lucide lucide-moon theme-icon-dark hidden"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg><span class="theme-label sr-only" data-astro-cid-rutobish>Light theme enabled</span></button><button id="menuToggle" type="button" aria-expanded="false" aria-controls="mobileMenu" aria-label="Open menu" class="w-9 h-9 flex flex-col items-center justify-center gap-1.25 border border-(--app-border) rounded-md" data-astro-cid-rutobish><span aria-hidden="true" class="menu-bar block w-4 h-[1.5px] bg-(--app-text)" data-astro-cid-rutobish></span><span aria-hidden="true" class="menu-bar block w-4 h-[1.5px] bg-(--app-text)" data-astro-cid-rutobish></span><span aria-hidden="true" class="menu-bar block w-4 h-[1.5px] bg-(--app-text)" data-astro-cid-rutobish></span></button></div></div><ul id="mobileMenu" class="hidden md:hidden flex-col mt-6 pt-4 border-t border-(--app-border)" data-astro-cid-rutobish><li class="border-b border-(--app-border) last:border-b-0" data-astro-cid-rutobish><a href="/about/" class="block text-base font-medium text-(--app-muted) py-3 hover:text-(--app-text)" data-astro-cid-rutobish>About</a></li><li class="border-b border-(--app-border) last:border-b-0" data-astro-cid-rutobish><a href="/projects/" class="block text-base font-medium text-(--app-muted) py-3 hover:text-(--app-text)" data-astro-cid-rutobish>Projects</a></li></ul></nav>
1<script type="module">var e=document.documentElement;function t(t){let n=t===`dark`,r=document.querySelectorAll(`.theme-toggle`);e.dataset.theme=t,localStorage.setItem(`theme`,t),r.forEach(e=>{e.setAttribute(`aria-pressed`,String(n)),e.setAttribute(`aria-label`,n?`Switch to light theme`:`Switch to dark theme`),e.querySelector(`.theme-icon-light`)?.classList.toggle(`hidden`,n),e.querySelector(`.theme-icon-dark`)?.classList.toggle(`hidden`,!n);let t=e.querySelector(`.theme-label`);t&&(t.textContent=n?`Dark theme enabled`:`Light theme enabled`)})}function n(){t(localStorage.getItem(`theme`)===`dark`?`dark`:`light`),document.querySelectorAll(`.theme-toggle`).forEach(n=>{n instanceof HTMLButtonElement&&(n.onclick=()=>{t(e.dataset.theme===`dark`?`light`:`dark`)})})}function r(){let e=document.getElementById(`menuToggle`),t=document.getElementById(`mobileMenu`);function n(n){t?.classList.toggle(`flex`,n),t?.classList.toggle(`hidden`,!n),e?.classList.toggle(`is-open`,n),e?.setAttribute(`aria-expanded`,String(n)),e?.setAttribute(`aria-label`,n?`Close menu`:`Open menu`)}e&&(e.onclick=()=>{n(e.getAttribute(`aria-expanded`)!==`true`)})}var i=window;i.siteNavKeydownBound||=(document.addEventListener(`keydown`,e=>{if(e.key===`Escape`){let e=document.getElementById(`menuToggle`),t=document.getElementById(`mobileMenu`);t?.classList.remove(`flex`),t?.classList.add(`hidden`),e?.classList.remove(`is-open`),e?.setAttribute(`aria-expanded`,`false`),e?.setAttribute(`aria-label`,`Open menu`)}}),!0);function a(){n(),r()}document.addEventListener(`astro:page-load`,a),a();</script>
1<main id="main" class="grow"><header class="wrapper mt-10" style="margin-block-end: var(--space-l-xl);"><div><h1 class="font-semibold tracking-tight leading-(--leading-tight)" style="font-size: var(--step-5);">Blog</h1><p class="mt-4 max-w-prose text-(--app-muted)" style="font-size: var(--step-0);">Mostly long-form essays on coding and other shenanigans.</p></div></header><section class="wrapper pb-24 md:pb-32" aria-label="Blog posts"><div class="flow" style="--flow-space: var(--space-l-xl);"><section aria-labelledby="blog-year-2025"><div class="flow" style="--flow-space: var(--space-xs);"><h2 id="blog-year-2025" class="font-mono-ui text-xs uppercase tracking-wide text-(--app-muted)">2025</h2><ul class="flex flex-col gap-4"><li><a href="/blog/implementing-a-swift-ui-sharesheet-extension/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Implementing a Swift UI ShareSheet Extension</h3><time datetime="2025-04-10T14:07:41.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Apr 10</time></a></li><li><a href="/blog/enjoying-swiftui/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Enjoying SwiftUI</h3><time datetime="2025-02-10T21:20:52.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Feb 11</time></a></li></ul></div></section><section aria-labelledby="blog-year-2019"><div class="flow" style="--flow-space: var(--space-xs);"><h2 id="blog-year-2019" class="font-mono-ui text-xs uppercase tracking-wide text-(--app-muted)">2019</h2><ul class="flex flex-col gap-4"><li><a href="/blog/apple-sidecar-an-aspiring-artists-perspective/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Apple Sidecar, an aspiring artist&#39;s perspective</h3><time datetime="2019-09-22T00:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Sep 22</time></a></li><li><a href="/blog/one-simple-thing-i-like-the-most-about-swift/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">One simple thing I like the most about Swift</h3><time datetime="2019-04-13T20:56:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Apr 13</time></a></li></ul></div></section><section aria-labelledby="blog-year-2018"><div class="flow" style="--flow-space: var(--space-xs);"><h2 id="blog-year-2018" class="font-mono-ui text-xs uppercase tracking-wide text-(--app-muted)">2018</h2><ul class="flex flex-col gap-4"><li><a href="/blog/a11y-meetup-berlin-talk/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">A11Y Meetup Berlin talk</h3><time datetime="2018-03-31T10:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Mar 31</time></a></li><li><a href="/blog/learning-haskell-common-types/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Learning Haskell - Common types</h3><time datetime="2018-03-04T00:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Mar 04</time></a></li><li><a href="/blog/learning-haskell-introducing-types/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Learning Haskell - Introducing types</h3><time datetime="2018-03-02T00:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Mar 02</time></a></li><li><a href="/blog/ruby-html-element/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Ruby HTML element</h3><time datetime="2018-02-25T00:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Feb 25</time></a></li><li><a href="/blog/learning-haskell-pattern-matching/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Learning Haskell - Pattern matching</h3><time datetime="2018-02-17T00:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Feb 17</time></a></li><li><a href="/blog/can-you-buy-a-mouse-without-a-mouse/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">
1Can you buy a mouse without a mouse?</h3><time datetime="2018-02-10T00:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Feb 10</time></a></li><li><a href="/blog/learning-haskell-rules-for-recursion/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Learning Haskell - Rules for recursion</h3><time datetime="2018-02-04T21:29:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Feb 05</time></a></li><li><a href="/blog/learning-haskell-lists/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Learning Haskell - Lists</h3><time datetime="2018-01-29T00:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Jan 29</time></a></li><li><a href="/blog/detect-reduce-motion-on-the-web-and-ios/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Detect Reduce Motion on the Web and iOS</h3><time datetime="2018-01-28T00:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Jan 28</time></a></li><li><a href="/blog/learning-haskell-first-class-functions/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Learning Haskell - First-class functions</h3><time datetime="2018-01-27T21:32:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Jan 28</time></a></li><li><a href="/blog/learning-haskell-lambda-functions/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Learning Haskell - Lambda functions</h3><time datetime="2018-01-22T00:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Jan 22</time></a></li><li><a href="/blog/learning-haskell/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Learning Haskell</h3><time datetime="2018-01-04T04:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Jan 04</time></a></li></ul></div></section><section aria-labelledby="blog-year-2017"><div class="flow" style="--flow-space: var(--space-xs);"><h2 id="blog-year-2017" class="font-mono-ui text-xs uppercase tracking-wide text-(--app-muted)">2017</h2><ul class="flex flex-col gap-4"><li><a href="/blog/goodbye-2017/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Goodbye, 2017</h3><time datetime="2017-12-31T00:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Dec 31</time></a></li><li><a href="/blog/destructuring-with-default-value/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">Destructuring with default value</h3><time datetime="2017-04-23T11:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Apr 23</time></a></li><li><a href="/blog/on-pursuit-of-productivity/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">On pursuit of productivity</h3><time datetime="2017-04-16T00:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Apr 16</time></a></li><li><a href="/blog/css-the-initial-value/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">CSS - The initial value</h3><time datetime="2017-01-19T00:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Jan 19</time></a></li></ul></div></section><section aria-labelledby="blog-year-2016"><div class="flow" style="--flow-space: var(--space-xs);"><h2 id="blog-year-2016" class="font-mono-ui text-xs uppercase tracking-wide text-(--app-muted)">2016</h2><ul class="flex flex-col gap-4"><li><a href="/blog/css-is-dead-long-live-post-css/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">CSS is dead - Long live (post)CSS</h3><time datetime="2016-06-25T03:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Jun 25</time></a></li></ul></div></section><section aria-labelledby="blog-year-2015"><div class="flow" style="--flow-space: var(--space-xs);"><h2 id="blog-year-2015" class="font-mono-ui text-xs uppercase tracking-wide text-(--app-muted)">2015</h2><ul class="flex flex-col gap-4"><li><a href="/blog/braziljs-conf-2015-eu-fui/" class="group flex items-baseline justify-between gap-6"><h3 class="text-(length:--step-0) font-semibold tracking-tight group-hover:text-(--app-accent)">BrazilJS Conf 2015 — eu fui!</h3><time datetime="2015-09-06T00:00:00.000-03:00" class="shrink-0 whitespace-nowrap font-mono-ui text-[11px] uppercase text-(--app-muted)">Sep 06</time></a></li></ul></div></section></div></section></main><footer class="site-footer pt-10 pb-16"><div class="wrapper"><div class="flex flex-wrap items-center justify-between gap-5 text-sm text-(--app-muted)"><span class="font-mono-ui text-xs">&copy; 2026</span><div class="flex flex-wrap items-center justify-end gap-x-5 gap-y-3"><ul class="flex flex-wrap gap-5"><li><a href="/blog/" class="hover:text-(--app-text)">Blog</a></li><li><a href="https://github.com/AgtLucas" class="hover:text-(--app-text)" target="_blank" rel="noopener noreferrer">GitHub</a></li><li><a href="https://www.linkedin.com/in/agtlucas/" class="hover:text-(--app-text)" target="_blank" rel="noopener noreferrer">LinkedIn</a></li><li><a href="https://lucas.art/" class="hover:text-(--app-text)" target="_blank" rel="noopener noreferrer">Art</a></li></ul><button type="button" aria-label="Switch to dark theme" aria-pressed="false" class="theme-toggle flex h-9 w-9 shrink-0 items-center justify-center rounded-full border border-(--app-border)/60 bg-(--app-surface)/60 text-(--app-muted) hover:border-(--app-border) hover:bg-(--app-surface) hover:text-(--app-text)"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="lucide lucide-sun theme-icon-light"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="lucide lucide-moon theme-icon-dark hidden"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg><span class="theme-label sr-only">Light theme enabled</span></button></div></div></div></footer><!-- Cloudflare Pages Analytics -->
vendor: 99 bytes, line 1
1<script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "
133d2a50c502846959802ec04a9bc5a0b
vendor: 13 bytes, line 1
1"}'></script>
1<!-- Cloudflare Pages Analytics --></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.