# Quote cards with metrics — Section Design Reference

Schema: Design Details SECTION.md v3.2
Source: https://buildwithfern.com/
Website: Fern
Section ID: 0614d1a5-8d7a-4295-83ee-79382e94da06
Design Details page: https://designdetails.io/sections/buildwithfern-com--home--testimonials-0614d1a5
Status: deterministic evidence captured; editorial AI review pending

## Purpose

This is a testimonials section on the Home page. Use the attached crop and measured browser facts to reconstruct its composition. Do not infer unmeasured source values.

## Layout

1374×432px root; grid; 675px 675px

## Visual signature

minimal, corporate, developer-focused treatment at 1440×1288px. The crop spans 6447–7735px of a 10124px page.

## Components

- Navigation Bar
- Hero
- Logo Strip
- Stat Block
- Feature Card
- Testimonial Card
- Footer
- UI Mockup Simulation

## Evidence note

The geometry, typography, colors, media, and animation parameters below come from saved HTML/CSS/browser evidence when present. Website-level roles are supplied separately. Editorial section judgment remains pending unless the MCP resolves this source ID to a promoted canonical record.

## Build blueprint v3.2

### Purpose and classification

- Canonical type: testimonials
- Source type: testimonials
- Structure: grid
- Layout: 1374×432px root; grid; 675px 675px
- Styles: minimal, corporate, developer-focused
- Components: Navigation Bar, Hero, Logo Strip, Stat Block, Feature Card, Testimonial Card, Footer, UI Mockup Simulation
- Purpose: testimonials section from the Home page of Fern.
- Visual signature: rgb(249, 249, 251) with 1374×432px root; grid; 675px 675px. Inspect the crop for image and content hierarchy.
- Place on the page: 8 of 18, after Feature collection (`42d7af26-034a-4d7b-8908-9509c1379522`), before Call to action (`ff255da1-b9e1-4889-899b-f3d734e1c0ba`)

### Crop and composition

- Crop: 1440×1288px; aspect ratio 1.118:1
- Page bounds: 6447–7735px of 10124px
- Guidance: Keep a clear anchor card and consistent internal card rules so the grid reads as one system.

### Exact typography evidence

The sectionScale values were measured inside this crop. The siteRoles values explain how those faces function across the source website; they must not replace section measurements.

```json
{
  "sectionScale": [
    {
      "role": "card/subheading",
      "family": "gtPlanar",
      "stack": "gtPlanar, \"gtPlanar Fallback\"",
      "size": "24px",
      "weight": "300",
      "lineHeight": "normal",
      "letterSpacing": "-0.5px",
      "sample": "“I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much",
      "element": "blockquote",
      "occurrences": 2,
      "sourceId": "font-37"
    }
  ],
  "siteRoles": [
    {
      "role": "display",
      "size": "48px",
      "family": "gtPlanar",
      "source": "computed",
      "traits": "Regular",
      "weight": "400",
      "evidence": "font-4: computed CSS at 1440×1000; AI role: gtPlanar at 48px, used for the main hero headline.",
      "sampleId": "font-4",
      "confidence": 0.9,
      "lineHeight": "55.2px",
      "letterSpacing": "-1.9px"
    },
    {
      "role": "heading",
      "size": "24px",
      "family": "gtPlanar",
      "source": "computed",
      "traits": "Regular",
      "weight": "400",
      "evidence": "font-2: computed CSS at 1440×1000; AI role: gtPlanar at 24px, used for section or feature card headings.",
      "sampleId": "font-2",
      "confidence": 0.85,
      "lineHeight": "normal",
      "letterSpacing": "-0.5px"
    },
    {
      "role": "body",
      "size": "16px",
      "family": "gtPlanar",
      "source": "computed",
      "traits": "Regular",
      "weight": "300",
      "evidence": "font-6: computed CSS at 1440×1000; AI role: gtPlanar at 16px, used for standard body copy and descriptive text.",
      "sampleId": "font-6",
      "confidence": 0.9,
      "lineHeight": "27.2px",
      "letterSpacing": "normal"
    },
    {
      "role": "mono",
      "size": "12px",
      "family": "JetBrains Mono",
      "source": "computed",
      "traits": "Regular",
      "weight": "400",
      "evidence": "font-15: computed CSS at 1440×1000; AI role: JetBrains Mono at 12px, used for code syntax and terminal outputs.",
      "sampleId": "font-15",
      "confidence": 0.95,
      "lineHeight": "19.8px",
      "letterSpacing": "normal"
    }
  ]
}
```

### Contextual design review

