{
  "schema_version": "2.0",
  "page_type": "crochet_pattern_article",
  "source_id": null,
  "slug": "3d-sunflower-granny-square-free-pattern",
  "title": "3D Sunflower Granny Square – Free Crochet Pattern",
  "meta_description": "Crochet a 3D sunflower granny square with puffy petals and a textured center — free 12-round pattern with color ideas, tips, and common fixes",
  "published_at": "2026-07-09",
  "updated_at": "2026-07-09",
  "author": "Ruby",
  "thumbnail_url": "data/images/3d-sunflower-granny-square-free-pattern-hero-v2.webp",
  "meta": {
    "title": "3D Sunflower Granny Square – Free Crochet Pattern",
    "pattern_name": "3D Sunflower Granny Square – Free Crochet Pattern",
    "difficulty": "Intermediate",
    "time_needed": "3-4 Hours",
    "rating": 4.8,
    "made_count": "1.4K",
    "taxonomy": {
      "category": "Flower",
      "skill_level": "Intermediate",
      "yarn_weight": "DK",
      "tags": [
        "sunflower",
        "granny square",
        "3d flower",
        "puff stitch",
        "motif",
        "floral"
      ],
      "pattern_type": "Granny Square",
      "reasoning": "Puff stitches, BLO layering, and 3D petal construction over 12 rounds go beyond beginner basics, and the main object is a flower motif square meant to be joined or appliqued."
    }
  },
  "cards": [
    {
      "order": 1,
      "card_type": "hero",
      "code": "hero",
      "title": "3D Sunflower Granny Square – Free Crochet Pattern",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "hero-info-1",
          "label": "Intermediate Level",
          "value": "Comfortable with magic loops, puff stitches, and clean color changes",
          "raw_text": "Comfortable with magic loops, puff stitches, and clean color changes",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "hero-info-2",
          "label": "Afternoon Project",
          "value": "Around 3-4 hours of cozy hook time per square",
          "raw_text": "Around 3-4 hours of cozy hook time per square",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "hero-info-3",
          "label": "Garden-Fresh Texture",
          "value": "A dimensional sunflower bloom on a classic 5.31-inch granny base",
          "raw_text": "A dimensional sunflower bloom on a classic 5.31-inch granny base",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 2,
      "card_type": "about",
      "code": "about",
      "title": "About",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "about-info-1",
          "label": "",
          "value": "This pattern turns the humble granny square into a blooming centerpiece: a dimensional sunflower with a plush puff-stitch heart and petals that genuinely pop off the fabric. Worked over 12 rounds in five colors, it starts as a tiny magic loop and grows into a neat 5.31-inch square motif. It's ideal for crocheters who are tired of flat squares and want something tactile — the kind of block that makes people reach out and run their fingers over your blanket",
          "raw_text": "This pattern turns the humble granny square into a blooming centerpiece: a dimensional sunflower with a plush puff-stitch heart and petals that genuinely pop off the fabric. Worked over 12 rounds in five colors, it starts as a tiny magic loop and grows into a neat 5.31-inch square motif. It's ideal for crocheters who are tired of flat squares and want something tactile — the kind of block that makes people reach out and run their fingers over your blanket",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "about-info-2",
          "label": "",
          "value": "Skill-wise, this sits comfortably at intermediate. You begin with a magic loop and fifteen double crochets, then build a ring of sixteen 3-hdc puff stitches separated by chain-2 spaces to form that fat, seed-packed sunflower center. The pattern leans on standing stitches — a chain-3 that counts as a double crochet and a chain-1 that counts as an incomplete half double — so each new round starts cleanly without bulky joins. Expect around three to four relaxed hours for your first square, and noticeably less once your hands memorize the rhythm",
          "raw_text": "Skill-wise, this sits comfortably at intermediate. You begin with a magic loop and fifteen double crochets, then build a ring of sixteen 3-hdc puff stitches separated by chain-2 spaces to form that fat, seed-packed sunflower center. The pattern leans on standing stitches — a chain-3 that counts as a double crochet and a chain-1 that counts as an incomplete half double — so each new round starts cleanly without bulky joins. Expect around three to four relaxed hours for your first square, and noticeably less once your hands memorize the rhythm",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "about-info-3",
          "label": "",
          "value": "Finished in DK weight on a 3.00 mm hook, each square measures approximately 5.31 × 5.31 inches — a lovely size for joining, since a simple grid of them becomes a cozy lap blanket or a striking pillow front. The fabric is dense and structured through the puffy flower center, while the outer granny rounds keep their classic drape. A single square makes a sweet appliqué or gift topper, and a ribbon-tied stack of finished blooms is a genuinely thoughtful handmade present",
          "raw_text": "Finished in DK weight on a 3.00 mm hook, each square measures approximately 5.31 × 5.31 inches — a lovely size for joining, since a simple grid of them becomes a cozy lap blanket or a striking pillow front. The fabric is dense and structured through the puffy flower center, while the outer granny rounds keep their classic drape. A single square makes a sweet appliqué or gift topper, and a ribbon-tied stack of finished blooms is a genuinely thoughtful handmade present",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 3,
      "card_type": "why_love",
      "code": "why-love",
      "title": "Why You'll Love This Pattern",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "text",
          "code": "why-1",
          "label": "A seed-packed 3D center",
          "value": "Round 2's sixteen 3-hdc puffs, each tucked between chain-2 spaces, turn a flat disc into a plump sunflower center that looks packed with real seeds.",
          "raw_text": "Round 2's sixteen 3-hdc puffs, each tucked between chain-2 spaces, turn a flat disc into a plump sunflower center that looks packed with real seeds."
        },
        {
          "order": 2,
          "row_type": "text",
          "code": "why-2",
          "label": "Crisp color changes",
          "value": "Standing stitches throughout — the ch-3 that counts as a dc and the ch-1 that opens the puff round — mean every new color starts clean, with no telltale slip-stitch ridge.",
          "raw_text": "Standing stitches throughout — the ch-3 that counts as a dc and the ch-1 that opens the puff round — mean every new color starts clean, with no telltale slip-stitch ridge."
        },
        {
          "order": 3,
          "row_type": "text",
          "code": "why-3",
          "label": "Petals that bloom round by round",
          "value": "Watching the petals open outward, then seeing the circle square off into a proper granny block, is satisfying in a way flat motifs never quite match.",
          "raw_text": "Watching the petals open outward, then seeing the circle square off into a proper granny block, is satisfying in a way flat motifs never quite match."
        },
        {
          "order": 4,
          "row_type": "text",
          "code": "why-4",
          "label": "A true one-sitting project",
          "value": "Only 12 rounds and about 5.31 inches finished — small enough for an evening on the couch, showy enough that everyone asks where you bought it.",
          "raw_text": "Only 12 rounds and about 5.31 inches finished — small enough for an evening on the couch, showy enough that everyone asks where you bought it."
        }
      ]
    },
    {
      "order": 4,
      "card_type": "switch_things_up",
      "code": "switch-things-up",
      "title": "Switch Things Up",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "text",
          "code": "tip-1",
          "label": "",
          "value": "Autumn harvest version: work rust orange petals around a deep burgundy center on a burnt sienna background — it reads like a harvest field in yarn.",
          "raw_text": "Autumn harvest version: work rust orange petals around a deep burgundy center on a burnt sienna background — it reads like a harvest field in yarn."
        },
        {
          "order": 2,
          "row_type": "text",
          "code": "tip-2",
          "label": "",
          "value": "Pop-art brights: hot pink petals with a black puff center on a turquoise square give a bold modern vibe that's fantastic for tote bags.",
          "raw_text": "Pop-art brights: hot pink petals with a black puff center on a turquoise square give a bold modern vibe that's fantastic for tote bags."
        },
        {
          "order": 3,
          "row_type": "text",
          "code": "tip-3",
          "label": "",
          "value": "Instant daisy: white petals around a pale yellow center turn the sunflower into an elegant daisy without changing a single stitch.",
          "raw_text": "Instant daisy: white petals around a pale yellow center turn the sunflower into an elegant daisy without changing a single stitch."
        },
        {
          "order": 4,
          "row_type": "text",
          "code": "tip-4",
          "label": "",
          "value": "Yarn swaps and sizing: Stylecraft Special DK or Paintbox Simply DK offer huge color ranges, and a mercerized cotton like Scheepjes Catona makes the puff center extra crisp. The same 12 rounds in worsted weight on a 4.0–4.5 mm hook land around 6.5 inches.",
          "raw_text": "Yarn swaps and sizing: Stylecraft Special DK or Paintbox Simply DK offer huge color ranges, and a mercerized cotton like Scheepjes Catona makes the puff center extra crisp. The same 12 rounds in worsted weight on a 4.0–4.5 mm hook land around 6.5 inches."
        },
        {
          "order": 5,
          "row_type": "text",
          "code": "tip-5",
          "label": "",
          "value": "Beyond the square: keep adding classic granny rounds after Round 12 for a pillow front, hold a strand of fuzzy mohair with the petal color for a pollen-dusted look, or alternate one flower square with plain granny squares across a throw.",
          "raw_text": "Beyond the square: keep adding classic granny rounds after Round 12 for a pillow front, hold a strand of fuzzy mohair with the petal color for a pollen-dusted look, or alternate one flower square with plain granny squares across a throw."
        }
      ]
    },
    {
      "order": 5,
      "card_type": "common_mistakes",
      "code": "common-mistakes",
      "title": "Common Mistakes & How to Fix Them",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "mistake",
          "code": "mistake-1",
          "label": "Leaving the magic loop loose after Round 1, so a hole opens in the flower's center over time",
          "value": "After working the 15 double crochets, pull the tail firmly until the center closes completely, then work the slip stitch join. Weave the tail through the back of the Round 1 stitches in two directions with your darning needle so the loop can never creep open, even after washing",
          "raw_text": "After working the 15 double crochets, pull the tail firmly until the center closes completely, then work the slip stitch join. Weave the tail through the back of the Round 1 stitches in two directions with your darning needle so the loop can never creep open, even after washing",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "mistake",
          "code": "mistake-2",
          "label": "Miscounting Round 1 because the chain-3 doesn't get counted as a stitch",
          "value": "The pattern's ch-3 is a standing stitch that counts as a double crochet, so Round 1 has 16 stitches total: the ch-3 plus 15 dc. Count before joining, and make sure your ending slip stitch lands in the top of that ch-3 — if you only find 15 stitches, you skipped the chain",
          "raw_text": "The pattern's ch-3 is a standing stitch that counts as a double crochet, so Round 1 has 16 stitches total: the ch-3 plus 15 dc. Count before joining, and make sure your ending slip stitch lands in the top of that ch-3 — if you only find 15 stitches, you skipped the chain",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "mistake",
          "code": "mistake-3",
          "label": "Working only 15 puffs in Round 2 instead of 16",
          "value": "The opening ch-1 plus 2 incomplete hdc forms the FIRST puff; the [3-hdc-puff, ch 2] repeat happens 15 more times, giving 16 puffs total — one sitting in each Round 1 stitch. If your puff count comes up short, you likely treated the standing puff as a turning chain instead of a real stitch",
          "raw_text": "The opening ch-1 plus 2 incomplete hdc forms the FIRST puff; the [3-hdc-puff, ch 2] repeat happens 15 more times, giving 16 puffs total — one sitting in each Round 1 stitch. If your puff count comes up short, you likely treated the standing puff as a turning chain instead of a real stitch",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "mistake",
          "code": "mistake-4",
          "label": "Puff stitches coming out lumpy or uneven heights",
          "value": "For each 3-hdc puff, pull every loop up to the same height — about the height of a normal hdc — before closing. Rushing the pull-through squashes some loops and stretches others, which makes the sunflower center look bumpy instead of plush. Slow, consistent loops give that even, seed-packed texture",
          "raw_text": "For each 3-hdc puff, pull every loop up to the same height — about the height of a normal hdc — before closing. Rushing the pull-through squashes some loops and stretches others, which makes the sunflower center look bumpy instead of plush. Slow, consistent loops give that even, seed-packed texture",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "mistake",
          "code": "mistake-5",
          "label": "Working the next round into the tops of the puffs instead of the chain-2 spaces between them",
          "value": "The ch-2 spaces between puffs are your anchor points going forward. Puff tops are tight and hard to identify, so if your stitches look strained or crowded, you're probably in the wrong spot. Drop a locking stitch marker into the first ch-2 space right after finishing Round 2 so you never lose it",
          "raw_text": "The ch-2 spaces between puffs are your anchor points going forward. Puff tops are tight and hard to identify, so if your stitches look strained or crowded, you're probably in the wrong spot. Drop a locking stitch marker into the first ch-2 space right after finishing Round 2 so you never lose it",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "mistake",
          "code": "mistake-6",
          "label": "Drowning in yarn tails from five colors across 12 rounds",
          "value": "Since each color round is fastened off, leave 6-inch tails and either crochet over them as you work the following round or weave them in every two or three rounds instead of saving them all for the end. Weaving as you go also lets you snug up any loose joins before they get buried",
          "raw_text": "Since each color round is fastened off, leave 6-inch tails and either crochet over them as you work the following round or weave them in every two or three rounds instead of saving them all for the end. Weaving as you go also lets you snug up any loose joins before they get buried",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 6,
      "card_type": "materials",
      "code": "materials",
      "title": "Materials",
      "raw_heading": "",
      "quantity": 1,
      "groups": [
        {
          "order": 1,
          "group_code": "yarn",
          "group_name": "Yarn",
          "rows": [
            {
              "order": 1,
              "row_type": "item",
              "code": "mat-yarn-1",
              "label": "",
              "value": "Yarn of your choice in 5 colors — the sample is made with DK sport weight.",
              "raw_text": "Yarn of your choice in 5 colors — the sample is made with DK sport weight.",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            },
            {
              "order": 2,
              "row_type": "item",
              "code": "mat-yarn-2",
              "label": "",
              "value": "Shown in: soft yellow petals, warm brown center, sage green leaves and a cream border.",
              "raw_text": "Shown in: soft yellow petals, warm brown center, sage green leaves and a cream border.",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            }
          ]
        },
        {
          "order": 2,
          "group_code": "hook-notions",
          "group_name": "Hook & Notions",
          "rows": [
            {
              "order": 1,
              "row_type": "item",
              "code": "mat-hook-1",
              "label": "",
              "value": "3.00 mm crochet hook",
              "raw_text": "3.00 mm crochet hook",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            },
            {
              "order": 2,
              "row_type": "item",
              "code": "mat-hook-2",
              "label": "",
              "value": "Darning needle",
              "raw_text": "Darning needle",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            },
            {
              "order": 3,
              "row_type": "item",
              "code": "mat-hook-3",
              "label": "",
              "value": "Scissors",
              "raw_text": "Scissors",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            }
          ]
        },
        {
          "order": 3,
          "group_code": "gauge",
          "group_name": "Gauge",
          "rows": [
            {
              "order": 1,
              "row_type": "item",
              "code": "mat-gauge-1",
              "label": "",
              "value": "The completed granny square measures approximately 5.31 × 5.31 inches.",
              "raw_text": "The completed granny square measures approximately 5.31 × 5.31 inches.",
              "round_start": null,
              "round_end": null,
              "is_range": false,
              "stitch_count": null,
              "question": null,
              "answer": null,
              "abbr": null,
              "meaning": null
            }
          ]
        }
      ],
      "rows": []
    },
    {
      "order": 7,
      "card_type": "abbreviations",
      "code": "abbreviations",
      "title": "Abbreviations (US Terms)",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "abbrev",
          "code": "abbrev-ch",
          "label": "ch",
          "value": "chain stitch",
          "raw_text": "chain stitch",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "ch",
          "meaning": "chain stitch"
        },
        {
          "order": 2,
          "row_type": "abbrev",
          "code": "abbrev-dc",
          "label": "dc",
          "value": "double crochet",
          "raw_text": "double crochet",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "dc",
          "meaning": "double crochet"
        },
        {
          "order": 3,
          "row_type": "abbrev",
          "code": "abbrev-hdc",
          "label": "hdc",
          "value": "half double crochet",
          "raw_text": "half double crochet",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "hdc",
          "meaning": "half double crochet"
        },
        {
          "order": 4,
          "row_type": "abbrev",
          "code": "abbrev-sc",
          "label": "sc",
          "value": "single crochet",
          "raw_text": "single crochet",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "sc",
          "meaning": "single crochet"
        },
        {
          "order": 5,
          "row_type": "abbrev",
          "code": "abbrev-sl-st",
          "label": "sl st",
          "value": "slip stitch — for joining rounds",
          "raw_text": "slip stitch — for joining rounds",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "sl st",
          "meaning": "slip stitch — for joining rounds"
        },
        {
          "order": 6,
          "row_type": "abbrev",
          "code": "abbrev-ch-sp",
          "label": "ch-sp",
          "value": "chain space",
          "raw_text": "chain space",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "ch-sp",
          "meaning": "chain space"
        },
        {
          "order": 7,
          "row_type": "abbrev",
          "code": "abbrev-st",
          "label": "st",
          "value": "stitch",
          "raw_text": "stitch",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "st",
          "meaning": "stitch"
        },
        {
          "order": 8,
          "row_type": "abbrev",
          "code": "abbrev-tr",
          "label": "tr",
          "value": "treble crochet",
          "raw_text": "treble crochet",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "tr",
          "meaning": "treble crochet"
        },
        {
          "order": 9,
          "row_type": "abbrev",
          "code": "abbrev-sk",
          "label": "sk",
          "value": "skip",
          "raw_text": "skip",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "sk",
          "meaning": "skip"
        },
        {
          "order": 10,
          "row_type": "abbrev",
          "code": "abbrev-sp",
          "label": "sp",
          "value": "space",
          "raw_text": "space",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "sp",
          "meaning": "space"
        },
        {
          "order": 11,
          "row_type": "abbrev",
          "code": "abbrev-dec",
          "label": "dec",
          "value": "decrease",
          "raw_text": "decrease",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "dec",
          "meaning": "decrease"
        },
        {
          "order": 12,
          "row_type": "abbrev",
          "code": "abbrev-inc",
          "label": "inc",
          "value": "increase",
          "raw_text": "increase",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "inc",
          "meaning": "increase"
        },
        {
          "order": 13,
          "row_type": "abbrev",
          "code": "abbrev-bl",
          "label": "BL",
          "value": "back loop",
          "raw_text": "back loop",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "BL",
          "meaning": "back loop"
        },
        {
          "order": 14,
          "row_type": "abbrev",
          "code": "abbrev-blo",
          "label": "BLO",
          "value": "back loop only",
          "raw_text": "back loop only",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "BLO",
          "meaning": "back loop only"
        },
        {
          "order": 15,
          "row_type": "abbrev",
          "code": "abbrev-fl",
          "label": "FL",
          "value": "front loop",
          "raw_text": "front loop",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": "FL",
          "meaning": "front loop"
        }
      ]
    },
    {
      "order": 8,
      "card_type": "part",
      "code": "round-by-round",
      "title": "Round-by-Round Instructions",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "round",
          "code": "rbr-round-1",
          "label": "Round 1 – The Flower Center",
          "value": "Magic loop, ch3 (counts as dc), 15dc in the loop, sl st to the top of the first ch3. (16 dc)",
          "raw_text": "Magic loop, ch3 (counts as dc), 15dc in the loop, sl st to the top of the first ch3. (16 dc)",
          "round_start": 1,
          "round_end": 1,
          "is_range": false,
          "stitch_count": 16,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "round",
          "code": "rbr-round-2",
          "label": "Round 2",
          "value": "ch1 (counts as an incomplete hdc) + 2 incomplete hdc to finish a 3-hdc-puff, ch2, [3-hdc-puff + ch2 in next st] repeat 15 times, sl st to the top of the first puff, fasten off. (16 puffs)",
          "raw_text": "ch1 (counts as an incomplete hdc) + 2 incomplete hdc to finish a 3-hdc-puff, ch2, [3-hdc-puff + ch2 in next st] repeat 15 times, sl st to the top of the first puff, fasten off. (16 puffs)",
          "round_start": 2,
          "round_end": 2,
          "is_range": false,
          "stitch_count": 16,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "round",
          "code": "rbr-round-3",
          "label": "Round 3",
          "value": "BLO, new yarn in any puff, ch3 (counts as dc), ch2, [dc+ch2 in next puff] repeat 15 times, sl st to the top of the first ch3. (16 dc)",
          "raw_text": "BLO, new yarn in any puff, ch3 (counts as dc), ch2, [dc+ch2 in next puff] repeat 15 times, sl st to the top of the first ch3. (16 dc)",
          "round_start": 3,
          "round_end": 3,
          "is_range": false,
          "stitch_count": 16,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "round",
          "code": "rbr-round-4",
          "label": "Round 4",
          "value": "ch1+2sc+ch2, sc+ch2 in next dc, sc+ch4+sc+ch2 in next dc, sc+ch2 in next dc, [2sc+ch2 in next dc, sc+ch2 in next dc, sc+ch4+sc+ch2 in next dc, sc+ch2 in next dc] repeat 3 times, sl st to the first sc.",
          "raw_text": "ch1+2sc+ch2, sc+ch2 in next dc, sc+ch4+sc+ch2 in next dc, sc+ch2 in next dc, [2sc+ch2 in next dc, sc+ch2 in next dc, sc+ch4+sc+ch2 in next dc, sc+ch2 in next dc] repeat 3 times, sl st to the first sc.",
          "round_start": 4,
          "round_end": 4,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "round",
          "code": "rbr-round-5",
          "label": "Round 5 – The Leaf",
          "value": "ch1+sc, sc+ch2 in next st, sc in next st, 5dc+ch2+5dc in next ch-sp, sc+ch2 in next st, [sc in each of next 2 sts, ch2, sc in next st, 5dc+ch2+5dc in next ch-sp, sc+ch2 in next st] repeat 3 times, sl st to the first sc. (4 leaves)",
          "raw_text": "ch1+sc, sc+ch2 in next st, sc in next st, 5dc+ch2+5dc in next ch-sp, sc+ch2 in next st, [sc in each of next 2 sts, ch2, sc in next st, 5dc+ch2+5dc in next ch-sp, sc+ch2 in next st] repeat 3 times, sl st to the first sc. (4 leaves)",
          "round_start": 5,
          "round_end": 5,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "round",
          "code": "rbr-round-6",
          "label": "Round 6 – Leaf Details",
          "value": "ch1+sc, sc+ch2 in next st, sk next ch-sp, dc dec, 3 dc inc, 2dc+ch2+2dc in next ch-sp, 3 dc inc, dc dec, ch2; [sk next ch-sp, 2sc, ch2, sk next ch-sp, dc dec, 3 dc inc, 2dc+ch2+2dc in next ch-sp, 3 dc inc, dc dec, ch2] repeat 3 times, sl st to the first sc, fasten off.",
          "raw_text": "ch1+sc, sc+ch2 in next st, sk next ch-sp, dc dec, 3 dc inc, 2dc+ch2+2dc in next ch-sp, 3 dc inc, dc dec, ch2; [sk next ch-sp, 2sc, ch2, sk next ch-sp, dc dec, 3 dc inc, 2dc+ch2+2dc in next ch-sp, 3 dc inc, dc dec, ch2] repeat 3 times, sl st to the first sc, fasten off.",
          "round_start": 6,
          "round_end": 6,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 7,
          "row_type": "round",
          "code": "rbr-round-7",
          "label": "Round 7 – The Base of Petal",
          "value": "New yarn in a ch-sp from Round 2, ch1 + sc + ch-4 pic + sc, [sc, ch-4 pic, sc in next ch-sp] repeat 15 times, sl st to the first sc, fasten off. (16 picots)",
          "raw_text": "New yarn in a ch-sp from Round 2, ch1 + sc + ch-4 pic + sc, [sc, ch-4 pic, sc in next ch-sp] repeat 15 times, sl st to the first sc, fasten off. (16 picots)",
          "round_start": 7,
          "round_end": 7,
          "is_range": false,
          "stitch_count": 16,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 8,
          "row_type": "round",
          "code": "rbr-round-8",
          "label": "Round 8 – The Petal",
          "value": "New yarn in any pic ch-sp, ch1 + sc + 2dc + ch-2 pic (insert hook into top left vertical loop and FL to complete a sc) + 2dc + hdc + sc + ch1, sl st to next st, ch1; [(sc, hdc, 2dc, ch-2 pic, 2dc, hdc, sc, ch1) in next pic ch-sp, sl st to next st, ch1] repeat 15 times, sl st to the first sc, fasten off. (16 petals)",
          "raw_text": "New yarn in any pic ch-sp, ch1 + sc + 2dc + ch-2 pic (insert hook into top left vertical loop and FL to complete a sc) + 2dc + hdc + sc + ch1, sl st to next st, ch1; [(sc, hdc, 2dc, ch-2 pic, 2dc, hdc, sc, ch1) in next pic ch-sp, sl st to next st, ch1] repeat 15 times, sl st to the first sc, fasten off. (16 petals)",
          "round_start": 8,
          "round_end": 8,
          "is_range": false,
          "stitch_count": 16,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 9,
          "row_type": "round",
          "code": "rbr-round-9",
          "label": "Round 9 – Turning Into Square",
          "value": "New yarn in the right sc of any 2 sc from Round 6, ch4 (counts as tr), ch1, tr, sk2, dc+ch2 in next dec, sk2, sc+ch2, sk2, sl st+ch2, sc+ch1+sc+ch2 in next ch-sp, sk2, sl st+ch2, sk2, sc+ch2, sk2, dc; [tr+ch1 in next sc, tr, sk2, dc+ch2 in next dec, sk2, sc+ch2, sk2, sl st+ch2, sc+ch1+sc+ch2 in next ch-sp, sk2, sl st+ch2, sk2, sc+ch2, sk2, dc] repeat 3 times, sl st to the top of the first ch4.",
          "raw_text": "New yarn in the right sc of any 2 sc from Round 6, ch4 (counts as tr), ch1, tr, sk2, dc+ch2 in next dec, sk2, sc+ch2, sk2, sl st+ch2, sc+ch1+sc+ch2 in next ch-sp, sk2, sl st+ch2, sk2, sc+ch2, sk2, dc; [tr+ch1 in next sc, tr, sk2, dc+ch2 in next dec, sk2, sc+ch2, sk2, sl st+ch2, sc+ch1+sc+ch2 in next ch-sp, sk2, sl st+ch2, sk2, sc+ch2, sk2, dc] repeat 3 times, sl st to the top of the first ch4.",
          "round_start": 9,
          "round_end": 9,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 10,
          "row_type": "round",
          "code": "rbr-round-10",
          "label": "Round 10 – First Border",
          "value": "ch1+sc, sc in each st and ch-1 sp, 2sc in each ch-2 sp, 3sc in each corner sp, sl st to the first sc.",
          "raw_text": "ch1+sc, sc in each st and ch-1 sp, 2sc in each ch-2 sp, 3sc in each corner sp, sl st to the first sc.",
          "round_start": 10,
          "round_end": 10,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 11,
          "row_type": "round",
          "code": "rbr-round-11",
          "label": "Round 11 – Second Border",
          "value": "ch1+sc, sc in each st, 3sc in each corner, sl st to the first sc.",
          "raw_text": "ch1+sc, sc in each st, 3sc in each corner, sl st to the first sc.",
          "round_start": 11,
          "round_end": 11,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 12,
          "row_type": "round",
          "code": "rbr-round-12",
          "label": "Round 12 – Last Border",
          "value": "ch1+sc, sc in each st, 3sc in each corner, sl st to the first sc, fasten off.",
          "raw_text": "ch1+sc, sc in each st, 3sc in each corner, sl st to the first sc, fasten off.",
          "round_start": 12,
          "round_end": 12,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 9,
      "card_type": "important_notes",
      "code": "important-notes",
      "title": "Important Notes",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "info",
          "code": "note-1",
          "label": "Note",
          "value": "💡 Gauge check: the sample uses DK weight with a 3.00 mm hook for a 5.31 × 5.31 inch square. If you're joining these into a blanket with other motifs, make one test square first and adjust your hook up or down a quarter millimeter until the sizes match",
          "raw_text": "💡 Gauge check: the sample uses DK weight with a 3.00 mm hook for a 5.31 × 5.31 inch square. If you're joining these into a blanket with other motifs, make one test square first and adjust your hook up or down a quarter millimeter until the sizes match",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "info",
          "code": "note-2",
          "label": "Note",
          "value": "💡 The standing stitches are the secret to this pattern's clean look — the ch-3 counts as a full double crochet and the ch-1 counts as the first incomplete hdc of a puff. Don't add an extra stitch into the same spot 'just in case,' or your stitch counts will grow every round",
          "raw_text": "💡 The standing stitches are the secret to this pattern's clean look — the ch-3 counts as a full double crochet and the ch-1 counts as the first incomplete hdc of a puff. Don't add an extra stitch into the same spot 'just in case,' or your stitch counts will grow every round",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "info",
          "code": "note-3",
          "label": "Note",
          "value": "💡 Place a stitch marker in the top of the very first puff of Round 2 the moment you complete it. The round ends with a slip stitch into that exact spot, and puff tops are notoriously hard to find after fifteen more puffs",
          "raw_text": "💡 Place a stitch marker in the top of the very first puff of Round 2 the moment you complete it. The round ends with a slip stitch into that exact spot, and puff tops are notoriously hard to find after fifteen more puffs",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "info",
          "code": "note-4",
          "label": "Note",
          "value": "💡 With five colors and fastened-off rounds, wind small working bobbins or keep each ball in its own yarn bowl. Tangled strands are the number-one reason a relaxing flower square turns frustrating",
          "raw_text": "💡 With five colors and fastened-off rounds, wind small working bobbins or keep each ball in its own yarn bowl. Tangled strands are the number-one reason a relaxing flower square turns frustrating",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "info",
          "code": "note-5",
          "label": "Note",
          "value": "💡 When blocking, pin only the outer granny border and steam lightly from a distance. Pressing an iron anywhere near the puff center or petals will flatten the 3D texture you worked so hard to build — let the flower stay proud of the fabric",
          "raw_text": "💡 When blocking, pin only the outer granny border and steam lightly from a distance. Pressing an iron anywhere near the puff center or petals will flatten the 3D texture you worked so hard to build — let the flower stay proud of the fabric",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        },
        {
          "order": 6,
          "row_type": "info",
          "code": "note-6",
          "label": "Note",
          "value": "💡 Pull the magic loop tail snug BEFORE the Round 1 joining slip stitch, not after. Once Round 2's sixteen puffs are anchored on top, the center becomes much harder to tighten cleanly",
          "raw_text": "💡 Pull the magic loop tail snug BEFORE the Round 1 joining slip stitch, not after. Once Round 2's sixteen puffs are anchored on top, the center becomes much harder to tighten cleanly",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": null,
          "answer": null,
          "abbr": null,
          "meaning": null
        }
      ]
    },
    {
      "order": 10,
      "card_type": "faq",
      "code": "faq",
      "title": "FAQ",
      "raw_heading": "",
      "quantity": 1,
      "groups": [],
      "rows": [
        {
          "order": 1,
          "row_type": "faq",
          "code": "faq-1",
          "label": "What size is the finished 3D sunflower granny square?",
          "value": "Worked in DK weight on a 3.00 mm hook, the square comes out at approximately 5.31 × 5.31 inches after all 12 rounds. Your exact size will vary a little with tension, so make a test square before planning a full blanket layout",
          "raw_text": "Worked in DK weight on a 3.00 mm hook, the square comes out at approximately 5.31 × 5.31 inches after all 12 rounds. Your exact size will vary a little with tension, so make a test square before planning a full blanket layout",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "What size is the finished 3D sunflower granny square?",
          "answer": "Worked in DK weight on a 3.00 mm hook, the square comes out at approximately 5.31 × 5.31 inches after all 12 rounds. Your exact size will vary a little with tension, so make a test square before planning a full blanket layout",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 2,
          "row_type": "faq",
          "code": "faq-2",
          "label": "Can I use worsted weight yarn instead of DK?",
          "value": "Absolutely — pair worsted with a 4.0-4.5 mm hook and the same 12 rounds will give you a square around 6.5 inches. Just keep every square in the same yarn and hook so your blanket blocks join evenly",
          "raw_text": "Absolutely — pair worsted with a 4.0-4.5 mm hook and the same 12 rounds will give you a square around 6.5 inches. Just keep every square in the same yarn and hook so your blanket blocks join evenly",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "Can I use worsted weight yarn instead of DK?",
          "answer": "Absolutely — pair worsted with a 4.0-4.5 mm hook and the same 12 rounds will give you a square around 6.5 inches. Just keep every square in the same yarn and hook so your blanket blocks join evenly",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 3,
          "row_type": "faq",
          "code": "faq-3",
          "label": "How many stitches should I have after Round 1?",
          "value": "Sixteen: the starting chain-3 counts as your first double crochet, plus the 15 double crochets worked into the magic loop. That count matters because Round 2 places one 3-hdc puff in each of those 16 stitches",
          "raw_text": "Sixteen: the starting chain-3 counts as your first double crochet, plus the 15 double crochets worked into the magic loop. That count matters because Round 2 places one 3-hdc puff in each of those 16 stitches",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "How many stitches should I have after Round 1?",
          "answer": "Sixteen: the starting chain-3 counts as your first double crochet, plus the 15 double crochets worked into the magic loop. That count matters because Round 2 places one 3-hdc puff in each of those 16 stitches",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 4,
          "row_type": "faq",
          "code": "faq-4",
          "label": "My puff stitch center looks flat — what am I doing wrong?",
          "value": "Usually it's loop height: pull all three hdc loops of each puff up to a consistent, generous height before closing, and don't yank the closing chain tight. Working the following round loosely also matters, since tight stitches behind the puffs can pull the whole center flat",
          "raw_text": "Usually it's loop height: pull all three hdc loops of each puff up to a consistent, generous height before closing, and don't yank the closing chain tight. Working the following round loosely also matters, since tight stitches behind the puffs can pull the whole center flat",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "My puff stitch center looks flat — what am I doing wrong?",
          "answer": "Usually it's loop height: pull all three hdc loops of each puff up to a consistent, generous height before closing, and don't yank the closing chain tight. Working the following round loosely also matters, since tight stitches behind the puffs can pull the whole center flat",
          "abbr": null,
          "meaning": null
        },
        {
          "order": 5,
          "row_type": "faq",
          "code": "faq-5",
          "label": "How many squares do I need for a blanket?",
          "value": "At roughly 5.31 inches per square, an 8 × 10 grid (80 squares) makes a throw around 42 × 53 inches before border. For a baby blanket, a 6 × 7 layout of 42 squares works beautifully — try alternating sunflower squares with plain granny squares in your background color to speed things up",
          "raw_text": "At roughly 5.31 inches per square, an 8 × 10 grid (80 squares) makes a throw around 42 × 53 inches before border. For a baby blanket, a 6 × 7 layout of 42 squares works beautifully — try alternating sunflower squares with plain granny squares in your background color to speed things up",
          "round_start": null,
          "round_end": null,
          "is_range": false,
          "stitch_count": null,
          "question": "How many squares do I need for a blanket?",
          "answer": "At roughly 5.31 inches per square, an 8 × 10 grid (80 squares) makes a throw around 42 × 53 inches before border. For a baby blanket, a 6 × 7 layout of 42 squares works beautifully — try alternating sunflower squares with plain granny squares in your background color to speed things up",
          "abbr": null,
          "meaning": null
        }
      ]
    }
  ],
  "conflicts": [],
  "validation_warnings": [],
  "images": [
    "data/images/3d-sunflower-granny-square-free-pattern-hero-v2.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-2.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-4.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-5.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-6.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-7.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-8.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-9.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-10.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-11.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-12.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-13.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-14.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-15.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-16.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-17.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-18.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-19.webp",
    "data/images/3d-sunflower-granny-square-free-pattern-step-20.webp"
  ],
  "source_url": null,
  "thumbnail_images": [
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-hero-v2.webp",
      "alt": "3D Sunflower Granny Square – Free Crochet Pattern",
      "is_featured": true
    }
  ],
  "gallery_images": [
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-hero-v2.webp",
      "alt": "Finished 3D sunflower granny square with yarn in the sample colors",
      "is_featured": true
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-2.webp",
      "alt": "3D sunflower granny square — original pattern pin",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-4.webp",
      "alt": "3D sunflower granny square — progress photo 1",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-5.webp",
      "alt": "3D sunflower granny square — progress photo 2",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-6.webp",
      "alt": "3D sunflower granny square — progress photo 3",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-7.webp",
      "alt": "3D sunflower granny square — progress photo 4",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-8.webp",
      "alt": "3D sunflower granny square — progress photo 5",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-9.webp",
      "alt": "3D sunflower granny square — progress photo 6",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-10.webp",
      "alt": "3D sunflower granny square — progress photo 7",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-11.webp",
      "alt": "3D sunflower granny square — progress photo 8",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-12.webp",
      "alt": "3D sunflower granny square — progress photo 9",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-13.webp",
      "alt": "3D sunflower granny square — progress photo 10",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-14.webp",
      "alt": "3D sunflower granny square — progress photo 11",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-15.webp",
      "alt": "3D sunflower granny square — progress photo 12",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-16.webp",
      "alt": "3D sunflower granny square — progress photo 13",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-17.webp",
      "alt": "3D sunflower granny square — progress photo 14",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-18.webp",
      "alt": "3D sunflower granny square — progress photo 15",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-19.webp",
      "alt": "3D sunflower granny square — progress photo 16",
      "is_featured": false
    },
    {
      "url": "data/images/3d-sunflower-granny-square-free-pattern-step-20.webp",
      "alt": "3D sunflower granny square — progress photo 17",
      "is_featured": false
    }
  ],
  "date": "2026-07-09",
  "_sanitized_holiday_count": 0
}