<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>DevLab - ripetitor</title>
    <subtitle>A modern Zola theme for developers, documentation and technical blogs.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://ripetitor.codeberg.page/devlab-theme/authors/ripetitor/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://ripetitor.codeberg.page/devlab-theme/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-09-19T00:00:00+00:00</updated>
    <id>https://ripetitor.codeberg.page/devlab-theme/authors/ripetitor/atom.xml</id>
    <entry xml:lang="en">
        <title>DevLab Theme v0.8.0</title>
        <published>2026-09-19T00:00:00+00:00</published>
        <updated>2026-09-19T00:00:00+00:00</updated>
        
        <author>
          <name>RiPetitor</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://ripetitor.codeberg.page/devlab-theme/blog/devlab-theme-v0-8-0/"/>
        <id>https://ripetitor.codeberg.page/devlab-theme/blog/devlab-theme-v0-8-0/</id>
        
        <content type="html" xml:base="https://ripetitor.codeberg.page/devlab-theme/blog/devlab-theme-v0-8-0/">&lt;p&gt;DevLab Theme &lt;code&gt;v0.8.0&lt;/code&gt; is about composition. Authors can build landing sections and plans from reusable Markdown blocks, readers get a table of contents on long posts, and code examples can name the file they belong to. The release also settles the theme&#39;s own layout so sites stop patching it in Sass.&lt;/p&gt;