```json
{
  "status": "client-review-required",
  "checks": {
    "hierarchy": "Does each eyebrow, label and text level add useful information or clarify a necessary decision?",
    "decoration": "Do borders, effects, motion and spacing explain grouping or express a specific idea?",
    "repetition": "Can repeated claims, descriptions or actions be removed without losing needed information?",
    "identity": "What visible relationship between this offer, actual copy, imagery, typography and space gives the composition a convincing identity? Name its contribution and losses; matching ingredients or sparse styling are insufficient.",
    "reference": "Does it retain the source's dominant explanatory effect, media role, type balance and quiet space, not just columns?"
  },
  "heroMedia": {
    "appliesWhen": "A hero relies on focal media. A reasoned no-image hero remains valid and is judged by its visible composition.",
    "plan": "Record the image/headline first impression, actual available asset and crop, source image contribution, replacement contribution and losses before studies.",
    "review": "Does the actual hero suggest an offer, audience and experience appropriate to the whole brief? Quiet copy space or a recognizable subject is insufficient. One activity may lead without depicting all offers; justify its emphasis and resolve misleading implications. Missing assets or uncertain essential effects remain unverified."
  },
  "optionMedia": {
    "appliesWhen": "A section uses imagery to help visitors distinguish choices.",
    "planPerChoice": [
      "visitor distinction",
      "observable image evidence",
      "available asset or unresolved dependency",
      "crop retaining the distinguishing detail"
    ],
    "review": "Inspect the actual images. Shared atmosphere, changed crops or matching cards do not establish choice-specific meaning. If that role fails, resolve assets, choose an executable alternative or record lost/unverified and reject. Text comparison can be valid; it preserves a different contribution."
  },
  "noteCheck": "Check editorial interpretations against the received image; retain conflicts and unknown states instead of inventing selection or image meaning.",
  "decision": "Judge brief fit and positive character separately from layout preservation. Compare actual renders/references; essential lost or unverified effects prevent proceed. Reject either or both weak directions after inspection.",
  "qualityCertified": false
}
```

### Typography preservation review

```json
{
  "beforeStudy": "Use the actual reference image and captured section values to describe what its typography contributes: letter proportions and width, weight and contrast, case, line breaks and text-block shape, scale, spacing and relationship to the image. Label visual observations separately from captured facts and unknowns.",
  "substitution": "Choose an available, permitted face for the brief. Explain any substitute by the source relationships it preserves and any deliberate change; a familiar family, a serif/sans category or a mood label alone is not a justification. Do not copy an unavailable proprietary font or ban a common family merely because it is common.",
  "finalCheck": "Compare the actual rendered headline and supporting type beside this reference at the intended viewport. Check the loaded face/fallback and visible proportions, weight, line breaks, scale, spacing, contrast and image balance. Revise or reject when an essential typographic contribution is lost or unverified; a layout match or a font name is not a typography pass.",
  "unknowns": [
    "Glyph proportions, optical weight, actual line breaks, text-block shape and type-to-image balance require inspection of the reference image.",
    "Actual rendered face, font availability/licensing and responsive typography are not verified by this response."
  ]
}
```

### Exact color evidence

The section samples record where each computed value was used. Functional roles come from the website-level classifier and remain separate.

```json
{
  "sectionUsage": [
    {
      "value": "#F9F9FB",
      "cssValue": "rgb(249, 249, 251)",
      "alpha": 1,
      "appliedAs": [
        "background"
      ],
      "occurrences": 14,
      "sourceId": "color-6"
    }
  ],
  "functionalPalette": [
    {
      "hex": "#F7F7F7",
      "name": "canvas",
      "role": "canvas",
      "source": "computed",
      "evidence": "color-1: computed lab(97.332 -0.0000298023 0); AI role: Off-white #F7F7F7 used as the primary background color for the page body.",
      "sampleId": "color-1",
      "confidence": 0.95
    },
    {
      "hex": "#202020",
      "name": "text",
      "role": "text",
      "source": "computed",
      "evidence": "color-8: computed rgb(32, 32, 32); AI role: Dark grey #202020 used for primary headings and body text.",
      "sampleId": "color-8",
      "confidence": 0.95
    },
    {
      "hex": "#737373",
      "name": "muted text",
      "role": "muted-text",
      "source": "computed",
      "evidence": "color-7: computed lab(48.496 0 0); AI role: Lighter grey #737373 used for secondary text, metadata, and navigation links.",
      "sampleId": "color-7",
      "confidence": 0.9
    },
    {
      "hex": "#E4E4E4",
      "name": "border",
      "role": "border",
      "source": "computed",
      "evidence": "color-5: computed lab(90.72 0.0000298023 -0.0000119209); AI role: Light grey #E4E4E4 used for borders around feature cards and UI elements.",
      "sampleId": "color-5",
      "confidence": 0.9
    },
    {
      "hex": "#FFFFFF",
      "name": "surface",
      "role": "surface",
      "source": "computed",
      "evidence": "color-3: computed rgb(255, 255, 255); AI role: White #FFFFFF used for specific card backgrounds and UI mockup surfaces.",
      "sampleId": "color-3",
      "confidence": 0.85
    }
  ]
}
```

### Design tokens

```json
{
  "radius": "Moderate radius on large UI containers and smaller radii on buttons and inner card elements.",
  "density": "Low density with ample whitespace to ensure readability and focus on the technical details and UI mockups.",
  "evidence": "Observed in the layout of the feature grids, the styling of the 'Book a demo' button, and the consistent use of #E4E4E4 borders across the page.",
  "borderStyle": "Thin (1px), solid, light grey borders (#E4E4E4, #E5E5E5) used extensively to define cards and separate content areas without heavy contrast.",
  "buttonStyle": "Solid dark buttons for primary actions, and ghost or subtle outline styles for secondary interactions, often with rounded corners.",
  "cornerStyle": "Softly rounded corners applied consistently to feature cards, buttons, and UI mockups, creating a friendly, modern feel.",
  "contentWidth": "Contained max-width for the main content area, centering the layout on larger screens.",
  "spacingRhythm": "Generous vertical padding separates major sections, while structured grid gaps are used between feature cards to maintain order."
}
```

