I somehow can’t think of any packages or templates which would style only the level one headings.
However, that might be because it’s a manageable challenge:
#set par(justify: true)
#set heading(numbering: "1.1")
#show heading: it => {
block(
width: 100%,
height: 4em,
above: 2em,
below: 1em,
inset: 1em,
fill: luma(95%),
place(
dx: 1.5em,
dy: -2em,
top + right,
text(
size: 3em,
weight: "semibold",
style: "italic",
fill: luma(70%),
counter(heading).display(),
)
)
+
place(
bottom + right,
text(
font: "Libertinus Sans",
it.body,
)
)
)
}
#lorem(100)
= Bjornstrup chapter layout
#lorem(100)
Output of Bjornstrup
#set par(justify: true)
#set heading(numbering: "1.1")
#show heading: it => {
block(
width: 100%,
height: 3em,
above: 3em,
below: 1em,
inset: 1em,
stroke: (x: 2pt, y: 1pt),
place(
dx: -1em,
dy: -2.3em,
top + left,
text(
size: 2em,
weight: "regular",
box(
fill: white,
outset: (x: 0.1em, bottom: 0.3em),
text(
size: 0.6em,
tracking: 0.01em,
font: "Libertinus Sans",
upper("Chapter"),
)
+ sym.space.med +
counter(heading).display()
),
)
)
+
place(
dx: 1.1em,
dy: 1em,
bottom + right,
text(
weight: "regular",
tracking: 0.05em,
box(
fill: white,
outset: (x: 0.2em, y: 0.3em),
upper(it.body)
),
)
)
)
}
#lorem(100)
= Glenn chapter layout
#lorem(100)
Output of Glenn
Don’t get overwhelmed by the amount of indentation, it’s there so that you don’t get lost in the nesting.
As you can tell, using a show rule the heading element is taken apart, and then it’s only a matter of positioning those parts.