&lt;p&gt;This release raises the minimum Zola version to &lt;code&gt;0.23.6&lt;/code&gt; and explicitly escapes plain-text component fields when invoked from Markdown. Review overrides that put HTML in titles, labels or profile text: those fields now display it literally. Markdown bodies remain supported. Blog tables of contents are enabled by default; the theme still builds with Zola alone.&lt;/p&gt;
&lt;h2 id=&quot;card-grids&quot;&gt;Card grids&lt;a class=&quot;zola-anchor&quot; href=&quot;#card-grids&quot; aria-label=&quot;Anchor link for: card-grids&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;devlab.cards&lt;/code&gt; arranges &lt;code&gt;devlab.card&lt;/code&gt; children in a responsive grid. A card can link somewhere, carry an icon and a status tag, and hold Markdown:&lt;/p&gt;
&lt;div class=&quot;cards&quot;&gt;
&lt;a class=&quot;card card--link&quot; href=&quot;https://ripetitor.codeberg.page/devlab-theme/docs/getting-started/installation/&quot;&gt;
&lt;div class=&quot;card-head&quot;&gt;&lt;span class=&quot;card-icon&quot;&gt;&lt;span class=&quot;content-icon content-icon-md&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;m9 18 6-6-6-6&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3 class=&quot;card-title&quot;&gt;&lt;span class=&quot;card-title-text&quot;&gt;Install&lt;/span&gt;&lt;span class=&quot;card-indicator&quot; aria-hidden=&quot;true&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;card-body&quot;&gt;&lt;p&gt;Pin a release tag and enable the theme in &lt;code&gt;zola.toml&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;
&lt;a class=&quot;card card--link&quot; href=&quot;https://ripetitor.codeberg.page/devlab-theme/docs/guides/content-components/&quot;&gt;
&lt;div class=&quot;card-head&quot;&gt;&lt;span class=&quot;card-icon&quot;&gt;&lt;span class=&quot;content-icon content-icon-md&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M3 6a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3 class=&quot;card-title&quot;&gt;&lt;span class=&quot;card-title-text&quot;&gt;Content components&lt;/span&gt;&lt;span class=&quot;card-indicator&quot; aria-hidden=&quot;true&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;card-body&quot;&gt;&lt;p&gt;Recipes for card grids, timelines and overview icons.&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;
&lt;a class=&quot;card card--link card--external&quot; href=&quot;https://codeberg.org/RiPetitor/devlab-theme&quot;&gt;
&lt;div class=&quot;card-head&quot;&gt;&lt;span class=&quot;card-icon&quot;&gt;&lt;span class=&quot;content-icon content-icon-md&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M16.2 8.2 12 15l-4.2-6.8h8.4Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;content-badge content-badge-neutral&quot; dir=&quot;auto&quot;&gt;External&lt;/span&gt;&lt;/div&gt;
&lt;h3 class=&quot;card-title&quot;&gt;&lt;span class=&quot;card-title-text&quot;&gt;Codeberg&lt;/span&gt;&lt;span class=&quot;card-indicator&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M15 3h6v6&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M10 14 21 3&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;card-body&quot;&gt;&lt;p&gt;Source code, issues and release tags.&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;A linked card adds a trailing arrow, an absolute HTTP(S) destination switches it to the external-link marker, and a static card omits the arrow entirely. Docs overview cards gained the same icon slot through an optional &lt;code&gt;[extra] icon&lt;/code&gt; in section or page front matter, so a documentation landing page no longer needs hand-written markup.&lt;/p&gt;
&lt;h2 id=&quot;status-timelines&quot;&gt;Status timelines&lt;a class=&quot;zola-anchor&quot; href=&quot;#status-timelines&quot; aria-label=&quot;Anchor link for: status-timelines&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;devlab.timeline&lt;/code&gt; presents a plan as ordered stages. Each stage declares a &lt;code&gt;status&lt;/code&gt; and can add a date and a custom label:&lt;/p&gt;
&lt;ol class=&quot;timeline&quot;&gt;
&lt;li class=&quot;timeline-item timeline-item--done&quot;&gt;&lt;span class=&quot;timeline-marker&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;div class=&quot;timeline-content&quot;&gt;&lt;p class=&quot;timeline-meta&quot;&gt;&lt;span class=&quot;content-badge content-badge-success&quot;&gt;Done&lt;/span&gt;&lt;span class=&quot;timeline-date&quot; dir=&quot;ltr&quot;&gt;2026-08&lt;/span&gt;&lt;/p&gt;&lt;h3 class=&quot;timeline-title&quot;&gt;Bring-up&lt;/h3&gt;&lt;div class=&quot;timeline-body&quot;&gt;&lt;p&gt;UART, bootloader, kernel, Device Tree and internal storage.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;timeline-item timeline-item--active&quot;&gt;&lt;span class=&quot;timeline-marker&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;div class=&quot;timeline-content&quot;&gt;&lt;p class=&quot;timeline-meta&quot;&gt;&lt;span class=&quot;content-badge content-badge-info&quot;&gt;In progress&lt;/span&gt;&lt;span class=&quot;timeline-date&quot; dir=&quot;ltr&quot;&gt;2026-09&lt;/span&gt;&lt;/p&gt;&lt;h3 class=&quot;timeline-title&quot;&gt;Hardware validation&lt;/h3&gt;&lt;div class=&quot;timeline-body&quot;&gt;&lt;p&gt;Network, USB, wireless, display, audio and sensors.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;timeline-item timeline-item--planned&quot;&gt;&lt;span class=&quot;timeline-marker&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;div class=&quot;timeline-content&quot;&gt;&lt;p class=&quot;timeline-meta&quot;&gt;&lt;span class=&quot;content-badge content-badge-neutral&quot;&gt;Planned&lt;/span&gt;&lt;span class=&quot;timeline-date&quot; dir=&quot;ltr&quot;&gt;Q4 2026&lt;/span&gt;&lt;/p&gt;&lt;h3 class=&quot;timeline-title&quot;&gt;Preview&lt;/h3&gt;&lt;div class=&quot;timeline-body&quot;&gt;&lt;p&gt;Test image with known limitations and pinned component versions.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;timeline-item timeline-item--planned&quot;&gt;&lt;span class=&quot;timeline-marker&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;div class=&quot;timeline-content&quot;&gt;&lt;p class=&quot;timeline-meta&quot;&gt;&lt;span class=&quot;content-badge content-badge-neutral&quot;&gt;Release&lt;/span&gt;&lt;/p&gt;&lt;h3 class=&quot;timeline-title&quot;&gt;Supported&lt;/h3&gt;&lt;div class=&quot;timeline-body&quot;&gt;&lt;p&gt;Regression matrix on a release candidate before the stable release.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Supported statuses are &lt;code&gt;done&lt;/code&gt;, &lt;code&gt;active&lt;/code&gt;, &lt;code&gt;planned&lt;/code&gt; and &lt;code&gt;blocked&lt;/code&gt;; an unknown value falls back to &lt;code&gt;planned&lt;/code&gt;. The state is carried by the badge text as well as the marker colour, so a plan still reads without colour.&lt;/p&gt;
&lt;h2 id=&quot;blog-tables-of-contents&quot;&gt;Blog tables of contents&lt;a class=&quot;zola-anchor&quot; href=&quot;#blog-tables-of-contents&quot; aria-label=&quot;Anchor link for: blog-tables-of-contents&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Long posts now render a table of contents. On wide screens the article stays centered and the scrollable table of contents sits at the viewport edge. Below that width it collapses into a disclosure above the body. Both versions highlight the current section as the reader scrolls.&lt;/p&gt;
&lt;p&gt;The Blog also uses a wider canvas than before, which puts that space to work without stretching the reading measure. Set &lt;code&gt;devlab.blog.show_toc = false&lt;/code&gt; to publish posts without a table of contents; posts with fewer than two headings stay unchanged.&lt;/p&gt;
&lt;h2 id=&quot;code-blocks-that-name-their-file&quot;&gt;Code blocks that name their file&lt;a class=&quot;zola-anchor&quot; href=&quot;#code-blocks-that-name-their-file&quot; aria-label=&quot;Anchor link for: code-blocks-that-name-their-file&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Zola already carries the &lt;code&gt;name&lt;/code&gt; annotation of a fenced block into the rendered HTML. DevLab now shows it as the block title and demotes the language to a supporting chip:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot; data-name=&quot;build.sh&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #444D56);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;make&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;j&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;nproc&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The toolbar reads the caption from Zola&#39;s &lt;code&gt;data-name&lt;/code&gt; attribute and keeps it outside the copied source. The toolbar also prints readable language labels, which turns Zola&#39;s internal syntax names into &lt;code&gt;Shell&lt;/code&gt;, &lt;code&gt;Text&lt;/code&gt; and similar.&lt;/p&gt;
&lt;p&gt;Syntax colors now follow the code block&#39;s own &lt;code&gt;--color-pre-scheme&lt;/code&gt; token. A site can use dark code blocks on a light page without getting light-theme syntax colors on the dark background. Set this token alongside &lt;code&gt;--color-pre-bg&lt;/code&gt; and &lt;code&gt;--color-pre-fg&lt;/code&gt; in custom palettes.&lt;/p&gt;
&lt;h2 id=&quot;navigation-and-feed-fixes&quot;&gt;Navigation and feed fixes&lt;a class=&quot;zola-anchor&quot; href=&quot;#navigation-and-feed-fixes&quot; aria-label=&quot;Anchor link for: navigation-and-feed-fixes&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Nested Docs navigation, breadcrumbs and previous/next links now preserve the current language. Blog author links use Zola&#39;s taxonomy URLs, including author names with spaces. Feed discovery follows &lt;code&gt;feed_filenames&lt;/code&gt;, and author feed links use the first configured file with an accessible, configurable label.&lt;/p&gt;
&lt;h2 id=&quot;footer-links-with-names&quot;&gt;Footer links with names&lt;a class=&quot;zola-anchor&quot; href=&quot;#footer-links-with-names&quot; aria-label=&quot;Anchor link for: footer-links-with-names&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Footer links used to collapse to an icon whenever one was configured. &lt;code&gt;devlab.footer.show_link_names = true&lt;/code&gt; renders every link as its icon plus the visible name and shows the configured group label as a heading. The compact footer in the Docs sidebar and mobile panel follows the same setting, and icon-only links remain the default.&lt;/p&gt;
&lt;h2 id=&quot;content-media-and-narrow-tables&quot;&gt;Content media and narrow tables&lt;a class=&quot;zola-anchor&quot; href=&quot;#content-media-and-narrow-tables&quot; aria-label=&quot;Anchor link for: content-media-and-narrow-tables&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Content images had no theme rules at all: an oversized image could leave the column. Images are now constrained to the content width, figure images and captions are styled, and table cells tighten on narrow screens next to the existing horizontal scroll. The theme also ships a &lt;code&gt;visually-hidden&lt;/code&gt; utility.&lt;/p&gt;
&lt;h2 id=&quot;a-quieter-default&quot;&gt;A quieter default&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-quieter-default&quot; aria-label=&quot;Anchor link for: a-quieter-default&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The release also removes rough edges that consumer sites were working around in their own Sass:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A callout keeps the author&#39;s title casing instead of capitalizing every word, and an unknown &lt;code&gt;type&lt;/code&gt; falls back to &lt;code&gt;info&lt;/code&gt; with a readable label.&lt;/li&gt;
&lt;li&gt;Docs pages without headings no longer reserve an empty table of contents column.&lt;/li&gt;
&lt;li&gt;Docs overview cards use the full content column instead of stopping at a fixed width, and step lists keep their spacing against the following block.&lt;/li&gt;
&lt;li&gt;Blog article titles no longer break at a narrow character limit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your site patched any of these, the override can go.&lt;/p&gt;
&lt;h2 id=&quot;previously-on-the-development-branch&quot;&gt;Previously on the development branch&lt;a class=&quot;zola-anchor&quot; href=&quot;#previously-on-the-development-branch&quot; aria-label=&quot;Anchor link for: previously-on-the-development-branch&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Three features that were available only on &lt;code&gt;main&lt;/code&gt; now ship in a tagged release: the dismissible &lt;a href=&quot;https://ripetitor.codeberg.page/devlab-theme/docs/guides/announcements/&quot;&gt;announcement banner&lt;/a&gt;, reusable &lt;a href=&quot;https://ripetitor.codeberg.page/devlab-theme/docs/guides/community/&quot;&gt;community cards&lt;/a&gt; and &lt;a href=&quot;https://ripetitor.codeberg.page/devlab-theme/docs/guides/blog-authors/&quot;&gt;Blog author profiles&lt;/a&gt;. Sites that waited for a tag can adopt them without tracking the development branch.&lt;/p&gt;
&lt;h2 id=&quot;upgrading-from-v0-7-0&quot;&gt;Upgrading from v0.7.0&lt;a class=&quot;zola-anchor&quot; href=&quot;#upgrading-from-v0-7-0&quot; aria-label=&quot;Anchor link for: upgrading-from-v0-7-0&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Update the pinned theme tag to &lt;code&gt;v0.8.0&lt;/code&gt; using &lt;a href=&quot;https://ripetitor.codeberg.page/devlab-theme/docs/getting-started/installation/&quot;&gt;Install and update&lt;/a&gt; after the tag is published.&lt;/li&gt;
&lt;li&gt;Upgrade Zola to &lt;code&gt;0.23.6&lt;/code&gt; or newer. Review component overrides: titles, labels and profile text are plain text, while component bodies can still contain Markdown.&lt;/li&gt;
&lt;li&gt;Posts with at least two headings now render a table of contents. Set &lt;code&gt;devlab.blog.show_toc = false&lt;/code&gt; to opt out.&lt;/li&gt;
&lt;li&gt;Review footer links. Icon-only links are unchanged; enable &lt;code&gt;show_link_names&lt;/code&gt; only when the labels should be visible.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;name=&lt;/code&gt; to fenced blocks whose file or path matters at a glance. Existing blocks render as before.&lt;/li&gt;
&lt;li&gt;Remove site-owned Sass that duplicates content images, figure captions, narrow tables, callout casing, the Docs table of contents or Blog title width.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;zola check&lt;/code&gt; and &lt;code&gt;zola build&lt;/code&gt;, then inspect the new components at a narrow viewport and with a keyboard.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The complete component contracts live in &lt;a href=&quot;https://ripetitor.codeberg.page/devlab-theme/docs/reference/components/&quot;&gt;Tera components&lt;/a&gt;, the new recipes in &lt;a href=&quot;https://ripetitor.codeberg.page/devlab-theme/docs/guides/content-components/&quot;&gt;Content components&lt;/a&gt;, and every setting in the &lt;a href=&quot;https://ripetitor.codeberg.page/devlab-theme/docs/reference/configuration/&quot;&gt;configuration reference&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;compatibility&quot;&gt;Compatibility&lt;a class=&quot;zola-anchor&quot; href=&quot;#compatibility&quot; aria-label=&quot;Anchor link for: compatibility&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;DevLab Theme &lt;code&gt;v0.8.0&lt;/code&gt; requires Zola &lt;code&gt;0.23.6&lt;/code&gt; or newer. Theme consumers still build with Zola alone: Node.js and npm are not runtime or site-build requirements, and the bundled diagram renderer does not depend on a remote service.&lt;/p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>DevLab Theme v0.7.0</title>
        <published>2026-09-01T00:00:00+00:00</published>
        <updated>2026-09-01T00:00:00+00:00</updated>
        
        <author>
          <name>RiPetitor</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://ripetitor.codeberg.page/devlab-theme/blog/devlab-theme-v0-7-0/"/>
        <id>https://ripetitor.codeberg.page/devlab-theme/blog/devlab-theme-v0-7-0/</id>
        
        <content type="html" xml:base="https://ripetitor.codeberg.page/devlab-theme/blog/devlab-theme-v0-7-0/">&lt;p&gt;DevLab Theme &lt;code&gt;v0.7.0&lt;/code&gt; focuses on the daily work around technical content. Maintainers can connect a Docs page to its source, writers gain reusable structures for commands and architecture, and readers get clearer code examples without adding a frontend build step to the site.&lt;/p&gt;
