- t3bootstrap-site-package: composer + site sets + when to add a local extension
- t3bootstrap-overrides: 4-layer override surface (Settings → SCSS → Fluid → DataProcessor)
- t3bootstrap-content-elements: 23 t3bs_* CE catalog + migration matrix (HTML/WP/Joomla/older TYPO3) + Flux-bs5 upgrade wizard
Mirrors the structure of wapplersystems/typo3-skills (.claude-plugin/{plugin.json,marketplace.json}, .agents/skills/<name>/{SKILL.md,agents/openai.yaml}).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
25 KiB
name, description
| name | description |
|---|---|
| t3bootstrap-content-elements | Choose the right content element when migrating content into a T3Bootstrap-based TYPO3 v14 site. Covers the full catalog of 23 `t3bs_*` container-based CEs from `t3bootstrap/container-bs5-templates`, the custom CEs from `t3bootstrap/core` (Card, CompareSlider, Countdown, Counterbar, NumberCarousel) and `t3bootstrap/hero-item`, plus a decision matrix for source materials — static HTML/Bootstrap markup, WordPress blocks, Joomla modules, older TYPO3 sites with `flux_bs5_templates` / `gridelements` / `dce` / `bootstrap_package`. Includes the parent-child container nesting rules, the `t3bsContainerBs5MigrateFluxBs5` upgrade wizard and how to run it, the colPos slot conventions, and guidance on when to pick a core CE (`textmedia`, `image`, `header`, `bullets`) over a custom one. Use this skill whenever migrating content TO a T3Bootstrap project, picking which CE to use for a given visual pattern, debugging "child element doesn't appear in parent" issues, or planning a Flux-to-Container content rewrite. |
T3Bootstrap Content Elements
Use this skill to decide which content element to use when bringing content into a T3Bootstrap-based TYPO3 v14 project — from static HTML, another CMS, an older TYPO3 version, or hand-rebuilt by an editor.
Companion skills:
t3bootstrap-site-package— make sure the right packages and Site Sets are present before placing CEs.t3bootstrap-overrides— when a stock CE almost fits but you need to tweak its template.
The Three CE Layers
A T3Bootstrap project draws content elements from three sources, in order of specificity:
- Core CEs from TYPO3's
fluid_styled_content—textmedia,image,header,bullets,table,uploads,menu_*,shortcut, … T3Bootstrap rewraps these viat3bootstrap/core(extendedtt_contentfields, Bootstrap-aware Fluid templates). - Custom CEs from
t3bootstrap/core—t3bs_card,t3bs_compareslider,t3bs_countdown,t3bs_counterbar,t3bs_numbercarousel. These are non-container, single-element CEs with a fixed shape. - Container CEs from
t3bootstrap/container-bs5-templates— the 23t3bs_*elements that wrap or compose children viab13/container.
Rule of thumb when migrating:
- Plain prose with optional images → core
textmedia. Don't reach for a container. - Headline + paragraph + image + button, arranged together → still likely
textmedia+t3bs_buttonlink, unless the visual requires Bootstrap card styling. - Multiple of these arranged in a Bootstrap-styled box →
t3bs_card(single) ort3bs_cards(grid). - Anything that wraps other content elements → a container (
t3bs_container,t3bs_fluidrow+t3bs_column, …).
Core CEs — Use These First
The core CEs cover most static content. T3Bootstrap doesn't replace them; it gives them
better wrappers, frame classes, breakpoint grids and additional fields (element_classes,
image_classes, imagecols_grid, background_media).
| Core CType | When to use |
|---|---|
textmedia |
Default body content with optional images. Migrating any "paragraph + image" combination. |
text |
Pure prose, no media. |
header |
Standalone headline above a section. |
image |
Image only, optional caption. Migrating image galleries → one image per picture. |
textpic |
Legacy form of textmedia kept for backwards compatibility — prefer textmedia for new content. |
bullets |
Lists. |
table |
Tabular data. |
uploads |
File downloads. |
menu_* |
Sitemap, categorized pages, pages, recently updated, related pages. |
shortcut |
Reference another tt_content record (useful for "include this CE on multiple pages"). |
html |
Raw HTML. Migration source for everything you can't classify yet — but a follow-up pass should re-classify into proper CEs. |
T3Bootstrap-extended fields available on every CE:
element_classes— extra CSS classes on the CE wrapper.image_classes— extra classes on image renderings.imagecols_grid— JSON breakpoint grid for image columns (responsive 1/2/3/4-col layouts).background_media— FAL reference for a section background image/video.- Spacing palette (provided by
t3bootstrap/core) — responsive padding/margin per breakpoint, stored as JSON in dedicated columns. (See the spacing-stepper concept memo if extending this.)
Custom Single CEs from t3bootstrap/core
These are not containers — they're standalone elements with a fixed shape. Each is enabled by including the matching Site Set.
| CType | Site Set | Source | Use for |
|---|---|---|---|
t3bsCard (custom card) |
t3bootstrap/card-element |
vendor/t3bootstrap/core/Configuration/TCA/Overrides/600_content_element_card.php |
A simple card without nested CEs — image, title, text, link. Use over t3bs_card when no nested content elements are needed. |
t3bsCompareSlider |
t3bootstrap/compareslider-element |
600_content_element_compare_slider.php |
Before/after image comparison with a draggable divider. |
t3bsCountdown |
t3bootstrap/countdown-element |
600_content_element_countdown.php |
Date/time countdown widget. |
t3bsCounterbar |
t3bootstrap/counterbar-element |
202_content_element_counterbar.php |
Animated number counter ("12,000+ customers"). |
| Hero | t3bootstrap/hero-item |
vendor/t3bootstrap/hero-item/Configuration/TCA/Overrides/tt_content.php |
Full-width banner with title, subtitle, background image/video, CTA. Use over t3bs_container for landing pages. |
| Teaser | wapplersystems/teaser |
n/a | Image + headline + text teaser block, links to a page. |
| Testimonial | wapplersystems/testimonials |
n/a | Quote + author + photo. |
| Slider | wapplersystems/ws-slider* |
n/a | Each variant (flexslider, swiper, tinyslider, slick, bootstrap) is one CE. Use over t3bs_carousel when image-only with no inner content. |
Container CEs — The 23 t3bs_* Elements
Defined in vendor/t3bootstrap/container-bs5-templates/Configuration/TCA/Overrides/tt_content.php
and registered via b13/container. All container slots use the colPos range 21000–21079.
Layout containers — wrap arbitrary content
| CType | colPos | Children allowed | Purpose |
|---|---|---|---|
t3bs_container |
21001 |
any | Bootstrap .container / .container-sm / .container-fluid wrapper. Set tx_t3bs_container_type to choose the breakpoint. |
t3bs_fluidrow |
21041 |
only t3bs_column |
Bootstrap .row with per-breakpoint column grid. |
t3bs_column |
21050 |
any | A .col-* cell. Width per breakpoint configured via TCA. Always a child of t3bs_fluidrow. |
Content containers — wrap CEs in styled boxes
| CType | colPos | Purpose |
|---|---|---|
t3bs_card |
21008 |
Bootstrap card with header/image/body/footer regions; children render in the body. |
t3bs_cards |
21009 |
A set of cards rendered as group / deck / grid / columns layout (tx_t3bs_cards_layout). Children: any. |
t3bs_alert |
21003 |
Bootstrap .alert (primary/success/danger/warning/info/light/dark) with optional close button. |
t3bs_panel |
21005 |
Styled panel (legacy Bootstrap-3-style box). |
t3bs_well |
21004 |
Inset well (small/normal/large via tx_t3bs_well_style). |
t3bs_example |
21002 |
Code-example container (renders the children inside a .example box used for documentation pages). |
t3bs_thumbnail |
21006 |
Image thumbnail with caption. |
t3bs_media |
21007 |
Bootstrap media object — image flush left or right of text. |
Interactive containers — children become panels/slides/items
| CType | child colPos | Allowed children | Purpose |
|---|---|---|---|
t3bs_accordion |
21011 |
t3bs_accordion_item only |
Accordion. Each t3bs_accordion_item becomes one collapsible panel. |
t3bs_accordion_item |
21019 |
any | One accordion panel — contains the body content. |
t3bs_tabs |
21021 |
t3bs_tab_item only |
Tab container (tab/pill via tx_t3bs_tabs_mode). |
t3bs_tab_item |
21029 |
any | One tab pane. |
t3bs_carousel |
21031 |
t3bs_carousel_item only |
Image/content carousel. Controls/indicators/interval configurable. |
t3bs_carousel_item |
21039 |
any | One slide. |
t3bs_timeline |
21071 |
t3bs_timeline_item only |
Vertical timeline. |
t3bs_timeline_item |
21079 |
any | One timeline entry. |
Navigation containers — buttons and megamenu
| CType | child colPos | Children | Purpose |
|---|---|---|---|
t3bs_buttongroup |
21010 |
t3bs_buttonlink only |
Group of buttons (Bootstrap button group). |
t3bs_buttonlink |
— | (standalone) | Single button. Standalone CE — can also appear outside a button group. |
t3bs_megamenu |
21061 |
t3bs_megamenu_item only |
Megamenu dropdown. |
t3bs_megamenu_item |
21069 |
any | One megamenu column / sub-section. |
Parent-child Rules — Common Pitfalls
| Symptom | Cause | Fix |
|---|---|---|
t3bs_column placed without a parent → renders standalone |
t3bs_column has no UI restriction at root but is only meaningful inside t3bs_fluidrow. |
Always insert via "create child" inside a t3bs_fluidrow. |
t3bs_accordion_item rendered outside an accordion |
Same — no rendering wrapper. | Same — insert as a child of t3bs_accordion. |
Editor can't find t3bs_carousel_item in the CE wizard root |
Correct — these CTypes are deliberately filtered. | Edit by entering the parent's child slot. |
| Carousel/Tabs/Accordion show "0 children" but you added textmedia | You inserted into the parent's own colPos (e.g. 0) instead of the parent's child slot colPos. | Move the children to the parent's child slot (e.g. colPos = 21011 for an accordion). |
Migration Decision Matrix
For each source pattern, the recommended T3Bootstrap target.
From static HTML / Bootstrap pages
| Source markup | Target CE |
|---|---|
<section> with .container and paragraphs |
t3bs_container wrapping textmedia children, or just textmedia with imagecols_grid if it's a single paragraph block |
.row > .col-md-4 × N |
t3bs_fluidrow with N t3bs_column children. Set column widths per breakpoint via TCA. |
.card block (image + title + body) |
t3bs_card (with child content for the body) or the simpler standalone t3bsCard (no children needed) |
.card-deck / .row-cols-md-3 > .col of cards |
t3bs_cards with tx_t3bs_cards_layout = deck (or grid-cards) |
.accordion / <details> |
t3bs_accordion + one t3bs_accordion_item per item |
Bootstrap .nav-tabs / .nav-pills |
t3bs_tabs + t3bs_tab_item per tab |
Bootstrap .carousel |
t3bs_carousel + t3bs_carousel_item per slide |
.alert.alert-warning |
t3bs_alert with tx_t3bs_alert_class = warning |
.btn.btn-primary |
t3bs_buttonlink (with optional t3bs_buttongroup parent) |
Hero <section> with full-bleed background |
Hero (from t3bootstrap/hero-item) |
| Vertical timeline | t3bs_timeline + t3bs_timeline_item per step |
| Before/after slider | t3bsCompareSlider |
| Animated counter | t3bsCounterbar |
| Countdown timer | t3bsCountdown |
| Image gallery | wapplersystems/filecollection-gallery set with a file_collection CE, or N image CEs in a t3bs_fluidrow. |
From WordPress
| Gutenberg block | Target |
|---|---|
core/paragraph + core/image |
textmedia |
core/heading |
header |
core/list |
bullets |
core/table |
table |
core/columns + core/column |
t3bs_fluidrow + t3bs_column |
core/group (background, padding) |
t3bs_container |
core/cover (full-width image + heading) |
Hero (from t3bootstrap/hero-item) |
core/buttons + core/button |
t3bs_buttongroup + t3bs_buttonlink |
core/media-text |
t3bs_media |
core/quote / core/pullquote |
textmedia with the Frameless layout + element_classes = blockquote — or a custom Testimonial CE if the visual is testimonial-style |
core/gallery |
wapplersystems/filecollection-gallery |
| WP CPT (e.g. portfolio item) | A TYPO3 news/blog/address record + custom record sitemap, not a CE |
| ACF flexible content / page builder layouts | Map each layout to the closest t3bs_* container; complex one-offs go in t3bs_container with html CE child |
From Joomla
| Joomla pattern | Target |
|---|---|
| Joomla article body | textmedia (one per paragraph block, or one big with embedded media) |
| Module position | A page-level colPos in T3Bootstrap; map module → CE per the rest of this table |
| K2 / EasyBlog items | news records (via t3bootstrap/news) or blog posts (t3bootstrap/blog) |
| RSGallery / Phoca Gallery | wapplersystems/filecollection-gallery |
| RSForm / Chronoforms | EXT:form via t3bootstrap/form set |
| Sliders (DJ-ImageSlider, Smart Slider) | Pick a ws-slider-* variant per the brief (most projects use swiper or flexslider) |
| Modal / accordion modules | t3bs_accordion / t3bs_tabs |
| YOOtheme widget kit | Map each widget to its t3bs_* cousin; for icon + heading + text use textmedia with t3bs_icon |
From older TYPO3 versions
From v9–v12 with flux_bs5_templates
Use the upgrade wizard. Don't migrate manually — the wizard preserves child relations,
maps FlexForm values to the new dedicated tx_t3bs_* columns, and updates tx_container_parent.
# In DDEV, after composer-installing t3bootstrap/container-bs5-templates:
ddev exec vendor/bin/typo3 upgrade:run t3bsContainerBs5MigrateFluxBs5
# Or via the Install Tool: TYPO3 backend → Admin Tools → Upgrade → Upgrade Wizards
# → "Migrate flux_bs5_templates content elements to container_bs5_templates" → Execute
Mapping the wizard applies (source vendor/t3bootstrap/container-bs5-templates/Classes/Updates/MigrateFluxBs5ToContainerBs5.php):
| Old Flux CType | New CType | Notes |
|---|---|---|
fluxbs5templates_container |
t3bs_container |
FlexForm → tx_t3bs_container_type |
fluxbs5templates_example |
t3bs_example |
|
fluxbs5templates_alert |
t3bs_alert |
FlexForm → tx_t3bs_alert_class, tx_t3bs_alert_block, tx_t3bs_alert_close_text |
fluxbs5templates_well |
t3bs_well |
FlexForm → tx_t3bs_well_style |
fluxbs5templates_panel |
t3bs_panel |
FlexForm → tx_t3bs_panel_class |
fluxbs5templates_thumbnail |
t3bs_thumbnail |
|
fluxbs5templates_media |
t3bs_media |
|
fluxbs5templates_card |
t3bs_card |
|
fluxbs5templates_cards |
t3bs_cards |
FlexForm → tx_t3bs_cards_layout, _grid, _gutter |
fluxbs5templates_buttongroup |
t3bs_buttongroup |
FlexForm → tx_t3bs_bg_type |
fluxbs5templates_accordion |
t3bs_accordion |
Children rewired to t3bs_accordion_item, colPos 21011 |
fluxbs5templates_tabs |
t3bs_tabs |
Children to t3bs_tab_item, colPos 21021. FlexForm → tx_t3bs_tabs_mode, _direction, _stackable, _position |
fluxbs5templates_carousel |
t3bs_carousel |
Children to t3bs_carousel_item, colPos 21031. FlexForm → controls, indicators, interval, id, color |
fluxbs5templates_fluidrow |
t3bs_fluidrow |
Each flex column becomes a t3bs_column child at colPos 21041 |
fluxbs5templates_buttonlink |
t3bs_buttonlink |
FlexForm → full set of tx_t3bs_button_* fields |
fluxbs5templates_megamenu |
t3bs_megamenu |
Children to t3bs_megamenu_item, colPos 21061 |
After the wizard runs: flush caches (cache:flush), update the reference index
(referenceindex:update), and re-import freshly delta-migrated content from live if you
were doing the parallel live→stage migration described in the global instructions.
From v8–v11 with gridelements
No wizard. Map manually:
gridelements_pi1 layout |
Target |
|---|---|
| 1-column grid | t3bs_container |
| 2-column grid | t3bs_fluidrow + 2× t3bs_column |
| 3/4-column grid | t3bs_fluidrow + N× t3bs_column |
| Tabbed grid | t3bs_tabs + N× t3bs_tab_item |
| Accordion grid | t3bs_accordion + N× t3bs_accordion_item |
| Hero grid | Hero (from t3bootstrap/hero-item) |
In a migration project: SQL-query tt_content WHERE CType='gridelements_pi1', group by
tx_gridelements_backend_layout, and rewrite the CType + children's colPos (gridelements
uses tx_gridelements_columns instead of tx_container_parent).
From v8–v11 with dce
No wizard. DCE content elements are project-specific. For each DCE:
- Look at its rendering template — what HTML does it emit?
- Pick the closest
t3bs_*CE. - Map DCE fields →
tx_t3bs_*columns or extendedtt_contentfields fromt3bootstrap/core. - Custom-only DCEs that have no direct equivalent → wrap in
t3bs_containerwith anhtmlchild for the unique markup, plan to replace gradually.
From v11/v12 with bootstrap_package
bootstrap_package has a different content element set. Mapping:
bootstrap_package CType |
T3Bootstrap CType |
|---|---|
bootstrap_package_card_group |
t3bs_cards |
bootstrap_package_carousel |
t3bs_carousel |
bootstrap_package_accordion |
t3bs_accordion |
bootstrap_package_tabs |
t3bs_tabs |
bootstrap_package_modal |
No direct CE — use t3bs_buttonlink with tx_t3bs_button_modal = 1 and a referenced text block |
bootstrap_package_listgroup |
bullets with element_classes = list-group |
bootstrap_package_panel |
t3bs_panel |
bootstrap_package_jumbotron |
Hero (t3bootstrap/hero-item) |
bootstrap_package_textmedia |
core textmedia |
bootstrap_package_icon_group |
t3bs_fluidrow + t3bs_column per icon, textmedia with tx_t3bs_icon set inside each |
bootstrap_package's bootstrap_package_card_group already uses child elements wired via
TCA — copy the child relationships rather than rebuild.
When to Pick Which Layer (Cheat Sheet)
Is it a wrapping/grouping element (multiple CEs sit inside)?
├── YES → container CE
│ ├── styled box around children? → t3bs_card / t3bs_alert / t3bs_panel / t3bs_well
│ ├── tabs/accordion/carousel? → t3bs_tabs / t3bs_accordion / t3bs_carousel
│ ├── timeline? → t3bs_timeline
│ ├── grid? → t3bs_fluidrow + t3bs_column
│ ├── button group? → t3bs_buttongroup
│ └── transparent / just structure? → t3bs_container
│
└── NO → single CE
├── prose + maybe one image? → textmedia
├── headline only? → header
├── image-only? → image
├── list? → bullets
├── table? → table
├── hero banner? → Hero (hero-item)
├── card without nested CEs? → t3bsCard (card-element)
├── before/after slider? → t3bsCompareSlider
├── animated number? → t3bsCounterbar
├── countdown? → t3bsCountdown
├── testimonial? → wapplersystems/testimonials
├── slider with image-only slides? → ws-slider variant
├── button-only? → t3bs_buttonlink (standalone)
└── still no fit? → html (temporary, plan to re-classify)
colPos Map (Reference)
When debugging "where did my child go?" — the colPos numbers reserved by
t3bootstrap/container-bs5-templates:
21001 t3bs_container (single slot)
21002 t3bs_example
21003 t3bs_alert
21004 t3bs_well
21005 t3bs_panel
21006 t3bs_thumbnail
21007 t3bs_media
21008 t3bs_card
21009 t3bs_cards
21010 t3bs_buttongroup (allows only t3bs_buttonlink)
21011 t3bs_accordion (allows only t3bs_accordion_item)
21019 t3bs_accordion_item
21021 t3bs_tabs (allows only t3bs_tab_item)
21029 t3bs_tab_item
21031 t3bs_carousel (allows only t3bs_carousel_item)
21039 t3bs_carousel_item
21041 t3bs_fluidrow (allows only t3bs_column)
21050 t3bs_column
21061 t3bs_megamenu (allows only t3bs_megamenu_item)
21069 t3bs_megamenu_item
21071 t3bs_timeline (allows only t3bs_timeline_item)
21079 t3bs_timeline_item
tx_container_parent on a child row stores the parent's uid; the child's colPos is set
to the parent's slot. Direct SQL example:
-- All children of accordion uid=42
SELECT uid, CType, header, colPos, tx_container_parent
FROM tt_content
WHERE tx_container_parent = 42 AND colPos = 21011;
Content Defender Hints (TYPO3 v14.1+)
content_defender is part of TYPO3 v14.1 Core. The container declarations in
t3bootstrap/container-bs5-templates already use the allowed constraint on the slot
arrays:
$registerContainer($registry, 't3bs_accordion', $ll . 'ce.accordion',
[[['name' => $ll . 'slot.item', 'colPos' => 21011, 'allowed' => ['CType' => 't3bs_accordion_item']]]],
...
);
This automatically enforces the "tabs only contain tab items" / "accordions only contain
accordion items" rules — editors can't accidentally drop a textmedia into an accordion's
item slot. Don't override this in PageTSconfig unless you have a deliberate reason.
For a customer-specific column (e.g. "this colPos accepts only Hero or Card"), add the constraint in your customer extension's PageTSconfig:
# local_packages/<customer>/site_<customer>/Configuration/page.tsconfig
mod.web_layout.tt_content.colPos_list := addToList(2)
mod.web_layout.BackendLayouts.HeroPage.config.backend_layout.rows.1.columns.1.allowed.CType = t3bootstrap_hero,t3bsCard
Migration Workflow
1. Inventory the source.
- WP: `wp post list`, screenshot blocks per post type
- TYPO3: `SELECT CType, COUNT(*) FROM tt_content GROUP BY CType` (use claude-diagnostics' database:query)
- Static: scrape the rendered pages, categorize by visual pattern
2. Build the mapping table (use the decision matrix above).
3. For flux_bs5_templates → ALWAYS the upgrade wizard. Don't re-do this work.
4. For other sources, write the new content in the TYPO3 backend with the right CTypes,
or script the import via a custom Symfony Command.
5. After import: cache:flush, referenceindex:update, visually compare against the source.
6. For each migrated CE, check: is the visual right? If not — is it a missing CE field
(use the t3bootstrap-overrides skill for template tweaks) or a wrong CE choice
(re-evaluate)?
Anti-Patterns
| Anti-pattern | Why it's bad | Correct approach |
|---|---|---|
Migrating all content as html CE |
Loses TYPO3 semantics, FAL, link handling, accessibility | Use the decision matrix; html is the last resort, not the first |
Hand-migrating flux_bs5_templates content |
Tedious, error-prone, breaks parent-child relations | Run the t3bsContainerBs5MigrateFluxBs5 wizard |
Using t3bs_container for prose |
Renders an empty Bootstrap container wrapper for no reason | Use textmedia directly; the page template already wraps it |
Stacking t3bs_container inside t3bs_container |
Nested Bootstrap containers cause padding/margin compounding bugs | Use t3bs_fluidrow + t3bs_column to subdivide instead |
Placing t3bs_buttonlink inside a textmedia bodytext as RTE link |
Looks like a button in the editor, won't get the Bootstrap classes | Use the t3bs_buttonlink CE next to the textmedia, or a t3bs_buttongroup if multiple |
Migrating a multi-image gallery as N separate image CEs |
Loses the gallery's grid relationship | wapplersystems/filecollection-gallery set + file_collection CE |
Creating one t3bs_card per card in a 3-card grid |
Each card is its own outer container | One t3bs_cards parent with three child content elements (one per card) — tx_t3bs_cards_layout = grid-cards for the grid |
Reference Files in This Project
vendor/t3bootstrap/container-bs5-templates/Configuration/TCA/Overrides/tt_content.php # all t3bs_* registrations + ContainerConfiguration
vendor/t3bootstrap/container-bs5-templates/Classes/Updates/MigrateFluxBs5ToContainerBs5.php # the upgrade wizard
vendor/t3bootstrap/container-bs5-templates/Resources/Private/Templates/ # CE Fluid templates
vendor/t3bootstrap/core/Configuration/TCA/Overrides/10_tt_content.php # extended tt_content fields (image_classes, element_classes, imagecols_grid, background_media)
vendor/t3bootstrap/core/Configuration/TCA/Overrides/600_content_element_card.php # t3bsCard standalone
vendor/t3bootstrap/core/Configuration/TCA/Overrides/600_content_element_compare_slider.php
vendor/t3bootstrap/core/Configuration/TCA/Overrides/600_content_element_countdown.php
vendor/t3bootstrap/core/Configuration/TCA/Overrides/202_content_element_counterbar.php
vendor/t3bootstrap/hero-item/Configuration/TCA/Overrides/tt_content.php # Hero CType
For overriding any of these CEs (different colors, additional fields, replaced templates),
switch to the t3bootstrap-overrides skill.
For project bootstrapping (required composer packages, site sets), see the
t3bootstrap-site-package skill.