Index: src/wp-content/themes/twentyseventeen/assets/css/blocks.css
===================================================================
--- src/wp-content/themes/twentyseventeen/assets/css/blocks.css	(revision 44382)
+++ src/wp-content/themes/twentyseventeen/assets/css/blocks.css	(working copy)
@@ -6,10 +6,12 @@
 /*--------------------------------------------------------------
 >>> TABLE OF CONTENTS:
 ----------------------------------------------------------------
-1.0 Blocks - Common Blocks
-2.0 Blocks - Formatting
-3.0 Blocks - Layout Elements
-4.0 Blocks - Widgets
+1.0 General Block Styles
+2.0 Blocks - Common Blocks
+3.0 Blocks - Formatting
+4.0 Blocks - Layout Elements
+5.0 Blocks - Widgets
+6.0 Blocks - Colors
 --------------------------------------------------------------*/
 
 /*--------------------------------------------------------------
@@ -187,10 +189,8 @@
 /* Buttons */
 
 .wp-block-button .wp-block-button__link {
-	background-color: #222;
 	-webkit-box-shadow: none;
 	box-shadow: none;
-	color: #fff;
 	display: inline-block;
 	font-size: 14px;
 	font-size: 0.875rem;
@@ -203,13 +203,66 @@
 	white-space: nowrap;
 }
 
