{
  "path": ".capture/card.html",
  "plan": [
    {
      "move": "Subtract",
      "fix_id": 1,
      "fix": "Delete filler badges",
      "change": "Removed the NEW pill and its styles."
    },
    {
      "move": "Subtract",
      "fix_id": 2,
      "fix": "Drop redundant labels",
      "change": "Removed the '02 · PLAN' eyebrow and the all-caps 'INTELLIGENT · AUTONOMOUS · SAFE' subtitle."
    },
    {
      "move": "Subtract",
      "fix_id": 3,
      "fix": "Unitalicize random words",
      "change": "Removed the <em> italics from the headline and dropped Instrument Serif."
    },
    {
      "move": "Subtract",
      "fix_id": 4,
      "fix": "Mono only where needed",
      "change": "Mono now appears only in the file-path block; the eyebrow that used mono is gone."
    },
    {
      "move": "Subtract",
      "fix_id": 13,
      "fix": "Remove embellishments",
      "change": "Removed the decorative → arrows from the action labels and the ← from the path line."
    },
    {
      "move": "Focus",
      "fix_id": 9,
      "fix": "Make headlines specific",
      "change": "Replaced 'Plans first. Acts second.' with 'See the plan before any file changes' and cut the body copy to the edit/reorder/reject facts without powerful/AI-driven/seamlessly/empowering."
    },
    {
      "move": "Focus",
      "fix_id": 6,
      "fix": "Show the actual product",
      "change": "Turned the breadcrumb into a code block showing the real files the plan touches."
    },
    {
      "move": "Focus",
      "fix_id": 10,
      "fix": "Emphasize the CTA",
      "change": "Made 'Get started' the one solid accent button and turned 'Learn more' into a quiet underlined link."
    },
    {
      "move": "Focus",
      "fix_id": 16,
      "fix": "Wrap headlines properly",
      "change": "Gave the heading text-wrap: balance and max-width: 22ch."
    },
    {
      "move": "Systematize",
      "fix_id": 5,
      "fix": "Use a design system",
      "change": "Added tokens for 6 colours, 2 fonts, a 4/8/12/16/24 spacing scale and a radius, and replaced the 8 white alpha values with them."
    },
    {
      "move": "Systematize",
      "fix_id": 11,
      "fix": "Add an accent colour",
      "change": "Replaced the purple-to-cyan gradient with a calm ground and used the brand purple #6E4CF5 only on the primary action."
    },
    {
      "move": "Systematize",
      "fix_id": 8,
      "fix": "Group with spacing",
      "change": "Removed both <hr> dividers and every border, so spacing alone now separates text, the code block and the actions."
    },
    {
      "move": "Systematize",
      "fix_id": 15,
      "fix": "Improve text contrast",
      "change": "Replaced low-opacity white-on-gradient text with solid ink (17:1) and ink-soft (8.6:1); white on the accent is 5.8:1."
    },
    {
      "move": "Systematize",
      "fix_id": 14,
      "fix": "Inner radius = outer - padding",
      "change": "Nested elements no longer try to sit concentric with the card corners; they now take small radii from the spacing scale."
    },
    {
      "move": "Systematize",
      "fix_id": 18,
      "fix": "Use tabular nums",
      "change": "Turned on tabular-nums in the code block, which holds the '3 relevant' count."
    }
  ],
  "diff": "--- a/card.html\n+++ b/card.html\n@@ -5,37 +5,43 @@\n <title>Feature card, default AI output</title>\n <!-- The slop card from lesson 3 of docs/unslop-school.html, without the course's numbered callout dots. -->\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n-<link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Schibsted+Grotesk:wght@500;700;800&family=JetBrains+Mono:wght@400;500&family=Instrument+Serif:ital@0;1&display=swap\">\n+<link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Schibsted+Grotesk:wght@500;700&family=JetBrains+Mono:wght@400&display=swap\">\n <style>\n :root{\n+  /* colour */\n+  --ink:#16141F;        /* text, 17:1 on --paper */\n+  --ink-soft:#4A4658;   /* secondary text, 8.6:1 on --paper */\n+  --paper:#F6F5FA;      /* ground */\n+  --surface:#FFFFFF;    /* card */\n+  --accent:#6E4CF5;     /* brand purple; white on it is 5.8:1 */\n+  --code-bg:#ECEAF4;\n+  /* type */\n   --display:\"Schibsted Grotesk\", \"Helvetica Neue\", Arial, sans-serif;\n   --mono:\"JetBrains Mono\", ui-monospace, Menlo, Consolas, monospace;\n+  /* spacing */\n+  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px;\n+  /* radius */\n+  --r-outer:20px;\n }\n-.slop{background:linear-gradient(135deg,#6E4CF5 0%,#3B82F6 55%,#22D3EE 100%);padding:22px;color:#fff;position:relative}\n-.slop .box{border:1px solid rgba(255,255,255,.28);background:rgba(255,255,255,.08);border-radius:22px;padding:22px}\n-.slop .eb{font:500 11px/1 var(--mono);letter-spacing:.14em;color:rgba(255,255,255,.7)}\n-.slop .pill{display:inline-block;font:600 10px/1 var(--display);letter-spacing:.08em;padding:5px 9px;border-radius:999px;background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.3);margin-left:8px;vertical-align:middle}\n-.slop h5{font:400 30px/1.1 \"Instrument Serif\",Georgia,serif;letter-spacing:-.03em;margin:14px 0 8px}\n-.slop h5 em{font-style:italic}\n-.slop .sub{font:600 11px/1.4 var(--display);letter-spacing:.12em;opacity:.75}\n-.slop hr{border:0;border-top:1px solid rgba(255,255,255,.25);margin:14px 0}\n-.slop .crumb{font:400 12px/1.5 var(--mono);opacity:.8}\n-.slop .copy{font:400 13px/1.5 var(--display);opacity:.72;margin-top:10px}\n-.slop .ctas{display:flex;gap:8px;margin-top:14px}\n-.slop .ctas span{font:600 12px var(--display);padding:8px 12px;border-radius:12px;border:1px solid rgba(255,255,255,.35);background:rgba(255,255,255,.12)}\n+.slop{background:var(--paper);padding:var(--s5);color:var(--ink);font-family:var(--display)}\n+.slop .box{background:var(--surface);border-radius:var(--r-outer);padding:var(--s5);max-width:44ch}\n+.slop h5{font:700 26px/1.15 var(--display);letter-spacing:-.02em;margin:0;text-wrap:balance;max-width:22ch}\n+.slop .copy{font:400 15px/1.5 var(--display);color:var(--ink-soft);margin:var(--s2) 0 0}\n+.slop .crumb{font:400 13px/1.5 var(--mono);font-variant-numeric:tabular-nums;background:var(--code-bg);color:var(--ink);\n+  /* not corner-hugging (card padding exceeds outer radius), so a small radius from the same scale */\n+  border-radius:var(--s1);padding:var(--s3) var(--s4);margin:var(--s4) 0 0;white-space:pre-wrap}\n+.slop .ctas{display:flex;align-items:center;gap:var(--s4);margin-top:var(--s5)}\n+.slop .ctas .cta{font:700 14px/1 var(--display);padding:var(--s3) var(--s4);border-radius:var(--s2);background:var(--accent);color:#fff;cursor:pointer}\n+.slop .ctas .sec{font:500 14px/1 var(--display);color:var(--ink-soft);text-decoration:underline;text-underline-offset:3px;cursor:pointer}\n </style>\n </head>\n <body>\n <div class=\"slop\" id=\"cardSlop\">\n   <div class=\"box\">\n-    <div class=\"eb\">02 · PLAN<span class=\"pill\">NEW</span></div>\n-    <h5>Plans <em>first</em>. Acts <em>second</em>.</h5>\n-    <div class=\"sub\">INTELLIGENT · AUTONOMOUS · SAFE</div>\n-    <hr>\n-    <div class=\"crumb\">src/auth/refresh.py → tests/auth/ ← 3 relevant</div>\n-    <p class=\"copy\">Our powerful AI-driven planning engine lets you seamlessly see the plan before any changes are made, empowering you to edit, reorder, or reject it with confidence.</p>\n-    <hr>\n-    <div class=\"ctas\"><span>Learn more →</span><span>Get started →</span></div>\n+    <h5>See the plan before any file changes</h5>\n+    <p class=\"copy\">Edit it, reorder it or reject it with confidence.</p>\n+    <pre class=\"crumb\">src/auth/refresh.py → tests/auth/  (3 relevant)</pre>\n+    <div class=\"ctas\"><span class=\"cta\">Get started</span><span class=\"sec\">Learn more</span></div>\n   </div>\n </div>\n </body>\n",
  "before": {
    "source": ".capture/card.html",
    "score": 14,
    "verdict": "Pure default output",
    "hits": [
      {
        "indicator": "Instrument Serif",
        "layer": "Type",
        "evidence": [
          {
            "location": ".slop h5 (line 18)",
            "detail": "font-family: \"Instrument Serif\",Georgia,serif"
          },
          {
            "location": "Google Fonts stylesheet",
            "detail": "loads Instrument Serif: https://fonts.googleapis.com/css2?family=Schibsted+Grotesk:wght@500;700;800&family=JetBrains+Mono:wght@400;500&family=Instrument+Serif:ital@0;1&display=swap"
          }
        ],
        "fix_ids": [
          5
        ]
      },
      {
        "indicator": "Excessive italics",
        "layer": "Type",
        "evidence": [
          {
            "location": "<h5> (line 32)",
            "detail": "\"Plans first. Acts second.\" with \"first second\" in italics"
          }
        ],
        "fix_ids": [
          3
        ]
      },
      {
        "indicator": "Excessive mono fonts",
        "layer": "Type",
        "evidence": [
          {
            "location": ".slop .eb (line 16)",
            "detail": "font-family: \"JetBrains Mono\", ui-monospace, Menlo, Consolas, monospace at 11px"
          },
          {
            "location": ".slop .crumb (line 22)",
            "detail": "font-family: \"JetBrains Mono\", ui-monospace, Menlo, Consolas, monospace at 12px"
          }
        ],
        "fix_ids": [
          4
        ]
      },
      {
        "indicator": "ALL CAPS subtitles",
        "layer": "Type",
        "evidence": [
          {
            "location": "<div class=\"sub\"> (line 33)",
            "detail": "\"INTELLIGENT · AUTONOMOUS · SAFE\""
          }
        ],
        "fix_ids": [
          2
        ]
      },
      {
        "indicator": "Periods in titles",
        "layer": "Type",
        "evidence": [
          {
            "location": "<h5> (line 32)",
            "detail": "\"Plans first. Acts second.\""
          }
        ],
        "fix_ids": [
          9,
          16
        ]
      },
      {
        "indicator": "Gradient backgrounds",
        "layer": "Surface",
        "evidence": [
          {
            "location": ".slop (line 14)",
            "detail": "background: linear-gradient(135deg,#6E4CF5 0%,#3B82F6 55%,#22D3EE 100%) (purple to blue)"
          }
        ],
        "fix_ids": [
          5,
          11
        ]
      },
      {
        "indicator": "Color shades and opacities",
        "layer": "Surface",
        "evidence": [
          {
            "location": ".slop .box (line 15)",
            "detail": "border: rgba(255,255,255,.28) (one of 8 alphas of rgb(255, 255, 255))"
          },
          {
            "location": ".slop .box (line 15)",
            "detail": "background: rgba(255,255,255,.08) (one of 8 alphas of rgb(255, 255, 255))"
          },
          {
            "location": ".slop .eb (line 16)",
            "detail": "color: rgba(255,255,255,.7) (one of 8 alphas of rgb(255, 255, 255))"
          },
          {
            "location": ".slop .pill (line 17)",
            "detail": "background: rgba(255,255,255,.18) (one of 8 alphas of rgb(255, 255, 255))"
          },
          {
            "location": ".slop .pill (line 17)",
            "detail": "border: rgba(255,255,255,.3) (one of 8 alphas of rgb(255, 255, 255))"
          },
          {
            "location": ".slop hr (line 21)",
            "detail": "border-top: rgba(255,255,255,.25) (one of 8 alphas of rgb(255, 255, 255))"
          },
          {
            "location": ".slop .ctas span (line 25)",
            "detail": "border: rgba(255,255,255,.35) (one of 8 alphas of rgb(255, 255, 255))"
          },
          {
            "location": ".slop .ctas span (line 25)",
            "detail": "background: rgba(255,255,255,.12) (one of 8 alphas of rgb(255, 255, 255))"
          }
        ],
        "fix_ids": [
          5,
          11,
          15
        ]
      },
      {
        "indicator": "Containers with borders",
        "layer": "Surface",
        "evidence": [
          {
            "location": ".slop .box (line 15)",
            "detail": "border: 1px solid rgba(255,255,255,.28)"
          },
          {
            "location": ".slop .pill (line 17)",
            "detail": "border: 1px solid rgba(255,255,255,.3)"
          },
          {
            "location": ".slop .ctas span (line 25)",
            "detail": "border: 1px solid rgba(255,255,255,.35)"
          },
          {
            "location": "<span class=\"pill\"> (line 31)",
            "detail": "bordered box inside bordered <div class=\"box\"> (line 30)"
          },
          {
            "location": "<span> (line 38)",
            "detail": "bordered box inside bordered <div class=\"box\"> (line 30)"
          }
        ],
        "fix_ids": [
          8
        ]
      },
      {
        "indicator": "Overusing dividers",
        "layer": "Surface",
        "evidence": [
          {
            "location": "<hr> (line 34)",
            "detail": "<hr>"
          },
          {
            "location": "<hr> (line 37)",
            "detail": "<hr>"
          }
        ],
        "fix_ids": [
          8
        ]
      },
      {
        "indicator": "Tags and pills",
        "layer": "Structure",
        "evidence": [
          {
            "location": "<span class=\"pill\"> (line 31)",
            "detail": "\"NEW\""
          }
        ],
        "fix_ids": [
          1
        ]
      },
      {
        "indicator": "Eyebrows",
        "layer": "Structure",
        "evidence": [
          {
            "location": "<div class=\"eb\"> (line 31)",
            "detail": "\"02 · PLANNEW\" above \"Plans first. Acts second.\""
          }
        ],
        "fix_ids": [
          2
        ]
      },
      {
        "indicator": "Section numbering",
        "layer": "Structure",
        "evidence": [
          {
            "location": "<div class=\"eb\"> (line 31)",
            "detail": "\"02 · PLAN\""
          }
        ],
        "fix_ids": [
          2
        ]
      },
      {
        "indicator": "Code breadcrumbs",
        "layer": "Structure",
        "evidence": [
          {
            "location": "<div class=\"crumb\"> (line 35)",
            "detail": "\"src/auth/refresh.py → tests/auth/ ← 3 relevant\""
          }
        ],
        "fix_ids": [
          4,
          6
        ]
      },
      {
        "indicator": "Verbose, redundant text",
        "layer": "Content",
        "evidence": [
          {
            "location": "<p class=\"copy\"> (line 36)",
            "detail": "\"powerful\" in \"Our powerful AI-driven planning engine lets you seamlessly see the plan before any changes are ma...\""
          },
          {
            "location": "<p class=\"copy\"> (line 36)",
            "detail": "\"AI-driven\" in \"Our powerful AI-driven planning engine lets you seamlessly see the plan before any changes are ma...\""
          },
          {
            "location": "<p class=\"copy\"> (line 36)",
            "detail": "\"seamlessly\" in \"Our powerful AI-driven planning engine lets you seamlessly see the plan before any changes are ma...\""
          },
          {
            "location": "<p class=\"copy\"> (line 36)",
            "detail": "\"empowering\" in \"Our powerful AI-driven planning engine lets you seamlessly see the plan before any changes are ma...\""
          }
        ],
        "fix_ids": [
          9,
          2
        ]
      }
    ],
    "fixes_first": [
      "Delete filler badges",
      "Drop redundant labels",
      "Unitalicize random words",
      "Mono only where needed",
      "Make headlines specific",
      "Show the actual product",
      "Group with spacing",
      "Use a design system",
      "Add an accent colour",
      "Improve text contrast",
      "Wrap headlines properly"
    ]
  },
  "after": {
    "source": "inline",
    "score": 0,
    "verdict": "No defaults showing",
    "hits": [],
    "fixes_first": []
  },
  "written": true,
  "notes": [
    "The page had no <a> or href values. Both actions were plain <span>s and still are, so 'Get started' and 'Learn more' need real links before they work.",
    "I rewrote the copy as 'Edit it, reorder it or reject it with confidence.', built only from the original sentence. Check the headline 'See the plan before any file changes' against the brand voice.",
    "The accent is the brand purple #6E4CF5. I dropped the blue and cyan from the gradient. Bring one back if they are required brand colours.",
    "The page has no list or data feed, so I designed no loading, empty or error states and added no motion.",
    "The page has no list or data feed, so I designed no loading, empty or error states. It has no motion either, and I added none."
  ]
}