### Reconstruction specification

This is the implementation contract for the captured desktop viewport. Prefer section-specific facts here over general website descriptions.

- Root: 1374×432px; grid; padding {"top":"8px","right":"8px","bottom":"8px","left":"8px"}; gap 8px; background rgb(249, 249, 251); radius 0px.
- Observed gaps: 6, 8px.
- Representative content widths: 1374, 675, 593, 499, 409px.
- Layout containers: 3; cards/surfaces: 3; media elements: 12; browser animations: 2.

#### Container, grid, and spacing

```json
{
  "viewport": {
    "width": 1440,
    "captureBounds": {
      "top": 6447,
      "bottom": 7735,
      "pageHeight": 10124
    }
  },
  "container": {
    "size": "1374×432px",
    "position": "x 33px, y 7303px",
    "display": "grid",
    "positionMode": "relative",
    "padding": {
      "top": "8px",
      "right": "8px",
      "bottom": "8px",
      "left": "8px"
    },
    "margin": {
      "top": "0px",
      "right": "-40px",
      "bottom": "0px",
      "left": "-40px"
    },
    "gap": "8px",
    "columns": "675px 675px",
    "background": "rgb(249, 249, 251)",
    "radius": "0px",
    "border": "0px solid lab(90.72 0.0000298023 -0.0000119209)",
    "shadow": "none",
    "overflow": "visible"
  },
  "spacing": {
    "observedGapsPx": [
      6,
      8
    ],
    "representativeContentWidthsPx": [
      1374,
      675,
      593,
      499,
      409
    ]
  },
  "columns": [
    {
      "element": "section · “I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much",
      "size": "1374×432px",
      "position": "x 33px, y 7303px",
      "display": "grid",
      "template": "675px 675px",
      "direction": "row",
      "gap": "8px"
    },
    {
      "element": "a · “I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much",
      "size": "675×416px",
      "position": "x 41px, y 7311px",
      "display": "flex",
      "template": "not captured",
      "direction": "column",
      "gap": "normal"
    },
    {
      "element": "a · “Adding a feature used to mean implementing it seven times, once per language. Now we change the spe",
      "size": "675×416px",
      "position": "x 724px, y 7311px",
      "display": "flex",
      "template": "not captured",
      "direction": "column",
      "gap": "normal"
    }
  ]
}
```

#### Cards and surfaces

```json
{
  "cards": [
    {
      "element": "section · “I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much",
      "size": "1374×432px",
      "position": "x 33px, y 7303px",
      "padding": [
        "8px",
        "8px",
        "8px",
        "8px"
      ],
      "radius": "0px",
      "border": "0px solid lab(90.72 0.0000298023 -0.0000119209)",
      "shadow": "none",
      "background": "rgb(249, 249, 251)"
    },
    {
      "element": "a · “I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much",
      "size": "675×416px",
      "position": "x 41px, y 7311px",
      "padding": [
        "40px",
        "40px",
        "40px",
        "40px"
      ],
      "radius": "18px",
      "border": "1px solid lab(90.72 0.0000298023 -0.0000119209)",
      "shadow": "rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.04) 0px 1px 2px 0px, rgba(0, 0, 0, 0.08) 0px 8px 24px -12px",
      "background": "lab(97.332 -0.0000298023 0)"
    },
    {
      "element": "a · “Adding a feature used to mean implementing it seven times, once per language. Now we change the spe",
      "size": "675×416px",
      "position": "x 724px, y 7311px",
      "padding": [
        "40px",
        "40px",
        "40px",
        "40px"
      ],
      "radius": "18px",
      "border": "1px solid lab(90.72 0.0000298023 -0.0000119209)",
      "shadow": "rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.04) 0px 1px 2px 0px, rgba(0, 0, 0, 0.08) 0px 8px 24px -12px",
      "background": "lab(97.332 -0.0000298023 0)"
    }
  ],
  "surfaces": {
    "radii": [
      "10px",
      "18px"
    ],
    "borders": [
      "1px solid lab(90.952 0 -0.0000119209)",
      "1px solid lab(90.72 0.0000298023 -0.0000119209)"
    ],
    "shadows": [
      "rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.04) 0px 1px 2px 0px, rgba(0, 0, 0, 0.08) 0px 8px 24px -12px"
    ]
  }
}
```

#### Media treatment

