diff --git a/CHANGELOG.md b/CHANGELOG.md
index e809f5e..39c7d9a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@
   `Node`.
 - Deprecated `NodeGlue.append` in favor of `Node.appendChild`.
 - Deprecated `NodeGlue.clone` in favor of `Node.cloneNode`.
+- Updated to `@webref/css` `6.10.0`.
 
 ## 0.4.0
 
diff --git a/README.md b/README.md
index 7463225..31f586b 100644
--- a/README.md
+++ b/README.md
@@ -33,9 +33,12 @@
 
 ## Web IDL version
 
+Based on:
+
 <!-- START updated by tool/update_bindings.dart. Do not modify by hand -->
-Based on [`@webref/idl 3.39.1`](https://www.npmjs.com/package/@webref/idl/v/3.39.1).
+- @webref/idl [3.39.1](https://www.npmjs.com/package/@webref/idl/v/3.39.1)
+- @webref/css [6.10.0](https://www.npmjs.com/package/@webref/css/v/6.10.0)
 <!-- END updated by tool/update_bindings.dart. Do not modify by hand -->
 
 For instructions on re-generating the DOM bindings, see
-(bindings_generator/README.md)[bindings_generator/README.md].
+[bindings_generator/README.md](bindings_generator/README.md).
diff --git a/bindings_generator/generate_bindings.dart b/bindings_generator/generate_bindings.dart
index aaf8e2d..070c6ec 100644
--- a/bindings_generator/generate_bindings.dart
+++ b/bindings_generator/generate_bindings.dart
@@ -20,7 +20,7 @@
     if (properties != null) {
       for (var j = 0; j < properties.length; j++) {
         final property = properties[j] as CSSEntry;
-        // There are thre cases for [styleDeclaration]:
+        // There are three cases for [styleDeclaration]:
         //   1) Length == 1, a single word CSS property.
         //   2) Length == 2, a kebab case property + a camel case property.
         //   3) Length == 3, webkit CSS properties.
diff --git a/bindings_generator/package-lock.json b/bindings_generator/package-lock.json
index 79b8f33..24089c0 100644
--- a/bindings_generator/package-lock.json
+++ b/bindings_generator/package-lock.json
@@ -9,16 +9,18 @@
       "version": "0.0.1",
       "license": "BSD 3",
       "dependencies": {
-        "@webref/css": "^6.5.6",
-        "@webref/idl": "^3.23.0",
+        "@webref/css": "^6.10.0",
+        "@webref/idl": "^3.23.0"
+      },
+      "devDependencies": {
         "web-specs": "^2.74.1",
         "webidl2": "^24.2.2"
       }
     },
     "node_modules/@webref/css": {
-      "version": "6.8.1",
-      "resolved": "https://registry.npmjs.org/@webref/css/-/css-6.8.1.tgz",
-      "integrity": "sha512-+GjGSdigPjTm82suc5Pr0x8L7OIGCe0WWFbMWh8P9goQcPDNzfaDKSPpzqgfmiP4pQlOQbSSohMlAGv8rKjwsA==",
+      "version": "6.10.0",
+      "resolved": "https://registry.npmjs.org/@webref/css/-/css-6.10.0.tgz",
+      "integrity": "sha512-IOx3La7paGHcVK6z275G4Mare6sP3SloX3KNRF0D6SWytJa8ZW+ckB5evM9ke0FpOtd6MEIXdjf7OqVN9BQfvA==",
       "peerDependencies": {
         "css-tree": "^2.3.1"
       }
@@ -62,7 +64,8 @@
     "node_modules/web-specs": {
       "version": "2.74.1",
       "resolved": "https://registry.npmjs.org/web-specs/-/web-specs-2.74.1.tgz",
-      "integrity": "sha512-OrXix5LVFhnJ1uvj00jy1vAOkUNzoVWKF7IqkTgqTI9CmYIdLxpknSvE/iqOOHUVNX90izUUj8lJVNjCdnWCuA=="
+      "integrity": "sha512-OrXix5LVFhnJ1uvj00jy1vAOkUNzoVWKF7IqkTgqTI9CmYIdLxpknSvE/iqOOHUVNX90izUUj8lJVNjCdnWCuA==",
+      "dev": true
     },
     "node_modules/webidl2": {
       "version": "24.4.1",
diff --git a/bindings_generator/package.json b/bindings_generator/package.json
index 3c2cbec..9b9b62d 100644
--- a/bindings_generator/package.json
+++ b/bindings_generator/package.json
@@ -9,8 +9,10 @@
   "author": "Dart project authors",
   "license": "BSD 3",
   "dependencies": {
-    "@webref/css": "^6.5.6",
-    "@webref/idl": "^3.23.0",
+    "@webref/css": "^6.10.0",
+    "@webref/idl": "^3.23.0"
+  },
+  "devDependencies": {
     "web-specs": "^2.74.1",
     "webidl2": "^24.2.2"
   }
diff --git a/lib/src/dom/cssom.dart b/lib/src/dom/cssom.dart
index b8c5262..407d96e 100644
--- a/lib/src/dom/cssom.dart
+++ b/lib/src/dom/cssom.dart
@@ -221,8 +221,6 @@
   external String get alignItems;
   external set alignSelf(String value);
   external String get alignSelf;
-  external set alignTracks(String value);
-  external String get alignTracks;
   external set alignmentBaseline(String value);
   external String get alignmentBaseline;
   external set all(String value);
@@ -295,6 +293,8 @@
   external String get backgroundRepeat;
   external set backgroundSize(String value);
   external String get backgroundSize;
+  external set backgroundTbd(String value);
+  external String get backgroundTbd;
   external set baselineShift(String value);
   external String get baselineShift;
   external set baselineSource(String value);
@@ -603,6 +603,8 @@
   external String get dominantBaseline;
   external set emptyCells(String value);
   external String get emptyCells;
+  external set fieldSizing(String value);
+  external String get fieldSizing;
   external set fill(String value);
   external String get fill;
   external set fillBreak(String value);
@@ -789,6 +791,8 @@
   external String get inputSecurity;
   external set inset(String value);
   external String get inset;
+  external set insetArea(String value);
+  external String get insetArea;
   external set insetBlock(String value);
   external String get insetBlock;
   external set insetBlockEnd(String value);
@@ -809,8 +813,6 @@
   external String get justifyItems;
   external set justifySelf(String value);
   external String get justifySelf;
-  external set justifyTracks(String value);
-  external String get justifyTracks;
   external set layoutOrder(String value);
   external String get layoutOrder;
   external set left(String value);
diff --git a/tool/update_bindings.dart b/tool/update_bindings.dart
index 29792ee..3e480fa 100644
--- a/tool/update_bindings.dart
+++ b/tool/update_bindings.dart
@@ -98,26 +98,18 @@
 
   final sourceContent = readmeFile.readAsStringSync();
 
-  final replaceRegexp = RegExp(
-    '''
-${RegExp.escape(_startComment)}
-.*
-${RegExp.escape(_endComment)}
-''',
-    multiLine: true,
-  );
-
-  final idlVersion = _webRefIdlVersion();
-
-  final idlReference = 'Based on [`$_webRefIdl $idlVersion`]'
-      '(https://www.npmjs.com/package/$_webRefIdl/v/$idlVersion).';
-
-  final newContent = sourceContent.replaceFirst(replaceRegexp, '''
+  final idlVersion = _packageLockVersion(_webRefIdl);
+  final cssVersion = _packageLockVersion(_webRefCss);
+  final versions = '''
 $_startComment
-$idlReference
-$_endComment
-''');
+- $_webRefIdl [$idlVersion](https://www.npmjs.com/package/$_webRefIdl/v/$idlVersion)
+- $_webRefCss [$cssVersion](https://www.npmjs.com/package/$_webRefCss/v/$cssVersion)
+''';
 
+  final newContent =
+      sourceContent.substring(0, sourceContent.indexOf(_startComment)) +
+          versions +
+          sourceContent.substring(sourceContent.indexOf(_endComment));
   if (newContent == sourceContent) {
     print(ansi.styleBold.wrap('No update for readme.'));
   } else {
@@ -126,21 +118,21 @@
   }
 }
 
-String _webRefIdlVersion() {
+String _packageLockVersion(String package) {
   final packageLockData = jsonDecode(
     File(p.join(_bindingsGeneratorPath, 'package-lock.json'))
         .readAsStringSync(),
   ) as Map<String, dynamic>;
 
   final packages = packageLockData['packages'] as Map<String, dynamic>;
-  final webRefIdl =
-      packages['node_modules/$_webRefIdl'] as Map<String, dynamic>;
+  final webRefIdl = packages['node_modules/$package'] as Map<String, dynamic>;
   return webRefIdl['version'] as String;
 }
 
 const _bindingsGeneratorPath = 'bindings_generator';
 
 const _webRefIdl = '@webref/idl';
+const _webRefCss = '@webref/css';
 
 const _thisScript = 'tool/update_bindings.dart';
 
