diff --git a/css-mixins-1/Overview.bs b/css-mixins-1/Overview.bs
index b9619bad714b..7d70fbb2484c 100644
--- a/css-mixins-1/Overview.bs
+++ b/css-mixins-1/Overview.bs
@@ -1199,7 +1199,7 @@ The syntax of a ''@contents'' at-rule is:
That is, it is either an empty statement ended immediately by a semicolon,
-or a block treated as a [=nested declarations rule=].
+or a fallback block treated as a [=nested declarations rule=].
The empty statement form behaves identically to passing an empty block.
* If the [=mixin=] did not declare a ''@contents'' parameter,
@@ -1211,7 +1211,7 @@ The empty statement form behaves identically to passing an empty block.
the ''@contents'' is replaced with the [=contents block=],
treating it as a [=nested declarations rule=].
* Otherwise, if the ''@apply'' rule did not pass a [=contents block=],
- the ''@contents'' rule is replaced with its own <
@function --bar() {
--x: 42;
@@ -1728,6 +1728,258 @@ The {{CSSFunctionDeclarations}} rule, like {{CSSNestedDeclarations}},
[=serialize a CSS rule|serializes=] as if its [=CSS declaration block|declaration block=]
had been [=serialize a CSS declaration block|serialized=] directly.
+The {{CSSMixinRule}} Interface {#the-mixin-interface}
+-----------------------------------------------------
+
+The {{CSSMixinRule}} interface represents a ''@mixin'' rule.
+
+
+[Exposed=Window]
+interface CSSMixinRule : CSSGroupingRule {
+ readonly attribute CSSOMString name;
+ sequence<FunctionParameter> getParameters();
+ readonly attribute boolean contents;
+};
+
+
+
+
+
+While declarations may be specified directly within a ''@mixin'' rule,
+they are not represented as such in the CSSOM.
+Instead, consecutive segments of declarations
+appear as if wrapped in {{CSSNestedDeclarations}} rules.
+"@mixin" followed by a single SPACE (U+0020).
+ 2. The result of performing serialize an identifier
+ on the name of the [=mixin=],
+ followed by a single LEFT PARENTHESIS (U+0028).
+ 3. The result of [=serialize a function parameter=]
+ on each of the [=mixin's=] [=function parameter|parameters=],
+ all joined by ", "
+ (COMMA U+002C, followed by a single SPACE U+0020).
+ 4. A single RIGHT PARENTHESIS (U+0029).
+ 5. A single LEFT CURLY BRACKET (U+007B),
+ followed by a SPACE (U+0020).
+ 6. The result of performing [=serialize a CSS rule=]
+ on each rule in cssRules,
+ filtering out empty strings,
+ all joined by a single SPACE (U+0020).
+ 7. A single SPACE (U+0020),
+ followed by a single RIGHT CURLY BRACKET (U+007D).
+
+[Exposed=Window]
+interface CSSApplyBlockRule : CSSGroupingRule {
+ readonly attribute CSSOMString name;
+ sequence<CSSOMString> getArguments();
+};
+
+
+
+
+
+The [=CSSRule/child CSS rules=] of a {{CSSApplyBlockRule}}
+represent the [=contents block=]
+of the ''@apply'' rule.
+
+As for {{CSSMixinRule}},
+consecutive segments of declarations
+specified directly within the [=contents block=] of an ''@apply'' rule
+are represented as {{CSSNestedDeclarations}}.
+
+"@apply" followed by a single SPACE (U+0020).
+ 2. The result of performing [=serialize an @apply prelude=]
+ on the ''@apply'' rule.
+ 3. A single SPACE (U+0020).
+ 4. A single LEFT CURLY BRACKET (U+007B),
+ followed by a SPACE (U+0020).
+ 5. The result of performing [=serialize a CSS rule=]
+ on each rule in cssRules,
+ filtering out empty strings,
+ all joined by a single SPACE (U+0020).
+ 6. A single SPACE (U+0020),
+ followed by a RIGHT CURLY BRACKET (U+007D).
+", ".
+ * A single RIGHT PARENTHESIS (U+0029).
+
+[Exposed=Window]
+interface CSSApplyStatementRule : CSSRule {
+ readonly attribute CSSOMString name;
+ sequence<CSSOMString> getArguments();
+};
+
+
+
+
+
+"@apply" followed by a single SPACE (U+0020).
+ 2. The result of performing [=serialize an @apply prelude=]
+ on the ''@apply'' rule.
+ 3. A single SEMICOLON (U+003B).
+
+[Exposed=Window]
+interface CSSContentsBlockRule : CSSGroupingRule { };
+
+
+The [=CSSRule/child CSS rules=] of a {{CSSContentsBlockRule}}
+represent the [=fallback block=]
+of the ''@contents'' rule.
+
+As for {{CSSMixinRule}} and {{CSSApplyBlockRule}},
+consecutive segments of declarations
+specified directly within the [=fallback block=] of a ''@contents'' rule
+are represented as {{CSSNestedDeclarations}}.
+
+"@contents" followed by a single SPACE (U+0020).
+ 2. A single LEFT CURLY BRACKET (U+007B),
+ followed by a SPACE (U+0020).
+ 3. The result of performing [=serialize a CSS rule=]
+ on each rule in cssRules,
+ filtering out empty strings,
+ all joined by a single SPACE (U+0020).
+ 4. A single SPACE (U+0020),
+ followed by a RIGHT CURLY BRACKET (U+007D).
+
+[Exposed=Window]
+interface CSSContentsStatementRule : CSSRule { };
+
+
+"@contents",
+followed by a single SEMICOLON (U+003B).
+