{
  "schema_version": "1.0",
  "generated_at": "2026-09-06T02:43:28.840Z",
  "slug": "drinktrade",
  "domain": "drinktrade.com",
  "funnel_type": "ecommerce",
  "crawler": {
    "id": "roentgen",
    "name": "Roentgen",
    "kind": "surface",
    "version": "1.18",
    "label": "Roentgen 1.18",
    "status": "live",
    "tagline": "Surface funnel x-ray",
    "xrays": "A funnel from lander to checkout — the pages a visitor actually walks.",
    "produces": "A scored, evidence-backed teardown: design tokens, proof language, and the exact conversion tactics each page runs — every fact carrying its on-page evidence.",
    "destination": "/ux-report/<slug>",
    "changelog": [
      {
        "version": "1.18",
        "date": "2026-08-03",
        "summary": "Discovery SKIP list: content sections can no longer be seeded as funnel steps. Added resources, guides, learn, news, glossary, templates, case-studies to the SKIP set - blog/docs/api/community/press were already excluded, these were not. PREVENTION, NOT A REPAIR: measured across the whole corpus at the time of the change, ZERO published primaries carried a content-shaped funnel_sig. What changed is the INCENTIVE - since the primary-row amendment the same day, a multi-step funnel outranks an entry-page one within the newest crawl, so a 3-step walk through /resources/ could have become a domain's published primary over a 1-step home walk, publishing a content journey as if it were the conversion funnel. Patched in BOTH verbatim copies of the regex (discoverFunnelLinks and discoverProductEntries) - page.evaluate cannot share closures, so the duplication is deliberate and both sites say so; changing one alone is the actual risk here. Validated with scripts/walk-depth-probe.mjs against real pages: 6/6 targets still reach >=2 steps and nngroup, the CONTENT case in the set, is unchanged at depth 2 - a tightening can always pass by detecting nothing, so the content site staying walkable is the assertion that matters. Candidate counts drop as expected (top10vpn 26 -> 21, notion 88 -> 84, nngroup 50 -> 48). Affects future crawls only; existing scores frozen."
      },
      {
        "version": "1.17",
        "date": "2026-08-03",
        "summary": "Funnel discovery: one FALSE-depth bug and one that made whole funnel types unwalkable. (1) LOCALE VARIANTS were valid walk steps - top10vpn walked / -> /reviews/ -> /ko/reviews/ and reported depth 3, where the third step is the KOREAN TRANSLATION of the page it was already on. That is not a shallow walk, it is a FALSE one: inflated depth and a 3-step funnel claim about two pages. A 2-letter ISO first segment (or xx-YY) is now rejected; a real path like /it-services is untouched because its segment is it-services, not it. Under the 0-hallucination rule an over-count is strictly worse than an under-count, which is why this ranked above the depth work. (2) DESCENDING INTO A SECTION WAS IMPOSSIBLE. The dedup key is the first path segment and it was SEEDED with the current page's own segment, so on /vpn/ every /vpn/<brand>/ child was rejected before any regex ran. For an affiliate or category funnel that IS the journey (category -> product review -> outbound), so those sites could only ever be depth 1. A candidate that EXTENDS the current path now passes; siblings under the same segment are still deduped. Deliberately STRUCTURAL rather than vocabulary: brand names are unbounded and no token list can hold them, but 'extends the path I am on' is provable from the URL alone. The descendant pass runs LAST, after MID/CONV - running it first regressed notion from / -> /product -> /pricing to / -> /product -> /product/features, a feature page crowding out the money step. MEASURED, NOT ASSUMED: scripts/walk-depth-probe.mjs runs the real discovery against real pages. vpn.com/vpn/ went 1 -> 5 (/vpn/ -> /vpn/cyberghost/pricing -> /vpn/expressvpn/...), top10vpn lost its fake Korean step, notion/allbirds/nngroup unchanged. A nav-section fallback was built, measured, and REJECTED: it lifted vpn.com's homepage to depth 3 but the steps were sibling categories (breadth, not a journey) and it duplicated discoverProductEntries, which already spawns those categories as sibling funnels with mode:auto - so the descendant pass alone carries them. Corpus baseline before this: affiliate 63% and content 90% of published rows were depth-1, against ecommerce 9%. Affects future crawls only; existing scores frozen until re-crawled."
      },
      {
        "version": "1.16",
        "date": "2026-08-03",
        "summary": "Accessibility coverage: four WCAG criteria that were measurable and unmeasured. THREE ARE NEW SIGNALS - 2.4.2 Page Titled (an empty <title>, the first thing a screen reader announces), 2.4.1 Bypass Blocks (presence of a same-page skip link, matched by \"skip to\" text or by an anchor landing inside main), and 2.5.3 Label in Name (a control whose aria-label does not contain its own visible text, so a voice-control user cannot activate it by saying what they can see). THE FOURTH WAS ALREADY MEASURED AND SILENTLY DROPPED: heading_skips has been extracted and rolled up since 1.13 and no check ever read it, so a level jump (h2 followed by h4) was computed on every crawl and thrown away - it now closes the outline half of 1.3.1 that h1-counting alone cannot. EVERY ONE REPORTS ONLY THE FAILING SIDE, because that is the side that is provable: an absent title is measurable, a GOOD title is a judgement. Skip-link is presence-only - whether the bypass actually works needs focus simulation, and the crawler's own overlay-dismiss click perturbs focus state, which is the same reason 2.4.7 focus-visible remains deliberately unchecked. DELIBERATELY NOT ADDED: 1.4.4 resize text and 1.4.12 text spacing (both need a second render pass under injected CSS, not a passive DOM read), 3.2.2 on input and 3.3.1 error identification (behavioural - they require submitting forms, which this crawler will not do). Rollups are null-gated, never zero-defaulted, so a teardown captured before 1.16 stays SILENT on these rather than reporting a fabricated pass. Display-only and additive: the UX layer has never fed the /100 conversion score and still does not, so no existing score moves. Affects future crawls only."
      },
      {
        "version": "1.15",
        "date": "2026-08-02",
        "summary": "Section-archetype precision: two false-positive rules that were publishing confident wrong labels. (1) FAQ matched `has(el, 'details, [aria-expanded]')` — ANY expandable control — so a product carousel with colour-swatch toggles was published as an FAQ (brooklinen). The structural path now requires three QUESTION-SHAPED rows (text containing ? or opening with what/how/why/when/where/who/can/do/does/is/are/will/should), the same shape capture.js's FAQ tactic detector already demanded; the heading path is unchanged. (2) logo_wall matched `imgs >= 4 && text < 130 chars`, so a hero photo carrying a few overlay icons became a logo wall (brooklinen again — a photograph of two people in bed). It now requires the SHAPE of a logo row: at least three visible images, none occupying more than 35% of the band area, at least three DISTINCT alt/src keys, and heights within 3.2x of each other. Both are tightenings — the classifier emits fewer bands and never a new one. Verified against the live page that produced both defects: the carousel is now `content` (evidence \"Our Coolest Bedding\") and the photo band is now `cta_band` (evidence \"Shop Now\"), and neither an FAQ nor a logo wall is claimed where none exists. Fixture-locked in test/section-archetypes.test.js, which also asserts a REAL FAQ and a REAL logo row still classify, because a tightening can always pass by detecting nothing. Single-sourced: capture.js imports this extractor, so Worker and CLI move together. Requires a re-crawl to correct existing rows."
      },
      {
        "version": "1.14",
        "date": "2026-08-02",
        "summary": "Mobile captures at deviceScaleFactor 2. worker/scan-do.js — the path that actually produces the corpus — set no deviceScaleFactor at all, so a mobile screenshot was stored 390px wide and could never be shown sharp: a phone capture rendered at its own 390 CSS px is 1x on every Apple display. Desktop stays at 1 deliberately, because a 1440px capture is already a true 2x at the 720px measure the report renders it in, and doubling it would cost roughly 4x the bytes for no visible gain. capture.js (the CLI walker) already did this for mobile; this closes the Worker gap. Capture-resolution only: no extractor, detector or scoring change, so every existing score is unaffected — but existing mobile assets stay 1x until re-crawled."
      },
      {
        "version": "1.13",
        "date": "2026-08-01",
        "summary": "UX depth: three new deterministic check groups. WEIGHT (page weight, render-blocking count, oversized images, largest-paint element IDENTITY) - transferSize is 0 for cross-origin resources without Timing-Allow-Origin, so the total is reported as a floor (\"at least X MB across N measurable resources\") and never asserted. STRUCTURE (landmark regions, keyboard reachability). FORMS (input-type correctness, autocomplete presence, validation attributes PRESENT). DELIBERATELY NOT ADDED: LCP and TTFB timing - measured 99% and 198% spread across three identical runs on one machine (corgi.insure, neon.com), which is network noise rather than a fact; CLS - the crawler dismisses overlays and lazy-scrolls BEFORE measurement and a datacenter connection is too fast to shift, so it would systematically award false passes; focus visibility - cannot be measured deterministically from a serialized page.evaluate (the :focus-visible heuristic depends on prior input, which the overlay-dismiss click has already supplied) and it false-accuses frameworks that render the indicator on a child element. Keyboard reachability ships as verdict note, never needs_work, because addEventListener handlers are invisible to the DOM. Absence of validation attributes is never reported, because JS-driven validation is unprovable from the DOM. Display-only, zero scoring drift; affects future crawls only, existing scores frozen."
      },
      {
        "version": "1.12",
        "date": "2026-08-01",
        "summary": "Funnel discovery reaches the funnel. Three separate failures fixed: (1) every CONV/MID token was anchored to the START of a path segment, so hyphen-prefixed conversion paths were invisible — corgi.insure links /instant-quote from its own homepage and we never followed it; (2) no B2B/consultative vocabulary, so talk-to-sales / book-a-call / get-advisor / request-a-quote walked past the money step, scoring every broker, agency and enterprise SaaS off a 1-page capture; (3) SKIP contained a bare `contact` token and \\b treats the hyphen as a word boundary, so /contact-sales — the B2B conversion — was ACTIVELY DISCARDED (neon.com sat on /hub/lowest twice at 20/Sparse partly because of it). `apply` was deliberately NOT added: on much of the web /apply is a job application and the deep-walk fills forms while read-back verification is still open (SIEVERT-BUG.md). discoverFunnelLinks now also RECORDS `discovery:{links_seen,candidates,matched}` on the entry step, so candidates>0 with matched===0 is a measured discovery miss rather than an ambiguous depth-1 row. Affects future crawls only; existing scores are frozen and unchanged."
      },
      {
        "version": "1.11",
        "date": "2026-08-01",
        "summary": "CLI/Worker parity repair on the trusted-by logo wall. The 2026-07-17 audit fix requiring ≥3 DISTINCT logo alt-texts (so a repeated-icon grid isn't counted as a logo wall) landed in the Worker extractor but was never ported to the CLI, which kept counting duplicates. For ~2 weeks the two engines could disagree on a SCORED tactic, so the same site could score differently depending on which one crawled it. The CLI now matches the Worker. Corpus rows recrawled after this may lose a trusted_by_logos that was never real; the Worker's behaviour is unchanged."
      },
      {
        "version": "1.10",
        "date": "2026-07-29",
        "summary": "Element-level tactic rects: the walk now records each conversion element (strikethrough/anchor price, rating, money-back guarantee, scarcity, no-credit-card, countdown) as page-fraction coordinates on the SAME crawl as the full-page screenshot, so the Element Library can crop the exact on-page pixels. A media gate drops any candidate sitting over a photo/background-image (kept honest: a rect we can't cleanly show is dropped, never guessed). Additive — display-only, zero scoring drift; Worker + CLI parity."
      },
      {
        "version": "1.9",
        "date": "2026-07-28",
        "summary": "Overlay auto-dismiss before capture: the Worker now clears cookie/consent + newsletter popups (main doc + every subframe, catching iframe Klaviyo/Attentive modals) that previously froze in screenshots — parity with the CLI. Goto-only, never after an in-funnel click."
      },
      {
        "version": "1.8",
        "date": "2026-07-24",
        "summary": "Price extraction reads currency-code suffixes (\"25.99 USD\"), not just leading symbols — parity across the Worker + CLI extractors."
      },
      {
        "version": "1.7",
        "date": "2026-07-23",
        "summary": "scarcity_stock + press_features detectors (display-only, zero scoring drift)."
      },
      {
        "version": "1.6",
        "date": "2026-07-21",
        "summary": "Multi-funnel discovery: sibling product funnels walked as coexisting siblings (flag-gated)."
      },
      {
        "version": "1.5",
        "date": "2026-07-20",
        "summary": "Auto-walk discovers review/affiliate funnels one click past an editorial homepage."
      },
      {
        "version": "1.4",
        "date": "2026-07-17",
        "summary": "Detection-shape gaps: words-based comparison tables, engine-metric usage proof, docs/demo links."
      },
      {
        "version": "1.3",
        "date": "2026-07-17",
        "summary": "Funnel identity (funnel_sig): different answer-paths coexist as sibling funnels; primary = deepest."
      },
      {
        "version": "1.2",
        "date": "2026-07-17",
        "summary": "Scoring-precision audit: guarantee shapes, store-URL weights, free-trial, per-unit price."
      },
      {
        "version": "1.1",
        "date": "2026-07-16",
        "summary": "Per-step DOM snapshots + skeletons, video/embed signal, broader SaaS proof vocabulary."
      },
      {
        "version": "1.0",
        "date": "2026-07-15",
        "summary": "Baseline: funnel walk, tactic detectors, funnel-type-aware scoring, UX signals, section crops."
      }
    ]
  },
  "provenance": {
    "facts": "measured",
    "design_tokens": "measured",
    "proof_language": "measured",
    "ux": "measured",
    "steps": "measured",
    "screenshots": "measured",
    "favicon": "measured",
    "score": "derived_deterministic",
    "agent_brief": "rendered_summary",
    "playbooks": "derived_deterministic"
  },
  "score": {
    "source_type": "derived_deterministic",
    "score": 30,
    "band": "Sparse",
    "stars": 1,
    "categories": [
      {
        "id": "offer",
        "label": "Offer clarity",
        "pts": 4,
        "cap": 18
      },
      {
        "id": "action",
        "label": "Action path",
        "pts": 7,
        "cap": 13
      },
      {
        "id": "trust",
        "label": "Trust & proof",
        "pts": 6,
        "cap": 17
      },
      {
        "id": "friction",
        "label": "Friction reduction",
        "pts": 10,
        "cap": 15
      },
      {
        "id": "value",
        "label": "Value reinforcement",
        "pts": 0,
        "cap": 15
      },
      {
        "id": "urgency",
        "label": "Risk reversal & urgency",
        "pts": 0,
        "cap": 10
      }
    ]
  },
  "percentile": {
    "corpus_n": 1403,
    "beats_pct": 19,
    "depth_class": "multi_step",
    "cohort": {
      "type": "ecommerce",
      "n": 158,
      "beats_pct": 55
    }
  },
  "devices_available": [
    "desktop",
    "mobile"
  ],
  "funnels": [
    {
      "device": "desktop",
      "funnel_sig": "home>p2>p3>p4",
      "score": 30,
      "band": "Sparse",
      "funnel_depth": 4,
      "captured_at": "2026-08-03",
      "crawler": "Roentgen 1.18"
    },
    {
      "device": "mobile",
      "funnel_sig": "home>p2>p3>p4",
      "score": 30,
      "band": "Sparse",
      "funnel_depth": 4,
      "captured_at": "2026-08-03",
      "crawler": "Roentgen 1.18"
    },
    {
      "device": "desktop",
      "funnel_sig": "collections>p2>p3>p4",
      "score": 30,
      "band": "Sparse",
      "funnel_depth": 4,
      "captured_at": "2026-08-03",
      "crawler": "Roentgen 1.18"
    },
    {
      "device": "desktop",
      "funnel_sig": "products>p2>p3",
      "score": 30,
      "band": "Sparse",
      "funnel_depth": 3,
      "captured_at": "2026-08-03",
      "crawler": "Roentgen 1.18"
    },
    {
      "device": "desktop",
      "funnel_sig": "collections>p2>p3",
      "score": 30,
      "band": "Sparse",
      "funnel_depth": 3,
      "captured_at": "2026-08-02",
      "crawler": "Roentgen 1.15"
    },
    {
      "device": "desktop",
      "funnel_sig": "blogs",
      "score": null,
      "band": "Blocked",
      "funnel_depth": 0,
      "captured_at": "2026-08-03",
      "crawler": "Roentgen 1.18"
    },
    {
      "device": "desktop",
      "funnel_sig": "pages",
      "score": null,
      "band": "Blocked",
      "funnel_depth": 0,
      "captured_at": "2026-08-03",
      "crawler": "Roentgen 1.18"
    }
  ],
  "timeline": [
    {
      "score": 40,
      "band": "Thin",
      "detected": 5,
      "crawler": "Roentgen 1.4",
      "date": "2026-07-19"
    },
    {
      "score": 40,
      "band": "Thin",
      "detected": 6,
      "crawler": "Roentgen 1.10",
      "date": "2026-07-29"
    },
    {
      "score": 30,
      "band": "Sparse",
      "detected": 5,
      "crawler": "Roentgen 1.10",
      "date": "2026-07-30"
    },
    {
      "score": 30,
      "band": "Sparse",
      "detected": 5,
      "crawler": "Roentgen 1.15",
      "date": "2026-08-02"
    },
    {
      "score": 30,
      "band": "Sparse",
      "detected": 5,
      "crawler": "Roentgen 1.18",
      "date": "2026-08-03"
    }
  ],
  "facts": {
    "source_type": "measured",
    "profile": {
      "funnel_type": "ecommerce",
      "score": {
        "score": 30,
        "band": "Sparse",
        "stars": 1,
        "categories": [
          {
            "id": "offer",
            "label": "Offer clarity",
            "pts": 4,
            "cap": 18
          },
          {
            "id": "action",
            "label": "Action path",
            "pts": 7,
            "cap": 13
          },
          {
            "id": "trust",
            "label": "Trust & proof",
            "pts": 6,
            "cap": 17
          },
          {
            "id": "friction",
            "label": "Friction reduction",
            "pts": 10,
            "cap": 15
          },
          {
            "id": "value",
            "label": "Value reinforcement",
            "pts": 0,
            "cap": 15
          },
          {
            "id": "urgency",
            "label": "Risk reversal & urgency",
            "pts": 0,
            "cap": 10
          }
        ]
      },
      "funnel_depth": 4,
      "proof_points": 3,
      "proof_steps": 3,
      "components_present": 5,
      "free_gifts": 0,
      "discount_present": false,
      "has_countdown": false,
      "subscription_detected": true,
      "checkout_form_fields": 0,
      "price_continuity": {
        "continuous": false,
        "shared": []
      },
      "tactics_detected": 5,
      "tactics_total": 15,
      "checkout_reached": null
    },
    "patterns": [
      {
        "id": "anchor_discount",
        "label": "Anchor / strikethrough pricing",
        "category": "offer",
        "present": false,
        "count": 0,
        "evidence": []
      },
      {
        "id": "comparison_table",
        "label": "Us-vs-them comparison",
        "category": "objection",
        "present": false,
        "count": 0,
        "evidence": []
      },
      {
        "id": "countdown_urgency",
        "label": "Countdown / urgency timer",
        "category": "urgency",
        "present": false,
        "count": 0,
        "evidence": []
      },
      {
        "id": "express_checkout",
        "label": "Express wallets",
        "category": "checkout",
        "present": false,
        "count": 0,
        "evidence": []
      },
      {
        "id": "faq_objection",
        "label": "FAQ / objection handling",
        "category": "objection",
        "present": true,
        "count": 4,
        "evidence": [
          "home: Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
          "p2: Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
          "p3: Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
          "p4: Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio"
        ]
      },
      {
        "id": "free_gift_stack",
        "label": "Stacked free gifts",
        "category": "incentive",
        "present": false,
        "count": 0,
        "evidence": []
      },
      {
        "id": "free_shipping_offer",
        "label": "Free shipping",
        "category": "offer",
        "present": true,
        "count": 3,
        "evidence": [
          "home: Free shipping",
          "p3: free shipping",
          "p4: Free shipping"
        ]
      },
      {
        "id": "guarantee",
        "label": "Money-back guarantee",
        "category": "proof",
        "present": false,
        "count": 0,
        "evidence": []
      },
      {
        "id": "per_serving_anchor",
        "label": "Per-unit price anchor",
        "category": "offer",
        "present": false,
        "count": 0,
        "evidence": []
      },
      {
        "id": "press_features",
        "label": "Press / \"as seen in\"",
        "category": "proof",
        "present": false,
        "count": 0,
        "evidence": []
      },
      {
        "id": "proof_above_fold",
        "label": "Proof above the fold",
        "category": "proof",
        "present": true,
        "count": 1,
        "evidence": [
          "p3: Rated 4.3 out of 5 stars"
        ]
      },
      {
        "id": "proof_saturation",
        "label": "Proof at every step",
        "category": "proof",
        "present": false,
        "count": 1,
        "evidence": [
          "p3: 4.3 out of 5"
        ]
      },
      {
        "id": "review_wall",
        "label": "On-page review wall",
        "category": "proof",
        "present": true,
        "count": 4,
        "evidence": [
          "home: review widget",
          "p2: review widget",
          "p3: review widget",
          "p4: review widget"
        ]
      },
      {
        "id": "scarcity_stock",
        "label": "Scarcity / urgency copy",
        "category": "urgency",
        "present": true,
        "count": 1,
        "evidence": [
          "home: LIMITED TIME"
        ]
      },
      {
        "id": "subscription_default",
        "label": "Subscription / auto-ship",
        "category": "offer",
        "present": false,
        "count": 0,
        "evidence": []
      }
    ]
  },
  "design_tokens": {
    "source_type": "measured",
    "summary": {
      "roles": {
        "primary": "#ebff88",
        "accent": "#ebff88",
        "bg": "#ffffff",
        "surface": "#ebff88",
        "text": "#252525"
      },
      "font": {
        "display": "GT Alpina",
        "body": "Inter",
        "families": [
          {
            "family": "Inter",
            "chars": 1633
          },
          {
            "family": "Inter",
            "chars": 1065
          },
          {
            "family": "GT Alpina",
            "chars": 336
          },
          {
            "family": "Geist Mono",
            "chars": 155
          },
          {
            "family": "Inter",
            "chars": 6
          }
        ]
      },
      "type_scale": [
        11,
        12,
        14,
        16,
        18,
        20,
        24,
        28,
        36,
        48,
        52,
        60
      ],
      "weights": [
        300,
        400,
        500,
        600,
        700
      ],
      "base_size": 19,
      "min_size": 11,
      "radius_scale": [
        4,
        8,
        12,
        16,
        28,
        9999
      ],
      "palette": [
        {
          "hex": "#ffffff",
          "usage_pct": 76,
          "lum": 1,
          "chroma": 0
        },
        {
          "hex": "#252525",
          "usage_pct": 18,
          "lum": 0.15,
          "chroma": 0
        },
        {
          "hex": "#ebff88",
          "usage_pct": 6,
          "lum": 0.95,
          "chroma": 0.47
        },
        {
          "hex": "#1a1a1a",
          "usage_pct": 0,
          "lum": 0.1,
          "chroma": 0
        },
        {
          "hex": "#ececee",
          "usage_pct": 0,
          "lum": 0.93,
          "chroma": 0.01
        },
        {
          "hex": "#9c3912",
          "usage_pct": 0,
          "lum": 0.3,
          "chroma": 0.54
        }
      ]
    }
  },
  "proof_language": [
    {
      "type": "free_shipping",
      "template": "Free shipping",
      "examples": [
        "Free shipping"
      ]
    },
    {
      "type": "urgency",
      "template": "LIMITED TIME",
      "examples": [
        "LIMITED TIME"
      ]
    },
    {
      "type": "star_rating",
      "template": "{X} out of 5",
      "examples": [
        "4.3 out of 5"
      ]
    }
  ],
  "ux": {
    "summary": {
      "flags": 3,
      "unknown": 0,
      "posture": "Leaky",
      "checks_total": 15
    },
    "checks": [
      {
        "group": "contrast",
        "label": "Text contrast (WCAG AA)",
        "verdict": "good",
        "fact": "99% of measurable text passes WCAG AA.",
        "id": "contrast:text-contrast-wcag-aa"
      },
      {
        "group": "mobile",
        "label": "Mobile viewport",
        "verdict": "good",
        "fact": "Responsive viewport meta is present.",
        "id": "mobile:mobile-viewport"
      },
      {
        "group": "type",
        "label": "Body text size",
        "verdict": "needs_work",
        "fact": "Smallest body text is 11px (base ~14px). below the ~16px readable floor.",
        "fix": "Keep body copy ≥15-16px; reserve sub-13px for fine print only.",
        "id": "type:body-text-size"
      },
      {
        "group": "type",
        "label": "Line length",
        "verdict": "note",
        "fact": "15 paragraphs run past ~95 characters per line.",
        "fix": "Cap measure at ~60-75ch for comfortable reading.",
        "id": "type:line-length"
      },
      {
        "group": "a11y",
        "label": "Language declared",
        "verdict": "good",
        "fact": "html[lang] is set for screen readers.",
        "id": "a11y:language-declared"
      },
      {
        "group": "a11y",
        "label": "Image alt text",
        "verdict": "good",
        "fact": "All 178 content images carry alt text.",
        "id": "a11y:image-alt-text"
      },
      {
        "group": "a11y",
        "label": "Form labels",
        "verdict": "needs_work",
        "fact": "1 of 21 form fields have no label (+3 rely on placeholder only).",
        "fix": "Give every input a <label> or aria-label; placeholders are not labels.",
        "id": "a11y:form-labels"
      },
      {
        "group": "a11y",
        "label": "Named controls",
        "verdict": "needs_work",
        "fact": "28 buttons/links have no accessible name (icon-only, no aria-label).",
        "fix": "Add aria-label to icon-only buttons and links.",
        "id": "a11y:named-controls"
      },
      {
        "group": "a11y",
        "label": "Heading levels",
        "verdict": "note",
        "fact": "6 headings skip a level (e.g. <h2> followed by <h4>). Screen-reader users navigate by this outline.",
        "fix": "Step heading levels one at a time; use CSS for size, not a deeper level.",
        "id": "a11y:heading-levels"
      },
      {
        "group": "a11y",
        "label": "Skip link",
        "verdict": "note",
        "fact": "No same-page “skip to content” link was found. Keyboard users tab through the whole nav on every page.",
        "fix": "Add a first-in-DOM <a href=\"#main\"> that is visible on focus.",
        "id": "a11y:skip-link"
      },
      {
        "group": "weight",
        "label": "Page weight",
        "verdict": "needs_work",
        "fact": "At least 24.0 MB across 507 measurable resources. 1465 cross-origin resources did not expose a size, so the real total is higher.",
        "fix": "Compress and lazy-load below-the-fold media; drop unused third-party scripts.",
        "id": "weight:page-weight"
      },
      {
        "group": "weight",
        "label": "Render-blocking resources",
        "verdict": "needs_work",
        "fact": "47 stylesheets/scripts in <head> block first paint.",
        "fix": "Defer non-critical JS (defer/async) and inline only critical CSS.",
        "id": "weight:render-blocking-resources"
      },
      {
        "group": "weight",
        "label": "Oversized images",
        "verdict": "needs_work",
        "fact": "104 images are shipped at more than 2x the width shown.",
        "evidence": "“NavImage_Desktop.webp?crop=center&height” is 800px wide, displayed at 218px",
        "fix": "Serve responsive sizes (srcset/sizes) matching the rendered width.",
        "id": "weight:oversized-images"
      },
      {
        "group": "structure",
        "label": "Keyboard reachability",
        "verdict": "note",
        "fact": "12 elements look clickable but cannot be reached by keyboard.",
        "evidence": "“Shop All”, “Gifts”, “About Us”",
        "fix": "Use <button>/<a>, or add role + tabindex=\"0\" and a key handler.",
        "id": "structure:keyboard-reachability"
      },
      {
        "group": "forms",
        "label": "Inline validation",
        "verdict": "good",
        "fact": "4 fields carry validation attributes (required/pattern/aria-invalid).",
        "id": "forms:inline-validation"
      }
    ],
    "signals": {
      "contrast": {
        "sampled": 730,
        "pass_aa": 722,
        "fail_aa": 8,
        "unknown": 0,
        "worst": [
          {
            "text": "PREVIEW & CHECKOUT",
            "ratio": 1.68,
            "fg": "#b8b8bc",
            "bg": "#ececee",
            "need": 4.5,
            "px": 16
          },
          {
            "text": "Clear",
            "ratio": 3.45,
            "fg": "#f45048",
            "bg": "#ffffff",
            "need": 4.5,
            "px": 16
          },
          {
            "text": "Verified Buyer",
            "ratio": 3.45,
            "fg": "#f45048",
            "bg": "#ffffff",
            "need": 4.5,
            "px": 16
          },
          {
            "text": "Verified Buyer",
            "ratio": 3.45,
            "fg": "#f45048",
            "bg": "#ffffff",
            "need": 4.5,
            "px": 16
          }
        ]
      },
      "typography": {
        "body_px": 14,
        "min_body_px": 11,
        "line_height": 1.5,
        "long_lines": 15,
        "distinct_sizes": 9
      },
      "a11y": {
        "lang": true,
        "viewport": true,
        "img_total": 178,
        "img_missing_alt": 0,
        "controls_total": 21,
        "controls_unlabeled": 1,
        "controls_placeholder_only": 3,
        "controls_unnamed": 28,
        "generic_links": 0,
        "h1_home": 1,
        "h1_counts": [
          1,
          2,
          2,
          2
        ],
        "heading_skips": 6,
        "title_len_home": 70,
        "skip_link_home": false,
        "label_in_name_mismatch": 0
      },
      "tap_targets": {
        "checked": 354,
        "small": 216,
        "sample": [
          {
            "label": "(unnamed)",
            "w": 32,
            "h": 32
          },
          {
            "label": "(unnamed)",
            "w": 32,
            "h": 32
          },
          {
            "label": "(unnamed)",
            "w": 32,
            "h": 32
          },
          {
            "label": "(unnamed)",
            "w": 32,
            "h": 32
          }
        ]
      },
      "weight": {
        "measured_kb": 24588,
        "measured_count": 507,
        "opaque_count": 1465,
        "render_blocking": 47,
        "oversized_total": 104,
        "oversized": [
          {
            "src": "NavImage_Desktop.webp?crop=center&height",
            "natural": 800,
            "shown": 218
          },
          {
            "src": "Nav_Shop_LoggedOut_d88045c1-79b0-4653-ae",
            "natural": 800,
            "shown": 218
          },
          {
            "src": "NavigationBar_Desktop.webp?crop=center&h",
            "natural": 800,
            "shown": 218
          }
        ],
        "lcp_element": null
      },
      "structure": {
        "landmarks_missing": [],
        "unreachable_count": 12,
        "unreachable_sample": [
          "Shop All",
          "Gifts",
          "About Us"
        ]
      },
      "forms": {
        "count": 4,
        "fields": 8,
        "wrong_type": [],
        "autocomplete": 4,
        "validation_attrs": 4
      },
      "layout": {
        "h_overflow": false,
        "overflow_px": 0
      },
      "viewport_w": 1440
    }
  },
  "playbooks": [],
  "steps": [
    {
      "n": 1,
      "id": "home",
      "label": "Homepage / Lander",
      "url": "https://www.drinktrade.com/",
      "reached": true,
      "copy": {
        "title": "Trade Coffee | Personalized Coffee Subscription, Matched to Your Taste",
        "meta_description": "Meet your new favorite coffee. Trade matches you with 500+ roasted-to-order coffees from 55+ top roasters—personalized to your taste.",
        "hero_copy": "A craft coffee experience, built around you | 3 bags. 3 roasters. Matched to your taste. | with your Discovery Trial",
        "h1": [
          "A craft coffee experience, built around you"
        ],
        "h2": [
          "3 bags. 3 roasters. Matched to your taste.",
          "with your Discovery Trial",
          "Chosen by experts. Refined as you go.",
          "How your Discovery Trial works",
          "What will your 3-bag combo be?",
          "Create your account",
          "Reset your password"
        ],
        "h3": [
          "Vetted by coffee pros",
          "Matches get even better",
          "Exceptional roasters only"
        ],
        "ctas": [
          "Build my trial",
          "SUBMIT",
          "Subscribe",
          "Shop All",
          "Shop Gifts",
          "Shop Coffee"
        ],
        "prices": [],
        "form_fields": 1,
        "form_field_names": [
          "email"
        ],
        "video": {
          "count": 2,
          "native": 2,
          "providers": []
        }
      },
      "proof": [
        {
          "type": "free_shipping",
          "text": "Free shipping",
          "value": null
        },
        {
          "type": "urgency",
          "text": "LIMITED TIME",
          "value": null
        }
      ],
      "proof_position": {
        "in_header": false,
        "above_fold": false,
        "above_fold_text": null
      },
      "discount": {
        "present": false,
        "anchors": [],
        "percent_off": null
      },
      "subscription": {
        "detected": true,
        "interval": null
      },
      "free_items": [],
      "tactics": [
        "sticky_cta",
        "review_wall",
        "faq_accordion",
        "free_shipping",
        "social_proof_logos"
      ],
      "tactics_evidence": {
        "review_wall": "review widget",
        "comparison_table": null,
        "countdown_timer": null,
        "free_gift": null,
        "subscription_toggle": null,
        "faq_accordion": "Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
        "trust_badges": null,
        "press_logos": null,
        "per_unit_price": null,
        "free_shipping": "Free shipping",
        "free_trial": null,
        "no_credit_card": null,
        "social_proof_logos": "logos: Trade Coffee, Browse espresso, Cold brew you'll crave, Redeem a gift, Coffee 101",
        "usage_proof": null,
        "pricing_tiers": null,
        "demo_docs": null,
        "express_checkout": null
      },
      "ux_flags": {
        "contrast_fail": 0,
        "contrast_unknown": 0,
        "aa_pass_pct": 100,
        "min_body_px": 11,
        "small_taps": 47,
        "h_overflow": false,
        "lang": true,
        "viewport": true,
        "h1_count": 1
      },
      "discovery": {
        "links_seen": 104,
        "candidates": 93,
        "matched": 3
      },
      "tactic_regions": [
        {
          "tactic": "scarcity",
          "ex": 0.45308159722222224,
          "ey": 0.6150859290173725,
          "ew": 0.09383680555555556,
          "eh": 0.00257871878393051,
          "pw": 1440,
          "ph": 7368,
          "text": "LIMITED TIME"
        }
      ],
      "screenshots": {
        "hero": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/01-home/hero.png",
        "full": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/01-home/full.png",
        "heroDims": null,
        "fullDims": null
      },
      "crops": [
        {
          "region": "primary_cta",
          "label": "Primary CTA",
          "url": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/01-home/crops/primary_cta.png"
        }
      ],
      "crops_note": "The WALK's crops: at most two per step, cut live by the browser from the two regions it looks for (primary_cta, proof). An empty array means neither matched on this page, which is ordinary. These are NOT the /library/elements and /library/sections crop images: those are cut at BUILD time from the stored full-page screenshot at measured element and band coords, over the listed corpus, and a scan does not produce them."
    },
    {
      "n": 2,
      "id": "p2",
      "label": "Collections",
      "url": "https://www.drinktrade.com/collections/all",
      "reached": true,
      "copy": {
        "title": "Specialty Coffee | Buy Coffee Online | Trade Coffee",
        "meta_description": "Discover the best specialty coffee or espresso delivered fresh to your door. Shop our online store for 450+ unique whole bean or ground coffees and subscribe today.",
        "hero_copy": "All Specialty Coffee | Coffee Talk | Create your account",
        "h1": [
          "All Specialty Coffee",
          "Coffee Talk"
        ],
        "h2": [
          "Create your account",
          "Reset your password"
        ],
        "h3": [
          "Honduras COMSA",
          "Black Velvet",
          "Star Valley Decaf",
          "Punch Bowl",
          "Buffalo Blend",
          "Spotlight",
          "Organic Espresso",
          "Three Pillars"
        ],
        "ctas": [
          "Build my trial",
          "Clear",
          "Load More",
          "What is Trade?",
          "Where does the coffee come from?",
          "Where do you ship to?",
          "SUBMIT",
          "Subscribe",
          "Shop All",
          "Shop Gifts",
          "Shop Coffee"
        ],
        "prices": [
          "$16.99",
          "$21.99",
          "$22",
          "$30"
        ],
        "form_fields": 11,
        "form_field_names": [
          "select",
          "radio",
          "radio",
          "radio",
          "radio",
          "radio",
          "checkbox",
          "checkbox",
          "checkbox",
          "checkbox",
          "email"
        ],
        "video": {
          "count": 0,
          "native": 0,
          "providers": []
        }
      },
      "proof": [],
      "proof_position": {
        "in_header": false,
        "above_fold": false,
        "above_fold_text": null
      },
      "discount": {
        "present": false,
        "anchors": [],
        "percent_off": null
      },
      "subscription": {
        "detected": true,
        "interval": null
      },
      "free_items": [],
      "tactics": [
        "sticky_cta",
        "review_wall",
        "faq_accordion",
        "social_proof_logos"
      ],
      "tactics_evidence": {
        "review_wall": "review widget",
        "comparison_table": null,
        "countdown_timer": null,
        "free_gift": null,
        "subscription_toggle": null,
        "faq_accordion": "Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
        "trust_badges": null,
        "press_logos": null,
        "per_unit_price": null,
        "free_shipping": null,
        "free_trial": null,
        "no_credit_card": null,
        "social_proof_logos": "logos: Trade Coffee, Browse espresso, Cold brew you'll crave, Redeem a gift, Coffee 101",
        "usage_proof": null,
        "pricing_tiers": null,
        "demo_docs": null,
        "express_checkout": null
      },
      "ux_flags": {
        "contrast_fail": 1,
        "contrast_unknown": 0,
        "aa_pass_pct": 100,
        "min_body_px": 12,
        "small_taps": 50,
        "h_overflow": false,
        "lang": true,
        "viewport": true,
        "h1_count": 2
      },
      "discovery": null,
      "tactic_regions": [],
      "screenshots": {
        "hero": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/02-p2/hero.png",
        "full": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/02-p2/full.png",
        "heroDims": null,
        "fullDims": null
      },
      "crops": [
        {
          "region": "primary_cta",
          "label": "Primary CTA",
          "url": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/02-p2/crops/primary_cta.png"
        }
      ],
      "crops_note": "The WALK's crops: at most two per step, cut live by the browser from the two regions it looks for (primary_cta, proof). An empty array means neither matched on this page, which is ordinary. These are NOT the /library/elements and /library/sections crop images: those are cut at BUILD time from the stored full-page screenshot at measured element and band coords, over the listed corpus, and a scan does not produce them."
    },
    {
      "n": 3,
      "id": "p3",
      "label": "Products",
      "url": "https://www.drinktrade.com/products/coffee-gift-subscription",
      "reached": true,
      "copy": {
        "title": "Coffee Gift Subscription | Trade Coffee",
        "meta_description": "Discover Coffee Gift Subscription from on Trade. Give the gift of a coffee journey tailored just for them with our Personalized Coffee Subscription. Each gift subscription includes handpicked matches based on their taste, one freshly roasted coffee delivered every month, and access to our team of coffee experts—it’s the perfect gift for any coffee lover.",
        "hero_copy": "Coffee Gift Subscription | Why they'll love it | Loved by 435,000+ coffee drinkers",
        "h1": [
          "Coffee Gift Subscription",
          "Frequently Asked Questions"
        ],
        "h2": [
          "Why they'll love it",
          "Loved by 435,000+ coffee drinkers",
          "Corporate & group gifting",
          "Want to try Trade for yourself?",
          "You may also like",
          "Create your account",
          "Reset your password"
        ],
        "h3": [
          "Select a subscription",
          "Delivery method",
          "Who is it for?",
          "Add a digital card",
          "Add a custom message",
          "When should we email this gift?",
          "Personalized coffee match",
          "Roasted to order & shipped fresh"
        ],
        "ctas": [
          "Build my trial",
          "PREVIEW & CHECKOUT",
          "Reviews 19 (tab expanded)",
          "Questions 1 (tab collapsed)",
          "Filters",
          "Write a Review (Opens in a new window)",
          "Read More Read more about this review",
          "Show More",
          "How do Trade's gift subscriptions work?",
          "Where do you ship to?",
          "Can I schedule a gift to ship at a later date?",
          "What kind of coffee can they choose from?"
        ],
        "prices": [
          "$66.00",
          "$132.00",
          "$264.00"
        ],
        "form_fields": 8,
        "form_field_names": [
          "properties[Delivery Method]",
          "properties[Delivery Method]",
          "properties[Recipient Name]",
          "properties[Recipient Email]",
          "properties[Gift Message]",
          "date",
          "select",
          "email"
        ],
        "video": {
          "count": 0,
          "native": 0,
          "providers": []
        }
      },
      "proof": [
        {
          "type": "star_rating",
          "text": "4.3 out of 5",
          "value": 4.3
        },
        {
          "type": "free_shipping",
          "text": "Free shipping",
          "value": null
        }
      ],
      "proof_position": {
        "in_header": true,
        "above_fold": true,
        "above_fold_text": "Rated 4.3 out of 5 stars"
      },
      "discount": {
        "present": false,
        "anchors": [],
        "percent_off": null
      },
      "subscription": {
        "detected": true,
        "interval": null
      },
      "free_items": [],
      "tactics": [
        "sticky_cta",
        "review_wall",
        "faq_accordion",
        "free_shipping",
        "social_proof_logos"
      ],
      "tactics_evidence": {
        "review_wall": "review widget",
        "comparison_table": null,
        "countdown_timer": null,
        "free_gift": null,
        "subscription_toggle": null,
        "faq_accordion": "Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
        "trust_badges": null,
        "press_logos": null,
        "per_unit_price": null,
        "free_shipping": "free shipping",
        "free_trial": null,
        "no_credit_card": null,
        "social_proof_logos": "logos: Trade Coffee, Browse espresso, Cold brew you'll crave, Redeem a gift, Coffee 101",
        "usage_proof": null,
        "pricing_tiers": null,
        "demo_docs": null,
        "express_checkout": null
      },
      "ux_flags": {
        "contrast_fail": 7,
        "contrast_unknown": 0,
        "aa_pass_pct": 97,
        "min_body_px": 12,
        "small_taps": 72,
        "h_overflow": false,
        "lang": true,
        "viewport": true,
        "h1_count": 2
      },
      "discovery": null,
      "tactic_regions": [
        {
          "tactic": "rating",
          "ex": 0.5208333333333334,
          "ey": 0.03636266344956413,
          "ew": 0.4486111111111111,
          "eh": 0.0030646793275217934,
          "pw": 1440,
          "ph": 9636,
          "text": "Rated 4.3 out of 5 stars 19 Reviews Click to scroll to reviews"
        }
      ],
      "screenshots": {
        "hero": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/03-p3/hero.png",
        "full": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/03-p3/full.png",
        "heroDims": null,
        "fullDims": null
      },
      "crops": [
        {
          "region": "primary_cta",
          "label": "Primary CTA",
          "url": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/03-p3/crops/primary_cta.png"
        },
        {
          "region": "proof",
          "label": "Proof placement",
          "url": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/03-p3/crops/proof.png"
        }
      ],
      "crops_note": "The WALK's crops: at most two per step, cut live by the browser from the two regions it looks for (primary_cta, proof). An empty array means neither matched on this page, which is ordinary. These are NOT the /library/elements and /library/sections crop images: those are cut at BUILD time from the stored full-page screenshot at measured element and band coords, over the listed corpus, and a scan does not produce them."
    },
    {
      "n": 4,
      "id": "p4",
      "label": "Pages",
      "url": "https://www.drinktrade.com/pages/subscribe",
      "reached": true,
      "copy": {
        "title": "Coffee Subscription from America's Best Roasters | Trade Coffee",
        "meta_description": "America's #1 coffee subscription. Discover fresh-roasted coffee from 55+ of the country's best roasters. Personalized recommendations, expert picks, and coffee you'll never find on your own.",
        "hero_copy": "Treat yourself to better coffee | Your ultimate pass to coffee exploration | More ways to shop under-the-radar roasters",
        "h1": [
          "Treat yourself to better coffee",
          "We deliver perfect answers too"
        ],
        "h2": [
          "Your ultimate pass to coffee exploration",
          "More ways to shop under-the-radar roasters",
          "More ways to shop under-the-radar roasters",
          "Love it or we’ll replace it",
          "Loved by 435,000+ coffee drinkers",
          "Free first bag with your Discovery Trial",
          "Create your account",
          "Reset your password"
        ],
        "h3": [
          "Build your trial in minutes.",
          "Shop à la carte",
          "Build your trial in minutes.",
          "Shop à la carte"
        ],
        "ctas": [
          "Build my trial",
          "How do Trade coffee subscriptions work?",
          "What types of subscriptions does Trade offer?",
          "Where do you ship to?",
          "SUBMIT",
          "Subscribe",
          "Shop All",
          "Shop Gifts",
          "Shop coffee",
          "Shop Coffee"
        ],
        "prices": [],
        "form_fields": 1,
        "form_field_names": [
          "email"
        ],
        "video": {
          "count": 4,
          "native": 4,
          "providers": []
        }
      },
      "proof": [
        {
          "type": "free_shipping",
          "text": "Free shipping",
          "value": null
        }
      ],
      "proof_position": {
        "in_header": false,
        "above_fold": false,
        "above_fold_text": null
      },
      "discount": {
        "present": false,
        "anchors": [],
        "percent_off": null
      },
      "subscription": {
        "detected": true,
        "interval": null
      },
      "free_items": [],
      "tactics": [
        "sticky_cta",
        "review_wall",
        "faq_accordion",
        "free_shipping",
        "social_proof_logos"
      ],
      "tactics_evidence": {
        "review_wall": "review widget",
        "comparison_table": null,
        "countdown_timer": null,
        "free_gift": null,
        "subscription_toggle": null,
        "faq_accordion": "Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
        "trust_badges": null,
        "press_logos": null,
        "per_unit_price": null,
        "free_shipping": "Free shipping",
        "free_trial": null,
        "no_credit_card": null,
        "social_proof_logos": "logos: Trade Coffee, Browse espresso, Cold brew you'll crave, Redeem a gift, Coffee 101",
        "usage_proof": null,
        "pricing_tiers": null,
        "demo_docs": null,
        "express_checkout": null
      },
      "ux_flags": {
        "contrast_fail": 0,
        "contrast_unknown": 0,
        "aa_pass_pct": 100,
        "min_body_px": 11,
        "small_taps": 47,
        "h_overflow": false,
        "lang": true,
        "viewport": true,
        "h1_count": 2
      },
      "discovery": null,
      "tactic_regions": [],
      "screenshots": {
        "hero": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/04-p4/hero.png",
        "full": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/04-p4/full.png",
        "heroDims": null,
        "fullDims": null
      },
      "crops": [
        {
          "region": "primary_cta",
          "label": "Primary CTA",
          "url": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/04-p4/crops/primary_cta.png"
        }
      ],
      "crops_note": "The WALK's crops: at most two per step, cut live by the browser from the two regions it looks for (primary_cta, proof). An empty array means neither matched on this page, which is ordinary. These are NOT the /library/elements and /library/sections crop images: those are cut at BUILD time from the stored full-page screenshot at measured element and band coords, over the listed corpus, and a scan does not produce them."
    }
  ],
  "favicon_url": "https://api.uxxray.com/api/v1/teardown/drinktrade/favicon",
  "agent_brief": {
    "source_type": "rendered_summary",
    "note": "generated only from measured facts — see facts.patterns[].evidence",
    "markdown": "# Agent Brief. build in the style of drinktrade.com\n\n> Machine-extracted from a live on-demand funnel teardown (2026-08-03). 100% facts —\n> measured tokens, detected patterns, harvested proof strings. No LLM interpretation.\n> Measured from a 4-step funnel walk.\n> Tokens: `tokens.json` / `tailwind.css`.\n\n**Funnel:** Homepage / Lander → Collections → Products → Pages\n\n## Palette (area-weighted from live CSS)\n| Hex | Usage | Likely role |\n|-----|------:|-------------|\n| `#ffffff` | 76% | background |\n| `#252525` | 18% | support |\n| `#ebff88` | 6% | accent/brand |\n| `#1a1a1a` | 0% | support |\n| `#ececee` | 0% | background |\n| `#9c3912` | 0% | accent/brand |\n\nCurated roles: `primary=#ebff88` · `accent=#ebff88` · `bg=#ffffff` · `surface=#ebff88` · `text=#252525`\n\n## Type\n- Display: `GT Alpina`\n- Body: `Inter`\n- Size scale (px): 11, 12, 14, 16, 18, 20, 24, 28, 36, 48, 52, 60\n- Radius (px): 4, 8, 12, 16, 28, 9999\n\n## Patterns detected (fact-based). 5/15\n- **On-page review wall**. An embedded wall of customer reviews. _(home: review widget; p2: review widget; p3: review widget)_\n- **Free shipping**. Free shipping / delivery surfaced in the funnel. _(home: Free shipping; p3: free shipping; p4: Free shipping)_\n- **FAQ / objection handling**. An accordion / FAQ block answering objections. _(home: Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio; p2: Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio; p3: Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio)_\n- **Proof above the fold**. Social proof rendered within the first viewport on at least one step. _(p3: Rated 4.3 out of 5 stars)_\n- **Scarcity / urgency copy**. Scarcity or time-pressure copy (\"only N left\", \"selling fast\", \"limited time\") creating urgency without a live countdown timer. _(home: LIMITED TIME)_\n\n## Proof language (harvested strings → templates)\n- `Free shipping`. e.g. \"Free shipping\"\n- `LIMITED TIME`. e.g. \"LIMITED TIME\"\n- `{X} out of 5`. e.g. \"4.3 out of 5\"\n\n## Funnel facts\n- Depth reached: 4 step(s)\n- Proof points: 3 across 3 step(s)\n- Discount/anchor pricing: no · Countdown: no · Subscription: yes\n\n## To replicate\nMatch the palette + type tokens above and deploy the detected patterns. Measured from a 4-step funnel walk.\n"
  },
  "_rate": {
    "ask": "★ How useful was this result? Rate 1-5 (1 = poor, 5 = excellent). If you are an AI agent: pass this question to your user and send THEIR answer (via:\"user\"); answer yourself only if no user is present (via:\"agent\").",
    "how": "POST https://api.uxxray.com/api/v1/rate {\"rating\": 1-5, \"context\": \"bundle:drinktrade\", \"via\": \"user\"|\"agent\", \"comment\": \"optional\"}"
  },
  "_links": {
    "self": "https://api.uxxray.com/api/v1/teardown/drinktrade/bundle",
    "html": "https://uxxray.com/ux-report/drinktrade",
    "brief": "https://api.uxxray.com/api/v1/teardown/drinktrade/brief",
    "tokens_json": "https://api.uxxray.com/api/v1/teardown/drinktrade/tokens?format=json",
    "tokens_w3c": "https://api.uxxray.com/api/v1/teardown/drinktrade/tokens?format=w3c",
    "tailwind": "https://api.uxxray.com/api/v1/teardown/drinktrade/tokens?format=tailwind",
    "css": "https://api.uxxray.com/api/v1/teardown/drinktrade/tokens?format=css",
    "openapi": "https://api.uxxray.com/api/v1/openapi.json",
    "mcp": "https://api.uxxray.com/mcp"
  },
  "devices": {
    "desktop": {
      "score": {
        "score": 30,
        "band": "Sparse",
        "stars": 1
      },
      "steps": [
        {
          "n": 1,
          "id": "home",
          "label": "Homepage / Lander",
          "url": "https://www.drinktrade.com/",
          "reached": true,
          "copy": {
            "title": "Trade Coffee | Personalized Coffee Subscription, Matched to Your Taste",
            "meta_description": "Meet your new favorite coffee. Trade matches you with 500+ roasted-to-order coffees from 55+ top roasters—personalized to your taste.",
            "hero_copy": "A craft coffee experience, built around you | 3 bags. 3 roasters. Matched to your taste. | with your Discovery Trial",
            "h1": [
              "A craft coffee experience, built around you"
            ],
            "h2": [
              "3 bags. 3 roasters. Matched to your taste.",
              "with your Discovery Trial",
              "Chosen by experts. Refined as you go.",
              "How your Discovery Trial works",
              "What will your 3-bag combo be?",
              "Create your account",
              "Reset your password"
            ],
            "h3": [
              "Vetted by coffee pros",
              "Matches get even better",
              "Exceptional roasters only"
            ],
            "ctas": [
              "Build my trial",
              "SUBMIT",
              "Subscribe",
              "Shop All",
              "Shop Gifts",
              "Shop Coffee"
            ],
            "prices": [],
            "form_fields": 1,
            "form_field_names": [
              "email"
            ],
            "video": {
              "count": 2,
              "native": 2,
              "providers": []
            }
          },
          "proof": [
            {
              "type": "free_shipping",
              "text": "Free shipping",
              "value": null
            },
            {
              "type": "urgency",
              "text": "LIMITED TIME",
              "value": null
            }
          ],
          "proof_position": {
            "in_header": false,
            "above_fold": false,
            "above_fold_text": null
          },
          "discount": {
            "present": false,
            "anchors": [],
            "percent_off": null
          },
          "subscription": {
            "detected": true,
            "interval": null
          },
          "free_items": [],
          "tactics": [
            "sticky_cta",
            "review_wall",
            "faq_accordion",
            "free_shipping",
            "social_proof_logos"
          ],
          "tactics_evidence": {
            "review_wall": "review widget",
            "comparison_table": null,
            "countdown_timer": null,
            "free_gift": null,
            "subscription_toggle": null,
            "faq_accordion": "Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
            "trust_badges": null,
            "press_logos": null,
            "per_unit_price": null,
            "free_shipping": "Free shipping",
            "free_trial": null,
            "no_credit_card": null,
            "social_proof_logos": "logos: Trade Coffee, Browse espresso, Cold brew you'll crave, Redeem a gift, Coffee 101",
            "usage_proof": null,
            "pricing_tiers": null,
            "demo_docs": null,
            "express_checkout": null
          },
          "ux_flags": {
            "contrast_fail": 0,
            "contrast_unknown": 0,
            "aa_pass_pct": 100,
            "min_body_px": 11,
            "small_taps": 47,
            "h_overflow": false,
            "lang": true,
            "viewport": true,
            "h1_count": 1
          },
          "discovery": {
            "links_seen": 104,
            "candidates": 93,
            "matched": 3
          },
          "tactic_regions": [
            {
              "tactic": "scarcity",
              "ex": 0.45308159722222224,
              "ey": 0.6150859290173725,
              "ew": 0.09383680555555556,
              "eh": 0.00257871878393051,
              "pw": 1440,
              "ph": 7368,
              "text": "LIMITED TIME"
            }
          ],
          "screenshots": {
            "hero": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/01-home/hero.png",
            "full": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/01-home/full.png",
            "heroDims": null,
            "fullDims": null
          },
          "crops": [
            {
              "region": "primary_cta",
              "label": "Primary CTA",
              "url": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/01-home/crops/primary_cta.png"
            }
          ],
          "crops_note": "The WALK's crops: at most two per step, cut live by the browser from the two regions it looks for (primary_cta, proof). An empty array means neither matched on this page, which is ordinary. These are NOT the /library/elements and /library/sections crop images: those are cut at BUILD time from the stored full-page screenshot at measured element and band coords, over the listed corpus, and a scan does not produce them."
        },
        {
          "n": 2,
          "id": "p2",
          "label": "Collections",
          "url": "https://www.drinktrade.com/collections/all",
          "reached": true,
          "copy": {
            "title": "Specialty Coffee | Buy Coffee Online | Trade Coffee",
            "meta_description": "Discover the best specialty coffee or espresso delivered fresh to your door. Shop our online store for 450+ unique whole bean or ground coffees and subscribe today.",
            "hero_copy": "All Specialty Coffee | Coffee Talk | Create your account",
            "h1": [
              "All Specialty Coffee",
              "Coffee Talk"
            ],
            "h2": [
              "Create your account",
              "Reset your password"
            ],
            "h3": [
              "Honduras COMSA",
              "Black Velvet",
              "Star Valley Decaf",
              "Punch Bowl",
              "Buffalo Blend",
              "Spotlight",
              "Organic Espresso",
              "Three Pillars"
            ],
            "ctas": [
              "Build my trial",
              "Clear",
              "Load More",
              "What is Trade?",
              "Where does the coffee come from?",
              "Where do you ship to?",
              "SUBMIT",
              "Subscribe",
              "Shop All",
              "Shop Gifts",
              "Shop Coffee"
            ],
            "prices": [
              "$16.99",
              "$21.99",
              "$22",
              "$30"
            ],
            "form_fields": 11,
            "form_field_names": [
              "select",
              "radio",
              "radio",
              "radio",
              "radio",
              "radio",
              "checkbox",
              "checkbox",
              "checkbox",
              "checkbox",
              "email"
            ],
            "video": {
              "count": 0,
              "native": 0,
              "providers": []
            }
          },
          "proof": [],
          "proof_position": {
            "in_header": false,
            "above_fold": false,
            "above_fold_text": null
          },
          "discount": {
            "present": false,
            "anchors": [],
            "percent_off": null
          },
          "subscription": {
            "detected": true,
            "interval": null
          },
          "free_items": [],
          "tactics": [
            "sticky_cta",
            "review_wall",
            "faq_accordion",
            "social_proof_logos"
          ],
          "tactics_evidence": {
            "review_wall": "review widget",
            "comparison_table": null,
            "countdown_timer": null,
            "free_gift": null,
            "subscription_toggle": null,
            "faq_accordion": "Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
            "trust_badges": null,
            "press_logos": null,
            "per_unit_price": null,
            "free_shipping": null,
            "free_trial": null,
            "no_credit_card": null,
            "social_proof_logos": "logos: Trade Coffee, Browse espresso, Cold brew you'll crave, Redeem a gift, Coffee 101",
            "usage_proof": null,
            "pricing_tiers": null,
            "demo_docs": null,
            "express_checkout": null
          },
          "ux_flags": {
            "contrast_fail": 1,
            "contrast_unknown": 0,
            "aa_pass_pct": 100,
            "min_body_px": 12,
            "small_taps": 50,
            "h_overflow": false,
            "lang": true,
            "viewport": true,
            "h1_count": 2
          },
          "discovery": null,
          "tactic_regions": [],
          "screenshots": {
            "hero": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/02-p2/hero.png",
            "full": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/02-p2/full.png",
            "heroDims": null,
            "fullDims": null
          },
          "crops": [
            {
              "region": "primary_cta",
              "label": "Primary CTA",
              "url": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/02-p2/crops/primary_cta.png"
            }
          ],
          "crops_note": "The WALK's crops: at most two per step, cut live by the browser from the two regions it looks for (primary_cta, proof). An empty array means neither matched on this page, which is ordinary. These are NOT the /library/elements and /library/sections crop images: those are cut at BUILD time from the stored full-page screenshot at measured element and band coords, over the listed corpus, and a scan does not produce them."
        },
        {
          "n": 3,
          "id": "p3",
          "label": "Products",
          "url": "https://www.drinktrade.com/products/coffee-gift-subscription",
          "reached": true,
          "copy": {
            "title": "Coffee Gift Subscription | Trade Coffee",
            "meta_description": "Discover Coffee Gift Subscription from on Trade. Give the gift of a coffee journey tailored just for them with our Personalized Coffee Subscription. Each gift subscription includes handpicked matches based on their taste, one freshly roasted coffee delivered every month, and access to our team of coffee experts—it’s the perfect gift for any coffee lover.",
            "hero_copy": "Coffee Gift Subscription | Why they'll love it | Loved by 435,000+ coffee drinkers",
            "h1": [
              "Coffee Gift Subscription",
              "Frequently Asked Questions"
            ],
            "h2": [
              "Why they'll love it",
              "Loved by 435,000+ coffee drinkers",
              "Corporate & group gifting",
              "Want to try Trade for yourself?",
              "You may also like",
              "Create your account",
              "Reset your password"
            ],
            "h3": [
              "Select a subscription",
              "Delivery method",
              "Who is it for?",
              "Add a digital card",
              "Add a custom message",
              "When should we email this gift?",
              "Personalized coffee match",
              "Roasted to order & shipped fresh"
            ],
            "ctas": [
              "Build my trial",
              "PREVIEW & CHECKOUT",
              "Reviews 19 (tab expanded)",
              "Questions 1 (tab collapsed)",
              "Filters",
              "Write a Review (Opens in a new window)",
              "Read More Read more about this review",
              "Show More",
              "How do Trade's gift subscriptions work?",
              "Where do you ship to?",
              "Can I schedule a gift to ship at a later date?",
              "What kind of coffee can they choose from?"
            ],
            "prices": [
              "$66.00",
              "$132.00",
              "$264.00"
            ],
            "form_fields": 8,
            "form_field_names": [
              "properties[Delivery Method]",
              "properties[Delivery Method]",
              "properties[Recipient Name]",
              "properties[Recipient Email]",
              "properties[Gift Message]",
              "date",
              "select",
              "email"
            ],
            "video": {
              "count": 0,
              "native": 0,
              "providers": []
            }
          },
          "proof": [
            {
              "type": "star_rating",
              "text": "4.3 out of 5",
              "value": 4.3
            },
            {
              "type": "free_shipping",
              "text": "Free shipping",
              "value": null
            }
          ],
          "proof_position": {
            "in_header": true,
            "above_fold": true,
            "above_fold_text": "Rated 4.3 out of 5 stars"
          },
          "discount": {
            "present": false,
            "anchors": [],
            "percent_off": null
          },
          "subscription": {
            "detected": true,
            "interval": null
          },
          "free_items": [],
          "tactics": [
            "sticky_cta",
            "review_wall",
            "faq_accordion",
            "free_shipping",
            "social_proof_logos"
          ],
          "tactics_evidence": {
            "review_wall": "review widget",
            "comparison_table": null,
            "countdown_timer": null,
            "free_gift": null,
            "subscription_toggle": null,
            "faq_accordion": "Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
            "trust_badges": null,
            "press_logos": null,
            "per_unit_price": null,
            "free_shipping": "free shipping",
            "free_trial": null,
            "no_credit_card": null,
            "social_proof_logos": "logos: Trade Coffee, Browse espresso, Cold brew you'll crave, Redeem a gift, Coffee 101",
            "usage_proof": null,
            "pricing_tiers": null,
            "demo_docs": null,
            "express_checkout": null
          },
          "ux_flags": {
            "contrast_fail": 7,
            "contrast_unknown": 0,
            "aa_pass_pct": 97,
            "min_body_px": 12,
            "small_taps": 72,
            "h_overflow": false,
            "lang": true,
            "viewport": true,
            "h1_count": 2
          },
          "discovery": null,
          "tactic_regions": [
            {
              "tactic": "rating",
              "ex": 0.5208333333333334,
              "ey": 0.03636266344956413,
              "ew": 0.4486111111111111,
              "eh": 0.0030646793275217934,
              "pw": 1440,
              "ph": 9636,
              "text": "Rated 4.3 out of 5 stars 19 Reviews Click to scroll to reviews"
            }
          ],
          "screenshots": {
            "hero": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/03-p3/hero.png",
            "full": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/03-p3/full.png",
            "heroDims": null,
            "fullDims": null
          },
          "crops": [
            {
              "region": "primary_cta",
              "label": "Primary CTA",
              "url": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/03-p3/crops/primary_cta.png"
            },
            {
              "region": "proof",
              "label": "Proof placement",
              "url": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/03-p3/crops/proof.png"
            }
          ],
          "crops_note": "The WALK's crops: at most two per step, cut live by the browser from the two regions it looks for (primary_cta, proof). An empty array means neither matched on this page, which is ordinary. These are NOT the /library/elements and /library/sections crop images: those are cut at BUILD time from the stored full-page screenshot at measured element and band coords, over the listed corpus, and a scan does not produce them."
        },
        {
          "n": 4,
          "id": "p4",
          "label": "Pages",
          "url": "https://www.drinktrade.com/pages/subscribe",
          "reached": true,
          "copy": {
            "title": "Coffee Subscription from America's Best Roasters | Trade Coffee",
            "meta_description": "America's #1 coffee subscription. Discover fresh-roasted coffee from 55+ of the country's best roasters. Personalized recommendations, expert picks, and coffee you'll never find on your own.",
            "hero_copy": "Treat yourself to better coffee | Your ultimate pass to coffee exploration | More ways to shop under-the-radar roasters",
            "h1": [
              "Treat yourself to better coffee",
              "We deliver perfect answers too"
            ],
            "h2": [
              "Your ultimate pass to coffee exploration",
              "More ways to shop under-the-radar roasters",
              "More ways to shop under-the-radar roasters",
              "Love it or we’ll replace it",
              "Loved by 435,000+ coffee drinkers",
              "Free first bag with your Discovery Trial",
              "Create your account",
              "Reset your password"
            ],
            "h3": [
              "Build your trial in minutes.",
              "Shop à la carte",
              "Build your trial in minutes.",
              "Shop à la carte"
            ],
            "ctas": [
              "Build my trial",
              "How do Trade coffee subscriptions work?",
              "What types of subscriptions does Trade offer?",
              "Where do you ship to?",
              "SUBMIT",
              "Subscribe",
              "Shop All",
              "Shop Gifts",
              "Shop coffee",
              "Shop Coffee"
            ],
            "prices": [],
            "form_fields": 1,
            "form_field_names": [
              "email"
            ],
            "video": {
              "count": 4,
              "native": 4,
              "providers": []
            }
          },
          "proof": [
            {
              "type": "free_shipping",
              "text": "Free shipping",
              "value": null
            }
          ],
          "proof_position": {
            "in_header": false,
            "above_fold": false,
            "above_fold_text": null
          },
          "discount": {
            "present": false,
            "anchors": [],
            "percent_off": null
          },
          "subscription": {
            "detected": true,
            "interval": null
          },
          "free_items": [],
          "tactics": [
            "sticky_cta",
            "review_wall",
            "faq_accordion",
            "free_shipping",
            "social_proof_logos"
          ],
          "tactics_evidence": {
            "review_wall": "review widget",
            "comparison_table": null,
            "countdown_timer": null,
            "free_gift": null,
            "subscription_toggle": null,
            "faq_accordion": "Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
            "trust_badges": null,
            "press_logos": null,
            "per_unit_price": null,
            "free_shipping": "Free shipping",
            "free_trial": null,
            "no_credit_card": null,
            "social_proof_logos": "logos: Trade Coffee, Browse espresso, Cold brew you'll crave, Redeem a gift, Coffee 101",
            "usage_proof": null,
            "pricing_tiers": null,
            "demo_docs": null,
            "express_checkout": null
          },
          "ux_flags": {
            "contrast_fail": 0,
            "contrast_unknown": 0,
            "aa_pass_pct": 100,
            "min_body_px": 11,
            "small_taps": 47,
            "h_overflow": false,
            "lang": true,
            "viewport": true,
            "h1_count": 2
          },
          "discovery": null,
          "tactic_regions": [],
          "screenshots": {
            "hero": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/04-p4/hero.png",
            "full": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/04-p4/full.png",
            "heroDims": null,
            "fullDims": null
          },
          "crops": [
            {
              "region": "primary_cta",
              "label": "Primary CTA",
              "url": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/desktop/04-p4/crops/primary_cta.png"
            }
          ],
          "crops_note": "The WALK's crops: at most two per step, cut live by the browser from the two regions it looks for (primary_cta, proof). An empty array means neither matched on this page, which is ordinary. These are NOT the /library/elements and /library/sections crop images: those are cut at BUILD time from the stored full-page screenshot at measured element and band coords, over the listed corpus, and a scan does not produce them."
        }
      ]
    },
    "mobile": {
      "score": {
        "score": 30,
        "band": "Sparse",
        "stars": 1
      },
      "steps": [
        {
          "n": 1,
          "id": "home",
          "label": "Homepage / Lander",
          "url": "https://www.drinktrade.com/",
          "reached": true,
          "copy": {
            "title": "Trade Coffee | Personalized Coffee Subscription, Matched to Your Taste",
            "meta_description": "Meet your new favorite coffee. Trade matches you with 500+ roasted-to-order coffees from 55+ top roasters—personalized to your taste.",
            "hero_copy": "A craft coffee experience, built around you | 3 bags. 3 roasters. Matched to your taste. | with your Discovery Trial",
            "h1": [
              "A craft coffee experience, built around you"
            ],
            "h2": [
              "3 bags. 3 roasters. Matched to your taste.",
              "with your Discovery Trial",
              "Chosen by experts. Refined as you go.",
              "How your Discovery Trial works",
              "What will your 3-bag combo be?",
              "Create your account",
              "Reset your password"
            ],
            "h3": [
              "Vetted by coffee pros",
              "Matches get even better",
              "Exceptional roasters only"
            ],
            "ctas": [
              "Build my trial",
              "SUBMIT",
              "Shop All",
              "Shop Gifts",
              "Subscribe",
              "Shop Coffee"
            ],
            "prices": [],
            "form_fields": 1,
            "form_field_names": [
              "email"
            ],
            "video": {
              "count": 2,
              "native": 2,
              "providers": []
            }
          },
          "proof": [
            {
              "type": "free_shipping",
              "text": "Free shipping",
              "value": null
            },
            {
              "type": "urgency",
              "text": "LIMITED TIME",
              "value": null
            }
          ],
          "proof_position": {
            "in_header": false,
            "above_fold": false,
            "above_fold_text": null
          },
          "discount": {
            "present": false,
            "anchors": [],
            "percent_off": null
          },
          "subscription": {
            "detected": true,
            "interval": null
          },
          "free_items": [],
          "tactics": [
            "sticky_cta",
            "review_wall",
            "faq_accordion",
            "free_shipping",
            "social_proof_logos"
          ],
          "tactics_evidence": {
            "review_wall": "review widget",
            "comparison_table": null,
            "countdown_timer": null,
            "free_gift": null,
            "subscription_toggle": null,
            "faq_accordion": "Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
            "trust_badges": null,
            "press_logos": null,
            "per_unit_price": null,
            "free_shipping": "Free shipping",
            "free_trial": null,
            "no_credit_card": null,
            "social_proof_logos": "logos: Trade Coffee, Browse espresso, Cold brew you'll crave, Redeem a gift, Coffee 101",
            "usage_proof": null,
            "pricing_tiers": null,
            "demo_docs": null,
            "express_checkout": null
          },
          "ux_flags": {
            "contrast_fail": 0,
            "contrast_unknown": 0,
            "aa_pass_pct": 100,
            "min_body_px": 11,
            "small_taps": 47,
            "h_overflow": false,
            "lang": true,
            "viewport": true,
            "h1_count": 1
          },
          "discovery": {
            "links_seen": 106,
            "candidates": 94,
            "matched": 3
          },
          "tactic_regions": [
            {
              "tactic": "scarcity",
              "ex": 0.3267628205128205,
              "ey": 0.5428928008407777,
              "ew": 0.34647435897435896,
              "eh": 0.0024960588544403572,
              "pw": 390,
              "ph": 7612,
              "text": "LIMITED TIME"
            }
          ],
          "screenshots": {
            "hero": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/mobile/01-home/hero.png",
            "full": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/mobile/01-home/full.png",
            "heroDims": null,
            "fullDims": null
          },
          "crops": [],
          "crops_note": "The WALK's crops: at most two per step, cut live by the browser from the two regions it looks for (primary_cta, proof). An empty array means neither matched on this page, which is ordinary. These are NOT the /library/elements and /library/sections crop images: those are cut at BUILD time from the stored full-page screenshot at measured element and band coords, over the listed corpus, and a scan does not produce them."
        },
        {
          "n": 2,
          "id": "p2",
          "label": "Collections",
          "url": "https://www.drinktrade.com/collections/all",
          "reached": true,
          "copy": {
            "title": "Specialty Coffee | Buy Coffee Online | Trade Coffee",
            "meta_description": "Discover the best specialty coffee or espresso delivered fresh to your door. Shop our online store for 450+ unique whole bean or ground coffees and subscribe today.",
            "hero_copy": "All Specialty Coffee | Coffee Talk | Create your account",
            "h1": [
              "All Specialty Coffee",
              "Coffee Talk"
            ],
            "h2": [
              "Create your account",
              "Reset your password"
            ],
            "h3": [
              "Honduras COMSA",
              "Black Velvet",
              "Star Valley Decaf",
              "Punch Bowl",
              "Buffalo Blend",
              "Spotlight",
              "Organic Espresso",
              "Three Pillars"
            ],
            "ctas": [
              "Build my trial",
              "Load More",
              "What is Trade?",
              "Where does the coffee come from?",
              "Where do you ship to?",
              "SUBMIT",
              "Shop All",
              "Shop Gifts",
              "Subscribe",
              "Shop Coffee"
            ],
            "prices": [
              "$21.99",
              "$16.99"
            ],
            "form_fields": 1,
            "form_field_names": [
              "email"
            ],
            "video": {
              "count": 0,
              "native": 0,
              "providers": []
            }
          },
          "proof": [],
          "proof_position": {
            "in_header": false,
            "above_fold": false,
            "above_fold_text": null
          },
          "discount": {
            "present": false,
            "anchors": [],
            "percent_off": null
          },
          "subscription": {
            "detected": true,
            "interval": null
          },
          "free_items": [],
          "tactics": [
            "sticky_cta",
            "review_wall",
            "faq_accordion",
            "social_proof_logos"
          ],
          "tactics_evidence": {
            "review_wall": "review widget",
            "comparison_table": null,
            "countdown_timer": null,
            "free_gift": null,
            "subscription_toggle": null,
            "faq_accordion": "Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
            "trust_badges": null,
            "press_logos": null,
            "per_unit_price": null,
            "free_shipping": null,
            "free_trial": null,
            "no_credit_card": null,
            "social_proof_logos": "logos: Trade Coffee, Browse espresso, Cold brew you'll crave, Redeem a gift, Coffee 101",
            "usage_proof": null,
            "pricing_tiers": null,
            "demo_docs": null,
            "express_checkout": null
          },
          "ux_flags": {
            "contrast_fail": 0,
            "contrast_unknown": 0,
            "aa_pass_pct": 100,
            "min_body_px": 12,
            "small_taps": 48,
            "h_overflow": false,
            "lang": true,
            "viewport": true,
            "h1_count": 2
          },
          "discovery": null,
          "tactic_regions": [],
          "screenshots": {
            "hero": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/mobile/02-p2/hero.png",
            "full": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/mobile/02-p2/full.png",
            "heroDims": null,
            "fullDims": null
          },
          "crops": [],
          "crops_note": "The WALK's crops: at most two per step, cut live by the browser from the two regions it looks for (primary_cta, proof). An empty array means neither matched on this page, which is ordinary. These are NOT the /library/elements and /library/sections crop images: those are cut at BUILD time from the stored full-page screenshot at measured element and band coords, over the listed corpus, and a scan does not produce them."
        },
        {
          "n": 3,
          "id": "p3",
          "label": "Products",
          "url": "https://www.drinktrade.com/products/coffee-gift-subscription",
          "reached": true,
          "copy": {
            "title": "Coffee Gift Subscription | Trade Coffee",
            "meta_description": "Discover Coffee Gift Subscription from on Trade. Give the gift of a coffee journey tailored just for them with our Personalized Coffee Subscription. Each gift subscription includes handpicked matches based on their taste, one freshly roasted coffee delivered every month, and access to our team of coffee experts—it’s the perfect gift for any coffee lover.",
            "hero_copy": "Coffee Gift Subscription | Why they'll love it | Loved by 435,000+ coffee drinkers",
            "h1": [
              "Coffee Gift Subscription",
              "Frequently Asked Questions"
            ],
            "h2": [
              "Why they'll love it",
              "Loved by 435,000+ coffee drinkers",
              "Corporate & group gifting",
              "Want to try Trade for yourself?",
              "You may also like",
              "Create your account",
              "Reset your password"
            ],
            "h3": [
              "Select a subscription",
              "Delivery method",
              "Who is it for?",
              "Add a digital card",
              "Add a custom message",
              "When should we email this gift?",
              "Personalized coffee match",
              "Roasted to order & shipped fresh"
            ],
            "ctas": [
              "Build my trial",
              "PREVIEW & CHECKOUT",
              "Reviews 19 (tab expanded)",
              "Questions 1 (tab collapsed)",
              "Filters",
              "Write a Review (Opens in a new window)",
              "Read More Read more about this review",
              "Show More",
              "How do Trade's gift subscriptions work?",
              "Where do you ship to?",
              "Can I schedule a gift to ship at a later date?",
              "What kind of coffee can they choose from?"
            ],
            "prices": [
              "$66.00",
              "$132.00",
              "$264.00"
            ],
            "form_fields": 8,
            "form_field_names": [
              "properties[Delivery Method]",
              "properties[Delivery Method]",
              "properties[Recipient Name]",
              "properties[Recipient Email]",
              "properties[Gift Message]",
              "date",
              "select",
              "email"
            ],
            "video": {
              "count": 0,
              "native": 0,
              "providers": []
            }
          },
          "proof": [
            {
              "type": "star_rating",
              "text": "4.3 out of 5",
              "value": 4.3
            },
            {
              "type": "free_shipping",
              "text": "Free shipping",
              "value": null
            }
          ],
          "proof_position": {
            "in_header": true,
            "above_fold": true,
            "above_fold_text": "Rated 4.3 out of 5 stars"
          },
          "discount": {
            "present": false,
            "anchors": [],
            "percent_off": null
          },
          "subscription": {
            "detected": true,
            "interval": null
          },
          "free_items": [],
          "tactics": [
            "sticky_cta",
            "review_wall",
            "faq_accordion",
            "free_shipping",
            "social_proof_logos"
          ],
          "tactics_evidence": {
            "review_wall": "review widget",
            "comparison_table": null,
            "countdown_timer": null,
            "free_gift": null,
            "subscription_toggle": null,
            "faq_accordion": "Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
            "trust_badges": null,
            "press_logos": null,
            "per_unit_price": null,
            "free_shipping": "free shipping",
            "free_trial": null,
            "no_credit_card": null,
            "social_proof_logos": "logos: Trade Coffee, Browse espresso, Cold brew you'll crave, Redeem a gift, Coffee 101",
            "usage_proof": null,
            "pricing_tiers": null,
            "demo_docs": null,
            "express_checkout": null
          },
          "ux_flags": {
            "contrast_fail": 7,
            "contrast_unknown": 0,
            "aa_pass_pct": 97,
            "min_body_px": 12,
            "small_taps": 70,
            "h_overflow": false,
            "lang": true,
            "viewport": true,
            "h1_count": 2
          },
          "discovery": null,
          "tactic_regions": [],
          "screenshots": {
            "hero": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/mobile/03-p3/hero.png",
            "full": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/mobile/03-p3/full.png",
            "heroDims": null,
            "fullDims": null
          },
          "crops": [
            {
              "region": "proof",
              "label": "Proof placement",
              "url": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/mobile/03-p3/crops/proof.png"
            }
          ],
          "crops_note": "The WALK's crops: at most two per step, cut live by the browser from the two regions it looks for (primary_cta, proof). An empty array means neither matched on this page, which is ordinary. These are NOT the /library/elements and /library/sections crop images: those are cut at BUILD time from the stored full-page screenshot at measured element and band coords, over the listed corpus, and a scan does not produce them."
        },
        {
          "n": 4,
          "id": "p4",
          "label": "Pages",
          "url": "https://www.drinktrade.com/pages/subscribe",
          "reached": true,
          "copy": {
            "title": "Coffee Subscription from America's Best Roasters | Trade Coffee",
            "meta_description": "America's #1 coffee subscription. Discover fresh-roasted coffee from 55+ of the country's best roasters. Personalized recommendations, expert picks, and coffee you'll never find on your own.",
            "hero_copy": "Treat yourself to better coffee | Your ultimate pass to coffee exploration | More ways to shop under-the-radar roasters",
            "h1": [
              "Treat yourself to better coffee",
              "We deliver perfect answers too"
            ],
            "h2": [
              "Your ultimate pass to coffee exploration",
              "More ways to shop under-the-radar roasters",
              "More ways to shop under-the-radar roasters",
              "Love it or we’ll replace it",
              "Loved by 435,000+ coffee drinkers",
              "Free first bag with your Discovery Trial",
              "Create your account",
              "Reset your password"
            ],
            "h3": [
              "Build your trial in minutes.",
              "Shop à la carte",
              "Build your trial in minutes.",
              "Shop à la carte"
            ],
            "ctas": [
              "Build my trial",
              "How do Trade coffee subscriptions work?",
              "What types of subscriptions does Trade offer?",
              "Where do you ship to?",
              "SUBMIT",
              "Shop All",
              "Shop Gifts",
              "Subscribe",
              "Shop coffee",
              "Shop Coffee"
            ],
            "prices": [],
            "form_fields": 1,
            "form_field_names": [
              "email"
            ],
            "video": {
              "count": 4,
              "native": 4,
              "providers": []
            }
          },
          "proof": [
            {
              "type": "free_shipping",
              "text": "Free shipping",
              "value": null
            }
          ],
          "proof_position": {
            "in_header": false,
            "above_fold": false,
            "above_fold_text": null
          },
          "discount": {
            "present": false,
            "anchors": [],
            "percent_off": null
          },
          "subscription": {
            "detected": true,
            "interval": null
          },
          "free_items": [],
          "tactics": [
            "sticky_cta",
            "review_wall",
            "faq_accordion",
            "free_shipping",
            "social_proof_logos"
          ],
          "tactics_evidence": {
            "review_wall": "review widget",
            "comparison_table": null,
            "countdown_timer": null,
            "free_gift": null,
            "subscription_toggle": null,
            "faq_accordion": "Shop Gifts Redeem a Gift Corporate Gifting Gift a Coffee Subscription Choose a subscriptio",
            "trust_badges": null,
            "press_logos": null,
            "per_unit_price": null,
            "free_shipping": "Free shipping",
            "free_trial": null,
            "no_credit_card": null,
            "social_proof_logos": "logos: Trade Coffee, Browse espresso, Cold brew you'll crave, Redeem a gift, Coffee 101",
            "usage_proof": null,
            "pricing_tiers": null,
            "demo_docs": null,
            "express_checkout": null
          },
          "ux_flags": {
            "contrast_fail": 0,
            "contrast_unknown": 0,
            "aa_pass_pct": 100,
            "min_body_px": 11,
            "small_taps": 48,
            "h_overflow": false,
            "lang": true,
            "viewport": true,
            "h1_count": 2
          },
          "discovery": null,
          "tactic_regions": [],
          "screenshots": {
            "hero": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/mobile/04-p4/hero.png",
            "full": "https://api.uxxray.com/api/v1/teardown/drinktrade/screenshot/2026-08-03/mobile/04-p4/full.png",
            "heroDims": null,
            "fullDims": null
          },
          "crops": [],
          "crops_note": "The WALK's crops: at most two per step, cut live by the browser from the two regions it looks for (primary_cta, proof). An empty array means neither matched on this page, which is ordinary. These are NOT the /library/elements and /library/sections crop images: those are cut at BUILD time from the stored full-page screenshot at measured element and band coords, over the listed corpus, and a scan does not produce them."
        }
      ]
    }
  }
}