/* Motion · feature-page shell components. Each /funkcje/.html assembles its page from these blocks plus the shared Header + Footer. Pattern lifted from Rachunkowy CRM but adapted to Motion's clean blue palette. Components: · FeatureHero — top of page: breadcrumb-ish eyebrow + headline + sub + CTA + product panel visual · FeatureSection — alternating image+text block ("section + visual") · FeatureSteps — 3-step "How it works" · FeatureBenefits — 4-up grid of benefit tiles · FeatureCTA — banner-style CTA (blue) · FeatureRelated — "Powiązane funkcje" strip with 3 cards */ function FeatureHero({ moduleName, title, subtitle, bullets, primaryCta = "Bezpłatna prezentacja", secondaryCta = "Zobacz cennik", children }) { return (

Funkcje {moduleName && <>·{moduleName}}

{title}

{subtitle}

{bullets && (
    {bullets.map((b) => (
  • {b}
  • ))}
)}
{children}
); } function FeatureSection({ eyebrow, title, text, list, reverse = false, alt = false, visual }) { return (
{eyebrow &&
{eyebrow}
}

{title}

{text &&

{text}

} {list && (
    {list.map((item) => (
  • {typeof item === "string" ?
    {item}
    :
    {item.title}{item.desc}
    }
  • ))}
)}
{visual}
); } function FeatureSteps({ eyebrow, title, subtitle, steps }) { return (
{eyebrow &&
{eyebrow}
}

{title}

{subtitle &&

{subtitle}

}
{steps.map((s, i) => (
{String(i + 1).padStart(2, "0")}

{s.title}

{s.desc}

))}
); } function FeatureBenefits({ eyebrow, title, subtitle, benefits }) { return (
{eyebrow &&
{eyebrow}
}

{title}

{subtitle &&

{subtitle}

}
{benefits.map((b, i) => (

{b.title}

{b.desc}

))}
); } function FeatureCTA({ title, subtitle, primary = "Bezpłatna prezentacja", secondary = "Porozmawiaj z nami" }) { return (

{title}

{subtitle}

); } function FeatureRelated({ currentSlug, slugs }) { // If no explicit list, pick 3 features from the same module (excluding current). let picks = []; if (slugs && slugs.length) { picks = slugs.map(feature).filter(Boolean); } else if (currentSlug) { const cur = feature(currentSlug); picks = FEATURES.filter((f) => f.module === cur.module && f.slug !== currentSlug).slice(0, 3); } if (!picks.length) return null; return (

Powiązane funkcje

{picks.map((f) => (
{f.name}
{f.desc}
{f.built ? "Zobacz" : "Wkrótce"}
))}
); } /* Helper: wraps a feature page so every page has identical chrome (Header + Footer + ScreenLabel). Pass `slug` for nav highlighting + related. */ function FeaturePage({ slug, children }) { const f = feature(slug); return (
{children}
); } Object.assign(window, { FeatureHero, FeatureSection, FeatureSteps, FeatureBenefits, FeatureCTA, FeatureRelated, FeaturePage, });