Component showcase

UI primitives

Shared building blocks, each shown inside a section that renders it, plus the marquee band, heading styles and the floating WhatsApp button. 28 variants, 27 rendered live.

outline

marquee-bandin useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/MarqueeBand.astro
  • src/components/SectionList.astro
  • src/lib/band-words.ts
How to pin
{
  "bandsAfter": [
    "<section id>"
  ]
}

bandsAfter places the band; its outline|solid style is seeded, not pinnable

Reads
none | words derived
Used by
not tracked (layout is seeded per site)
Quality gates
6 codes

motion / bands: gradient-overuse multi-effect-hover no-hover no-reduced-motion alignment-mixed same-adjacent-background

Selected by
style: layout.band = forced.band ?? pick(seed,band,[outline,solid]); placement: chooseBands(seed,count,forced.bands) -> BandUsage both|early|late|none; words: bandWords() (offer names / page names / titles + brand)
Notes
one band per page; suppressed if words equal neighbouring titles (bandWordsBeside)

solid

marquee-bandin useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/MarqueeBand.astro
  • src/components/SectionList.astro
  • src/lib/band-words.ts
How to pin
{
  "bandsAfter": [
    "<section id>"
  ]
}

bandsAfter places the band; its outline|solid style is seeded, not pinnable

Reads
none | words derived
Used by
not tracked (layout is seeded per site)
Quality gates
6 codes

motion / bands: gradient-overuse multi-effect-hover no-hover no-reduced-motion alignment-mixed same-adjacent-background

Selected by
style: layout.band = forced.band ?? pick(seed,band,[outline,solid]); placement: chooseBands(seed,count,forced.bands) -> BandUsage both|early|late|none; words: bandWords() (offer names / page names / titles + brand)
Notes
one band per page; suppressed if words equal neighbouring titles (bandWordsBeside)

rise

heading-stylein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/SectionList.astro
  • src/components/ui/SectionHeading.astro
  • src/scripts/sections/reveal.ts
How to pin

NO (only effect registry SectionVariants.heading; none set). Same for siteAlign left|center

Reads
none
Used by
not tracked (layout is seeded per site)
Quality gates
6 codes

motion / bands: gradient-overuse multi-effect-hover no-hover no-reduced-motion alignment-mixed same-adjacent-background

Selected by
layout.heading = forced.heading ?? pick(seed,heading,[rise,chars,blur]); data-heading on [data-motion-root]

chars

heading-stylein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/SectionList.astro
  • src/components/ui/SectionHeading.astro
  • src/scripts/sections/reveal.ts
How to pin

NO (only effect registry SectionVariants.heading; none set). Same for siteAlign left|center

Reads
none
Used by
not tracked (layout is seeded per site)
Quality gates
6 codes

motion / bands: gradient-overuse multi-effect-hover no-hover no-reduced-motion alignment-mixed same-adjacent-background

Selected by
layout.heading = forced.heading ?? pick(seed,heading,[rise,chars,blur]); data-heading on [data-motion-root]

blur

heading-stylein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/SectionList.astro
  • src/components/ui/SectionHeading.astro
  • src/scripts/sections/reveal.ts
How to pin

NO (only effect registry SectionVariants.heading; none set). Same for siteAlign left|center

Reads
none
Used by
not tracked (layout is seeded per site)
Quality gates
6 codes

motion / bands: gradient-overuse multi-effect-hover no-hover no-reduced-motion alignment-mixed same-adjacent-background

Selected by
layout.heading = forced.heading ?? pick(seed,heading,[rise,chars,blur]); data-heading on [data-motion-root]

Ambient

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/Ambient.astro
How to pin

no

Used by
src/components/Footer.astro, src/components/page/PageHero.astro, src/components/sections/About.astro, src/components/sections/CvSection.astro, src/components/sections/Downloads.astro, src/components/sections/Faq.astro, src/components/sections/Gallery.astro, src/components/sections/ListSection.astro, src/components/sections/PageCatalogue.astro, src/components/sections/PageTeasers.astro, src/components/sections/Services.astro, src/components/sections/Stats.astro, src/components/sections/Team.astro, src/components/sections/Testimonials.astro, src/components/sections/VideoSection.astro, src/components/sections/gallery/LogoWall.astro, src/components/sections/health/HealthTeam.astro
Selected by
imported directly
Notes
decor motifs from ui/decor-motifs.ts, seeded per section

