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;
