English
About this handbook

This handbook belongs to the template Example for QuartzControl. It explains the template and, at the same time, shows everything it can do.

The text here comes from a Markdown file, not from the configuration.

The instances

KeyPlaceFormWhat it shows
layoutBoxMarkheaderinline, SVG light/darkimage switching, {{root}}, {{siteTitle}}
layoutBoxPageNameheaderinline, empty span{{frontmatter.section}} inside an attribute
layoutBoxNoteleft columnfile: with .md, collapsedMarkdown snippet, <details>
layoutBoxCtaafter the contentinline, own class{{root}}, {{siteTitle}}, title:
layoutBoxHintafter the contentinline, mobile onlydisplay: mobile-only on one instance
layoutBoxColophonfooterinline{{locale}}, {{slug}}
—footerinline, nothing but a <style>{{slug}} as part of a selector

The last one has no key in the frontmatter, and it is not a box in the usual sense either: it outputs nothing but a <style> and is hidden itself. Why it exists all the same stands further down.

Six of seven use html:, one uses file:

Until 6 September 2026 that was a necessity: snippet files live in quartz/static/snippets/, and no part of a template package collected that folder. An instance with file: arrived in the importing project pointing at nothing.

Since then the part Static files carries everything under quartz/static/, and both ways work. The split has become a demonstration: the one file: instance shows the path through a file, the six others show that markup inside a config entry cannot arrive without that entry in the first place. That is also why the word mark stays an inline SVG.

The design per place

The place in the layout decides the form: a box in the header is a word mark, the same component after the content is a call to action with a surface and a bar, in the footer a small centred line.

Four of them speak two languages

Four of the seven carry text and therefore stand in the configuration twice: once in German as the base setting, once in English under byLang.

options:
  file: sidebar-note.md
  title: Über dieses Handbuch
  byLang:
    en:
      file: sidebar-note.en.md
      title: About this handbook

The plugin reads the field lang from the page’s frontmatter — the same one Quartz writes <html lang> from — and merges the matching entry over the base setting. It needs no partner for that: whether lang comes from the multilanguage plugin or was written by hand is all the same to it.

The other three carry no prose: the word mark carries the site’s name, which is not translated; the chapter name in the bar comes out of the page’s own frontmatter and is therefore already in its language; and the last one outputs no text at all.

This used to stand in every page

Until 5 September 2026 there was no byLang, and every one of the 126 English pages carried four blocks in its own frontmatter — 876 lines all saying the same thing. The headings could not be translated at all, because the frontmatter control did not know a title back then. The plugin caught up on both that day.

Two instances that display nothing

The two youngest boxes are not boxes. They use the plugin for what it is at heart: a way to get markup to a particular place on the page — with placeholders resolved while that one page is rendered.

The chapter name in the bar is an empty span that pulls its text out of an attribute via content: attr(). That sounds roundabout and is the only way to survive a page with no frontmatter: a placeholder it cannot resolve, the plugin leaves standing as literal text — with the value in the text, 72 of the 345 built pages would have shown {{frontmatter.section}} in the bar. In an attribute, exactly that can be tested ([data-section^="{{"]) and the box hidden.

The folder-page marker renders a <style> that knows only the current page. It is the only way to mark, in the explorer, the folder page you are standing on: the explorer plugin sets its .active class on file rows only, a folder row carries nothing but a data-folderpath, and the current page stands in <body data-slug>. No selector can compare two attributes with each other. So the rule is built rather than looked for — {{slug}} is available while the page renders and fills exactly the one value the selector needs.

Which variables apply here

These 27 variables are read by plugin-layout-box.scss. They can be changed in QuartzControl under Styles → Variables — without a line of CSS.

VariableValuealso applies to
--codeFont"Noto Sans Mono", ui-monospace, SFMono-Re…4 other components
--darkgray#333333 · dark #DDDDDD18 other components
--gray#5F5F5F · dark #A1A1A122 other components
--headerFont"Noto Sans", system-ui, "Segoe UI", Robot…15 other components
--secondary#1463A3 · dark #699DC319 other components
--tertiary#196B6B · dark #2CAFADBody text, 2.9 – Diagrams
--tpl-accent-bar3px6 other components
--tpl-leading-snug1.4rem4 other components
--tpl-radius-md8px17 other components
--tpl-radius-sm4px10 other components
--tpl-rulevar(--lightgray) = #DDDDDD19 other components
--tpl-rule-strongvar(--gray) = #5F5F5F8 other components
--tpl-rule-width1px25 other components
--tpl-space-2xs0.25rem16 other components
--tpl-space-3xs0.125rem6 other components
--tpl-space-lg1.5rem12 other components
--tpl-space-md1rem18 other components
--tpl-space-sm0.75rem10 other components
--tpl-space-xl2.5rem5 other components
--tpl-space-xs0.5rem20 other components
--tpl-surfacevar(--lightgray) = #DDDDDD6 other components
--tpl-surface-tintvar(--highlight) = rgba(42, 78, 108, 0.10)14 other components
--tpl-text-base1rem4 other components
--tpl-text-sm0.875rem20 other components
--tpl-text-xs0.78rem10 other components
--tpl-tracking-label0.08em9 other components
--tpl-underline-offset0.18em6 other components

This table is generated: it is read out of the stylesheets rather than kept by hand.

Read on

This page belongs to Example — the example template for QuartzControl. An overview of every area is on the English home page.

On a narrow screen the navigation is collapsed at the top.