-.wp-block-button .wp-block-button__link:hover,
-.wp-block-button .wp-block-button__link:focus {
+.entry-content .wp-block-button__link {
+	background-color: #222;
+	color: #fff;
+}
+
+.entry-content .is-style-outline .wp-block-button__link:not(.has-background) {
+	background-color: transparent;
+}
+
+.entry-content .is-style-outline .wp-block-button__link:not(.has-text-color) {
+	color: #222;
+}
+
+.colors-dark .wp-block-button__link {
+	background-color: #fff;
+	color: #000;
+}
+
+.entry-content .wp-block-button__link:hover,
+.entry-content .wp-block-button__link:focus,
+.entry-content .is-style-outline .wp-block-button__link:not(.has-background):hover,
+.entry-content .is-style-outline .wp-block-button__link:not(.has-background):focus {
 	background-color: #767676;
 	-webkit-box-shadow: none;
 	box-shadow: none;
+	color: #fff;
 }
 
+.colors-dark .entry-content .wp-block-button__link:hover,
+.colors-dark .entry-content .wp-block-button__link:focus,
+.colors-dark .entry-content .is-style-outline .wp-block-button__link:not(.has-background):hover,
+.colors-dark .entry-content .is-style-outline .wp-block-button__link:not(.has-background):focus {
+	background-color: #bbb;
+	color: #000;
+}
+
+.colors-dark .entry-content .is-style-outline .wp-block-button__link:not(.has-text-color) {
+	color: #fff;
+}
+
+.colors-dark .entry-content .is-style-outline .wp-block-button__link:not(.has-text-color):hover,
+.colors-dark .entry-content .is-style-outline .wp-block-button__link:not(.has-text-color):focus {
+	color: #222;
+}
+
+.colors-custom .entry-content .wp-block-button__link,
+.colors-custom .entry-content .wp-block-button__link:hover,
+.colors-custom .entry-content .wp-block-button__link:focus,
+.colors-dark .entry-content .wp-block-button__link,
+.colors-dark .entry-content .wp-block-button__link:hover,
+.colors-dark .entry-content .wp-block-button__link:focus {
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.colors-custom .entry-content .wp-block-button__link:hover,
+.colors-custom .entry-content .wp-block-button__link:focus {
+	color: #fff;
+}
+
 /* Separator */
 
 .wp-block-separator {
@@ -293,3 +346,106 @@
 	font-size: 14px;
 	font-size: 0.875rem;
 }
+
+/*--------------------------------------------------------------
+6.0 Blocks - Colors
+--------------------------------------------------------------*/
+
+.entry-content .has-pale-pink-color {
+	color: #f78da7;
+}
+
+.entry-content .has-pale-pink-background-color,
+.wp-block-button.is-style-outline .has-pale-pink-background-color:link {
+	background-color: #f78da7;
+}
+
+.entry-content .has-vivid-red-color {
+	color: #cf2e2e;
+}
+
+.entry-content .has-vivid-red-background-color,
+.wp-block-button.is-style-outline .has-vivid-red-background-color:link {
+	background-color: #cf2e2e;
+}
+
+.entry-content .has-luminous-vivid-orange-color {
+	color: #ff6900;
+}
+
+.entry-content .has-luminous-vivid-orange-background-color,
+.wp-block-button.is-style-outline .has-luminous-vivid-orange-background-color:link {
+	background-color: #ff6900;
+}
+
+.entry-content .has-luminous-vivid-amber-color {
+	color: #fcb900;
+}
+
+.entry-content .has-luminous-vivid-amber-background-color,
+.wp-block-button.is-style-outline .has-luminous-vivid-amber-background-color:link {
+	background-color: #fcb900;
+}
+
+.entry-content .has-light-green-cyan-color {
+	color: #7bdcb5;
+}
+
+.entry-content .has-light-green-cyan-background-color,
+.wp-block-button.is-style-outline .has-light-green-cyan-background-color:link {
+	background-color: #7bdcb5;
+}
+
+.entry-content .has-vivid-green-cyan-color {
+	color: #00d084;
+}
+
+.entry-content .has-vivid-green-cyan-background-color,
+.wp-block-button.is-style-outline .has-vivid-green-cyan-background-color:link {
+	background-color: #00d084;
+}
+
+.entry-content .has-pale-cyan-blue-color {
+	color: #8ed1fc;
+}
+
+.entry-content .has-pale-cyan-blue-background-color,
+.wp-block-button.is-style-outline .has-pale-cyan-blue-background-color:link {
+	background-color: #8ed1fc;
+}
+
+.entry-content .has-vivid-cyan-blue-color {
+	color: #0693e3;
+}
+
+.entry-content .has-vivid-cyan-blue-background-color,
+.wp-block-button.is-style-outline .has-vivid-cyan-blue-background-color:link {
+	background-color: #0693e3;
+}
+
+.entry-content .has-very-light-gray-color {
+	color: #eee;
+}
+
+.entry-content .has-very-light-gray-background-color,
+.wp-block-button.is-style-outline .has-very-light-gray-background-color:link {
+	background-color: #eee;
+}
+
+.entry-content .has-cyan-bluish-gray-color {
+	color: #abb8c3;
+}
+
+.entry-content .has-cyan-bluish-gray-background-color,
+.wp-block-button.is-style-outline .has-cyan-bluish-gray-background-color:link {
+	background-color: #abb8c3;
+}
+
+.entry-content .has-very-dark-gray-color {
+	color: #313131;
+}
+
+.entry-content .has-very-dark-gray-background-color,
+.wp-block-button.is-style-outline .has-very-dark-gray-background-color:link {
+	background-color: #313131;
+}
Index: src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css
===================================================================
--- src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css	(revision 44382)
+++ src/wp-content/themes/twentyseventeen/assets/css/editor-blocks.css	(working copy)
@@ -492,6 +492,10 @@
 	margin-top: 0.075em;
 }
 
+.wp-block-paragraph.has-background {
+	padding: 20px 30px;
+}
+
 /* Gallery */
 
 .wp-block-gallery figcaption {
@@ -707,10 +711,8 @@
 /* Buttons */
 
 .wp-block-button .wp-block-button__link {
-	background-color: #222;
 	-webkit-box-shadow: none;
 	box-shadow: none;
-	color: #fff;
 	display: inline-block;
 	font-size: 14px;
 	font-size: 0.875rem;
@@ -723,6 +725,15 @@
 	white-space: nowrap;
 }
 
+.wp-block-button__link {
+	background-color: #222;
+	color: #fff;
+}
+
+.is-style-outline .wp-block-button__link {
+	color: #222;
+}
+
 /* Media & Text */
 
 .wp-block-media-text *:last-child {
Index: src/wp-includes/class-wp-block-parser.php
===================================================================
--- src/wp-includes/class-wp-block-parser.php	(revision 44382)
+++ src/wp-includes/class-wp-block-parser.php	(working copy)
@@ -63,10 +63,10 @@
 	public $innerContent;
 
 	function __construct( $name, $attrs, $innerBlocks, $innerHTML, $innerContent ) {
-		$this->blockName    = $name;
-		$this->attrs        = $attrs;
-		$this->innerBlocks  = $innerBlocks;
-		$this->innerHTML    = $innerHTML;
+		$this->blockName   = $name;
+		$this->attrs       = $attrs;
+		$this->innerBlocks = $innerBlocks;
+		$this->innerHTML   = $innerHTML;
 		$this->innerContent = $innerContent;
 	}
 }
@@ -269,17 +269,15 @@
 				 */
 				if ( 0 === $stack_depth ) {
 					if ( isset( $leading_html_start ) ) {
-						$this->output[] = (array) self::freeform(
-							substr(
-								$this->document,
-								$leading_html_start,
-								$start_offset - $leading_html_start
-							)
-						);
+						$this->output[] = (array) self::freeform( substr(
+							$this->document,
+							$leading_html_start,
+							$start_offset - $leading_html_start
+						) );
 					}
 
 					$this->output[] = (array) new WP_Block_Parser_Block( $block_name, $attrs, array(), '', array() );
-					$this->offset   = $start_offset + $token_length;
+					$this->offset = $start_offset + $token_length;
 					return true;
 				}
 
@@ -294,16 +292,13 @@
 
 			case 'block-opener':
 				// track all newly-opened blocks on the stack
-				array_push(
-					$this->stack,
-					new WP_Block_Parser_Frame(
-						new WP_Block_Parser_Block( $block_name, $attrs, array(), '', array() ),
-						$start_offset,
-						$token_length,
-						$start_offset + $token_length,
-						$leading_html_start
-					)
-				);
+				array_push( $this->stack, new WP_Block_Parser_Frame(
+					new WP_Block_Parser_Block( $block_name, $attrs, array(), '', array() ),
+					$start_offset,
+					$token_length,
+					$start_offset + $token_length,
+					$leading_html_start
+				) );
 				$this->offset = $start_offset + $token_length;
 				return true;
 
@@ -334,11 +329,11 @@
 				 * otherwise we're nested and we have to close out the current
 				 * block and add it as a new innerBlock to the parent
 				 */
-				$stack_top                        = array_pop( $this->stack );
-				$html                             = substr( $this->document, $stack_top->prev_offset, $start_offset - $stack_top->prev_offset );
-				$stack_top->block->innerHTML     .= $html;
+				$stack_top = array_pop( $this->stack );
+				$html = substr( $this->document, $stack_top->prev_offset, $start_offset - $stack_top->prev_offset );
+				$stack_top->block->innerHTML .= $html;
 				$stack_top->block->innerContent[] = $html;
-				$stack_top->prev_offset           = $start_offset + $token_length;
+				$stack_top->prev_offset = $start_offset + $token_length;
 
 				$this->add_inner_block(
 					$stack_top->block,
@@ -396,15 +391,15 @@
 			return array( 'no-more-tokens', null, null, null, null );
 		}
 
-		list( $match, $started_at ) = $matches[0];
+		list( $match, $started_at ) = $matches[ 0 ];
 
 		$length    = strlen( $match );
-		$is_closer = isset( $matches['closer'] ) && -1 !== $matches['closer'][1];
-		$is_void   = isset( $matches['void'] ) && -1 !== $matches['void'][1];
-		$namespace = $matches['namespace'];
-		$namespace = ( isset( $namespace ) && -1 !== $namespace[1] ) ? $namespace[0] : 'core/';
-		$name      = $namespace . $matches['name'][0];
-		$has_attrs = isset( $matches['attrs'] ) && -1 !== $matches['attrs'][1];
+		$is_closer = isset( $matches[ 'closer' ] ) && -1 !== $matches[ 'closer' ][ 1 ];
+		$is_void   = isset( $matches[ 'void' ] ) && -1 !== $matches[ 'void' ][ 1 ];
+		$namespace = $matches[ 'namespace' ];
+		$namespace = ( isset( $namespace ) && -1 !== $namespace[ 1 ] ) ? $namespace[ 0 ] : 'core/';
+		$name      = $namespace . $matches[ 'name' ][ 0 ];
+		$has_attrs = isset( $matches[ 'attrs' ] ) && -1 !== $matches[ 'attrs' ][ 1 ];
 
 		/*
 		 * Fun fact! It's not trivial in PHP to create "an empty associative array" since all arrays
@@ -411,7 +406,7 @@
 		 * are associative arrays. If we use `array()` we get a JSON `[]`
 		 */
 		$attrs = $has_attrs
-			? json_decode( $matches['attrs'][0], /* as-associative */ true )
+			? json_decode( $matches[ 'attrs' ][ 0 ], /* as-associative */ true )
 			: $this->empty_attrs;
 
 		/*
@@ -476,17 +471,17 @@
 	 * @param int|null $last_offset last byte offset into document if continuing form earlier output
 	 */
 	function add_inner_block( WP_Block_Parser_Block $block, $token_start, $token_length, $last_offset = null ) {
-		$parent                       = $this->stack[ count( $this->stack ) - 1 ];
+		$parent = $this->stack[ count( $this->stack ) - 1 ];
 		$parent->block->innerBlocks[] = (array) $block;
-		$html                         = substr( $this->document, $parent->prev_offset, $token_start - $parent->prev_offset );
+		$html = substr( $this->document, $parent->prev_offset, $token_start - $parent->prev_offset );
 
 		if ( ! empty( $html ) ) {
-			$parent->block->innerHTML     .= $html;
+			$parent->block->innerHTML .= $html;
 			$parent->block->innerContent[] = $html;
 		}
 
 		$parent->block->innerContent[] = null;
-		$parent->prev_offset           = $last_offset ? $last_offset : $token_start + $token_length;
+		$parent->prev_offset = $last_offset ? $last_offset : $token_start + $token_length;
 	}
 
 	/**
@@ -505,18 +500,16 @@
 			: substr( $this->document, $prev_offset );
 
 		if ( ! empty( $html ) ) {
-			$stack_top->block->innerHTML     .= $html;
+			$stack_top->block->innerHTML .= $html;
 			$stack_top->block->innerContent[] = $html;
 		}
 
 		if ( isset( $stack_top->leading_html_start ) ) {
-			$this->output[] = (array) self::freeform(
-				substr(
-					$this->document,
-					$stack_top->leading_html_start,
-					$stack_top->token_start - $stack_top->leading_html_start
-				)
-			);
+			$this->output[] = (array) self::freeform( substr(
+				$this->document,
+				$stack_top->leading_html_start,
+				$stack_top->token_start - $stack_top->leading_html_start
+			) );
 		}
 
 		$this->output[] = (array) $stack_top->block;