&lt;p&gt;The new features are additive. Existing &lt;code&gt;v0.6.0&lt;/code&gt; content continues to render, page provenance remains opt-in and pages that do not use diagrams do not download the diagram renderer.&lt;/p&gt;
&lt;h2 id=&quot;documentation-connected-to-its-source&quot;&gt;Documentation connected to its source&lt;a class=&quot;zola-anchor&quot; href=&quot;#documentation-connected-to-its-source&quot; aria-label=&quot;Anchor link for: documentation-connected-to-its-source&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Docs pages can now show an authored update date, copy their current URL and link directly to contribution or issue workflows:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;extra&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;devlab&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;docs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;page_actions&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;show_last_updated&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;show_copy_link&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;edit_url&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;https://codeberg.org/acme/project/_edit/main/content/&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;report_url&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;https://codeberg.org/acme/project/issues/new&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;date_format&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; &amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;%Y-%m-%d&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The update date is rendered only when a page defines Zola&#39;s native &lt;code&gt;updated&lt;/code&gt; field. DevLab does not substitute a build timestamp or publication date. The edit link appends the real source-relative path, while the icon-only Copy link control preserves an active heading fragment when the Clipboard API is available. Editing lives beside the table of contents on wide screens, and the feedback destination closes the article as a dedicated discussion card.&lt;/p&gt;
&lt;p&gt;Every action can be enabled independently. Omitting the complete table keeps the previous page footer unchanged.&lt;/p&gt;
&lt;h2 id=&quot;commands-that-keep-their-context&quot;&gt;Commands that keep their context&lt;a class=&quot;zola-anchor&quot; href=&quot;#commands-that-keep-their-context&quot; aria-label=&quot;Anchor link for: commands-that-keep-their-context&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Tabs now support an optional synchronization key. Groups sharing the key remember the selected value and update together, which is useful when one guide repeats operating-system, package-manager or deployment choices.&lt;/p&gt;
&lt;div
  class=&quot;content-tabs&quot;
  data-content-tabs
  data-tabs-label=&quot;Preview command&quot;
  data-tabs-sync=&quot;release-shell&quot;
