 			(window.innerHeight - padding) / height
 		])
 
-		# Pixel crack trick. If the device is not 0, 0.5, 1 etc, we scale it up by
-		# one extra pixel to always avoid pixel cracks. This means that the coordinates
-		# are a off by a little bit if it's not at a "true" size, but you won't see that
-		# anyway id the scaling is some wird number.
-
-		if phoneScale % 0.5 > 0
-			phoneScale = _.min([
-				(window.innerWidth  - padding) / (width - 1),
-				(window.innerHeight - padding) / (height - 1)
-			])
+		# Only scale in fixed steps, to reduce blurriness, and pixel cracks
+		phoneScale = Math.floor(phoneScale * 1024.0) / 1024.0
+		phoneScale = 1 / 64.0 if phoneScale < 1 / 64.0
+
+		unless Utils.isFramerStudio() and @hideBezel
+			# If close to a nice round scaling, snap to it
+			if 30/64 < phoneScale < 35/64
+				phoneScale = 32/64
+			else if 15/64 < phoneScale < 18/64
+				phoneScale = 16/64
 
 		# Never scale the phone beyond 100%
 		phoneScale = 1 if phoneScale > 1 and not @hideBezel

				properties: {scale: phoneScale}
		else
			@hands.scale = phoneScale
			centerLayer(@hands)

		@emit("change:deviceScale")



			@_updateDeviceImage()
			@hands.scale = @_calculatePhoneScale()
			centerLayer(@hands, true)
			centerLayer(@phone)

			[width, height] = @_getOrientationDimensions(