Avatar

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/Avatar.astro
How to pin

no

Used by
src/components/sections/Team.astro, src/components/sections/health/HealthTeam.astro
Selected by
imported directly

Byline

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/Byline.astro
How to pin

no

Used by
src/components/sections/Testimonials.astro
Selected by
imported directly

CardArt

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/CardArt.astro
How to pin

no

Used by
src/components/sections/services/ServiceCards.astro, src/components/sections/services/ServiceList.astro, src/components/sections/services/ServiceMenu.astro
Selected by
imported directly

CardCopy

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/CardCopy.astro
How to pin

no

Used by
src/components/sections/services/ServiceCards.astro
Selected by
imported directly

CardMedia

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/CardMedia.astro
How to pin

no

Used by
src/components/sections/About.astro, src/components/sections/PageTeasers.astro, src/components/sections/Stats.astro, src/components/sections/services/ServiceBento.astro, src/components/sections/services/ServiceCards.astro, src/components/sections/services/ServiceIcons.astro, src/components/sections/services/ServiceMenu.astro, src/components/sections/services/ServiceStack.astro
Selected by
imported directly

Downloads

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/Downloads.astro
How to pin

no

Used by
src/components/sections/About.astro
Selected by
imported directly
Notes
DUPLICATE name of sections/Downloads.astro (takes links[{label,href}])

HScroll

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/HScroll.astro
How to pin

no

Used by
src/components/SectionList.astro, src/components/sections/Gallery.astro
Selected by
imported directly

Icon

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/Icon.astro
How to pin

no

Used by
src/components/WhatsAppFab.astro, src/components/footer/FooterBase.astro, src/components/hero/ClinicHeroCopy.astro, src/components/hero/HeroCtas.astro, src/components/hero/MakerHeroCopy.astro, src/components/nav/Bar.astro, src/components/nav/NavAccordion.astro, src/components/nav/NavDropdown.astro, src/components/page/PageHeroCopy.astro, src/components/sections/About.astro, src/components/sections/Downloads.astro, src/components/sections/Faq.astro, src/components/sections/ListSection.astro, src/components/sections/PageTeasers.astro, src/components/sections/Team.astro, src/components/sections/Testimonials.astro, src/components/sections/contact/ActionButton.astro, src/components/sections/contact/ChannelCard.astro, src/components/sections/contact/ChannelIcon.astro, src/components/sections/contact/ColorBlockSeal.astro, src/components/sections/contact/Hours.astro, src/components/sections/contact/MapPanel.astro, src/components/sections/contact/NumberedAction.astro, src/components/sections/contact/Socials.astro, src/components/sections/contact/Ticket.astro, src/components/sections/faq/HelpCard.astro, src/components/sections/gallery/GalleryReel.astro, src/components/sections/health/BookingBand.astro, src/components/sections/health/TreatmentExplorer.astro, src/components/sections/services/ServiceBento.astro, src/components/sections/services/ServiceCards.astro, src/components/sections/services/ServiceIcons.astro, src/components/sections/services/ServiceList.astro, src/components/sections/services/ServiceMenu.astro, src/components/sections/services/ServiceStack.astro, src/effects/filmstrip/Hero.astro, src/effects/kinetic-type/Hero.astro, src/effects/panorama-360/Hero.astro, src/effects/parallax-layers/Hero.astro
Selected by
imported directly
Notes
paths in ui/icon-paths.ts

IconBadge

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/IconBadge.astro
How to pin

no

Used by
src/components/sections/About.astro, src/components/sections/PageTeasers.astro, src/components/sections/about/AboutText.astro, src/components/sections/services/ServiceBento.astro, src/components/sections/services/ServiceCards.astro, src/components/sections/services/ServiceList.astro
Selected by
imported directly

ItemRows

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/ItemRows.astro
How to pin

no

Used by
src/components/sections/about/AboutText.astro, src/components/sections/services/ServiceList.astro
Selected by
imported directly

LinkedText

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/LinkedText.astro
How to pin

no

Used by
src/components/page/PageHeroCopy.astro, src/components/sections/About.astro, src/components/sections/CvSection.astro, src/components/sections/Faq.astro, src/components/sections/about/AboutText.astro, src/components/sections/health/Journey.astro, src/components/sections/health/TreatmentExplorer.astro
Selected by
imported directly

LongCopy

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/LongCopy.astro
How to pin

