.text-center-fr-fr :is(p, h1, h2, h3, h4, h5, h6) {
    /* metrics */
    --metrics-cap-height: 1;
    --metrics-units-per-em: 1;
    --metrics-absolute-descent: 1;
    --metrics-ascent: 1;
    --metrics-line-gap: 1;

    /* options */
    --font-scale: 1;
    --cap-height: 1;
    --line-gap: 1;
    --line-spacing-scale: 1;

    /* normalized values */
    --cap-height-scale: calc(var(--metrics-cap-height) / var(--metrics-units-per-em));
    --font-size: calc(var(--cap-height) / var(--cap-height-scale));
    --line-height: calc(var(--cap-height) + var(--line-gap));
    
    /* computed values */
    --descent-scale: calc(var(--metrics-absolute-descent) / var(--metrics-units-per-em));
    --ascent-scale: calc(var(--metrics-ascent) / var(--metrics-units-per-em));
    --line-gap-scale: calc(var(--metrics-line-gap) / var(--metrics-units-per-em));

    --content-area: calc(var(--metrics-ascent) + var(--metrics-line-gap) + var(--metrics-absolute-descent));
    --line-height-scale: calc(var(--content-area) / var(--metrics-units-per-em));
    --line-height-normal: calc(var(--line-height-scale) * var(--font-size));

    --specified-line-height-offset: calc((var(--line-height-normal) - var(--line-height)) / 2 / var(--font-size));
    --cap-height-trim: calc(var(--specified-line-height-offset) - var(--ascent-scale) + var(--cap-height-scale) - var(--line-gap-scale) / 2);
    --baseline-trim: calc(var(--specified-line-height-offset) - var(--descent-scale) - var(--line-gap-scale) / 2);

    font-size: calc(var(--font-size) * 1px);
    line-height: calc(var(--line-spacing-scale) * var(--line-height) * 1px);
}

.text-center-fr-fr :is(p, h1, h2, h3, h4, h5, h6)::before {
    content: '';
    margin-bottom: calc(var(--cap-height-trim) * 1em);
    display: table;
}

.text-center-fr-fr :is(p, h1, h2, h3, h4, h5, h6)::after {
    content: '';
    margin-top: calc(var(--baseline-trim) * 1em);
    display: table;
}