```json
[
  {
    "element": "img · block w-full dark:hidden",
    "size": "1374×385px",
    "position": "x 33px, y 6495px",
    "aspectRatio": 3.6,
    "objectFit": "fill",
    "objectPosition": "50% 50%",
    "radius": "0px",
    "overflow": "clip",
    "source": "https://buildwithfern.com/enterprise/postman-background-illustration.png"
  },
  {
    "element": "canvas · block h-full w-full",
    "size": "1374×96px",
    "position": "x 33px, y 6880px",
    "aspectRatio": 14.3,
    "objectFit": "fill",
    "objectPosition": "50% 50%",
    "radius": "0px",
    "overflow": "clip",
    "source": "source not captured"
  },
  {
    "element": "canvas · block h-full w-full",
    "size": "32×96px",
    "position": "x 0px, y 6880px",
    "aspectRatio": 0.3,
    "objectFit": "fill",
    "objectPosition": "50% 50%",
    "radius": "0px",
    "overflow": "clip",
    "source": "source not captured"
  },
  {
    "element": "canvas · block h-full w-full",
    "size": "32×96px",
    "position": "x 1408px, y 6880px",
    "aspectRatio": 0.3,
    "objectFit": "fill",
    "objectPosition": "50% 50%",
    "radius": "0px",
    "overflow": "clip",
    "source": "source not captured"
  },
  {
    "element": "img · block h-full w-auto max-w-full dark:hidden",
    "size": "139×18px",
    "position": "x 82px, y 7668px",
    "aspectRatio": 7.7,
    "objectFit": "fill",
    "objectPosition": "50% 50%",
    "radius": "0px",
    "overflow": "clip",
    "source": "https://buildwithfern.com/customers/elevenlabs/elevenlabs-light.svg"
  },
  {
    "element": "img · block h-full w-auto max-w-full dark:hidden",
    "size": "81×24px",
    "position": "x 765px, y 7662px",
    "aspectRatio": 3.4,
    "objectFit": "fill",
    "objectPosition": "50% 50%",
    "radius": "0px",
    "overflow": "clip",
    "source": "https://buildwithfern.com/customers/auth0/auth0-light.svg"
  },
  {
    "element": "svg · svg",
    "size": "36×36px",
    "position": "x 14px, y 6862px",
    "aspectRatio": 1,
    "objectFit": "fill",
    "objectPosition": "50% 50%",
    "radius": "0px",
    "overflow": "hidden",
    "source": "source not captured"
  },
  {
    "element": "svg · svg",
    "size": "36×36px",
    "position": "x 1389px, y 6862px",
    "aspectRatio": 1,
    "objectFit": "fill",
    "objectPosition": "50% 50%",
    "radius": "0px",
    "overflow": "hidden",
    "source": "source not captured"
  },
  {
    "element": "svg · svg",
    "size": "36×36px",
    "position": "x 14px, y 6958px",
    "aspectRatio": 1,
    "objectFit": "fill",
    "objectPosition": "50% 50%",
    "radius": "0px",
    "overflow": "hidden",
    "source": "source not captured"
  },
  {
    "element": "svg · svg",
    "size": "36×36px",
    "position": "x 1389px, y 6958px",
    "aspectRatio": 1,
    "objectFit": "fill",
    "objectPosition": "50% 50%",
    "radius": "0px",
    "overflow": "hidden",
    "source": "source not captured"
  },
  {
    "element": "svg · svg",
    "size": "36×36px",
    "position": "x 14px, y 7285px",
    "aspectRatio": 1,
    "objectFit": "fill",
    "objectPosition": "50% 50%",
    "radius": "0px",
    "overflow": "hidden",
    "source": "source not captured"
  },
  {
    "element": "svg · svg",
    "size": "36×36px",
    "position": "x 1389px, y 7285px",
    "aspectRatio": 1,
    "objectFit": "fill",
    "objectPosition": "50% 50%",
    "radius": "0px",
    "overflow": "hidden",
    "source": "source not captured"
  }
]
```

#### Browser-exposed animation parameters

```json
[
  {
    "target": "“I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much",
    "delayMs": 0,
    "durationMs": 700,
    "easing": "linear",
    "iterations": 1,
    "direction": "normal",
    "fill": "both",
    "keyframes": [
      {
        "offset": 0,
        "easing": "cubic-bezier(0.16, 1, 0.3, 1)",
        "composite": "auto",
        "filter": "blur(8px)",
        "transform": "translateY(8px)",
        "opacity": "0",
        "computedOffset": 0
      },
      {
        "offset": 1,
        "easing": "cubic-bezier(0.16, 1, 0.3, 1)",
        "composite": "auto",
        "filter": "blur(0px)",
        "transform": "translateY(0px)",
        "opacity": "1",
        "computedOffset": 1
      }
    ]
  },
  {
    "target": "“Adding a feature used to mean implementing it seven times, once per language. Now we change the spe",
    "delayMs": 110,
    "durationMs": 700,
    "easing": "linear",
    "iterations": 1,
    "direction": "normal",
    "fill": "both",
    "keyframes": [
      {
        "offset": 0,
        "easing": "cubic-bezier(0.16, 1, 0.3, 1)",
        "composite": "auto",
        "filter": "blur(8px)",
        "transform": "translateY(8px)",
        "opacity": "0",
        "computedOffset": 0
      },
      {
        "offset": 1,
        "easing": "cubic-bezier(0.16, 1, 0.3, 1)",
        "composite": "auto",
        "filter": "blur(0px)",
        "transform": "translateY(0px)",
        "opacity": "1",
        "computedOffset": 1
      }
    ]
  }
]
```

### Measured geometry, surfaces, media, and animation

These raw values come from the saved element map and computed styles. Empty arrays mean the fact was not captured; they are not permission to invent source values.

