diff --git a/apps/theming/css/theming.scss b/apps/theming/css/theming.scss
index 7db64924f34c042bf67a773ea05921b0a54c853a..ae0e7ad2f8bdf0b3e722101841ff579e46e7aa5e 100644
--- a/apps/theming/css/theming.scss
+++ b/apps/theming/css/theming.scss
@@ -203,6 +203,28 @@ input.primary,
 	}
 }
 
+/** Handle primary buttons for bright colors */
+@if (luma($color-primary) > 0.8) {
+	select,
+	button, .button,
+	input:not([type='range']),
+	textarea,
+	div[contenteditable=true],
+	.pager li a {
+		&.primary:not(:disabled) {
+			background-color: var(--color-background-dark);
+			color: var(--color-main-text);
+			border: 1px solid var(--color-background-darker);
+
+			&:hover, &:focus, &:active {
+				background-color: var(--color-background-darker);
+				color: var(--color-main-text);
+			}
+		}
+	}
+
+}
+
 @if ($color-primary == #ffffff) {
 	/* show grey border below header */
 	#body-user #header,
diff --git a/apps/theming/lib/Util.php b/apps/theming/lib/Util.php
index 38b876f3610f2827df07dbba01fe9728b4345fde..75abea142c8ce683242d6fcc31b5546a62a252a0 100644
--- a/apps/theming/lib/Util.php
+++ b/apps/theming/lib/Util.php
@@ -79,7 +79,7 @@ class Util {
 	public function elementColor($color) {
 		$l = $this->calculateLuminance($color);
 		if($l>0.8) {
-			return '#dddddd';
+			return '#aaaaaa';
 		}
 		return $color;
 	}
diff --git a/core/img/actions/checkbox-mixed-dark.svg b/core/img/actions/checkbox-mixed-dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2f3fd3fa82d80697cf6b0578d3f131838ef4f147
--- /dev/null
+++ b/core/img/actions/checkbox-mixed-dark.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewbox="0 0 16 16" width="16" height="16"><path d="M4 7v2h8V7H4z" fill="#fff"/></svg>