diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php
index a321cc021d..08f25f4af9 100644
--- a/src/__celerity_resource_map__.php
+++ b/src/__celerity_resource_map__.php
@@ -1,4377 +1,4386 @@
 <?php
 
 /**
  * This file is automatically generated. Use 'celerity_mapper.php' to rebuild
  * it.
  * @generated
  */
 
 celerity_register_resource_map(array(
   '/rsrc/image/actions/edit.png' =>
   array(
     'hash' => 'ae90914d120ac3838ddc633b480343f3',
     'uri' => '/res/ae90914d/rsrc/image/actions/edit.png',
     'disk' => '/rsrc/image/actions/edit.png',
     'type' => 'png',
   ),
   '/rsrc/image/apple-touch-icon.png' =>
   array(
     'hash' => '3380adf2dd4a5efa0885618bc5943640',
     'uri' => '/res/3380adf2/rsrc/image/apple-touch-icon.png',
     'disk' => '/rsrc/image/apple-touch-icon.png',
     'type' => 'png',
   ),
   '/rsrc/image/avatar.png' =>
   array(
     'hash' => '1c5f255071537f05406adee86717ff27',
     'uri' => '/res/1c5f2550/rsrc/image/avatar.png',
     'disk' => '/rsrc/image/avatar.png',
     'type' => 'png',
   ),
   '/rsrc/image/checker_dark.png' =>
   array(
     'hash' => '640f795343df76ebe5409aae6187e57f',
     'uri' => '/res/640f7953/rsrc/image/checker_dark.png',
     'disk' => '/rsrc/image/checker_dark.png',
     'type' => 'png',
   ),
   '/rsrc/image/checker_light.png' =>
   array(
     'hash' => '7f8f3ef8beb0f2cc4cc69efb9e1c3308',
     'uri' => '/res/7f8f3ef8/rsrc/image/checker_light.png',
     'disk' => '/rsrc/image/checker_light.png',
     'type' => 'png',
   ),
   '/rsrc/image/credit_cards.png' =>
   array(
     'hash' => '681448de424ea159b6ea68af04c046ae',
     'uri' => '/res/681448de/rsrc/image/credit_cards.png',
     'disk' => '/rsrc/image/credit_cards.png',
     'type' => 'png',
   ),
   '/rsrc/image/darkload.gif' =>
   array(
     'hash' => '3a52cb7145d6e70f461fed21273117f2',
     'uri' => '/res/3a52cb71/rsrc/image/darkload.gif',
     'disk' => '/rsrc/image/darkload.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/divot.png' =>
   array(
     'hash' => '3be267bd11ea375bf68e808893718e0e',
     'uri' => '/res/3be267bd/rsrc/image/divot.png',
     'disk' => '/rsrc/image/divot.png',
     'type' => 'png',
   ),
   '/rsrc/image/grippy_texture.png' =>
   array(
     'hash' => 'a8945e12ceeaddd5b491a8d81cfa19c1',
     'uri' => '/res/a8945e12/rsrc/image/grippy_texture.png',
     'disk' => '/rsrc/image/grippy_texture.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/arrow_branch.png' =>
   array(
     'hash' => 'f27b67520766e3d971722bcff703f3a8',
     'uri' => '/res/f27b6752/rsrc/image/icon/fatcow/arrow_branch.png',
     'disk' => '/rsrc/image/icon/fatcow/arrow_branch.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/arrow_merge.png' =>
   array(
     'hash' => 'c4bd97f3b1257439e2123ef69d2194d0',
     'uri' => '/res/c4bd97f3/rsrc/image/icon/fatcow/arrow_merge.png',
     'disk' => '/rsrc/image/icon/fatcow/arrow_merge.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/bullet_black.png' =>
   array(
     'hash' => '718f9c560a13766796f1be7dfaadeeab',
     'uri' => '/res/718f9c56/rsrc/image/icon/fatcow/bullet_black.png',
     'disk' => '/rsrc/image/icon/fatcow/bullet_black.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/bullet_orange.png' =>
   array(
     'hash' => 'c3bf91b65baacb27f2af143ab9180119',
     'uri' => '/res/c3bf91b6/rsrc/image/icon/fatcow/bullet_orange.png',
     'disk' => '/rsrc/image/icon/fatcow/bullet_orange.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/bullet_red.png' =>
   array(
     'hash' => '00273e4aa6ea3de630295610d6c9560c',
     'uri' => '/res/00273e4a/rsrc/image/icon/fatcow/bullet_red.png',
     'disk' => '/rsrc/image/icon/fatcow/bullet_red.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/calendar_edit.png' =>
   array(
     'hash' => 'de249c0f4f37bf5b2c69ff39ec5573fb',
     'uri' => '/res/de249c0f/rsrc/image/icon/fatcow/calendar_edit.png',
     'disk' => '/rsrc/image/icon/fatcow/calendar_edit.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/document_black.png' =>
   array(
     'hash' => '44d65a7f05a9c921719deedc160d68f7',
     'uri' => '/res/44d65a7f/rsrc/image/icon/fatcow/document_black.png',
     'disk' => '/rsrc/image/icon/fatcow/document_black.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_blue.png' =>
   array(
     'hash' => '75a080492f900fbe489e4b27e403962b',
     'uri' => '/res/75a08049/rsrc/image/icon/fatcow/flag_blue.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_blue.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_finish.png' =>
   array(
     'hash' => '4af11fc7fab8e4610cbc3c88a02d4f78',
     'uri' => '/res/4af11fc7/rsrc/image/icon/fatcow/flag_finish.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_finish.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_ghost.png' =>
   array(
     'hash' => '14c9f30a37b43f276f27a27a924bf02d',
     'uri' => '/res/14c9f30a/rsrc/image/icon/fatcow/flag_ghost.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_ghost.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_green.png' =>
   array(
     'hash' => 'fed01374cd396cb774872762dcc447e1',
     'uri' => '/res/fed01374/rsrc/image/icon/fatcow/flag_green.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_green.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_orange.png' =>
   array(
     'hash' => '88008cb8bb99761a37e5a743e2455aeb',
     'uri' => '/res/88008cb8/rsrc/image/icon/fatcow/flag_orange.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_orange.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_pink.png' =>
   array(
     'hash' => '2f199f06ffc3dfc81b7561a057e0bc33',
     'uri' => '/res/2f199f06/rsrc/image/icon/fatcow/flag_pink.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_pink.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_purple.png' =>
   array(
     'hash' => '16358629dc86c39550b575586eb5df80',
     'uri' => '/res/16358629/rsrc/image/icon/fatcow/flag_purple.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_purple.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_red.png' =>
   array(
     'hash' => '210c28b4d93c439a499f5814f5e05772',
     'uri' => '/res/210c28b4/rsrc/image/icon/fatcow/flag_red.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_red.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/flag_yellow.png' =>
   array(
     'hash' => 'bdfd73744a80bb80329ae50bc8a5f962',
     'uri' => '/res/bdfd7374/rsrc/image/icon/fatcow/flag_yellow.png',
     'disk' => '/rsrc/image/icon/fatcow/flag_yellow.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/folder.png' =>
   array(
     'hash' => '25e46cf9d210dde2242332296f79938c',
     'uri' => '/res/25e46cf9/rsrc/image/icon/fatcow/folder.png',
     'disk' => '/rsrc/image/icon/fatcow/folder.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/folder_go.png' =>
   array(
     'hash' => 'ba922ff7959309f51a14cb7ed5124d8b',
     'uri' => '/res/ba922ff7/rsrc/image/icon/fatcow/folder_go.png',
     'disk' => '/rsrc/image/icon/fatcow/folder_go.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/key_question.png' =>
   array(
     'hash' => '530a6448a4b91edec091a9292ccfd3d9',
     'uri' => '/res/530a6448/rsrc/image/icon/fatcow/key_question.png',
     'disk' => '/rsrc/image/icon/fatcow/key_question.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/link.png' =>
   array(
     'hash' => 'be1bea49b216548433014f3324902928',
     'uri' => '/res/be1bea49/rsrc/image/icon/fatcow/link.png',
     'disk' => '/rsrc/image/icon/fatcow/link.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/page_white_edit.png' =>
   array(
     'hash' => 'e7b7e7f2d9730bc80bc5c9eac1f3e36d',
     'uri' => '/res/e7b7e7f2/rsrc/image/icon/fatcow/page_white_edit.png',
     'disk' => '/rsrc/image/icon/fatcow/page_white_edit.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/page_white_link.png' =>
   array(
     'hash' => '1cfbad14412bda6c6f132dcc7c8725fd',
     'uri' => '/res/1cfbad14/rsrc/image/icon/fatcow/page_white_link.png',
     'disk' => '/rsrc/image/icon/fatcow/page_white_link.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/page_white_put.png' =>
   array(
     'hash' => 'bb7308aa5ac40137a8262da395a267fd',
     'uri' => '/res/bb7308aa/rsrc/image/icon/fatcow/page_white_put.png',
     'disk' => '/rsrc/image/icon/fatcow/page_white_put.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/page_white_text.png' =>
   array(
     'hash' => 'e47d590b626f617fb7d1d44e96e8fd11',
     'uri' => '/res/e47d590b/rsrc/image/icon/fatcow/page_white_text.png',
     'disk' => '/rsrc/image/icon/fatcow/page_white_text.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/conduit.png' =>
   array(
     'hash' => '1cae0656580aa3cd0b54b9d98306b1b9',
     'uri' => '/res/1cae0656/rsrc/image/icon/fatcow/source/conduit.png',
     'disk' => '/rsrc/image/icon/fatcow/source/conduit.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/email.png' =>
   array(
     'hash' => '93bdb3e168da1ed68f50c42125729d4e',
     'uri' => '/res/93bdb3e1/rsrc/image/icon/fatcow/source/email.png',
     'disk' => '/rsrc/image/icon/fatcow/source/email.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/fax.png' =>
   array(
     'hash' => 'd7dedf229841f2d041b347afd881596f',
     'uri' => '/res/d7dedf22/rsrc/image/icon/fatcow/source/fax.png',
     'disk' => '/rsrc/image/icon/fatcow/source/fax.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/mobile.png' =>
   array(
     'hash' => '786e7146d1e7d7318baf76c9d2baad97',
     'uri' => '/res/786e7146/rsrc/image/icon/fatcow/source/mobile.png',
     'disk' => '/rsrc/image/icon/fatcow/source/mobile.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/tablet.png' =>
   array(
     'hash' => '374cd40e4965be6b2fbdef4059d0ca05',
     'uri' => '/res/374cd40e/rsrc/image/icon/fatcow/source/tablet.png',
     'disk' => '/rsrc/image/icon/fatcow/source/tablet.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/source/web.png' =>
   array(
     'hash' => 'f4882a8f5619ba505ca033f72a340635',
     'uri' => '/res/f4882a8f/rsrc/image/icon/fatcow/source/web.png',
     'disk' => '/rsrc/image/icon/fatcow/source/web.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/default160x120.png' =>
   array(
     'hash' => '1b52ebd1fe0eee3ed0abfc382991b265',
     'uri' => '/res/1b52ebd1/rsrc/image/icon/fatcow/thumbnails/default160x120.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/default160x120.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/default60x45.png' =>
   array(
     'hash' => '048d851d8d1daad4754e891e734c1899',
     'uri' => '/res/048d851d/rsrc/image/icon/fatcow/thumbnails/default60x45.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/default60x45.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/image160x120.png' =>
   array(
     'hash' => '434acbd8dbbc2da9f09f6205a396eba1',
     'uri' => '/res/434acbd8/rsrc/image/icon/fatcow/thumbnails/image160x120.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/image160x120.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/image60x45.png' =>
   array(
     'hash' => '29f7872dc53588fe0b8f0b330c7ee23a',
     'uri' => '/res/29f7872d/rsrc/image/icon/fatcow/thumbnails/image60x45.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/image60x45.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png' =>
   array(
     'hash' => '39d2e22541658a3472ba41ae2fa548e5',
     'uri' => '/res/39d2e225/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png' =>
   array(
     'hash' => 'b3572e9317cbed5184d12bdfabed2727',
     'uri' => '/res/b3572e93/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/zip160x120.png' =>
   array(
     'hash' => 'e505108688a903b5cfb674707a289bcc',
     'uri' => '/res/e5051086/rsrc/image/icon/fatcow/thumbnails/zip160x120.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/zip160x120.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/fatcow/thumbnails/zip60x45.png' =>
   array(
     'hash' => 'f00716f4e8f7a95e70d43504f06be0a6',
     'uri' => '/res/f00716f4/rsrc/image/icon/fatcow/thumbnails/zip60x45.png',
     'disk' => '/rsrc/image/icon/fatcow/thumbnails/zip60x45.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/close-2.png' =>
   array(
     'hash' => '72ff3ddcc1ed5d19a715ed6242114b53',
     'uri' => '/res/72ff3ddc/rsrc/image/icon/lightbox/close-2.png',
     'disk' => '/rsrc/image/icon/lightbox/close-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/close-hover-2.png' =>
   array(
     'hash' => '6ad4bd4a7820547a1d9041752546ba16',
     'uri' => '/res/6ad4bd4a/rsrc/image/icon/lightbox/close-hover-2.png',
     'disk' => '/rsrc/image/icon/lightbox/close-hover-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/left-arrow-2.png' =>
   array(
     'hash' => 'd84cbb0d42739f87b8f25b2f1d2f1153',
     'uri' => '/res/d84cbb0d/rsrc/image/icon/lightbox/left-arrow-2.png',
     'disk' => '/rsrc/image/icon/lightbox/left-arrow-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/left-arrow-hover-2.png' =>
   array(
     'hash' => 'cdf05f98fff3f390cd8df0c89894a3e1',
     'uri' => '/res/cdf05f98/rsrc/image/icon/lightbox/left-arrow-hover-2.png',
     'disk' => '/rsrc/image/icon/lightbox/left-arrow-hover-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/right-arrow-2.png' =>
   array(
     'hash' => '52021038cb6995c71f62a804bc2d420d',
     'uri' => '/res/52021038/rsrc/image/icon/lightbox/right-arrow-2.png',
     'disk' => '/rsrc/image/icon/lightbox/right-arrow-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/lightbox/right-arrow-hover-2.png' =>
   array(
     'hash' => '65d5756b7b9cfcdeb2eb197a9aa6bbd2',
     'uri' => '/res/65d5756b/rsrc/image/icon/lightbox/right-arrow-hover-2.png',
     'disk' => '/rsrc/image/icon/lightbox/right-arrow-hover-2.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/subscribe.png' =>
   array(
     'hash' => '5f47a4b17de245af39a4e7a097e40623',
     'uri' => '/res/5f47a4b1/rsrc/image/icon/subscribe.png',
     'disk' => '/rsrc/image/icon/subscribe.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/attachment.png' =>
   array(
     'hash' => '776fed2de89803fd8a0ba4b9deede230',
     'uri' => '/res/776fed2d/rsrc/image/icon/tango/attachment.png',
     'disk' => '/rsrc/image/icon/tango/attachment.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/edit.png' =>
   array(
     'hash' => 'c0028d99dcf4e9559bbf3c88ce2d8a8d',
     'uri' => '/res/c0028d99/rsrc/image/icon/tango/edit.png',
     'disk' => '/rsrc/image/icon/tango/edit.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/go-down.png' =>
   array(
     'hash' => '96862812cbb0445573c264dc057b8300',
     'uri' => '/res/96862812/rsrc/image/icon/tango/go-down.png',
     'disk' => '/rsrc/image/icon/tango/go-down.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/log.png' =>
   array(
     'hash' => 'a6f72499bef279ff6807a7dbc5148f1e',
     'uri' => '/res/a6f72499/rsrc/image/icon/tango/log.png',
     'disk' => '/rsrc/image/icon/tango/log.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/tango/upload.png' =>
   array(
     'hash' => '8c11b63d6d99db3d7159c5d9a94e3062',
     'uri' => '/res/8c11b63d/rsrc/image/icon/tango/upload.png',
     'disk' => '/rsrc/image/icon/tango/upload.png',
     'type' => 'png',
   ),
   '/rsrc/image/icon/unsubscribe.png' =>
   array(
     'hash' => '29429ad65aa3af50b072b32087057361',
     'uri' => '/res/29429ad6/rsrc/image/icon/unsubscribe.png',
     'disk' => '/rsrc/image/icon/unsubscribe.png',
     'type' => 'png',
   ),
   '/rsrc/image/loading.gif' =>
   array(
     'hash' => '664297671941142f37d8c89e717ff2ce',
     'uri' => '/res/66429767/rsrc/image/loading.gif',
     'disk' => '/rsrc/image/loading.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/main_texture.png' =>
   array(
     'hash' => 'e34d8143384721be73ec9b7532a977ab',
     'uri' => '/res/e34d8143/rsrc/image/main_texture.png',
     'disk' => '/rsrc/image/main_texture.png',
     'type' => 'png',
   ),
   '/rsrc/image/menu_texture.png' =>
   array(
     'hash' => 'ad020b1529b3a3b3480ca9de1d5f1e40',
     'uri' => '/res/ad020b15/rsrc/image/menu_texture.png',
     'disk' => '/rsrc/image/menu_texture.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/harding.png' =>
   array(
     'hash' => '818b035ace2c480aa8df7b7f11cef58b',
     'uri' => '/res/818b035a/rsrc/image/people/harding.png',
     'disk' => '/rsrc/image/people/harding.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/jefferson.png' =>
   array(
     'hash' => '55fe807ff02f9320e595fb59442e2038',
     'uri' => '/res/55fe807f/rsrc/image/people/jefferson.png',
     'disk' => '/rsrc/image/people/jefferson.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/lincoln.png' =>
   array(
     'hash' => '2363337947ab52fd5fda79e4a004e930',
     'uri' => '/res/23633379/rsrc/image/people/lincoln.png',
     'disk' => '/rsrc/image/people/lincoln.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/mckinley.png' =>
   array(
     'hash' => '0b7b05dd47c49a0874670e5e8200bba8',
     'uri' => '/res/0b7b05dd/rsrc/image/people/mckinley.png',
     'disk' => '/rsrc/image/people/mckinley.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/taft.png' =>
   array(
     'hash' => 'f3e47d45b59b0b009fd536dabae9a151',
     'uri' => '/res/f3e47d45/rsrc/image/people/taft.png',
     'disk' => '/rsrc/image/people/taft.png',
     'type' => 'png',
   ),
   '/rsrc/image/people/washington.png' =>
   array(
     'hash' => '01412761cab769f7993d69eba986d949',
     'uri' => '/res/01412761/rsrc/image/people/washington.png',
     'disk' => '/rsrc/image/people/washington.png',
     'type' => 'png',
   ),
   '/rsrc/image/phrequent_active.png' =>
   array(
     'hash' => '716cddc08630eaa33934b2008723cac0',
     'uri' => '/res/716cddc0/rsrc/image/phrequent_active.png',
     'disk' => '/rsrc/image/phrequent_active.png',
     'type' => 'png',
   ),
   '/rsrc/image/phrequent_inactive.png' =>
   array(
     'hash' => 'f9099683873c01c5de1dc6650bd668fe',
     'uri' => '/res/f9099683/rsrc/image/phrequent_inactive.png',
     'disk' => '/rsrc/image/phrequent_inactive.png',
     'type' => 'png',
   ),
   '/rsrc/image/search.png' =>
   array(
     'hash' => 'ff7da044e6f923b8f569dec11f97e5e5',
     'uri' => '/res/ff7da044/rsrc/image/search.png',
     'disk' => '/rsrc/image/search.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-actions-X2.png' =>
   array(
     'hash' => '06962a5e8bea98ba7418d1d6cabcd7dc',
     'uri' => '/res/06962a5e/rsrc/image/sprite-actions-X2.png',
     'disk' => '/rsrc/image/sprite-actions-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-actions.png' =>
   array(
     'hash' => 'd5dda5fab1e61b00538c9a4fa1ee94c8',
     'uri' => '/res/d5dda5fa/rsrc/image/sprite-actions.png',
     'disk' => '/rsrc/image/sprite-actions.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps-X2.png' =>
   array(
     'hash' => '35a4b5c92f0b05a6a06c8a8e2f409d9e',
     'uri' => '/res/35a4b5c9/rsrc/image/sprite-apps-X2.png',
     'disk' => '/rsrc/image/sprite-apps-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps-large-X2.png' =>
   array(
     'hash' => '6295f60df446103f0de702f25bc502e1',
     'uri' => '/res/6295f60d/rsrc/image/sprite-apps-large-X2.png',
     'disk' => '/rsrc/image/sprite-apps-large-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps-large.png' =>
   array(
     'hash' => '734d9268dd3a69102b194a7461c68631',
     'uri' => '/res/734d9268/rsrc/image/sprite-apps-large.png',
     'disk' => '/rsrc/image/sprite-apps-large.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps-xlarge.png' =>
   array(
     'hash' => '992d2c278b6a22c0fa874d457a252fbd',
     'uri' => '/res/992d2c27/rsrc/image/sprite-apps-xlarge.png',
     'disk' => '/rsrc/image/sprite-apps-xlarge.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-apps.png' =>
   array(
     'hash' => 'eed2e0e322821e1c0836fc62639c1af1',
     'uri' => '/res/eed2e0e3/rsrc/image/sprite-apps.png',
     'disk' => '/rsrc/image/sprite-apps.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-conpherence-X2.png' =>
   array(
     'hash' => '5e47868b00933a9afb6c844e464e6b23',
     'uri' => '/res/5e47868b/rsrc/image/sprite-conpherence-X2.png',
     'disk' => '/rsrc/image/sprite-conpherence-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-conpherence.png' =>
   array(
     'hash' => 'ca51f1be25213262d68e626e4cab7f0f',
     'uri' => '/res/ca51f1be/rsrc/image/sprite-conpherence.png',
     'disk' => '/rsrc/image/sprite-conpherence.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-docs-X2.png' =>
   array(
     'hash' => '57d3286ce88133f3ec9240e35f6bb897',
     'uri' => '/res/57d3286c/rsrc/image/sprite-docs-X2.png',
     'disk' => '/rsrc/image/sprite-docs-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-docs.png' =>
   array(
     'hash' => 'b2b089072d6eddd831402a77c02b5736',
     'uri' => '/res/b2b08907/rsrc/image/sprite-docs.png',
     'disk' => '/rsrc/image/sprite-docs.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-gradient.png' =>
   array(
     'hash' => 'e52f57d64edfddfcc2f8bd26a262dda2',
     'uri' => '/res/e52f57d6/rsrc/image/sprite-gradient.png',
     'disk' => '/rsrc/image/sprite-gradient.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-icon-X2.png' =>
   array(
     'hash' => 'd9d7e2a4ede625d34e04877e836e6c38',
     'uri' => '/res/d9d7e2a4/rsrc/image/sprite-icon-X2.png',
     'disk' => '/rsrc/image/sprite-icon-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-icon.png' =>
   array(
     'hash' => '000c96ed6b43fbb26caec3ff2b13687f',
     'uri' => '/res/000c96ed/rsrc/image/sprite-icon.png',
     'disk' => '/rsrc/image/sprite-icon.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-menu-X2.png' =>
   array(
     'hash' => '867092041ce0a62b7e50136213ca7be1',
     'uri' => '/res/86709204/rsrc/image/sprite-menu-X2.png',
     'disk' => '/rsrc/image/sprite-menu-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-menu.png' =>
   array(
     'hash' => '21508eebdf582d7251d62bb2cd09f66d',
     'uri' => '/res/21508eeb/rsrc/image/sprite-menu.png',
     'disk' => '/rsrc/image/sprite-menu.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-minicons-X2.png' =>
   array(
     'hash' => 'c420c6462f7e50ca9941ccc5dd9e3dec',
     'uri' => '/res/c420c646/rsrc/image/sprite-minicons-X2.png',
     'disk' => '/rsrc/image/sprite-minicons-X2.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-minicons.png' =>
   array(
     'hash' => '168bb875933624b3080a1cc134e5b4ed',
     'uri' => '/res/168bb875/rsrc/image/sprite-minicons.png',
     'disk' => '/rsrc/image/sprite-minicons.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-payments.png' =>
   array(
     'hash' => '5ce73fb580609e7cda16832e3577b147',
     'uri' => '/res/5ce73fb5/rsrc/image/sprite-payments.png',
     'disk' => '/rsrc/image/sprite-payments.png',
     'type' => 'png',
   ),
   '/rsrc/image/sprite-tokens.png' =>
   array(
     'hash' => '67c46fd75c885b76ecbfe46e71a476cc',
     'uri' => '/res/67c46fd7/rsrc/image/sprite-tokens.png',
     'disk' => '/rsrc/image/sprite-tokens.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/card-gradient.png' =>
   array(
     'hash' => '268b7fdd758d4bf99db8de6770aae8af',
     'uri' => '/res/268b7fdd/rsrc/image/texture/card-gradient.png',
     'disk' => '/rsrc/image/texture/card-gradient.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/dark-menu-hover.png' =>
   array(
     'hash' => 'a214a732644be34872e895b338b5d639',
     'uri' => '/res/a214a732/rsrc/image/texture/dark-menu-hover.png',
     'disk' => '/rsrc/image/texture/dark-menu-hover.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/dark-menu.png' =>
   array(
     'hash' => '41ee673a762cec48a154b456ad5ac204',
     'uri' => '/res/41ee673a/rsrc/image/texture/dark-menu.png',
     'disk' => '/rsrc/image/texture/dark-menu.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/grip.png' =>
   array(
     'hash' => 'f11bc231d241f1335cfca2933ad234e0',
     'uri' => '/res/f11bc231/rsrc/image/texture/grip.png',
     'disk' => '/rsrc/image/texture/grip.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/panel-header-gradient.png' =>
   array(
     'hash' => 'ad9204dd3ef5b12b645d80677d8ccead',
     'uri' => '/res/ad9204dd/rsrc/image/texture/panel-header-gradient.png',
     'disk' => '/rsrc/image/texture/panel-header-gradient.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/pholio-background.gif' =>
   array(
     'hash' => 'cf4561af116edf393dc583e5119fb412',
     'uri' => '/res/cf4561af/rsrc/image/texture/pholio-background.gif',
     'disk' => '/rsrc/image/texture/pholio-background.gif',
     'type' => 'gif',
   ),
   '/rsrc/image/texture/table_header.png' =>
   array(
     'hash' => '4ed3f56a30d3749e8f62052b9735a316',
     'uri' => '/res/4ed3f56a/rsrc/image/texture/table_header.png',
     'disk' => '/rsrc/image/texture/table_header.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/table_header_hover.png' =>
   array(
     'hash' => 'ea1f71a604e9b4859de1e25751540437',
     'uri' => '/res/ea1f71a6/rsrc/image/texture/table_header_hover.png',
     'disk' => '/rsrc/image/texture/table_header_hover.png',
     'type' => 'png',
   ),
   '/rsrc/image/texture/table_header_tall.png' =>
   array(
     'hash' => 'b05525601f78d759f1c5e47fd9c1a8aa',
     'uri' => '/res/b0552560/rsrc/image/texture/table_header_tall.png',
     'disk' => '/rsrc/image/texture/table_header_tall.png',
     'type' => 'png',
   ),
   '/rsrc/swf/aphlict.swf' =>
   array(
     'hash' => '4b9a9d83bebaf254f3790e87b45c1f92',
     'uri' => '/res/4b9a9d83/rsrc/swf/aphlict.swf',
     'disk' => '/rsrc/swf/aphlict.swf',
     'type' => 'swf',
   ),
   'aphront-attached-file-view-css' =>
   array(
     'uri' => '/res/a6ca5487/rsrc/css/aphront/attached-file-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/attached-file-view.css',
   ),
   'aphront-bars' =>
   array(
     'uri' => '/res/95a907d6/rsrc/css/aphront/aphront-bars.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/aphront-bars.css',
   ),
   'aphront-calendar-view-css' =>
   array(
     'uri' => '/res/ae6f5b54/rsrc/css/aphront/calendar-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/calendar-view.css',
   ),
   'aphront-contextbar-view-css' =>
   array(
     'uri' => '/res/ecfd5ba9/rsrc/css/aphront/context-bar.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/context-bar.css',
   ),
   'aphront-dark-console-css' =>
   array(
     'uri' => '/res/0d316573/rsrc/css/aphront/dark-console.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/dark-console.css',
   ),
   'aphront-dialog-view-css' =>
   array(
     'uri' => '/res/7060a2fe/rsrc/css/aphront/dialog-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/dialog-view.css',
   ),
   'aphront-error-view-css' =>
   array(
     'uri' => '/res/5f43a7c5/rsrc/css/aphront/error-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/error-view.css',
   ),
   'aphront-form-view-css' =>
   array(
-    'uri' => '/res/ed8c70fa/rsrc/css/aphront/form-view.css',
+    'uri' => '/res/d82ea207/rsrc/css/aphront/form-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/form-view.css',
   ),
   'aphront-list-filter-view-css' =>
   array(
     'uri' => '/res/639ea9e9/rsrc/css/aphront/list-filter-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/list-filter-view.css',
   ),
   'aphront-multi-column-view-css' =>
   array(
     'uri' => '/res/4e5ae0f3/rsrc/css/aphront/multi-column.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/multi-column.css',
   ),
   'aphront-notes' =>
   array(
     'uri' => '/res/5b8ebfa0/rsrc/css/aphront/aphront-notes.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/aphront-notes.css',
   ),
   'aphront-pager-view-css' =>
   array(
     'uri' => '/res/43fb79f0/rsrc/css/aphront/pager-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/pager-view.css',
   ),
   'aphront-panel-view-css' =>
   array(
     'uri' => '/res/5600525c/rsrc/css/aphront/panel-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/panel-view.css',
   ),
   'aphront-request-failure-view-css' =>
   array(
     'uri' => '/res/c9a43002/rsrc/css/aphront/request-failure-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/request-failure-view.css',
   ),
   'aphront-table-view-css' =>
   array(
     'uri' => '/res/d3c44c69/rsrc/css/aphront/table-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/table-view.css',
   ),
   'aphront-tokenizer-control-css' =>
   array(
-    'uri' => '/res/6e14867e/rsrc/css/aphront/tokenizer.css',
+    'uri' => '/res/db2c0f0e/rsrc/css/aphront/tokenizer.css',
     'type' => 'css',
     'requires' =>
     array(
       0 => 'aphront-typeahead-control-css',
     ),
     'disk' => '/rsrc/css/aphront/tokenizer.css',
   ),
   'aphront-tooltip-css' =>
   array(
     'uri' => '/res/3a7d8e07/rsrc/css/aphront/tooltip.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/tooltip.css',
   ),
   'aphront-two-column-view-css' =>
   array(
     'uri' => '/res/4263aa98/rsrc/css/aphront/two-column.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/two-column.css',
   ),
   'aphront-typeahead-control-css' =>
   array(
     'uri' => '/res/ef59c20c/rsrc/css/aphront/typeahead.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/typeahead.css',
   ),
   'config-options-css' =>
   array(
-    'uri' => '/res/01892229/rsrc/css/application/config/config-options.css',
+    'uri' => '/res/be77d5a6/rsrc/css/application/config/config-options.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/config/config-options.css',
   ),
   'conpherence-header-pane-css' =>
   array(
     'uri' => '/res/dc654fce/rsrc/css/application/conpherence/header-pane.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/header-pane.css',
   ),
   'conpherence-menu-css' =>
   array(
     'uri' => '/res/3a60b96c/rsrc/css/application/conpherence/menu.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/menu.css',
   ),
   'conpherence-message-pane-css' =>
   array(
     'uri' => '/res/6b49a2d9/rsrc/css/application/conpherence/message-pane.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/message-pane.css',
   ),
   'conpherence-update-css' =>
   array(
     'uri' => '/res/92094ed7/rsrc/css/application/conpherence/update.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/update.css',
   ),
   'conpherence-widget-pane-css' =>
   array(
     'uri' => '/res/197df36c/rsrc/css/application/conpherence/widget-pane.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/conpherence/widget-pane.css',
   ),
   'differential-changeset-view-css' =>
   array(
     'uri' => '/res/ea694162/rsrc/css/application/differential/changeset-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/changeset-view.css',
   ),
   'differential-core-view-css' =>
   array(
     'uri' => '/res/85fe5117/rsrc/css/application/differential/core.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/core.css',
   ),
   'differential-inline-comment-editor' =>
   array(
     'uri' => '/res/e0ad34ac/rsrc/js/application/differential/DifferentialInlineCommentEditor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-dom',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-install',
       4 => 'javelin-request',
       5 => 'javelin-workflow',
     ),
     'disk' => '/rsrc/js/application/differential/DifferentialInlineCommentEditor.js',
   ),
   'differential-local-commits-view-css' =>
   array(
     'uri' => '/res/224f3703/rsrc/css/application/differential/local-commits-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/local-commits-view.css',
   ),
   'differential-results-table-css' =>
   array(
     'uri' => '/res/aab3123c/rsrc/css/application/differential/results-table.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/results-table.css',
   ),
   'differential-revision-add-comment-css' =>
   array(
     'uri' => '/res/849748d3/rsrc/css/application/differential/add-comment.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/add-comment.css',
   ),
   'differential-revision-comment-css' =>
   array(
     'uri' => '/res/42c222f4/rsrc/css/application/differential/revision-comment.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/revision-comment.css',
   ),
   'differential-revision-comment-list-css' =>
   array(
     'uri' => '/res/3b31faa3/rsrc/css/application/differential/revision-comment-list.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/revision-comment-list.css',
   ),
   'differential-revision-history-css' =>
   array(
     'uri' => '/res/d41bc64c/rsrc/css/application/differential/revision-history.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/revision-history.css',
   ),
   'differential-revision-list-css' =>
   array(
     'uri' => '/res/fe6c4721/rsrc/css/application/differential/revision-list.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/revision-list.css',
   ),
   'differential-table-of-contents-css' =>
   array(
     'uri' => '/res/4fde8bfc/rsrc/css/application/differential/table-of-contents.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/differential/table-of-contents.css',
   ),
   'diffusion-commit-view-css' =>
   array(
     'uri' => '/res/b445944e/rsrc/css/application/diffusion/commit-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/diffusion/commit-view.css',
   ),
   'diffusion-icons-css' =>
   array(
     'uri' => '/res/b93e32c9/rsrc/css/application/diffusion/diffusion-icons.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/diffusion/diffusion-icons.css',
   ),
   'diffusion-source-css' =>
   array(
     'uri' => '/res/e76bcd50/rsrc/css/application/diffusion/diffusion-source.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/diffusion/diffusion-source.css',
   ),
   'global-drag-and-drop-css' =>
   array(
     'uri' => '/res/4e24cb65/rsrc/css/application/files/global-drag-and-drop.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/files/global-drag-and-drop.css',
   ),
   'herald-css' =>
   array(
     'uri' => '/res/2150a55d/rsrc/css/application/herald/herald.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/herald/herald.css',
   ),
   'herald-rule-editor' =>
   array(
-    'uri' => '/res/f35d7e23/rsrc/js/application/herald/HeraldRuleEditor.js',
+    'uri' => '/res/f8ee0e9c/rsrc/js/application/herald/HeraldRuleEditor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'multirow-row-manager',
       1 => 'javelin-install',
       2 => 'javelin-typeahead',
       3 => 'javelin-util',
       4 => 'javelin-dom',
       5 => 'javelin-tokenizer',
       6 => 'javelin-typeahead-preloaded-source',
       7 => 'javelin-stratcom',
       8 => 'javelin-json',
       9 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/application/herald/HeraldRuleEditor.js',
   ),
   'herald-test-css' =>
   array(
     'uri' => '/res/c0cd6bdb/rsrc/css/application/herald/herald-test.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/herald/herald-test.css',
   ),
   'inline-comment-summary-css' =>
   array(
     'uri' => '/res/338704f7/rsrc/css/application/diff/inline-comment-summary.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/diff/inline-comment-summary.css',
   ),
   'javelin-aphlict' =>
   array(
     'uri' => '/res/c0b9e53f/rsrc/js/application/aphlict/Aphlict.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/aphlict/Aphlict.js',
   ),
   'javelin-behavior' =>
   array(
     'uri' => '/res/adf7368b/rsrc/externals/javelin/lib/behavior.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/externals/javelin/lib/behavior.js',
   ),
   'javelin-behavior-aphlict-dropdown' =>
   array(
     'uri' => '/res/2418f448/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-request',
       2 => 'javelin-stratcom',
       3 => 'javelin-vector',
       4 => 'javelin-dom',
       5 => 'javelin-uri',
     ),
     'disk' => '/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js',
   ),
   'javelin-behavior-aphlict-listen' =>
   array(
     'uri' => '/res/6dde3f43/rsrc/js/application/aphlict/behavior-aphlict-listen.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-aphlict',
       2 => 'javelin-stratcom',
       3 => 'javelin-request',
       4 => 'javelin-uri',
       5 => 'javelin-dom',
       6 => 'javelin-json',
       7 => 'phabricator-notification',
     ),
     'disk' => '/rsrc/js/application/aphlict/behavior-aphlict-listen.js',
   ),
   'javelin-behavior-aphront-basic-tokenizer' =>
   array(
     'uri' => '/res/c7fd9a7b/rsrc/js/core/behavior-tokenizer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/core/behavior-tokenizer.js',
   ),
   'javelin-behavior-aphront-crop' =>
   array(
     'uri' => '/res/8c800f36/rsrc/js/core/behavior-crop.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
       3 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/js/core/behavior-crop.js',
   ),
   'javelin-behavior-aphront-drag-and-drop' =>
   array(
     'uri' => '/res/36335362/rsrc/js/core/behavior-drag-and-drop.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-file-upload',
       3 => 'phabricator-drag-and-drop-file-upload',
     ),
     'disk' => '/rsrc/js/core/behavior-drag-and-drop.js',
   ),
   'javelin-behavior-aphront-drag-and-drop-textarea' =>
   array(
     'uri' => '/res/a261f6e6/rsrc/js/core/behavior-drag-and-drop-textarea.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-drag-and-drop-file-upload',
       3 => 'phabricator-textareautils',
     ),
     'disk' => '/rsrc/js/core/behavior-drag-and-drop-textarea.js',
   ),
   'javelin-behavior-aphront-form-disable-on-submit' =>
   array(
     'uri' => '/res/a4a4ff07/rsrc/js/core/behavior-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-form.js',
   ),
   'javelin-behavior-aphront-more' =>
   array(
     'uri' => '/res/fae13324/rsrc/js/core/behavior-more.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-more.js',
   ),
   'javelin-behavior-audit-preview' =>
   array(
     'uri' => '/res/3048b073/rsrc/js/application/diffusion/behavior-audit-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-audit-preview.js',
   ),
   'javelin-behavior-balanced-payment-form' =>
   array(
     'uri' => '/res/6876492d/rsrc/js/application/phortune/behavior-balanced-payment-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phortune-credit-card-form',
     ),
     'disk' => '/rsrc/js/application/phortune/behavior-balanced-payment-form.js',
   ),
   'javelin-behavior-conpherence-drag-and-drop-photo' =>
   array(
     'uri' => '/res/9e3eb1cd/rsrc/js/application/conpherence/behavior-drag-and-drop-photo.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-workflow',
       3 => 'phabricator-drag-and-drop-file-upload',
     ),
     'disk' => '/rsrc/js/application/conpherence/behavior-drag-and-drop-photo.js',
   ),
   'javelin-behavior-conpherence-menu' =>
   array(
     'uri' => '/res/06bfc1a3/rsrc/js/application/conpherence/behavior-menu.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-request',
       4 => 'javelin-stratcom',
       5 => 'javelin-workflow',
       6 => 'javelin-behavior-device',
       7 => 'javelin-history',
       8 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/application/conpherence/behavior-menu.js',
   ),
   'javelin-behavior-conpherence-pontificate' =>
   array(
     'uri' => '/res/88ac3361/rsrc/js/application/conpherence/behavior-pontificate.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-workflow',
       4 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/conpherence/behavior-pontificate.js',
   ),
   'javelin-behavior-conpherence-widget-pane' =>
   array(
     'uri' => '/res/a9bcb950/rsrc/js/application/conpherence/behavior-widget-pane.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-workflow',
       4 => 'javelin-util',
       5 => 'phabricator-notification',
       6 => 'javelin-behavior-device',
     ),
     'disk' => '/rsrc/js/application/conpherence/behavior-widget-pane.js',
   ),
   'javelin-behavior-countdown-timer' =>
   array(
     'uri' => '/res/7468acb7/rsrc/js/application/countdown/timer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/countdown/timer.js',
   ),
   'javelin-behavior-dark-console' =>
   array(
     'uri' => '/res/1e2c7a5e/rsrc/js/core/behavior-dark-console.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-request',
       5 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/core/behavior-dark-console.js',
   ),
   'javelin-behavior-device' =>
   array(
     'uri' => '/res/12e43f5a/rsrc/js/core/behavior-device.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
       4 => 'javelin-install',
     ),
     'disk' => '/rsrc/js/core/behavior-device.js',
   ),
   'javelin-behavior-differential-accept-with-errors' =>
   array(
     'uri' => '/res/8fea67b3/rsrc/js/application/differential/behavior-accept-with-errors.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-accept-with-errors.js',
   ),
   'javelin-behavior-differential-add-reviewers-and-ccs' =>
   array(
     'uri' => '/res/27be3f81/rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js',
   ),
   'javelin-behavior-differential-comment-jump' =>
   array(
     'uri' => '/res/b580229b/rsrc/js/application/differential/behavior-comment-jump.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-util',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-comment-jump.js',
   ),
   'javelin-behavior-differential-diff-radios' =>
   array(
     'uri' => '/res/004cb66f/rsrc/js/application/differential/behavior-diff-radios.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-diff-radios.js',
   ),
   'javelin-behavior-differential-dropdown-menus' =>
   array(
     'uri' => '/res/4e3f1e2f/rsrc/js/application/differential/behavior-dropdown-menus.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-stratcom',
       4 => 'phabricator-dropdown-menu',
       5 => 'phabricator-menu-item',
       6 => 'phabricator-phtize',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-dropdown-menus.js',
   ),
   'javelin-behavior-differential-edit-inline-comments' =>
   array(
     'uri' => '/res/70c1f3a3/rsrc/js/application/differential/behavior-edit-inline-comments.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-util',
       4 => 'javelin-vector',
       5 => 'differential-inline-comment-editor',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-edit-inline-comments.js',
   ),
   'javelin-behavior-differential-feedback-preview' =>
   array(
     'uri' => '/res/5fbce8db/rsrc/js/application/differential/behavior-comment-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-request',
       4 => 'javelin-util',
       5 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-comment-preview.js',
   ),
   'javelin-behavior-differential-keyboard-navigation' =>
   array(
     'uri' => '/res/89e93cc9/rsrc/js/application/differential/behavior-keyboard-nav.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-keyboard-nav.js',
   ),
   'javelin-behavior-differential-populate' =>
   array(
     'uri' => '/res/526c2615/rsrc/js/application/differential/behavior-populate.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-workflow',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-stratcom',
       5 => 'javelin-behavior-device',
       6 => 'javelin-vector',
       7 => 'phabricator-tooltip',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-populate.js',
   ),
   'javelin-behavior-differential-show-all-comments' =>
   array(
     'uri' => '/res/5a26be1a/rsrc/js/application/differential/behavior-show-all-comments.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-show-all-comments.js',
   ),
   'javelin-behavior-differential-show-field-details' =>
   array(
     'uri' => '/res/8d57f459/rsrc/js/application/differential/behavior-show-field-details.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-show-field-details.js',
   ),
   'javelin-behavior-differential-show-more' =>
   array(
     'uri' => '/res/b9f93090/rsrc/js/application/differential/behavior-show-more.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-workflow',
       3 => 'javelin-util',
       4 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-show-more.js',
   ),
   'javelin-behavior-differential-toggle-files' =>
   array(
     'uri' => '/res/ae937207/rsrc/js/application/differential/behavior-toggle-files.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-toggle-files.js',
   ),
   'javelin-behavior-differential-user-select' =>
   array(
     'uri' => '/res/23c51a5d/rsrc/js/application/differential/behavior-user-select.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/differential/behavior-user-select.js',
   ),
   'javelin-behavior-diffusion-commit-branches' =>
   array(
     'uri' => '/res/1ede335a/rsrc/js/application/diffusion/behavior-commit-branches.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-commit-branches.js',
   ),
   'javelin-behavior-diffusion-commit-graph' =>
   array(
     'uri' => '/res/62bd2035/rsrc/js/application/diffusion/behavior-commit-graph.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-commit-graph.js',
   ),
   'javelin-behavior-diffusion-jump-to' =>
   array(
     'uri' => '/res/7c42e1ba/rsrc/js/application/diffusion/behavior-jump-to.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-util',
       2 => 'javelin-vector',
       3 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-jump-to.js',
   ),
   'javelin-behavior-diffusion-line-linker' =>
   array(
     'uri' => '/res/12866f13/rsrc/js/application/diffusion/behavior-line-linker.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-history',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-line-linker.js',
   ),
   'javelin-behavior-diffusion-pull-lastmodified' =>
   array(
     'uri' => '/res/29fe2790/rsrc/js/application/diffusion/behavior-pull-lastmodified.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-pull-lastmodified.js',
   ),
   'javelin-behavior-error-log' =>
   array(
     'uri' => '/res/acefdea7/rsrc/js/core/behavior-error-log.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-error-log.js',
   ),
   'javelin-behavior-fancy-datepicker' =>
   array(
     'uri' => '/res/9b67a0f4/rsrc/js/core/behavior-fancy-datepicker.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-stratcom',
       4 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/behavior-fancy-datepicker.js',
   ),
   'javelin-behavior-global-drag-and-drop' =>
   array(
     'uri' => '/res/528e18ed/rsrc/js/core/behavior-global-drag-and-drop.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-uri',
       3 => 'javelin-mask',
       4 => 'phabricator-drag-and-drop-file-upload',
     ),
     'disk' => '/rsrc/js/core/behavior-global-drag-and-drop.js',
   ),
   'javelin-behavior-herald-rule-editor' =>
   array(
     'uri' => '/res/77a0c945/rsrc/js/application/herald/herald-rule-editor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'herald-rule-editor',
       1 => 'javelin-behavior',
     ),
     'disk' => '/rsrc/js/application/herald/herald-rule-editor.js',
   ),
   'javelin-behavior-history-install' =>
   array(
     'uri' => '/res/9099a161/rsrc/js/core/behavior-history-install.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-history',
     ),
     'disk' => '/rsrc/js/core/behavior-history-install.js',
   ),
   'javelin-behavior-konami' =>
   array(
     'uri' => '/res/b7bb7c24/rsrc/js/core/behavior-konami.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/core/behavior-konami.js',
   ),
   'javelin-behavior-lightbox-attachments' =>
   array(
     'uri' => '/res/f2b17609/rsrc/js/core/behavior-lightbox-attachments.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-mask',
       4 => 'javelin-util',
       5 => 'phabricator-busy',
     ),
     'disk' => '/rsrc/js/core/behavior-lightbox-attachments.js',
   ),
   'javelin-behavior-line-chart' =>
   array(
     'uri' => '/res/1aa5ac88/rsrc/js/application/maniphest/behavior-line-chart.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-line-chart.js',
   ),
   'javelin-behavior-load-blame' =>
   array(
     'uri' => '/res/138e2961/rsrc/js/application/diffusion/behavior-load-blame.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/diffusion/behavior-load-blame.js',
   ),
   'javelin-behavior-maniphest-batch-editor' =>
   array(
     'uri' => '/res/00accaec/rsrc/js/application/maniphest/behavior-batch-editor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-prefab',
       4 => 'multirow-row-manager',
       5 => 'javelin-json',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-batch-editor.js',
   ),
   'javelin-behavior-maniphest-batch-selector' =>
   array(
     'uri' => '/res/f8cf3b84/rsrc/js/application/maniphest/behavior-batch-selector.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-batch-selector.js',
   ),
   'javelin-behavior-maniphest-description-preview' =>
   array(
     'uri' => '/res/8acd6f07/rsrc/js/application/maniphest/behavior-task-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-task-preview.js',
   ),
   'javelin-behavior-maniphest-subpriority-editor' =>
   array(
     'uri' => '/res/21b73c2a/rsrc/js/application/maniphest/behavior-subpriorityeditor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-magical-init',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
       4 => 'javelin-stratcom',
       5 => 'javelin-workflow',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-subpriorityeditor.js',
   ),
   'javelin-behavior-maniphest-transaction-controls' =>
   array(
     'uri' => '/res/62465554/rsrc/js/application/maniphest/behavior-transaction-controls.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-transaction-controls.js',
   ),
   'javelin-behavior-maniphest-transaction-expand' =>
   array(
     'uri' => '/res/966410de/rsrc/js/application/maniphest/behavior-transaction-expand.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-workflow',
       3 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-transaction-expand.js',
   ),
   'javelin-behavior-maniphest-transaction-preview' =>
   array(
     'uri' => '/res/855c9f0c/rsrc/js/application/maniphest/behavior-transaction-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-json',
       4 => 'javelin-stratcom',
       5 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/maniphest/behavior-transaction-preview.js',
   ),
   'javelin-behavior-owners-path-editor' =>
   array(
     'uri' => '/res/9cf78ffc/rsrc/js/application/owners/owners-path-editor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'owners-path-editor',
       1 => 'javelin-behavior',
     ),
     'disk' => '/rsrc/js/application/owners/owners-path-editor.js',
   ),
   'javelin-behavior-phabricator-active-nav' =>
   array(
     'uri' => '/res/326866c1/rsrc/js/core/behavior-active-nav.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-vector',
       3 => 'javelin-dom',
       4 => 'javelin-uri',
     ),
     'disk' => '/rsrc/js/core/behavior-active-nav.js',
   ),
   'javelin-behavior-phabricator-autofocus' =>
   array(
     'uri' => '/res/bf92b8d6/rsrc/js/core/behavior-autofocus.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-autofocus.js',
   ),
   'javelin-behavior-phabricator-file-tree' =>
   array(
     'uri' => '/res/e5bf93df/rsrc/js/core/behavior-file-tree.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'phabricator-keyboard-shortcut',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/core/behavior-file-tree.js',
   ),
   'javelin-behavior-phabricator-gesture' =>
   array(
     'uri' => '/res/16e1e77c/rsrc/js/core/behavior-gesture.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'javelin-vector',
       4 => 'javelin-dom',
       5 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/js/core/behavior-gesture.js',
   ),
   'javelin-behavior-phabricator-gesture-example' =>
   array(
     'uri' => '/res/da636e19/rsrc/js/application/uiexample/gesture-example.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-stratcom',
       1 => 'javelin-behavior',
       2 => 'javelin-vector',
       3 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/gesture-example.js',
   ),
   'javelin-behavior-phabricator-hovercards' =>
   array(
     'uri' => '/res/ed56d3c4/rsrc/js/core/behavior-hovercard.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'javelin-vector',
       4 => 'phabricator-hovercard',
     ),
     'disk' => '/rsrc/js/core/behavior-hovercard.js',
   ),
   'javelin-behavior-phabricator-keyboard-pager' =>
   array(
     'uri' => '/res/6a5445b8/rsrc/js/core/behavior-keyboard-pager.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-uri',
       2 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/core/behavior-keyboard-pager.js',
   ),
   'javelin-behavior-phabricator-keyboard-shortcuts' =>
   array(
     'uri' => '/res/b971e713/rsrc/js/core/behavior-keyboard-shortcuts.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-workflow',
       2 => 'javelin-json',
       3 => 'javelin-dom',
       4 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/core/behavior-keyboard-shortcuts.js',
   ),
   'javelin-behavior-phabricator-nav' =>
   array(
     'uri' => '/res/ede26aac/rsrc/js/core/behavior-phabricator-nav.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
       4 => 'javelin-magical-init',
       5 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/behavior-phabricator-nav.js',
   ),
   'javelin-behavior-phabricator-notification-example' =>
   array(
     'uri' => '/res/a6d51998/rsrc/js/application/uiexample/notification-example.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'phabricator-notification',
       1 => 'javelin-stratcom',
       2 => 'javelin-behavior',
       3 => 'javelin-uri',
     ),
     'disk' => '/rsrc/js/application/uiexample/notification-example.js',
   ),
   'javelin-behavior-phabricator-object-selector' =>
   array(
     'uri' => '/res/31145104/rsrc/js/core/behavior-object-selector.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-request',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/core/behavior-object-selector.js',
   ),
   'javelin-behavior-phabricator-oncopy' =>
   array(
     'uri' => '/res/c5839892/rsrc/js/core/behavior-oncopy.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-oncopy.js',
   ),
   'javelin-behavior-phabricator-remarkup-assist' =>
   array(
     'uri' => '/res/ddfb4eba/rsrc/js/core/behavior-phabricator-remarkup-assist.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'phabricator-textareautils',
       4 => 'javelin-workflow',
       5 => 'phabricator-notification',
       6 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/behavior-phabricator-remarkup-assist.js',
   ),
   'javelin-behavior-phabricator-reveal-content' =>
   array(
     'uri' => '/res/5f9da91f/rsrc/js/core/behavior-reveal-content.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-reveal-content.js',
   ),
   'javelin-behavior-phabricator-search-typeahead' =>
   array(
     'uri' => '/res/2662f34f/rsrc/js/core/behavior-search-typeahead.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-typeahead-ondemand-source',
       2 => 'javelin-typeahead',
       3 => 'javelin-dom',
       4 => 'javelin-uri',
       5 => 'javelin-util',
       6 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/js/core/behavior-search-typeahead.js',
   ),
   'javelin-behavior-phabricator-tooltips' =>
   array(
     'uri' => '/res/a0ac5320/rsrc/js/core/behavior-tooltip.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-behavior-device',
       2 => 'javelin-stratcom',
       3 => 'phabricator-tooltip',
     ),
     'disk' => '/rsrc/js/core/behavior-tooltip.js',
   ),
   'javelin-behavior-phabricator-transaction-comment-form' =>
   array(
     'uri' => '/res/acc3ada1/rsrc/js/application/transactions/behavior-transaction-comment-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/transactions/behavior-transaction-comment-form.js',
   ),
   'javelin-behavior-phabricator-transaction-list' =>
   array(
     'uri' => '/res/f1fbb474/rsrc/js/application/transactions/behavior-transaction-list.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-workflow',
       3 => 'javelin-dom',
       4 => 'javelin-fx',
     ),
     'disk' => '/rsrc/js/application/transactions/behavior-transaction-list.js',
   ),
   'javelin-behavior-phabricator-watch-anchor' =>
   array(
     'uri' => '/res/69a90817/rsrc/js/core/behavior-watch-anchor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/behavior-watch-anchor.js',
   ),
   'javelin-behavior-phame-post-preview' =>
   array(
     'uri' => '/res/ac4c503a/rsrc/js/application/phame/phame-post-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/phame/phame-post-preview.js',
   ),
   'javelin-behavior-pholio-mock-view' =>
   array(
     'uri' => '/res/ecf5f969/rsrc/js/application/pholio/behavior-pholio-mock-view.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
       4 => 'javelin-vector',
       5 => 'javelin-magical-init',
       6 => 'javelin-request',
       7 => 'javelin-history',
       8 => 'javelin-workflow',
       9 => 'javelin-mask',
       10 => 'javelin-behavior-device',
       11 => 'phabricator-keyboard-shortcut',
     ),
     'disk' => '/rsrc/js/application/pholio/behavior-pholio-mock-view.js',
   ),
   'javelin-behavior-phriction-document-preview' =>
   array(
     'uri' => '/res/f1665ecd/rsrc/js/application/phriction/phriction-document-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/phriction/phriction-document-preview.js',
   ),
   'javelin-behavior-ponder-feedback-preview' =>
   array(
     'uri' => '/res/2e802dd9/rsrc/js/application/ponder/behavior-comment-preview.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'phabricator-shaped-request',
     ),
     'disk' => '/rsrc/js/application/ponder/behavior-comment-preview.js',
   ),
   'javelin-behavior-ponder-votebox' =>
   array(
     'uri' => '/res/9d091af3/rsrc/js/application/ponder/behavior-votebox.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-util',
       3 => 'javelin-stratcom',
       4 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/application/ponder/behavior-votebox.js',
   ),
   'javelin-behavior-project-create' =>
   array(
     'uri' => '/res/e91f3f8f/rsrc/js/application/projects/behavior-project-create.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-workflow',
     ),
     'disk' => '/rsrc/js/application/projects/behavior-project-create.js',
   ),
   'javelin-behavior-refresh-csrf' =>
   array(
     'uri' => '/res/424ccc57/rsrc/js/core/behavior-refresh-csrf.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-request',
       1 => 'javelin-behavior',
       2 => 'javelin-dom',
       3 => 'phabricator-busy',
     ),
     'disk' => '/rsrc/js/core/behavior-refresh-csrf.js',
   ),
   'javelin-behavior-releeph-preview-branch' =>
   array(
     'uri' => '/res/a77ebc86/rsrc/js/application/releeph/releeph-preview-branch.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-uri',
       4 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/releeph/releeph-preview-branch.js',
   ),
   'javelin-behavior-releeph-request-state-change' =>
   array(
     'uri' => '/res/38f96ba8/rsrc/js/application/releeph/releeph-request-state-change.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-util',
       4 => 'phabricator-keyboard-shortcut',
       5 => 'phabricator-notification',
     ),
     'disk' => '/rsrc/js/application/releeph/releeph-request-state-change.js',
   ),
   'javelin-behavior-releeph-request-typeahead' =>
   array(
     'uri' => '/res/b52096e2/rsrc/js/application/releeph/releeph-request-typeahead.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-typeahead',
       4 => 'javelin-tokenizer',
       5 => 'javelin-typeahead-preloaded-source',
       6 => 'javelin-typeahead-ondemand-source',
       7 => 'javelin-dom',
       8 => 'javelin-stratcom',
       9 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/releeph/releeph-request-typeahead.js',
   ),
   'javelin-behavior-repository-crossreference' =>
   array(
     'uri' => '/res/4b5fab1c/rsrc/js/application/repository/repository-crossreference.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-uri',
     ),
     'disk' => '/rsrc/js/application/repository/repository-crossreference.js',
   ),
   'javelin-behavior-slowvote-embed' =>
   array(
     'uri' => '/res/eef0818f/rsrc/js/application/slowvote/behavior-slowvote-embed.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/slowvote/behavior-slowvote-embed.js',
   ),
   'javelin-behavior-stripe-payment-form' =>
   array(
     'uri' => '/res/c1a12d77/rsrc/js/application/phortune/behavior-stripe-payment-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phortune-credit-card-form',
     ),
     'disk' => '/rsrc/js/application/phortune/behavior-stripe-payment-form.js',
   ),
   'javelin-behavior-test-payment-form' =>
   array(
     'uri' => '/res/a8fe8616/rsrc/js/application/phortune/behavior-test-payment-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'phortune-credit-card-form',
     ),
     'disk' => '/rsrc/js/application/phortune/behavior-test-payment-form.js',
   ),
   'javelin-behavior-toggle-class' =>
   array(
     'uri' => '/res/79921b7f/rsrc/js/core/behavior-toggle-class.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-toggle-class.js',
   ),
   'javelin-behavior-view-placeholder' =>
   array(
     'uri' => '/res/faaf0af7/rsrc/externals/javelin/ext/view/ViewPlaceholder.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-dom',
       2 => 'javelin-view-renderer',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/ViewPlaceholder.js',
   ),
   'javelin-behavior-workflow' =>
   array(
     'uri' => '/res/425777cc/rsrc/js/core/behavior-workflow.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-behavior',
       1 => 'javelin-stratcom',
       2 => 'javelin-workflow',
       3 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/behavior-workflow.js',
   ),
   'javelin-color' =>
   array(
     'uri' => '/res/f17034de/rsrc/externals/javelin/ext/fx/Color.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/ext/fx/Color.js',
   ),
   'javelin-cookie' =>
   array(
     'uri' => '/res/ee0d399f/rsrc/externals/javelin/lib/Cookie.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Cookie.js',
   ),
   'javelin-dom' =>
   array(
     'uri' => '/res/64689b54/rsrc/externals/javelin/lib/DOM.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-magical-init',
       1 => 'javelin-install',
       2 => 'javelin-util',
       3 => 'javelin-vector',
       4 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/externals/javelin/lib/DOM.js',
   ),
   'javelin-dynval' =>
   array(
     'uri' => '/res/ea6f2a9d/rsrc/externals/javelin/ext/reactor/core/DynVal.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactornode',
       2 => 'javelin-util',
       3 => 'javelin-reactor',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/core/DynVal.js',
   ),
   'javelin-event' =>
   array(
     'uri' => '/res/0a4efce8/rsrc/externals/javelin/core/Event.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/core/Event.js',
   ),
   'javelin-fx' =>
   array(
     'uri' => '/res/c7cefec3/rsrc/externals/javelin/ext/fx/FX.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-color',
       1 => 'javelin-install',
       2 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/fx/FX.js',
   ),
   'javelin-history' =>
   array(
     'uri' => '/res/6c084b09/rsrc/externals/javelin/lib/History.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-stratcom',
       1 => 'javelin-install',
       2 => 'javelin-uri',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/History.js',
   ),
   'javelin-install' =>
   array(
     'uri' => '/res/904356c0/rsrc/externals/javelin/core/install.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-util',
       1 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/externals/javelin/core/install.js',
   ),
   'javelin-json' =>
   array(
     'uri' => '/res/cf83e72c/rsrc/externals/javelin/lib/JSON.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/lib/JSON.js',
   ),
   'javelin-magical-init' =>
   array(
     'uri' => '/res/7af6987f/rsrc/externals/javelin/core/init.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/javelin/core/init.js',
   ),
   'javelin-mask' =>
   array(
     'uri' => '/res/5c40c29f/rsrc/externals/javelin/lib/Mask.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Mask.js',
   ),
   'javelin-reactor' =>
   array(
     'uri' => '/res/c05f2658/rsrc/externals/javelin/ext/reactor/core/Reactor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/core/Reactor.js',
   ),
   'javelin-reactor-dom' =>
   array(
     'uri' => '/res/477f5d3b/rsrc/externals/javelin/ext/reactor/dom/RDOM.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-dom',
       1 => 'javelin-dynval',
       2 => 'javelin-reactornode',
       3 => 'javelin-install',
       4 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/dom/RDOM.js',
   ),
   'javelin-reactor-node-calmer' =>
   array(
     'uri' => '/res/a93dd6b6/rsrc/externals/javelin/ext/reactor/core/ReactorNodeCalmer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactor',
       2 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/core/ReactorNodeCalmer.js',
   ),
   'javelin-reactornode' =>
   array(
     'uri' => '/res/4eac475b/rsrc/externals/javelin/ext/reactor/core/ReactorNode.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-reactor',
       2 => 'javelin-util',
       3 => 'javelin-reactor-node-calmer',
     ),
     'disk' => '/rsrc/externals/javelin/ext/reactor/core/ReactorNode.js',
   ),
   'javelin-request' =>
   array(
     'uri' => '/res/a9fbc4ae/rsrc/externals/javelin/lib/Request.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-stratcom',
       2 => 'javelin-util',
       3 => 'javelin-behavior',
       4 => 'javelin-json',
       5 => 'javelin-dom',
       6 => 'javelin-resource',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Request.js',
   ),
   'javelin-resource' =>
   array(
     'uri' => '/res/1020e732/rsrc/externals/javelin/lib/Resource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-magical-init',
       1 => 'javelin-stratcom',
       2 => 'javelin-util',
       3 => 'javelin-uri',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Resource.js',
   ),
   'javelin-stratcom' =>
   array(
     'uri' => '/res/714946e7/rsrc/externals/javelin/core/Stratcom.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-event',
       2 => 'javelin-util',
       3 => 'javelin-magical-init',
     ),
     'disk' => '/rsrc/externals/javelin/core/Stratcom.js',
   ),
   'javelin-tokenizer' =>
   array(
     'uri' => '/res/8bccdb9e/rsrc/externals/javelin/lib/control/tokenizer/Tokenizer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-dom',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/tokenizer/Tokenizer.js',
   ),
   'javelin-typeahead' =>
   array(
     'uri' => '/res/fd79f758/rsrc/externals/javelin/lib/control/typeahead/Typeahead.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/Typeahead.js',
   ),
   'javelin-typeahead-composite-source' =>
   array(
     'uri' => '/res/487b3da2/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-typeahead-source',
       2 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js',
   ),
   'javelin-typeahead-normalizer' =>
   array(
     'uri' => '/res/5a4bd979/rsrc/externals/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js',
   ),
   'javelin-typeahead-ondemand-source' =>
   array(
     'uri' => '/res/9ab98c3d/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-request',
       4 => 'javelin-typeahead-source',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js',
   ),
   'javelin-typeahead-preloaded-source' =>
   array(
     'uri' => '/res/ffc234d1/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-request',
       4 => 'javelin-typeahead-source',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js',
   ),
   'javelin-typeahead-source' =>
   array(
     'uri' => '/res/df206a51/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-typeahead-normalizer',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadSource.js',
   ),
   'javelin-typeahead-static-source' =>
   array(
     'uri' => '/res/bb0a5173/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadStaticSource.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-typeahead-source',
     ),
     'disk' => '/rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadStaticSource.js',
   ),
   'javelin-uri' =>
   array(
     'uri' => '/res/a1e5cbb3/rsrc/externals/javelin/lib/URI.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
     ),
     'disk' => '/rsrc/externals/javelin/lib/URI.js',
   ),
   'javelin-util' =>
   array(
     'uri' => '/res/322fc289/rsrc/externals/javelin/core/util.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/javelin/core/util.js',
   ),
   'javelin-vector' =>
   array(
     'uri' => '/res/c8c64ab7/rsrc/externals/javelin/lib/Vector.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-event',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Vector.js',
   ),
   'javelin-view' =>
   array(
     'uri' => '/res/3022e596/rsrc/externals/javelin/ext/view/View.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/View.js',
   ),
   'javelin-view-html' =>
   array(
     'uri' => '/res/1b6e621c/rsrc/externals/javelin/ext/view/HTMLView.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-view',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/HTMLView.js',
   ),
   'javelin-view-interpreter' =>
   array(
     'uri' => '/res/39fe3ad3/rsrc/externals/javelin/ext/view/ViewInterpreter.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-view',
       1 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/ViewInterpreter.js',
   ),
   'javelin-view-renderer' =>
   array(
     'uri' => '/res/d2119b79/rsrc/externals/javelin/ext/view/ViewRenderer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/ViewRenderer.js',
   ),
   'javelin-view-visitor' =>
   array(
     'uri' => '/res/b1606cec/rsrc/externals/javelin/ext/view/ViewVisitor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
     ),
     'disk' => '/rsrc/externals/javelin/ext/view/ViewVisitor.js',
   ),
   'javelin-workflow' =>
   array(
     'uri' => '/res/73e8d0e2/rsrc/externals/javelin/lib/Workflow.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-stratcom',
       1 => 'javelin-request',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
       4 => 'javelin-install',
       5 => 'javelin-util',
       6 => 'javelin-mask',
       7 => 'javelin-uri',
     ),
     'disk' => '/rsrc/externals/javelin/lib/Workflow.js',
   ),
   'lightbox-attachment-css' =>
   array(
     'uri' => '/res/4657e15d/rsrc/css/aphront/lightbox-attachment.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/lightbox-attachment.css',
   ),
   'maniphest-batch-editor' =>
   array(
     'uri' => '/res/fb15d744/rsrc/css/application/maniphest/batch-editor.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/batch-editor.css',
   ),
   'maniphest-report-css' =>
   array(
     'uri' => '/res/2e633fcf/rsrc/css/application/maniphest/report.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/report.css',
   ),
   'maniphest-task-edit-css' =>
   array(
     'uri' => '/res/0760f768/rsrc/css/application/maniphest/task-edit.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/task-edit.css',
   ),
   'maniphest-task-summary-css' =>
   array(
     'uri' => '/res/7aa9e2eb/rsrc/css/application/maniphest/task-summary.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/task-summary.css',
   ),
   'maniphest-transaction-detail-css' =>
   array(
     'uri' => '/res/fb430d3e/rsrc/css/application/maniphest/transaction-detail.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/maniphest/transaction-detail.css',
   ),
   'multirow-row-manager' =>
   array(
     'uri' => '/res/408fae4f/rsrc/js/core/MultirowRowManager.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-stratcom',
       2 => 'javelin-dom',
       3 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/core/MultirowRowManager.js',
   ),
   'owners-path-editor' =>
   array(
     'uri' => '/res/29b68354/rsrc/js/application/owners/OwnersPathEditor.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'multirow-row-manager',
       1 => 'javelin-install',
       2 => 'path-typeahead',
       3 => 'javelin-dom',
       4 => 'javelin-util',
       5 => 'phabricator-prefab',
     ),
     'disk' => '/rsrc/js/application/owners/OwnersPathEditor.js',
   ),
   'owners-path-editor-css' =>
   array(
-    'uri' => '/res/4fcaabf6/rsrc/css/application/owners/owners-path-editor.css',
+    'uri' => '/res/1b9b5456/rsrc/css/application/owners/owners-path-editor.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/owners/owners-path-editor.css',
   ),
   'paste-css' =>
   array(
     'uri' => '/res/216fbfe9/rsrc/css/application/paste/paste.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/paste/paste.css',
   ),
   'path-typeahead' =>
   array(
     'uri' => '/res/50246fb6/rsrc/js/application/herald/PathTypeahead.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-typeahead',
       2 => 'javelin-dom',
       3 => 'javelin-request',
       4 => 'javelin-typeahead-ondemand-source',
       5 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/herald/PathTypeahead.js',
   ),
   'phabricator-action-header-view-css' =>
   array(
     'uri' => '/res/948f998b/rsrc/css/layout/phabricator-action-header-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-action-header-view.css',
   ),
   'phabricator-action-list-view-css' =>
   array(
     'uri' => '/res/f63afae7/rsrc/css/layout/phabricator-action-list-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-action-list-view.css',
   ),
   'phabricator-application-launch-view-css' =>
   array(
     'uri' => '/res/b04e66e6/rsrc/css/application/base/phabricator-application-launch-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/base/phabricator-application-launch-view.css',
   ),
   'phabricator-busy' =>
   array(
     'uri' => '/res/8e3f036d/rsrc/js/core/Busy.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/Busy.js',
   ),
   'phabricator-chatlog-css' =>
   array(
     'uri' => '/res/5542e247/rsrc/css/application/chatlog/chatlog.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/chatlog/chatlog.css',
   ),
   'phabricator-content-source-view-css' =>
   array(
     'uri' => '/res/8c738a93/rsrc/css/application/contentsource/content-source-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/contentsource/content-source-view.css',
   ),
   'phabricator-core-buttons-css' =>
   array(
     'uri' => '/res/da2e42df/rsrc/css/core/buttons.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/buttons.css',
   ),
   'phabricator-core-css' =>
   array(
     'uri' => '/res/dc204369/rsrc/css/core/core.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/core.css',
   ),
   'phabricator-countdown-css' =>
   array(
     'uri' => '/res/0f646281/rsrc/css/application/countdown/timer.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/countdown/timer.css',
   ),
   'phabricator-crumbs-view-css' =>
   array(
     'uri' => '/res/31ef131e/rsrc/css/layout/phabricator-crumbs-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-crumbs-view.css',
   ),
   'phabricator-directory-css' =>
   array(
     'uri' => '/res/61afca2b/rsrc/css/application/directory/phabricator-directory.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/directory/phabricator-directory.css',
   ),
   'phabricator-drag-and-drop-file-upload' =>
   array(
     'uri' => '/res/3991c1b6/rsrc/js/core/DragAndDropFileUpload.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
       3 => 'javelin-dom',
       4 => 'javelin-uri',
       5 => 'phabricator-file-upload',
     ),
     'disk' => '/rsrc/js/core/DragAndDropFileUpload.js',
   ),
   'phabricator-dropdown-menu' =>
   array(
     'uri' => '/res/efe00353/rsrc/js/core/DropdownMenu.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
       4 => 'javelin-stratcom',
       5 => 'phabricator-menu-item',
     ),
     'disk' => '/rsrc/js/core/DropdownMenu.js',
   ),
   'phabricator-fatal-config-template-css' =>
   array(
     'uri' => '/res/6e1a8d22/rsrc/css/application/config/config-template.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/config/config-template.css',
   ),
   'phabricator-feed-css' =>
   array(
     'uri' => '/res/f3e6e80b/rsrc/css/application/feed/feed.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/feed/feed.css',
   ),
   'phabricator-file-upload' =>
   array(
     'uri' => '/res/ee9664fd/rsrc/js/core/FileUpload.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'phabricator-notification',
     ),
     'disk' => '/rsrc/js/core/FileUpload.js',
   ),
   'phabricator-filetree-view-css' =>
   array(
     'uri' => '/res/c912ed91/rsrc/css/layout/phabricator-filetree-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-filetree-view.css',
   ),
   'phabricator-flag-css' =>
   array(
     'uri' => '/res/237234d7/rsrc/css/application/flag/flag.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/flag/flag.css',
   ),
   'phabricator-form-view-css' =>
   array(
-    'uri' => '/res/676b1ad2/rsrc/css/layout/phabricator-form-view.css',
+    'uri' => '/res/ba05f8ba/rsrc/css/layout/phabricator-form-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-form-view.css',
   ),
   'phabricator-header-view-css' =>
   array(
     'uri' => '/res/585b771c/rsrc/css/layout/phabricator-header-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-header-view.css',
   ),
   'phabricator-hovercard' =>
   array(
     'uri' => '/res/2cf2c195/rsrc/js/core/Hovercard.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-vector',
       3 => 'javelin-request',
       4 => 'javelin-uri',
     ),
     'disk' => '/rsrc/js/core/Hovercard.js',
   ),
   'phabricator-hovercard-view-css' =>
   array(
     'uri' => '/res/80683f88/rsrc/css/layout/phabricator-hovercard-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-hovercard-view.css',
   ),
   'phabricator-jump-nav' =>
   array(
-    'uri' => '/res/745c0e89/rsrc/css/application/directory/phabricator-jump-nav.css',
+    'uri' => '/res/37ab43b8/rsrc/css/application/directory/phabricator-jump-nav.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/directory/phabricator-jump-nav.css',
   ),
   'phabricator-keyboard-shortcut' =>
   array(
     'uri' => '/res/44747afd/rsrc/js/core/KeyboardShortcut.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'phabricator-keyboard-shortcut-manager',
     ),
     'disk' => '/rsrc/js/core/KeyboardShortcut.js',
   ),
   'phabricator-keyboard-shortcut-manager' =>
   array(
     'uri' => '/res/bf9bc02a/rsrc/js/core/KeyboardShortcutManager.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-stratcom',
       3 => 'javelin-dom',
       4 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/KeyboardShortcutManager.js',
   ),
   'phabricator-main-menu-view' =>
   array(
-    'uri' => '/res/63316e1a/rsrc/css/application/base/main-menu-view.css',
+    'uri' => '/res/f4cfb781/rsrc/css/application/base/main-menu-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/base/main-menu-view.css',
   ),
   'phabricator-menu-item' =>
   array(
     'uri' => '/res/2add4594/rsrc/js/core/DropdownMenuItem.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/core/DropdownMenuItem.js',
   ),
   'phabricator-nav-view-css' =>
   array(
     'uri' => '/res/fb026f2e/rsrc/css/aphront/phabricator-nav-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/phabricator-nav-view.css',
   ),
   'phabricator-notification' =>
   array(
     'uri' => '/res/0764da14/rsrc/js/core/Notification.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-stratcom',
       3 => 'javelin-util',
       4 => 'phabricator-notification-css',
     ),
     'disk' => '/rsrc/js/core/Notification.js',
   ),
   'phabricator-notification-css' =>
   array(
     'uri' => '/res/664b9bec/rsrc/css/aphront/notification.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/notification.css',
   ),
   'phabricator-notification-menu-css' =>
   array(
     'uri' => '/res/bc245b67/rsrc/css/application/base/notification-menu.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/base/notification-menu.css',
   ),
   'phabricator-object-item-list-view-css' =>
   array(
     'uri' => '/res/439ecf73/rsrc/css/layout/phabricator-object-item-list-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-object-item-list-view.css',
   ),
   'phabricator-object-list-view-css' =>
   array(
     'uri' => '/res/4f183668/rsrc/css/application/projects/phabricator-object-list-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/projects/phabricator-object-list-view.css',
   ),
   'phabricator-object-selector-css' =>
   array(
-    'uri' => '/res/7eb4c705/rsrc/css/application/objectselector/object-selector.css',
+    'uri' => '/res/502f1bb9/rsrc/css/application/objectselector/object-selector.css',
     'type' => 'css',
     'requires' =>
     array(
       0 => 'aphront-dialog-view-css',
     ),
     'disk' => '/rsrc/css/application/objectselector/object-selector.css',
   ),
   'phabricator-phtize' =>
   array(
     'uri' => '/res/50a80ff1/rsrc/js/core/phtize.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/core/phtize.js',
   ),
   'phabricator-pinboard-view-css' =>
   array(
     'uri' => '/res/61ecd7cf/rsrc/css/layout/phabricator-pinboard-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-pinboard-view.css',
   ),
   'phabricator-prefab' =>
   array(
     'uri' => '/res/513c4313/rsrc/js/core/Prefab.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-typeahead',
       4 => 'javelin-tokenizer',
       5 => 'javelin-typeahead-preloaded-source',
       6 => 'javelin-typeahead-ondemand-source',
       7 => 'javelin-dom',
       8 => 'javelin-stratcom',
       9 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/core/Prefab.js',
   ),
   'phabricator-profile-css' =>
   array(
     'uri' => '/res/87229261/rsrc/css/application/profile/profile-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/profile/profile-view.css',
   ),
   'phabricator-profile-header-css' =>
   array(
     'uri' => '/res/a03c1e20/rsrc/css/application/profile/profile-header-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/profile/profile-header-view.css',
   ),
   'phabricator-project-tag-css' =>
   array(
     'uri' => '/res/1b5efcb2/rsrc/css/application/projects/project-tag.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/projects/project-tag.css',
   ),
   'phabricator-property-list-view-css' =>
   array(
     'uri' => '/res/a04cc81d/rsrc/css/layout/phabricator-property-list-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-property-list-view.css',
   ),
   'phabricator-remarkup-css' =>
   array(
-    'uri' => '/res/f9bbca2f/rsrc/css/core/remarkup.css',
+    'uri' => '/res/07cab525/rsrc/css/core/remarkup.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/remarkup.css',
   ),
   'phabricator-search-results-css' =>
   array(
     'uri' => '/res/f8a86e27/rsrc/css/application/search/search-results.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/search/search-results.css',
   ),
   'phabricator-settings-css' =>
   array(
     'uri' => '/res/fb9d017f/rsrc/css/application/settings/settings.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/settings/settings.css',
   ),
   'phabricator-shaped-request' =>
   array(
     'uri' => '/res/d173af85/rsrc/js/core/ShapedRequest.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-request',
     ),
     'disk' => '/rsrc/js/core/ShapedRequest.js',
   ),
   'phabricator-side-menu-view-css' =>
   array(
     'uri' => '/res/28a1e092/rsrc/css/layout/phabricator-side-menu-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-side-menu-view.css',
   ),
   'phabricator-slowvote-css' =>
   array(
     'uri' => '/res/d1c2e05a/rsrc/css/application/slowvote/slowvote.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/slowvote/slowvote.css',
   ),
   'phabricator-source-code-view-css' =>
   array(
     'uri' => '/res/979d5280/rsrc/css/layout/phabricator-source-code-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-source-code-view.css',
   ),
   'phabricator-standard-page-view' =>
   array(
     'uri' => '/res/70fa2da4/rsrc/css/application/base/standard-page-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/base/standard-page-view.css',
   ),
   'phabricator-tag-view-css' =>
   array(
     'uri' => '/res/e10bf844/rsrc/css/layout/phabricator-tag-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-tag-view.css',
   ),
   'phabricator-textareautils' =>
   array(
     'uri' => '/res/03c03e8b/rsrc/js/core/TextAreaUtils.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
     ),
     'disk' => '/rsrc/js/core/TextAreaUtils.js',
   ),
   'phabricator-timeline-view-css' =>
   array(
     'uri' => '/res/5517bf1a/rsrc/css/layout/phabricator-timeline-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-timeline-view.css',
   ),
   'phabricator-tooltip' =>
   array(
     'uri' => '/res/1dc73d91/rsrc/js/core/ToolTip.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-util',
       2 => 'javelin-dom',
       3 => 'javelin-vector',
     ),
     'disk' => '/rsrc/js/core/ToolTip.js',
   ),
   'phabricator-transaction-view-css' =>
   array(
     'uri' => '/res/00be4b1a/rsrc/css/aphront/transaction.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/transaction.css',
   ),
   'phabricator-ui-example-css' =>
   array(
     'uri' => '/res/376ab671/rsrc/css/application/uiexample/example.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/uiexample/example.css',
   ),
   'phabricator-uiexample-javelin-view' =>
   array(
     'uri' => '/res/a2ce2cfc/rsrc/js/application/uiexample/JavelinViewExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-view',
       2 => 'javelin-util',
       3 => 'javelin-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/JavelinViewExample.js',
   ),
   'phabricator-uiexample-reactor-button' =>
   array(
     'uri' => '/res/142127f6/rsrc/js/application/uiexample/ReactorButtonExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-view',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorButtonExample.js',
   ),
   'phabricator-uiexample-reactor-checkbox' =>
   array(
     'uri' => '/res/c75cb9e9/rsrc/js/application/uiexample/ReactorCheckboxExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-view',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorCheckboxExample.js',
   ),
   'phabricator-uiexample-reactor-focus' =>
   array(
     'uri' => '/res/3cc992eb/rsrc/js/application/uiexample/ReactorFocusExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-view',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorFocusExample.js',
   ),
   'phabricator-uiexample-reactor-input' =>
   array(
     'uri' => '/res/4953da16/rsrc/js/application/uiexample/ReactorInputExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-view',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-reactor-dom',
       5 => 'javelin-view-html',
       6 => 'javelin-view-interpreter',
       7 => 'javelin-view-renderer',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorInputExample.js',
   ),
   'phabricator-uiexample-reactor-mouseover' =>
   array(
     'uri' => '/res/52a355b6/rsrc/js/application/uiexample/ReactorMouseoverExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-view',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorMouseoverExample.js',
   ),
   'phabricator-uiexample-reactor-radio' =>
   array(
     'uri' => '/res/ae87f3af/rsrc/js/application/uiexample/ReactorRadioExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-view',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorRadioExample.js',
   ),
   'phabricator-uiexample-reactor-select' =>
   array(
     'uri' => '/res/23cb448a/rsrc/js/application/uiexample/ReactorSelectExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-view',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorSelectExample.js',
   ),
   'phabricator-uiexample-reactor-sendclass' =>
   array(
     'uri' => '/res/8cd34264/rsrc/js/application/uiexample/ReactorSendClassExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-view',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorSendClassExample.js',
   ),
   'phabricator-uiexample-reactor-sendproperties' =>
   array(
     'uri' => '/res/18af54aa/rsrc/js/application/uiexample/ReactorSendPropertiesExample.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-view',
       2 => 'javelin-util',
       3 => 'javelin-dom',
       4 => 'javelin-reactor-dom',
     ),
     'disk' => '/rsrc/js/application/uiexample/ReactorSendPropertiesExample.js',
   ),
   'phabricator-workboard-view-css' =>
   array(
     'uri' => '/res/e48df9e8/rsrc/css/layout/phabricator-workboard-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-workboard-view.css',
   ),
   'phabricator-workpanel-view-css' =>
   array(
     'uri' => '/res/ff5d5b26/rsrc/css/layout/phabricator-workpanel-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/layout/phabricator-workpanel-view.css',
   ),
   'phabricator-zindex-css' =>
   array(
     'uri' => '/res/d4048e34/rsrc/css/core/z-index.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/z-index.css',
   ),
   'phame-css' =>
   array(
     'uri' => '/res/8e3edb71/rsrc/css/application/phame/phame.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/phame/phame.css',
   ),
   'pholio-css' =>
   array(
     'uri' => '/res/0daaf1ca/rsrc/css/application/pholio/pholio.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/pholio/pholio.css',
   ),
   'pholio-inline-comments-css' =>
   array(
     'uri' => '/res/006fc575/rsrc/css/application/pholio/pholio-inline-comments.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/pholio/pholio-inline-comments.css',
   ),
   'phortune-credit-card-form' =>
   array(
     'uri' => '/res/bc948778/rsrc/js/application/phortune/phortune-credit-card-form.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-install',
       1 => 'javelin-dom',
       2 => 'javelin-json',
       3 => 'javelin-workflow',
       4 => 'javelin-util',
     ),
     'disk' => '/rsrc/js/application/phortune/phortune-credit-card-form.js',
   ),
   'phortune-credit-card-form-css' =>
   array(
     'uri' => '/res/563c8c6d/rsrc/css/application/phortune/phortune-credit-card-form.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/phortune/phortune-credit-card-form.css',
   ),
   'phrequent-css' =>
   array(
     'uri' => '/res/9d6f3eb7/rsrc/css/application/phrequent/phrequent.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/phrequent/phrequent.css',
   ),
   'phriction-document-css' =>
   array(
     'uri' => '/res/521172c8/rsrc/css/application/phriction/phriction-document-css.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/phriction/phriction-document-css.css',
   ),
   'phui-box-css' =>
   array(
     'uri' => '/res/1b741073/rsrc/css/phui/phui-box.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-box.css',
   ),
   'phui-feed-story-css' =>
   array(
     'uri' => '/res/d6ccc638/rsrc/css/phui/phui-feed-story.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-feed-story.css',
   ),
+  'phui-form-css' =>
+  array(
+    'uri' => '/res/e29e84fb/rsrc/css/phui/phui-form.css',
+    'type' => 'css',
+    'requires' =>
+    array(
+    ),
+    'disk' => '/rsrc/css/phui/phui-form.css',
+  ),
   'phui-icon-view-css' =>
   array(
     'uri' => '/res/2aa71cc6/rsrc/css/phui/phui-icon.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-icon.css',
   ),
   'phui-text-css' =>
   array(
     'uri' => '/res/ca884ca6/rsrc/css/phui/phui-text.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/phui/phui-text.css',
   ),
   'ponder-comment-table-css' =>
   array(
     'uri' => '/res/a1bb9056/rsrc/css/application/ponder/comments.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/ponder/comments.css',
   ),
   'ponder-core-view-css' =>
   array(
     'uri' => '/res/3a2d5e18/rsrc/css/application/ponder/core.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/ponder/core.css',
   ),
   'ponder-feed-view-css' =>
   array(
     'uri' => '/res/df22bd20/rsrc/css/application/ponder/feed.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/ponder/feed.css',
   ),
   'ponder-post-css' =>
   array(
     'uri' => '/res/013b9e2c/rsrc/css/application/ponder/post.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/ponder/post.css',
   ),
   'ponder-vote-css' =>
   array(
     'uri' => '/res/ea8316c2/rsrc/css/application/ponder/vote.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/ponder/vote.css',
   ),
   'raphael-core' =>
   array(
     'uri' => '/res/0939b925/rsrc/externals/raphael/raphael.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/raphael/raphael.js',
   ),
   'raphael-g' =>
   array(
     'uri' => '/res/e14432ce/rsrc/externals/raphael/g.raphael.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/raphael/g.raphael.js',
   ),
   'raphael-g-line' =>
   array(
     'uri' => '/res/2c9e6746/rsrc/externals/raphael/g.raphael.line.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/externals/raphael/g.raphael.line.js',
   ),
   'releeph-branch' =>
   array(
     'uri' => '/res/6ad6420d/rsrc/css/application/releeph/releeph-branch.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-branch.css',
   ),
   'releeph-colors' =>
   array(
     'uri' => '/res/dff4b26a/rsrc/css/application/releeph/releeph-colors.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-colors.css',
   ),
   'releeph-core' =>
   array(
     'uri' => '/res/853f4a73/rsrc/css/application/releeph/releeph-core.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-core.css',
   ),
   'releeph-intents' =>
   array(
     'uri' => '/res/4e73e9dd/rsrc/css/application/releeph/releeph-intents.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-intents.css',
   ),
   'releeph-preview-branch' =>
   array(
     'uri' => '/res/65e5dece/rsrc/css/application/releeph/releeph-preview-branch.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-preview-branch.css',
   ),
   'releeph-project' =>
   array(
     'uri' => '/res/b9376e59/rsrc/css/application/releeph/releeph-project.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-project.css',
   ),
   'releeph-request-differential-create-dialog' =>
   array(
     'uri' => '/res/4df30ce1/rsrc/css/application/releeph/releeph-request-differential-create-dialog.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-request-differential-create-dialog.css',
   ),
   'releeph-request-typeahead-css' =>
   array(
     'uri' => '/res/9c9a1acf/rsrc/css/application/releeph/releeph-request-typeahead.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-request-typeahead.css',
   ),
   'releeph-status' =>
   array(
     'uri' => '/res/588529df/rsrc/css/application/releeph/releeph-status.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/releeph/releeph-status.css',
   ),
   'setup-issue-css' =>
   array(
     'uri' => '/res/efbb3673/rsrc/css/application/config/setup-issue.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/config/setup-issue.css',
   ),
   'spacing-css' =>
   array(
     'uri' => '/res/59e4c9b1/rsrc/css/core/spacing.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/spacing.css',
   ),
   'sprite-actions-css' =>
   array(
     'uri' => '/res/1f670307/rsrc/css/sprite-actions.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-actions.css',
   ),
   'sprite-apps-css' =>
   array(
     'uri' => '/res/edc99ce1/rsrc/css/sprite-apps.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-apps.css',
   ),
   'sprite-apps-large-css' =>
   array(
     'uri' => '/res/40397d93/rsrc/css/sprite-apps-large.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-apps-large.css',
   ),
   'sprite-apps-xlarge-css' =>
   array(
     'uri' => '/res/33a8e644/rsrc/css/sprite-apps-xlarge.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-apps-xlarge.css',
   ),
   'sprite-conpherence-css' =>
   array(
     'uri' => '/res/f6793453/rsrc/css/sprite-conpherence.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-conpherence.css',
   ),
   'sprite-docs-css' =>
   array(
     'uri' => '/res/b32f93bc/rsrc/css/sprite-docs.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-docs.css',
   ),
   'sprite-gradient-css' =>
   array(
     'uri' => '/res/fdc4dd44/rsrc/css/sprite-gradient.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-gradient.css',
   ),
   'sprite-icon-css' =>
   array(
     'uri' => '/res/8261da31/rsrc/css/sprite-icon.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-icon.css',
   ),
   'sprite-menu-css' =>
   array(
     'uri' => '/res/e4e428f9/rsrc/css/sprite-menu.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-menu.css',
   ),
   'sprite-minicons-css' =>
   array(
     'uri' => '/res/2dba70cd/rsrc/css/sprite-minicons.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-minicons.css',
   ),
   'sprite-payments-css' =>
   array(
     'uri' => '/res/876697b6/rsrc/css/sprite-payments.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-payments.css',
   ),
   'sprite-tokens-css' =>
   array(
     'uri' => '/res/edb4e341/rsrc/css/sprite-tokens.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/sprite-tokens.css',
   ),
   'syntax-highlighting-css' =>
   array(
     'uri' => '/res/cb3b9dc0/rsrc/css/core/syntax.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/core/syntax.css',
   ),
   'tokens-css' =>
   array(
     'uri' => '/res/1699df7d/rsrc/css/application/tokens/tokens.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/application/tokens/tokens.css',
   ),
 ), array(
   'packages' =>
   array(
-    '25d66007' =>
+    '56e0b740' =>
     array(
       'name' => 'core.pkg.css',
       'symbols' =>
       array(
         0 => 'phabricator-core-css',
         1 => 'phabricator-zindex-css',
         2 => 'phabricator-core-buttons-css',
         3 => 'phabricator-standard-page-view',
         4 => 'aphront-dialog-view-css',
         5 => 'aphront-form-view-css',
         6 => 'aphront-panel-view-css',
         7 => 'aphront-table-view-css',
         8 => 'aphront-tokenizer-control-css',
         9 => 'aphront-typeahead-control-css',
         10 => 'aphront-list-filter-view-css',
         11 => 'phabricator-directory-css',
         12 => 'phabricator-jump-nav',
         13 => 'phabricator-remarkup-css',
         14 => 'syntax-highlighting-css',
         15 => 'aphront-pager-view-css',
         16 => 'phabricator-transaction-view-css',
         17 => 'aphront-tooltip-css',
         18 => 'phabricator-flag-css',
         19 => 'aphront-error-view-css',
         20 => 'sprite-icon-css',
         21 => 'sprite-gradient-css',
         22 => 'sprite-menu-css',
         23 => 'sprite-apps-large-css',
         24 => 'phabricator-main-menu-view',
         25 => 'phabricator-notification-css',
         26 => 'phabricator-notification-menu-css',
         27 => 'lightbox-attachment-css',
         28 => 'phabricator-header-view-css',
         29 => 'phabricator-form-view-css',
         30 => 'phabricator-filetree-view-css',
         31 => 'phabricator-nav-view-css',
         32 => 'phabricator-side-menu-view-css',
         33 => 'phabricator-crumbs-view-css',
         34 => 'phabricator-object-item-list-view-css',
         35 => 'global-drag-and-drop-css',
       ),
-      'uri' => '/res/pkg/25d66007/core.pkg.css',
+      'uri' => '/res/pkg/56e0b740/core.pkg.css',
       'type' => 'css',
     ),
     '26980a1c' =>
     array(
       'name' => 'core.pkg.js',
       'symbols' =>
       array(
         0 => 'javelin-behavior-aphront-basic-tokenizer',
         1 => 'javelin-behavior-workflow',
         2 => 'javelin-behavior-aphront-form-disable-on-submit',
         3 => 'phabricator-keyboard-shortcut-manager',
         4 => 'phabricator-keyboard-shortcut',
         5 => 'javelin-behavior-phabricator-keyboard-shortcuts',
         6 => 'javelin-behavior-refresh-csrf',
         7 => 'javelin-behavior-phabricator-watch-anchor',
         8 => 'javelin-behavior-phabricator-autofocus',
         9 => 'phabricator-menu-item',
         10 => 'phabricator-dropdown-menu',
         11 => 'phabricator-phtize',
         12 => 'javelin-behavior-phabricator-oncopy',
         13 => 'phabricator-tooltip',
         14 => 'javelin-behavior-phabricator-tooltips',
         15 => 'phabricator-prefab',
         16 => 'javelin-behavior-device',
         17 => 'javelin-behavior-toggle-class',
         18 => 'javelin-behavior-lightbox-attachments',
         19 => 'phabricator-busy',
         20 => 'javelin-aphlict',
         21 => 'phabricator-notification',
         22 => 'javelin-behavior-aphlict-listen',
         23 => 'javelin-behavior-phabricator-search-typeahead',
         24 => 'javelin-behavior-konami',
         25 => 'javelin-behavior-aphlict-dropdown',
         26 => 'javelin-behavior-history-install',
         27 => 'javelin-behavior-phabricator-gesture',
         28 => 'javelin-behavior-phabricator-active-nav',
         29 => 'javelin-behavior-phabricator-nav',
         30 => 'javelin-behavior-phabricator-remarkup-assist',
         31 => 'phabricator-textareautils',
         32 => 'phabricator-file-upload',
         33 => 'javelin-behavior-global-drag-and-drop',
         34 => 'javelin-behavior-phabricator-reveal-content',
       ),
       'uri' => '/res/pkg/26980a1c/core.pkg.js',
       'type' => 'js',
     ),
     '4ccfeb47' =>
     array(
       'name' => 'darkconsole.pkg.js',
       'symbols' =>
       array(
         0 => 'javelin-behavior-dark-console',
         1 => 'javelin-behavior-error-log',
       ),
       'uri' => '/res/pkg/4ccfeb47/darkconsole.pkg.js',
       'type' => 'js',
     ),
-    '8aaacd1b' =>
+    '19d2a41f' =>
     array(
       'name' => 'differential.pkg.css',
       'symbols' =>
       array(
         0 => 'differential-core-view-css',
         1 => 'differential-changeset-view-css',
         2 => 'differential-results-table-css',
         3 => 'differential-revision-history-css',
         4 => 'differential-revision-list-css',
         5 => 'differential-table-of-contents-css',
         6 => 'differential-revision-comment-css',
         7 => 'differential-revision-add-comment-css',
         8 => 'differential-revision-comment-list-css',
         9 => 'phabricator-object-selector-css',
         10 => 'phabricator-content-source-view-css',
         11 => 'differential-local-commits-view-css',
         12 => 'inline-comment-summary-css',
       ),
-      'uri' => '/res/pkg/8aaacd1b/differential.pkg.css',
+      'uri' => '/res/pkg/19d2a41f/differential.pkg.css',
       'type' => 'css',
     ),
     '27c55b30' =>
     array(
       'name' => 'differential.pkg.js',
       'symbols' =>
       array(
         0 => 'phabricator-drag-and-drop-file-upload',
         1 => 'phabricator-shaped-request',
         2 => 'javelin-behavior-differential-feedback-preview',
         3 => 'javelin-behavior-differential-edit-inline-comments',
         4 => 'javelin-behavior-differential-populate',
         5 => 'javelin-behavior-differential-show-more',
         6 => 'javelin-behavior-differential-diff-radios',
         7 => 'javelin-behavior-differential-accept-with-errors',
         8 => 'javelin-behavior-differential-comment-jump',
         9 => 'javelin-behavior-differential-add-reviewers-and-ccs',
         10 => 'javelin-behavior-differential-keyboard-navigation',
         11 => 'javelin-behavior-aphront-drag-and-drop',
         12 => 'javelin-behavior-aphront-drag-and-drop-textarea',
         13 => 'javelin-behavior-phabricator-object-selector',
         14 => 'javelin-behavior-repository-crossreference',
         15 => 'javelin-behavior-load-blame',
         16 => 'differential-inline-comment-editor',
         17 => 'javelin-behavior-differential-dropdown-menus',
         18 => 'javelin-behavior-differential-toggle-files',
         19 => 'javelin-behavior-differential-user-select',
       ),
       'uri' => '/res/pkg/27c55b30/differential.pkg.js',
       'type' => 'js',
     ),
     'c8ce2d88' =>
     array(
       'name' => 'diffusion.pkg.css',
       'symbols' =>
       array(
         0 => 'diffusion-commit-view-css',
         1 => 'diffusion-icons-css',
       ),
       'uri' => '/res/pkg/c8ce2d88/diffusion.pkg.css',
       'type' => 'css',
     ),
     'f96657b8' =>
     array(
       'name' => 'diffusion.pkg.js',
       'symbols' =>
       array(
         0 => 'javelin-behavior-diffusion-pull-lastmodified',
         1 => 'javelin-behavior-diffusion-commit-graph',
         2 => 'javelin-behavior-audit-preview',
       ),
       'uri' => '/res/pkg/f96657b8/diffusion.pkg.js',
       'type' => 'js',
     ),
     '7d174323' =>
     array(
       'name' => 'javelin.pkg.js',
       'symbols' =>
       array(
         0 => 'javelin-util',
         1 => 'javelin-install',
         2 => 'javelin-event',
         3 => 'javelin-stratcom',
         4 => 'javelin-behavior',
         5 => 'javelin-resource',
         6 => 'javelin-request',
         7 => 'javelin-vector',
         8 => 'javelin-dom',
         9 => 'javelin-json',
         10 => 'javelin-uri',
         11 => 'javelin-workflow',
         12 => 'javelin-mask',
         13 => 'javelin-typeahead',
         14 => 'javelin-typeahead-normalizer',
         15 => 'javelin-typeahead-source',
         16 => 'javelin-typeahead-preloaded-source',
         17 => 'javelin-typeahead-ondemand-source',
         18 => 'javelin-tokenizer',
       ),
       'uri' => '/res/pkg/7d174323/javelin.pkg.js',
       'type' => 'js',
     ),
     '6b1fccc6' =>
     array(
       'name' => 'maniphest.pkg.css',
       'symbols' =>
       array(
         0 => 'maniphest-task-summary-css',
         1 => 'maniphest-transaction-detail-css',
         2 => 'aphront-attached-file-view-css',
         3 => 'phabricator-project-tag-css',
       ),
       'uri' => '/res/pkg/6b1fccc6/maniphest.pkg.css',
       'type' => 'css',
     ),
     'f85eb6d8' =>
     array(
       'name' => 'maniphest.pkg.js',
       'symbols' =>
       array(
         0 => 'javelin-behavior-maniphest-batch-selector',
         1 => 'javelin-behavior-maniphest-transaction-controls',
         2 => 'javelin-behavior-maniphest-transaction-preview',
         3 => 'javelin-behavior-maniphest-transaction-expand',
         4 => 'javelin-behavior-maniphest-subpriority-editor',
       ),
       'uri' => '/res/pkg/f85eb6d8/maniphest.pkg.js',
       'type' => 'js',
     ),
   ),
   'reverse' =>
   array(
     'aphront-attached-file-view-css' => '6b1fccc6',
-    'aphront-dialog-view-css' => '25d66007',
-    'aphront-error-view-css' => '25d66007',
-    'aphront-form-view-css' => '25d66007',
-    'aphront-list-filter-view-css' => '25d66007',
-    'aphront-pager-view-css' => '25d66007',
-    'aphront-panel-view-css' => '25d66007',
-    'aphront-table-view-css' => '25d66007',
-    'aphront-tokenizer-control-css' => '25d66007',
-    'aphront-tooltip-css' => '25d66007',
-    'aphront-typeahead-control-css' => '25d66007',
-    'differential-changeset-view-css' => '8aaacd1b',
-    'differential-core-view-css' => '8aaacd1b',
+    'aphront-dialog-view-css' => '56e0b740',
+    'aphront-error-view-css' => '56e0b740',
+    'aphront-form-view-css' => '56e0b740',
+    'aphront-list-filter-view-css' => '56e0b740',
+    'aphront-pager-view-css' => '56e0b740',
+    'aphront-panel-view-css' => '56e0b740',
+    'aphront-table-view-css' => '56e0b740',
+    'aphront-tokenizer-control-css' => '56e0b740',
+    'aphront-tooltip-css' => '56e0b740',
+    'aphront-typeahead-control-css' => '56e0b740',
+    'differential-changeset-view-css' => '19d2a41f',
+    'differential-core-view-css' => '19d2a41f',
     'differential-inline-comment-editor' => '27c55b30',
-    'differential-local-commits-view-css' => '8aaacd1b',
-    'differential-results-table-css' => '8aaacd1b',
-    'differential-revision-add-comment-css' => '8aaacd1b',
-    'differential-revision-comment-css' => '8aaacd1b',
-    'differential-revision-comment-list-css' => '8aaacd1b',
-    'differential-revision-history-css' => '8aaacd1b',
-    'differential-revision-list-css' => '8aaacd1b',
-    'differential-table-of-contents-css' => '8aaacd1b',
+    'differential-local-commits-view-css' => '19d2a41f',
+    'differential-results-table-css' => '19d2a41f',
+    'differential-revision-add-comment-css' => '19d2a41f',
+    'differential-revision-comment-css' => '19d2a41f',
+    'differential-revision-comment-list-css' => '19d2a41f',
+    'differential-revision-history-css' => '19d2a41f',
+    'differential-revision-list-css' => '19d2a41f',
+    'differential-table-of-contents-css' => '19d2a41f',
     'diffusion-commit-view-css' => 'c8ce2d88',
     'diffusion-icons-css' => 'c8ce2d88',
-    'global-drag-and-drop-css' => '25d66007',
-    'inline-comment-summary-css' => '8aaacd1b',
+    'global-drag-and-drop-css' => '56e0b740',
+    'inline-comment-summary-css' => '19d2a41f',
     'javelin-aphlict' => '26980a1c',
     'javelin-behavior' => '7d174323',
     'javelin-behavior-aphlict-dropdown' => '26980a1c',
     'javelin-behavior-aphlict-listen' => '26980a1c',
     'javelin-behavior-aphront-basic-tokenizer' => '26980a1c',
     'javelin-behavior-aphront-drag-and-drop' => '27c55b30',
     'javelin-behavior-aphront-drag-and-drop-textarea' => '27c55b30',
     'javelin-behavior-aphront-form-disable-on-submit' => '26980a1c',
     'javelin-behavior-audit-preview' => 'f96657b8',
     'javelin-behavior-dark-console' => '4ccfeb47',
     'javelin-behavior-device' => '26980a1c',
     'javelin-behavior-differential-accept-with-errors' => '27c55b30',
     'javelin-behavior-differential-add-reviewers-and-ccs' => '27c55b30',
     'javelin-behavior-differential-comment-jump' => '27c55b30',
     'javelin-behavior-differential-diff-radios' => '27c55b30',
     'javelin-behavior-differential-dropdown-menus' => '27c55b30',
     'javelin-behavior-differential-edit-inline-comments' => '27c55b30',
     'javelin-behavior-differential-feedback-preview' => '27c55b30',
     'javelin-behavior-differential-keyboard-navigation' => '27c55b30',
     'javelin-behavior-differential-populate' => '27c55b30',
     'javelin-behavior-differential-show-more' => '27c55b30',
     'javelin-behavior-differential-toggle-files' => '27c55b30',
     'javelin-behavior-differential-user-select' => '27c55b30',
     'javelin-behavior-diffusion-commit-graph' => 'f96657b8',
     'javelin-behavior-diffusion-pull-lastmodified' => 'f96657b8',
     'javelin-behavior-error-log' => '4ccfeb47',
     'javelin-behavior-global-drag-and-drop' => '26980a1c',
     'javelin-behavior-history-install' => '26980a1c',
     'javelin-behavior-konami' => '26980a1c',
     'javelin-behavior-lightbox-attachments' => '26980a1c',
     'javelin-behavior-load-blame' => '27c55b30',
     'javelin-behavior-maniphest-batch-selector' => 'f85eb6d8',
     'javelin-behavior-maniphest-subpriority-editor' => 'f85eb6d8',
     'javelin-behavior-maniphest-transaction-controls' => 'f85eb6d8',
     'javelin-behavior-maniphest-transaction-expand' => 'f85eb6d8',
     'javelin-behavior-maniphest-transaction-preview' => 'f85eb6d8',
     'javelin-behavior-phabricator-active-nav' => '26980a1c',
     'javelin-behavior-phabricator-autofocus' => '26980a1c',
     'javelin-behavior-phabricator-gesture' => '26980a1c',
     'javelin-behavior-phabricator-keyboard-shortcuts' => '26980a1c',
     'javelin-behavior-phabricator-nav' => '26980a1c',
     'javelin-behavior-phabricator-object-selector' => '27c55b30',
     'javelin-behavior-phabricator-oncopy' => '26980a1c',
     'javelin-behavior-phabricator-remarkup-assist' => '26980a1c',
     'javelin-behavior-phabricator-reveal-content' => '26980a1c',
     'javelin-behavior-phabricator-search-typeahead' => '26980a1c',
     'javelin-behavior-phabricator-tooltips' => '26980a1c',
     'javelin-behavior-phabricator-watch-anchor' => '26980a1c',
     'javelin-behavior-refresh-csrf' => '26980a1c',
     'javelin-behavior-repository-crossreference' => '27c55b30',
     'javelin-behavior-toggle-class' => '26980a1c',
     'javelin-behavior-workflow' => '26980a1c',
     'javelin-dom' => '7d174323',
     'javelin-event' => '7d174323',
     'javelin-install' => '7d174323',
     'javelin-json' => '7d174323',
     'javelin-mask' => '7d174323',
     'javelin-request' => '7d174323',
     'javelin-resource' => '7d174323',
     'javelin-stratcom' => '7d174323',
     'javelin-tokenizer' => '7d174323',
     'javelin-typeahead' => '7d174323',
     'javelin-typeahead-normalizer' => '7d174323',
     'javelin-typeahead-ondemand-source' => '7d174323',
     'javelin-typeahead-preloaded-source' => '7d174323',
     'javelin-typeahead-source' => '7d174323',
     'javelin-uri' => '7d174323',
     'javelin-util' => '7d174323',
     'javelin-vector' => '7d174323',
     'javelin-workflow' => '7d174323',
-    'lightbox-attachment-css' => '25d66007',
+    'lightbox-attachment-css' => '56e0b740',
     'maniphest-task-summary-css' => '6b1fccc6',
     'maniphest-transaction-detail-css' => '6b1fccc6',
     'phabricator-busy' => '26980a1c',
-    'phabricator-content-source-view-css' => '8aaacd1b',
-    'phabricator-core-buttons-css' => '25d66007',
-    'phabricator-core-css' => '25d66007',
-    'phabricator-crumbs-view-css' => '25d66007',
-    'phabricator-directory-css' => '25d66007',
+    'phabricator-content-source-view-css' => '19d2a41f',
+    'phabricator-core-buttons-css' => '56e0b740',
+    'phabricator-core-css' => '56e0b740',
+    'phabricator-crumbs-view-css' => '56e0b740',
+    'phabricator-directory-css' => '56e0b740',
     'phabricator-drag-and-drop-file-upload' => '27c55b30',
     'phabricator-dropdown-menu' => '26980a1c',
     'phabricator-file-upload' => '26980a1c',
-    'phabricator-filetree-view-css' => '25d66007',
-    'phabricator-flag-css' => '25d66007',
-    'phabricator-form-view-css' => '25d66007',
-    'phabricator-header-view-css' => '25d66007',
-    'phabricator-jump-nav' => '25d66007',
+    'phabricator-filetree-view-css' => '56e0b740',
+    'phabricator-flag-css' => '56e0b740',
+    'phabricator-form-view-css' => '56e0b740',
+    'phabricator-header-view-css' => '56e0b740',
+    'phabricator-jump-nav' => '56e0b740',
     'phabricator-keyboard-shortcut' => '26980a1c',
     'phabricator-keyboard-shortcut-manager' => '26980a1c',
-    'phabricator-main-menu-view' => '25d66007',
+    'phabricator-main-menu-view' => '56e0b740',
     'phabricator-menu-item' => '26980a1c',
-    'phabricator-nav-view-css' => '25d66007',
+    'phabricator-nav-view-css' => '56e0b740',
     'phabricator-notification' => '26980a1c',
-    'phabricator-notification-css' => '25d66007',
-    'phabricator-notification-menu-css' => '25d66007',
-    'phabricator-object-item-list-view-css' => '25d66007',
-    'phabricator-object-selector-css' => '8aaacd1b',
+    'phabricator-notification-css' => '56e0b740',
+    'phabricator-notification-menu-css' => '56e0b740',
+    'phabricator-object-item-list-view-css' => '56e0b740',
+    'phabricator-object-selector-css' => '19d2a41f',
     'phabricator-phtize' => '26980a1c',
     'phabricator-prefab' => '26980a1c',
     'phabricator-project-tag-css' => '6b1fccc6',
-    'phabricator-remarkup-css' => '25d66007',
+    'phabricator-remarkup-css' => '56e0b740',
     'phabricator-shaped-request' => '27c55b30',
-    'phabricator-side-menu-view-css' => '25d66007',
-    'phabricator-standard-page-view' => '25d66007',
+    'phabricator-side-menu-view-css' => '56e0b740',
+    'phabricator-standard-page-view' => '56e0b740',
     'phabricator-textareautils' => '26980a1c',
     'phabricator-tooltip' => '26980a1c',
-    'phabricator-transaction-view-css' => '25d66007',
-    'phabricator-zindex-css' => '25d66007',
-    'sprite-apps-large-css' => '25d66007',
-    'sprite-gradient-css' => '25d66007',
-    'sprite-icon-css' => '25d66007',
-    'sprite-menu-css' => '25d66007',
-    'syntax-highlighting-css' => '25d66007',
+    'phabricator-transaction-view-css' => '56e0b740',
+    'phabricator-zindex-css' => '56e0b740',
+    'sprite-apps-large-css' => '56e0b740',
+    'sprite-gradient-css' => '56e0b740',
+    'sprite-icon-css' => '56e0b740',
+    'sprite-menu-css' => '56e0b740',
+    'syntax-highlighting-css' => '56e0b740',
   ),
 ));
diff --git a/src/applications/differential/controller/DifferentialDiffCreateController.php b/src/applications/differential/controller/DifferentialDiffCreateController.php
index a335727d17..121e67ab63 100644
--- a/src/applications/differential/controller/DifferentialDiffCreateController.php
+++ b/src/applications/differential/controller/DifferentialDiffCreateController.php
@@ -1,89 +1,85 @@
 <?php
 
 final class DifferentialDiffCreateController extends DifferentialController {
 
   public function processRequest() {
 
     $request = $this->getRequest();
 
     if ($request->isFormPost()) {
       $diff = null;
 
       if ($request->getFileExists('diff-file')) {
         $diff = PhabricatorFile::readUploadedFileData($_FILES['diff-file']);
       } else {
         $diff = $request->getStr('diff');
       }
 
       $call = new ConduitCall(
         'differential.createrawdiff',
         array(
           'diff' => $diff,
           ));
       $call->setUser($request->getUser());
       $result = $call->execute();
 
       $path = id(new PhutilURI($result['uri']))->getPath();
       return id(new AphrontRedirectResponse())->setURI($path);
     }
 
     $form = new AphrontFormView();
+    $form->setFlexible(true);
     $arcanist_href = PhabricatorEnv::getDoclink(
       'article/Arcanist_User_Guide.html');
     $arcanist_link = phutil_tag(
       'a',
       array(
         'href' => $arcanist_href,
         'target' => '_blank',
       ),
       'Arcanist');
     $form
       ->setAction('/differential/diff/create/')
       ->setEncType('multipart/form-data')
       ->setUser($request->getUser())
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">%s</p>',
         pht(
           'The best way to create a Differential diff is by using %s, but you '.
             'can also just paste a diff (e.g., from %s or %s) into this box '.
             'or upload it as a file if you really want.',
           $arcanist_link,
           phutil_tag('tt', array(), 'svn diff'),
           phutil_tag('tt', array(), 'git diff'))))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel(pht('Raw Diff'))
           ->setName('diff')
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL))
       ->appendChild(
         id(new AphrontFormFileControl())
           ->setLabel(pht('Raw Diff from file'))
           ->setName('diff-file'))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht("Create Diff \xC2\xBB")));
 
-    $panel = new AphrontPanelView();
-    $panel->setHeader(pht('Create New Diff'));
-    $panel->setNoBackground();
-    $panel->appendChild($form);
-    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
-
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Create Diff'))
         ->setHref('/differential/diff/create/'));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
-        $panel
+        $form
       ),
       array(
         'title' => pht('Create Diff'),
         'device' => true,
+        'dust' => true,
       ));
   }
 
 }
diff --git a/src/applications/differential/controller/DifferentialRevisionEditController.php b/src/applications/differential/controller/DifferentialRevisionEditController.php
index 3dcc0f4542..c715879cf9 100644
--- a/src/applications/differential/controller/DifferentialRevisionEditController.php
+++ b/src/applications/differential/controller/DifferentialRevisionEditController.php
@@ -1,176 +1,191 @@
 <?php
 
 final class DifferentialRevisionEditController extends DifferentialController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
 
     if (!$this->id) {
       $this->id = $request->getInt('revisionID');
     }
 
     if ($this->id) {
       $revision = id(new DifferentialRevision())->load($this->id);
       if (!$revision) {
         return new Aphront404Response();
       }
     } else {
       $revision = new DifferentialRevision();
     }
 
     $revision->loadRelationships();
     $aux_fields = $this->loadAuxiliaryFields($revision);
 
     $diff_id = $request->getInt('diffID');
     if ($diff_id) {
       $diff = id(new DifferentialDiff())->load($diff_id);
       if (!$diff) {
         return new Aphront404Response();
       }
       if ($diff->getRevisionID()) {
         // TODO: Redirect?
         throw new Exception("This diff is already attached to a revision!");
       }
     } else {
       $diff = null;
     }
 
     $errors = array();
 
 
     if ($request->isFormPost() && !$request->getStr('viaDiffView')) {
       foreach ($aux_fields as $aux_field) {
         $aux_field->setValueFromRequest($request);
         try {
           $aux_field->validateField();
         } catch (DifferentialFieldValidationException $ex) {
           $errors[] = $ex->getMessage();
         }
       }
 
       if (!$errors) {
         $editor = new DifferentialRevisionEditor($revision);
         $editor->setActor($request->getUser());
         if ($diff) {
           $editor->addDiff($diff, $request->getStr('comments'));
         }
         $editor->setAuxiliaryFields($aux_fields);
         $editor->save();
 
         return id(new AphrontRedirectResponse())
           ->setURI('/D'.$revision->getID());
       }
     }
 
     $aux_phids = array();
     foreach ($aux_fields as $key => $aux_field) {
       $aux_phids[$key] = $aux_field->getRequiredHandlePHIDsForRevisionEdit();
     }
     $phids = array_mergev($aux_phids);
     $phids = array_unique($phids);
     $handles = $this->loadViewerHandles($phids);
     foreach ($aux_fields as $key => $aux_field) {
       $aux_field->setHandles(array_select_keys($handles, $aux_phids[$key]));
     }
 
     $form = new AphrontFormView();
     $form->setUser($request->getUser());
+    $form->setFlexible(true);
     if ($diff) {
       $form->addHiddenInput('diffID', $diff->getID());
     }
 
     if ($revision->getID()) {
       $form->setAction('/differential/revision/edit/'.$revision->getID().'/');
     } else {
       $form->setAction('/differential/revision/edit/');
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     }
 
     if ($diff && $revision->getID()) {
       $form
         ->appendChild(
           id(new AphrontFormTextAreaControl())
             ->setLabel(pht('Comments'))
             ->setName('comments')
             ->setCaption(pht("Explain what's new in this diff."))
             ->setValue($request->getStr('comments')))
         ->appendChild(
           id(new AphrontFormSubmitControl())
             ->setValue(pht('Save')))
         ->appendChild(
           id(new AphrontFormDividerControl()));
     }
 
     foreach ($aux_fields as $aux_field) {
       $control = $aux_field->renderEditControl();
       if ($control) {
         $form->appendChild($control);
       }
     }
 
     $submit = id(new AphrontFormSubmitControl())
       ->setValue('Save');
     if ($diff) {
       $submit->addCancelButton('/differential/diff/'.$diff->getID().'/');
     } else {
       $submit->addCancelButton('/D'.$revision->getID());
     }
 
     $form->appendChild($submit);
 
-    $panel = new AphrontPanelView();
+    $crumbs = $this->buildApplicationCrumbs();
     if ($revision->getID()) {
       if ($diff) {
-        $panel->setHeader(pht('Update Differential Revision'));
+        $title = pht('Update Differential Revision');
+        $crumbs->addCrumb(
+          id(new PhabricatorCrumbView())
+            ->setName('D'.$revision->getID())
+            ->setHref('/differential/diff/'.$diff->getID().'/'));
       } else {
-        $panel->setHeader(pht('Edit Differential Revision'));
+        $title = pht('Edit Differential Revision');
+        $crumbs->addCrumb(
+          id(new PhabricatorCrumbView())
+            ->setName('D'.$revision->getID())
+            ->setHref('/D'.$revision->getID()));
       }
     } else {
-      $panel->setHeader(pht('Create New Differential Revision'));
+      $title = pht('Create New Differential Revision');
     }
 
-    $panel->appendChild($form);
-    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
-    $panel->setNoBackground();
+    $crumbs->addCrumb(
+      id(new PhabricatorCrumbView())
+        ->setName($title)
+        ->setHref(''));
 
-    return $this->buildStandardPageResponse(
-      array($error_view, $panel),
+    return $this->buildApplicationPage(
       array(
-        'title' => pht('Edit Differential Revision'),
+        $crumbs,
+        $error_view,
+        $form),
+      array(
+        'title' => $title,
+        'device' => true,
+        'dust' => true,
       ));
   }
 
   private function loadAuxiliaryFields(DifferentialRevision $revision) {
 
     $user = $this->getRequest()->getUser();
 
     $aux_fields = DifferentialFieldSelector::newSelector()
       ->getFieldSpecifications();
     foreach ($aux_fields as $key => $aux_field) {
       $aux_field->setRevision($revision);
       if (!$aux_field->shouldAppearOnEdit()) {
         unset($aux_fields[$key]);
       } else {
         $aux_field->setUser($user);
       }
     }
 
     return DifferentialAuxiliaryField::loadFromStorage(
       $revision,
       $aux_fields);
   }
 
 }
diff --git a/src/applications/directory/controller/PhabricatorDirectoryMainController.php b/src/applications/directory/controller/PhabricatorDirectoryMainController.php
index 0fa89e9052..a19188763f 100644
--- a/src/applications/directory/controller/PhabricatorDirectoryMainController.php
+++ b/src/applications/directory/controller/PhabricatorDirectoryMainController.php
@@ -1,478 +1,476 @@
 <?php
 
 final class PhabricatorDirectoryMainController
   extends PhabricatorDirectoryController {
 
   private $filter;
   private $minipanels = array();
 
   public function willProcessRequest(array $data) {
     $this->filter = idx($data, 'filter');
   }
 
   public function processRequest() {
     $user = $this->getRequest()->getUser();
 
     if ($this->filter == 'jump') {
       return $this->buildJumpResponse();
     }
 
     $nav = $this->buildNav();
 
     $project_query = new PhabricatorProjectQuery();
     $project_query->setViewer($user);
     $project_query->withMemberPHIDs(array($user->getPHID()));
     $projects = $project_query->execute();
 
     return $this->buildMainResponse($nav, $projects);
   }
 
   private function buildMainResponse($nav, array $projects) {
     assert_instances_of($projects, 'PhabricatorProject');
 
     $maniphest = 'PhabricatorApplicationManiphest';
     if (PhabricatorApplication::isClassInstalled($maniphest)) {
       $unbreak_panel = $this->buildUnbreakNowPanel();
       $triage_panel = $this->buildNeedsTriagePanel($projects);
       $tasks_panel = $this->buildTasksPanel();
     } else {
       $unbreak_panel = null;
       $triage_panel = null;
       $tasks_panel = null;
     }
 
     if (PhabricatorEnv::getEnvConfig('welcome.html') !== null) {
       $welcome_panel = $this->buildWelcomePanel();
     } else {
       $welcome_panel = null;
     }
     $jump_panel = $this->buildJumpPanel();
     $revision_panel = $this->buildRevisionPanel();
     $audit_panel = $this->buildAuditPanel();
     $commit_panel = $this->buildCommitPanel();
 
     $content = array(
       $jump_panel,
       $welcome_panel,
       $unbreak_panel,
       $triage_panel,
       $revision_panel,
       $tasks_panel,
       $audit_panel,
       $commit_panel,
       $this->minipanels,
     );
 
     $nav->appendChild($content);
     $nav->appendChild(new PhabricatorGlobalUploadTargetView());
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => 'Phabricator',
         'device' => true,
         'dust' => true,
       ));
   }
 
   private function buildJumpResponse() {
     $request = $this->getRequest();
 
     $jump = $request->getStr('jump');
 
     $response = PhabricatorJumpNavHandler::jumpPostResponse($jump);
 
     if ($response) {
 
       return $response;
     } else if ($request->isFormPost()) {
       $query = new PhabricatorSearchQuery();
       $query->setQuery($jump);
       $query->save();
 
       return id(new AphrontRedirectResponse())
         ->setURI('/search/'.$query->getQueryKey().'/');
     } else {
       return id(new AphrontRedirectResponse())->setURI('/');
     }
   }
 
   private function buildUnbreakNowPanel() {
     $user = $this->getRequest()->getUser();
     $user_phid = $user->getPHID();
 
     $task_query = new ManiphestTaskQuery();
     $task_query->withStatus(ManiphestTaskQuery::STATUS_OPEN);
     $task_query->withPriority(ManiphestTaskPriority::PRIORITY_UNBREAK_NOW);
     $task_query->setLimit(10);
 
     $tasks = $task_query->execute();
 
     if (!$tasks) {
       return $this->renderMiniPanel(
         'No "Unbreak Now!" Tasks',
         'Nothing appears to be critically broken right now.');
     }
 
     $panel = new AphrontPanelView();
     $panel->setHeader('Unbreak Now!');
     $panel->setCaption('Open tasks with "Unbreak Now!" priority.');
     $panel->addButton(
       phutil_tag(
         'a',
         array(
           'href' => '/maniphest/view/all/',
           'class' => 'grey button',
         ),
         "View All Unbreak Now \xC2\xBB"));
 
     $panel->appendChild($this->buildTaskListView($tasks));
     $panel->setNoBackground();
 
     return $panel;
   }
 
   private function buildNeedsTriagePanel(array $projects) {
     assert_instances_of($projects, 'PhabricatorProject');
 
     $user = $this->getRequest()->getUser();
     $user_phid = $user->getPHID();
 
     if ($projects) {
       $task_query = new ManiphestTaskQuery();
       $task_query->withStatus(ManiphestTaskQuery::STATUS_OPEN);
       $task_query->withPriority(ManiphestTaskPriority::PRIORITY_TRIAGE);
       $task_query->withAnyProjects(mpull($projects, 'getPHID'));
       $task_query->setLimit(10);
       $tasks = $task_query->execute();
     } else {
       $tasks = array();
     }
 
     if (!$tasks) {
       return $this->renderMiniPanel(
         'No "Needs Triage" Tasks',
         hsprintf(
           'No tasks in <a href="/project/">projects you are a member of</a> '.
           'need triage.'));
     }
 
     $panel = new AphrontPanelView();
     $panel->setHeader('Needs Triage');
     $panel->setCaption(hsprintf(
       'Open tasks with "Needs Triage" priority in '.
       '<a href="/project/">projects you are a member of</a>.'));
 
     $panel->addButton(
       phutil_tag(
         'a',
         array(
           // TODO: This should filter to just your projects' need-triage
           // tasks?
           'href' => '/maniphest/view/projecttriage/',
           'class' => 'grey button',
         ),
         "View All Triage \xC2\xBB"));
     $panel->appendChild($this->buildTaskListView($tasks));
     $panel->setNoBackground();
 
     return $panel;
   }
 
   private function buildRevisionPanel() {
     $user = $this->getRequest()->getUser();
     $user_phid = $user->getPHID();
 
     $revision_query = new DifferentialRevisionQuery();
     $revision_query->withStatus(DifferentialRevisionQuery::STATUS_OPEN);
     $revision_query->withResponsibleUsers(array($user_phid));
     $revision_query->needRelationships(true);
 
     // NOTE: We need to unlimit this query to hit the responsible user
     // fast-path.
     $revision_query->setLimit(null);
     $revisions = $revision_query->execute();
 
     list($blocking, $active, ) = DifferentialRevisionQuery::splitResponsible(
         $revisions,
         array($user_phid));
 
     if (!$blocking && !$active) {
       return $this->renderMiniPanel(
         'No Waiting Revisions',
         'No revisions are waiting on you.');
     }
 
     $panel = new AphrontPanelView();
     $panel->setHeader('Revisions Waiting on You');
     $panel->setCaption('Revisions waiting for you for review or commit.');
 
     $panel->addButton(
       phutil_tag(
         'a',
         array(
           'href' => '/differential/',
           'class' => 'button grey',
         ),
         "View Active Revisions \xC2\xBB"));
 
     $revision_view = id(new DifferentialRevisionListView())
       ->setHighlightAge(true)
       ->setRevisions(array_merge($blocking, $active))
       ->setFields(DifferentialRevisionListView::getDefaultFields($user))
       ->setUser($user)
       ->loadAssets();
     $phids = array_merge(
       array($user_phid),
       $revision_view->getRequiredHandlePHIDs());
     $handles = $this->loadViewerHandles($phids);
 
     $revision_view->setHandles($handles);
 
     $panel->appendChild($revision_view);
     $panel->setNoBackground();
 
     return $panel;
   }
 
   private function buildWelcomePanel() {
     $panel = new AphrontPanelView();
     $panel->appendChild(
       phutil_safe_html(
         PhabricatorEnv::getEnvConfig('welcome.html')));
     $panel->setNoBackground();
 
     return $panel;
   }
 
   private function buildTasksPanel() {
     $user = $this->getRequest()->getUser();
     $user_phid = $user->getPHID();
 
     $task_query = new ManiphestTaskQuery();
     $task_query->withStatus(ManiphestTaskQuery::STATUS_OPEN);
     $task_query->setGroupBy(ManiphestTaskQuery::GROUP_PRIORITY);
     $task_query->withOwners(array($user_phid));
     $task_query->setLimit(10);
 
     $tasks = $task_query->execute();
 
 
     if (!$tasks) {
       return $this->renderMiniPanel(
         'No Assigned Tasks',
         'You have no assigned tasks.');
     }
 
     $panel = new AphrontPanelView();
     $panel->setHeader('Assigned Tasks');
 
     $panel->addButton(
       phutil_tag(
         'a',
         array(
           'href' => '/maniphest/',
           'class' => 'button grey',
         ),
         "View Active Tasks \xC2\xBB"));
     $panel->appendChild($this->buildTaskListView($tasks));
     $panel->setNoBackground();
 
     return $panel;
   }
 
   private function buildTaskListView(array $tasks) {
     assert_instances_of($tasks, 'ManiphestTask');
     $user = $this->getRequest()->getUser();
 
     $phids = array_merge(
       array_filter(mpull($tasks, 'getOwnerPHID')),
       array_mergev(mpull($tasks, 'getProjectPHIDs')));
 
     $handles = $this->loadViewerHandles($phids);
 
     $view = new ManiphestTaskListView();
     $view->setTasks($tasks);
     $view->setUser($user);
     $view->setHandles($handles);
 
     return $view;
   }
 
   private function buildJumpPanel($query=null) {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $uniq_id = celerity_generate_unique_node_id();
 
     Javelin::initBehavior(
       'phabricator-autofocus',
       array(
         'id' => $uniq_id,
       ));
 
     require_celerity_resource('phabricator-jump-nav');
 
     $doc_href = PhabricatorEnv::getDocLink('article/Jump_Nav_User_Guide.html');
     $doc_link = phutil_tag(
       'a',
       array(
         'href' => $doc_href,
       ),
       'Jump Nav User Guide');
 
     $jump_input = phutil_tag(
       'input',
       array(
         'type'  => 'text',
         'class' => 'phabricator-jump-nav',
         'name'  => 'jump',
         'id'    => $uniq_id,
         'value' => $query,
       ));
     $jump_caption = phutil_tag(
       'p',
       array(
         'class' => 'phabricator-jump-nav-caption',
       ),
       hsprintf(
         'Enter the name of an object like <tt>D123</tt> to quickly jump to '.
           'it. See %s or type <tt>help</tt>.',
         $doc_link));
 
     $form = phabricator_form(
       $user,
       array(
         'action' => '/jump/',
         'method' => 'POST',
         'class'  => 'phabricator-jump-nav-form',
       ),
       array(
         $jump_input,
         $jump_caption,
       ));
 
     $panel = new AphrontPanelView();
-    $panel->setHeader('Jump Nav');
     $panel->setNoBackground();
     // $panel->appendChild();
 
     $list_filter = new AphrontListFilterView();
-    $list_filter->appendChild(phutil_tag('h1', array(), 'Jump Nav'));
     $list_filter->appendChild($form);
 
     $container = phutil_tag('div',
       array('class' => 'phabricator-jump-nav-container'),
       $list_filter);
 
     return $container;
   }
 
   private function renderMiniPanel($title, $body) {
     $panel = new AphrontMiniPanelView();
     $panel->appendChild(
       phutil_tag(
         'p',
         array(
         ),
         array(
           phutil_tag('strong', array(), $title.': '),
           $body
         )));
     $this->minipanels[] = $panel;
   }
 
   public function buildAuditPanel() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $phids = PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($user);
 
     $query = new PhabricatorAuditQuery();
     $query->withAuditorPHIDs($phids);
     $query->withStatus(PhabricatorAuditQuery::STATUS_OPEN);
     $query->withAwaitingUser($user);
     $query->needCommitData(true);
     $query->setLimit(10);
 
     $audits = $query->execute();
     $commits = $query->getCommits();
 
     if (!$audits) {
       return $this->renderMinipanel(
         'No Audits',
         'No commits are waiting for you to audit them.');
     }
 
     $view = new PhabricatorAuditListView();
     $view->setAudits($audits);
     $view->setCommits($commits);
     $view->setUser($user);
 
     $phids = $view->getRequiredHandlePHIDs();
     $handles = $this->loadViewerHandles($phids);
     $view->setHandles($handles);
 
     $panel = new AphrontPanelView();
     $panel->setHeader('Audits');
     $panel->setCaption('Commits awaiting your audit.');
     $panel->appendChild($view);
     $panel->addButton(
       phutil_tag(
         'a',
         array(
           'href' => '/audit/',
           'class' => 'button grey',
         ),
         "View Active Audits \xC2\xBB"));
     $panel->setNoBackground();
 
     return $panel;
   }
 
   public function buildCommitPanel() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $phids = array($user->getPHID());
 
     $query = new PhabricatorAuditCommitQuery();
     $query->withAuthorPHIDs($phids);
     $query->withStatus(PhabricatorAuditCommitQuery::STATUS_CONCERN);
     $query->needCommitData(true);
     $query->setLimit(10);
 
     $commits = $query->execute();
 
     if (!$commits) {
       return $this->renderMinipanel(
         'No Problem Commits',
         'No one has raised concerns with your commits.');
     }
 
     $view = new PhabricatorAuditCommitListView();
     $view->setCommits($commits);
     $view->setUser($user);
 
     $phids = $view->getRequiredHandlePHIDs();
     $handles = $this->loadViewerHandles($phids);
     $view->setHandles($handles);
 
     $panel = new AphrontPanelView();
     $panel->setHeader('Problem Commits');
     $panel->setCaption('Commits which auditors have raised concerns about.');
     $panel->appendChild($view);
     $panel->addButton(
       phutil_tag(
         'a',
         array(
           'href' => '/audit/',
           'class' => 'button grey',
         ),
         "View Problem Commits \xC2\xBB"));
     $panel->setNoBackground();
 
     return $panel;
   }
 
 }
diff --git a/src/applications/herald/controller/HeraldNewController.php b/src/applications/herald/controller/HeraldNewController.php
index fdedda66e2..327379b517 100644
--- a/src/applications/herald/controller/HeraldNewController.php
+++ b/src/applications/herald/controller/HeraldNewController.php
@@ -1,89 +1,90 @@
 <?php
 
 final class HeraldNewController extends HeraldController {
 
   private $contentType;
   private $ruleType;
 
   public function willProcessRequest(array $data) {
     $this->contentType = idx($data, 'type');
     $this->ruleType = idx($data, 'rule_type');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $content_type_map = HeraldContentTypeConfig::getContentTypeMap();
     if (empty($content_type_map[$this->contentType])) {
       $this->contentType = head_key($content_type_map);
     }
 
     $rule_type_map = HeraldRuleTypeConfig::getRuleTypeMap();
     if (empty($rule_type_map[$this->ruleType])) {
       $this->ruleType = HeraldRuleTypeConfig::RULE_TYPE_PERSONAL;
     }
 
     // Reorder array to put "personal" first.
     $rule_type_map = array_select_keys(
       $rule_type_map,
       array(
         HeraldRuleTypeConfig::RULE_TYPE_PERSONAL,
       )) + $rule_type_map;
 
     $captions = array(
       HeraldRuleTypeConfig::RULE_TYPE_PERSONAL =>
         'Personal rules notify you about events. You own them, but they can '.
         'only affect you.',
       HeraldRuleTypeConfig::RULE_TYPE_GLOBAL =>
         'Global rules notify anyone about events. No one owns them, and '.
         'anyone can edit them. Usually, Global rules are used to notify '.
         'mailing lists.',
     );
 
     $radio = id(new AphrontFormRadioButtonControl())
       ->setLabel('Type')
       ->setName('rule_type')
       ->setValue($this->ruleType);
 
     foreach ($rule_type_map as $value => $name) {
       $radio->addButton(
         $value,
         $name,
         idx($captions, $value));
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->setAction('/herald/rule/')
+      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('New rule for'))
           ->setName('content_type')
           ->setValue($this->contentType)
           ->setOptions($content_type_map))
       ->appendChild($radio)
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Create Rule'))
           ->addCancelButton('/herald/view/'.$this->contentType.'/'));
 
-    $panel = new AphrontPanelView();
-    $panel->setHeader(pht('Create New Herald Rule'));
-    $panel->setWidth(AphrontPanelView::WIDTH_FULL);
-    $panel->appendChild($form);
-    $panel->setNoBackground();
+    $header = new PhabricatorHeaderView();
+    $header->setHeader(pht('Create New Herald Rule'));
 
     $nav = $this->renderNav();
     $nav->selectFilter('new');
-    $nav->appendChild($panel);
+    $nav->appendChild($header);
+    $nav->appendChild($form);
 
-    return $this->buildStandardPageResponse(
+    return $this->buildApplicationPage(
       $nav,
       array(
-        'title' => 'Create Herald Rule',
+        'title' => pht('Create Herald Rule'),
+        'device' => true,
+        'dust' => true,
       ));
   }
 
 }
diff --git a/src/applications/herald/controller/HeraldRuleController.php b/src/applications/herald/controller/HeraldRuleController.php
index 79c4731499..fa61e4f946 100644
--- a/src/applications/herald/controller/HeraldRuleController.php
+++ b/src/applications/herald/controller/HeraldRuleController.php
@@ -1,558 +1,557 @@
 <?php
 
 final class HeraldRuleController extends HeraldController {
 
   private $id;
   private $filter;
 
   public function willProcessRequest(array $data) {
     $this->id = (int)idx($data, 'id');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $content_type_map = HeraldContentTypeConfig::getContentTypeMap();
     $rule_type_map = HeraldRuleTypeConfig::getRuleTypeMap();
 
     if ($this->id) {
       $rule = id(new HeraldRule())->load($this->id);
       if (!$rule) {
         return new Aphront404Response();
       }
       if (!$this->canEditRule($rule, $user)) {
         throw new Exception("You don't own this rule and can't edit it.");
       }
     } else {
       $rule = new HeraldRule();
       $rule->setAuthorPHID($user->getPHID());
       $rule->setMustMatchAll(true);
 
       $content_type = $request->getStr('content_type');
       if (!isset($content_type_map[$content_type])) {
         $content_type = HeraldContentTypeConfig::CONTENT_TYPE_DIFFERENTIAL;
       }
       $rule->setContentType($content_type);
 
       $rule_type = $request->getStr('rule_type');
       if (!isset($rule_type_map[$rule_type])) {
         $rule_type = HeraldRuleTypeConfig::RULE_TYPE_GLOBAL;
       }
       $rule->setRuleType($rule_type);
     }
 
     $local_version = id(new HeraldRule())->getConfigVersion();
     if ($rule->getConfigVersion() > $local_version) {
       throw new Exception(
         "This rule was created with a newer version of Herald. You can not ".
         "view or edit it in this older version. Upgrade your Phabricator ".
         "deployment.");
     }
 
     // Upgrade rule version to our version, since we might add newly-defined
     // conditions, etc.
     $rule->setConfigVersion($local_version);
 
     $rule_conditions = $rule->loadConditions();
     $rule_actions = $rule->loadActions();
 
     $rule->attachConditions($rule_conditions);
     $rule->attachActions($rule_actions);
 
     $e_name = true;
     $errors = array();
     if ($request->isFormPost() && $request->getStr('save')) {
       list($e_name, $errors) = $this->saveRule($rule, $request);
       if (!$errors) {
         $uri = '/herald/view/'.
           $rule->getContentType().'/'.
           $rule->getRuleType().'/';
         return id(new AphrontRedirectResponse())->setURI($uri);
       }
     }
 
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setTitle('Form Errors');
       $error_view->setErrors($errors);
     } else {
       $error_view = null;
     }
 
     $must_match_selector = $this->renderMustMatchSelector($rule);
     $repetition_selector = $this->renderRepetitionSelector($rule);
 
     $handles = $this->loadHandlesForRule($rule);
 
     require_celerity_resource('herald-css');
 
     $content_type_name = $content_type_map[$rule->getContentType()];
     $rule_type_name = $rule_type_map[$rule->getRuleType()];
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->setID('herald-rule-edit-form')
       ->addHiddenInput('content_type', $rule->getContentType())
       ->addHiddenInput('rule_type', $rule->getRuleType())
       ->addHiddenInput('save', 1)
       ->appendChild(
         // Build this explicitly (instead of using addHiddenInput())
         // so we can add a sigil to it.
         javelin_tag(
           'input',
           array(
             'type'  => 'hidden',
             'name'  => 'rule',
             'sigil' => 'rule',
           )))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('Rule Name')
           ->setName('name')
           ->setError($e_name)
           ->setValue($rule->getName()));
 
     $form
       ->appendChild(
         id(new AphrontFormMarkupControl())
           ->setValue(hsprintf(
             "This <strong>%s</strong> rule triggers for <strong>%s</strong>.",
             $rule_type_name,
             $content_type_name)))
       ->appendChild(
         id(new AphrontFormInsetView())
           ->setTitle('Conditions')
           ->setRightButton(javelin_tag(
             'a',
             array(
               'href' => '#',
               'class' => 'button green',
               'sigil' => 'create-condition',
               'mustcapture' => true
             ),
             'Create New Condition'))
           ->setDescription(
             hsprintf('When %s these conditions are met:', $must_match_selector))
           ->setContent(javelin_tag(
             'table',
             array(
               'sigil' => 'rule-conditions',
               'class' => 'herald-condition-table'
             ),
             '')))
       ->appendChild(
         id(new AphrontFormInsetView())
           ->setTitle('Action')
           ->setRightButton(javelin_tag(
             'a',
             array(
               'href' => '#',
               'class' => 'button green',
               'sigil' => 'create-action',
               'mustcapture' => true,
             ),
             'Create New Action'))
           ->setDescription(hsprintf(
             'Take these actions %s this rule matches:',
             $repetition_selector))
           ->setContent(javelin_tag(
               'table',
               array(
                 'sigil' => 'rule-actions',
                 'class' => 'herald-action-table',
               ),
               '')))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue('Save Rule')
           ->addCancelButton('/herald/view/'.$rule->getContentType().'/'));
 
     $this->setupEditorBehavior($rule, $handles);
 
-    $panel = new AphrontPanelView();
-    $panel->setHeader(
+    $header = new PhabricatorHeaderView();
+    $header->setHeader(
       $rule->getID()
         ? pht('Edit Herald Rule')
         : pht('Create Herald Rule'));
-    $panel->appendChild($form);
-    $panel->setNoBackground();
 
     $nav = $this->renderNav();
     $nav->selectFilter(
       'view/'.$rule->getContentType().'/'.$rule->getRuleType());
     $nav->appendChild(
       array(
         $error_view,
-        $panel,
+        $header,
+        $form,
       ));
 
-    return $this->buildStandardPageResponse(
+    return $this->buildApplicationPage(
       $nav,
       array(
-        'title' => 'Edit Rule',
+        'title' => pht('Edit Rule'),
       ));
   }
 
   private function canEditRule($rule, $user) {
     return
       ($user->getIsAdmin()) ||
       ($rule->getRuleType() == HeraldRuleTypeConfig::RULE_TYPE_GLOBAL) ||
       ($rule->getAuthorPHID() == $user->getPHID());
   }
 
   private function saveRule($rule, $request) {
     $rule->setName($request->getStr('name'));
     $rule->setMustMatchAll(($request->getStr('must_match') == 'all'));
 
     $repetition_policy_param = $request->getStr('repetition_policy');
     $rule->setRepetitionPolicy(
       HeraldRepetitionPolicyConfig::toInt($repetition_policy_param));
 
     $e_name = true;
     $errors = array();
 
     if (!strlen($rule->getName())) {
       $e_name = "Required";
       $errors[] = "Rule must have a name.";
     }
 
     $data = json_decode($request->getStr('rule'), true);
     if (!is_array($data) ||
         !$data['conditions'] ||
         !$data['actions']) {
       throw new Exception("Failed to decode rule data.");
     }
 
     $conditions = array();
     foreach ($data['conditions'] as $condition) {
       if ($condition === null) {
         // We manage this as a sparse array on the client, so may receive
         // NULL if conditions have been removed.
         continue;
       }
 
       $obj = new HeraldCondition();
       $obj->setFieldName($condition[0]);
       $obj->setFieldCondition($condition[1]);
 
       if (is_array($condition[2])) {
         $obj->setValue(array_keys($condition[2]));
       } else {
         $obj->setValue($condition[2]);
       }
 
       $cond_type = $obj->getFieldCondition();
 
       if ($cond_type == HeraldConditionConfig::CONDITION_REGEXP) {
         if (@preg_match($obj->getValue(), '') === false) {
           $errors[] =
             'The regular expression "'.$obj->getValue().'" is not valid. '.
             'Regular expressions must have enclosing characters (e.g. '.
             '"@/path/to/file@", not "/path/to/file") and be syntactically '.
             'correct.';
         }
       }
 
       if ($cond_type == HeraldConditionConfig::CONDITION_REGEXP_PAIR) {
         $json = json_decode($obj->getValue(), true);
         if (!is_array($json)) {
           $errors[] =
             'The regular expression pair "'.$obj->getValue().'" is not '.
             'valid JSON. Enter a valid JSON array with two elements.';
         } else {
           if (count($json) != 2) {
             $errors[] =
               'The regular expression pair "'.$obj->getValue().'" must have '.
               'exactly two elements.';
           } else {
             $key_regexp = array_shift($json);
             $val_regexp = array_shift($json);
 
             if (@preg_match($key_regexp, '') === false) {
               $errors[] =
                 'The first regexp, "'.$key_regexp.'" in the regexp pair '.
                 'is not a valid regexp.';
             }
             if (@preg_match($val_regexp, '') === false) {
               $errors[] =
                 'The second regexp, "'.$val_regexp.'" in the regexp pair '.
                 'is not a valid regexp.';
             }
           }
         }
       }
 
       $conditions[] = $obj;
     }
 
     $actions = array();
     foreach ($data['actions'] as $action) {
       if ($action === null) {
         // Sparse on the client; removals can give us NULLs.
         continue;
       }
 
       if (!isset($action[1])) {
         // Legitimate for any action which doesn't need a target, like
         // "Do nothing".
         $action[1] = null;
       }
 
       $actions[] = HeraldActionConfig::willSaveAction($rule->getRuleType(),
                                                       $rule->getAuthorPHID(),
                                                       $action);
     }
 
     $rule->attachConditions($conditions);
     $rule->attachActions($actions);
 
     if (!$errors) {
       try {
 
         $edit_action = $rule->getID() ? 'edit' : 'create';
 
         $rule->openTransaction();
           $rule->save();
           $rule->saveConditions($conditions);
           $rule->saveActions($actions);
           $rule->logEdit($request->getUser()->getPHID(), $edit_action);
         $rule->saveTransaction();
 
       } catch (AphrontQueryDuplicateKeyException $ex) {
         $e_name = "Not Unique";
         $errors[] = "Rule name is not unique. Choose a unique name.";
       }
     }
 
     return array($e_name, $errors);
   }
 
   private function setupEditorBehavior($rule, $handles) {
     $serial_conditions = array(
       array('default', 'default', ''),
     );
 
     if ($rule->getConditions()) {
       $serial_conditions = array();
       foreach ($rule->getConditions() as $condition) {
 
         $value = $condition->getValue();
         if (is_array($value)) {
           $value_map = array();
           foreach ($value as $k => $fbid) {
             $value_map[$fbid] = $handles[$fbid]->getName();
           }
           $value = $value_map;
         }
 
         $serial_conditions[] = array(
           $condition->getFieldName(),
           $condition->getFieldCondition(),
           $value,
         );
       }
     }
 
     $serial_actions = array(
       array('default', ''),
     );
     if ($rule->getActions()) {
       $serial_actions = array();
       foreach ($rule->getActions() as $action) {
 
         switch ($action->getAction()) {
           case HeraldActionConfig::ACTION_FLAG:
             $current_value = $action->getTarget();
             break;
           default:
             $target_map = array();
             foreach ((array)$action->getTarget() as $fbid) {
               $target_map[$fbid] = $handles[$fbid]->getName();
             }
             $current_value = $target_map;
             break;
         }
 
         $serial_actions[] = array(
           $action->getAction(),
           $current_value,
         );
       }
     }
 
     $all_rules = $this->loadRulesThisRuleMayDependUpon($rule);
     $all_rules = mpull($all_rules, 'getName', 'getID');
     asort($all_rules);
 
     $config_info = array();
     $config_info['fields']
       = HeraldFieldConfig::getFieldMapForContentType($rule->getContentType());
     $config_info['conditions'] = HeraldConditionConfig::getConditionMap();
     foreach ($config_info['fields'] as $field => $name) {
       $config_info['conditionMap'][$field] = array_keys(
         HeraldConditionConfig::getConditionMapForField($field));
     }
     foreach ($config_info['fields'] as $field => $fname) {
       foreach ($config_info['conditions'] as $condition => $cname) {
         $config_info['values'][$field][$condition] =
           HeraldValueTypeConfig::getValueTypeForFieldAndCondition(
             $field,
             $condition);
       }
     }
 
     $config_info['actions'] =
       HeraldActionConfig::getActionMessageMap($rule->getContentType(),
                                               $rule->getRuleType());
 
     $config_info['rule_type'] = $rule->getRuleType();
 
     foreach ($config_info['actions'] as $action => $name) {
       $config_info['targets'][$action] =
         HeraldValueTypeConfig::getValueTypeForAction($action,
                                                      $rule->getRuleType());
     }
 
     Javelin::initBehavior(
       'herald-rule-editor',
       array(
         'root' => 'herald-rule-edit-form',
         'conditions' => (object)$serial_conditions,
         'actions' => (object)$serial_actions,
         'template' => $this->buildTokenizerTemplates() + array(
           'rules' => $all_rules,
           'colors' => PhabricatorFlagColor::getColorNameMap(),
           'defaultColor' => PhabricatorFlagColor::COLOR_BLUE,
         ),
         'author' => array($rule->getAuthorPHID() =>
                           $handles[$rule->getAuthorPHID()]->getName()),
         'info' => $config_info,
       ));
   }
 
   private function loadHandlesForRule($rule) {
     $phids = array();
 
     foreach ($rule->getActions() as $action) {
       if (!is_array($action->getTarget())) {
         continue;
       }
       foreach ($action->getTarget() as $target) {
         $target = (array)$target;
         foreach ($target as $phid) {
           $phids[] = $phid;
         }
       }
     }
 
     foreach ($rule->getConditions() as $condition) {
       $value = $condition->getValue();
       if (is_array($value)) {
         foreach ($value as $phid) {
           $phids[] = $phid;
         }
       }
     }
 
     $phids[] = $rule->getAuthorPHID();
 
     return $this->loadViewerHandles($phids);
   }
 
 
   /**
    * Render the selector for the "When (all of | any of) these conditions are
    * met:" element.
    */
   private function renderMustMatchSelector($rule) {
     return AphrontFormSelectControl::renderSelectTag(
       $rule->getMustMatchAll() ? 'all' : 'any',
       array(
         'all' => 'all of',
         'any' => 'any of',
       ),
       array(
         'name' => 'must_match',
       ));
   }
 
 
   /**
    * Render the selector for "Take these actions (every time | only the first
    * time) this rule matches..." element.
    */
   private function renderRepetitionSelector($rule) {
     // Make the selector for choosing how often this rule should be repeated
     $repetition_policy = HeraldRepetitionPolicyConfig::toString(
       $rule->getRepetitionPolicy());
     $repetition_options = HeraldRepetitionPolicyConfig::getMapForContentType(
       $rule->getContentType());
 
     if (empty($repetition_options)) {
       // default option is 'every time'
       $repetition_selector = idx(
         HeraldRepetitionPolicyConfig::getMap(),
         HeraldRepetitionPolicyConfig::EVERY);
       return $repetition_selector;
     } else if (count($repetition_options) == 1) {
       // if there's only 1 option, just pick it for the user
       $repetition_selector = reset($repetition_options);
       return $repetition_selector;
     } else {
       return AphrontFormSelectControl::renderSelectTag(
         $repetition_policy,
         $repetition_options,
         array(
           'name' => 'repetition_policy',
         ));
     }
   }
 
 
   protected function buildTokenizerTemplates() {
     $template = new AphrontTokenizerTemplateView();
     $template = $template->render();
 
     return array(
       'source' => array(
         'email'       => '/typeahead/common/mailable/',
         'user'        => '/typeahead/common/users/',
         'repository'  => '/typeahead/common/repositories/',
         'package'     => '/typeahead/common/packages/',
         'project'     => '/typeahead/common/projects/',
       ),
       'markup' => $template,
     );
   }
 
 
   /**
    * Load rules for the "Another Herald rule..." condition dropdown, which
    * allows one rule to depend upon the success or failure of another rule.
    */
   private function loadRulesThisRuleMayDependUpon(HeraldRule $rule) {
     // Any rule can depend on a global rule.
     $all_rules = id(new HeraldRuleQuery())
       ->withRuleTypes(array(HeraldRuleTypeConfig::RULE_TYPE_GLOBAL))
       ->withContentTypes(array($rule->getContentType()))
       ->execute();
 
     if ($rule->getRuleType() == HeraldRuleTypeConfig::RULE_TYPE_PERSONAL) {
       // Personal rules may depend upon your other personal rules.
       $all_rules += id(new HeraldRuleQuery())
         ->withRuleTypes(array(HeraldRuleTypeConfig::RULE_TYPE_PERSONAL))
         ->withContentTypes(array($rule->getContentType()))
         ->withAuthorPHIDs(array($rule->getAuthorPHID()))
         ->execute();
     }
 
     // A rule can not depend upon itself.
     unset($all_rules[$rule->getID()]);
 
     return $all_rules;
   }
 
 
 }
diff --git a/src/applications/herald/controller/HeraldTestConsoleController.php b/src/applications/herald/controller/HeraldTestConsoleController.php
index f0225d7081..7d4836c508 100644
--- a/src/applications/herald/controller/HeraldTestConsoleController.php
+++ b/src/applications/herald/controller/HeraldTestConsoleController.php
@@ -1,145 +1,141 @@
 <?php
 
 final class HeraldTestConsoleController extends HeraldController {
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $request = $this->getRequest();
 
     $object_name = trim($request->getStr('object_name'));
 
     $e_name = true;
     $errors = array();
     if ($request->isFormPost()) {
       if (!$object_name) {
         $e_name = 'Required';
         $errors[] = 'An object name is required.';
       }
 
       if (!$errors) {
         $matches = null;
         $object = null;
         if (preg_match('/^D(\d+)$/', $object_name, $matches)) {
           $object = id(new DifferentialRevision())->load($matches[1]);
           if (!$object) {
             $e_name = 'Invalid';
             $errors[] = 'No Differential Revision with that ID exists.';
           }
         } else if (preg_match('/^r([A-Z]+)(\w+)$/', $object_name, $matches)) {
           $repo = id(new PhabricatorRepository())->loadOneWhere(
             'callsign = %s',
             $matches[1]);
           if (!$repo) {
             $e_name = 'Invalid';
             $errors[] = 'There is no repository with the callsign '.
                         $matches[1].'.';
           }
           $commit = id(new PhabricatorRepositoryCommit())->loadOneWhere(
             'repositoryID = %d AND commitIdentifier = %s',
             $repo->getID(),
             $matches[2]);
           if (!$commit) {
             $e_name = 'Invalid';
             $errors[] = 'There is no commit with that identifier.';
           }
           $object = $commit;
         } else {
           $e_name = 'Invalid';
           $errors[] = 'This object name is not recognized.';
         }
 
         if (!$errors) {
           if ($object instanceof DifferentialRevision) {
             $adapter = new HeraldDifferentialRevisionAdapter(
               $object,
               $object->loadActiveDiff());
           } else if ($object instanceof PhabricatorRepositoryCommit) {
             $data = id(new PhabricatorRepositoryCommitData())->loadOneWhere(
               'commitID = %d',
               $object->getID());
             $adapter = new HeraldCommitAdapter(
               $repo,
               $object,
               $data);
           } else {
             throw new Exception("Can not build adapter for object!");
           }
 
           $rules = HeraldRule::loadAllByContentTypeWithFullData(
             $adapter->getHeraldTypeName(),
             $object->getPHID());
 
           $engine = new HeraldEngine();
           $effects = $engine->applyRules($rules, $adapter);
 
           $dry_run = new HeraldDryRunAdapter();
           $engine->applyEffects($effects, $dry_run, $rules);
 
           $xscript = $engine->getTranscript();
 
           return id(new AphrontRedirectResponse())
             ->setURI('/herald/transcript/'.$xscript->getID().'/');
         }
       }
     }
 
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setTitle('Form Errors');
       $error_view->setErrors($errors);
     } else {
       $error_view = null;
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">Enter an object to test rules '.
         'for, like a Diffusion commit (e.g., <tt>rX123</tt>) or a '.
         'Differential revision (e.g., <tt>D123</tt>). You will be shown the '.
         'results of a dry run on the object.</p>'))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Object Name'))
           ->setName('object_name')
           ->setError($e_name)
           ->setValue($object_name))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Test Rules')));
 
-    $panel = new AphrontPanelView();
-    $panel->setHeader(pht('Test Herald Rules'));
-    $panel->setWidth(AphrontPanelView::WIDTH_FULL);
-    $panel->appendChild($form);
-    $panel->setNoBackground();
-
     $nav = $this->renderNav();
     $nav->selectFilter('test');
     $nav->appendChild(
       array(
         $error_view,
-        $panel,
+        $form,
       ));
 
     $crumbs = id($this->buildApplicationCrumbs())
       ->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Transcripts'))
           ->setHref($this->getApplicationURI('/transcript/')))
       ->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Test Console')));
     $nav->setCrumbs($crumbs);
 
-    return $this->buildStandardPageResponse(
+    return $this->buildApplicationPage(
       $nav,
       array(
-        'title' => 'Test Console',
+        'title' => pht('Test Console'),
+        'dust' => true,
+        'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/mailinglists/controller/PhabricatorMailingListsEditController.php b/src/applications/mailinglists/controller/PhabricatorMailingListsEditController.php
index 26146827df..be5f9dac65 100644
--- a/src/applications/mailinglists/controller/PhabricatorMailingListsEditController.php
+++ b/src/applications/mailinglists/controller/PhabricatorMailingListsEditController.php
@@ -1,148 +1,142 @@
 <?php
 
 final class PhabricatorMailingListsEditController
   extends PhabricatorMailingListsController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
 
     if ($this->id) {
       $list = id(new PhabricatorMetaMTAMailingList())->load($this->id);
       if (!$list) {
         return new Aphront404Response();
       }
     } else {
       $list = new PhabricatorMetaMTAMailingList();
     }
 
     $e_email = true;
     $e_uri = null;
     $e_name = true;
     $errors = array();
 
     $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
 
     $request = $this->getRequest();
     if ($request->isFormPost()) {
       $list->setName($request->getStr('name'));
       $list->setEmail($request->getStr('email'));
       $list->setURI($request->getStr('uri'));
 
       $e_email = null;
       $e_name = null;
 
       if (!strlen($list->getEmail())) {
         $e_email = pht('Required');
         $errors[] = pht('Email is required.');
       }
 
       if (!strlen($list->getName())) {
         $e_name = pht('Required');
         $errors[] = pht('Name is required.');
       } else if (preg_match('/[ ,]/', $list->getName())) {
         $e_name = pht('Invalid');
         $errors[] = pht('Name must not contain spaces or commas.');
       }
 
       if ($list->getURI()) {
         if (!PhabricatorEnv::isValidWebResource($list->getURI())) {
           $e_uri = pht('Invalid');
           $errors[] = pht('Mailing list URI must point to a valid web page.');
         }
       }
 
       if (!$errors) {
         try {
           $list->save();
           return id(new AphrontRedirectResponse())
             ->setURI($this->getApplicationURI());
         } catch (AphrontQueryDuplicateKeyException $ex) {
           $e_email = pht('Duplicate');
           $errors[] = pht('Another mailing list already uses that address.');
         }
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     }
 
     $form = new AphrontFormView();
     $form->setUser($request->getUser());
     if ($list->getID()) {
       $form->setAction($this->getApplicationURI('/edit/'.$list->getID().'/'));
     } else {
       $form->setAction($this->getApplicationURI('/edit/'));
     }
 
     $form
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Email'))
           ->setName('email')
           ->setValue($list->getEmail())
           ->setCaption(pht('Email will be delivered to this address.'))
           ->setError($e_email))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Name'))
           ->setName('name')
           ->setError($e_name)
           ->setCaption(pht('Human-readable display and autocomplete name.'))
           ->setValue($list->getName()))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('URI'))
           ->setName('uri')
           ->setError($e_uri)
           ->setCaption(pht('Optional link to mailing list archives or info.'))
           ->setValue($list->getURI()))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel('PHID')
           ->setValue(nonempty($list->getPHID(), '-')))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue(pht('Save'))
           ->addCancelButton($this->getApplicationURI()));
 
-    $panel = new AphrontPanelView();
     if ($list->getID()) {
-      $panel->setHeader(pht('Edit Mailing List'));
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Edit Mailing List'))
           ->setHref($this->getApplicationURI('/edit/'.$list->getID().'/')));
     } else {
-      $panel->setHeader(pht('Create Mailing List'));
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Create Mailing List'))
           ->setHref($this->getApplicationURI('/edit/')));
     }
 
-    $panel->appendChild($form);
-    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
-    $panel->setNoBackground();
-
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $error_view,
-        $panel,
+        $form,
       ),
       array(
         'title' => pht('Edit Mailing List'),
         'device' => true,
+        'dust' => true,
       ));
   }
 
 }
diff --git a/src/applications/maniphest/controller/ManiphestTaskEditController.php b/src/applications/maniphest/controller/ManiphestTaskEditController.php
index 4f3fce1a77..afde05d34a 100644
--- a/src/applications/maniphest/controller/ManiphestTaskEditController.php
+++ b/src/applications/maniphest/controller/ManiphestTaskEditController.php
@@ -1,562 +1,558 @@
 <?php
 
 /**
  * @group maniphest
  */
 final class ManiphestTaskEditController extends ManiphestController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $files = array();
     $parent_task = null;
     $template_id = null;
 
     if ($this->id) {
       $task = id(new ManiphestTask())->load($this->id);
       if (!$task) {
         return new Aphront404Response();
       }
     } else {
       $task = new ManiphestTask();
       $task->setPriority(ManiphestTaskPriority::getDefaultPriority());
       $task->setAuthorPHID($user->getPHID());
 
       // These allow task creation with defaults.
       if (!$request->isFormPost()) {
         $task->setTitle($request->getStr('title'));
 
         $default_projects = $request->getStr('projects');
         if ($default_projects) {
           $task->setProjectPHIDs(explode(';', $default_projects));
         }
       }
 
       $file_phids = $request->getArr('files', array());
       if (!$file_phids) {
         // Allow a single 'file' key instead, mostly since Mac OS X urlencodes
         // square brackets in URLs when passed to 'open', so you can't 'open'
         // a URL like '?files[]=xyz' and have PHP interpret it correctly.
         $phid = $request->getStr('file');
         if ($phid) {
           $file_phids = array($phid);
         }
       }
 
       if ($file_phids) {
         $files = id(new PhabricatorFile())->loadAllWhere(
           'phid IN (%Ls)',
           $file_phids);
       }
 
       $template_id = $request->getInt('template');
 
       // You can only have a parent task if you're creating a new task.
       $parent_id = $request->getInt('parent');
       if ($parent_id) {
         $parent_task = id(new ManiphestTask())->load($parent_id);
         if (!$template_id) {
           $template_id = $parent_id;
         }
       }
     }
 
     $errors = array();
     $e_title = true;
 
     $extensions = ManiphestTaskExtensions::newExtensions();
     $aux_fields = $extensions->loadFields($task, $user);
 
     if ($request->isFormPost()) {
       $changes = array();
 
       $new_title = $request->getStr('title');
       $new_desc = $request->getStr('description');
       $new_status = $request->getStr('status');
 
       $workflow = '';
 
       if ($task->getID()) {
         if ($new_title != $task->getTitle()) {
           $changes[ManiphestTransactionType::TYPE_TITLE] = $new_title;
         }
         if ($new_desc != $task->getDescription()) {
           $changes[ManiphestTransactionType::TYPE_DESCRIPTION] = $new_desc;
         }
         if ($new_status != $task->getStatus()) {
           $changes[ManiphestTransactionType::TYPE_STATUS] = $new_status;
         }
       } else {
         $task->setTitle($new_title);
         $task->setDescription($new_desc);
         $changes[ManiphestTransactionType::TYPE_STATUS] =
           ManiphestTaskStatus::STATUS_OPEN;
 
         $workflow = 'create';
       }
 
       $owner_tokenizer = $request->getArr('assigned_to');
       $owner_phid = reset($owner_tokenizer);
 
       if (!strlen($new_title)) {
         $e_title = pht('Required');
         $errors[] = pht('Title is required.');
       }
 
       foreach ($aux_fields as $aux_field) {
         $aux_field->setValueFromRequest($request);
 
         if ($aux_field->isRequired() && !$aux_field->getValue()) {
           $errors[] = pht('%s is required.', $aux_field->getLabel());
           $aux_field->setError(pht('Required'));
         }
 
         try {
           $aux_field->validate();
         } catch (Exception $e) {
           $errors[] = $e->getMessage();
           $aux_field->setError(pht('Invalid'));
         }
       }
 
       if ($errors) {
         $task->setPriority($request->getInt('priority'));
         $task->setOwnerPHID($owner_phid);
         $task->setCCPHIDs($request->getArr('cc'));
         $task->setProjectPHIDs($request->getArr('projects'));
       } else {
         if ($request->getInt('priority') != $task->getPriority()) {
           $changes[ManiphestTransactionType::TYPE_PRIORITY] =
             $request->getInt('priority');
         }
 
         if ($owner_phid != $task->getOwnerPHID()) {
           $changes[ManiphestTransactionType::TYPE_OWNER] = $owner_phid;
         }
 
         if ($request->getArr('cc') != $task->getCCPHIDs()) {
           $changes[ManiphestTransactionType::TYPE_CCS] = $request->getArr('cc');
         }
 
         $new_proj_arr = $request->getArr('projects');
         $new_proj_arr = array_values($new_proj_arr);
         sort($new_proj_arr);
 
         $cur_proj_arr = $task->getProjectPHIDs();
         $cur_proj_arr = array_values($cur_proj_arr);
         sort($cur_proj_arr);
 
         if ($new_proj_arr != $cur_proj_arr) {
           $changes[ManiphestTransactionType::TYPE_PROJECTS] = $new_proj_arr;
         }
 
         if ($files) {
           $file_map = mpull($files, 'getPHID');
           $file_map = array_fill_keys($file_map, array());
           $changes[ManiphestTransactionType::TYPE_ATTACH] = array(
             PhabricatorPHIDConstants::PHID_TYPE_FILE => $file_map,
           );
         }
 
         $content_source = PhabricatorContentSource::newForSource(
           PhabricatorContentSource::SOURCE_WEB,
           array(
             'ip' => $request->getRemoteAddr(),
           ));
 
         $template = new ManiphestTransaction();
         $template->setAuthorPHID($user->getPHID());
         $template->setContentSource($content_source);
         $transactions = array();
 
         foreach ($changes as $type => $value) {
           $transaction = clone $template;
           $transaction->setTransactionType($type);
           $transaction->setNewValue($value);
           $transactions[] = $transaction;
         }
 
         if ($aux_fields) {
           foreach ($aux_fields as $aux_field) {
             $transaction = clone $template;
             $transaction->setTransactionType(
               ManiphestTransactionType::TYPE_AUXILIARY);
             $aux_key = $aux_field->getAuxiliaryKey();
             $transaction->setMetadataValue('aux:key', $aux_key);
             $transaction->setNewValue($aux_field->getValueForStorage());
             $transactions[] = $transaction;
           }
         }
 
         if ($transactions) {
           $is_new = !$task->getID();
 
           $event = new PhabricatorEvent(
             PhabricatorEventType::TYPE_MANIPHEST_WILLEDITTASK,
             array(
               'task'          => $task,
               'new'           => $is_new,
               'transactions'  => $transactions,
             ));
           $event->setUser($user);
           $event->setAphrontRequest($request);
           PhutilEventEngine::dispatchEvent($event);
 
           $task = $event->getValue('task');
           $transactions = $event->getValue('transactions');
 
           $editor = new ManiphestTransactionEditor();
           $editor->setActor($user);
           $editor->setAuxiliaryFields($aux_fields);
           $editor->applyTransactions($task, $transactions);
 
           $event = new PhabricatorEvent(
             PhabricatorEventType::TYPE_MANIPHEST_DIDEDITTASK,
             array(
               'task'          => $task,
               'new'           => $is_new,
               'transactions'  => $transactions,
             ));
           $event->setUser($user);
           $event->setAphrontRequest($request);
           PhutilEventEngine::dispatchEvent($event);
         }
 
 
         if ($parent_task) {
           id(new PhabricatorEdgeEditor())
             ->setActor($user)
             ->addEdge(
               $parent_task->getPHID(),
               PhabricatorEdgeConfig::TYPE_TASK_DEPENDS_ON_TASK,
               $task->getPHID())
             ->save();
           $workflow = $parent_task->getID();
         }
 
         $redirect_uri = '/T'.$task->getID();
 
         if ($workflow) {
           $redirect_uri .= '?workflow='.$workflow;
         }
 
         return id(new AphrontRedirectResponse())
           ->setURI($redirect_uri);
       }
     } else {
       if (!$task->getID()) {
         $task->setCCPHIDs(array(
           $user->getPHID(),
         ));
         if ($template_id) {
           $template_task = id(new ManiphestTask())->load($template_id);
           if ($template_task) {
             $task->setCCPHIDs($template_task->getCCPHIDs());
             $task->setProjectPHIDs($template_task->getProjectPHIDs());
             $task->setOwnerPHID($template_task->getOwnerPHID());
             $task->setPriority($template_task->getPriority());
 
             if ($aux_fields) {
               $template_task->loadAndAttachAuxiliaryAttributes();
               foreach ($aux_fields as $aux_field) {
                 if (!$aux_field->shouldCopyWhenCreatingSimilarTask()) {
                   continue;
                 }
 
                 $aux_key = $aux_field->getAuxiliaryKey();
                 $value = $template_task->getAuxiliaryAttribute($aux_key);
                 $aux_field->setValueFromStorage($value);
               }
             }
           }
         }
       }
     }
 
     $phids = array_merge(
       array($task->getOwnerPHID()),
       $task->getCCPHIDs(),
       $task->getProjectPHIDs(),
       array_mergev(mpull($aux_fields, 'getRequiredHandlePHIDs')));
 
     if ($parent_task) {
       $phids[] = $parent_task->getPHID();
     }
 
     $phids = array_filter($phids);
     $phids = array_unique($phids);
 
     $handles = $this->loadViewerHandles($phids);
 
     foreach ($aux_fields as $aux_field) {
       $aux_field->setHandles($handles);
     }
 
     $tvalues = mpull($handles, 'getFullName', 'getPHID');
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setErrors($errors);
       $error_view->setTitle(pht('Form Errors'));
     }
 
     $priority_map = ManiphestTaskPriority::getTaskPriorityMap();
 
     if ($task->getOwnerPHID()) {
       $assigned_value = array(
         $task->getOwnerPHID() => $handles[$task->getOwnerPHID()]->getFullName(),
       );
     } else {
       $assigned_value = array();
     }
 
     if ($task->getCCPHIDs()) {
       $cc_value = array_select_keys($tvalues, $task->getCCPHIDs());
     } else {
       $cc_value = array();
     }
 
     if ($task->getProjectPHIDs()) {
       $projects_value = array_select_keys($tvalues, $task->getProjectPHIDs());
     } else {
       $projects_value = array();
     }
 
     $cancel_id = nonempty($task->getID(), $template_id);
     if ($cancel_id) {
       $cancel_uri = '/T'.$cancel_id;
     } else {
       $cancel_uri = '/maniphest/';
     }
 
     if ($task->getID()) {
       $button_name = pht('Save Task');
       $header_name = pht('Edit Task');
     } else if ($parent_task) {
       $cancel_uri = '/T'.$parent_task->getID();
       $button_name = pht('Create Task');
       $header_name = pht('Create New Subtask');
     } else {
       $button_name = pht('Create Task');
       $header_name = pht('Create New Task');
     }
 
     require_celerity_resource('maniphest-task-edit-css');
 
     $project_tokenizer_id = celerity_generate_unique_node_id();
 
     $form = new AphrontFormView();
+    $form->setFlexible(true);
     $form
       ->setUser($user)
       ->setAction($request->getRequestURI()->getPath())
       ->addHiddenInput('template', $template_id);
 
     if ($parent_task) {
       $form
         ->appendChild(
           id(new AphrontFormStaticControl())
             ->setLabel(pht('Parent Task'))
             ->setValue($handles[$parent_task->getPHID()]->getFullName()))
         ->addHiddenInput('parent', $parent_task->getID());
     }
 
     $form
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel(pht('Title'))
           ->setName('title')
           ->setError($e_title)
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT)
           ->setValue($task->getTitle()));
 
     if ($task->getID()) {
       // Only show this in "edit" mode, not "create" mode, since creating a
       // non-open task is kind of silly and it would just clutter up the
       // "create" interface.
       $form
         ->appendChild(
           id(new AphrontFormSelectControl())
             ->setLabel(pht('Status'))
             ->setName('status')
             ->setValue($task->getStatus())
             ->setOptions(ManiphestTaskStatus::getTaskStatusMap()));
     }
 
     $form
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel(pht('Assigned To'))
           ->setName('assigned_to')
           ->setValue($assigned_value)
           ->setUser($user)
           ->setDatasource('/typeahead/common/users/')
           ->setLimit(1))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel(pht('CC'))
           ->setName('cc')
           ->setValue($cc_value)
           ->setUser($user)
           ->setDatasource('/typeahead/common/mailable/'))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Priority'))
           ->setName('priority')
           ->setOptions($priority_map)
           ->setValue($task->getPriority()))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setLabel(pht('Projects'))
           ->setName('projects')
           ->setValue($projects_value)
           ->setID($project_tokenizer_id)
           ->setCaption(
             javelin_tag(
               'a',
               array(
                 'href'        => '/project/create/',
                 'mustcapture' => true,
                 'sigil'       => 'project-create',
               ),
               pht('Create New Project')))
           ->setDatasource('/typeahead/common/projects/'));
 
     foreach ($aux_fields as $aux_field) {
       if ($aux_field->isRequired() &&
           !$aux_field->getError() &&
           !$aux_field->getValue()) {
         $aux_field->setError(true);
       }
 
       $aux_control = $aux_field->renderControl();
       $form->appendChild($aux_control);
     }
 
     require_celerity_resource('aphront-error-view-css');
 
     Javelin::initBehavior('project-create', array(
       'tokenizerID' => $project_tokenizer_id,
     ));
 
     if ($files) {
       $file_display = mpull($files, 'getName');
       $file_display = phutil_implode_html(phutil_tag('br'), $file_display);
 
       $form->appendChild(
         id(new AphrontFormMarkupControl())
           ->setLabel(pht('Files'))
           ->setValue($file_display));
 
       foreach ($files as $ii => $file) {
         $form->addHiddenInput('files['.$ii.']', $file->getPHID());
       }
     }
 
 
     $description_control = new PhabricatorRemarkupControl();
     // "Upsell" creating tasks via email in create flows if the instance is
     // configured for this awesomeness.
     $email_create = PhabricatorEnv::getEnvConfig(
       'metamta.maniphest.public-create-email');
     if (!$task->getID() && $email_create) {
       $email_hint = pht(
         'You can also create tasks by sending an email to: %s',
         phutil_tag('tt', array(), $email_create));
       $description_control->setCaption($email_hint);
     }
 
     $description_control
       ->setLabel(pht('Description'))
       ->setName('description')
       ->setID('description-textarea')
       ->setValue($task->getDescription())
       ->setUser($user);
 
     $form
       ->appendChild($description_control);
 
     if (!$task->getID()) {
       $form
         ->appendChild(
           id(new AphrontFormDragAndDropUploadControl())
             ->setLabel(pht('Attached Files'))
             ->setName('files')
             ->setActivatedClass('aphront-panel-view-drag-and-drop'));
     }
 
     $form
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($cancel_uri)
           ->setValue($button_name));
 
-    $panel = new AphrontPanelView();
-    $panel->setWidth(AphrontPanelView::WIDTH_FULL);
-    $panel->setHeader($header_name);
-    $panel->appendChild($form);
-    $panel->setNoBackground();
     $inst1 = pht('Description Preview');
     $inst2 = pht('Loading preview...');
 
     $description_preview_panel = hsprintf(
       '<div class="aphront-panel-preview aphront-panel-preview-full">
         <div class="maniphest-description-preview-header">
           %s
         </div>
         <div id="description-preview">
           <div class="aphront-panel-preview-loading-text">
             %s
           </div>
         </div>
       </div>',
       $inst1,
       $inst2);
 
     Javelin::initBehavior(
       'maniphest-description-preview',
       array(
         'preview'   => 'description-preview',
         'textarea'  => 'description-textarea',
         'uri'       => '/maniphest/task/descriptionpreview/',
       ));
 
     if ($task->getID()) {
       $page_objects = array( $task->getPHID() );
     } else {
       $page_objects = array();
     }
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($header_name)
         ->setHref($this->getApplicationURI('/task/create/')))
       ->addAction(
         id(new PhabricatorMenuItemView())
           ->setHref($this->getApplicationURI('/task/create/'))
           ->setName(pht('Create Task'))
           ->setIcon('create'));
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $error_view,
-        $panel,
+        $form,
         $description_preview_panel,
       ),
       array(
         'title' => $header_name,
         'pageObjects' => $page_objects,
         'device' => true,
       ));
   }
 }
diff --git a/src/applications/owners/controller/PhabricatorOwnersEditController.php b/src/applications/owners/controller/PhabricatorOwnersEditController.php
index 1be18ddd8c..99249c8376 100644
--- a/src/applications/owners/controller/PhabricatorOwnersEditController.php
+++ b/src/applications/owners/controller/PhabricatorOwnersEditController.php
@@ -1,272 +1,275 @@
 <?php
 
 final class PhabricatorOwnersEditController
   extends PhabricatorOwnersController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($this->id) {
       $package = id(new PhabricatorOwnersPackage())->load($this->id);
       if (!$package) {
         return new Aphront404Response();
       }
     } else {
       $package = new PhabricatorOwnersPackage();
       $package->setPrimaryOwnerPHID($user->getPHID());
     }
 
     $e_name = true;
     $e_primary = true;
 
     $errors = array();
 
     if ($request->isFormPost()) {
       $package->setName($request->getStr('name'));
       $package->setDescription($request->getStr('description'));
       $old_auditing_enabled = $package->getAuditingEnabled();
       $package->setAuditingEnabled(
         ($request->getStr('auditing') === 'enabled')
           ? 1
           : 0);
 
       $primary = $request->getArr('primary');
       $primary = reset($primary);
       $old_primary = $package->getPrimaryOwnerPHID();
       $package->setPrimaryOwnerPHID($primary);
 
       $owners = $request->getArr('owners');
       if ($primary) {
         array_unshift($owners, $primary);
       }
       $owners = array_unique($owners);
 
       $paths = $request->getArr('path');
       $repos = $request->getArr('repo');
       $excludes = $request->getArr('exclude');
 
       $path_refs = array();
       for ($ii = 0; $ii < count($paths); $ii++) {
         if (empty($paths[$ii]) || empty($repos[$ii])) {
           continue;
         }
         $path_refs[] = array(
           'repositoryPHID'  => $repos[$ii],
           'path'            => $paths[$ii],
           'excluded'        => $excludes[$ii],
         );
       }
 
       if (!strlen($package->getName())) {
         $e_name = 'Required';
         $errors[] = 'Package name is required.';
       } else {
         $e_name = null;
       }
 
       if (!$package->getPrimaryOwnerPHID()) {
         $e_primary = 'Required';
         $errors[] = 'Package must have a primary owner.';
       } else {
         $e_primary = null;
       }
 
       if (!$path_refs) {
         $errors[] = 'Package must include at least one path.';
       }
 
       if (!$errors) {
         $package->attachUnsavedOwners($owners);
         $package->attachUnsavedPaths($path_refs);
         $package->attachOldAuditingEnabled($old_auditing_enabled);
         $package->attachOldPrimaryOwnerPHID($old_primary);
         $package->attachActorPHID($user->getPHID());
         try {
           $package->save();
           return id(new AphrontRedirectResponse())
             ->setURI('/owners/package/'.$package->getID().'/');
         } catch (AphrontQueryDuplicateKeyException $ex) {
           $e_name = 'Duplicate';
           $errors[] = 'Package name must be unique.';
         }
       }
     } else {
       $owners = $package->loadOwners();
       $owners = mpull($owners, 'getUserPHID');
 
       $paths = $package->loadPaths();
       $path_refs = array();
       foreach ($paths as $path) {
         $path_refs[] = array(
           'repositoryPHID' => $path->getRepositoryPHID(),
           'path' => $path->getPath(),
           'excluded' => $path->getExcluded(),
         );
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setTitle('Package Errors');
       $error_view->setErrors($errors);
     }
 
     $handles = $this->loadViewerHandles($owners);
 
     $primary = $package->getPrimaryOwnerPHID();
     if ($primary && isset($handles[$primary])) {
       $token_primary_owner = array(
         $primary => $handles[$primary]->getFullName(),
       );
     } else {
       $token_primary_owner = array();
     }
 
     $token_all_owners = array_select_keys($handles, $owners);
     $token_all_owners = mpull($token_all_owners, 'getFullName');
 
     if ($package->getID()) {
-      $title = 'Edit Package';
+      $title = pht('Edit Package');
       $side_nav_filter = 'edit/'.$this->id;
     } else {
-      $title = 'New Package';
+      $title = pht('New Package');
       $side_nav_filter = 'new';
     }
     $this->setSideNavFilter($side_nav_filter);
 
     $repos = id(new PhabricatorRepository())->loadAll();
 
     $default_paths = array();
     foreach ($repos as $repo) {
       $default_path = $repo->getDetail('default-owners-path');
       if ($default_path) {
         $default_paths[$repo->getPHID()] = $default_path;
       }
     }
 
     $repos = mpull($repos, 'getCallsign', 'getPHID');
 
     $template = new AphrontTypeaheadTemplateView();
     $template = $template->render();
 
     Javelin::initBehavior(
       'owners-path-editor',
       array(
         'root'                => 'path-editor',
         'table'               => 'paths',
         'add_button'          => 'addpath',
         'repositories'        => $repos,
         'input_template'      => $template,
         'pathRefs'            => $path_refs,
 
         'completeURI'         => '/diffusion/services/path/complete/',
         'validateURI'         => '/diffusion/services/path/validate/',
 
         'repositoryDefaultPaths' => $default_paths,
       ));
 
     require_celerity_resource('owners-path-editor-css');
 
     $cancel_uri = $package->getID()
       ? '/owners/package/'.$package->getID().'/'
       : '/owners/';
 
     $form = id(new AphrontFormView())
       ->setUser($user)
+      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('Name')
           ->setName('name')
           ->setValue($package->getName())
           ->setError($e_name))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setDatasource('/typeahead/common/usersorprojects/')
           ->setLabel('Primary Owner')
           ->setName('primary')
           ->setLimit(1)
           ->setValue($token_primary_owner)
           ->setError($e_primary))
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setDatasource('/typeahead/common/usersorprojects/')
           ->setLabel('Owners')
           ->setName('owners')
           ->setValue($token_all_owners))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setName('auditing')
           ->setLabel('Auditing')
           ->setCaption('With auditing enabled, all future commits that touch '.
                        'this package will be reviewed to make sure an owner '.
                        'of the package is involved and the commit message has '.
                        'a valid revision, reviewed by, and author.')
           ->setOptions(array(
             'disabled'  => 'Disabled',
             'enabled'   => 'Enabled',
           ))
           ->setValue(
             $package->getAuditingEnabled()
               ? 'enabled'
               : 'disabled'))
       ->appendChild(
         id(new AphrontFormInsetView())
           ->setTitle('Paths')
           ->addDivAttributes(array('id' => 'path-editor'))
           ->setRightButton(javelin_tag(
               'a',
               array(
                 'href' => '#',
                 'class' => 'button green',
                 'sigil' => 'addpath',
                 'mustcapture' => true,
               ),
               'Add New Path'))
           ->setDescription('Specify the files and directories which comprise '.
                            'this package.')
           ->setContent(javelin_tag(
               'table',
               array(
                 'class' => 'owners-path-editor-table',
                 'sigil' => 'paths',
               ),
               '')))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel('Description')
           ->setName('description')
           ->setValue($package->getDescription()))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($cancel_uri)
           ->setValue('Save Package'));
 
-    $panel = new AphrontPanelView();
-    $panel->setHeader($title);
-    $panel->setWidth(AphrontPanelView::WIDTH_WIDE);
-    $panel->appendChild($error_view);
-    $panel->appendChild($form);
+    $header = id(new PhabricatorHeaderView())
+      ->setHeader($title);
 
-    return $this->buildStandardPageResponse(
-      $panel,
+    return $this->buildApplicationPage(
+      array(
+        $error_view,
+        $header,
+        $form,
+      ),
       array(
         'title' => $title,
+        'dust' => true,
       ));
   }
 
   protected function getExtraPackageViews(AphrontSideNavFilterView $view) {
     if ($this->id) {
       $view->addFilter('edit/'.$this->id, 'Edit');
     } else {
       $view->addFilter('new', 'New');
     }
   }
 }
diff --git a/src/applications/phame/controller/blog/PhameBlogEditController.php b/src/applications/phame/controller/blog/PhameBlogEditController.php
index 987ffe63e0..fa23ff1c42 100644
--- a/src/applications/phame/controller/blog/PhameBlogEditController.php
+++ b/src/applications/phame/controller/blog/PhameBlogEditController.php
@@ -1,201 +1,197 @@
 <?php
 
 /**
  * @group phame
  */
 final class PhameBlogEditController
   extends PhameController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($this->id) {
       $blog = id(new PhameBlogQuery())
         ->setViewer($user)
         ->withIDs(array($this->id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_EDIT
           ))
         ->executeOne();
       if (!$blog) {
         return new Aphront404Response();
       }
 
       $submit_button = pht('Save Changes');
       $page_title = pht('Edit Blog');
       $cancel_uri = $this->getApplicationURI('blog/view/'.$blog->getID().'/');
     } else {
       $blog = id(new PhameBlog())
         ->setCreatorPHID($user->getPHID());
 
       $blog->setViewPolicy(PhabricatorPolicies::POLICY_USER);
       $blog->setEditPolicy(PhabricatorPolicies::POLICY_USER);
       $blog->setJoinPolicy(PhabricatorPolicies::POLICY_USER);
 
       $submit_button = pht('Create Blog');
       $page_title = pht('Create Blog');
       $cancel_uri = $this->getApplicationURI();
     }
 
     $e_name          = true;
     $e_custom_domain = null;
     $errors          = array();
 
     if ($request->isFormPost()) {
       $name          = $request->getStr('name');
       $description   = $request->getStr('description');
       $custom_domain = $request->getStr('custom_domain');
       $skin          = $request->getStr('skin');
 
       if (empty($name)) {
         $errors[] = pht('You must give the blog a name.');
         $e_name = pht('Required');
       } else {
         $e_name = null;
       }
 
       $blog->setName($name);
       $blog->setDescription($description);
       $blog->setDomain(nonempty($custom_domain, null));
       $blog->setSkin($skin);
 
       if (!empty($custom_domain)) {
         $error = $blog->validateCustomDomain($custom_domain);
         if ($error) {
           $errors[] = $error;
           $e_custom_domain = pht('Invalid');
         }
       }
 
       $blog->setViewPolicy($request->getStr('can_view'));
       $blog->setEditPolicy($request->getStr('can_edit'));
       $blog->setJoinPolicy($request->getStr('can_join'));
 
       // Don't let users remove their ability to edit blogs.
       PhabricatorPolicyFilter::mustRetainCapability(
         $user,
         $blog,
         PhabricatorPolicyCapability::CAN_EDIT);
 
       if (!$errors) {
         try {
           $blog->save();
           return id(new AphrontRedirectResponse())
             ->setURI($this->getApplicationURI('blog/view/'.$blog->getID().'/'));
         } catch (AphrontQueryDuplicateKeyException $ex) {
           $errors[] = pht('Domain must be unique.');
           $e_custom_domain = pht('Not Unique');
         }
       }
     }
 
     $policies = id(new PhabricatorPolicyQuery())
       ->setViewer($user)
       ->setObject($blog)
       ->execute();
 
     $skins = PhameSkinSpecification::loadAllSkinSpecifications();
     $skins = mpull($skins, 'getName');
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel(pht('Name'))
         ->setName('name')
         ->setValue($blog->getName())
         ->setID('blog-name')
         ->setError($e_name))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
         ->setLabel(pht('Description'))
         ->setName('description')
         ->setValue($blog->getDescription())
         ->setID('blog-description')
         ->setUser($user)
         ->setDisableMacros(true))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
           ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
           ->setPolicyObject($blog)
           ->setPolicies($policies)
           ->setName('can_view'))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
           ->setCapability(PhabricatorPolicyCapability::CAN_EDIT)
           ->setPolicyObject($blog)
           ->setPolicies($policies)
           ->setName('can_edit'))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
           ->setCapability(PhabricatorPolicyCapability::CAN_JOIN)
           ->setPolicyObject($blog)
           ->setPolicies($policies)
           ->setName('can_join'))
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel(pht('Custom Domain'))
         ->setName('custom_domain')
         ->setValue($blog->getDomain())
         ->setCaption(
           pht('Must include at least one dot (.), e.g. blog.example.com'))
         ->setError($e_custom_domain))
       ->appendChild(
         id(new AphrontFormSelectControl())
         ->setLabel(pht('Skin'))
         ->setName('skin')
         ->setValue($blog->getSkin())
         ->setOptions($skins))
       ->appendChild(
         id(new AphrontFormSubmitControl())
         ->addCancelButton($cancel_uri)
         ->setValue($submit_button));
 
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     } else {
       $error_view = null;
     }
 
-    $header = id(new PhabricatorHeaderView())
-      ->setHeader($page_title);
-
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($page_title)
         ->setHref($this->getApplicationURI('blog/new')));
 
     $nav = $this->renderSideNavFilterView();
     $nav->selectFilter($this->id ? null : 'blog/new');
     $nav->appendChild(
       array(
         $crumbs,
-        $header,
         $error_view,
         $form,
       ));
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => $page_title,
         'device' => true,
         'dust' => true,
       ));
   }
 }
diff --git a/src/applications/phame/controller/post/PhamePostEditController.php b/src/applications/phame/controller/post/PhamePostEditController.php
index eddc903604..e72a949834 100644
--- a/src/applications/phame/controller/post/PhamePostEditController.php
+++ b/src/applications/phame/controller/post/PhamePostEditController.php
@@ -1,204 +1,201 @@
 <?php
 
 /**
  * @group phame
  */
 final class PhamePostEditController
   extends PhameController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request       = $this->getRequest();
     $user          = $request->getUser();
 
     if ($this->id) {
       $post = id(new PhamePostQuery())
         ->setViewer($user)
         ->withIDs(array($this->id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->executeOne();
       if (!$post) {
         return new Aphront404Response();
       }
 
       $cancel_uri = $this->getApplicationURI('/post/view/'.$this->id.'/');
       $submit_button = pht('Save Changes');
       $page_title = pht('Edit Post');
     } else {
       $blog = id(new PhameBlogQuery())
         ->setViewer($user)
         ->withIDs(array($request->getInt('blog')))
         ->executeOne();
       if (!$blog) {
         return new Aphront404Response();
       }
 
       $post = id(new PhamePost())
         ->setBloggerPHID($user->getPHID())
         ->setBlogPHID($blog->getPHID())
         ->setBlog($blog)
         ->setDatePublished(0)
         ->setVisibility(PhamePost::VISIBILITY_DRAFT);
       $cancel_uri = $this->getApplicationURI('/blog/view/'.$blog->getID().'/');
 
       $submit_button = pht('Save Draft');
       $page_title    = pht('Create Post');
     }
 
     $e_phame_title = null;
     $e_title       = true;
     $errors        = array();
 
     if ($request->isFormPost()) {
       $comments    = $request->getStr('comments_widget');
       $data        = array('comments_widget' => $comments);
       $phame_title = $request->getStr('phame_title');
       $phame_title = PhabricatorSlug::normalize($phame_title);
       $title       = $request->getStr('title');
       $post->setTitle($title);
       $post->setPhameTitle($phame_title);
       $post->setBody($request->getStr('body'));
       $post->setConfigData($data);
 
       if ($phame_title == '/') {
         $errors[]      = pht('Phame title must be nonempty.');
         $e_phame_title = pht('Required');
       }
 
       if (!strlen($title)) {
         $errors[] = pht('Title must be nonempty.');
         $e_title  = pht('Required');
       } else {
         $e_title = null;
       }
 
       if (!$errors) {
         try {
           $post->save();
 
           $uri = $this->getApplicationURI('/post/view/'.$post->getID().'/');
           return id(new AphrontRedirectResponse())->setURI($uri);
         } catch (AphrontQueryDuplicateKeyException $e) {
           $e_phame_title = pht('Not Unique');
           $errors[]      = pht('Another post already uses this slug. '.
                            'Each post must have a unique slug.');
         }
       }
     }
 
     $handle = PhabricatorObjectHandleData::loadOneHandle(
       $post->getBlogPHID(),
       $user);
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->setFlexible(true)
       ->addHiddenInput('blog', $request->getInt('blog'))
       ->appendChild(
         id(new AphrontFormMarkupControl())
           ->setLabel(pht('Blog'))
           ->setValue($handle->renderLink()))
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel(pht('Title'))
         ->setName('title')
         ->setValue($post->getTitle())
         ->setID('post-title')
         ->setError($e_title))
       ->appendChild(
         id(new AphrontFormTextControl())
         ->setLabel(pht('Phame Title'))
         ->setName('phame_title')
         ->setValue(rtrim($post->getPhameTitle(), '/'))
         ->setID('post-phame-title')
         ->setCaption(pht('Up to 64 alphanumeric characters '.
                      'with underscores for spaces. '.
                      'Formatting is enforced.'))
         ->setError($e_phame_title))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
         ->setLabel(pht('Body'))
         ->setName('body')
         ->setValue($post->getBody())
         ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL)
         ->setID('post-body')
         ->setUser($user)
         ->setDisableMacros(true))
       ->appendChild(
         id(new AphrontFormSelectControl())
         ->setLabel(pht('Comments Widget'))
         ->setName('comments_widget')
         ->setvalue($post->getCommentsWidget())
         ->setOptions($post->getCommentsWidgetOptionsForSelect()))
       ->appendChild(
         id(new AphrontFormSubmitControl())
         ->addCancelButton($cancel_uri)
         ->setValue($submit_button));
 
     $preview_panel = hsprintf(
       '<div class="aphront-panel-preview">
          <div class="phame-post-preview-header">
            Post Preview
          </div>
          <div id="post-preview">
            <div class="aphront-panel-preview-loading-text">
              Loading preview...
            </div>
          </div>
        </div>');
 
     require_celerity_resource('phame-css');
     Javelin::initBehavior(
       'phame-post-preview',
       array(
         'preview'     => 'post-preview',
         'body'        => 'post-body',
         'title'       => 'post-title',
         'phame_title' => 'post-phame-title',
         'uri'         => '/phame/post/preview/',
       ));
 
-    $header = id(new PhabricatorHeaderView())->setHeader($page_title);
-
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Errors saving post.'))
         ->setErrors($errors);
     } else {
       $error_view = null;
     }
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($page_title)
         ->setHref($this->getApplicationURI('/post/view/'.$this->id.'/')));
 
     $nav = $this->renderSideNavFilterView(null);
     $nav->appendChild(
       array(
         $crumbs,
-        $header,
         $error_view,
         $form,
         $preview_panel,
       ));
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => $page_title,
         'device' => true,
         'dust' => true,
       ));
   }
 
 }
diff --git a/src/applications/phame/controller/post/PhamePostNewController.php b/src/applications/phame/controller/post/PhamePostNewController.php
index 1d43448748..407d52a8a2 100644
--- a/src/applications/phame/controller/post/PhamePostNewController.php
+++ b/src/applications/phame/controller/post/PhamePostNewController.php
@@ -1,134 +1,131 @@
 <?php
 
 /**
  * @group phame
  */
 final class PhamePostNewController extends PhameController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $post = null;
     $view_uri = null;
     if ($this->id) {
       $post = id(new PhamePostQuery())
         ->setViewer($user)
         ->withIDs(array($this->id))
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->executeOne();
       if (!$post) {
         return new Aphront404Response();
       }
 
       $view_uri = '/post/view/'.$post->getID().'/';
       $view_uri = $this->getApplicationURI($view_uri);
 
       if ($request->isFormPost()) {
         $blog = id(new PhameBlogQuery())
           ->setViewer($user)
           ->withIDs(array($request->getInt('blog')))
           ->requireCapabilities(
             array(
               PhabricatorPolicyCapability::CAN_JOIN,
             ))
           ->executeOne();
 
         if ($blog) {
           $post->setBlogPHID($blog->getPHID());
           $post->save();
 
           return id(new AphrontRedirectResponse())->setURI($view_uri);
         }
       }
 
       $title = pht('Move Post');
     } else {
       $title = pht('Create Post');
       $view_uri = $this->getApplicationURI('/post/new');
     }
 
     $blogs = id(new PhameBlogQuery())
       ->setViewer($user)
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_JOIN,
         ))
       ->execute();
 
     $nav = $this->renderSideNavFilterView();
     $nav->selectFilter('post/new');
 
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($title)
         ->setHref($view_uri));
     $nav->appendChild($crumbs);
 
-    $nav->appendChild(
-      id(new PhabricatorHeaderView())->setHeader($title));
-
     if (!$blogs) {
       $notification = id(new AphrontErrorView())
         ->setSeverity(AphrontErrorView::SEVERITY_NODATA)
         ->appendChild(
           pht('You do not have permission to join any blogs. Create a blog '.
               'first, then you can post to it.'));
 
       $nav->appendChild($notification);
     } else {
       $options = mpull($blogs, 'getName', 'getID');
       asort($options);
 
       $selected_value = null;
       if ($post && $post->getBlog()) {
         $selected_value = $post->getBlog()->getID();
       }
 
       $form = id(new AphrontFormView())
         ->setUser($user)
         ->setFlexible(true)
         ->appendChild(
           id(new AphrontFormSelectControl())
             ->setLabel(pht('Blog'))
             ->setName('blog')
             ->setOptions($options)
             ->setValue($selected_value));
 
       if ($post) {
         $form
           ->appendChild(
             id(new AphrontFormSubmitControl())
               ->setValue(pht('Move Post'))
               ->addCancelButton($view_uri));
       } else {
         $form
           ->setAction($this->getApplicationURI('post/edit/'))
           ->setMethod('GET')
           ->appendChild(
             id(new AphrontFormSubmitControl())
               ->setValue(pht('Continue')));
       }
 
       $nav->appendChild($form);
     }
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title'   => $title,
         'device'  => true,
         'dust' => true,
       ));
   }
 }
diff --git a/src/applications/phriction/controller/PhrictionEditController.php b/src/applications/phriction/controller/PhrictionEditController.php
index fdd6c721d7..afa5fee566 100644
--- a/src/applications/phriction/controller/PhrictionEditController.php
+++ b/src/applications/phriction/controller/PhrictionEditController.php
@@ -1,268 +1,267 @@
 <?php
 
 /**
  * @group phriction
  */
 final class PhrictionEditController
   extends PhrictionController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     if ($this->id) {
       $document = id(new PhrictionDocument())->load($this->id);
       if (!$document) {
         return new Aphront404Response();
       }
 
       $revert = $request->getInt('revert');
       if ($revert) {
         $content = id(new PhrictionContent())->loadOneWhere(
           'documentID = %d AND version = %d',
           $document->getID(),
           $revert);
         if (!$content) {
           return new Aphront404Response();
         }
       } else {
         $content = id(new PhrictionContent())->load($document->getContentID());
       }
 
     } else {
       $slug = $request->getStr('slug');
       $slug = PhabricatorSlug::normalize($slug);
       if (!$slug) {
         return new Aphront404Response();
       }
 
       $document = id(new PhrictionDocument())->loadOneWhere(
         'slug = %s',
         $slug);
 
       if ($document) {
         $content = id(new PhrictionContent())->load($document->getContentID());
       } else {
         if (PhrictionDocument::isProjectSlug($slug)) {
           $project = id(new PhabricatorProject())->loadOneWhere(
             'phrictionSlug = %s',
             PhrictionDocument::getProjectSlugIdentifier($slug));
           if (!$project) {
             return new Aphront404Response();
           }
         }
         $document = new PhrictionDocument();
         $document->setSlug($slug);
 
         $content  = new PhrictionContent();
         $content->setSlug($slug);
 
         $default_title = PhabricatorSlug::getDefaultTitle($slug);
         $content->setTitle($default_title);
       }
     }
 
     if ($request->getBool('nodraft')) {
       $draft = null;
       $draft_key = null;
     } else {
       if ($document->getPHID()) {
         $draft_key = $document->getPHID().':'.$content->getVersion();
       } else {
         $draft_key = 'phriction:'.$content->getSlug();
       }
       $draft = id(new PhabricatorDraft())->loadOneWhere(
         'authorPHID = %s AND draftKey = %s',
         $user->getPHID(),
         $draft_key);
     }
 
     require_celerity_resource('phriction-document-css');
 
     $e_title = true;
     $notes = null;
     $errors = array();
 
     if ($request->isFormPost()) {
       $title = $request->getStr('title');
       $notes = $request->getStr('description');
 
       if (!strlen($title)) {
         $e_title = pht('Required');
         $errors[] = pht('Document title is required.');
       } else {
         $e_title = null;
       }
 
       if ($document->getID()) {
         if ($content->getTitle() == $title &&
             $content->getContent() == $request->getStr('content')) {
 
           $dialog = new AphrontDialogView();
           $dialog->setUser($user);
           $dialog->setTitle(pht('No Edits'));
           $dialog->appendChild(phutil_tag('p', array(), pht(
             'You did not make any changes to the document.')));
           $dialog->addCancelButton($request->getRequestURI());
 
           return id(new AphrontDialogResponse())->setDialog($dialog);
         }
       } else if (!strlen($request->getStr('content'))) {
 
         // We trigger this only for new pages. For existing pages, deleting
         // all the content counts as deleting the page.
 
         $dialog = new AphrontDialogView();
         $dialog->setUser($user);
         $dialog->setTitle(pht('Empty Page'));
         $dialog->appendChild(phutil_tag('p', array(), pht(
           'You can not create an empty document.')));
         $dialog->addCancelButton($request->getRequestURI());
 
         return id(new AphrontDialogResponse())->setDialog($dialog);
       }
 
       if (!count($errors)) {
         $editor = id(PhrictionDocumentEditor::newForSlug($document->getSlug()))
           ->setActor($user)
           ->setTitle($title)
           ->setContent($request->getStr('content'))
           ->setDescription($notes);
 
         $editor->save();
 
         if ($draft) {
           $draft->delete();
         }
 
         $uri = PhrictionDocument::getSlugURI($document->getSlug());
         return id(new AphrontRedirectResponse())->setURI($uri);
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = id(new AphrontErrorView())
         ->setTitle(pht('Form Errors'))
         ->setErrors($errors);
     }
 
     if ($document->getID()) {
       $panel_header = pht('Edit Phriction Document');
       $submit_button = pht('Save Changes');
     } else {
       $panel_header = pht('Create New Phriction Document');
       $submit_button = pht('Create Document');
     }
 
     $uri = $document->getSlug();
     $uri = PhrictionDocument::getSlugURI($uri);
     $uri = PhabricatorEnv::getProductionURI($uri);
 
     $cancel_uri = PhrictionDocument::getSlugURI($document->getSlug());
 
     if ($draft &&
         strlen($draft->getDraft()) &&
         ($draft->getDraft() != $content->getContent())) {
       $content_text = $draft->getDraft();
 
       $discard = phutil_tag(
         'a',
         array(
           'href' => $request->getRequestURI()->alter('nodraft', true),
         ),
         pht('discard this draft'));
 
       $draft_note = new AphrontErrorView();
       $draft_note->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
       $draft_note->setTitle('Recovered Draft');
       $draft_note->appendChild(hsprintf(
         '<p>Showing a saved draft of your edits, you can %s.</p>',
         $discard));
     } else {
       $content_text = $content->getContent();
       $draft_note = null;
     }
 
     $form = id(new AphrontFormView())
       ->setUser($user)
       ->setWorkflow(true)
       ->setAction($request->getRequestURI()->getPath())
       ->addHiddenInput('slug', $document->getSlug())
       ->addHiddenInput('nodraft', $request->getBool('nodraft'))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Title'))
           ->setValue($content->getTitle())
           ->setError($e_title)
           ->setName('title'))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel(pht('URI'))
           ->setValue($uri))
       ->appendChild(
         id(new PhabricatorRemarkupControl())
           ->setLabel(pht('Content'))
           ->setValue($content_text)
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL)
           ->setName('content')
           ->setID('document-textarea')
           ->setUser($user))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Edit Notes'))
           ->setValue($notes)
           ->setError(null)
           ->setName('description'))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton($cancel_uri)
           ->setValue($submit_button));
 
-    $panel = id(new AphrontPanelView())
-      ->setNoBackground()
-      ->setHeader($panel_header)
-      ->appendChild($form);
+    $header = id(new PhabricatorHeaderView())
+      ->setHeader($panel_header);
 
     $preview_panel = hsprintf(
       '<div class="phriction-wrap">
         <div class="phriction-content">
         <div class="phriction-document-preview-header plt pll">%s</div>
         <div id="document-preview">
           <div class="aphront-panel-preview-loading-text">%s</div>
         </div>
         </div>
       </div>',
       pht('Document Preview'),
       pht('Loading preview...'));
 
     Javelin::initBehavior(
       'phriction-document-preview',
       array(
         'preview'   => 'document-preview',
         'textarea'  => 'document-textarea',
         'uri'       => '/phriction/preview/?draftkey='.$draft_key,
       ));
 
     return $this->buildApplicationPage(
       array(
         $draft_note,
         $error_view,
-        $panel,
+        $header,
+        $form,
         $preview_panel,
       ),
       array(
         'title'   => pht('Edit Document'),
         'device'  => true,
         'dust'    => true,
       ));
   }
 
 }
diff --git a/src/applications/project/controller/PhabricatorProjectCreateController.php b/src/applications/project/controller/PhabricatorProjectCreateController.php
index b9e1620a2d..2cfc972faa 100644
--- a/src/applications/project/controller/PhabricatorProjectCreateController.php
+++ b/src/applications/project/controller/PhabricatorProjectCreateController.php
@@ -1,135 +1,129 @@
 <?php
 
 final class PhabricatorProjectCreateController
   extends PhabricatorProjectController {
 
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $project = new PhabricatorProject();
     $project->setAuthorPHID($user->getPHID());
     $profile = new PhabricatorProjectProfile();
 
     $e_name = true;
     $errors = array();
     if ($request->isFormPost()) {
 
       try {
         $xactions = array();
 
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_NAME);
         $xaction->setNewValue($request->getStr('name'));
         $xactions[] = $xaction;
 
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_MEMBERS);
         $xaction->setNewValue(array($user->getPHID()));
         $xactions[] = $xaction;
 
         $editor = new PhabricatorProjectEditor($project);
         $editor->setActor($user);
         $editor->applyTransactions($xactions);
       } catch (PhabricatorProjectNameCollisionException $ex) {
         $e_name = 'Not Unique';
         $errors[] = $ex->getMessage();
       }
 
       $profile->setBlurb($request->getStr('blurb'));
 
       if (!$errors) {
         $project->save();
         $profile->setProjectPHID($project->getPHID());
         $profile->save();
 
         if ($request->isAjax()) {
           return id(new AphrontAjaxResponse())
             ->setContent(array(
               'phid' => $project->getPHID(),
               'name' => $project->getName(),
             ));
         } else {
           return id(new AphrontRedirectResponse())
             ->setURI('/project/view/'.$project->getID().'/');
         }
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setTitle(pht('Form Errors'));
       $error_view->setErrors($errors);
     }
 
     if ($request->isAjax()) {
       $form = new AphrontFormLayoutView();
     } else {
       $form = new AphrontFormView();
       $form->setUser($user);
     }
 
     $form
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Name'))
           ->setName('name')
           ->setValue($project->getName())
           ->setError($e_name))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel(pht('Blurb'))
           ->setName('blurb')
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT)
           ->setValue($profile->getBlurb()));
 
     if ($request->isAjax()) {
       $dialog = id(new AphrontDialogView())
         ->setUser($user)
         ->setWidth(AphrontDialogView::WIDTH_FORM)
         ->setTitle(pht('Create a New Project'))
         ->appendChild($error_view)
         ->appendChild($form)
         ->addSubmitButton(pht('Create Project'))
         ->addCancelButton('/project/');
 
       return id(new AphrontDialogResponse())->setDialog($dialog);
     } else {
 
       $form
         ->appendChild(
           id(new AphrontFormSubmitControl())
             ->setValue(pht('Create'))
             ->addCancelButton('/project/'));
 
-      $panel = new AphrontPanelView();
-      $panel
-        ->setWidth(AphrontPanelView::WIDTH_FORM)
-        ->setHeader(pht('Create a New Project'))
-        ->setNoBackground()
-        ->appendChild($form);
-
       $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
       $crumbs->addCrumb(
         id(new PhabricatorCrumbView())
           ->setName(pht('Create Project'))
           ->setHref($this->getApplicationURI().'create/'));
 
       return $this->buildApplicationPage(
         array(
           $crumbs,
           $error_view,
-          $panel,
+          $form,
         ),
         array(
           'title' => pht('Create New Project'),
-          'device' => true
+          'device' => true,
+          'dust' => true,
         ));
     }
   }
 }
diff --git a/src/applications/project/controller/PhabricatorProjectMembersEditController.php b/src/applications/project/controller/PhabricatorProjectMembersEditController.php
index 45935ca5a9..e604900645 100644
--- a/src/applications/project/controller/PhabricatorProjectMembersEditController.php
+++ b/src/applications/project/controller/PhabricatorProjectMembersEditController.php
@@ -1,178 +1,177 @@
 <?php
 
 final class PhabricatorProjectMembersEditController
   extends PhabricatorProjectController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $project = id(new PhabricatorProjectQuery())
       ->setViewer($user)
       ->withIDs(array($this->id))
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_VIEW,
           PhabricatorPolicyCapability::CAN_EDIT,
         ))
       ->executeOne();
     if (!$project) {
       return new Aphront404Response();
     }
     $profile = $project->loadProfile();
     if (empty($profile)) {
       $profile = new PhabricatorProjectProfile();
     }
 
     $member_phids = $project->loadMemberPHIDs();
 
     $errors = array();
     if ($request->isFormPost()) {
       $changed_something = false;
       $member_map = array_fill_keys($member_phids, true);
 
       $remove = $request->getStr('remove');
       if ($remove) {
         if (isset($member_map[$remove])) {
           unset($member_map[$remove]);
           $changed_something = true;
         }
       } else {
         $new_members = $request->getArr('phids');
         foreach ($new_members as $member) {
           if (empty($member_map[$member])) {
             $member_map[$member] = true;
             $changed_something = true;
           }
         }
       }
 
       $xactions = array();
       if ($changed_something) {
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_MEMBERS);
         $xaction->setNewValue(array_keys($member_map));
         $xactions[] = $xaction;
       }
 
       if ($xactions) {
         $editor = new PhabricatorProjectEditor($project);
         $editor->setActor($user);
         $editor->applyTransactions($xactions);
       }
 
       return id(new AphrontRedirectResponse())
         ->setURI($request->getRequestURI());
     }
 
     $member_phids = array_reverse($member_phids);
     $handles = $this->loadViewerHandles($member_phids);
 
     $state = array();
     foreach ($handles as $handle) {
       $state[] = array(
         'phid' => $handle->getPHID(),
         'name' => $handle->getFullName(),
       );
     }
 
     $header_name = pht('Edit Members');
     $title = pht('Edit Members');
 
     $list = $this->renderMemberList($handles);
 
     $form = new AphrontFormView();
     $form
       ->setUser($user)
+      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTokenizerControl())
           ->setName('phids')
           ->setLabel(pht('Add Members'))
           ->setDatasource('/typeahead/common/users/'))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton('/project/view/'.$project->getID().'/')
           ->setValue(pht('Add Members')));
     $faux_form = id(new AphrontFormLayoutView())
-      ->setBackgroundShading(true)
-      ->setPadded(true)
       ->appendChild(
         id(new AphrontFormInsetView())
           ->setTitle(pht('Current Members (%d)', count($handles)))
           ->appendChild($list));
 
-    $panel = new AphrontPanelView();
-    $panel->setHeader($header_name);
-    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
-    $panel->setNoBackground();
-    $panel->appendChild($form);
-    $panel->appendChild(phutil_tag('br'));
-    $panel->appendChild($faux_form);
+    $box = new PHUIBoxView();
+    $box->appendChild($faux_form);
+    $box->setShadow(true);
+    $box->addPadding(PHUI::PADDING_LARGE);
+    $box->addMargin(PHUI::MARGIN_LARGE);
 
     $nav = $this->buildLocalNavigation($project);
     $nav->selectFilter('members');
-    $nav->appendChild($panel);
+    $nav->appendChild($form);
+    $nav->appendChild($box);
 
     $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($project->getName())
         ->setHref('/project/view/'.$project->getID().'/'));
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Edit Members'))
         ->setHref($this->getApplicationURI()));
     $nav->setCrumbs($crumbs);
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => $title,
         'device' => true,
+        'dust' => true,
       ));
   }
 
   private function renderMemberList(array $handles) {
     $request = $this->getRequest();
     $user = $request->getUser();
     $list = id(new PhabricatorObjectListView())
       ->setHandles($handles);
 
     foreach ($handles as $handle) {
       $hidden_input = phutil_tag(
         'input',
         array(
           'type' => 'hidden',
           'name' => 'remove',
           'value' => $handle->getPHID(),
         ),
         '');
 
       $button = javelin_tag(
         'button',
         array(
           'class' => 'grey',
         ),
         pht('Remove'));
 
       $list->addButton(
         $handle,
         phabricator_form(
           $user,
           array(
             'method' => 'POST',
             'action' => $request->getRequestURI(),
           ),
           array($hidden_input, $button)));
     }
 
     return $list;
   }
 }
diff --git a/src/applications/project/controller/PhabricatorProjectProfileEditController.php b/src/applications/project/controller/PhabricatorProjectProfileEditController.php
index b96cba95ce..c2bab3206e 100644
--- a/src/applications/project/controller/PhabricatorProjectProfileEditController.php
+++ b/src/applications/project/controller/PhabricatorProjectProfileEditController.php
@@ -1,254 +1,249 @@
 <?php
 
 final class PhabricatorProjectProfileEditController
   extends PhabricatorProjectController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $project = id(new PhabricatorProjectQuery())
       ->setViewer($user)
       ->withIDs(array($this->id))
       ->requireCapabilities(
         array(
           PhabricatorPolicyCapability::CAN_VIEW,
           PhabricatorPolicyCapability::CAN_EDIT,
         ))
       ->executeOne();
     if (!$project) {
       return new Aphront404Response();
     }
 
     $profile = $project->loadProfile();
     if (empty($profile)) {
       $profile = new PhabricatorProjectProfile();
     }
 
     $img_src = $profile->loadProfileImageURI();
 
     $options = PhabricatorProjectStatus::getStatusMap();
 
     $supported_formats = PhabricatorFile::getTransformableImageFormats();
 
     $e_name = true;
     $e_image = null;
 
     $errors = array();
     if ($request->isFormPost()) {
       try {
         $xactions = array();
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_NAME);
         $xaction->setNewValue($request->getStr('name'));
         $xactions[] = $xaction;
 
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_STATUS);
         $xaction->setNewValue($request->getStr('status'));
         $xactions[] = $xaction;
 
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_CAN_VIEW);
         $xaction->setNewValue($request->getStr('can_view'));
         $xactions[] = $xaction;
 
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_CAN_EDIT);
         $xaction->setNewValue($request->getStr('can_edit'));
         $xactions[] = $xaction;
 
         $xaction = new PhabricatorProjectTransaction();
         $xaction->setTransactionType(
           PhabricatorProjectTransactionType::TYPE_CAN_JOIN);
         $xaction->setNewValue($request->getStr('can_join'));
         $xactions[] = $xaction;
 
         $editor = new PhabricatorProjectEditor($project);
         $editor->setActor($user);
         $editor->applyTransactions($xactions);
       } catch (PhabricatorProjectNameCollisionException $ex) {
         $e_name = 'Not Unique';
         $errors[] = $ex->getMessage();
       }
 
       $profile->setBlurb($request->getStr('blurb'));
 
       if (!strlen($project->getName())) {
         $e_name = pht('Required');
         $errors[] = pht('Project name is required.');
       } else {
         $e_name = null;
       }
 
       $default_image = $request->getExists('default_image');
       if ($default_image) {
         $profile->setProfileImagePHID(null);
       } else if (!empty($_FILES['image'])) {
         $err = idx($_FILES['image'], 'error');
         if ($err != UPLOAD_ERR_NO_FILE) {
           $file = PhabricatorFile::newFromPHPUpload(
             $_FILES['image'],
             array(
               'authorPHID' => $user->getPHID(),
             ));
           $okay = $file->isTransformableImage();
           if ($okay) {
             $xformer = new PhabricatorImageTransformer();
             $xformed = $xformer->executeThumbTransform(
               $file,
               $x = 50,
               $y = 50);
             $profile->setProfileImagePHID($xformed->getPHID());
           } else {
             $e_image = pht('Not Supported');
             $errors[] =
               pht('This server only supports these image formats:').' '.
               implode(', ', $supported_formats).'.';
           }
         }
       }
 
       if (!$errors) {
         $project->save();
         $profile->setProjectPHID($project->getPHID());
         $profile->save();
         return id(new AphrontRedirectResponse())
           ->setURI('/project/view/'.$project->getID().'/');
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setTitle(pht('Form Errors'));
       $error_view->setErrors($errors);
     }
 
     $header_name = pht('Edit Project');
     $title = pht('Edit Project');
     $action = '/project/edit/'.$project->getID().'/';
 
     $policies = id(new PhabricatorPolicyQuery())
       ->setViewer($user)
       ->setObject($project)
       ->execute();
 
     $form = new AphrontFormView();
     $form
       ->setID('project-edit-form')
       ->setUser($user)
       ->setAction($action)
       ->setEncType('multipart/form-data')
+      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Name'))
           ->setName('name')
           ->setValue($project->getName())
           ->setError($e_name))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Project Status'))
           ->setName('status')
           ->setOptions($options)
           ->setValue($project->getStatus()))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel(pht('Blurb'))
           ->setName('blurb')
           ->setValue($profile->getBlurb()))
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">%s</p>',
         pht(
           'NOTE: Policy settings are not yet fully implemented. '.
           'Some interfaces still ignore these settings, '.
           'particularly "Visible To".')))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
           ->setName('can_view')
           ->setCaption(pht('Members can always view a project.'))
           ->setPolicyObject($project)
           ->setPolicies($policies)
           ->setCapability(PhabricatorPolicyCapability::CAN_VIEW))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
           ->setName('can_edit')
           ->setPolicyObject($project)
           ->setPolicies($policies)
           ->setCapability(PhabricatorPolicyCapability::CAN_EDIT))
       ->appendChild(
         id(new AphrontFormPolicyControl())
           ->setUser($user)
           ->setName('can_join')
           ->setCaption(
             pht('Users who can edit a project can always join a project.'))
           ->setPolicyObject($project)
           ->setPolicies($policies)
           ->setCapability(PhabricatorPolicyCapability::CAN_JOIN))
       ->appendChild(
         id(new AphrontFormMarkupControl())
           ->setLabel(pht('Profile Image'))
           ->setValue(
             phutil_tag(
               'img',
               array(
                 'src' => $img_src,
               ))))
       ->appendChild(
         id(new AphrontFormImageControl())
           ->setLabel(pht('Change Image'))
           ->setName('image')
           ->setError($e_image)
           ->setCaption(
             pht('Supported formats:').' '.implode(', ', $supported_formats)))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->addCancelButton('/project/view/'.$project->getID().'/')
           ->setValue(pht('Save')));
 
-    $panel = new AphrontPanelView();
-    $panel->setHeader($header_name);
-    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
-    $panel->setNoBackground();
-    $panel->appendChild($form);
-
     $nav = $this->buildLocalNavigation($project);
     $nav->selectFilter('edit');
     $nav->appendChild(
       array(
         $error_view,
-        $panel,
+        $form,
       ));
 
     $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName($project->getName())
         ->setHref('/project/view/'.$project->getID().'/'));
     $crumbs->addCrumb(
       id(new PhabricatorCrumbView())
         ->setName(pht('Edit Project'))
         ->setHref($this->getApplicationURI()));
     $nav->setCrumbs($crumbs);
 
     return $this->buildApplicationPage(
       $nav,
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 }
diff --git a/src/applications/repository/controller/PhabricatorRepositoryCreateController.php b/src/applications/repository/controller/PhabricatorRepositoryCreateController.php
index 179ad55f41..3f39341e46 100644
--- a/src/applications/repository/controller/PhabricatorRepositoryCreateController.php
+++ b/src/applications/repository/controller/PhabricatorRepositoryCreateController.php
@@ -1,121 +1,122 @@
 <?php
 
 final class PhabricatorRepositoryCreateController
   extends PhabricatorRepositoryController {
 
   public function processRequest() {
 
 
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $e_name = true;
     $e_callsign = true;
 
     $repository = new PhabricatorRepository();
 
     $type_map = PhabricatorRepositoryType::getAllRepositoryTypes();
     $errors = array();
 
     if ($request->isFormPost()) {
 
       $repository->setName($request->getStr('name'));
       $repository->setCallsign($request->getStr('callsign'));
       $repository->setVersionControlSystem($request->getStr('type'));
 
       if (!strlen($repository->getName())) {
         $e_name = 'Required';
         $errors[] = 'Repository name is required.';
       } else {
         $e_name = null;
       }
 
       if (!strlen($repository->getCallsign())) {
         $e_callsign = 'Required';
         $errors[] = 'Callsign is required.';
       } else if (!preg_match('/^[A-Z]+$/', $repository->getCallsign())) {
         $e_callsign = 'Invalid';
         $errors[] = 'Callsign must be ALL UPPERCASE LETTERS.';
       } else {
         $e_callsign = null;
       }
 
       if (empty($type_map[$repository->getVersionControlSystem()])) {
         $errors[] = 'Invalid version control system.';
       }
 
       if (!$errors) {
         try {
           $repository->save();
 
           return id(new AphrontRedirectResponse())
             ->setURI('/repository/edit/'.$repository->getID().'/');
 
         } catch (AphrontQueryDuplicateKeyException $ex) {
           $e_callsign = 'Duplicate';
           $errors[] = 'Callsign must be unique. Another repository already '.
                       'uses that callsign.';
         }
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setErrors($errors);
       $error_view->setTitle('Form Errors');
     }
 
 
     $form = new AphrontFormView();
     $form
       ->setUser($user)
       ->setAction('/repository/create/')
+      ->setFlexible(true)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('Name')
           ->setName('name')
           ->setValue($repository->getName())
           ->setError($e_name)
           ->setCaption('Human-readable repository name.'))
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">Select a "Callsign" &mdash; a '.
         'short, uppercase string to identify revisions in this repository. If '.
         'you choose "EX", revisions in this repository will be identified '.
         'with the prefix "rEX".</p>'))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('Callsign')
           ->setName('callsign')
           ->setValue($repository->getCallsign())
           ->setError($e_callsign)
           ->setCaption(
             'Short, UPPERCASE identifier. Once set, it can not be changed.'))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel('Type')
           ->setName('type')
           ->setOptions($type_map)
           ->setValue($repository->getVersionControlSystem()))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue('Create Repository')
           ->addCancelButton('/repository/'));
 
-    $panel = new AphrontPanelView();
-    $panel->setHeader('Create Repository');
-    $panel->appendChild($form);
-    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
-    $panel->setNoBackground();
+    $header = id(new PhabricatorHeaderView())
+      ->setHeader(pht('Create Repository'));
 
-    return $this->buildStandardPageResponse(
+    return $this->buildApplicationPage(
       array(
         $error_view,
-        $panel,
+        $header,
+        $form,
       ),
       array(
-        'title' => 'Create Repository',
+        'title' => pht('Create Repository'),
+        'device' => true,
+        'dust' => true,
       ));
   }
 
 }
diff --git a/src/applications/repository/controller/PhabricatorRepositoryEditController.php b/src/applications/repository/controller/PhabricatorRepositoryEditController.php
index b4824bd4bc..c3c3447a3d 100644
--- a/src/applications/repository/controller/PhabricatorRepositoryEditController.php
+++ b/src/applications/repository/controller/PhabricatorRepositoryEditController.php
@@ -1,695 +1,694 @@
 <?php
 
 final class PhabricatorRepositoryEditController
   extends PhabricatorRepositoryController {
 
   private $id;
   private $view;
   private $repository;
   private $sideNav;
 
   public function willProcessRequest(array $data) {
     $this->id = $data['id'];
     $this->view = idx($data, 'view');
   }
 
   public function processRequest() {
 
     $request = $this->getRequest();
 
     $repository = id(new PhabricatorRepository())->load($this->id);
     if (!$repository) {
       return new Aphront404Response();
     }
 
     $views = array(
       'basic'     => 'Basics',
       'tracking'  => 'Tracking',
     );
 
     $this->repository = $repository;
 
     if (!isset($views[$this->view])) {
       $this->view = head_key($views);
     }
 
     $nav = new AphrontSideNavFilterView();
     $base_uri = new PhutilURI('/repository/edit/'.$repository->getID().'/');
     $nav->setBaseURI($base_uri);
     foreach ($views as $view => $name) {
       $nav->addFilter($view, $name);
     }
     $nav->selectFilter($this->view, null);
 
     $nav->appendChild($this->renderDaemonNotice());
 
     $this->sideNav = $nav;
 
     switch ($this->view) {
       case 'basic':
         return $this->processBasicRequest();
       case 'tracking':
         return $this->processTrackingRequest();
       default:
         throw new Exception("Unknown view.");
     }
   }
 
   protected function processBasicRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
     $repository = $this->repository;
     $repository_id = $repository->getID();
 
     $errors = array();
 
     $e_name = true;
 
     if ($request->isFormPost()) {
       $repository->setName($request->getStr('name'));
 
       if (!strlen($repository->getName())) {
         $e_name = 'Required';
         $errors[] = 'Repository name is required.';
       } else {
         $e_name = null;
       }
 
       $repository->setDetail('description', $request->getStr('description'));
       $repository->setDetail('encoding', $request->getStr('encoding'));
 
       if (!$errors) {
         $repository->save();
         return id(new AphrontRedirectResponse())
           ->setURI('/repository/edit/'.$repository_id.'/basic/?saved=true');
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setErrors($errors);
       $error_view->setTitle('Form Errors');
     } else if ($request->getStr('saved')) {
       $error_view = new AphrontErrorView();
       $error_view->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
       $error_view->setTitle('Changes Saved');
       $error_view->appendChild('Repository changes were saved.');
     }
 
     $encoding_doc_link = PhabricatorEnv::getDoclink(
         'article/User_Guide_UTF-8_and_Character_Encoding.html');
 
     $form = new AphrontFormView();
     $form
       ->setUser($user)
       ->setAction('/repository/edit/'.$repository->getID().'/')
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('Name')
           ->setName('name')
           ->setValue($repository->getName())
           ->setError($e_name)
           ->setCaption('Human-readable repository name.'))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setLabel('Description')
           ->setName('description')
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT)
           ->setValue($repository->getDetail('description')))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel('Callsign')
           ->setName('callsign')
           ->setValue($repository->getCallsign()))
       ->appendChild(hsprintf('
         <p class="aphront-form-instructions">'.
           'If source code in this repository uses a character '.
           'encoding other than UTF-8 (for example, ISO-8859-1), '.
           'specify it here. You can usually leave this field blank. '.
           'See User Guide: '.
           '<a href="%s">UTF-8 and Character Encoding</a> for more information.'.
         '</p>',
         $encoding_doc_link))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel('Encoding')
           ->setName('encoding')
           ->setValue($repository->getDetail('encoding')))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel('Type')
           ->setName('type')
           ->setValue($repository->getVersionControlSystem()))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel('ID')
           ->setValue($repository->getID()))
       ->appendChild(
         id(new AphrontFormStaticControl())
           ->setLabel('PHID')
           ->setValue($repository->getPHID()))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue('Save'));
 
-    $panel = new AphrontPanelView();
-    $panel->setHeader('Edit Repository');
-    $panel->appendChild($form);
-    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
-    $panel->setNoBackground();
-
     $nav = $this->sideNav;
 
+    $header = id(new PhabricatorHeaderView())
+      ->setHeader(pht('Edit Repository'));
+
     $nav->appendChild($error_view);
-    $nav->appendChild($panel);
+    $nav->appendChild($header);
+    $nav->appendChild($form);
 
-    return $this->buildStandardPageResponse(
+    return $this->buildApplicationPage(
       $nav,
       array(
-        'title' => 'Edit Repository',
+        'title' => pht('Edit Repository'),
+        'device' => true,
+        'dust' => true,
       ));
   }
 
   private function processTrackingRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
     $repository = $this->repository;
     $repository_id = $repository->getID();
 
     $errors = array();
 
     $e_uri = null;
     $e_path = null;
 
     $is_git = false;
     $is_svn = false;
     $is_mercurial = false;
 
     $e_ssh_key = null;
     $e_ssh_keyfile = null;
     $e_branch = null;
 
     switch ($repository->getVersionControlSystem()) {
       case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
         $is_git = true;
         break;
       case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
         $is_svn = true;
         break;
       case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
         $is_mercurial = true;
         break;
       default:
         throw new Exception("Unsupported VCS!");
     }
 
     $has_branches       = ($is_git || $is_mercurial);
     $has_local          = ($is_git || $is_mercurial);
     $has_branch_filter  = ($is_git);
     $has_auth_support   = $is_svn;
 
     if ($request->isFormPost()) {
       $tracking = ($request->getStr('tracking') == 'enabled' ? true : false);
       $repository->setDetail('tracking-enabled', $tracking);
       $repository->setDetail('remote-uri', $request->getStr('uri'));
       if ($has_local) {
         $repository->setDetail('local-path', $request->getStr('path'));
       }
 
       if ($has_branch_filter) {
         $branch_filter = $request->getStrList('branch-filter');
         $branch_filter = array_fill_keys($branch_filter, true);
 
         $repository->setDetail('branch-filter', $branch_filter);
 
         $close_commits_filter = $request->getStrList('close-commits-filter');
         $close_commits_filter = array_fill_keys($close_commits_filter, true);
 
         $repository->setDetail('close-commits-filter', $close_commits_filter);
       }
 
       $repository->setDetail(
         'disable-autoclose',
         $request->getStr('autoclose') == 'disabled' ? true : false);
 
       $repository->setDetail(
         'pull-frequency',
         max(1, $request->getInt('frequency')));
 
       if ($has_branches) {
         $repository->setDetail(
           'default-branch',
           $request->getStr('default-branch'));
         if ($is_git) {
           $branch_name = $repository->getDetail('default-branch');
           if (strpos($branch_name, '/') !== false) {
             $e_branch = 'Invalid';
             $errors[] = "Your branch name should not specify an explicit ".
                         "remote. For instance, use 'master', not ".
                         "'origin/master'.";
           }
         }
       }
 
       $repository->setDetail(
         'default-owners-path',
         $request->getStr(
           'default-owners-path',
           '/'));
 
       $repository->setDetail('ssh-login', $request->getStr('ssh-login'));
       $repository->setDetail('ssh-key', $request->getStr('ssh-key'));
       $repository->setDetail('ssh-keyfile', $request->getStr('ssh-keyfile'));
 
       $repository->setDetail('http-login', $request->getStr('http-login'));
       $repository->setDetail('http-pass',  $request->getStr('http-pass'));
 
       $repository->setDetail('show-user', $request->getInt('show-user'));
 
       if ($repository->getDetail('ssh-key') &&
           $repository->getDetail('ssh-keyfile')) {
         $errors[] =
           "Specify only one of 'SSH Private Key' and 'SSH Private Key File', ".
           "not both.";
         $e_ssh_key = 'Choose Only One';
         $e_ssh_keyfile = 'Choose Only One';
       }
 
       $repository->setDetail(
         'herald-disabled',
         $request->getInt('herald-disabled', 0));
 
       if ($is_svn) {
         $repository->setUUID($request->getStr('uuid'));
         $subpath = ltrim($request->getStr('svn-subpath'), '/');
         if ($subpath) {
           $subpath = rtrim($subpath, '/').'/';
         }
         $repository->setDetail('svn-subpath', $subpath);
       }
 
       if ($tracking) {
         if (!$repository->getDetail('remote-uri')) {
           $e_uri = 'Required';
           $errors[] = "Repository URI is required.";
         } else if ($is_svn &&
           !preg_match('@/$@', $repository->getDetail('remote-uri'))) {
 
           $e_uri = 'Invalid';
           $errors[] = 'Subversion Repository Root must end in a slash ("/").';
         } else {
           $e_uri = null;
         }
 
         if ($has_local) {
           if (!$repository->getDetail('local-path')) {
             $e_path = 'Required';
             $errors[] = "Local path is required.";
           } else {
             $e_path = null;
           }
         }
       }
 
       if (!$errors) {
         $repository->save();
         return id(new AphrontRedirectResponse())
           ->setURI('/repository/edit/'.$repository_id.'/tracking/?saved=true');
       }
     }
 
     $error_view = null;
     if ($errors) {
       $error_view = new AphrontErrorView();
       $error_view->setErrors($errors);
       $error_view->setTitle('Form Errors');
     } else if ($request->getStr('saved')) {
       $error_view = new AphrontErrorView();
       $error_view->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
       $error_view->setTitle('Changes Saved');
       $error_view->appendChild('Tracking changes were saved.');
     } else if (!$repository->isTracked()) {
       $error_view = new AphrontErrorView();
       $error_view->setSeverity(AphrontErrorView::SEVERITY_WARNING);
       $error_view->setTitle('Repository Not Tracked');
       $error_view->appendChild(
         'Tracking is currently "Disabled" for this repository, so it will '.
         'not be imported into Phabricator. You can enable it below.');
     }
 
     switch ($repository->getVersionControlSystem()) {
       case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
         $is_git = true;
         break;
       case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
         $is_svn = true;
         break;
     }
 
     $doc_href = PhabricatorEnv::getDoclink('article/Diffusion_User_Guide.html');
     $user_guide_link = phutil_tag(
       'a',
       array(
         'href' => $doc_href,
       ),
       'Diffusion User Guide');
 
     $form = new AphrontFormView();
     $form
       ->setUser($user)
       ->setAction('/repository/edit/'.$repository->getID().'/tracking/')
+      ->setFlexible(true)
       ->appendChild(hsprintf(
         '<p class="aphront-form-instructions">Phabricator can track '.
         'repositories, importing commits as they happen and notifying '.
         'Differential, Diffusion, Herald, and other services. To enable '.
         'tracking for a repository, configure it here and then start (or '.
         'restart) the daemons. More information is available in the '.
         '<strong>%s</strong>.</p>',
         $user_guide_link));
 
     $form
       ->appendChild(
         id(new AphrontFormInsetView())
           ->setTitle('Basics')
           ->appendChild(id(new AphrontFormStaticControl())
             ->setLabel('Repository Name')
             ->setValue($repository->getName()))
           ->appendChild(id(new AphrontFormSelectControl())
             ->setName('tracking')
             ->setLabel('Tracking')
             ->setOptions(array(
                 'disabled'  => 'Disabled',
                 'enabled'   => 'Enabled',
                 ))
             ->setValue(
               $repository->isTracked()
               ? 'enabled'
               : 'disabled')));
 
     $inset = new AphrontFormInsetView();
     $inset->setTitle('Remote URI');
 
     $clone_command = null;
     $fetch_command = null;
     if ($is_git) {
       $clone_command = 'git clone';
       $fetch_command = 'git fetch';
     } else if ($is_mercurial) {
       $clone_command = 'hg clone';
       $fetch_command = 'hg pull';
     }
 
     $uri_label = 'Repository URI';
     if ($has_local) {
       if ($is_git) {
         $instructions = hsprintf(
           'Enter the URI to clone this repository from. It should look like '.
           '<tt>git@github.com:example/example.git</tt>, '.
           '<tt>ssh://user@host.com/git/example.git</tt>, or '.
           '<tt>file:///local/path/to/repo</tt>');
       } else if ($is_mercurial) {
         $instructions = hsprintf(
           'Enter the URI to clone this repository from. It should look '.
           'something like <tt>ssh://user@host.com/hg/example</tt>');
       }
       $inset->appendChild(hsprintf(
         '<p class="aphront-form-instructions">%s</p>',
         $instructions));
     } else if ($is_svn) {
       $instructions = hsprintf(
         'Enter the <strong>Repository Root</strong> for this SVN repository. '.
         'You can figure this out by running <tt>svn info</tt> and looking at '.
         'the value in the <tt>Repository Root</tt> field. It should be a URI '.
         'and look like <tt>http://svn.example.org/svn/</tt>, '.
         '<tt>svn+ssh://svn.example.com/svnroot/</tt>, or '.
         '<tt>svn://svn.example.net/svn/</tt>');
       $inset->appendChild(hsprintf(
         '<p class="aphront-form-instructions">%s</p>',
         $instructions));
       $uri_label = 'Repository Root';
     }
 
     $inset
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('uri')
           ->setLabel($uri_label)
           ->setID('remote-uri')
           ->setValue($repository->getDetail('remote-uri'))
           ->setError($e_uri));
 
     $inset->appendChild(
       id(new AphrontFormCheckboxControl())
       ->addCheckbox(
         'show-user',
         1,
         pht('Permit users to view the username of this connection.'),
         $repository->getDetail('show-user') == 1));
 
     $inset->appendChild(hsprintf(
       '<div class="aphront-form-instructions">'.
         'If you want to connect to this repository over SSH, enter the '.
         'username and private key to use. You can leave these fields blank if '.
         'the repository does not use SSH.'.
       '</div>'));
 
     $inset
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('ssh-login')
           ->setLabel('SSH User')
           ->setValue($repository->getDetail('ssh-login')))
       ->appendChild(
         id(new AphrontFormTextAreaControl())
           ->setName('ssh-key')
           ->setLabel('SSH Private Key')
           ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT)
           ->setValue($repository->getDetail('ssh-key'))
           ->setError($e_ssh_key)
           ->setCaption(
             hsprintf('Specify the entire private key, <em>or</em>...')))
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('ssh-keyfile')
           ->setLabel('SSH Private Key File')
           ->setValue($repository->getDetail('ssh-keyfile'))
           ->setError($e_ssh_keyfile)
           ->setCaption(
             '...specify a path on disk where the daemon should '.
             'look for a private key.'));
 
     if ($has_auth_support) {
       $inset
         ->appendChild(hsprintf(
           '<div class="aphront-form-instructions">'.
             'If you want to connect to this repository with a username and '.
             'password, such as over HTTP Basic Auth or SVN with SASL, '.
             'enter the username and password to use. You can leave these '.
             'fields blank if the repository does not use a username and '.
             'password for authentication.'.
           '</div>'))
         ->appendChild(
           id(new AphrontFormTextControl())
             ->setName('http-login')
             ->setLabel('Username')
             ->setValue($repository->getDetail('http-login')))
         ->appendChild(
           id(new AphrontFormPasswordControl())
             ->setName('http-pass')
             ->setLabel('Password')
             ->setValue($repository->getDetail('http-pass')));
     }
 
     $inset
       ->appendChild(hsprintf(
         '<div class="aphront-form-important">'.
           'To test your authentication configuration, <strong>save this '.
           'form</strong> and then run this script:'.
           '<code>'.
             'phabricator/ $ ./scripts/repository/test_connection.php %s'.
           '</code>'.
           'This will verify that your configuration is correct and the '.
           'daemons can connect to the remote repository and pull changes '.
           'from it.'.
         '</div>',
         $repository->getCallsign()));
 
     $form->appendChild($inset);
 
     $inset = new AphrontFormInsetView();
     $inset->setTitle('Repository Information');
 
     if ($has_local) {
       $default_local_path = '';
       $default =
         PhabricatorEnv::getEnvConfig('repository.default-local-path');
       if (!$repository->getDetail('remote-uri') && $default) {
         $default_local_path = $default.strtolower($repository->getCallsign());
       }
       $inset->appendChild(hsprintf(
         '<p class="aphront-form-instructions">Select a path on local disk '.
         'which the daemons should <tt>%s</tt> the repository into. This must '.
         'be readable and writable by the daemons, and readable by the '.
         'webserver. The daemons will <tt>%s</tt> and keep this repository up '.
         'to date.</p>',
         $clone_command,
         $fetch_command));
       $inset->appendChild(
         id(new AphrontFormTextControl())
           ->setName('path')
           ->setLabel('Local Path')
           ->setValue($repository->getDetail('local-path', $default_local_path))
           ->setError($e_path));
     } else if ($is_svn) {
       $inset->appendChild(hsprintf(
         '<p class="aphront-form-instructions">If you only want to parse one '.
         'subpath of the repository, specify it here, relative to the '.
         'repository root (e.g., <tt>trunk/</tt> or <tt>projects/wheel/</tt>). '.
         'If you want to parse multiple subdirectories, create a separate '.
         'Phabricator repository for each one.</p>'));
       $inset->appendChild(
         id(new AphrontFormTextControl())
           ->setName('svn-subpath')
           ->setLabel('Subpath')
           ->setValue($repository->getDetail('svn-subpath'))
           ->setError($e_path));
     }
 
     if ($has_branch_filter) {
       $branch_filter_str = implode(
         ', ',
         array_keys($repository->getDetail('branch-filter', array())));
       $inset
         ->appendChild(
           id(new AphrontFormTextControl())
             ->setName('branch-filter')
             ->setLabel('Track Only')
             ->setValue($branch_filter_str)
             ->setCaption(hsprintf(
               'Optional list of branches to track. Other branches will be '.
               'completely ignored. If left empty, all branches are tracked. '.
               'Example: <tt>master, release</tt>')));
     }
 
     $inset
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('frequency')
           ->setLabel('Pull Frequency')
           ->setValue($repository->getDetail('pull-frequency', 15))
           ->setCaption(
             'Number of seconds daemon should sleep between requests. Larger '.
             'numbers reduce load but also decrease responsiveness.'));
 
     $form->appendChild($inset);
 
     $inset = new AphrontFormInsetView();
     $inset->setTitle('Application Configuration');
 
     if ($has_branches) {
       $inset
         ->appendChild(
           id(new AphrontFormTextControl())
             ->setName('default-branch')
             ->setLabel('Default Branch')
             ->setValue($repository->getDefaultBranch())
             ->setError($e_branch)
             ->setCaption(
               'Default branch to show in Diffusion.'));
     }
 
     $inset
       ->appendChild(id(new AphrontFormSelectControl())
         ->setName('autoclose')
         ->setLabel('Autoclose')
         ->setOptions(array(
             'enabled'   => 'Enabled: Automatically Close Pushed Revisions',
             'disabled'  => 'Disabled: Ignore Pushed Revisions',
             ))
         ->setCaption(
           "Automatically close Differential revisions when associated commits ".
           "are pushed to this repository.")
         ->setValue(
           $repository->getDetail('disable-autoclose', false)
           ? 'disabled'
           : 'enabled'));
 
     if ($has_branch_filter) {
       $close_commits_filter_str = implode(
           ', ',
           array_keys($repository->getDetail('close-commits-filter', array())));
       $inset
         ->appendChild(
           id(new AphrontFormTextControl())
             ->setName('close-commits-filter')
             ->setLabel('Autoclose Branches')
             ->setValue($close_commits_filter_str)
             ->setCaption(
               'Optional list of branches which can trigger autoclose. '.
               'If left empty, all branches trigger autoclose.'));
     }
 
     $inset
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setName('default-owners-path')
           ->setLabel('Default Owners Path')
           ->setValue(
             $repository->getDetail(
               'default-owners-path',
               '/'))
           ->setCaption('Default path in Owners tool.'));
 
     $inset
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setName('herald-disabled')
           ->setLabel('Herald/Feed Enabled')
           ->setValue($repository->getDetail('herald-disabled', 0))
           ->setOptions(
             array(
               0 => 'Enabled - Send Email and Publish Stories',
               1 => 'Disabled - Do Not Send Email or Publish Stories',
             ))
           ->setCaption(
             'You can disable Herald commit notifications and feed stories '.
             'for this repository. This can be useful when initially importing '.
             'a repository. Feed stories are never published about commits '.
             'that are more than 24 hours old.'));
 
     if ($is_svn) {
       $inset
         ->appendChild(
           id(new AphrontFormTextControl())
             ->setName('uuid')
             ->setLabel('UUID')
             ->setValue($repository->getUUID())
             ->setCaption(hsprintf('Repository UUID from <tt>svn info</tt>.')));
     }
 
     $form->appendChild($inset);
 
     $form
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue('Save Configuration'));
 
-    $panel = new AphrontPanelView();
-    $panel->setHeader('Repository Tracking');
-    $panel->appendChild($form);
-    $panel->setWidth(AphrontPanelView::WIDTH_WIDE);
-    $panel->setNoBackground();
+    $header = id(new PhabricatorHeaderView())
+      ->setHeader(pht('Edit Repository Tracking'));
 
     $nav = $this->sideNav;
     $nav->appendChild($error_view);
-    $nav->appendChild($panel);
+    $nav->appendChild($header);
+    $nav->appendChild($form);
 
-    return $this->buildStandardPageResponse(
+    return $this->buildApplicationPage(
       $nav,
       array(
-        'title' => 'Edit Repository Tracking',
+        'title' => pht('Edit Repository Tracking'),
       ));
   }
 
 }
diff --git a/src/view/control/PhabricatorObjectSelectorDialog.php b/src/view/control/PhabricatorObjectSelectorDialog.php
index 1456c26c52..0d98861dff 100644
--- a/src/view/control/PhabricatorObjectSelectorDialog.php
+++ b/src/view/control/PhabricatorObjectSelectorDialog.php
@@ -1,192 +1,199 @@
 <?php
 
 final class PhabricatorObjectSelectorDialog {
 
   private $user;
   private $filters = array();
   private $handles = array();
   private $cancelURI;
   private $submitURI;
   private $searchURI;
   private $selectedFilter;
   private $excluded;
 
   private $title;
   private $header;
   private $buttonText;
   private $instructions;
 
   public function setUser($user) {
     $this->user = $user;
     return $this;
   }
 
   public function setFilters(array $filters) {
     $this->filters = $filters;
     return $this;
   }
 
   public function setSelectedFilter($selected_filter) {
     $this->selectedFilter = $selected_filter;
     return $this;
   }
 
   public function setExcluded($excluded_phid) {
     $this->excluded = $excluded_phid;
     return $this;
   }
 
   public function setHandles(array $handles) {
     assert_instances_of($handles, 'PhabricatorObjectHandle');
     $this->handles = $handles;
     return $this;
   }
 
   public function setCancelURI($cancel_uri) {
     $this->cancelURI = $cancel_uri;
     return $this;
   }
 
   public function setSubmitURI($submit_uri) {
     $this->submitURI = $submit_uri;
     return $this;
   }
 
   public function setSearchURI($search_uri) {
     $this->searchURI = $search_uri;
     return $this;
   }
 
   public function setTitle($title) {
     $this->title = $title;
     return $this;
   }
 
   public function setHeader($header) {
     $this->header = $header;
     return $this;
   }
 
   public function setButtonText($button_text) {
     $this->buttonText = $button_text;
     return $this;
   }
 
   public function setInstructions($instructions) {
     $this->instructions = $instructions;
     return $this;
   }
 
   public function buildDialog() {
     $user = $this->user;
 
     $filter_id = celerity_generate_unique_node_id();
     $query_id = celerity_generate_unique_node_id();
     $results_id = celerity_generate_unique_node_id();
     $current_id = celerity_generate_unique_node_id();
     $search_id  = celerity_generate_unique_node_id();
     $form_id = celerity_generate_unique_node_id();
 
     require_celerity_resource('phabricator-object-selector-css');
 
     $options = array();
     foreach ($this->filters as $key => $label) {
       $options[] = phutil_tag(
         'option',
         array(
           'value' => $key,
           'selected' => ($key == $this->selectedFilter)
             ? 'selected'
             : null,
         ),
         $label);
     }
 
     $instructions = null;
     if ($this->instructions) {
       $instructions = phutil_tag(
         'p',
         array('class' => 'phabricator-object-selector-instructions'),
         $this->instructions);
     }
 
     $search_box = phabricator_form(
       $user,
       array(
         'method' => 'POST',
         'action' => $this->submitURI,
         'id'     => $search_id,
       ),
       hsprintf(
         '<table class="phabricator-object-selector-search">
           <tr>
             <td class="phabricator-object-selector-search-filter">%s</td>
             <td class="phabricator-object-selector-search-text">%s</td>
           </tr>
         </table>',
-        phutil_tag('select', array('id' => $filter_id), $options),
-        phutil_tag('input', array('id' => $query_id))));
+        phutil_tag(
+          'select',
+            array('id' => $filter_id),
+          $options),
+        phutil_tag(
+          'input',
+            array(
+              'id' => $query_id,
+              'type' => 'text'))));
 
     $result_box = phutil_tag(
       'div',
       array(
         'class' => 'phabricator-object-selector-results',
         'id' => $results_id,
       ),
       '');
 
     $attached_box = hsprintf(
       '<div class="phabricator-object-selector-current">'.
         '<div class="phabricator-object-selector-currently-attached">'.
           '<div class="phabricator-object-selector-header">%s</div>'.
           '<div id="%s"></div>'.
           '%s'.
         '</div>'.
       '</div>',
       $this->header,
       $current_id,
       $instructions);
 
     $dialog = new AphrontDialogView();
     $dialog
       ->setUser($this->user)
       ->setTitle($this->title)
       ->setClass('phabricator-object-selector-dialog')
       ->appendChild($search_box)
       ->appendChild($result_box)
       ->appendChild($attached_box)
       ->setRenderDialogAsDiv()
       ->setFormID($form_id)
       ->addSubmitButton($this->buttonText);
 
     if ($this->cancelURI) {
       $dialog->addCancelButton($this->cancelURI);
     }
 
     $handle_views = array();
     foreach ($this->handles as $handle) {
       $phid = $handle->getPHID();
       $view = new PhabricatorHandleObjectSelectorDataView($handle);
       $handle_views[$phid] = $view->renderData();
     }
     $dialog->addHiddenInput('phids', implode(';', array_keys($this->handles)));
 
 
     Javelin::initBehavior(
       'phabricator-object-selector',
       array(
         'filter'  => $filter_id,
         'query'   => $query_id,
         'search'  => $search_id,
         'results' => $results_id,
         'current' => $current_id,
         'form'    => $form_id,
         'exclude' => $this->excluded,
         'uri'     => $this->searchURI,
         'handles' => $handle_views,
       ));
 
    return $dialog;
   }
 
 }
diff --git a/src/view/page/PhabricatorStandardPageView.php b/src/view/page/PhabricatorStandardPageView.php
index 0be4662c5c..b0d2fe1e6b 100644
--- a/src/view/page/PhabricatorStandardPageView.php
+++ b/src/view/page/PhabricatorStandardPageView.php
@@ -1,425 +1,426 @@
 <?php
 
 /**
  * This is a standard Phabricator page with menus, Javelin, DarkConsole, and
  * basic styles.
  *
  */
 final class PhabricatorStandardPageView extends PhabricatorBarePageView {
 
   private $baseURI;
   private $applicationName;
   private $glyph;
   private $menuContent;
   private $showChrome = true;
   private $layDownSomeDust = false;
   private $disableConsole;
   private $searchDefaultScope;
   private $pageObjects = array();
   private $applicationMenu;
 
   public function setApplicationMenu(PhabricatorMenuView $application_menu) {
     $this->applicationMenu = $application_menu;
     return $this;
   }
 
   public function getApplicationMenu() {
     return $this->applicationMenu;
   }
 
   public function setApplicationName($application_name) {
     $this->applicationName = $application_name;
     return $this;
   }
 
   public function setDisableConsole($disable) {
     $this->disableConsole = $disable;
     return $this;
   }
 
   public function getApplicationName() {
     return $this->applicationName;
   }
 
   public function setBaseURI($base_uri) {
     $this->baseURI = $base_uri;
     return $this;
   }
 
   public function getBaseURI() {
     return $this->baseURI;
   }
 
   public function setShowChrome($show_chrome) {
     $this->showChrome = $show_chrome;
     return $this;
   }
 
   public function setDust($is_dusty) {
     $this->layDownSomeDust = $is_dusty;
     return $this;
   }
 
   public function getShowChrome() {
     return $this->showChrome;
   }
 
   public function getDust() {
     return $this->layDownSomeDust;
   }
 
   public function setSearchDefaultScope($search_default_scope) {
     $this->searchDefaultScope = $search_default_scope;
     return $this;
   }
 
   public function getSearchDefaultScope() {
     return $this->searchDefaultScope;
   }
 
   public function appendPageObjects(array $objs) {
     foreach ($objs as $obj) {
       $this->pageObjects[] = $obj;
     }
   }
 
   public function getTitle() {
     $use_glyph = true;
     $request = $this->getRequest();
     if ($request) {
       $user = $request->getUser();
       if ($user && $user->loadPreferences()->getPreference(
             PhabricatorUserPreferences::PREFERENCE_TITLES) !== 'glyph') {
         $use_glyph = false;
       }
     }
 
     return ($use_glyph ?
             $this->getGlyph() : '['.$this->getApplicationName().']').
       ' '.parent::getTitle();
   }
 
 
   protected function willRenderPage() {
     parent::willRenderPage();
 
     if (!$this->getRequest()) {
       throw new Exception(
         pht(
           "You must set the Request to render a PhabricatorStandardPageView."));
     }
 
     $console = $this->getConsole();
 
     require_celerity_resource('phabricator-core-css');
     require_celerity_resource('phabricator-zindex-css');
     require_celerity_resource('phabricator-core-buttons-css');
     require_celerity_resource('spacing-css');
+    require_celerity_resource('phui-form-css'); // Evan will hate this
     require_celerity_resource('sprite-gradient-css');
     require_celerity_resource('phabricator-standard-page-view');
 
     Javelin::initBehavior('workflow', array());
 
     $request = $this->getRequest();
     $user = null;
     if ($request) {
       $user = $request->getUser();
     }
 
     if ($user) {
       $default_img_uri =
         PhabricatorEnv::getCDNURI(
           '/rsrc/image/icon/fatcow/document_black.png');
       $download_form = phabricator_form(
         $user,
         array(
           'action' => '#',
           'method' => 'POST',
           'class'  => 'lightbox-download-form',
           'sigil'  => 'download',
         ),
         phutil_tag(
           'button',
           array(),
           pht('Download')));
 
       Javelin::initBehavior(
         'lightbox-attachments',
         array(
           'defaultImageUri' => $default_img_uri,
           'downloadForm'    => $download_form,
         ));
     }
 
     Javelin::initBehavior('aphront-form-disable-on-submit');
     Javelin::initBehavior('toggle-class', array());
     Javelin::initBehavior('konami', array());
     Javelin::initBehavior('history-install');
     Javelin::initBehavior('phabricator-gesture');
 
     $current_token = null;
     if ($user) {
       $current_token = $user->getCSRFToken();
     }
 
     Javelin::initBehavior(
       'refresh-csrf',
       array(
         'tokenName' => AphrontRequest::getCSRFTokenName(),
         'header'    => AphrontRequest::getCSRFHeaderName(),
         'current'   => $current_token,
       ));
 
     Javelin::initBehavior('device');
 
     if ($console) {
       require_celerity_resource('aphront-dark-console-css');
 
       $headers = array();
       if (DarkConsoleXHProfPluginAPI::isProfilerStarted()) {
         $headers[DarkConsoleXHProfPluginAPI::getProfilerHeader()] = 'page';
       }
 
       Javelin::initBehavior(
         'dark-console',
         array(
           'uri' => $request ? (string)$request->getRequestURI() : '?',
           'selected' => $user ? $user->getConsoleTab() : null,
           'visible'  => $user ? (int)$user->getConsoleVisible() : true,
           'headers' => $headers,
         ));
 
       // Change this to initBehavior when there is some behavior to initialize
       require_celerity_resource('javelin-behavior-error-log');
     }
 
     $menu = id(new PhabricatorMainMenuView())
       ->setUser($request->getUser())
       ->setDefaultSearchScope($this->getSearchDefaultScope());
 
     if ($this->getController()) {
       $menu->setController($this->getController());
     }
 
     if ($this->getApplicationMenu()) {
       $menu->setApplicationMenu($this->getApplicationMenu());
     }
 
     $this->menuContent = $menu->render();
   }
 
 
   protected function getHead() {
     $monospaced = PhabricatorEnv::getEnvConfig('style.monospace');
     $monospaced_win = PhabricatorEnv::getEnvConfig('style.monospace.windows');
 
     $request = $this->getRequest();
     if ($request) {
       $user = $request->getUser();
       if ($user) {
         $pref = $user->loadPreferences()->getPreference(
             PhabricatorUserPreferences::PREFERENCE_MONOSPACED);
         $monospaced = nonempty($pref, $monospaced);
         $monospaced_win = nonempty($pref, $monospaced_win);
       }
     }
 
     $response = CelerityAPI::getStaticResourceResponse();
 
     return hsprintf(
       '%s<style type="text/css">'.
       '.PhabricatorMonospaced, '.
       '.phabricator-remarkup .remarkup-code-block { font: %s; } '.
       '.platform-windows .PhabricatorMonospaced, '.
       '.platform-windows .phabricator-remarkup '.
         '.remarkup-code-block { font: %s; }'.
       '</style>%s',
       parent::getHead(),
       phutil_safe_html($monospaced),
       phutil_safe_html($monospaced_win),
       $response->renderSingleResource('javelin-magical-init'));
   }
 
   public function setGlyph($glyph) {
     $this->glyph = $glyph;
     return $this;
   }
 
   public function getGlyph() {
     return $this->glyph;
   }
 
   protected function willSendResponse($response) {
     $request = $this->getRequest();
     $response = parent::willSendResponse($response);
 
     $console = $request->getApplicationConfiguration()->getConsole();
 
     if ($console) {
       $response = PhutilSafeHTML::applyFunction(
         'str_replace',
         hsprintf('<darkconsole />'),
         $console->render($request),
         $response);
     }
 
     return $response;
   }
 
   protected function getBody() {
     $console = $this->getConsole();
 
     $user = null;
     $request = $this->getRequest();
     if ($request) {
       $user = $request->getUser();
     }
 
     $header_chrome = null;
     if ($this->getShowChrome()) {
       $header_chrome = $this->menuContent;
     }
 
     $developer_warning = null;
     if (PhabricatorEnv::getEnvConfig('phabricator.developer-mode') &&
         DarkConsoleErrorLogPluginAPI::getErrors()) {
       $developer_warning = phutil_tag(
         'div',
         array(
           'class' => 'aphront-developer-error-callout',
         ),
         pht(
           'This page raised PHP errors. Find them in DarkConsole '.
           'or the error log.'));
     }
 
     // Render the "you have unresolved setup issues..." warning.
     $setup_warning = null;
     if ($user && $user->getIsAdmin()) {
       $open = PhabricatorSetupCheck::getOpenSetupIssueCount();
       if ($open) {
         $setup_warning = phutil_tag(
           'div',
           array(
             'class' => 'setup-warning-callout',
           ),
           phutil_tag(
             'a',
             array(
               'href' => '/config/issue/',
             ),
             pht('You have %d unresolved setup issue(s)...', $open)));
       }
     }
 
     return
       phutil_tag(
         'div',
         array(
           'id' => 'base-page',
           'class' => 'phabricator-standard-page',
         ),
         hsprintf(
           '%s%s%s'.
           '<div class="phabricator-standard-page-body">'.
             '%s%s<div style="clear: both;"></div>'.
           '</div>',
         $developer_warning,
         $setup_warning,
         $header_chrome,
         ($console ? hsprintf('<darkconsole />') : null),
         parent::getBody()));
   }
 
   protected function getTail() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $container = null;
     if ($user->isLoggedIn()) {
 
       $aphlict_object_id = celerity_generate_unique_node_id();
       $aphlict_container_id = celerity_generate_unique_node_id();
 
       $client_uri = PhabricatorEnv::getEnvConfig('notification.client-uri');
       $client_uri = new PhutilURI($client_uri);
       if ($client_uri->getDomain() == 'localhost') {
         $this_host = $this->getRequest()->getHost();
         $this_host = new PhutilURI('http://'.$this_host.'/');
         $client_uri->setDomain($this_host->getDomain());
       }
 
       $enable_debug = PhabricatorEnv::getEnvConfig('notification.debug');
       Javelin::initBehavior(
         'aphlict-listen',
         array(
           'id'           => $aphlict_object_id,
           'containerID'  => $aphlict_container_id,
           'server'       => $client_uri->getDomain(),
           'port'         => $client_uri->getPort(),
           'debug'        => $enable_debug,
           'pageObjects'  => array_fill_keys($this->pageObjects, true),
         ));
       $container = phutil_tag(
         'div',
         array(
           'id' => $aphlict_container_id,
           'style' => 'position: absolute; width: 0; height: 0;',
         ),
         '');
     }
 
     $response = CelerityAPI::getStaticResourceResponse();
 
     $tail = array(
       parent::getTail(),
       $container,
       $response->renderHTMLFooter(),
     );
 
     return phutil_implode_html("\n", $tail);
   }
 
   protected function getBodyClasses() {
     $classes = array();
 
     if (!$this->getShowChrome()) {
       $classes[] = 'phabricator-chromeless-page';
     }
 
     if ($this->getDust()) {
       $classes[] = 'make-me-sneeze';
     }
 
     $agent = AphrontRequest::getHTTPHeader('User-Agent');
 
     // Try to guess the device resolution based on UA strings to avoid a flash
     // of incorrectly-styled content.
     $device_guess = 'device-desktop';
     if (preg_match('@iPhone|iPod|(Android.*Chrome/[.0-9]* Mobile)@', $agent)) {
       $device_guess = 'device-phone device';
     } else if (preg_match('@iPad|(Android.*Chrome/)@', $agent)) {
       $device_guess = 'device-tablet device';
     }
 
     $classes[] = $device_guess;
 
     if (preg_match('@Windows@', $agent)) {
       $classes[] = 'platform-windows';
     } else if (preg_match('@Macintosh@', $agent)) {
       $classes[] = 'platform-mac';
     } else if (preg_match('@X11@', $agent)) {
       $classes[] = 'platform-linux';
     }
 
     return implode(' ', $classes);
   }
 
   private function getConsole() {
     if ($this->disableConsole) {
       return null;
     }
     return $this->getRequest()->getApplicationConfiguration()->getConsole();
   }
 
 }
diff --git a/webroot/rsrc/css/aphront/form-view.css b/webroot/rsrc/css/aphront/form-view.css
index 36b6a89cc6..ac92201115 100644
--- a/webroot/rsrc/css/aphront/form-view.css
+++ b/webroot/rsrc/css/aphront/form-view.css
@@ -1,410 +1,404 @@
 /**
  * @provides aphront-form-view-css
  */
 
 /**
  * These styles are overrides for .aphront-form-view
  */
 .aphront-form-view-shaded {
   border: 1px solid #d4dae0;
   background: #f4f5f8;
 }
 
 .aphront-form-view-padded {
   padding: 1em;
 }
 
 .aphront-form-view label.aphront-form-label {
-  padding-top: 4px;
+  padding-top: 5px;
   width: 19%;
   float: left;
   text-align: right;
   font-weight: bold;
   font-size: 13px;
-  color: #666;
+  color: #757c88;
+  text-shadow: 0 1px rgba(255,255,255,1);
 }
 
 .device-phone .aphront-form-view label.aphront-form-label {
   display: block;
   float: none;
   text-align: left;
   width: 100%;
-  color: #777;
   margin-bottom: 3px;
 }
 
 .aphront-form-input {
   margin-left: 20%;
-  margin-right: 25%;
-  width: 55%;
+  margin-right: 20%;
+  width: 60%;
 }
 
 .device-phone .aphront-form-input {
   margin-left: 0%;
   margin-right: 0%;
   width: 100%;
 }
 
-.aphront-form-control-text .aphront-form-input input,
-.aphront-form-control-password .aphront-form-input input {
-  font-size: 13px;
-  padding: 4px 4px;
-  color: #333;
-  vertical-align: middle;
-  background-color: #ffffff;
-  border: 1px solid #96A6C5;
-  border-radius: 3px;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
 .aphront-form-error {
-  width: 23%;
+  width: 18%;
   float: right;
   color: #aa0000;
   font-weight: bold;
   padding-top: 4px;
 }
 
 .device-phone .aphront-form-error {
   float: none;
   width: 100%;
 }
 
 .device-phone .aphront-form-drag-and-drop-upload {
   display: none;
 }
 
 .aphront-form-required {
   font-weight: normal;
   color: #888888;
   font-size: 11px;
 }
 
-.aphront-form-input input,
-.aphront-form-input textarea {
-  font-size: 13px;
-  display: block;
+.aphront-form-input input {
   width: 100%;
-  box-sizing: border-box;
 }
 
-
 .aphront-form-input textarea {
+  display: block;
+  width: 100%;
+  box-sizing: border-box;
   height: 12em;
 }
 
 .aphront-form-control {
   padding: 4px;
 }
 
 .aphront-form-control-submit button,
 .aphront-form-control-submit a.button {
   float: right;
   margin: 0.5em 0 0em 2%;
 }
 
 .aphront-form-control-textarea textarea.aphront-textarea-very-short {
-  height: 3em;
-  border: 1px solid #96A6C5;
-  border-radius: 3px;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  height: 44px;
 }
 
 .aphront-form-control-textarea textarea.aphront-textarea-very-tall {
   height: 24em;
 }
 
 .aphront-form-control-select .aphront-form-input {
   padding-top: 2px;
 }
 
-
 .aphront-form-view .aphront-form-caption {
   font-size: 12px;
   color: #888;
   padding: 2px;
   text-align: right;
-  margin-right: 25%;
+  margin-right: 20%;
   margin-left: 20%;
 }
 
 .device-phone .aphront-form-view .aphront-form-caption {
   margin-right: 0%;
 }
 
 /* override for when inside an aphront-panel-view */
 .aphront-panel-view .aphront-form-view h1 {
   padding: 0em 0em .8em 0em;
 }
 
 .aphront-form-instructions {
-  margin: 0.75em 3% 1.25em;
+  width: 60%;
+  margin-left: 20%;
+  padding: 10px 4px;
+}
+
+.device .aphront-form-instructions {
+  width: 100%;
+  margin: 0;
 }
 
 .aphront-form-important {
   margin: .5em 0;
   background: #ffffdd;
   padding: .5em 1em;
 }
 .aphront-form-important code {
   display: block;
   padding: .25em;
   margin: .5em 2em;
 }
 
-
 .aphront-form-control-static .aphront-form-input,
 .aphront-form-control-markup .aphront-form-input {
-  padding-top: 4px;
+  padding-top: 6px;
   font-size: 13px;
 }
 
 .aphront-form-control-togglebuttons .aphront-form-input {
   padding: 2px 0 0 0;
 }
 
 table.aphront-form-control-radio-layout,
 table.aphront-form-control-checkbox-layout {
   margin-top: 3px;
   font-size: 13px;
 }
 
 table.aphront-form-control-radio-layout th,
 table.aphront-form-control-checkbox-layout th {
   padding-top: 2px;
   padding-left: 0.35em;
   padding-bottom: 4px;
 }
 
 .aphront-form-control-radio-layout td input,
 .aphront-form-control-checkbox-layout td input {
   margin-top: 4px;
   width: auto;
 }
 
 .aphront-form-radio-caption {
   font-size: 11px;
   color: #444444;
   max-width: 400px;
 }
 
 .aphront-form-control-image span {
   margin: 0px 4px 0px 2px;
 }
 
 .aphront-form-control-image .default-image {
   display: inline;
   width: 12px;
 }
 
 .aphront-form-input hr {
   border: none;
   background: #bbbbbb;
   height: 1px;
   position: relative;
 }
 
 .aphront-form-inset {
-  margin: 0 0 1em;
-  padding: .75em;
-  background: #f3f3f3;
-  border: 1px solid #afafaf;
+  margin: 0 0 10px;
+  padding: 10px;
+  background: #fff;
+  border: 1px solid #d4dae0;
+}
+
+.aphront-form-inset h1 {
+  color: #777;
+  font-weight: normal;
+  padding-bottom: 10px;
 }
 
 .aphront-form-drag-and-drop-file-list {
   width: 400px;
 }
 
 .drag-and-drop-instructions {
   color: #333333;
   font-size: 11px;
   padding: 6px 8px;
 }
 
 .drag-and-drop-file-target {
   border: 1px dashed #bfbfbf;
   padding-top: 10px;
   padding-bottom: 10px;
 }
 
 .aphront-textarea-drag-and-drop {
   background: #99ff99;
   border-color: #669966;
 }
 
 .aphront-form-crop .crop-box {
   cursor: move;
   overflow: hidden;
 }
 
 .aphront-form-crop .crop-box .crop-image {
   position: relative;
   top: 0px;
   left: 0px;
 }
 
 
 .calendar-button {
   display: inline;
   background: url(/rsrc/image/icon/fatcow/calendar_edit.png)
     no-repeat center center;
   padding: 8px 12px;
   margin: 2px 8px 2px 2px;
   position: relative;
   border: 1px solid transparent;
 }
 
 .aphront-form-date-container {
   position: relative;
   display: inline;
 }
 
 .aphront-form-date-container select {
   margin: 2px;
   display: inline;
 }
 
 .aphront-form-date-container input.aphront-form-date-time-input {
   width: 7em;
   display: inline;
 }
 
 .fancy-datepicker {
   position: absolute;
   width: 240px;
 }
 
 .fancy-datepicker-core {
   padding: 1px;
   font-size: 11px;
   font-family: Verdana;
   text-align: center;
 }
 
 .fancy-datepicker-core .month-table,
 .fancy-datepicker-core .day-table {
   margin: 0 auto;
   border-collapse: separate;
   border-spacing: 1px;
   width: 100%;
 }
 
 .fancy-datepicker-core .month-table {
   margin-bottom: 6px;
 }
 
 .fancy-datepicker-core .month-table td.lrbutton {
   width: 20%;
 }
 
 .fancy-datepicker-core .month-table td {
   padding: 4px;
   font-weight: bold;
   color: #444444;
 }
 
 .fancy-datepicker-core .month-table td.lrbutton {
   background: #e6e6e6;
   border: 1px solid;
   border-color: #a6a6a6 #969696 #868686 #a6a6a6;
 }
 
 .fancy-datepicker-core .day-table td {
   overflow: hidden;
   background: #f6f6f6;
   vertical-align: center;
   text-align: center;
   border: 1px solid #d6d6d6;
   padding: 4px 0;
 }
 
 .fancy-datepicker-core .day-table td.day-placeholder {
   border-color: transparent;
   background: transparent;
 }
 
 .fancy-datepicker-core .day-table td.weekend {
   color: #666666;
   border-color: #e6e6e6;
 }
 
 .fancy-datepicker-core .day-table td.day-name {
   background: transparent;
   border: 1px transparent;
   vertical-align: bottom;
   color: #888888;
 }
 
 .fancy-datepicker-core .day-table td.today {
   background: #eeee99;
   border-color: #aaaa66;
 }
 
 .fancy-datepicker-core .day-table td.datepicker-selected {
   background: #0099ff;
   border-color: #0066cc;
 }
 
 .fancy-datepicker-core td {
   cursor: pointer;
 }
 
 .fancy-datepicker-core td.novalue {
   cursor: inherit;
 }
 
 .picker-open .calendar-button,
 .fancy-datepicker-core {
   background-color: white;
   border: 1px solid #777777;
 
   box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.25);
 }
 
 .picker-open .calendar-button {
   border-left: 1px solid white;
 }
 
 .login-to-comment {
   padding: 12px;
   float: right;
 }
 
 .aphront-form-control-counted-togglebuttons {
   padding-top: 7px;
 }
 
 .aphront-form-control-counted-togglebuttons .toggle {
   position: relative;
 }
 
 .aphront-form-control-counted-togglebuttons .toggle-fixed {
   cursor: pointer;
 }
 
 .aphront-form-control-counted-togglebuttons .toggle .counter {
   font-size: smaller;
   display: none;
   position: absolute;
   top: -9px;
   right: -8px;
   padding: 0px 3px;
   border-radius: 3px;
 }
 
 .aphront-form-control-counted-togglebuttons:hover .toggle .counter {
   display: block;
 }
 
 .aphront-form-control-counted-togglebuttons .toggle .counter {
   background: gray;
   color: #ddd;
 }
 
 .aphront-form-control-counted-togglebuttons .toggle-selected .counter {
   color: white;
 }
 
 .aphront-form-control-counted-togglebuttons .toggle.disabled:hover {
   background-color: #a7a7a7;
 }
diff --git a/webroot/rsrc/css/aphront/tokenizer.css b/webroot/rsrc/css/aphront/tokenizer.css
index 09199d9e80..c07aea399f 100644
--- a/webroot/rsrc/css/aphront/tokenizer.css
+++ b/webroot/rsrc/css/aphront/tokenizer.css
@@ -1,73 +1,74 @@
 /**
  * @provides aphront-tokenizer-control-css
  * @requires aphront-typeahead-control-css
  */
 
-div.jx-tokenizer {
+body div.jx-tokenizer {
   background: transparent;
   position: relative;
-  display: block;
   width: 100%;
 }
 
-div.jx-tokenizer-container {
-  background: #fff;
-  border: 1px solid #96A6C5;
+body div.jx-tokenizer-container {
   position: relative;
-  width: 100%;
-  padding: 0 2px;
-  border-radius: 3px;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-
-div.jx-tokenizer-container-focused {
-  border-color: #0099ff;
+  display: block;
+  padding: 0;
+  height: 30px;
 }
 
 var.jx-tokenizer-metrics {
   position: absolute;
   left: 20px;
   top: 20px;
 }
 
-input.jx-tokenizer-input {
+body input.jx-tokenizer-input {
   border: 1px solid transparent;
   border-width: 1px 0px;
   padding: 3px;
   outline: none;
   float: left;
+  width: 100%;
+  border-shadow: none;
+  box-shadow: none;
+  -webkit-box-shadow: none;
+  font-size: 13px;
+  color: #777;
+  height: 26px;
+}
+
+body input.jx-tokenizer-input:focus {
+  box-shadow: none;
+  -webkit-box-shadow: none;
+  border-color: transparent;
 }
 
-span.jx-tokenizer-x-placeholder {
-  padding: 0 2px;
+.jx-typeahead-placeholder {
+  margin-left: 4px;
+}
+
+a.jx-tokenizer-x {
+  padding-left: 4px;
+}
+
+a.jx-tokenizer-x:hover {
+  color: #000;
+  text-decoration: none;
 }
 
 a.jx-tokenizer-token {
-  padding: 2px 0 2px 5px;
+  padding: 2px 6px 3px;
   border:  1px solid #a4bdec;
   margin: 3px 2px 0 4px;
   background: #dee7f8;
   float: left;
-  cursor: text;
-  font-size: 12px;
+  cursor: pointer;
   border-radius: 3px;
+  color: #333;
+
 }
 
 a.jx-tokenizer-token:hover {
   text-decoration: none;
   background: #bbcef1;
-  cursor: text;
 }
-
-a.jx-tokenizer-token a.jx-tokenizer-x {
-  color: #627aad;
-  font-family: Arial, sans-serif;
-  font-weight: normal;
-  cursor: pointer;
-  padding: 0 4px;
-}
-
-a.jx-tokenizer-token a.jx-tokenizer-x:hover {
-  text-decoration: none;
-}
-
diff --git a/webroot/rsrc/css/application/base/main-menu-view.css b/webroot/rsrc/css/application/base/main-menu-view.css
index 9622af0a9d..b7ea4bce92 100644
--- a/webroot/rsrc/css/application/base/main-menu-view.css
+++ b/webroot/rsrc/css/application/base/main-menu-view.css
@@ -1,419 +1,422 @@
 /**
  * @provides phabricator-main-menu-view
  */
 
 
 /* - Main Menu -----------------------------------------------------------------
 
   Main menu at the top of every page that has chrome. It reacts to resolution
   changes in order to behave reasonably on tablets and phones.
 
 */
 
 .phabricator-main-menu {
   background: #2d3236;
   background-image: url(/rsrc/image/main_texture.png);
   background-repeat: repeat-x;
   position: relative;
   box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.25);
   min-height: 44px;
 }
 
 .device-desktop .phabricator-main-menu {
   height: 44px;
 }
 
 .phabricator-main-menu a:hover {
   text-decoration: none;
 }
 
 
 /* - Logo ----------------------------------------------------------------------
 
   The "Phabricator" logo group in the main menu. On tablet and phone devices,
   this shows a "reveal" button to expand/collapse the rest of the menu.
 
 */
 
 .device-desktop .phabricator-main-menu-group-logo {
   float: left;
 }
 
 .phabricator-main-menu-logo {
   display: inline-block;
   width: 139px;
   height: 44px;
   float: left;
   margin-right: 6px;
   padding-right: 6px;
   padding-left: 6px;
 }
 
 .phabricator-main-menu-logo:hover {
   background-color: #3a4247;
 }
 
 .phabricator-main-menu-logo-image {
   position: absolute;
   width: 139px;
   height: 25px;
   top: 9px;
 }
 
 .device-phone .phabricator-main-menu-logo {
   margin-left: -45px;
 }
 
 .device .phabricator-main-menu-logo:hover {
   background-color: transparent;
 }
 
 /* - Expand/Collapse Button ----------------------------------------------------
 
   On phones, the menu switches to a vertical layout and uses a button to expand
   or collapse the items.
 
 */
 
 .phabricator-menu-button-icon {
   width: 24px;
   height: 24px;
   float: left;
   margin: 10px 10px 0 5px;
 }
 
 .phabricator-expand-application-menu,
 .phabricator-expand-search-menu {
   float: right;
 }
 
 .device-desktop .phabricator-main-menu-search-button,
 .device-desktop .phabricator-main-menu-expand-button {
   display: none;
 }
 
 
 /* - Search --------------------------------------------------------------------
 
   The main search input in the menu bar.
 
 */
 
 .device-desktop .phabricator-main-menu-search {
   width: 220px;
 }
 
 .phabricator-main-menu-search-container {
   padding: 10px 0;
   position: relative;
   height: 24px;
 }
 
 .phabricator-main-menu-search-target {
   position: absolute;
   top: 46px;
 }
 
 .device-desktop .phabricator-main-menu-search-target {
   width: 320px;
   margin-left: -150px;
 }
 
 .device .phabricator-main-menu-search-target {
   width: 100%;
   margin-left: -25px;
 
 }
 
 .device-desktop .phabricator-main-menu-search-container {
   margin: 0 8px 0 50px;
 }
 
 .device .phabricator-main-menu-search-container {
   padding: 0;
   margin: 0 8px 0 52px;
 }
 
-.phabricator-main-menu-search input {
+.phabricator-main-menu .phabricator-main-menu-search input {
   outline: 0;
   margin: 0;
+  box-shadow: none;
+  transition: none;
 
   width: 100%;
   right: 0;
   position: absolute;
-
-  border: 1px solid #333333;
+  font-size: 13px;
+  border: 1px solid #333;
   border-radius: 12px;
-  background: #555555;
-  height: 12px;
+  background-color: #555;
+  height: 26px;
   line-height: 12px;
   box-shadow: 0px 1px 1px rgba(128, 128, 128, 0.25);
   padding: 6px 32px 6px 10px;
 }
 
 .device .phabricator-main-menu-search input {
   height: 16px;
   font-size: 15px;
   border-radius: 15px;
 }
 
-.phabricator-main-menu-search input:focus {
+.phabricator-main-menu .phabricator-main-menu-search input:focus {
   background: #c9c9c9;
+  border: none;
 }
 
 .phabricator-main-menu-search input.jx-typeahead-placeholder {
   color: #999999;
 }
 
 .phabricator-main-menu-search button {
   position: absolute;
   color: transparent;
   background: transparent 5px 6px url(/rsrc/image/search.png) no-repeat;
   border: none;
   outline: none;
   box-shadow: none;
   text-shadow: none;
   min-width: 0;
 
   height: 20px;
   width: 20px;
   top: 11px;
   right: 6px;
 }
 
 .device .phabricator-main-menu-search button {
   top: 3px;
 }
 
 .phabricator-main-menu-search-target div.jx-typeahead-results {
   border-radius: 4px;
   box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.35);
   border: 1px solid #33393d;
 }
 
 .phabricator-main-menu-search-target div.jx-typeahead-results a.jx-result {
   border: 0;
 }
 
 .phabricator-main-menu-search-target div.jx-typeahead-results a.focused,
 .phabricator-main-menu-search-target div.jx-typeahead-results a:hover {
   background: #3875d7;
 }
 
 .phabricator-main-search-typeahead-result {
   display: block;
   padding: 4px 4px 4px 38px;
   background-position: 4px 4px;
   background-size: 25px 25px;
   background-repeat: no-repeat;
 }
 
 .phabricator-main-search-typeahead-result .result-name {
   display: block;
   font-weight: bold;
   color: #444444;
 }
 
 .focused .phabricator-main-search-typeahead-result .result-name,
 a:hover .phabricator-main-search-typeahead-result .result-name {
   color: #eeeeee;
 }
 
 .phabricator-main-search-typeahead-result .result-type {
   color: #888888;
 }
 
 .focused .phabricator-main-search-typeahead-result .result-type,
 a:hover .phabricator-main-search-typeahead-result .result-type {
   color: #dddddd;
 }
 
 
 /* - Alert ---------------------------------------------------------------------
 
   Alert menus are like icon menus but don't obey collapse rules.
 
 */
 
 .phabricator-main-menu-alerts {
   display: inline-block;
   border-radius: 15px;
   float: left;
   background: rgba(0,0,0,.2);
   height: 20px;
   padding: 2px 10px 3px 8px;
   margin-top: 9px;
 }
 
 .phabricator-main-menu-alert-icon,
 .phabricator-main-menu-message-icon {
   width: 18px;
   height: 18px;
   display: block;
   float: left;
   margin: 2px 0 0 0;
 }
 
 .alert-notifications .phabricator-main-menu-message-icon {
   margin: 2px 0 0 6px;
 }
 
 .phabricator-main-menu-alert-count,
 .phabricator-main-menu-message-count {
   font-weight: bold;
   line-height: 20px;
   color: #ffffff;
   text-align: center;
   display: none;
   float: left;
   margin-left: 3px;
 }
 
 .alert-unread .phabricator-main-menu-alert-count,
 .message-unread .phabricator-main-menu-message-count  {
   display: block;
 }
 
 /* - Dark Menu -----------------------------------------------------------------
 
   Styles shared between the "core" menu (left button on mobile) and
   "application" menu (right button on mobile). These styles give the menu a
   white-on-black appearance.
 
 */
 
 .device .phabricator-dark-menu,
 .device .phabricator-dark-menu a.phabricator-menu-item-type-link {
   color: #fff;
 
 }
 
 .device .phabricator-dark-menu .phabricator-menu-item-type-label {
   text-transform: uppercase;
   font-size: 12px;
   background-color: #151719;
   padding: 0 0 0 12px;
   height: 25px;
   font-weight: bold;
 }
 
 .device .phabricator-dark-menu .phabricator-menu-item-type-label
   .phabricator-menu-item-name {
   display: block;
   padding: 6px 0 0;
 }
 
 .device .phabricator-dark-menu .phabricator-menu-item-type-link {
   border-width: 1px 0;
   border-style: solid;
   border-color: #34373b transparent #282c2d;
   background-image: url(/rsrc/image/texture/dark-menu.png);
   padding: 4px 0;
   display: block;
 }
 
 
 /* - Core Menu -----------------------------------------------------------------
 
   Styles unique to the core menu (left button on mobile).
 
 */
 
 .phabricator-core-menu-profile-image {
   background-size: 28px 28px;
 }
 
 .device .phabricator-search-menu {
   display: none;
 }
 
 .device-desktop .phabricator-search-menu {
   float: right;
   margin-right: 116px;
 }
 
 .device .phabricator-search-menu-expanded .phabricator-search-menu {
   display: block;
   padding-top: 44px;
 }
 
 .device .phabricator-dark-menu .phabricator-menu-item-type-link {
   font-size: 15px;
   min-height: 30px;
   line-height: 28px;
 }
 
 .device .phabricator-menu-item-type-link
   .phabricator-core-menu-icon + .phabricator-menu-item-name {
   margin-left: 36px;
 }
 
 .device-desktop .phabricator-application-menu {
   position: absolute;
   right: 0;
   top: 0;
   vertical-align: top;
 }
 
 .device-desktop .phabricator-application-menu a.phabricator-menu-item-view,
 .device-desktop .phabricator-application-menu .phabricator-menu-item-name {
   display: none;
 }
 
 .device-desktop .phabricator-application-menu
   a.phabricator-menu-item-view.phabricator-core-menu-item {
   display: block;
 }
 
 .device-desktop .phabricator-application-menu
   a.phabricator-menu-item-view.phabricator-core-menu-item:hover {
   background-color: #3a4247;
 }
 
 .device-desktop .phabricator-application-menu .phabricator-menu-item-view {
   display: block;
   float: left;
   position: relative;
   min-width: 40px;
   height: 44px;
 }
 
 .device-desktop .phabricator-application-menu .phabricator-core-item-device {
   display: none;
 }
 
 .device-desktop .phabricator-core-menu-icon {
   top: 9px;
   left: 6px;
 }
 
 .device .phabricator-core-menu-icon {
   left: 6px;
 }
 
 .phabricator-core-menu-icon {
   position: absolute;
   display: block;
   width: 28px;
   height: 28px;
 }
 
 /* - Application Menu ----------------------------------------------------------
 
   Styles unique to the application menu (right button on mobile).
 
 */
 
 .device .phabricator-application-menu-expanded .phabricator-application-menu {
   display: block;
   padding-top: 44px;
 }
 
 .device .phabricator-application-menu,
 .device-desktop .phabricator-dark-menu .phabricator-menu-item-type-label {
   display: none;
 }
 
 .phabricator-application-menu .phabricator-menu-item-name {
   padding-left: 12px;
 }
diff --git a/webroot/rsrc/css/application/config/config-options.css b/webroot/rsrc/css/application/config/config-options.css
index 06ac52d832..89cd61a910 100644
--- a/webroot/rsrc/css/application/config/config-options.css
+++ b/webroot/rsrc/css/application/config/config-options.css
@@ -1,47 +1,48 @@
 /**
  * @provides config-options-css
  */
 
 .config-option-table {
   width: 100%;
   border-collapse: collapse;
   border: 1px solid #cccccc;
+  background: #fff;
 }
 
 .config-option-table th,
 .config-option-table td {
   padding: 4px 12px;
   border: 1px solid #cccccc;
 }
 
 .config-option-table th {
   background: #e9e9e9;
   text-align: right;
   white-space: nowrap;
 }
 
 .config-option-table th em {
   font-weight: normal;
   color: #666666;
 }
 
 .config-option-table td {
   color: #333333;
   width: 100%;
 }
 
 .config-option-table .column-labels th {
   font-weight: bold;
   color: #333333;
   text-align: center;
   background: #e0e0e0;
 }
 
 .config-options-current-value {
   padding: 0 8px 6px;
   white-space: pre-wrap;
 }
 
 .config-options-current-value span {
   color: #777;
 }
diff --git a/webroot/rsrc/css/application/directory/phabricator-jump-nav.css b/webroot/rsrc/css/application/directory/phabricator-jump-nav.css
index 2b7faedd7d..dbf7abe640 100644
--- a/webroot/rsrc/css/application/directory/phabricator-jump-nav.css
+++ b/webroot/rsrc/css/application/directory/phabricator-jump-nav.css
@@ -1,36 +1,32 @@
 /**
  * @provides phabricator-jump-nav
  */
 
 .phabricator-jump-nav-form {
   text-align: center;
   padding: 0px;
   margin: 0;
 }
 
-.phabricator-jump-nav {
+input.phabricator-jump-nav[type='text'] {
   font-size: 16px;
   width: 100%;
-  padding: 4px;
-  border-radius: 3px;
-  border: 1px solid #96A6C5;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
 }
 
 .phabricator-jump-nav-caption {
   margin-top: 4px;
   padding-bottom: 4px;
   font-size: 11px;
   color: #666666;
   text-align: left;
 }
 
 .phabricator-jump-nav-container .aphront-list-filter-view-controls {
   padding: 20px;
 }
 
 .phabricator-jump-nav-container .aphront-list-filter-view-controls h1 {
   color: #555;
   padding-top: 4px;
   margin-bottom: 0.67em;
 }
diff --git a/webroot/rsrc/css/application/objectselector/object-selector.css b/webroot/rsrc/css/application/objectselector/object-selector.css
index c47c564dce..fdb14aea75 100644
--- a/webroot/rsrc/css/application/objectselector/object-selector.css
+++ b/webroot/rsrc/css/application/objectselector/object-selector.css
@@ -1,98 +1,99 @@
 /**
  * @provides phabricator-object-selector-css
  * @requires aphront-dialog-view-css
  */
 
 .phabricator-object-selector-dialog {
   width: 960px;
 }
 
 .phabricator-object-selector-dialog .aphront-dialog-body {
   padding: 0;
 }
 
 .phabricator-object-selector-search {
   width: 100%;
   background: #ededed;
 }
 
 .phabricator-object-selector-search td {
   padding: 4px 8px;
+  vertical-align: middle;
 }
 
 td.phabricator-object-selector-search-text {
   width: 100%;
 }
 
 .phabricator-object-selector-search-text input {
   width: 100%;
 }
 
 .phabricator-object-selector-results {
   position: relative;
   height: 24em;
   border: solid #bbbbbb;
   border-width: 1px 0px;
   overflow-y: scroll;
   overflow-x: hidden;
 }
 
 .phabricator-object-selector-handle {
   width: 100%;
   background: #e9e9e9;
   margin-bottom: 1px;
 }
 
 .phabricator-object-selector-handle td {
   padding: 4px 1em;
 }
 
 .phabricator-object-selector-handle th {
   font-weight: bold;
   vertical-align: middle;
   width: 100%;
   overflow: hidden;
 }
 
 .phabricator-object-selector-handle th a {
   display: block;
   padding: 4px 1em;
 }
 
 .phabricator-object-selector-header {
   padding: 2px;
   border-bottom: 1px solid #d0d0d0;
   margin-bottom: 16px;
   color: #444444;
 }
 
 .phabricator-object-selector-attach-explicit {
   padding: 4px;
   background: #f3f3f3;
   border: solid #bbbbbb;
   border-width: 1px 0px;
 }
 
 .phabricator-object-selector-currently-attached {
   background: #fff;
   padding: 16px;
   border: 1px solid #dddddd;
 }
 
 .phabricator-object-selector-current {
   background: #ededed;
   padding: 8px 8px;
 }
 
 
 .object-selector-nothing {
   padding: 1em;
   color: #888888;
   text-align: center;
 }
 
 .phabricator-object-selector-instructions {
   font-size: 11px;
   color: #666666;
   margin-top: 1.25em;
 }
diff --git a/webroot/rsrc/css/application/owners/owners-path-editor.css b/webroot/rsrc/css/application/owners/owners-path-editor.css
index 31e5f6915b..3cf3d21991 100644
--- a/webroot/rsrc/css/application/owners/owners-path-editor.css
+++ b/webroot/rsrc/css/application/owners/owners-path-editor.css
@@ -1,37 +1,37 @@
 /**
  * @provides owners-path-editor-css
  */
 
 .owners-path-editor-table {
   margin: 10px;
 }
 
 .owners-path-editor-table td {
   padding: 2px 4px;
+  vertical-align: middle;
 }
 
 .owners-path-editor-table select.owners-repo {
   width: 150px;
 }
 
 .owners-path-editor-table input {
-  width: 450px;
+  width: 400px;
 }
 
 .owners-path-editor-table div.error-display {
-  width: 200px;
   padding: 4px 12px 0;
 }
 
 .owners-path-editor-table div.validating {
   color: #666666;
 }
 
 .owners-path-editor-table div.invalid {
   color: #aa0000;
 }
 
 .owners-path-editor-table div.valid {
   color: #00aa00;
   font-weight: bold;
 }
diff --git a/webroot/rsrc/css/core/remarkup.css b/webroot/rsrc/css/core/remarkup.css
index dcc5b277d0..56da414ca8 100644
--- a/webroot/rsrc/css/core/remarkup.css
+++ b/webroot/rsrc/css/core/remarkup.css
@@ -1,451 +1,460 @@
 /**
  * @provides phabricator-remarkup-css
  */
 
 .phabricator-remarkup {
   line-height: 1.45em;
 }
 
 .phabricator-remarkup p {
   margin: 0 0 1em;
 }
 
 .phabricator-remarkup p:last-child {
   margin-bottom: 0;
 }
 
 .phabricator-remarkup .remarkup-code-block {
   margin: 1em 2em;
   white-space: pre;
   font-family: "Monaco", monospace;
   font-size: 10px;
 }
 
 .phabricator-remarkup .remarkup-code-header {
   padding: .25em 1em;
   background: #edead7;
   color: #444444;
 }
 
 .phabricator-remarkup .remarkup-code-block pre {
   background: #fdfae7;
   border: 1px solid #f5e178;
   display: block;
   color: #000000;
   overflow: auto;
   padding: .5em 1em;
   font-family: "Monaco", monospace;
 }
 
 .phabricator-remarkup pre.remarkup-counterexample {
   border: 1px solid #aa0000;
   background-color: #ffaaaa;
 }
 
 .phabricator-remarkup tt {
   color: #333333;
   background: #ebebeb;
   padding: 0 .25em;
   white-space: pre-wrap;
 }
 
 /* NOTE: You can currently produce this with [[link | `name`]]. Restore the
    link color. */
 .phabricator-remarkup a tt {
   color: #18559d;
 }
 
 .phabricator-remarkup ul {
   list-style: disc;
   margin: 1em 0 1em 3em;
 }
 
 .phabricator-remarkup ol {
   list-style: decimal;
   margin: 1em 0 1em 3em;
 }
 
 .phabricator-remarkup ul ol,
 .phabricator-remarkup ul ul,
 .phabricator-remarkup ol ol,
 .phabricator-remarkup ol ul {
   margin: .25em 0 .25em 2em;
 }
 
 .phabricator-remarkup li.phantom-item,
 .phabricator-remarkup li.phantom-item {
   list-style-type: none;
 }
 
 .phabricator-remarkup h1:first-child,
 .phabricator-remarkup h2:first-child,
 .phabricator-remarkup h3:first-child,
 .phabricator-remarkup h4:first-child,
 .phabricator-remarkup h5:first-child,
 .phabricator-remarkup h6:first-child {
   margin-top: 0;
 }
 
 .phabricator-remarkup h1:last-child,
 .phabricator-remarkup h2:last-child,
 .phabricator-remarkup h3:last-child,
 .phabricator-remarkup h4:last-child,
 .phabricator-remarkup h5:last-child,
 .phabricator-remarkup h6:last-child {
   margin-bottom: 0;
 }
 
 .phabricator-remarkup h1 {
   font-size: 1.625em;
   line-height: 1.625em;
   margin: .8em 0;
 }
 
 .phabricator-remarkup h2 {
   font-size: 1.5em;
   line-height: 1.5em;
   margin: .75em 0;
 }
 
 .phabricator-remarkup h3 {
   font-size: 1.375em;
   line-height: 1.375em;
   margin: .69em 0;
 }
 
 .phabricator-remarkup h4 {
   font-size: 1.25em;
   line-height: 1.25em;
   margin: .63em 0;
 }
 
 .phabricator-remarkup h5 {
   font-size: 1.125em;
   line-height: 1.125em;
   margin: .56em 0;
 }
 
 .phabricator-remarkup h6 {
   font-size: 1em;
   line-height: 1em;
   margin: .5em 0;
 }
 
 .phabricator-remarkup blockquote {
   border-left: 1px solid #AAAAAA;
   color:       #333333;
   font-style:  italic;
   margin:      .5em 0em;
   padding:     .25em 1em;
 }
 
 .phabricator-remarkup blockquote em {
   font-style: normal;
 }
 
 .phabricator-remarkup img.remarkup-proxy-image {
   max-width: 640px;
   max-height: 640px;
 }
 
 .phabricator-remarkup-mention-exists {
   font-weight: bold;
   background: #e6f3ff;
 }
 
 .phabricator-remarkup-mention-disabled {
   font-weight: bold;
   background: #dddddd;
 }
 
 .aphront-panel-preview .phabricator-remarkup-mention-unknown {
   font-weight: bold;
   background: #ffaaaa;
 }
 
 .phabricator-remarkup .remarkup-note {
   margin: 1em 1.5em;
   padding: 0.5em 1em;
   border: 1px solid #ddddff;
   background: #f3f3ff;
 }
 
 .phabricator-remarkup-toc {
   float: right;
   border: 1px solid #d7d7d7;
   background: #f7f7f7;
   padding: 4px 12px;
   width: 180px;
   margin: 0 0 5px 10px;
 }
 
 .phabricator-remarkup-toc-header {
   font-size: 11px;
   color: #777;
   border-bottom: 1px solid #d7d7d7;
   margin-bottom: 4px;
 }
 
 .phabricator-remarkup-toc ul {
   padding: 0;
   margin: 0;
   list-style: none;
   overflow: hidden;
 }
 
 .phabricator-remarkup-toc ul ul {
   margin: 0 0 0 10px;
 }
 
 .phabricator-remarkup-toc ul li {
   padding: 0;
   margin: 0;
   font-size: 11px;
 }
 
 .phabricator-remarkup-embed-layout-right {
   text-align: right;
 }
 
 .phabricator-remarkup-embed-layout-center {
   text-align: center;
 }
 
 .phabricator-remarkup-embed-layout-inline {
   display: inline;
 }
 
 .phabricator-remarkup-embed-float-right {
   float: right;
   margin: .5em 1em 0;
 }
 
 .phabricator-remarkup-embed-layout-link {
   padding-left: 20px;
   background: url(/rsrc/image/icon/fatcow/page_white_put.png) 0 0 no-repeat;
 }
 
 .phabricator-remarkup-embed-float-left {
   float: left;
   margin: .5em 1em 0;
 }
 
 .phabricator-remarkup-embed-image {
   display: inline-block;
   border: 3px solid white;
   box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.20);
 }
 
 .phabricator-remarkup table.remarkup-table {
   border-collapse:  separate;
   border-spacing:   1px;
   background:       #d3d3d3;
   margin:           1em;
 }
 
 .phabricator-remarkup table.remarkup-table th {
   font-weight: bold;
   padding: 3px 6px;
   background: #e3e3e3;
 }
 
 .phabricator-remarkup table.remarkup-table td {
   background: #ffffff;
   padding: 3px 6px;
 }
 
 
 .remarkup-assist-textarea {
-  border-width: 1px;
-  border-color: #e5e5e5 #999999 #999999;
+  border-left-color: #96A6C5;
+  border-right-color: #96A6C5;
+  border-bottom-color: #96A6C5;
+  border-top-color: #c9d4e9;
+  border-radius: 0;
 
   /* Prevent Safari and Chrome users from dragging the textarea any wider,
      because the top bar won't resize along with it. */
   resize: vertical;
 }
 
+.remarkup-assist-textarea:focus {
+  border: 1px solid rgba(82, 168, 236, 0.8);
+}
+
 .remarkup-assist-bar {
   height: 27px;
   padding: 0 2px;
 
   border-width: 1px 1px 0;
   border-style: solid;
-  border-color: #737373 #999999;
+  border-top-color: #96A6C5;
+  border-left-color: #96A6C5;
+  border-right-color: #96A6C5;
 
   background: #f5f5f5;
   overflow: hidden;
 }
 
 .remarkup-assist-button {
   display: block;
   padding: 3px;
   margin: 2px 1px;
   float: left;
 
   border: 1px solid transparent;
   border-radius: 2px;
 }
 
 .remarkup-assist-button:hover {
   background: #f7f7f7;
   border-color: #c6c6c6;
   box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.10);
 }
 
 .remarkup-assist-button:active {
   outline: none;
   background: #f3f3f3;
   box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.10);
 }
 
 .remarkup-assist-button:focus {
   outline: none;
 }
 
 .remarkup-assist-separator {
   display: block;
   float: left;
 
   margin: 7px 4px;
   height: 14px;
 
   width: 0px;
   border-right: 1px solid #cccccc;
 }
 
 .remarkup-assist {
   display: block;
   width: 14px;
   height: 14px;
   overflow: hidden;
 }
 
 .remarkup-assist-right {
   float: right;
 }
 
 .jx-order-mask {
   background: #ffffff;
   opacity: 1.0;
 }
 
 .remarkup-control-order-mode {
   position: fixed;
   top: -1px;
   bottom: -1px;
   left: -1px;
   right: -1px;
 }
 
 .remarkup-control-order-mode textarea.remarkup-assist-textarea {
   position: absolute;
   top: 26px;
   left: 0;
   right: 0;
   bottom: 0;
   /* NOTE: This doesn't work in Firefox, there's a JS behavior to correct it. */
   height: auto;
   border-width: 1px 0 0 0;
   outline: none;
 }
 
 .remarkup-control-chaos-mode textarea.remarkup-assist-textarea {
   position: relative;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-0
   textarea.remarkup-assist-textarea {
   background-image: url(/rsrc/image/checker_light.png);
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-1
   textarea.remarkup-assist-textarea {
   font-family: "Comic Sans", "Comic Sans MS";
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-2
   textarea.remarkup-assist-textarea {
   left: -6px;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-3
   textarea.remarkup-assist-textarea {
   top: -4px;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-4
   textarea.remarkup-assist-textarea {
   direction: rtl;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-5
   textarea.remarkup-assist-textarea {
   border: 8px ridge #666666;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-6
   textarea.remarkup-assist-textarea {
   opacity: 0.5;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-7
   textarea.remarkup-assist-textarea {
   border-radius: 24px;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-8
   textarea.remarkup-assist-textarea {
   font-weight: bold;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-9
   textarea.remarkup-assist-textarea {
   font-variant: small-caps;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-10
   textarea.remarkup-assist-textarea {
   text-transform: uppercase;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-11
   textarea.remarkup-assist-textarea {
   letter-spacing: 6px;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-12
   textarea.remarkup-assist-textarea {
   font-size: 16px;
 }
 
 .remarkup-control-chaos-mode.remarkup-control-chaos-mode-13
   textarea.remarkup-assist-textarea {
   transform: rotate(3deg);
   -webkit-transform: rotate(3deg);
 }
 
 .phabricator-image-macro-hero {
   margin: auto;
   max-width: 95%;
 }
 
 /* phabricator-remarkup-dark assumes a dark backround with light text,
    so here are custom rules to override remarkup defaults. */
 
 div.phabricator-remarkup-dark blockquote {
   color: #999;
 }
 
 div.phabricator-remarkup-dark tt {
   color: #EEE;
   background: #444;
 }
 
 div.phabricator-remarkup-dark .remarkup-note,
 div.phabricator-remarkup-dark table {
   color: #000;
 }
 
 div.phabricator-remarkup-dark hr {
   border-color: #555;
 }
diff --git a/webroot/rsrc/css/layout/phabricator-form-view.css b/webroot/rsrc/css/layout/phabricator-form-view.css
index 67dd275724..4a87d5a85c 100644
--- a/webroot/rsrc/css/layout/phabricator-form-view.css
+++ b/webroot/rsrc/css/layout/phabricator-form-view.css
@@ -1,44 +1,48 @@
 /**
  * @provides phabricator-form-view-css
  */
 
 .phabricator-form-view {
-  padding: .75em;
-  background: #f9f9f9;
+  padding: 20px;
+  background: #f4f5f8;
   border-width: 1px 0;
   border-style: solid;
-  border-color: #dbdbdb;
+  border-color: rgb(199, 201, 214);
+}
+
+.device-phone .phabricator-form-view {
+  padding: 10px 5px 10px 10px;
 }
 
 .device .phabricator-form-view .aphront-form-control .aphront-form-label {
   display: block;
   float: none;
   text-align: left;
   margin: 0;
   padding: 0;
 }
 
 .device .phabricator-form-view .aphront-form-control .aphront-form-caption {
   display: block;
   float: none;
   text-align: left;
   margin: 0;
   padding: 0;
 }
 
 .device .phabricator-form-view .aphront-form-control .aphront-form-input {
   float: none;
   display: block;
   text-align: left;
   margin: .25em 0 0 0;
   width: 99%;
   padding: 0;
 }
 
 .device .phabricator-form-view .aphront-form-control .aphront-form-error {
   float: none;
   text-align: left;
   display: block;
   margin: 0;
   padding: 0;
 }
diff --git a/webroot/rsrc/css/phui/phui-form.css b/webroot/rsrc/css/phui/phui-form.css
new file mode 100644
index 0000000000..4c9a3124ed
--- /dev/null
+++ b/webroot/rsrc/css/phui/phui-form.css
@@ -0,0 +1,126 @@
+/**
+ * @provides phui-form-css
+ */
+
+select,
+textarea,
+input[type="text"],
+input[type="password"],
+input[type="datetime"],
+input[type="datetime-local"],
+input[type="date"],
+input[type="month"],
+input[type="time"],
+input[type="week"],
+input[type="number"],
+input[type="email"],
+input[type="url"],
+input[type="search"],
+input[type="tel"],
+input[type="color"],
+div.jx-tokenizer-container {
+  display: inline-block;
+  height: 28px;
+  line-height: 18px;
+  color: #555555;
+  vertical-align: middle;
+  font: 13px 'Helvetica Neue', Arial, sans-serif;
+}
+
+textarea,
+input[type="text"],
+input[type="password"],
+input[type="datetime"],
+input[type="datetime-local"],
+input[type="date"],
+input[type="month"],
+input[type="time"],
+input[type="week"],
+input[type="number"],
+input[type="email"],
+input[type="url"],
+input[type="search"],
+input[type="tel"],
+input[type="color"],
+div.jx-tokenizer-container {
+  padding: 4px 6px;
+  background-color: #ffffff;
+  border: 1px solid #96A6C5;
+
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+
+  -webkit-transition: border linear .05s, box-shadow linear .05s;
+  -moz-transition: border linear .05s, box-shadow linear .05s;
+  -o-transition: border linear .05s, box-shadow linear .05s;
+  transition: border linear .05s, box-shadow linear .05s;
+
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+
+textarea:focus,
+input[type="text"]:focus,
+input[type="password"]:focus,
+input[type="datetime"]:focus,
+input[type="datetime-local"]:focus,
+input[type="date"]:focus,
+input[type="month"]:focus,
+input[type="time"]:focus,
+input[type="week"]:focus,
+input[type="number"]:focus,
+input[type="email"]:focus,
+input[type="url"]:focus,
+input[type="search"]:focus,
+input[type="tel"]:focus,
+input[type="color"]:focus,
+div.jx-tokenizer-container-focused {
+  border-color: rgba(82, 168, 236, 0.8);
+  outline: 0;
+  outline: thin dotted \9;
+  /* IE6-9 */
+
+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
+  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
+  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
+}
+input[type="radio"],
+input[type="checkbox"] {
+  margin: 4px 0 0;
+  margin-top: 1px \9;
+  /* IE8-9 */
+  line-height: normal;
+}
+
+select {
+  height: 24px;
+  line-height: 24px;
+  border: 1px solid #a1a5a9;
+  background-color: #ffffff;
+}
+select[multiple],
+select[size] {
+  height: auto;
+}
+select:focus,
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+  outline: thin dotted #333;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+input:-moz-placeholder,
+textarea:-moz-placeholder {
+  color: #999999;
+}
+input:-ms-input-placeholder,
+textarea:-ms-input-placeholder {
+  color: #999999;
+}
+input::-webkit-input-placeholder,
+textarea::-webkit-input-placeholder {
+  color: #999999;
+}
diff --git a/webroot/rsrc/js/application/herald/HeraldRuleEditor.js b/webroot/rsrc/js/application/herald/HeraldRuleEditor.js
index 1cf534e2f1..f036e330c7 100644
--- a/webroot/rsrc/js/application/herald/HeraldRuleEditor.js
+++ b/webroot/rsrc/js/application/herald/HeraldRuleEditor.js
@@ -1,366 +1,366 @@
 /**
  * @requires multirow-row-manager
  *           javelin-install
  *           javelin-typeahead
  *           javelin-util
  *           javelin-dom
  *           javelin-tokenizer
  *           javelin-typeahead-preloaded-source
  *           javelin-stratcom
  *           javelin-json
  *           phabricator-prefab
  * @provides herald-rule-editor
  * @javelin
  */
 
 JX.install('HeraldRuleEditor', {
   construct : function(config) {
     var root = JX.$(config.root);
     this._root = root;
 
     JX.DOM.listen(
       root,
       'click',
       'create-condition',
       JX.bind(this, this._onnewcondition));
 
     JX.DOM.listen(
       root,
       'click',
       'create-action',
       JX.bind(this, this._onnewaction));
 
     JX.DOM.listen(root, 'change', null, JX.bind(this, this._onchange));
     JX.DOM.listen(root, 'submit', null, JX.bind(this, this._onsubmit));
 
     var conditionsTable = JX.DOM.find(root, 'table', 'rule-conditions');
     var actionsTable = JX.DOM.find(root, 'table', 'rule-actions');
 
     this._conditionsRowManager = new JX.MultirowRowManager(conditionsTable);
     this._conditionsRowManager.listen(
       'row-removed',
       JX.bind(this, function(row_id) {
           delete this._config.conditions[row_id];
         }));
 
     this._actionsRowManager = new JX.MultirowRowManager(actionsTable);
     this._actionsRowManager.listen(
       'row-removed',
       JX.bind(this, function(row_id) {
           delete this._config.actions[row_id];
         }));
 
     this._conditionGetters = {};
     this._conditionTypes = {};
     this._actionGetters = {};
     this._actionTypes = {};
 
     this._config = config;
 
     var conditions = this._config.conditions;
     this._config.conditions = [];
 
     var actions = this._config.actions;
     this._config.actions = [];
 
     this._renderConditions(conditions);
     this._renderActions(actions);
   },
 
   members : {
     _config : null,
     _root : null,
     _conditionGetters : null,
     _conditionTypes : null,
     _actionGetters : null,
     _actionTypes : null,
     _conditionsRowManager : null,
     _actionsRowManager : null,
 
     _onnewcondition : function(e) {
       this._newCondition();
       e.kill();
     },
     _onnewaction : function(e) {
       this._newAction();
       e.kill();
     },
     _onchange : function(e) {
       var target = e.getTarget();
 
       var row = e.getNode(JX.MultirowRowManager.getRowSigil());
       if (!row) {
         // Changing the "when all of / any of these..." dropdown.
         return;
       }
 
       if (JX.Stratcom.hasSigil(target, 'field-select')) {
         this._onfieldchange(row);
       } else if (JX.Stratcom.hasSigil(target, 'condition-select')) {
         this._onconditionchange(row);
       } else if (JX.Stratcom.hasSigil(target, 'action-select')) {
         this._onactionchange(row);
       }
     },
     _onsubmit : function(e) {
       var rule = JX.DOM.find(this._root, 'input', 'rule');
 
       var k;
 
       for (k in this._config.conditions) {
         this._config.conditions[k][2] = this._getConditionValue(k);
       }
 
       var acts = this._config.actions;
       for (k in this._config.actions) {
         this._config.actions[k][1] = this._getActionTarget(k);
       }
       rule.value = JX.JSON.stringify({
         conditions: this._config.conditions,
         actions: this._config.actions
       });
     },
 
     _getConditionValue : function(id) {
       if (this._conditionGetters[id]) {
         return this._conditionGetters[id]();
       }
       return this._config.conditions[id][2];
     },
 
     _getActionTarget : function(id) {
       if (this._actionGetters[id]) {
         return this._actionGetters[id]();
       }
       return this._config.actions[id][1];
     },
 
     _onactionchange : function(r) {
       var target = JX.DOM.find(r, 'select', 'action-select');
       var row_id = this._actionsRowManager.getRowID(r);
 
       this._config.actions[row_id][0] = target.value;
 
       var target_cell = JX.DOM.find(r, 'td', 'target-cell');
       var target_input = this._renderTargetInputForRow(row_id);
 
       JX.DOM.setContent(target_cell, target_input);
     },
     _onfieldchange : function(r) {
       var target = JX.DOM.find(r, 'select', 'field-select');
       var row_id = this._actionsRowManager.getRowID(r);
 
       this._config.conditions[row_id][0] = target.value;
 
       var condition_cell = JX.DOM.find(r, 'td', 'condition-cell');
       var condition_select = this._renderSelect(
         this._selectKeys(
           this._config.info.conditions,
           this._config.info.conditionMap[target.value]),
         this._config.conditions[row_id][1],
         'condition-select');
 
       JX.DOM.setContent(condition_cell, condition_select);
 
       this._onconditionchange(r);
     },
     _onconditionchange : function(r) {
       var target = JX.DOM.find(r, 'select', 'condition-select');
       var row_id = this._conditionsRowManager.getRowID(r);
 
       this._config.conditions[row_id][1] = target.value;
 
       var value_cell = JX.DOM.find(r, 'td', 'value-cell');
       var value_input = this._renderValueInputForRow(row_id);
       JX.DOM.setContent(value_cell, value_input);
     },
 
     _renderTargetInputForRow : function(row_id) {
       var action = this._config.actions[row_id];
       var type = this._config.info.targets[action[0]];
 
       var input = this._buildInput(type);
       var node = input[0];
       var get_fn = input[1];
       var set_fn = input[2];
 
       if (node) {
         JX.Stratcom.addSigil(node, 'action-target');
       }
 
       var old_type = this._actionTypes[row_id];
       if (old_type == type || !old_type) {
         set_fn(this._getActionTarget(row_id));
       }
 
       this._actionTypes[row_id] = type;
       this._actionGetters[row_id] = get_fn;
 
       return node;
     },
 
     _buildInput : function(type) {
       var input;
       var get_fn;
       var set_fn;
       switch (type) {
         case 'rule':
           input = this._renderSelect(this._config.template.rules);
           get_fn = function() { return input.value; };
           set_fn = function(v) { input.value = v; };
           break;
         case 'email':
         case 'user':
         case 'repository':
         case 'tag':
         case 'package':
         case 'project':
           var tokenizer = this._newTokenizer(type);
           input = tokenizer[0];
           get_fn = tokenizer[1];
           set_fn = tokenizer[2];
           break;
         case 'none':
           input = '';
           get_fn = JX.bag;
           set_fn = JX.bag;
           break;
         case 'flagcolor':
           input = this._renderSelect(this._config.template.colors);
           get_fn = function() { return input.value; };
           set_fn = function(v) { input.value = v; };
           set_fn(this._config.template.defaultColor);
           break;
         default:
-          input = JX.$N('input');
+          input = JX.$N('input', {type: 'text'});
           get_fn = function() { return input.value; };
           set_fn = function(v) { input.value = v; };
           break;
       }
 
       return [input, get_fn, set_fn];
     },
 
     _renderValueInputForRow : function(row_id) {
       var cond = this._config.conditions[row_id];
       var type = this._config.info.values[cond[0]][cond[1]];
 
       var input = this._buildInput(type);
       var node = input[0];
       var get_fn = input[1];
       var set_fn = input[2];
 
       if (node) {
         JX.Stratcom.addSigil(node, 'condition-value');
       }
 
       var old_type = this._conditionTypes[row_id];
       if (old_type == type || !old_type) {
         set_fn(this._getConditionValue(row_id));
       }
 
       this._conditionTypes[row_id] = type;
       this._conditionGetters[row_id] = get_fn;
 
       return node;
     },
 
     _newTokenizer : function(type, limit) {
       var template = JX.$N(
         'div',
         JX.$H(this._config.template.markup));
       template = template.firstChild;
       template.id = '';
 
       var datasource = new JX.TypeaheadPreloadedSource(
         this._config.template.source[type]);
 
       var typeahead = new JX.Typeahead(template);
       typeahead.setDatasource(datasource);
 
       var tokenizer = new JX.Tokenizer(template);
       tokenizer.setLimit(limit);
       tokenizer.setTypeahead(typeahead);
       tokenizer.start();
 
       return [
         template,
         function() {
           return tokenizer.getTokens();
         },
         function(map) {
           for (var k in map) {
             tokenizer.addToken(k, map[k]);
           }
         }];
     },
     _selectKeys : function(map, keys) {
       var r = {};
       for (var ii = 0; ii < keys.length; ii++) {
         r[keys[ii]] = map[keys[ii]];
       }
       return r;
     },
     _renderConditions : function(conditions) {
       for (var k in conditions) {
         this._newCondition(conditions[k]);
       }
     },
     _newCondition : function(data) {
       var row = this._conditionsRowManager.addRow([]);
       var row_id = this._conditionsRowManager.getRowID(row);
       this._config.conditions[row_id] = data || [null, null, ''];
       var r = this._conditionsRowManager.updateRow(
         row_id,
         this._renderCondition(row_id));
 
       this._onfieldchange(r);
     },
     _renderCondition : function(row_id) {
       var field_select = this._renderSelect(
         this._config.info.fields,
         this._config.conditions[row_id][0],
         'field-select');
       var field_cell = JX.$N('td', {sigil: 'field-cell'}, field_select);
 
       var condition_cell = JX.$N('td', {sigil: 'condition-cell'});
       var value_cell = JX.$N('td', {className : 'value', sigil: 'value-cell'});
 
       return [field_cell, condition_cell, value_cell];
     },
     _renderActions : function(actions) {
       for (var k in actions) {
         this._newAction(actions[k]);
         delete actions[k];
       }
     },
     _newAction : function(data) {
       data = data || [];
       var temprow = this._actionsRowManager.addRow([]);
       var row_id = this._actionsRowManager.getRowID(temprow);
       this._config.actions[row_id] = data;
       var r = this._actionsRowManager.updateRow(row_id,
                                                 this._renderAction(data));
       this._onactionchange(r);
     },
     _renderAction : function(action) {
       var action_select = this._renderSelect(
         this._config.info.actions,
         action[0],
         'action-select');
       var action_cell = JX.$N('td', {sigil: 'action-cell'}, action_select);
 
       var target_cell = JX.$N(
         'td',
         {className : 'target', sigil : 'target-cell'});
 
       return [action_cell, target_cell];
     },
     _renderSelect : function(map, selected, sigil) {
       var attrs = {
         sigil : sigil
       };
       return JX.Prefab.renderSelect(map, selected, attrs);
     }
   }
 });