Success-story migration + new plugins + JSON/UX polish

- Success Stories: full migration from old site (48/48, audited),
  markets n:n, quotation content block, columns content block,
  pretty SEO detail URLs via SuccessStoryPathRewrite middleware,
  list/detail split (list page 4 / story page), detailUrl/backUrl
- New plugins: VITEC Locations (grid/list/map + RTE map text),
  VITEC Customer Logos (color/bw logic, only-show-selected),
  VITEC Card (one plugin for product/story/market/solution
  with reloading FlexForm + custom backend preview renderer)
- Eventlist: layout dropdown (list/grid/teaserbar) in settings
- Hero section CB: Images/Video tabs, background video + overlay
- Product JSON: full category rootline (parents), fixed missing
  ConnectionPool import (all-products crash), category tree map
- Backend preview CSS: container-query responsive (narrow columns)
- Docs: ISO architecture spec, root + extension READMEs

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
khaccountandClaude Fable 5 committed 2026-07-24 09:53:33 +02:00
1 parent aafcb5dcb6
commit eae40f4286
110 files changed
+8502 -279

No files matched your search

@@ -0,0 +1,36 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<f:asset.css identifier="vitec-backend-preview" href="EXT:vitec/Resources/Public/Css/backend-preview.css"/>
<div class="vitec-preview">
<f:if condition="{imageUrl}">
<f:then>
<img src="{imageUrl}" class="vitec-preview__thumb" width="200" alt="Card preview"/>
</f:then>
<f:else>
<div class="vitec-preview__thumb-placeholder">▢</div>
</f:else>
</f:if>
<div class="vitec-preview__body">
<div class="vitec-preview__label">VITEC · Card — {typeLabel}</div>
<h3 class="vitec-preview__headline">
<f:if condition="{title}">
<f:then>{title}</f:then>
<f:else><em style="color:#c00;">⚠ No {typeLabel} selected</em></f:else>
</f:if>
</h3>
<f:if condition="{subtitle}">
<div class="vitec-preview__subline">{subtitle -> f:format.crop(maxCharacters: 90)}</div>
</f:if>
</div>
<div class="vitec-preview__settings">
<span class="vitec-badge">{typeLabel}</span>
<span class="vitec-badge">Layout: {layout}</span>
<f:if condition="{recordUid} == 0">
<span class="vitec-badge vitec-badge--warning">⚠ nothing selected</span>
</f:if>
</div>
</div>
</html>
@@ -204,4 +204,44 @@
align-items: flex-start;
flex-wrap: wrap;
}
}
}
/* Small monitors: drop the body text — label, headline and badges stay. */
@media (max-width: 1400px) {
.vitec-preview__body-text {
display: none;
}
}
/* Real fix: react to the PREVIEW COLUMN width, not the monitor width.
The page-module body of a CE containing a vitec preview becomes a size
container (e.g. inside narrow b13 container columns). */
.t3-page-ce-body:has(.vitec-preview) {
container-type: inline-size;
}
/* Narrow column: stack the grid, drop the body text, badges in a row. */
@container (max-width: 700px) {
.vitec-preview {
grid-template-columns: 1fr;
}
.vitec-preview__body-text {
display: none;
}
.vitec-preview__settings {
flex-direction: row;
align-items: flex-start;
flex-wrap: wrap;
}
.vitec-preview__thumb,
.vitec-preview__thumb-placeholder {
max-width: 100%;
height: auto;
}
}
/* Very narrow column: only label, headline and badges survive. */
@container (max-width: 420px) {
.vitec-preview__subline {
display: none;
}
}
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
<rect x="3" y="7" width="12" height="8" rx="1.5" fill="#ff6a00"/>
<rect x="17" y="7" width="12" height="8" rx="1.5" fill="#9aa2ab"/>
<rect x="3" y="17" width="12" height="8" rx="1.5" fill="#9aa2ab"/>
<rect x="17" y="17" width="12" height="8" rx="1.5" fill="#9aa2ab"/>
</svg>

After

Width:  |  Height:  |  Size: 367 B

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
<path d="M16 3c-5 0-9 4-9 9 0 6.6 9 17 9 17s9-10.4 9-17c0-5-4-9-9-9z" fill="#ff6a00"/>
<circle cx="16" cy="12" r="4" fill="#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 226 B

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
<rect x="5" y="4" width="22" height="24" rx="2" fill="#0a3d62"/>
<rect x="8" y="7" width="16" height="9" rx="1" fill="#ff6a00"/>
<rect x="8" y="19" width="16" height="2.5" rx="1" fill="#fff"/>
<rect x="8" y="23" width="10" height="2.5" rx="1" fill="#9aa2ab"/>
</svg>

After

Width:  |  Height:  |  Size: 359 B