```json
{
  "schema": "little-details-section-measurements-v1",
  "source": "saved DOM/CSS element and animation maps",
  "capturedAt": "2026-11-10T06:52:10.234Z",
  "viewportWidth": 1440,
  "bounds": {
    "top": 6447,
    "bottom": 7735,
    "pageHeight": 10124
  },
  "root": {
    "id": "ld-3794",
    "tag": "section",
    "role": null,
    "label": "“I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much ",
    "rect": {
      "x": 33,
      "y": 7303,
      "width": 1374,
      "height": 432
    },
    "display": "grid",
    "position": "relative",
    "padding": {
      "top": "8px",
      "right": "8px",
      "bottom": "8px",
      "left": "8px"
    },
    "margin": {
      "top": "0px",
      "right": "-40px",
      "bottom": "0px",
      "left": "-40px"
    },
    "gap": "8px",
    "columns": "675px 675px",
    "background": "rgb(249, 249, 251)",
    "radius": "0px",
    "border": "0px solid lab(90.72 0.0000298023 -0.0000119209)",
    "shadow": "none",
    "overflow": "visible"
  },
  "spacing": {
    "gapsPx": [
      6,
      8
    ],
    "representativeContentWidthsPx": [
      1374,
      675,
      593,
      499,
      409
    ]
  },
  "columns": [
    {
      "id": "ld-3794",
      "tag": "section",
      "role": null,
      "label": "“I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much ",
      "rect": {
        "x": 33,
        "y": 7303,
        "width": 1374,
        "height": 432
      },
      "display": "grid",
      "columns": "675px 675px",
      "direction": "row",
      "gap": "8px"
    },
    {
      "id": "ld-3795",
      "tag": "a",
      "role": null,
      "label": "“I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much ",
      "rect": {
        "x": 41,
        "y": 7311,
        "width": 675,
        "height": 416
      },
      "display": "flex",
      "columns": null,
      "direction": "column",
      "gap": "normal"
    },
    {
      "id": "ld-3832",
      "tag": "a",
      "role": null,
      "label": "“Adding a feature used to mean implementing it seven times, once per language. Now we change the spe",
      "rect": {
        "x": 724,
        "y": 7311,
        "width": 675,
        "height": 416
      },
      "display": "flex",
      "columns": null,
      "direction": "column",
      "gap": "normal"
    }
  ],
  "cards": [
    {
      "id": "ld-3794",
      "tag": "section",
      "role": null,
      "label": "“I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much ",
      "rect": {
        "x": 33,
        "y": 7303,
        "width": 1374,
        "height": 432
      },
      "radius": "0px",
      "border": "0px solid lab(90.72 0.0000298023 -0.0000119209)",
      "shadow": "none",
      "background": "rgb(249, 249, 251)",
      "padding": [
        "8px",
        "8px",
        "8px",
        "8px"
      ]
    },
    {
      "id": "ld-3795",
      "tag": "a",
      "role": null,
      "label": "“I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much ",
      "rect": {
        "x": 41,
        "y": 7311,
        "width": 675,
        "height": 416
      },
      "radius": "18px",
      "border": "1px solid lab(90.72 0.0000298023 -0.0000119209)",
      "shadow": "rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.04) 0px 1px 2px 0px, rgba(0, 0, 0, 0.08) 0px 8px 24px -12px",
      "background": "lab(97.332 -0.0000298023 0)",
      "padding": [
        "40px",
        "40px",
        "40px",
        "40px"
      ]
    },
    {
      "id": "ld-3832",
      "tag": "a",
      "role": null,
      "label": "“Adding a feature used to mean implementing it seven times, once per language. Now we change the spe",
      "rect": {
        "x": 724,
        "y": 7311,
        "width": 675,
        "height": 416
      },
      "radius": "18px",
      "border": "1px solid lab(90.72 0.0000298023 -0.0000119209)",
      "shadow": "rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.04) 0px 1px 2px 0px, rgba(0, 0, 0, 0.08) 0px 8px 24px -12px",
      "background": "lab(97.332 -0.0000298023 0)",
      "padding": [
        "40px",
        "40px",
        "40px",
        "40px"
      ]
    }
  ],
  "surfaces": {
    "radii": [
      "10px",
      "18px"
    ],
    "borders": [
      "1px solid lab(90.952 0 -0.0000119209)",
      "1px solid lab(90.72 0.0000298023 -0.0000119209)"
    ],
    "shadows": [
      "rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.04) 0px 1px 2px 0px, rgba(0, 0, 0, 0.08) 0px 8px 24px -12px"
    ]
  },
  "media": [
    {
      "id": "ld-3698",
      "tag": "img",
      "role": null,
      "label": "block w-full dark:hidden",
      "rect": {
        "x": 33,
        "y": 6495,
        "width": 1374,
        "height": 385
      },
      "aspectRatio": 3.6,
      "objectFit": "fill",
      "objectPosition": "50% 50%",
      "radius": "0px",
      "overflow": "clip",
      "media": {
        "src": "https://buildwithfern.com/enterprise/postman-background-illustration.png",
        "naturalWidth": 2880,
        "naturalHeight": 807,
        "alt": ""
      }
    },
    {
      "id": "ld-3725",
      "tag": "canvas",
      "role": null,
      "label": "block h-full w-full",
      "rect": {
        "x": 33,
        "y": 6880,
        "width": 1374,
        "height": 96
      },
      "aspectRatio": 14.3,
      "objectFit": "fill",
      "objectPosition": "50% 50%",
      "radius": "0px",
      "overflow": "clip",
      "media": null
    },
    {
      "id": "ld-3719",
      "tag": "canvas",
      "role": null,
      "label": "block h-full w-full",
      "rect": {
        "x": 0,
        "y": 6880,
        "width": 32,
        "height": 96
      },
      "aspectRatio": 0.3,
      "objectFit": "fill",
      "objectPosition": "50% 50%",
      "radius": "0px",
      "overflow": "clip",
      "media": null
    },
    {
      "id": "ld-3722",
      "tag": "canvas",
      "role": null,
      "label": "block h-full w-full",
      "rect": {
        "x": 1408,
        "y": 6880,
        "width": 32,
        "height": 96
      },
      "aspectRatio": 0.3,
      "objectFit": "fill",
      "objectPosition": "50% 50%",
      "radius": "0px",
      "overflow": "clip",
      "media": null
    },
    {
      "id": "ld-3823",
      "tag": "img",
      "role": null,
      "label": "block h-full w-auto max-w-full dark:hidden",
      "rect": {
        "x": 82,
        "y": 7668,
        "width": 139,
        "height": 18
      },
      "aspectRatio": 7.7,
      "objectFit": "fill",
      "objectPosition": "50% 50%",
      "radius": "0px",
      "overflow": "clip",
      "media": {
        "src": "https://buildwithfern.com/customers/elevenlabs/elevenlabs-light.svg",
        "naturalWidth": 370,
        "naturalHeight": 48,
        "alt": "ElevenLabs"
      }
    },
    {
      "id": "ld-3860",
      "tag": "img",
      "role": null,
      "label": "block h-full w-auto max-w-full dark:hidden",
      "rect": {
        "x": 765,
        "y": 7662,
        "width": 81,
        "height": 24
      },
      "aspectRatio": 3.4,
      "objectFit": "fill",
      "objectPosition": "50% 50%",
      "radius": "0px",
      "overflow": "clip",
      "media": {
        "src": "https://buildwithfern.com/customers/auth0/auth0-light.svg",
        "naturalWidth": 162,
        "naturalHeight": 48,
        "alt": "Auth0"
      }
    },
    {
      "id": "ld-3703",
      "tag": "svg",
      "role": null,
      "label": "svg",
      "rect": {
        "x": 14,
        "y": 6862,
        "width": 36,
        "height": 36
      },
      "aspectRatio": 1,
      "objectFit": "fill",
      "objectPosition": "50% 50%",
      "radius": "0px",
      "overflow": "hidden",
      "media": null
    },
    {
      "id": "ld-3709",
      "tag": "svg",
      "role": null,
      "label": "svg",
      "rect": {
        "x": 1389,
        "y": 6862,
        "width": 36,
        "height": 36
      },
      "aspectRatio": 1,
      "objectFit": "fill",
      "objectPosition": "50% 50%",
      "radius": "0px",
      "overflow": "hidden",
      "media": null
    },
    {
      "id": "ld-3729",
      "tag": "svg",
      "role": null,
      "label": "svg",
      "rect": {
        "x": 14,
        "y": 6958,
        "width": 36,
        "height": 36
      },
      "aspectRatio": 1,
      "objectFit": "fill",
      "objectPosition": "50% 50%",
      "radius": "0px",
      "overflow": "hidden",
      "media": null
    },
    {
      "id": "ld-3735",
      "tag": "svg",
      "role": null,
      "label": "svg",
      "rect": {
        "x": 1389,
        "y": 6958,
        "width": 36,
        "height": 36
      },
      "aspectRatio": 1,
      "objectFit": "fill",
      "objectPosition": "50% 50%",
      "radius": "0px",
      "overflow": "hidden",
      "media": null
    },
    {
      "id": "ld-3782",
      "tag": "svg",
      "role": null,
      "label": "svg",
      "rect": {
        "x": 14,
        "y": 7285,
        "width": 36,
        "height": 36
      },
      "aspectRatio": 1,
      "objectFit": "fill",
      "objectPosition": "50% 50%",
      "radius": "0px",
      "overflow": "hidden",
      "media": null
    },
    {
      "id": "ld-3788",
      "tag": "svg",
      "role": null,
      "label": "svg",
      "rect": {
        "x": 1389,
        "y": 7285,
        "width": 36,
        "height": 36
      },
      "aspectRatio": 1,
      "objectFit": "fill",
      "objectPosition": "50% 50%",
      "radius": "0px",
      "overflow": "hidden",
      "media": null
    }
  ],
  "animations": [
    {
      "id": "animation-108",
      "target": {
        "id": "ld-3795",
        "tag": "a",
        "role": null,
        "label": "“I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much ",
        "rect": {
          "x": 41,
          "y": 7311,
          "width": 675,
          "height": 416
        }
      },
      "playState": "finished",
      "playbackRate": 1,
      "delayMs": 0,
      "durationMs": 700,
      "easing": "linear",
      "iterations": 1,
      "direction": "normal",
      "fill": "both",
      "keyframes": [
        {
          "offset": 0,
          "easing": "cubic-bezier(0.16, 1, 0.3, 1)",
          "composite": "auto",
          "filter": "blur(8px)",
          "transform": "translateY(8px)",
          "opacity": "0",
          "computedOffset": 0
        },
        {
          "offset": 1,
          "easing": "cubic-bezier(0.16, 1, 0.3, 1)",
          "composite": "auto",
          "filter": "blur(0px)",
          "transform": "translateY(0px)",
          "opacity": "1",
          "computedOffset": 1
        }
      ]
    },
    {
      "id": "animation-113",
      "target": {
        "id": "ld-3832",
        "tag": "a",
        "role": null,
        "label": "“Adding a feature used to mean implementing it seven times, once per language. Now we change the spe",
        "rect": {
          "x": 724,
          "y": 7311,
          "width": 675,
          "height": 416
        }
      },
      "playState": "finished",
      "playbackRate": 1,
      "delayMs": 110,
      "durationMs": 700,
      "easing": "linear",
      "iterations": 1,
      "direction": "normal",
      "fill": "both",
      "keyframes": [
        {
          "offset": 0,
          "easing": "cubic-bezier(0.16, 1, 0.3, 1)",
          "composite": "auto",
          "filter": "blur(8px)",
          "transform": "translateY(8px)",
          "opacity": "0",
          "computedOffset": 0
        },
        {
          "offset": 1,
          "easing": "cubic-bezier(0.16, 1, 0.3, 1)",
          "composite": "auto",
          "filter": "blur(0px)",
          "transform": "translateY(0px)",
          "opacity": "1",
          "computedOffset": 1
        }
      ]
    }
  ],
  "coverage": {
    "elementsInSection": 60,
    "cards": 3,
    "media": 12,
    "animations": 2
  },
  "limitations": [
    "Values describe the captured desktop viewport and may change at other breakpoints.",
    "Transforms, sticky layers, and virtualized content can make the inferred section root approximate.",
    "Animations include browser-exposed Web Animations API state; CSS or script motion that was inactive at capture time may be absent."
  ]
}
```

