`; the block itself is only this grid (the demo iframe adds the `max-w-6xl mx-auto` page padding, which is not part of the block).
- Titles in order: `More creativity`, `Scale budgets efficiently`, `Smart Dashboards`, `Control Center`, `Email Reports`, `Forecasting`.
- Each block ends with its own link text: `Learn more about Creativity`, `Learn more about Efficiency`, `Learn more about Dashboards`, `Learn more about Control`, `Learn more about Reports`, `Learn more about Forecasting` - the labels differ per block, so do not emit a generic `Learn more`.
- Descriptions repeat across blocks: items 1 and 3 both use `This is where we really begin to visualize your napkin sketches and make them into beautiful pixels.`, items 2 and 4 both use `Now that we've aligned the details, it's time to get things mapped out and organized.`, item 5 uses `We strive to embrace and drive change in our industry which allows us to keep our clients relevant.`, item 6 uses `Staying focused allows us to turn every project we complete into something we love.`.
- Geometry: icon `shrink-0 size-8 mb-5 text-foreground` at `stroke-width="1.5"`, title as a `
` (not a heading tag), description `mt-2` with `text-sm text-muted-foreground-1`, link `mt-3` with `text-sm text-primary hover:decoration-2 underline underline-offset-4 focus:outline-hidden focus:decoration-2`.
- The grid is 2 columns even at the smallest breakpoint (`grid-cols-2`), not a single stacked column.
- Fully static; links are `href="#"` placeholders and no Preline JS plugins are used.
Token and Tailwind rules:
- Treat source token classes as semantic roles, not fixed class names to blindly copy.
- Map every source `primary` role to the destination project's current primary token/config/CSS variable. Active links, checked states, progress lines, focus rings, primary gradients, logo primary fills/strokes, and primary buttons must share that destination primary color.
- Do not hardcode Preline blue or emit `text-blue-*`, `bg-blue-*`, `border-blue-*`, `fill-blue-*`, `stroke-blue-*`, `from-blue-*`, `via-blue-*`, `to-blue-*`, or fixed blue hex/rgb values for primary roles unless the destination primary is explicitly blue.
- Before using source-only token classes such as `text-foreground-inverse`, `bg-layer`, `border-layer-line`, `bg-navbar`, `border-line-2`, `bg-dropdown`, or similar Preline tokens, inspect the destination Tailwind config, global CSS/theme variables, and existing components for an equivalent utility/token.
- Prefer existing destination utilities such as `text-white`, `text-primary-foreground`, `text-foreground`, `text-muted-foreground`, `bg-background`, `bg-card`, `bg-popover`, `border-border`, `bg-muted`, `bg-accent`, `ring-ring`, or app-specific tokens when they match the source role.
- If no equivalent exists, add the smallest project-appropriate token or utility before using it. Do not leave undefined source classes in the generated markup.
Asset and icon rules:
- Use exact source images, avatars, product media, branded SVGs, payment marks, channel logos, and app icons when the source provides them.
- Do not replace source assets with initials, emojis, generic icons, generated placeholders, or different stock media.
- Ordinary interface icons should match the destination icon system. If the project uses Lucide-style outline icons, keep the 24 viewBox, `fill="none"`, `stroke="currentColor"`, rounded caps/joins, and source stroke widths.
- Brand/source SVG shape is fixed content. Only map semantic colors such as primary fill/stroke to the destination token.
Behavior and accessibility:
- Preserve source interactions: links, buttons, dropdowns, tooltips, tabs, menus, drawers, modals, toggles, search, filters, form controls, validation states, loading/empty states, and open/closed defaults.
- For source behavior powered by Preline JS or a third-party package, inspect installed dependencies and existing primitives first. Reuse a destination primitive only when it can preserve the source geometry, states, accessibility, and behavior.
- Treat new dependencies as allowed by default unless the user, repository instructions, or package policy explicitly prohibit them. When no faithful equivalent exists, install/use the Preline UI runtime/plugin or the exact source third-party package; do not silently substitute ad hoc JavaScript or custom React state.
- Only under an explicit dependency prohibition may you implement a scoped framework-native equivalent. It must preserve keyboard and focus management, placement and layering, responsive behavior, and accessibility; static or simplified approximations are not acceptable.
- Use semantic HTML and accessible names. Keep `aria-current`, `aria-expanded`, `aria-haspopup`, `role`, labels, focus states, and keyboard behavior when the source exposes them or the destination primitive requires them.
- Desktop and mobile states must not overlap text, clip controls, or shift layout unexpectedly. Controls with icons, counters, badges, and labels should keep stable dimensions across hover/focus/active states.
Final QA:
- Compare the result against the source preview and HTML tab.
- Verify primary color follows the destination project, not Preline's default blue.
- Verify all emitted classes exist in the destination or are added deliberately.
- Verify responsive layout, focus states, dropdown/popover layering, long-text truncation, and source asset paths.
- Keep the final implementation scoped to this block and avoid unrelated refactors.