no

Used by
src/components/sections/About.astro, src/components/sections/about/AboutText.astro
Selected by
imported directly

MarqueeBand

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/MarqueeBand.astro
How to pin

no

Used by
src/components/SectionList.astro
Selected by
imported directly

NoBreakPhones

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/NoBreakPhones.astro
How to pin

no

Used by
src/components/sections/contact/ActionButton.astro
Selected by
imported directly

Picture

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/Picture.astro
How to pin

no

Used by
src/components/footer/Collage.astro, src/components/footer/Columns.astro, src/components/page/PageHero.astro, src/components/page/PageRail.astro, src/components/page/SpecPanel.astro, src/components/sections/About.astro, src/components/sections/CvSection.astro, src/components/sections/Downloads.astro, src/components/sections/Highlight.astro, src/components/sections/contact/Backdrop.astro, src/components/sections/contact/ColorBlockSeal.astro, src/components/sections/contact/Editorial.astro, src/components/sections/contact/Numbered.astro, src/components/sections/contact/Poster.astro, src/components/sections/contact/Ticket.astro, src/components/sections/gallery/GalleryTile.astro, src/components/sections/health/Monogram.astro, src/components/sections/services/MenuCategory.astro, src/components/sections/services/ServiceList.astro, src/effects/card-stack/Hero.astro, src/effects/clinic-scan/Hero.astro, src/effects/filmstrip/Hero.astro, src/effects/food-reveal/Hero.astro, src/effects/kinetic-type/Hero.astro, src/effects/mosaic-zoom/Hero.astro, src/effects/panorama-360/Hero.astro, src/effects/parallax-layers/Hero.astro, src/effects/product-3d/Hero.astro, src/effects/product-showcase/Hero.astro, src/effects/shader-gradient/Hero.astro, src/effects/shutter-blinds/Hero.astro, src/effects/split-curtain/Hero.astro
Selected by
imported directly

SectionHeading

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/SectionHeading.astro
How to pin

no

Used by
src/components/sections/CvSection.astro, src/components/sections/Downloads.astro, src/components/sections/Faq.astro, src/components/sections/Gallery.astro, src/components/sections/Highlight.astro, src/components/sections/ListSection.astro, src/components/sections/PageCatalogue.astro, src/components/sections/PageTeasers.astro, src/components/sections/Services.astro, src/components/sections/Team.astro, src/components/sections/Testimonials.astro, src/components/sections/VideoSection.astro, src/components/sections/gallery/LogoWall.astro, src/components/sections/health/HealthTeam.astro, src/components/sections/health/Journey.astro, src/components/sections/health/TreatmentExplorer.astro, src/components/sections/services/ServiceStack.astro
Selected by
imported directly

Separator

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/Separator.astro
How to pin

no

Used by
src/components/page/PageHero.astro, src/components/page/PageRail.astro
Selected by
imported directly
Notes
edge shape from pickSeparator(seed,vertical)

SplitWords

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/SplitWords.astro
How to pin

no

Used by
src/components/page/PageHeroCopy.astro, src/components/sections/About.astro, src/components/sections/LocationSection.astro, src/components/sections/Testimonials.astro, src/components/sections/about/AboutText.astro, src/components/sections/contact/ColorBlock.astro, src/components/sections/contact/DarkMap.astro, src/components/sections/contact/Editorial.astro, src/components/sections/contact/Numbered.astro, src/components/sections/contact/Poster.astro, src/components/sections/contact/Ticket.astro
Selected by
imported directly

Surface

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/Surface.astro
How to pin

no

Used by
src/components/SectionList.astro, src/components/blocks.ts
Selected by
imported directly
Notes
block wrapper; tokens base|tint|invert|brand|photo (lib/surfaces.ts) overridable by theme.json surfaces{blockKey}

TextLines

ui-primitivein useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/ui/TextLines.astro
How to pin

no

Used by
src/components/sections/services/ServiceBento.astro, src/components/sections/services/ServiceIcons.astro, src/components/sections/services/ServiceList.astro, src/components/sections/services/ServiceStack.astro
Selected by
imported directly

WhatsAppFab

fabin useOpen live
desktop preview
desktop 1280px
mobile preview
mobile 390px
Files
  • src/components/WhatsAppFab.astro
How to pin

no (quality rule fab-overlap)