&gt;
&lt;section
  class=&quot;content-tab-panel&quot;
  data-content-tab
  data-tab-name=&quot;Unix&quot;
  data-tab-value=&quot;unix&quot;
  data-tab-selected=&quot;true&quot;
&gt;
  &lt;p class=&quot;content-tab-fallback-label&quot; data-tab-fallback-label&gt;Unix&lt;/p&gt;
  &lt;div class=&quot;content-tab-body&quot;&gt;
    &lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;zola&lt;/span&gt;&lt;span style=&quot;color: light-dark(#032F62, #9ECBFF);&quot;&gt; serve&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/section&gt;
&lt;section
  class=&quot;content-tab-panel&quot;
  data-content-tab
  data-tab-name=&quot;Windows&quot;
  data-tab-value=&quot;windows&quot;
  data-tab-selected=&quot;false&quot;
&gt;
  &lt;p class=&quot;content-tab-fallback-label&quot; data-tab-fallback-label&gt;Windows&lt;/p&gt;
  &lt;div class=&quot;content-tab-body&quot;&gt;
    &lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#005CC5, #79B8FF);&quot;&gt;zola.exe&lt;/span&gt;&lt;span&gt; serve&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;p&gt;Without JavaScript, every panel remains readable. With enhancement enabled, the control follows the horizontal tabs keyboard pattern, mirrors arrow behavior in RTL layouts and stores only the selected value.&lt;/p&gt;
&lt;h2 id=&quot;project-structure-without-hand-drawn-connectors&quot;&gt;Project structure without hand-drawn connectors&lt;a class=&quot;zola-anchor&quot; href=&quot;#project-structure-without-hand-drawn-connectors&quot; aria-label=&quot;Anchor link for: project-structure-without-hand-drawn-connectors&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The new file-tree components replace fragile ASCII layouts with semantic folders and files. Folders use the browser&#39;s native disclosure control and remain collapsible without JavaScript.&lt;/p&gt;
&lt;figure class=&quot;content-file-tree&quot;&gt;&lt;figcaption class=&quot;file-tree-label&quot; dir=&quot;auto&quot;&gt;Release workspace&lt;/figcaption&gt;&lt;ul class=&quot;file-tree-list&quot;&gt;
&lt;li class=&quot;file-tree-item file-tree-folder&quot;&gt;&lt;details class=&quot;file-tree-folder-details&quot; open&gt;&lt;summary class=&quot;file-tree-row file-tree-folder-row&quot;&gt;&lt;span class=&quot;file-tree-indicator&quot; aria-hidden=&quot;true&quot;&gt;&amp;rsaquo;&lt;/span&gt;&lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M3 6a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;span class=&quot;file-tree-name&quot; dir=&quot;auto&quot;&gt;devlab-theme&lt;/span&gt;&lt;/summary&gt;&lt;ul class=&quot;file-tree-list file-tree-children&quot;&gt;
&lt;li class=&quot;file-tree-item file-tree-file&quot;&gt;&lt;div class=&quot;file-tree-row file-tree-file-row&quot;&gt;&lt;span class=&quot;file-tree-indicator-spacer&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M6 2h8l4 4v16H6Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 2v5h4&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;span class=&quot;file-tree-name&quot; dir=&quot;auto&quot;&gt;theme.toml&lt;/span&gt;&lt;span class=&quot;file-tree-note&quot; dir=&quot;auto&quot;&gt;Release metadata&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;file-tree-item file-tree-folder&quot;&gt;&lt;details class=&quot;file-tree-folder-details&quot; open&gt;&lt;summary class=&quot;file-tree-row file-tree-folder-row&quot;&gt;&lt;span class=&quot;file-tree-indicator&quot; aria-hidden=&quot;true&quot;&gt;&amp;rsaquo;&lt;/span&gt;&lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M3 6a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;span class=&quot;file-tree-name&quot; dir=&quot;auto&quot;&gt;content&lt;/span&gt;&lt;/summary&gt;&lt;ul class=&quot;file-tree-list file-tree-children&quot;&gt;
&lt;li class=&quot;file-tree-item file-tree-file&quot;&gt;&lt;div class=&quot;file-tree-row file-tree-file-row&quot;&gt;&lt;span class=&quot;file-tree-indicator-spacer&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M6 2h8l4 4v16H6Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 2v5h4&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;span class=&quot;file-tree-name&quot; dir=&quot;auto&quot;&gt;docs&lt;/span&gt;&lt;span class=&quot;file-tree-note&quot; dir=&quot;auto&quot;&gt;Product documentation&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;file-tree-item file-tree-file&quot;&gt;&lt;div class=&quot;file-tree-row file-tree-file-row&quot;&gt;&lt;span class=&quot;file-tree-indicator-spacer&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M6 2h8l4 4v16H6Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 2v5h4&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;span class=&quot;file-tree-name&quot; dir=&quot;auto&quot;&gt;blog&lt;/span&gt;&lt;span class=&quot;file-tree-note&quot; dir=&quot;auto&quot;&gt;Release notes&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/details&gt;&lt;/li&gt;
&lt;li class=&quot;file-tree-item file-tree-file&quot;&gt;&lt;div class=&quot;file-tree-row file-tree-file-row&quot;&gt;&lt;span class=&quot;file-tree-indicator-spacer&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M6 2h8l4 4v16H6Z&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 2v5h4&quot;&gt;&lt;/path&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;span class=&quot;file-tree-name&quot; dir=&quot;auto&quot;&gt;THIRD_PARTY_NOTICES.md&lt;/span&gt;&lt;span class=&quot;file-tree-note&quot; dir=&quot;auto&quot;&gt;Vendored dependency notices&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/details&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/figure&gt;
&lt;p&gt;Compact badges complement the tree when a status belongs inside a sentence: Release &lt;span class=&quot;content-badge content-badge-success&quot; dir=&quot;auto&quot;&gt;Stable&lt;/span&gt; API &lt;span class=&quot;content-badge content-badge-info&quot; dir=&quot;auto&quot;&gt;Beta&lt;/span&gt; Migration &lt;span class=&quot;content-badge content-badge-neutral&quot; dir=&quot;auto&quot;&gt;Not required&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Badge text carries the meaning independently of color, and folder or file names use automatic text direction for mixed-language documentation.&lt;/p&gt;
&lt;h2 id=&quot;architecture-as-authored-content&quot;&gt;Architecture as authored content&lt;a class=&quot;zola-anchor&quot; href=&quot;#architecture-as-authored-content&quot; aria-label=&quot;Anchor link for: architecture-as-authored-content&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;devlab.diagram&lt;/code&gt; turns a compact Mermaid-compatible source into a responsive SVG that follows the active DevLab palette:&lt;/p&gt;
&lt;figure class=&quot;content-diagram&quot; data-devlab-diagram data-diagram-state=&quot;loading&quot; data-diagram-source=&quot;CmZsb3djaGFydCBMUgogIHNvdXJjZVsiQXV0aG9yZWQgY29udGVudCJdCiAgY2hlY2tbIlpvbGEgY2hlY2siXQogIGRvY3NbIkRvY3VtZW50YXRpb24iXQogIHJlbGVhc2VbIlRhZ2dlZCByZWxlYXNlIl0KCiAgc291cmNlIC0tPiBjaGVjawogIGNoZWNrIC0tPiBkb2NzCiAgZG9jcyAtLT4gcmVsZWFzZQo=&quot; data-diagram-error=&quot;Diagram could not be rendered.&quot;&gt;&lt;figcaption class=&quot;diagram-caption&quot;&gt;&lt;strong class=&quot;diagram-label&quot; id=&quot;release-authoring-flow-label&quot; dir=&quot;auto&quot;&gt;Release authoring flow&lt;/strong&gt;&lt;span class=&quot;diagram-description&quot; id=&quot;release-authoring-flow-description&quot; dir=&quot;auto&quot;&gt;Source content becomes checked documentation and then a tagged release.&lt;/span&gt;&lt;/figcaption&gt;&lt;div class=&quot;diagram-stage&quot; data-devlab-diagram-stage role=&quot;img&quot; aria-labelledby=&quot;release-authoring-flow-label&quot; aria-describedby=&quot;release-authoring-flow-description&quot; aria-busy=&quot;true&quot;&gt;&lt;/div&gt;&lt;noscript&gt;&lt;style&gt;.content-diagram[data-diagram-state=&quot;loading&quot;] .diagram-stage{display:none}&lt;/style&gt;&lt;p class=&quot;diagram-noscript&quot;&gt;Diagram could not be rendered.&lt;/p&gt;&lt;/noscript&gt;&lt;/figure&gt;
&lt;p&gt;The self-contained renderer is bundled with the theme and makes no font or CDN request. Its cost is isolated to pages that contain a diagram: approximately 1.6 MB minified or 495 KB gzip. The component provides a visible caption, an accessible description and a source fallback when rendering is unavailable.&lt;/p&gt;
&lt;p&gt;Flowcharts, state, sequence, class, ER and XY diagrams are supported. Diagram input should remain trusted, repository-authored content rather than visitor input.&lt;/p&gt;
&lt;h2 id=&quot;code-blocks-with-a-deliberate-hierarchy&quot;&gt;Code blocks with a deliberate hierarchy&lt;a class=&quot;zola-anchor&quot; href=&quot;#code-blocks-with-a-deliberate-hierarchy&quot; aria-label=&quot;Anchor link for: code-blocks-with-a-deliberate-hierarchy&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Fenced code now renders as a composed panel with a language toolbar, an icon-only Copy control, clearer line numbers and a visible highlighted-line treatment. Copy feedback changes the icon while retaining localized accessible labels and a polite live announcement.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);&quot; &gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #444D56);&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt; release&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #F97583);&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;str&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #444D56);&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;    check_site&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot; style=&quot;background-color: light-dark(#F6F8FA, #2B3036);&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #444D56);&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #B392F0);&quot;&gt;    publish_tag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #444D56);&quot;&gt;4&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Long lines scroll inside the panel instead of widening the page. Only blocks that actually overflow enter the keyboard tab order, and copied text continues to exclude visual line numbers.&lt;/p&gt;
&lt;h2 id=&quot;upgrading-from-v0-6-0&quot;&gt;Upgrading from v0.6.0&lt;a class=&quot;zola-anchor&quot; href=&quot;#upgrading-from-v0-6-0&quot; aria-label=&quot;Anchor link for: upgrading-from-v0-6-0&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Update the pinned theme tag to &lt;code&gt;v0.7.0&lt;/code&gt; using &lt;a href=&quot;https://ripetitor.codeberg.page/devlab-theme/docs/getting-started/installation/&quot;&gt;Install and update&lt;/a&gt; after the tag is published.&lt;/li&gt;
&lt;li&gt;Keep Zola &lt;code&gt;0.23.4&lt;/code&gt;; this release does not change the current Zola target.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;devlab.docs.page_actions&lt;/code&gt; only when the site has real source and feedback destinations.&lt;/li&gt;
&lt;li&gt;Replace hand-written command switches, file trees or architecture drawings gradually; existing Markdown does not require conversion.&lt;/li&gt;
&lt;li&gt;Review site-owned Sass overrides that target code blocks, Docs page footers or component internals.&lt;/li&gt;
&lt;li&gt;Account for the diagram payload before adding diagrams to frequently visited pages.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;zola check&lt;/code&gt; and &lt;code&gt;zola build&lt;/code&gt;, then inspect interactive components with a keyboard and at a narrow viewport.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The complete syntax and parameter contracts live in &lt;a href=&quot;https://ripetitor.codeberg.page/devlab-theme/docs/reference/components/&quot;&gt;Tera components&lt;/a&gt;, while page actions are documented in the &lt;a href=&quot;https://ripetitor.codeberg.page/devlab-theme/docs/reference/configuration/#page-provenance-actions&quot;&gt;configuration reference&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;compatibility&quot;&gt;Compatibility&lt;a class=&quot;zola-anchor&quot; href=&quot;#compatibility&quot; aria-label=&quot;Anchor link for: compatibility&quot;&gt;
  &lt;span class=&quot;content-icon content-icon-sm&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;svg focusable=&quot;false&quot; class=&quot;social-icon&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M10 13a5 5 0 0 0 7.5.5l3-3a5 5 0 0 0-7-7l-1.5 1.5&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M14 11a5 5 0 0 0-7.5-.5l-3 3a5 5 0 0 0 7 7l1.5-1.5&quot;&gt;&lt;/path&gt;&lt;/svg&gt;

  &lt;/span&gt;
&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;DevLab Theme &lt;code&gt;v0.7.0&lt;/code&gt; targets Zola &lt;code&gt;0.23.4&lt;/code&gt;. Theme consumers still build with Zola alone: Node.js and npm are not runtime or site-build requirements, and the checked-in diagram renderer does not depend on a remote service.&lt;/p&gt;
</content>
        
    </entry>
</feed>