### Observed motion

No timestamped authored motion is attached. Use only restrained baseline transitions.

The browser animation records above are deterministic parameters captured from active browser animations. The timestamped observations describe what Gemini saw in the video. Treat them as complementary evidence. When either source is empty or they conflict, state the uncertainty instead of inventing timing or easing.

### Responsive contract

- Measured viewport: 1440px wide.
- Mobile/tablet values: not measured by this section evidence unless a separate capture is explicitly listed.
- Preserve hierarchy and sequence; collapse simultaneous columns only where needed, maintain media aspect ratios, and verify touch targets and text wrapping at target breakpoints.

### Structure versus visual skin

These categories describe evidence, not independent layers that can be swapped without changing the design. Study the complete reference system before adapting it.

- Preserve: content hierarchy, layout relationships, section rhythm, interaction purpose.
- Adapt: brand colors, font family, copy, imagery, icons, decorative details.
- Rule: These compatibility categories are coupled: fonts, color and imagery can carry the layout's design logic. Preserve or purposefully replace their contribution while creating original branding, copy, assets, and implementation details.

### Adaptation and dependencies

- Effort: Not assessed
- What transfers: Documented hierarchy and composition
- Dependencies: None recorded
- Guidance: Adapt the pattern to the new product and content.

### Evidence readiness

