<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Networking on tsvinc</title>
    <link>https://tsvinc.dev/tags/networking/</link>
    <description>Recent content in Networking on tsvinc</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 14 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://tsvinc.dev/tags/networking/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>572,000 domains and the router barely notices</title>
      <link>https://tsvinc.dev/posts/blocky-mikrotik-no-pihole/</link>
      <pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://tsvinc.dev/posts/blocky-mikrotik-no-pihole/</guid>
      <description>&lt;p&gt;&lt;figure class=&#34;svg-figure&#34; role=&#34;img&#34; aria-label=&#34;A hand-drawn doodle: the blocky router as a bouncer — a frowning ad envelope is turned away with an NXDOMAIN sign while a happy clean DNS query envelope is waved through the door&#34;&gt;&#xA;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;1200&#34; height=&#34;675&#34; viewBox=&#34;0 0 1200 675&#34; role=&#34;img&#34; aria-labelledby=&#34;title desc&#34;&gt;&#xA;  &lt;title id=&#34;title&#34;&gt;Blocky guards DNS on a MikroTik router&lt;/title&gt;&#xA;  &lt;desc id=&#34;desc&#34;&gt;A doodled router acts as a bouncer, turning away a frowning ad envelope with an NXDOMAIN paddle while waving a happy clean envelope through.&lt;/desc&gt;&#xA;&#xA;  &lt;rect width=&#34;1200&#34; height=&#34;675&#34; fill=&#34;var(--bg, #111114)&#34;/&gt;&#xA;&#xA;  &lt;!-- sparse notebook marks --&gt;&#xA;  &lt;g fill=&#34;none&#34; stroke=&#34;var(--fg-faint, #4a4a52)&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; opacity=&#34;0.48&#34;&gt;&#xA;    &lt;path d=&#34;M73 111l19-2m-8-9l2 19M1096 116l20 3m-8-12l-3 20M89 571l22 1m-10-10l-1 21M1081 559l22-3m-12-8l3 20&#34;/&gt;&#xA;    &lt;path d=&#34;M177 86c43-8 84-7 124-2M906 88c42 7 78 6 116 0M167 590c45 7 87 7 127 1M901 588c41-6 79-4 117 2&#34;/&gt;&#xA;    &lt;circle cx=&#34;353&#34; cy=&#34;94&#34; r=&#34;3&#34;/&gt;&lt;circle cx=&#34;858&#34; cy=&#34;594&#34; r=&#34;4&#34;/&gt;&lt;circle cx=&#34;1050&#34; cy=&#34;211&#34; r=&#34;3&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&#xA;  &lt;!-- motion: rejected left, welcomed right --&gt;&#xA;  &lt;g fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;    &lt;path d=&#34;M337 333c-39-29-78-31-112-16&#34; stroke=&#34;#cc3333&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;path d=&#34;M239 304l-18 15 21 8&#34; stroke=&#34;#cc3333&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;path d=&#34;M289 291l11-15m5 30l19-4m-29 24l12 13&#34; stroke=&#34;#cc3333&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;path d=&#34;M783 354c39 0 69 2 102 0&#34; stroke=&#34;var(--link, #78d8bd)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;path d=&#34;M870 341l18 13-18 13&#34; stroke=&#34;var(--link, #78d8bd)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&#xA;  &lt;!-- blocky router bouncer --&gt;&#xA;  &lt;g stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;    &lt;!-- antennas --&gt;&#xA;    &lt;path d=&#34;M481 182l-32-77m35 76l-20-82M718 181l32-77m-30 79l45-70&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;circle cx=&#34;457&#34; cy=&#34;101&#34; r=&#34;7&#34; fill=&#34;var(--fg-heading, #e9a447)&#34;/&gt;&#xA;    &lt;circle cx=&#34;758&#34; cy=&#34;108&#34; r=&#34;7&#34; fill=&#34;var(--fg-heading, #e9a447)&#34;/&gt;&#xA;&#xA;    &lt;!-- imperfect router case --&gt;&#xA;    &lt;path d=&#34;M420 205Q423 181 449 180L747 184Q777 184 779 212L786 504Q785 532 755 535L448 532Q418 530 418 500Z&#34;&#xA;          fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;path d=&#34;M433 219q164-12 333 1M437 515q164 10 333 0&#34; fill=&#34;none&#34; stroke=&#34;var(--border, #2a2a30)&#34; stroke-width=&#34;3&#34;/&gt;&#xA;&#xA;    &lt;!-- simple identity badge --&gt;&#xA;    &lt;path d=&#34;M457 231q68-8 139 1l-2 52q-69 7-137-1Z&#34; fill=&#34;var(--bg, #111114)&#34; stroke=&#34;var(--fg-heading, #e9a447)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;text x=&#34;526&#34; y=&#34;266&#34; text-anchor=&#34;middle&#34; fill=&#34;var(--fg-heading, #e9a447)&#34; font-family=&#34;Commit Mono, ui-monospace, monospace&#34; font-size=&#34;25&#34; font-weight=&#34;700&#34;&gt;blocky&lt;/text&gt;&#xA;&#xA;    &lt;!-- bouncer face --&gt;&#xA;    &lt;path d=&#34;M650 238q13-8 26 0m22 0q13-8 26 0&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;circle cx=&#34;666&#34; cy=&#34;247&#34; r=&#34;5&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;circle cx=&#34;707&#34; cy=&#34;247&#34; r=&#34;5&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;path d=&#34;M673 270q16 9 32-2&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;&#xA;    &lt;!-- open passage --&gt;&#xA;    &lt;path d=&#34;M626 322q1-22 23-23l90 2q19 1 20 22l4 192-140-1Z&#34; fill=&#34;var(--bg, #111114)&#34; stroke=&#34;var(--link, #78d8bd)&#34; stroke-width=&#34;5&#34;/&gt;&#xA;    &lt;path d=&#34;M640 316q51-8 105 1M641 496q53 8 108 0&#34; fill=&#34;none&#34; stroke=&#34;var(--fg-faint, #4a4a52)&#34; stroke-width=&#34;3&#34;/&gt;&#xA;    &lt;circle cx=&#34;742&#34; cy=&#34;405&#34; r=&#34;6&#34; fill=&#34;var(--link, #78d8bd)&#34;/&gt;&#xA;&#xA;    &lt;!-- stern arm and rejection paddle --&gt;&#xA;    &lt;path d=&#34;M420 329c-35-12-58-5-79 22-10 13-19 17-31 14&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;7&#34;/&gt;&#xA;    &lt;circle cx=&#34;306&#34; cy=&#34;364&#34; r=&#34;9&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;path d=&#34;M337 350l-30-71&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;8&#34;/&gt;&#xA;    &lt;path d=&#34;M242 222q66-17 130 1l10 58q-68 17-132 1Z&#34; fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;#cc3333&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;text x=&#34;312&#34; y=&#34;260&#34; text-anchor=&#34;middle&#34; fill=&#34;#cc3333&#34; font-family=&#34;Commit Mono, ui-monospace, monospace&#34; font-size=&#34;21&#34; font-weight=&#34;700&#34;&gt;NXDOMAIN&lt;/text&gt;&#xA;&#xA;    &lt;!-- welcoming arm --&gt;&#xA;    &lt;path d=&#34;M779 326c33-22 56-18 75 5 10 12 20 9 30-2&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;7&#34;/&gt;&#xA;    &lt;circle cx=&#34;888&#34; cy=&#34;323&#34; r=&#34;9&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;path d=&#34;M884 314l-1-23m7 25l18-14m-17 19l22 4&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;&#xA;    &lt;!-- feet --&gt;&#xA;    &lt;path d=&#34;M470 532l-11 25h51l7-24M697 535l8 23h51l-13-24&#34; fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&#xA;  &lt;!-- frowning ad envelope, bounced away --&gt;&#xA;  &lt;g transform=&#34;rotate(-7 153 385)&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;    &lt;path d=&#34;M75 338q77-19 153 1l5 79q-78 18-153 0Z&#34; fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--accent, #e787db)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;path d=&#34;M82 343l73 46 72-47&#34; fill=&#34;none&#34; stroke=&#34;var(--accent, #e787db)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;!-- ad megaphone mark --&gt;&#xA;    &lt;path d=&#34;M111 353l24-9 2 21-25-4Zm4 9l5 14&#34; fill=&#34;none&#34; stroke=&#34;var(--fg-heading, #e9a447)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;path d=&#34;M143 347l11-8m-10 19l14 2&#34; fill=&#34;none&#34; stroke=&#34;var(--fg-heading, #e9a447)&#34; stroke-width=&#34;3&#34;/&gt;&#xA;    &lt;!-- worried face --&gt;&#xA;    &lt;circle cx=&#34;171&#34; cy=&#34;370&#34; r=&#34;5&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;circle cx=&#34;201&#34; cy=&#34;369&#34; r=&#34;5&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;path d=&#34;M170 397q15-13 31 0&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;!-- stumbling legs --&gt;&#xA;    &lt;path d=&#34;M110 424l-19 27m86-22l15 29M77 453l20 1m89 6l21-5&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&#xA;  &lt;!-- happy clean query walking through --&gt;&#xA;  &lt;g transform=&#34;rotate(3 932 420)&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;    &lt;path d=&#34;M855 374q76-14 151 1l-3 76q-75 15-149-1Z&#34; fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--link, #78d8bd)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;path d=&#34;M860 379l72 43 69-44&#34; fill=&#34;none&#34; stroke=&#34;var(--link, #78d8bd)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;!-- happy face --&gt;&#xA;    &lt;path d=&#34;M893 405q7 7 14 0m28 1q7 7 14 0M903 427q17 14 35 0&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;    &lt;!-- jaunty legs --&gt;&#xA;    &lt;path d=&#34;M885 454l-8 35m76-33l22 27M861 490l20-2m89-3l21 5&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;6&#34;/&gt;&#xA;    &lt;!-- little clean sparkle --&gt;&#xA;    &lt;path d=&#34;M1018 362l3-18m-9 9l18 2&#34; fill=&#34;none&#34; stroke=&#34;var(--fg-heading, #e9a447)&#34; stroke-width=&#34;4&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&lt;/svg&gt;&#xA;&#xA;&lt;/figure&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Six gotchas deep in RouterOS containers</title>
      <link>https://tsvinc.dev/posts/routeros-container-gotchas/</link>
      <pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://tsvinc.dev/posts/routeros-container-gotchas/</guid>
      <description>&lt;p&gt;&lt;figure class=&#34;svg-figure&#34; role=&#34;img&#34; aria-label=&#34;A hand-drawn doodle: a sad container cube asks container=yes? and the router replies press the button, an arrow pointing at its physical mode button — software asks, hardware answers&#34;&gt;&#xA;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; width=&#34;1200&#34; height=&#34;675&#34; viewBox=&#34;0 0 1200 675&#34; role=&#34;img&#34; aria-labelledby=&#34;title desc&#34;&gt;&#xA;  &lt;title id=&#34;title&#34;&gt;A container asks RouterOS to run&lt;/title&gt;&#xA;  &lt;desc id=&#34;desc&#34;&gt;A worried container cube asks for container mode. A large router answers by directing a loose arrow at its recessed physical button.&lt;/desc&gt;&#xA;&#xA;  &lt;defs&gt;&#xA;    &lt;marker id=&#34;press-arrow&#34; viewBox=&#34;0 0 12 12&#34; refX=&#34;10&#34; refY=&#34;6&#34; markerWidth=&#34;11&#34; markerHeight=&#34;11&#34; orient=&#34;auto&#34;&gt;&#xA;      &lt;path d=&#34;M1 1 L11 6 L1 11 L3.4 6 Z&#34; fill=&#34;var(--link, #78d8bd)&#34;/&gt;&#xA;    &lt;/marker&gt;&#xA;  &lt;/defs&gt;&#xA;&#xA;  &lt;rect x=&#34;0&#34; y=&#34;0&#34; width=&#34;1200&#34; height=&#34;675&#34; fill=&#34;var(--bg, #111114)&#34;/&gt;&#xA;&#xA;  &lt;!-- Sparse notebook texture keeps the field loose without becoming annotation. --&gt;&#xA;  &lt;g fill=&#34;none&#34; stroke=&#34;var(--fg-faint, #4a4a52)&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; opacity=&#34;0.5&#34;&gt;&#xA;    &lt;path d=&#34;M54 118 q21 -6 42 0 M106 116 l17 -3&#34;/&gt;&#xA;    &lt;path d=&#34;M1080 103 q26 5 54 -1 M1142 103 l17 3&#34;/&gt;&#xA;    &lt;path d=&#34;M49 570 q23 7 49 1 M1094 584 q28 -6 57 1&#34;/&gt;&#xA;    &lt;path d=&#34;M542 597 q56 8 112 0 M667 600 q19 3 39 -1&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&#xA;  &lt;!-- The software request: one small, worried container cube. --&gt;&#xA;  &lt;g transform=&#34;rotate(-2 339 382)&#34;&gt;&#xA;    &lt;path d=&#34;M215 286 L357 218 L490 292 L348 365 Z&#34;&#xA;          fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--accent, #e787db)&#34; stroke-width=&#34;5&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;&#xA;    &lt;path d=&#34;M215 286 L348 365 L347 523 L215 445 Z&#34;&#xA;          fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--accent, #e787db)&#34; stroke-width=&#34;5&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;&#xA;    &lt;path d=&#34;M348 365 L490 292 L488 451 L347 523 Z&#34;&#xA;          fill=&#34;var(--bg, #111114)&#34; stroke=&#34;var(--accent, #e787db)&#34; stroke-width=&#34;5&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;&#xA;&#xA;    &lt;!-- corrugations and corner hardware --&gt;&#xA;    &lt;g fill=&#34;none&#34; stroke=&#34;var(--fg-muted, #aaaaaf)&#34; stroke-width=&#34;3&#34; stroke-linecap=&#34;round&#34; opacity=&#34;0.82&#34;&gt;&#xA;      &lt;path d=&#34;M239 302 L238 445 M267 320 L266 461 M296 337 L295 478 M324 353 L324 495&#34;/&gt;&#xA;      &lt;path d=&#34;M373 365 L372 504 M402 350 L401 486 M431 336 L430 469 M460 321 L459 451&#34;/&gt;&#xA;      &lt;path d=&#34;M239 278 L359 238 M265 296 L386 255 M294 312 L414 272 M321 330 L442 286&#34;/&gt;&#xA;    &lt;/g&gt;&#xA;    &lt;g fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;&gt;&#xA;      &lt;path d=&#34;M224 310 l18 11 l0 21 M339 378 l-17 -10 l0 23 M224 425 l18 11 l0 21 M338 500 l-17 -10 l0 -22&#34;/&gt;&#xA;    &lt;/g&gt;&#xA;&#xA;    &lt;!-- restrained face: looking toward the hardware --&gt;&#xA;    &lt;ellipse cx=&#34;277&#34; cy=&#34;391&#34; rx=&#34;7&#34; ry=&#34;10&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;ellipse cx=&#34;316&#34; cy=&#34;414&#34; rx=&#34;7&#34; ry=&#34;10&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;circle cx=&#34;280&#34; cy=&#34;389&#34; r=&#34;2.5&#34; fill=&#34;var(--bg, #111114)&#34;/&gt;&#xA;    &lt;circle cx=&#34;319&#34; cy=&#34;412&#34; r=&#34;2.5&#34; fill=&#34;var(--bg, #111114)&#34;/&gt;&#xA;    &lt;path d=&#34;M272 444 Q293 430 321 455&#34; fill=&#34;none&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34; stroke-linecap=&#34;round&#34;/&gt;&#xA;&#xA;    &lt;!-- small pleading wobble marks, not limbs --&gt;&#xA;    &lt;path d=&#34;M193 354 q-14 8 -19 22 M195 378 q-16 2 -23 13&#34;&#xA;          fill=&#34;none&#34; stroke=&#34;var(--fg-heading, #e9a447)&#34; stroke-width=&#34;4&#34; stroke-linecap=&#34;round&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&#xA;  &lt;!-- Software asks. --&gt;&#xA;  &lt;g transform=&#34;rotate(-1 292 171)&#34;&gt;&#xA;    &lt;path d=&#34;M116 115 Q113 101 130 98 L425 101 Q440 102 441 116 L438 181 Q437 196 421 196 L337 194 L309 221 L302 193 L132 191 Q117 190 117 176 Z&#34;&#xA;          fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;&#xA;    &lt;text x=&#34;153&#34; y=&#34;158&#34; fill=&#34;var(--accent, #e787db)&#34; font-family=&#34;Commit Mono, ui-monospace, monospace&#34; font-size=&#34;27&#34; font-weight=&#34;700&#34;&gt;container=yes?&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;&#xA;  &lt;!-- The hardware answer: a big physical router, solid and immovable. --&gt;&#xA;  &lt;g transform=&#34;rotate(0.7 858 388)&#34;&gt;&#xA;    &lt;!-- antennas --&gt;&#xA;    &lt;path d=&#34;M694 277 L670 174 Q667 160 678 157 Q691 155 694 170 L716 276&#34;&#xA;          fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;5&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;&#xA;    &lt;path d=&#34;M1032 274 L1057 166 Q1060 153 1072 156 Q1084 160 1080 173 L1054 280&#34;&#xA;          fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;5&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;&#xA;&#xA;    &lt;!-- top and front planes --&gt;&#xA;    &lt;path d=&#34;M635 284 Q639 269 655 268 L1039 272 Q1052 272 1060 285 L1100 337 L683 340 Z&#34;&#xA;          fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;5&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;&#xA;    &lt;path d=&#34;M683 340 L1100 337 L1087 514 Q1086 528 1070 529 L696 530 Q680 529 680 514 Z&#34;&#xA;          fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;5&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;&#xA;    &lt;path d=&#34;M685 383 C796 379 958 388 1096 381&#34; fill=&#34;none&#34; stroke=&#34;var(--border, #2a2a30)&#34; stroke-width=&#34;3&#34; stroke-linecap=&#34;round&#34;/&gt;&#xA;&#xA;    &lt;!-- vents and status lights --&gt;&#xA;    &lt;g fill=&#34;none&#34; stroke=&#34;var(--fg-faint, #4a4a52)&#34; stroke-width=&#34;3&#34; stroke-linecap=&#34;round&#34;&gt;&#xA;      &lt;path d=&#34;M720 306 l57 0 M791 306 l57 1 M862 307 l57 -1 M933 307 l57 1&#34;/&gt;&#xA;    &lt;/g&gt;&#xA;    &lt;circle cx=&#34;731&#34; cy=&#34;463&#34; r=&#34;7&#34; fill=&#34;var(--link, #78d8bd)&#34;/&gt;&#xA;    &lt;circle cx=&#34;760&#34; cy=&#34;463&#34; r=&#34;7&#34; fill=&#34;var(--fg-heading, #e9a447)&#34;/&gt;&#xA;    &lt;circle cx=&#34;789&#34; cy=&#34;463&#34; r=&#34;7&#34; fill=&#34;var(--fg-muted, #aaaaaf)&#34;/&gt;&#xA;    &lt;path d=&#34;M713 492 q58 5 112 0&#34; fill=&#34;none&#34; stroke=&#34;var(--fg-faint, #4a4a52)&#34; stroke-width=&#34;3&#34; stroke-linecap=&#34;round&#34;/&gt;&#xA;&#xA;    &lt;!-- the unmistakably physical, recessed mode/reset button --&gt;&#xA;    &lt;circle cx=&#34;994&#34; cy=&#34;447&#34; r=&#34;46&#34; fill=&#34;var(--bg, #111114)&#34; stroke=&#34;var(--fg-heading, #e9a447)&#34; stroke-width=&#34;5&#34;/&gt;&#xA;    &lt;circle cx=&#34;994&#34; cy=&#34;447&#34; r=&#34;23&#34; fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--accent, #e787db)&#34; stroke-width=&#34;5&#34;/&gt;&#xA;    &lt;circle cx=&#34;994&#34; cy=&#34;447&#34; r=&#34;8&#34; fill=&#34;var(--fg, #cdcdd0)&#34;/&gt;&#xA;    &lt;path d=&#34;M958 413 q37 -25 73 2 M962 482 q34 21 66 -2&#34;&#xA;          fill=&#34;none&#34; stroke=&#34;var(--fg-muted, #aaaaaf)&#34; stroke-width=&#34;2.5&#34; stroke-linecap=&#34;round&#34; opacity=&#34;0.85&#34;/&gt;&#xA;&#xA;    &lt;!-- feet --&gt;&#xA;    &lt;path d=&#34;M725 530 l-4 16 l44 0 l-5 -16 M1018 529 l-4 17 l45 0 l-6 -17&#34;&#xA;          fill=&#34;var(--fg, #cdcdd0)&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;2&#34; stroke-linejoin=&#34;round&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&#xA;  &lt;!-- Hardware answers. The loose arrow performs the press; no hand is needed. --&gt;&#xA;  &lt;g transform=&#34;rotate(1 865 165)&#34;&gt;&#xA;    &lt;path d=&#34;M650 91 Q648 78 663 76 L1048 78 Q1064 79 1065 94 L1064 160 Q1063 175 1047 176 L941 174 L917 203 L910 174 L665 171 Q650 170 651 155 Z&#34;&#xA;          fill=&#34;var(--bg-secondary, #18181c)&#34; stroke=&#34;var(--fg, #cdcdd0)&#34; stroke-width=&#34;4&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;&#xA;    &lt;text x=&#34;701&#34; y=&#34;137&#34; fill=&#34;var(--link, #78d8bd)&#34; font-family=&#34;Commit Mono, ui-monospace, monospace&#34; font-size=&#34;28&#34; font-weight=&#34;700&#34;&gt;press the button&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;&#xA;  &lt;path d=&#34;M938 200 C1000 238 1058 292 1037 352 C1028 380 1009 393 997 411&#34;&#xA;        fill=&#34;none&#34; stroke=&#34;var(--link, #78d8bd)&#34; stroke-width=&#34;7&#34; stroke-linecap=&#34;round&#34; marker-end=&#34;url(#press-arrow)&#34;/&gt;&#xA;  &lt;path d=&#34;M1019 381 l13 8 M1030 365 l15 4 M1006 393 l8 12&#34;&#xA;        fill=&#34;none&#34; stroke=&#34;var(--fg-heading, #e9a447)&#34; stroke-width=&#34;4&#34; stroke-linecap=&#34;round&#34;/&gt;&#xA;&#xA;  &lt;!-- grounding scribbles --&gt;&#xA;  &lt;g fill=&#34;none&#34; stroke=&#34;var(--border, #2a2a30)&#34; stroke-width=&#34;3&#34; stroke-linecap=&#34;round&#34;&gt;&#xA;    &lt;path d=&#34;M144 557 C286 567 422 554 527 562&#34;/&gt;&#xA;    &lt;path d=&#34;M622 563 C808 552 998 568 1122 559&#34;/&gt;&#xA;  &lt;/g&gt;&#xA;&lt;/svg&gt;&#xA;&#xA;&lt;/figure&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
