diff --git a/res-hdpi/images/progress_empty.png b/res-hdpi/images/progress_empty.png
index b29d9be..7258183 100644
--- a/res-hdpi/images/progress_empty.png
+++ b/res-hdpi/images/progress_empty.png
Binary files differ
diff --git a/res-hdpi/images/progress_fill.png b/res-hdpi/images/progress_fill.png
index 4c5e66b..becf87b 100644
--- a/res-hdpi/images/progress_fill.png
+++ b/res-hdpi/images/progress_fill.png
Binary files differ
diff --git a/res-mdpi/images/progress_empty.png b/res-mdpi/images/progress_empty.png
index 0883e00..7258183 100644
--- a/res-mdpi/images/progress_empty.png
+++ b/res-mdpi/images/progress_empty.png
Binary files differ
diff --git a/res-mdpi/images/progress_fill.png b/res-mdpi/images/progress_fill.png
index c223871..becf87b 100644
--- a/res-mdpi/images/progress_fill.png
+++ b/res-mdpi/images/progress_fill.png
Binary files differ
diff --git a/res-xhdpi/images/progress_empty.png b/res-xhdpi/images/progress_empty.png
index 429797b..7258183 100644
--- a/res-xhdpi/images/progress_empty.png
+++ b/res-xhdpi/images/progress_empty.png
Binary files differ
diff --git a/res-xhdpi/images/progress_fill.png b/res-xhdpi/images/progress_fill.png
index 7af35aa..becf87b 100644
--- a/res-xhdpi/images/progress_fill.png
+++ b/res-xhdpi/images/progress_fill.png
Binary files differ
diff --git a/res-xxhdpi/images/progress_empty.png b/res-xxhdpi/images/progress_empty.png
index 57c8235..7258183 100644
--- a/res-xxhdpi/images/progress_empty.png
+++ b/res-xxhdpi/images/progress_empty.png
Binary files differ
diff --git a/res-xxhdpi/images/progress_fill.png b/res-xxhdpi/images/progress_fill.png
index 0f36f48..becf87b 100644
--- a/res-xxhdpi/images/progress_fill.png
+++ b/res-xxhdpi/images/progress_fill.png
Binary files differ
diff --git a/res-xxxhdpi/images/progress_empty.png b/res-xxxhdpi/images/progress_empty.png
index ba25afb..7258183 100644
--- a/res-xxxhdpi/images/progress_empty.png
+++ b/res-xxxhdpi/images/progress_empty.png
Binary files differ
diff --git a/res-xxxhdpi/images/progress_fill.png b/res-xxxhdpi/images/progress_fill.png
index 83b72b2..becf87b 100644
--- a/res-xxxhdpi/images/progress_fill.png
+++ b/res-xxxhdpi/images/progress_fill.png
Binary files differ
diff --git a/screen_ui.cpp b/screen_ui.cpp
index d087af3..03ef049 100644
--- a/screen_ui.cpp
+++ b/screen_ui.cpp
@@ -89,7 +89,7 @@
 void ScreenRecoveryUI::draw_background_locked(Icon icon)
 {
     pagesIdentical = false;
-    gr_color(250, 250, 250, 255);
+    gr_color(0, 0, 0, 255);
     gr_clear();
 
     if (icon) {
@@ -125,7 +125,7 @@
             }
         }
 
-        gr_color(115, 115, 115, 255);
+        gr_color(255, 255, 255, 255);
         gr_texticon(textX, textY, text_surface);
     }
 }
@@ -150,7 +150,7 @@
         int dy = (3*gr_fb_height() + iconHeight - 2*height)/4;
 
         // Erase behind the progress bar (in case this was a progress-only update)
-        gr_color(250, 250, 250, 255);
+        gr_color(0, 0, 0, 255);
         gr_fill(dx, dy, width, height);
 
         if (progressBarType == DETERMINATE) {
@@ -181,17 +181,20 @@
 void ScreenRecoveryUI::SetColor(UIElement e) {
     switch (e) {
         case HEADER:
-            gr_color(0xff, 0x57, 0x22, 255);  // Quantum "Deep Orange" 500
+            gr_color(247, 0, 6, 255);
             break;
         case MENU:
         case MENU_SEL_BG:
-            gr_color(0x67, 0x3a, 0xb7, 255);  // Quantum "Deep Purple" 500
+            gr_color(0, 106, 157, 255);
             break;
         case MENU_SEL_FG:
             gr_color(255, 255, 255, 255);
             break;
         case LOG:
-            gr_color(0x3f, 0x51, 0xb5, 255);  // Quantum "Indigo" 500
+            gr_color(249, 194, 0, 255);
+            break;
+        case TEXT_FILL:
+            gr_color(0, 0, 0, 160);
             break;
         default:
             gr_color(255, 255, 255, 255);
@@ -207,7 +210,7 @@
         draw_background_locked(currentIcon);
         draw_progress_locked();
     } else {
-        gr_color(250, 250, 250, 255);
+        gr_color(0, 0, 0, 255);
         gr_clear();
 
         int y = 0;
@@ -221,13 +224,13 @@
                 if (i == menu_top + menu_sel) {
                     // draw the highlight bar
                     SetColor(MENU_SEL_BG);
-                    gr_fill(0, y-2+kTextYOffset, gr_fb_width(), y+char_height+2+kTextYOffset);
+                    gr_fill(0, y-2, gr_fb_width(), y+char_height+2);
                     // white text of selected item
                     SetColor(MENU_SEL_FG);
-                    if (menu[i][0]) gr_text(kTextXOffset, y+kTextYOffset, menu[i], 1);
+                    if (menu[i][0]) gr_text(4, y, menu[i], 1);
                     SetColor(MENU);
                 } else {
-                    if (menu[i][0]) gr_text(kTextXOffset, y+kTextYOffset, menu[i], i < menu_top);
+                    if (menu[i][0]) gr_text(4, y, menu[i], i < menu_top);
                 }
                 y += char_height+4;
             }
@@ -248,7 +251,7 @@
         for (int ty = gr_fb_height() - char_height, count = 0;
              ty > y+2 && count < text_rows;
              ty -= char_height, ++count) {
-            gr_text(kTextXOffset, ty+kTextYOffset, text[row], 0);
+            gr_text(4, ty, text[row], 0);
             --row;
             if (row < 0) row = text_rows-1;
         }
@@ -349,11 +352,11 @@
     gr_font_size(&char_width, &char_height);
 
     text_col = text_row = 0;
-    text_rows = (gr_fb_height() - 2 * kTextYOffset) / char_height;
+    text_rows = gr_fb_height() / char_height;
     if (text_rows > kMaxRows) text_rows = kMaxRows;
     text_top = 1;
 
-    text_cols = (gr_fb_width() - 2 * kTextXOffset) / char_width;
+    text_cols = gr_fb_width() / char_width;
     if (text_cols > kMaxCols - 1) text_cols = kMaxCols - 1;
 
     backgroundIcon[NONE] = NULL;
diff --git a/screen_ui.h b/screen_ui.h
index d5e5892..01a33bf 100644
--- a/screen_ui.h
+++ b/screen_ui.h
@@ -87,9 +87,6 @@
     static const int kMaxCols = 96;
     static const int kMaxRows = 96;
 
-    static const int kTextXOffset = 8;
-    static const int kTextYOffset = 4;
-
     // Log text overlay, displayed when a magic key is pressed
     char text[kMaxRows][kMaxCols];
     int text_cols, text_rows;