- Coverage: 7/7
- Can build: Yes
- Missing facts: timestamped authored motion
- Warning: Buildable with adaptations for these unsupported facts: timestamped authored motion.

### Agent implementation prompt

Create an original testimonials section inspired by the design evidence titled “Quote cards with metrics”.

Purpose: testimonials section from the Home page of Fern.

Structure: grid. Source layout label: 1374×432px root; grid; 675px 675px. Keep a clear anchor card and consistent internal card rules so the grid reads as one system.

Visual signature to preserve at the pattern level: rgb(249, 249, 251) with 1374×432px root; grid; 675px 675px. Inspect the crop for image and content hierarchy.

Components: Navigation Bar, Hero, Logo Strip, Stat Block, Feature Card, Testimonial Card, Footer, UI Mockup Simulation.

Style direction: minimal, corporate, developer-focused.

Observed crop: 1440×1288px (1.118:1). Treat this as evidence of composition, not a mandatory output size.

Typography evidence: {"role":"display","size":"48px","family":"gtPlanar","source":"computed","traits":"Regular","weight":"400","evidence":"font-4: computed CSS at 1440×1000; AI role: gtPlanar at 48px, used for the main hero headline.","sampleId":"font-4","confidence":0.9,"lineHeight":"55.2px","letterSpacing":"-1.9px"} {"role":"heading","size":"24px","family":"gtPlanar","source":"computed","traits":"Regular","weight":"400","evidence":"font-2: computed CSS at 1440×1000; AI role: gtPlanar at 24px, used for section or feature card headings.","sampleId":"font-2","confidence":0.85,"lineHeight":"normal","letterSpacing":"-0.5px"} {"role":"body","size":"16px","family":"gtPlanar","source":"computed","traits":"Regular","weight":"300","evidence":"font-6: computed CSS at 1440×1000; AI role: gtPlanar at 16px, used for standard body copy and descriptive text.","sampleId":"font-6","confidence":0.9,"lineHeight":"27.2px","letterSpacing":"normal"} {"role":"mono","size":"12px","family":"JetBrains Mono","source":"computed","traits":"Regular","weight":"400","evidence":"font-15: computed CSS at 1440×1000; AI role: JetBrains Mono at 12px, used for code syntax and terminal outputs.","sampleId":"font-15","confidence":0.95,"lineHeight":"19.8px","letterSpacing":"normal"}

