diff --git a/resources/static/css/common.css b/resources/static/css/common.css
index 8cde3058603695e2453a5096aea317e1d0fc02b3..11f1f79ee52db1129100d736c9765cecb79de34d 100644
--- a/resources/static/css/common.css
+++ b/resources/static/css/common.css
@@ -363,7 +363,12 @@ footer .help {
 
 #wait, #delay, #error {
   background-color: #dadee1;
-  background-image: url("/i/grain.png"), -moz-linear-gradient(top, #dadee1, #c7ccd0);
+  background-image: url("/i/grain.png"), -webkit-gradient(linear, left top, left bottom, from(#dadee1), to(#c7ccd0));
+  background-image: url("/i/grain.png"), -webkit-linear-gradient(top, #dadee1, #c7ccd0);
+  background-image: url("/i/grain.png"),    -moz-linear-gradient(top, #dadee1, #c7ccd0);
+  background-image: url("/i/grain.png"),     -ms-linear-gradient(top, #dadee1, #c7ccd0);
+  background-image: url("/i/grain.png"),      -o-linear-gradient(top, #dadee1, #c7ccd0);
+  background-image: url("/i/grain.png"),         linear-gradient(top, #dadee1, #c7ccd0);
 }
 
 #wait, #delay {
diff --git a/resources/static/dialog/controllers/actions.js b/resources/static/dialog/controllers/actions.js
index 80435e5220f6bafe3e5856ef3aeb358bc715a098..3a95c89155d98f12c71b9f8eb11231f0a1f82bfe 100644
--- a/resources/static/dialog/controllers/actions.js
+++ b/resources/static/dialog/controllers/actions.js
@@ -28,7 +28,6 @@ BrowserID.Modules.Actions = (function() {
     }
 
     mediator.publish("service", { name: name });
-    bid.resize();
 
     return module;
   }
diff --git a/resources/static/dialog/css/m.css b/resources/static/dialog/css/m.css
index 2a757809b174111c8050bdb28fcc7a5a5cd8d9cf..ff2ee544b1ecc1f17c11781afb4dfa69e4e2313b 100644
--- a/resources/static/dialog/css/m.css
+++ b/resources/static/dialog/css/m.css
@@ -159,14 +159,6 @@
     line-height: 40px;
   }
 
-  #error {
-    position: static;
-  }
-
-  #error .vertical, #delay .vertical, #wait .vertical {
-    height: 250px;
-  }
-
   #error .vertical {
     width: auto;
   }
diff --git a/resources/static/dialog/resources/screen_size_hacks.js b/resources/static/dialog/resources/screen_size_hacks.js
index 33685cb756f36123246e781af5600ff6b586e4c8..c304ca0e4cd3cac9d242d47d07a78f3993e78e30 100644
--- a/resources/static/dialog/resources/screen_size_hacks.js
+++ b/resources/static/dialog/resources/screen_size_hacks.js
@@ -106,6 +106,8 @@
         contentHeight = Math.max(100, contentHeight, formHeight);
         contentEl.css("min-height", contentHeight + "px");
 
+        // Remove the explicit static position we added to let this go back to
+        // the position specified in CSS.
         $("section,#signIn").css("position", "");
 
         favIconHeight = $("#favicon").outerHeight();
diff --git a/resources/static/shared/error-display.js b/resources/static/shared/error-display.js
index c607eac8f9c37b1a0ecaf07af2b7e50a47699338..7777364d2242006aca12f7c98c08d099466c586e 100644
--- a/resources/static/shared/error-display.js
+++ b/resources/static/shared/error-display.js
@@ -14,7 +14,12 @@ BrowserID.ErrorDisplay = (function() {
     /**
      * XXX What a big steaming pile, use CSS animations for this!
      */
-    $("#moreInfo").slideDown();
+    $("#moreInfo").slideDown(function() {
+      // The expanded info may be partially obscured on mobile devices in
+      // landscape mode.  Force the screen size hacks to account for the new
+      // expanded size.
+      dom.fireEvent(window, "resize");
+    });
     $("#openMoreInfo").css({visibility: "hidden"});
   }
 
diff --git a/resources/static/shared/screens.js b/resources/static/shared/screens.js
index 0ce5cd13392214a46ad7c22c839945c284b854cd..e45daaea63ce87b41b4759c3497852602b78fbe3 100644
--- a/resources/static/shared/screens.js
+++ b/resources/static/shared/screens.js
@@ -15,11 +15,13 @@ BrowserID.Screens = (function() {
       show: function(template, vars) {
         renderer.render(target + " .contents", template, vars);
         dom.addClass(BODY, className);
+        dom.fireEvent(window, "resize");
         this.visible = true;
       },
 
       hide: function() {
         dom.removeClass(BODY, className);
+        dom.fireEvent(window, "resize");
         this.visible = false;
       }
     }