Align headings, labels, and body copy with Bootstrap's utility-first text semantics and Moo UI tokenized roles.
"Whitespace has a job"
Use semantic headings, paragraphs, lists, and Bootstrap text utilities to keep document structure and visual hierarchy working together. Choose the HTML element first, then apply the typography role or utility that matches the visual level the interface needs.
Keep heading levels meaningful for screen readers, search indexing, and in-page navigation. Use muted text for supporting copy, section labels for small categorical context, and display sizes only when a heading needs more presence than the surrounding content hierarchy.
Use utility classes when the visual size must differ from the HTML element, such as a paragraph styled as a heading inside a compact card. Keep body copy readable, avoid decorative over-scaling in dense app screens, and let whitespace separate ideas instead of adding extra frames.
Map semantic intent to the heading roles first, then use utility classes when visual level and HTML level need to differ.
1 2 3 4 5<div class="d-grid gap-3"> <h1 class="fw-semibold">Product Console</h1> <h2 class="h3">Operations playbook</h2> <h2 class="h4">Incident summary</h2> </div>
<div class="d-grid gap-3"> <h1 class="fw-semibold">Product Console</h1> <h2 class="h3">Operations playbook</h2> <h2 class="h4">Incident summary</h2> </div>
Keep the document outline meaningful when screen readers and search indexing are reading this content.
1 2 3 4 5 6 7 8<div class="d-grid gap-2"> <h1 class="mb-0">h1. Team roadmap</h1> <h2 class="mb-0">h2. Sprint planning</h2> <h3 class="mb-0">h3. Release checklist</h3> <h4 class="mb-0">h4. Ticket priorities</h4> <h5 class="mb-0">h5. Deployment notes</h5> <h6 class="mb-0">h6. Open action items</h6> </div>
<div class="d-grid gap-2"> <h1 class="mb-0">h1. Team roadmap</h1> <h2 class="mb-0">h2. Sprint planning</h2> <h3 class="mb-0">h3. Release checklist</h3> <h4 class="mb-0">h4. Ticket priorities</h4> <h5 class="mb-0">h5. Deployment notes</h5> <h6 class="mb-0">h6. Open action items</h6> </div>
Use heading utility classes when the visual style must stay large but the document structure should stay compact.
h1. Dashboard view
h2. Usage analytics
h3. Team activity
h4. API usage
h5. Integration status
h6. Audit log
1 2 3 4 5 6 7 8<div class="d-grid gap-2"> <p class="h1 mb-0">h1. Dashboard view</p> <p class="h2 mb-0">h2. Usage analytics</p> <p class="h3 mb-0">h3. Team activity</p> <p class="h4 mb-0">h4. API usage</p> <p class="h5 mb-0">h5. Integration status</p> <p class="h6 mb-0">h6. Audit log</p> </div>
<div class="d-grid gap-2"> <p class="h1 mb-0">h1. Dashboard view</p> <p class="h2 mb-0">h2. Usage analytics</p> <p class="h3 mb-0">h3. Team activity</p> <p class="h4 mb-0">h4. API usage</p> <p class="h5 mb-0">h5. Integration status</p> <p class="h6 mb-0">h6. Audit log</p> </div>
Use small.text-body-secondary for contextual metadata that should stay subordinate to the heading.
small.text-body-secondary
1 2 3<h3 class="mb-0"> Maintenance window <small class="text-body-secondary">Planned 02:00–03:00 UTC</small> </h3>
<h3 class="mb-0"> Maintenance window <small class="text-body-secondary">Planned 02:00–03:00 UTC</small> </h3>
Use display-1 through display-6 when a heading needs more visual presence than the surrounding content hierarchy.
display-1
display-6
1 2 3 4 5 6 7 8<div class="d-grid gap-2"> <h1 class="display-1 mb-0">Display 1 · Uptime</h1> <h1 class="display-2 mb-0">Display 2 · Capacity</h1> <h1 class="display-3 mb-0">Display 3 · Releases</h1> <h1 class="display-4 mb-0">Display 4 · Delivery</h1> <h1 class="display-5 mb-0">Display 5 · Quality</h1> <h1 class="display-6 mb-0">Display 6 · Legible</h1> </div>
<div class="d-grid gap-2"> <h1 class="display-1 mb-0">Display 1 · Uptime</h1> <h1 class="display-2 mb-0">Display 2 · Capacity</h1> <h1 class="display-3 mb-0">Display 3 · Releases</h1> <h1 class="display-4 mb-0">Display 4 · Delivery</h1> <h1 class="display-5 mb-0">Display 5 · Quality</h1> <h1 class="display-6 mb-0">Display 6 · Legible</h1> </div>
Use lead, secondary, and label roles to show hierarchy without inventing one-off text styles for each page.
Track status, ownership, and escalation points from one shared index.
1 2 3 4 5<div class="d-grid gap-3"> <p class="moo-page-description text-body-secondary mb-0">Track status, ownership, and escalation points from one shared index.</p> <span class="text-body-secondary">Muted text fits status chips and non-blocking helper notes.</span> <span class="small fw-semibold">Section label</span> </div>
<div class="d-grid gap-3"> <p class="moo-page-description text-body-secondary mb-0">Track status, ownership, and escalation points from one shared index.</p> <span class="text-body-secondary">Muted text fits status chips and non-blocking helper notes.</span> <span class="small fw-semibold">Section label</span> </div>
Add lead when an introductory paragraph needs more visual weight than ordinary body copy.
lead
Lead copy is useful for a short onboarding message or migration note.
1<p class="lead mb-0">Lead copy is useful for a short onboarding message or migration note.</p>
<p class="lead mb-0">Lead copy is useful for a short onboarding message or migration note.</p>
Use semantic inline elements for their meaning: mark highlights, del removes, ins adds, and strong/em convey emphasis.
mark
del
ins
strong
em
Use mark to highlight text for reference.
This line is no longer accurate.
This line is no longer relevant.
This line was added to the document.
This line carries a non-textual annotation.
This is fine print and supporting detail.
This line carries strong importance.
This line carries emphasis.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26<div class="d-grid gap-2"> <p class="mb-0"> Use <mark>mark</mark> to highlight text for reference. </p> <p class="mb-0"> <del>This line is no longer accurate.</del> </p> <p class="mb-0"> <s>This line is no longer relevant.</s> </p> <p class="mb-0"> <ins>This line was added to the document.</ins> </p> <p class="mb-0"> <u>This line carries a non-textual annotation.</u> </p> <p class="mb-0"> <small>This is fine print and supporting detail.</small> </p> <p class="mb-0"> <strong>This line carries strong importance.</strong> </p> <p class="mb-0"> <em>This line carries emphasis.</em> </p> </div>
<div class="d-grid gap-2"> <p class="mb-0"> Use <mark>mark</mark> to highlight text for reference. </p> <p class="mb-0"> <del>This line is no longer accurate.</del> </p> <p class="mb-0"> <s>This line is no longer relevant.</s> </p> <p class="mb-0"> <ins>This line was added to the document.</ins> </p> <p class="mb-0"> <u>This line carries a non-textual annotation.</u> </p> <p class="mb-0"> <small>This is fine print and supporting detail.</small> </p> <p class="mb-0"> <strong>This line carries strong importance.</strong> </p> <p class="mb-0"> <em>This line carries emphasis.</em> </p> </div>
Add a title to abbr so an acronym has an accessible expanded meaning; initialism gives it a slightly smaller treatment.
title
abbr
initialism
HTML keeps its expanded meaning available on hover.
1 2 3<p class="mb-0"> <abbr title="HyperText Markup Language" class="initialism">HTML</abbr> keeps its expanded meaning available on hover. </p>
<p class="mb-0"> <abbr title="HyperText Markup Language" class="initialism">HTML</abbr> keeps its expanded meaning available on hover. </p>
Wrap a quotation in blockquote and keep its attribution outside the quote with blockquote-footer and cite.
blockquote
blockquote-footer
cite
A calm interface makes the next action easier to find.
1 2 3 4 5 6 7 8 9<figure class="mb-0"> <blockquote class="blockquote mb-2"> <p class="mb-0">A calm interface makes the next action easier to find.</p> </blockquote> <figcaption class="blockquote-footer mt-2 mb-0"> A design principle in <cite title="Moo UI handbook">Moo UI handbook</cite> </figcaption> </figure>
<figure class="mb-0"> <blockquote class="blockquote mb-2"> <p class="mb-0">A calm interface makes the next action easier to find.</p> </blockquote> <figcaption class="blockquote-footer mt-2 mb-0"> A design principle in <cite title="Moo UI handbook">Moo UI handbook</cite> </figcaption> </figure>
Use text-center or text-end on the figure to align a quote and its attribution together.
text-center
text-end
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20<div class="d-grid gap-3 w-100"> <figure class="text-center mb-0"> <blockquote class="blockquote mb-2"> <p class="mb-0">A calm interface makes the next action easier to find.</p> </blockquote> <figcaption class="blockquote-footer mt-2 mb-0"> A design principle in <cite title="Moo UI handbook">Moo UI handbook</cite> </figcaption> </figure> <figure class="text-end mb-0"> <blockquote class="blockquote mb-2"> <p class="mb-0">A calm interface makes the next action easier to find.</p> </blockquote> <figcaption class="blockquote-footer mt-2 mb-0"> A design principle in <cite title="Moo UI handbook">Moo UI handbook</cite> </figcaption> </figure> </div>
<div class="d-grid gap-3 w-100"> <figure class="text-center mb-0"> <blockquote class="blockquote mb-2"> <p class="mb-0">A calm interface makes the next action easier to find.</p> </blockquote> <figcaption class="blockquote-footer mt-2 mb-0"> A design principle in <cite title="Moo UI handbook">Moo UI handbook</cite> </figcaption> </figure> <figure class="text-end mb-0"> <blockquote class="blockquote mb-2"> <p class="mb-0">A calm interface makes the next action easier to find.</p> </blockquote> <figcaption class="blockquote-footer mt-2 mb-0"> A design principle in <cite title="Moo UI handbook">Moo UI handbook</cite> </figcaption> </figure> </div>
Use list-unstyled for quiet lists, list-inline for compact rows, and the grid classes to align a description list.
list-unstyled
list-inline
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17<div class="d-grid gap-3 w-100"> <ul class="list-unstyled mb-0"> <li>Unstyled lists keep their structure without bullets.</li> <li>The content remains a real list for assistive technology.</li> </ul> <ul class="list-inline mb-0"> <li class="list-inline-item">Inline item one</li> <li class="list-inline-item">Inline item two</li> <li class="list-inline-item">Inline item three</li> </ul> <dl class="row mb-0"> <dt class="col-sm-3">Term</dt> <dd class="col-sm-9">A short definition aligned with the grid.</dd> <dt class="col-sm-3">Another term</dt> <dd class="col-sm-9 mb-0">Another definition in the same rhythm.</dd> </dl> </div>
<div class="d-grid gap-3 w-100"> <ul class="list-unstyled mb-0"> <li>Unstyled lists keep their structure without bullets.</li> <li>The content remains a real list for assistive technology.</li> </ul> <ul class="list-inline mb-0"> <li class="list-inline-item">Inline item one</li> <li class="list-inline-item">Inline item two</li> <li class="list-inline-item">Inline item three</li> </ul> <dl class="row mb-0"> <dt class="col-sm-3">Term</dt> <dd class="col-sm-9">A short definition aligned with the grid.</dd> <dt class="col-sm-3">Another term</dt> <dd class="col-sm-9 mb-0">Another definition in the same rhythm.</dd> </dl> </div>
Use text-start, text-center, and text-end to align text without a custom selector.
text-start
Start-aligned text follows the reading direction.
Center-aligned text suits short, focused labels.
End-aligned text closes the row cleanly.
1 2 3 4 5<div class="d-grid gap-2 w-100"> <p class="text-start mb-0">Start-aligned text follows the reading direction.</p> <p class="text-center mb-0">Center-aligned text suits short, focused labels.</p> <p class="text-end mb-0">End-aligned text closes the row cleanly.</p> </div>
<div class="d-grid gap-2 w-100"> <p class="text-start mb-0">Start-aligned text follows the reading direction.</p> <p class="text-center mb-0">Center-aligned text suits short, focused labels.</p> <p class="text-end mb-0">End-aligned text closes the row cleanly.</p> </div>
Use text-lowercase, text-uppercase, or text-capitalize when the displayed casing is part of the content treatment.
text-lowercase
text-uppercase
text-capitalize
QUIET SYSTEM STATUS
quiet system status
1 2 3 4 5<div class="d-grid gap-2"> <p class="text-lowercase mb-0">QUIET SYSTEM STATUS</p> <p class="text-uppercase mb-0">quiet system status</p> <p class="text-capitalize mb-0">quiet system status</p> </div>
<div class="d-grid gap-2"> <p class="text-lowercase mb-0">QUIET SYSTEM STATUS</p> <p class="text-uppercase mb-0">quiet system status</p> <p class="text-capitalize mb-0">quiet system status</p> </div>
Use fs-* for font size and fw-*/fst-* for weight or italics; these utilities change treatment without replacing semantic elements.
fs-*
fw-*
fst-*
A slightly larger supporting line.
A stronger label for an important state.
A quiet note that stays in the same hierarchy.
1 2 3 4 5<div class="d-grid gap-2"> <p class="fs-5 mb-0">A slightly larger supporting line.</p> <p class="fw-semibold mb-0">A stronger label for an important state.</p> <p class="fst-italic mb-0">A quiet note that stays in the same hierarchy.</p> </div>
<div class="d-grid gap-2"> <p class="fs-5 mb-0">A slightly larger supporting line.</p> <p class="fw-semibold mb-0">A stronger label for an important state.</p> <p class="fst-italic mb-0">A quiet note that stays in the same hierarchy.</p> </div>
Use lh-1, lh-base, or lh-lg when text density needs to change without a custom line-height declaration.
lh-1
lh-base
lh-lg
Tight line-height keeps a compact label close together.
Base line-height keeps ordinary reading comfortable.
Large line-height gives a longer sentence more air.
1 2 3 4 5<div class="d-grid gap-2"> <p class="lh-1 mb-0">Tight line-height keeps a compact label close together.</p> <p class="lh-base mb-0">Base line-height keeps ordinary reading comfortable.</p> <p class="lh-lg mb-0">Large line-height gives a longer sentence more air.</p> </div>
<div class="d-grid gap-2"> <p class="lh-1 mb-0">Tight line-height keeps a compact label close together.</p> <p class="lh-base mb-0">Base line-height keeps ordinary reading comfortable.</p> <p class="lh-lg mb-0">Large line-height gives a longer sentence more air.</p> </div>
Use text-decoration-underline or text-decoration-line-through when the decoration communicates the text state.
text-decoration-underline
text-decoration-line-through
Underline a policy reference before users confirm action.
Strike through an obsolete process step that was revised.
1 2 3 4<div class="d-grid gap-2"> <p class="text-decoration-underline mb-0">Underline a policy reference before users confirm action.</p> <p class="text-decoration-line-through mb-0">Strike through an obsolete process step that was revised.</p> </div>
<div class="d-grid gap-2"> <p class="text-decoration-underline mb-0">Underline a policy reference before users confirm action.</p> <p class="text-decoration-line-through mb-0">Strike through an obsolete process step that was revised.</p> </div>
Apply font-monospace to identifiers and terminal-like values when a fixed-width face improves scanning.
font-monospace
npm run lint --workspace=ui
1<p class="font-monospace mb-0">npm run lint --workspace=ui</p>
<p class="font-monospace mb-0">npm run lint --workspace=ui</p>
Wrap public classes, attributes, and contracts in <code> so technical names stay distinct inside prose.
<code>
Use npm run format for local CI-aligned formatting.
npm run format
1 2 3<p class="mb-0"> Use <code>npm run format</code> for local CI-aligned formatting. </p>
<p class="mb-0"> Use <code>npm run format</code> for local CI-aligned formatting. </p>
RTL
يبدأ كل يوم بفحص واضح للمؤشرات المفتاحية وسلامة عملية الإبلاغ.
تم تحديث الملخص في توقيت UTC 07:00، ويمكن مراجعة البنود المفتوحة بنفس التسلسل.
1 2 3 4 5 6 7 8 9 10 11<div dir="rtl" class="d-grid gap-3"> <h2 class="h3">إرشادات التدقيق اليومي</h2> <p class="lead mb-0">يبدأ كل يوم بفحص واضح للمؤشرات المفتاحية وسلامة عملية الإبلاغ.</p> <p class="mb-0 text-body-secondary"> تم تحديث الملخص في توقيت <strong>UTC 07:00</strong>، ويمكن مراجعة البنود المفتوحة بنفس التسلسل. </p> <ul class="list-unstyled mb-0"> <li>تحقق من حالة الخدمة، وخطة الاسترجاع، ومسؤولية النشر.</li> <li>سجل قرارات الحوكمة قبل اعتماد أي تغيير إضافي.</li> </ul> </div>
<div dir="rtl" class="d-grid gap-3"> <h2 class="h3">إرشادات التدقيق اليومي</h2> <p class="lead mb-0">يبدأ كل يوم بفحص واضح للمؤشرات المفتاحية وسلامة عملية الإبلاغ.</p> <p class="mb-0 text-body-secondary"> تم تحديث الملخص في توقيت <strong>UTC 07:00</strong>، ويمكن مراجعة البنود المفتوحة بنفس التسلسل. </p> <ul class="list-unstyled mb-0"> <li>تحقق من حالة الخدمة، وخطة الاسترجاع، ومسؤولية النشر.</li> <li>سجل قرارات الحوكمة قبل اعتماد أي تغيير إضافي.</li> </ul> </div>
כל יום מתחיל בסקירה ברורה של מדדי מפתח ובטיחות תהליך הדיווח.
עדכון תקציר ב־UTC 07:00; פתיחת פריטים בהלימה קבועה.
1 2 3 4 5 6 7 8 9 10 11<div dir="rtl" class="d-grid gap-3"> <h2 class="h3">הנחיות ביקורת יומית</h2> <p class="lead mb-0">כל יום מתחיל בסקירה ברורה של מדדי מפתח ובטיחות תהליך הדיווח.</p> <p class="mb-0 text-body-secondary"> עדכון תקציר ב־<strong>UTC 07:00</strong>; פתיחת פריטים בהלימה קבועה. </p> <ul class="list-unstyled mb-0"> <li>בדוק סטטוס שירות, תוכנית שחזור, ואחריות פריסה.</li> <li>תעד החלטות ממשל לפני אימות שינוי נוסף.</li> </ul> </div>
<div dir="rtl" class="d-grid gap-3"> <h2 class="h3">הנחיות ביקורת יומית</h2> <p class="lead mb-0">כל יום מתחיל בסקירה ברורה של מדדי מפתח ובטיחות תהליך הדיווח.</p> <p class="mb-0 text-body-secondary"> עדכון תקציר ב־<strong>UTC 07:00</strong>; פתיחת פריטים בהלימה קבועה. </p> <ul class="list-unstyled mb-0"> <li>בדוק סטטוס שירות, תוכנית שחזור, ואחריות פריסה.</li> <li>תעד החלטות ממשל לפני אימות שינוי נוסף.</li> </ul> </div>
Every shift begins with a clear review of key signals and reporting safety.
The summary refreshes at UTC 07:00, then open items are reviewed in order.
1 2 3 4 5 6 7 8 9 10 11<div dir="ltr" class="d-grid gap-3"> <h2 class="h3">Daily audit checklist</h2> <p class="lead mb-0">Every shift begins with a clear review of key signals and reporting safety.</p> <p class="mb-0 text-body-secondary"> The summary refreshes at <strong>UTC 07:00</strong>, then open items are reviewed in order. </p> <ul class="list-unstyled mb-0"> <li>Confirm service status, recovery plan, and deployment owner.</li> <li>Log governance decisions before any additional rollout.</li> </ul> </div>
<div dir="ltr" class="d-grid gap-3"> <h2 class="h3">Daily audit checklist</h2> <p class="lead mb-0">Every shift begins with a clear review of key signals and reporting safety.</p> <p class="mb-0 text-body-secondary"> The summary refreshes at <strong>UTC 07:00</strong>, then open items are reviewed in order. </p> <ul class="list-unstyled mb-0"> <li>Confirm service status, recovery plan, and deployment owner.</li> <li>Log governance decisions before any additional rollout.</li> </ul> </div>
For more text patterns, see the Bootstrap Text utilities documentation.
No matching pages.
Restore the default appearance.