# GENERATED. Do not change this line unless the file contains project specific changes.
# DO NOT EDIT THIS FILE. Changes are overwritten on the next build.
# Owner command: archetype.registry.build
# Edit instead: the archetype.registry.build generator source (not this file).
# Regenerate:   pnpm exec werkstatt run archetype.registry.build
id: hero-decision-card
displayName: Hero · Decision card
version: 1.1.0
semanticRole: hero-with-decision-card
description: |
  Hero with side decision card. RFC-0101/0102 composed; decision card uses
  RFC-0101 GlassConfig.
expectedIntents:
  - introduction
  - cta
  - clarify-positioning
expectedIndustryFit:
  - trades-and-construction
  - consulting-and-coaching
  - legal-services
layoutHint: decision-card
bodyKind: composite
recommendedItemCount:
  min: 3
  max: 4
propsSchema:
  $shape: zod
  compose:
    - section-visual
    - section-header
  shape: |
    z.object({
      tagline: z.string().optional(),
      ctaNote: z.string().min(1).optional(),
      backgroundImage: z.string().optional(),
      leadImage: z.object({
        src: z.string().min(1),
        alt: z.string().min(1),
      }).optional(),
      leadImageVisible: z.boolean().optional(),
      primaryCta: z.object({
        label: z.string().min(2),
        target: z.discriminatedUnion("kind", [
          z.object({
            kind: z.literal("internal"),
            pageId: z.string().min(1),
            query: z.record(z.string().regex(/^[a-zA-Z0-9_-]{1,32}$/), z.string().regex(/^[a-zA-Z0-9_%.-]{0,128}$/)).optional(),
            anchor: z.string().optional(),
          }).strict(),
          z.object({
            kind: z.literal("external"),
            href: z.string().min(1),
            rel: z.string().optional(),
          }).strict(),
          z.object({
            kind: z.literal("anchor"),
            anchor: z.string().min(1),
          }).strict(),
        ]),
      }).optional(),
      secondaryCta: z.object({
        label: z.string().min(2),
        target: z.discriminatedUnion("kind", [
          z.object({
            kind: z.literal("internal"),
            pageId: z.string().min(1),
            query: z.record(z.string().regex(/^[a-zA-Z0-9_-]{1,32}$/), z.string().regex(/^[a-zA-Z0-9_%.-]{0,128}$/)).optional(),
            anchor: z.string().optional(),
          }).strict(),
          z.object({
            kind: z.literal("external"),
            href: z.string().min(1),
            rel: z.string().optional(),
          }).strict(),
          z.object({
            kind: z.literal("anchor"),
            anchor: z.string().min(1),
          }).strict(),
        ]),
      }).optional(),
      decisionCard: z.object({
        glass: z.object({
          enabled: z.boolean(),
          blur: z.number().optional(),
          saturate: z.number().optional(),
          tint: z.string().optional(),
          tintOpacity: z.number().optional(),
          border: z.enum(["hairline", "none"]).optional(),
        }).optional(),
        items: z.array(z.object({
          label: z.string().min(2),
          value: z.string().min(2),
        })).min(1),
      }).optional(),
    }).strict()
acceptedCosmicNames:
  - Phobos
constraints:
  forbidPhrases:
    - günstig
    - Ergebnis garantiert
    - "100% Erfolg"
