{ "name": "FeatureCardTwentyFive", "description": "Two-column grid feature cards with icon, title, description, and dual media items per card.", "details": "Use for showcasing services or features with visual emphasis. Each card displays an icon in a primary button style box, title, description, and two side-by-side images/videos at the bottom. Uses fixed 'two-items-per-row' grid layout on desktop (2 cards per row), button carousel on mobile. Cards have flexible height with images filling remaining space.", "constraints": { "textRules": { "title": { "required": true, "example": "Our Features", "minChars": 2, "maxChars": 50 }, "description": { "required": true, "example": "Discover what makes us different", "minChars": 5, "maxChars": 300 }, "tag": { "required": false, "example": "Services", "minChars": 2, "maxChars": 30 } }, "featureRules": { "minItems": 2, "maxItems": 8, "recommendedItems": "4", "structure": { "title": "string - Feature card title (required)", "description": "string - Feature card description (required)", "icon": "LucideIcon - Icon displayed in primary button box (required)", "mediaItems": "[MediaItem, MediaItem] - Tuple of exactly 2 media items (required)" }, "mediaItemStructure": { "imageSrc": "string - Path to image (optional if videoSrc provided) Image is recommended if no videoSrc.", "videoSrc": "string - Path to video (optional if imageSrc provided)", "imageAlt": "string - Alt text for image", "videoAriaLabel": "string - Aria label for video" } } }, "propsSchema": { "features": "Array<{ title: string, description: string, icon: LucideIcon, mediaItems: [MediaItem, MediaItem] }> - Feature cards with dual media", "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' | 'depth-3d' (required)", "title": "string (required)", "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title", "description": "string (required)", "tag?": "string", "tagIcon?": "LucideIcon", "tagAnimation?": "'none' | 'opacity' | 'slide-up' | 'blur-reveal'", "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>", "buttonAnimation?": "'none' | 'opacity' | 'slide-up' | 'blur-reveal'", "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required)", "useInvertedBackground": "boolean (required)", "carouselMode?": "'auto' | 'buttons' (default: 'buttons')", "uniformGridCustomHeightClasses?": "string", "ariaLabel?": "string (default: 'Feature section')", "className?": "string", "containerClassName?": "string", "cardClassName?": "string", "mediaClassName?": "string", "textBoxTitleClassName?": "string", "textBoxTitleImageWrapperClassName?": "string", "textBoxTitleImageClassName?": "string", "textBoxDescriptionClassName?": "string", "cardTitleClassName?": "string", "cardDescriptionClassName?": "string", "cardIconClassName?": "string", "cardIconWrapperClassName?": "string", "gridClassName?": "string", "carouselClassName?": "string", "controlsClassName?": "string", "textBoxClassName?": "string", "textBoxTagClassName?": "string", "textBoxButtonContainerClassName?": "string", "textBoxButtonClassName?": "string", "textBoxButtonTextClassName?": "string" }, "usageExample": "", "do": [ "Use for features with visual examples", "Each feature requires exactly 2 media items", "Use relevant icons for each feature", "Supports 3D animations" ], "dont": [ "Do not use without 2 media items per feature", "Do not use without icons" ], "editRules": { "textOnly": true, "layoutLocked": true, "styleLocked": true } }