diff --git a/_posts/2020-02-03-the-background-webcompat-debacle.markdown b/_posts/2020-02-03-the-background-webcompat-debacle.markdown
new file mode 100644
index 0000000..c8d429b
--- /dev/null
+++ b/_posts/2020-02-03-the-background-webcompat-debacle.markdown
@@ -0,0 +1,162 @@
+---
+layout: post
+title: "The `background` debacle — a case study on web compatibility"
+date: 2020-02-03 12:42:53
+categories: posts
+description: A case study on web compatibility featuring the serialization of the `background` CSS shorthand property. Learn about the CSS standards process and web platform tests (WPTs) along the way.
+---
+
+{: .no_toc}
+#### Table of contents
+1. TOC
+{:toc}
+
+### Introduction
+
+When browsing the [CSS Backgrounds 3 spec](https://www.w3.org/TR/2017/CR-css-backgrounds-3-20171017) a few days ago trying to determine the browser-default `background-color` of the viewport for use in [Kosmonaut](https://github.com/twilco/kosmonaut) (hint: it's system and browser dependent), I stumbled across this note in the changelog:
+
+{:refdef: style="text-align: center;"}
+
+{:refdef}
+
+Clicking into the `final-bg-layer` hyperlink, we discover this revision changed the serialization order of the `background` shorthand property:
+
+{:refdef: style="text-align: center;"}
+
+{:refdef}
+
The # next to bg-layer means "0 or more" non-final background layers
+
+This intrigued me. Why do authors expect the color to be first? Why does it make less sense for the color to be first? How was the decision made to make this change to the specification?
+
+Read on for a glimpse into [how the CSS sausage is made](https://en.wiktionary.org/wiki/how_the_sausage_gets_made), from CSS specification to (often differing) browser implementation.
+
+### First, a detour: how CSS comes to be
+
+Having an understanding of how the CSS standards process works will help in understanding the `background` shorthand awkwardness, so let's go over it.
+
+In summary: CSS syntax is standardized by the [CSSWG (CSS working group)](https://www.w3.org/Style/CSS/members), which is comprised of representatives from browser vendors, universities, various companies, and some independent experts. New CSS syntax passes through six stages:
+
+
+ -
+ Editor's draft (ED)
+
+
+ New syntax goes from idea to "paper" in this phase, during which it is fleshed out internally by the CSSWG. You can find WIP editor drafts here: https://drafts.csswg.org/
+
+
+ -
+ Working draft (WD)
+
+
+ If an ED is accepted internally by the CSSWG, it moves onto this phase for review by the community (technical organizations, W3C members, the public). Changes to the specification continue to be made during this phase. You can find the current working drafts (and more) here: https://www.w3.org/Style/CSS/current-work.en.html
+
+
+ -
+ Last call working draft (LCWD)
+
+
+ The LCWD provides a hard deadline for any final changes to a WD before it moves on to the CR phase.
+
+
+ -
+ Candidate recommendation (CR)
+
+
+ Browsers typically implement the specification in this phase in order to gain implementation experience, thus determining the worthiness of this specification for the final phases. We see this phase mentioned in the above screenshot, meaning the change to background serialization we will dive into shortly was an revision to the original CR.
+
+
+ -
+ Proposed recommendation (PR)
+
+
+ The W3C Advisory Committee decides if the specification should move to the final phase.
+
+
+ -
+ Recommendation (REC)
+
+
+ The specification is considered complete and ready to implement. Only small maintenance work happens at this phase. In reality, most browsers implement specifications at the CR phase, so specifications that make here are often "dead", laden with errors discovered in implementation that are too difficult to fix in these later phases.
+
+
+
+
+The above is largely a summary of [this article](https://css-tricks.com/css-standards-process/), so head there if you're looking for more detail.
+
+### Back to business
+
+Let's get back to our original goal: digging into [this revision](https://www.w3.org/TR/2017/CR-css-backgrounds-3-20171017/#changes-2014-09) in the CSS Backgrounds 3 specification:
+
+> Moved <‘background-color’> component of to the front for serialization because some authors seem to expect this even though it makes less sense?
+
+In the context of CSS specifications, "authors" are the authors of webpages — web developers. You may also see the terminology "implementor" — these are the people implementing the specification, so browser (also known as _user agent_) developers.
+
+Serialization is the process of converting an author-given value into something with semantic value to a user agent[^1]. That's why the order is important — if browsers expect the first value in a list of values to be a background-color but instead get something else, such as a bg-image, the value for the property won't get serialized as the author might expect (if at all).
+
+### Why was this change made?
+
+Development of these specifications [happens on Github](https://github.com/w3c/csswg-drafts), so let's look at [the commit that introduced this revision](https://github.com/w3c/csswg-drafts/commit/02fe11230e02279b495e4c5931be6ed5bab61c5c):
+
+{:refdef: style="text-align: center;"}
+
+{:refdef}
+
+Clicking on the [pictured hyperlink](https://lists.w3.org/Archives/Public/www-style/2015Jan/0406.html) takes us to the meeting notes — search for "background serialization" to find the bit we're interested in.
+
+Feel free to read the full conversation yourself — for the sake of brevity, here is a summary of points:
+
+
+ -
+
+ The CSS 2.1 background spec placed the
background-color first in the value list.
+
+
+ -
+
+ For CSS3, the
background-color was moved to the end of the final background layer because it is painted underneath all the other components of this layer (e.g. the background image and all its modifiers).
+
+
+ -
+
+ Authors complained about this change in serialization, as tutorials had codified CSS 2.1 serialization order.
+
+
+
+
+### But wait, there's more!
+
+This 2015 spec revision was not the end of the confusion surrounding `background` serialization — the topic [came back up again](https://github.com/w3c/csswg-drafts/issues/418) in 2016:
+
+{:refdef: style="text-align: center;"}
+
+{:refdef}
+
+{:refdef: style="text-align: center;"}
+
+{:refdef}
+
+And roughly two years after this, [it was noted](https://github.com/w3c/csswg-drafts/issues/418#issuecomment-380951618) that this inconsistency across browsers still existed.
+
+### Web platform tests: the ultimate equalizer
+
+There is a largely happy ending to a story, and it comes thanks to something called a _web platform test_ (WPT). Quoting the [WPT project readme](https://github.com/web-platform-tests/wpt#the-web-platform-tests-project):
+
+> The web-platform-tests project is a cross-browser test suite for the Web-platform stack. Writing tests in a way that allows them to be run in all browsers gives browser projects confidence that they are shipping software that is compatible with other implementations, and that later implementations will be compatible with their implementations.
+
+Most browsers automatically sync these tests to their own repositories, and use them to help prevent any set of changes from accidentally regressing web-compatibility.
+
+As you might now be guessing, [a WPT was created](https://github.com/web-platform-tests/wpt/pull/10462/files) to account for all the various ways the `background` shorthand property may be ordered in the wild. With this test in place, browsers can more easily align on the acceptance of various different `background` serializations, or at the very least make a lack of compatibility obvious in test failure.
+
+### Summary
+
+In summary, web compatibility is hard. Thank your local browser developer when you next get a chance :)
+
+If you have any questions, comments, or corrections, feel free to [open up an issue](https://github.com/twilco/twilco.github.io/issues) or leave a comment below via [utterances](https://github.com/utterance/utterances).
+
+
+
+---
+
+
+
+[^1]: Reading various other specifications, serialization also seems to refer to the opposite process of converting from a semantic component, such as a color or shape, to a string. See here for a comprehensive list of CSS "serializations" and here for some specific serialization examples. Perhaps my understanding of serialization is flawed.
diff --git a/_sass/_base.scss b/_sass/_base.scss
index d398882..55e0bb6 100644
--- a/_sass/_base.scss
+++ b/_sass/_base.scss
@@ -43,6 +43,10 @@ ol.bold > li > span.non-bold {
font-weight: 300;
}
+.slightly-spaced-list li {
+ margin-bottom: 10px;
+}
+
/**
* Begin factory-default Jekyll stuff
*/
diff --git a/assets/img/background_serialization/background_serialization_commit.png b/assets/img/background_serialization/background_serialization_commit.png
new file mode 100644
index 0000000..c9b4cf2
Binary files /dev/null and b/assets/img/background_serialization/background_serialization_commit.png differ
diff --git a/assets/img/background_serialization/background_shorthand_definition.png b/assets/img/background_serialization/background_shorthand_definition.png
new file mode 100644
index 0000000..c502560
Binary files /dev/null and b/assets/img/background_serialization/background_shorthand_definition.png differ
diff --git a/assets/img/background_serialization/bg_serialization_change.png b/assets/img/background_serialization/bg_serialization_change.png
new file mode 100644
index 0000000..635ba6a
Binary files /dev/null and b/assets/img/background_serialization/bg_serialization_change.png differ
diff --git a/assets/img/background_serialization/cssom_define_ser.png b/assets/img/background_serialization/cssom_define_ser.png
new file mode 100644
index 0000000..b544730
Binary files /dev/null and b/assets/img/background_serialization/cssom_define_ser.png differ
diff --git a/assets/img/background_serialization/serialization_questions.png b/assets/img/background_serialization/serialization_questions.png
new file mode 100644
index 0000000..b4aaca9
Binary files /dev/null and b/assets/img/background_serialization/serialization_questions.png differ