Reads
contact.whatsapp | contact.whatsapp digits
Used by
not tracked (layout is seeded per site)
Selected by
always mounted by layouts/Base.astro; renders only if content.contact.whatsapp
Notes
reads getSiteData() directly

Base

layoutin use

not rendered: page shell of every demo, not a component with its own look

Files
  • src/layouts/Base.astro
How to pin

no

Used by
not tracked (layout is seeded per site)
Selected by
only layout; wraps Nav, slot, Footer, WhatsAppFab
Notes
pages/index.astro = Hero (effects[effect].Hero) + SectionList(variants=fx.variants) + Contact; pages/[...slug].astro = PageHero + SectionList + Contact

Primitives: where each is imported

PrimitiveFileImported by
Ambientsrc/components/ui/Ambient.astrosrc/components/Footer.astro
src/components/page/PageHero.astro
src/components/sections/About.astro
src/components/sections/CvSection.astro
src/components/sections/Downloads.astro
src/components/sections/Faq.astro
src/components/sections/Gallery.astro
src/components/sections/ListSection.astro
src/components/sections/PageCatalogue.astro
src/components/sections/PageTeasers.astro
src/components/sections/Services.astro
src/components/sections/Stats.astro
src/components/sections/Team.astro
src/components/sections/Testimonials.astro
src/components/sections/VideoSection.astro
src/components/sections/gallery/LogoWall.astro
src/components/sections/health/HealthTeam.astro
Avatarsrc/components/ui/Avatar.astrosrc/components/sections/Team.astro
src/components/sections/health/HealthTeam.astro
Bylinesrc/components/ui/Byline.astrosrc/components/sections/Testimonials.astro
CardArtsrc/components/ui/CardArt.astrosrc/components/sections/services/ServiceCards.astro
src/components/sections/services/ServiceList.astro
src/components/sections/services/ServiceMenu.astro
CardCopysrc/components/ui/CardCopy.astrosrc/components/sections/services/ServiceCards.astro
CardMediasrc/components/ui/CardMedia.astrosrc/components/sections/About.astro
src/components/sections/PageTeasers.astro
src/components/sections/Stats.astro
src/components/sections/services/ServiceBento.astro
src/components/sections/services/ServiceCards.astro
src/components/sections/services/ServiceIcons.astro
src/components/sections/services/ServiceMenu.astro
src/components/sections/services/ServiceStack.astro
Downloadssrc/components/ui/Downloads.astrosrc/components/sections/About.astro
HScrollsrc/components/ui/HScroll.astrosrc/components/SectionList.astro
src/components/sections/Gallery.astro
Iconsrc/components/ui/Icon.astrosrc/components/WhatsAppFab.astro
src/components/footer/FooterBase.astro
src/components/hero/ClinicHeroCopy.astro
src/components/hero/HeroCtas.astro
src/components/hero/MakerHeroCopy.astro
src/components/nav/Bar.astro
src/components/nav/NavAccordion.astro
src/components/nav/NavDropdown.astro
src/components/page/PageHeroCopy.astro
src/components/sections/About.astro
src/components/sections/Downloads.astro
src/components/sections/Faq.astro
src/components/sections/ListSection.astro
src/components/sections/PageTeasers.astro
src/components/sections/Team.astro
src/components/sections/Testimonials.astro
src/components/sections/contact/ActionButton.astro
src/components/sections/contact/ChannelCard.astro
src/components/sections/contact/ChannelIcon.astro
src/components/sections/contact/ColorBlockSeal.astro
src/components/sections/contact/Hours.astro
src/components/sections/contact/MapPanel.astro
src/components/sections/contact/NumberedAction.astro
src/components/sections/contact/Socials.astro
src/components/sections/contact/Ticket.astro
src/components/sections/faq/HelpCard.astro
src/components/sections/gallery/GalleryReel.astro
src/components/sections/health/BookingBand.astro
src/components/sections/health/TreatmentExplorer.astro
src/components/sections/services/ServiceBento.astro
src/components/sections/services/ServiceCards.astro
src/components/sections/services/ServiceIcons.astro
src/components/sections/services/ServiceList.astro
src/components/sections/services/ServiceMenu.astro
src/components/sections/services/ServiceStack.astro
src/effects/filmstrip/Hero.astro
src/effects/kinetic-type/Hero.astro
src/effects/panorama-360/Hero.astro
src/effects/parallax-layers/Hero.astro
IconBadgesrc/components/ui/IconBadge.astrosrc/components/sections/About.astro
src/components/sections/PageTeasers.astro
src/components/sections/about/AboutText.astro
src/components/sections/services/ServiceBento.astro
src/components/sections/services/ServiceCards.astro
src/components/sections/services/ServiceList.astro
ItemRowssrc/components/ui/ItemRows.astrosrc/components/sections/about/AboutText.astro
src/components/sections/services/ServiceList.astro
LinkedTextsrc/components/ui/LinkedText.astrosrc/components/page/PageHeroCopy.astro
src/components/sections/About.astro
src/components/sections/CvSection.astro
src/components/sections/Faq.astro
src/components/sections/about/AboutText.astro
src/components/sections/health/Journey.astro
src/components/sections/health/TreatmentExplorer.astro
LongCopysrc/components/ui/LongCopy.astrosrc/components/sections/About.astro
src/components/sections/about/AboutText.astro
MarqueeBandsrc/components/ui/MarqueeBand.astrosrc/components/SectionList.astro
NoBreakPhonessrc/components/ui/NoBreakPhones.astrosrc/components/sections/contact/ActionButton.astro
Picturesrc/components/ui/Picture.astrosrc/components/footer/Collage.astro
src/components/footer/Columns.astro
src/components/page/PageHero.astro
src/components/page/PageRail.astro
src/components/page/SpecPanel.astro
src/components/sections/About.astro
src/components/sections/CvSection.astro
src/components/sections/Downloads.astro
src/components/sections/Highlight.astro
src/components/sections/contact/Backdrop.astro
src/components/sections/contact/ColorBlockSeal.astro
src/components/sections/contact/Editorial.astro
src/components/sections/contact/Numbered.astro
src/components/sections/contact/Poster.astro
src/components/sections/contact/Ticket.astro
src/components/sections/gallery/GalleryTile.astro
src/components/sections/health/Monogram.astro
src/components/sections/services/MenuCategory.astro
src/components/sections/services/ServiceList.astro
src/effects/card-stack/Hero.astro
src/effects/clinic-scan/Hero.astro
src/effects/filmstrip/Hero.astro
src/effects/food-reveal/Hero.astro
src/effects/kinetic-type/Hero.astro
src/effects/mosaic-zoom/Hero.astro
src/effects/panorama-360/Hero.astro
src/effects/parallax-layers/Hero.astro
src/effects/product-3d/Hero.astro
src/effects/product-showcase/Hero.astro
src/effects/shader-gradient/Hero.astro
src/effects/shutter-blinds/Hero.astro
src/effects/split-curtain/Hero.astro
SectionHeadingsrc/components/ui/SectionHeading.astrosrc/components/sections/CvSection.astro
src/components/sections/Downloads.astro
src/components/sections/Faq.astro
src/components/sections/Gallery.astro
src/components/sections/Highlight.astro
src/components/sections/ListSection.astro
src/components/sections/PageCatalogue.astro
src/components/sections/PageTeasers.astro
src/components/sections/Services.astro
src/components/sections/Team.astro
src/components/sections/Testimonials.astro
src/components/sections/VideoSection.astro
src/components/sections/gallery/LogoWall.astro
src/components/sections/health/HealthTeam.astro
src/components/sections/health/Journey.astro
src/components/sections/health/TreatmentExplorer.astro
src/components/sections/services/ServiceStack.astro
Separatorsrc/components/ui/Separator.astrosrc/components/page/PageHero.astro
src/components/page/PageRail.astro
SplitWordssrc/components/ui/SplitWords.astrosrc/components/page/PageHeroCopy.astro
src/components/sections/About.astro
src/components/sections/LocationSection.astro
src/components/sections/Testimonials.astro
src/components/sections/about/AboutText.astro
src/components/sections/contact/ColorBlock.astro
src/components/sections/contact/DarkMap.astro
src/components/sections/contact/Editorial.astro
src/components/sections/contact/Numbered.astro
src/components/sections/contact/Poster.astro
src/components/sections/contact/Ticket.astro
Surfacesrc/components/ui/Surface.astrosrc/components/SectionList.astro
src/components/blocks.ts
TextLinessrc/components/ui/TextLines.astrosrc/components/sections/services/ServiceBento.astro
src/components/sections/services/ServiceIcons.astro
src/components/sections/services/ServiceList.astro
src/components/sections/services/ServiceStack.astro