Color evidence: {"hex":"#F7F7F7","name":"canvas","role":"canvas","source":"computed","evidence":"color-1: computed lab(97.332 -0.0000298023 0); AI role: Off-white #F7F7F7 used as the primary background color for the page body.","sampleId":"color-1","confidence":0.95} {"hex":"#202020","name":"text","role":"text","source":"computed","evidence":"color-8: computed rgb(32, 32, 32); AI role: Dark grey #202020 used for primary headings and body text.","sampleId":"color-8","confidence":0.95} {"hex":"#737373","name":"muted text","role":"muted-text","source":"computed","evidence":"color-7: computed lab(48.496 0 0); AI role: Lighter grey #737373 used for secondary text, metadata, and navigation links.","sampleId":"color-7","confidence":0.9} {"hex":"#E4E4E4","name":"border","role":"border","source":"computed","evidence":"color-5: computed lab(90.72 0.0000298023 -0.0000119209); AI role: Light grey #E4E4E4 used for borders around feature cards and UI elements.","sampleId":"color-5","confidence":0.9} {"hex":"#FFFFFF","name":"surface","role":"surface","source":"computed","evidence":"color-3: computed rgb(255, 255, 255); AI role: White #FFFFFF used for specific card backgrounds and UI mockup surfaces.","sampleId":"color-3","confidence":0.85}

Typography measured inside this section: {"id":"font-37","family":"gtPlanar","fontStack":"gtPlanar, \"gtPlanar Fallback\"","weight":"300","size":"24px","lineHeight":"normal","letterSpacing":"-0.5px","traits":"Regular","count":2,"contexts":[{"tag":"blockquote","text":"“I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much ","top":7352,"property":"font"},{"tag":"blockquote","text":"“Adding a feature used to mean implementing it seven times, once per language. Now we change the spe","top":7352,"property":"font"}]}

Colors measured inside this section: {"id":"color-6","hex":"#F9F9FB","alpha":1,"cssValue":"rgb(249, 249, 251)","count":14,"contexts":[{"tag":"div","text":"terminal~ % fern generate","top":2260,"property":"background"},{"tag":"section","text":"“I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much ","top":7303,"property":"background"}]}

Exact section measurements from the saved element map: root {"rect":{"x":33,"y":7303,"width":1374,"height":432},"padding":{"top":"8px","right":"8px","bottom":"8px","left":"8px"},"gap":"8px","columns":"675px 675px","overflow":"visible"}; spacing {"gapsPx":[6,8],"representativeContentWidthsPx":[1374,675,593,499,409]}; surfaces {"radii":["10px","18px"],"borders":["1px solid lab(90.952 0 -0.0000119209)","1px solid lab(90.72 0.0000298023 -0.0000119209)"],"shadows":["rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.04) 0px 1px 2px 0px, rgba(0, 0, 0, 0.08) 0px 8px 24px -12px"]}; media [{"tag":"img","rect":{"x":33,"y":6495,"width":1374,"height":385},"aspectRatio":3.6,"objectFit":"fill","objectPosition":"50% 50%","radius":"0px"},{"tag":"canvas","rect":{"x":33,"y":6880,"width":1374,"height":96},"aspectRatio":14.3,"objectFit":"fill","objectPosition":"50% 50%","radius":"0px"},{"tag":"canvas","rect":{"x":0,"y":6880,"width":32,"height":96},"aspectRatio":0.3,"objectFit":"fill","objectPosition":"50% 50%","radius":"0px"},{"tag":"canvas","rect":{"x":1408,"y":6880,"width":32,"height":96},"aspectRatio":0.3,"objectFit":"fill","objectPosition":"50% 50%","radius":"0px"}]; animations [{"target":{"id":"ld-3795","tag":"a","role":null,"label":"“I used to work at Stripe, where they built their own SDK auto-generation in house. I know how much ","rect":{"x":41,"y":7311,"width":675,"height":416}},"delayMs":0,"durationMs":700,"easing":"linear","keyframes":[{"offset":0,"easing":"cubic-bezier(0.16, 1, 0.3, 1)","composite":"auto","filter":"blur(8px)","transform":"translateY(8px)","opacity":"0","computedOffset":0},{"offset":1,"easing":"cubic-bezier(0.16, 1, 0.3, 1)","composite":"auto","filter":"blur(0px)","transform":"translateY(0px)","opacity":"1","computedOffset":1}]},{"target":{"id":"ld-3832","tag":"a","role":null,"label":"“Adding a feature used to mean implementing it seven times, once per language. Now we change the spe","rect":{"x":724,"y":7311,"width":675,"height":416}},"delayMs":110,"durationMs":700,"easing":"linear","keyframes":[{"offset":0,"easing":"cubic-bezier(0.16, 1, 0.3, 1)","composite":"auto","filter":"blur(8px)","transform":"translateY(8px)","opacity":"0","computedOffset":0},{"offset":1,"easing":"cubic-bezier(0.16, 1, 0.3, 1)","composite":"auto","filter":"blur(0px)","transform":"translateY(0px)","opacity":"1","computedOffset":1}]}]

Do not invent signature motion. Use only restrained baseline transitions if the product needs them.

Transfer the documented hierarchy and composition rather than source copy or assets.

No explicit dependencies were recorded.

Adapt the pattern to the new product and content.

Study layout, typography, color, imagery and spacing as one coordinated source system. Record what creates its effect before producing a concept; preserve or purposefully replace each consequential relationship when adapting the business content and assets.

Use new copy, imagery, branding, and implementation details. Do not reproduce the source website or its proprietary assets.
