Hi~ The following might be one way to implement it.
#let cap = [T]
#let marker-size = .2em
#let dot-box = context {
let t-height = measure({
cap
}).height
set text(baseline: (t-height - marker-size) / 2)
box(height: marker-size,width: marker-size, fill: black, radius: marker-size)
}
#set list(marker: dot-box)
#set text(size: 12pt)
- Text at 12pt (Standard)
\
#set text(size: 24pt)
- Text at 24pt (Large)
\
#set text(size: 8pt)
- Text at 8pt (Small)
#set text(size: 2em)
Because the alignment of different characters depends heavily on the `text` settings, we set `list.marker` as a `box` to facilitate alignment. The native implementation of lists in Typst uses the `grid` function, so `list.marker` and its body are *top-aligned*. Setting the baseline of `list.marker` aligns it with the capital letters of the first line.
Note: If the height of the current line is greater than the height of one character, there is still a problem. For example,
#set text(size: 24pt)
- Text at 24pt (Large) #box(stroke: 1pt, height: 1em, width: 1em)
Another way: use the package itemize.
#import "@preview/itemize:0.2.0" as el
#let marker-size = .2em
#let dot-box = {
box(height: marker-size,width: marker-size, fill: black, radius: marker-size)
}
#set list(marker: dot-box)
#let center-list(doc) = {
show : el.default-list.with(label-baseline: "center")
doc
}
#center-list[
#set text(size: 24pt)
- Text at 24pt (Large) #box(stroke: 1pt, height: 1em, width: 1em)
]
Or, for all lists in the document, use
#import "@preview/itemize:0.2.0" as el
#let marker-size = .2em
#let dot-box = {
box(height: marker-size,width: marker-size, fill: black, radius: marker-size)
}
#set list(marker: dot-box)
#show : el.default-list.with(label-baseline: "center")

Note: This can still be problematic at times, for example, when the font size of the capital letters in the first line differs from the font size of the current line, etc.
Finally, if it is necessary to interpret the list as one list (without using line breaks), it is typically very difficult to achieve. However, by using itemize to take control of the font size settings for each item, this is feasible. For example:
#import "@preview/itemize:0.2.0" as el
#let marker-size = .2em
#let dot-box = {
box(height: marker-size,width: marker-size, fill: black, radius: marker-size)
}
#let per-size = (12pt, 24pt, 8pt, auto) // >= 4-item, use the current text size
#set list(marker: dot-box)
#show : el.default-list.with(
size: ((per-size),auto), // only for 1-level
label-baseline: "center",
body-format: (
style: (
size: (per-size, auto)
)
)
)
#set text(size: 12pt)
- Text at 12pt (Standard)
- #lorem(2)
- #lorem(2)
- #lorem(2)
- Text at 24pt (Large)
- #lorem(2)
#show list: it => it // in order to treat the next list as a new list
#set text(size: 12pt)
- #lorem(2)
- #lorem(2)
- Text at 8pt (Small)