diff --git a/website/public/blog/version-3.0/index.ejs.html b/website/public/blog/version-3.0/index.ejs.html
new file mode 100644
index 0000000000..db018c833c
--- /dev/null
+++ b/website/public/blog/version-3.0/index.ejs.html
@@ -0,0 +1,250 @@
+
+
+
+
+
+
+
+ <%- await include("../../common-head.ejs.html") %> <%- await
+ include("../blog-head.ejs.html") %>
+
+
+
+ <% function callsToAction() { %>
+
+ <% } %>
+
+ <%- await include("../../common-nav.ejs.html") %>
+
+
+ <%= meta.title %>
+
+
+ @@@
+
+ <%- callsToAction() %>
+
+
+ How does quick-lint-js compare to ESLint? See for yourself:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ What should we work on next?
+ Suggest features for quick-lint-js.
+
+
+
+ quick-lint-js version 3.0 has over @@@ patches since version 2.0.
+ @@@ people
+ made quick-lint-js possible.
+
+
+ <%- callsToAction() %>
+
+
+ Written by strager, lead
+ developer of quick-lint-js.
+
+
+
+
+
+
+
+
diff --git a/website/public/main.css b/website/public/main.css
index bbd640b303..f808fed96a 100755
--- a/website/public/main.css
+++ b/website/public/main.css
@@ -392,11 +392,18 @@ pre mark,
text-decoration-skip-ink: none;
text-decoration-style: wavy;
}
+pre mark:empty {
+ background: none;
+ display: inline-block;
+ height: 1em;
+ margin-left: -2px; /* (width of SVG) / 2 */
+ position: absolute;
+ width: 6px;
+}
pre mark:empty::before {
color: red;
content: url("demo/carat.svg") / "^";
content: url("demo/carat.svg");
- margin-left: -2px; /* (width of SVG) / 2 */
margin-top: 4px; /* height of SVG */
position: absolute;
}