Index: wp-admin/js/theme.js
===================================================================
--- wp-admin/js/theme.js	(revision 26844)
+++ wp-admin/js/theme.js	(working copy)
@@ -188,6 +188,7 @@
 
 	events: {
 		'click': 'expand',
+		'keydown': 'expand',
 		'touchend': 'expand',
 		'touchmove': 'preventExpand'
 	},
@@ -197,7 +198,8 @@
 	render: function() {
 		var data = this.model.toJSON();
 		// Render themes using the html template
-		this.$el.html( this.html( data ) );
+		this.$el.html( this.html( data ) ).attr( 'tabindex', 0 );
+
 		// Renders active theme styles
 		this.activeTheme();
 
@@ -219,6 +221,11 @@
 	expand: function( event ) {
 		var self = this;
 
+		// 'enter' and 'space' keys expand the details view when a theme is :focused
+		if ( event.type === 'keydown' && ( event.which !== 13 && event.which !== 32 ) ) {
+			return;
+		}
+
 		// Bail if the user scrolled on a touch device
 		if ( this.touchDrag === true ) {
 			return this.touchDrag = false;
@@ -232,6 +239,9 @@
 			return;
 		}
 
+		// Set focused theme to current element
+		themes.focusedTheme = this.$el;
+
 		this.trigger( 'theme:expand', self.model.cid );
 	},
 
@@ -266,6 +276,13 @@
 		this.navigation();
 		// Checks screenshot size
 		this.screenshotCheck( this.$el );
+		// Contain "tabbing" inside the overlay
+		this.containFocus( this.$el );
+
+		// Move focus to the default action
+		window.setTimeout( function() {
+			$( '.theme-wrap a.button-primary:visible' ).focus();
+		}, 500 )
 	},
 
 	// Adds a class to the currently active theme
@@ -275,6 +292,24 @@
 		this.$el.toggleClass( 'active', this.model.get( 'active' ) );
 	},
 
+	containFocus: function( $el ) {
+		$el.on( 'keydown.wp-themes', function( event ) {
+			var $target;
+
+			if ( event.which === 9 ) {
+				$target = $( event.target );
+
+				if ( $target.is( 'button.left' ) && event.shiftKey ) {
+					$el.find( 'a.delete-theme' ).focus();
+					event.preventDefault();
+				} else if ( $target.is( 'a.delete-theme' ) ) {
+					$el.find( 'button.left' ).focus();
+					event.preventDefault();
+				}
+			}
+		});
+	},
+
 	// Single theme overlay screen
 	// It's shown when clicking a theme
 	collapse: function( event ) {
@@ -291,7 +326,7 @@
 		// Detect if the click is inside the overlay
 		// and don't close it unless the target was
 		// the div.back button
-		if ( $( event.target ).is( '.theme-backdrop' ) || $( event.target ).is( 'div.close' ) || event.keyCode === 27 ) {
+		if ( $( event.target ).is( '.theme-backdrop' ) || $( event.target ).is( '.close' ) || event.keyCode === 27 ) {
 
 			// Add a temporary closing class while overlay fades out
 			$( 'body' ).addClass( 'closing-overlay' );
@@ -311,6 +346,11 @@
 
 				// Restore scroll position
 				document.body.scrollTop = scroll;
+
+				// Return focus to the theme div
+				if ( themes.focusedTheme ) {
+					themes.focusedTheme.focus();
+				}
 			});
 		}
 	},
Index: wp-admin/css/wp-admin.css
===================================================================
--- wp-admin/css/wp-admin.css	(revision 26844)
+++ wp-admin/css/wp-admin.css	(working copy)
@@ -6486,6 +6486,24 @@
 	-webkit-transition: opacity 0.1s ease-in-out;
 	transition:         opacity 0.1s ease-in-out;
 }
+.theme-browser .theme:focus {
+	outline: 1px dotted #000;
+}
+/* Hide shortcut actions and hover feedback when using tab navigation */
+.theme-browser .theme:focus .theme-actions {
+	display: none;
+}
+/* Restore display of theme controls if you hover a focused theme */
+.theme-browser .theme:focus:hover .theme-actions {
+	display: block;
+}
+.theme-browser .theme:focus .more-details {
+	opacity: 1;
+}
+/* Current theme needs to have its action always on view */
+.theme-browser .theme.active:focus .theme-actions {
+	display: block;
+}
 
 .theme-browser.rendered .theme:hover .more-details {
 	opacity: 1;
@@ -6711,10 +6729,13 @@
 	width: 50px;
 	text-align: center;
 	float: right;
+	border: 0;
 	border-left: 1px solid #ddd;
+	background-color: transparent;
 }
 
-.theme-overlay .theme-header .close:hover:before {
+.theme-overlay .theme-header .close:hover:before,
+.theme-overlay .theme-header .close:focus:before {
 	color: #fff;
 }
 
@@ -6731,20 +6752,21 @@
 .theme-overlay .theme-header .left {
 	cursor: pointer;
 	color: #777;
+	background-color: transparent;
 	height: 48px;
 	width: 54px;
 	float: left;
 	text-align: center;
+	border: 0;
 	border-right: 1px solid #ddd;
-	-webkit-user-select: none;
-	-moz-user-select:    none;
-	-ms-user-select:     none;
-	user-select:         none;
 }
 
 .theme-overlay .theme-header .close:hover,
 .theme-overlay .theme-header .right:hover,
-.theme-overlay .theme-header .left:hover {
+.theme-overlay .theme-header .left:hover,
+.theme-overlay .theme-header .close:focus,
+.theme-overlay .theme-header .right:focus,
+.theme-overlay .theme-header .left:focus {
 	background: #0074a2;
 	color: #fff;
 }
Index: wp-admin/themes.php
===================================================================
--- wp-admin/themes.php	(revision 26844)
+++ wp-admin/themes.php	(working copy)
@@ -192,7 +192,7 @@
  */
 
 foreach ( $themes as $theme ) : ?>
-<div class="theme<?php if ( $theme['active'] ) echo ' active'; ?>">
+<div class="theme<?php if ( $theme['active'] ) echo ' active'; ?>" tabindex="0">
 	<?php if ( ! empty( $theme['screenshot'][0] ) ) { ?>
 		<div class="theme-screenshot">
 			<img src="<?php echo $theme['screenshot'][0]; ?>" alt="" />
@@ -279,7 +279,7 @@
 	<# } #>
 	<span class="more-details"><?php _e( 'Theme Details' ); ?></span>
 	<div class="theme-author"><?php printf( __( 'By %s' ), '{{{ data.author }}}' ); ?></div>
-	
+
 	<# if ( data.active ) { #>
 		<h3 class="theme-name"><span><?php _ex( 'Active:', 'theme' ); ?></span> {{{ data.name }}}</h3>
 	<# } else { #>
@@ -309,9 +309,9 @@
 	<div class="theme-backdrop"></div>
 	<div class="theme-wrap">
 		<div class="theme-header">
-			<div alt="<?php _e( 'Close overlay' ); ?>" class="close dashicons dashicons-no"></div>
-			<div alt="<?php _e( 'Show previous theme' ); ?>" class="left dashicons dashicons-no"></div>
-			<div alt="<?php _e( 'Show next theme' ); ?>" class="right dashicons dashicons-no"></div>
+			<button alt="<?php _e( 'Show previous theme' ); ?>" class="left dashicons dashicons-no"></button>
+			<button alt="<?php _e( 'Show next theme' ); ?>" class="right dashicons dashicons-no"></button>
+			<button alt="<?php _e( 'Close overlay' ); ?>" class="close dashicons dashicons-no"></button>
 		</div>
 		<div class="theme-about">
 			<div class="theme-screenshots">
